diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index 2ae47b1143c34928bcf07ce3f0c88d917ae231bb..c08b639e47f8b4bbdb49249650322838dde207be 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -261,13 +261,16 @@ static int commonStringLength(const QString &s1, const QString &s2) QString CppToolsPlugin::correspondingHeaderOrSourceI(const QString &fileName) const { + const QFileInfo fi(fileName); + if (m_headerSourceMapping.contains(fi.absoluteFilePath())) + return m_headerSourceMapping.value(fi.absoluteFilePath()); + const Core::ICore *core = Core::ICore::instance(); const Core::MimeDatabase *mimeDatase = core->mimeDatabase(); ProjectExplorer::ProjectExplorerPlugin *explorer = ProjectExplorer::ProjectExplorerPlugin::instance(); ProjectExplorer::Project *project = (explorer ? explorer->currentProject() : 0); - const QFileInfo fi(fileName); const FileType type = fileType(mimeDatase, fi); if (debug) @@ -298,8 +301,11 @@ QString CppToolsPlugin::correspondingHeaderOrSourceI(const QString &fileName) co // Try to find a file in the same directory first foreach (const QString &candidateFileName, candidateFileNames) { const QFileInfo candidateFi(absoluteDir, candidateFileName); - if (candidateFi.isFile()) + if (candidateFi.isFile()) { + m_headerSourceMapping[fi.absoluteFilePath()] = candidateFi.absoluteFilePath(); + m_headerSourceMapping[candidateFi.absoluteFilePath()] = fi.absoluteFilePath(); return candidateFi.absoluteFilePath(); + } } // Find files in the project @@ -320,6 +326,8 @@ QString CppToolsPlugin::correspondingHeaderOrSourceI(const QString &fileName) co if (!bestFileName.isEmpty()) { const QFileInfo candidateFi(bestFileName); Q_ASSERT(candidateFi.isFile()); + m_headerSourceMapping[fi.absoluteFilePath()] = candidateFi.absoluteFilePath(); + m_headerSourceMapping[candidateFi.absoluteFilePath()] = fi.absoluteFilePath(); return candidateFi.absoluteFilePath(); } } diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index cd0ef75b59fe4ae722684d2d83f0e7f2f354d3c4..28088e6df5a9a5ef713c368630ce11665e82d200 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -44,6 +44,7 @@ #include <QtCore/QFutureInterface> #include <QtCore/QPointer> #include <QtCore/QFutureWatcher> +#include <QtCore/QHash> QT_BEGIN_NAMESPACE class QFileInfo; @@ -97,6 +98,7 @@ private: CppModelManager *m_modelManager; QSharedPointer<CppFileSettings> m_fileSettings; CppToolsSettings *m_settings; + mutable QHash<QString, QString> m_headerSourceMapping; }; } // namespace Internal