summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/CppDocument.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2022-10-19 13:09:57 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2022-10-24 10:07:26 +0000
commit8608386c3668169a4065f6313918469713ff649f (patch)
tree218efddb6614757fe05836059d63b661f422994c /src/libs/cplusplus/CppDocument.cpp
parent7092d8da221ba8cfb79eab994194656ec19e369d (diff)
downloadqt-creator-8608386c3668169a4065f6313918469713ff649f.tar.gz
CppEditor: Adapt include locations when renaming ui files
Fixes: QTCREATORBUG-14259 Change-Id: I5e8209338b531f0e65d85b423053bd19a8b47652 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/libs/cplusplus/CppDocument.cpp')
-rw-r--r--src/libs/cplusplus/CppDocument.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index a121594c8e..12ce8ea0cd 100644
--- a/src/libs/cplusplus/CppDocument.cpp
+++ b/src/libs/cplusplus/CppDocument.cpp
@@ -784,15 +784,31 @@ QSet<QString> Snapshot::allIncludesForDocument(const QString &fileName) const
return result;
}
-QList<Snapshot::IncludeLocation> Snapshot::includeLocationsOfDocument(const QString &fileName) const
-{
+QList<Snapshot::IncludeLocation> Snapshot::includeLocationsOfDocument(
+ const QString &fileNameOrPath) const
+{
+ const bool matchFullPath = Utils::FilePath::fromString(fileNameOrPath).isAbsolutePath();
+ const auto isMatch = [&](const Document::Include &include) {
+ if (matchFullPath)
+ return include.resolvedFileName() == fileNameOrPath;
+ return Utils::FilePath::fromString(include.resolvedFileName()).fileName() == fileNameOrPath;
+ };
QList<IncludeLocation> result;
for (const_iterator cit = begin(), citEnd = end(); cit != citEnd; ++cit) {
const Document::Ptr doc = cit.value();
const QList<Document::Include> includeFiles = doc->resolvedIncludes();
+ bool foundMatch = false;
for (const Document::Include &includeFile : includeFiles) {
- if (includeFile.resolvedFileName() == fileName)
+ if (isMatch(includeFile)) {
+ foundMatch = true;
result.push_back({doc, includeFile.line()});
+ }
+ }
+ if (!matchFullPath && !foundMatch) {
+ for (const auto &includeFile : cit.value()->unresolvedIncludes()) {
+ if (includeFile.unresolvedFileName() == fileNameOrPath)
+ result.push_back({doc, includeFile.line()});
+ }
}
}
return result;