C++: Add support for prefixes in switch header/source

Task-number: QTCREATORBUG-11031

Change-Id: I93cce0ebf46984eb06094e1f1519717be2bbaa79
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
Orgad Shaneh
2014-01-20 09:15:50 +02:00
committed by Petar Perisin
parent 4eff289e03
commit 1fd576c1f6
6 changed files with 115 additions and 10 deletions

View File

@@ -106,6 +106,17 @@ const QStringList &CppToolsPlugin::sourceSearchPaths()
return m_instance->m_fileSettings->sourceSearchPaths;
}
const QStringList &CppToolsPlugin::headerPrefixes()
{
return m_instance->m_fileSettings->headerPrefixes;
}
const QStringList &CppToolsPlugin::sourcePrefixes()
{
return m_instance->m_fileSettings->sourcePrefixes;
}
bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
{
Q_UNUSED(arguments)
@@ -256,6 +267,28 @@ static QStringList baseNameWithAllSuffixes(const QString &baseName, const QStrin
return result;
}
static QStringList baseNamesWithAllPrefixes(const QStringList &baseNames, bool isHeader)
{
QStringList result;
const QStringList &sourcePrefixes = m_instance->sourcePrefixes();
const QStringList &headerPrefixes = m_instance->headerPrefixes();
foreach (const QString &name, baseNames) {
foreach (const QString &prefix, isHeader ? headerPrefixes : sourcePrefixes) {
if (name.startsWith(prefix)) {
QString nameWithoutPrefix = name.mid(prefix.size());
result += nameWithoutPrefix;
foreach (const QString &prefix, isHeader ? sourcePrefixes : headerPrefixes)
result += prefix + nameWithoutPrefix;
}
}
foreach (const QString &prefix, isHeader ? sourcePrefixes : headerPrefixes)
result += prefix + name;
}
return result;
}
static QStringList baseDirWithAllDirectories(const QDir &baseDir, const QStringList &directories)
{
QStringList result;
@@ -346,6 +379,8 @@ QString correspondingHeaderOrSource(const QString &fileName, bool *wasHeader)
: m_instance->headerSearchPaths();
candidateDirs += baseDirWithAllDirectories(absoluteDir, searchPaths);
candidateFileNames += baseNamesWithAllPrefixes(candidateFileNames, isHeader);
// Try to find a file in the same or sibling directories first
foreach (const QString &candidateDir, candidateDirs) {
foreach (const QString &candidateFileName, candidateFileNames) {