From 1fd576c1f6fdb96e7c65b7c6fde724e46cee43b2 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 20 Jan 2014 09:15:50 +0200 Subject: C++: Add support for prefixes in switch header/source Task-number: QTCREATORBUG-11031 Change-Id: I93cce0ebf46984eb06094e1f1519717be2bbaa79 Reviewed-by: Orgad Shaneh Reviewed-by: Erik Verbruggen --- src/plugins/cpptools/cpptoolsplugin.cpp | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/plugins/cpptools/cpptoolsplugin.cpp') diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index 8dc5e4c95e..e469471245 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -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) { -- cgit v1.2.1