From 038771051d62824368ae94b73e07c1b5ae62cec4 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 23 Nov 2022 17:11:20 +0100 Subject: [PATCH] CppEditor: Switch to FilePath in IndexItem ... and fix fallout. Change-Id: I45d27146806bdcb5ceb728b710eca51c7cd32ee2 Reviewed-by: Christian Stenger --- src/libs/cplusplus/CppDocument.h | 3 +-- src/plugins/clangcodemodel/clangdlocatorfilters.cpp | 5 ++--- src/plugins/cppeditor/cppcurrentdocumentfilter.cpp | 3 +-- src/plugins/cppeditor/cpplocatorfilter.cpp | 8 +++----- src/plugins/cppeditor/cppmodelmanager.cpp | 12 ++++-------- src/plugins/cppeditor/cppquickfixes.cpp | 12 ++++++------ src/plugins/cppeditor/cpptoolsjsextension.cpp | 11 +++++------ src/plugins/cppeditor/indexitem.cpp | 10 +++++----- src/plugins/cppeditor/indexitem.h | 6 ++++-- src/plugins/cppeditor/searchsymbols.cpp | 2 +- src/plugins/cppeditor/symbolsfindfilter.cpp | 4 +--- src/plugins/modeleditor/elementtasks.cpp | 2 +- 12 files changed, 34 insertions(+), 44 deletions(-) diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index ecdf7307d0c..ed5f672a63d 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -409,8 +409,7 @@ public: QList includeLocationsOfDocument(const QString &fileNameOrPath) const; Utils::FilePaths filesDependingOn(const Utils::FilePath &fileName) const; - Utils::FilePaths filesDependingOn(const QString &fileName) const - { return filesDependingOn(Utils::FilePath::fromString(fileName)); } + void updateDependencyTable() const; void updateDependencyTable(QFutureInterfaceBase &futureInterface) const; diff --git a/src/plugins/clangcodemodel/clangdlocatorfilters.cpp b/src/plugins/clangcodemodel/clangdlocatorfilters.cpp index 9644f6b25c2..f9dbba8075d 100644 --- a/src/plugins/clangcodemodel/clangdlocatorfilters.cpp +++ b/src/plugins/clangcodemodel/clangdlocatorfilters.cpp @@ -19,6 +19,7 @@ #include using namespace LanguageServerProtocol; +using namespace Utils; namespace ClangCodeModel { namespace Internal { @@ -157,9 +158,7 @@ QList ClangGlobalSymbolFilter::matchesFor( for (const auto &entry : std::as_const(matches)) { const CppEditor::IndexItem::Ptr item = qvariant_cast(entry.internalData); - locations.insert(std::make_tuple(Utils::FilePath::fromString(item->fileName()), - item->line(), - item->column())); + locations.insert(std::make_tuple(item->filePath(), item->line(), item->column())); } for (const auto &entry : lspMatches) { if (!entry.internalData.canConvert()) diff --git a/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp b/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp index 965c5d42260..952189ab9c5 100644 --- a/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp +++ b/src/plugins/cppeditor/cppcurrentdocumentfilter.cpp @@ -112,8 +112,7 @@ void CppCurrentDocumentFilter::accept(const Core::LocatorFilterEntry &selection, Q_UNUSED(selectionStart) Q_UNUSED(selectionLength) IndexItem::Ptr info = qvariant_cast(selection.internalData); - Core::EditorManager::openEditorAt( - {Utils::FilePath::fromString(info->fileName()), info->line(), info->column()}); + Core::EditorManager::openEditorAt({info->filePath(), info->line(), info->column()}); } void CppCurrentDocumentFilter::onDocumentUpdated(Document::Ptr doc) diff --git a/src/plugins/cppeditor/cpplocatorfilter.cpp b/src/plugins/cppeditor/cpplocatorfilter.cpp index 111216cbfdc..64a46c6e35c 100644 --- a/src/plugins/cppeditor/cpplocatorfilter.cpp +++ b/src/plugins/cppeditor/cpplocatorfilter.cpp @@ -120,9 +120,7 @@ void CppLocatorFilter::accept(const Core::LocatorFilterEntry &selection, Q_UNUSED(selectionStart) Q_UNUSED(selectionLength) IndexItem::Ptr info = qvariant_cast(selection.internalData); - Core::EditorManager::openEditorAt({Utils::FilePath::fromString(info->fileName()), - info->line(), - info->column()}, + Core::EditorManager::openEditorAt({info->filePath(), info->line(), info->column()}, {}, Core::EditorManager::AllowExternalEditor); } @@ -145,7 +143,7 @@ Core::LocatorFilterEntry CppClassesFilter::filterEntryFromIndexItem(IndexItem::P filterEntry.extraInfo = info->symbolScope().isEmpty() ? info->shortNativeFilePath() : info->symbolScope(); - filterEntry.filePath = Utils::FilePath::fromString(info->fileName()); + filterEntry.filePath = info->filePath(); return filterEntry; } @@ -170,7 +168,7 @@ Core::LocatorFilterEntry CppFunctionsFilter::filterEntryFromIndexItem(IndexItem: if (extraInfo.isEmpty()) { extraInfo = info->shortNativeFilePath(); } else { - extraInfo.append(" (" + Utils::FilePath::fromString(info->fileName()).fileName() + ')'); + extraInfo.append(" (" + info->filePath().fileName() + ')'); } Core::LocatorFilterEntry filterEntry(this, name + info->symbolType(), id, info->icon()); diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp index deb97e4f121..42798d3a00f 100644 --- a/src/plugins/cppeditor/cppmodelmanager.cpp +++ b/src/plugins/cppeditor/cppmodelmanager.cpp @@ -570,15 +570,11 @@ void CppModelManager::findUnusedFunctions(const FilePath &folder) continue; } Link link; - if (entry.internalData.canConvert()) { + if (entry.internalData.canConvert()) link = qvariant_cast(entry.internalData); - } else { - const auto item = qvariant_cast(entry.internalData); - if (item) { - link = Link(FilePath::fromString(item->fileName()), item->line(), - item->column()); - } - } + else if (const auto item = qvariant_cast(entry.internalData)) + link = Link(item->filePath(), item->line(), item->column()); + if (link.hasValidTarget() && link.targetFilePath.isReadableFile() && (folder.isEmpty() || link.targetFilePath.isChildOf(folder)) && SessionManager::projectForFile(link.targetFilePath)) { diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 33819ec4455..97f0c9500a1 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -2071,17 +2071,17 @@ void AddIncludeForUndefinedIdentifier::match(const CppQuickFixInterface &interfa indexItems << info; Snapshot localForwardHeaders = forwardHeaders; - localForwardHeaders.insert(interface.snapshot().document(info->fileName())); - Utils::FilePaths headerAndItsForwardingHeaders; - headerAndItsForwardingHeaders << Utils::FilePath::fromString(info->fileName()); - headerAndItsForwardingHeaders += localForwardHeaders.filesDependingOn(info->fileName()); + localForwardHeaders.insert(interface.snapshot().document(info->filePath())); + FilePaths headerAndItsForwardingHeaders; + headerAndItsForwardingHeaders << info->filePath(); + headerAndItsForwardingHeaders += localForwardHeaders.filesDependingOn(info->filePath()); - for (const Utils::FilePath &header : std::as_const(headerAndItsForwardingHeaders)) { + for (const FilePath &header : std::as_const(headerAndItsForwardingHeaders)) { const QString include = findShortestInclude(currentDocumentFilePath, header.toString(), headerPaths); if (include.size() > 2) { - const QString headerFileName = Utils::FilePath::fromString(info->fileName()).fileName(); + const QString headerFileName = info->filePath().fileName(); QTC_ASSERT(!headerFileName.isEmpty(), break); int priority = 0; diff --git a/src/plugins/cppeditor/cpptoolsjsextension.cpp b/src/plugins/cppeditor/cpptoolsjsextension.cpp index bd9d933afa6..938f24e6f12 100644 --- a/src/plugins/cppeditor/cpptoolsjsextension.cpp +++ b/src/plugins/cppeditor/cpptoolsjsextension.cpp @@ -134,15 +134,14 @@ bool CppToolsJsExtension::hasQObjectParent(const QString &klassName) const // Find class in AST. const CPlusPlus::Snapshot snapshot = CppModelManager::instance()->snapshot(); const WorkingCopy workingCopy = CppModelManager::instance()->workingCopy(); - QByteArray source = workingCopy.source(item->fileName()); + QByteArray source = workingCopy.source(item->filePath()); if (source.isEmpty()) { - QFile file(item->fileName()); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + std::optional contents = item->filePath().fileContents(); + if (!contents) return false; - source = file.readAll(); + source = *contents; } - const auto doc = snapshot.preprocessedDocument(source, - Utils::FilePath::fromString(item->fileName())); + const auto doc = snapshot.preprocessedDocument(source, item->filePath()); if (!doc) return false; doc->check(); diff --git a/src/plugins/cppeditor/indexitem.cpp b/src/plugins/cppeditor/indexitem.cpp index b1b53d31028..8870382808f 100644 --- a/src/plugins/cppeditor/indexitem.cpp +++ b/src/plugins/cppeditor/indexitem.cpp @@ -3,7 +3,7 @@ #include "indexitem.h" -#include +using namespace Utils; namespace CppEditor { @@ -17,7 +17,7 @@ IndexItem::Ptr IndexItem::create(const QString &symbolName, const QString &symbo ptr->m_symbolType = symbolType; ptr->m_symbolScope = symbolScope; ptr->m_type = type; - ptr->m_fileName = fileName; + ptr->m_filePath = FilePath::fromString(fileName); ptr->m_line = line; ptr->m_column = column; ptr->m_icon = icon; @@ -29,7 +29,7 @@ IndexItem::Ptr IndexItem::create(const QString &fileName, int sizeHint) { Ptr ptr(new IndexItem); - ptr->m_fileName = fileName; + ptr->m_filePath = FilePath::fromString(fileName); ptr->m_type = Declaration; ptr->m_line = 0; ptr->m_column = 0; @@ -66,7 +66,7 @@ QString IndexItem::representDeclaration() const QString IndexItem::shortNativeFilePath() const { - return Utils::FilePath::fromString(m_fileName).shortNativePath(); + return m_filePath.shortNativePath(); } void IndexItem::squeeze() @@ -76,4 +76,4 @@ void IndexItem::squeeze() m_children[i]->squeeze(); } -} // CppEditor namespace +} // CppEditor diff --git a/src/plugins/cppeditor/indexitem.h b/src/plugins/cppeditor/indexitem.h index f43124c64d1..be93d1e9d2c 100644 --- a/src/plugins/cppeditor/indexitem.h +++ b/src/plugins/cppeditor/indexitem.h @@ -5,6 +5,8 @@ #include "cppeditor_global.h" +#include + #include #include #include @@ -57,7 +59,7 @@ public: QString symbolName() const { return m_symbolName; } QString symbolType() const { return m_symbolType; } QString symbolScope() const { return m_symbolScope; } - QString fileName() const { return m_fileName; } + const Utils::FilePath &filePath() const { return m_filePath; } QIcon icon() const { return m_icon; } ItemType type() const { return m_type; } int line() const { return m_line; } @@ -99,7 +101,7 @@ private: QString m_symbolName; // as found in the code, therefore might be qualified QString m_symbolType; QString m_symbolScope; - QString m_fileName; + Utils::FilePath m_filePath; QIcon m_icon; ItemType m_type = All; int m_line = 0; diff --git a/src/plugins/cppeditor/searchsymbols.cpp b/src/plugins/cppeditor/searchsymbols.cpp index 6eb143a276c..5d6711358e0 100644 --- a/src/plugins/cppeditor/searchsymbols.cpp +++ b/src/plugins/cppeditor/searchsymbols.cpp @@ -46,7 +46,7 @@ IndexItem::Ptr SearchSymbols::operator()(Document::Ptr doc, const QString &scope QTC_ASSERT(_parent, return IndexItem::Ptr()); QTC_ASSERT(root, return IndexItem::Ptr()); - QTC_ASSERT(_parent->fileName() == Internal::StringTable::insert(doc->filePath()), + QTC_ASSERT(_parent->filePath().toString() == Internal::StringTable::insert(doc->filePath()), return IndexItem::Ptr()); for (int i = 0, ei = doc->globalSymbolCount(); i != ei; ++i) diff --git a/src/plugins/cppeditor/symbolsfindfilter.cpp b/src/plugins/cppeditor/symbolsfindfilter.cpp index 2a49c56ac50..4f5a6a66df9 100644 --- a/src/plugins/cppeditor/symbolsfindfilter.cpp +++ b/src/plugins/cppeditor/symbolsfindfilter.cpp @@ -154,9 +154,7 @@ void SymbolsFindFilter::openEditor(const SearchResultItem &item) if (!item.userData().canConvert()) return; IndexItem::Ptr info = item.userData().value(); - EditorManager::openEditorAt({FilePath::fromString(info->fileName()), - info->line(), - info->column()}, + EditorManager::openEditorAt({info->filePath(), info->line(), info->column()}, {}, Core::EditorManager::AllowExternalEditor); } diff --git a/src/plugins/modeleditor/elementtasks.cpp b/src/plugins/modeleditor/elementtasks.cpp index 9438f375482..3f64785b155 100644 --- a/src/plugins/modeleditor/elementtasks.cpp +++ b/src/plugins/modeleditor/elementtasks.cpp @@ -136,7 +136,7 @@ void ElementTasks::openClassDefinition(const qmt::MElement *element) if (info->scopedSymbolName() != qualifiedClassName) continue; if (Core::EditorManager::instance()->openEditorAt( - {Utils::FilePath::fromString(info->fileName()), info->line(), info->column()})) { + {info->filePath(), info->line(), info->column()})) { return; } }