summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2020-12-17 10:24:47 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2020-12-17 11:07:06 +0000
commit265ee14c8922da3708492542802d93e7ed233654 (patch)
treea427b8a7db8c6d47d69eb82824a5de6f903dd940 /src/plugins/cpptools
parent5797b355a766e902ad7813e4d46dc9460609f86f (diff)
downloadqt-creator-265ee14c8922da3708492542802d93e7ed233654.tar.gz
Make buildDerivedTypeHierarchy() a static method
Drop CppTools namespace when being in this namespace. Move a call to filesDependingOn() into buildDerived(). Make filesDependingOn() a static method. Change-Id: I6139f87597286bddf8298b06f8cf492066c8bedd Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/cppelementevaluator.cpp16
-rw-r--r--src/plugins/cpptools/functionutils.cpp4
-rw-r--r--src/plugins/cpptools/typehierarchybuilder.cpp63
-rw-r--r--src/plugins/cpptools/typehierarchybuilder.h18
-rw-r--r--src/plugins/cpptools/typehierarchybuilder_test.cpp4
5 files changed, 49 insertions, 56 deletions
diff --git a/src/plugins/cpptools/cppelementevaluator.cpp b/src/plugins/cpptools/cppelementevaluator.cpp
index 0e739ddeab..27c6f25ad0 100644
--- a/src/plugins/cpptools/cppelementevaluator.cpp
+++ b/src/plugins/cpptools/cppelementevaluator.cpp
@@ -50,7 +50,7 @@ static void handleLookupItemMatch(QFutureInterface<QSharedPointer<CppElement>> &
const Snapshot &snapshot,
const LookupItem &lookupItem,
const LookupContext &context,
- CppTools::SymbolFinder symbolFinder,
+ SymbolFinder symbolFinder,
bool lookupBaseClasses,
bool lookupDerivedClasses);
@@ -211,13 +211,13 @@ void CppClass::lookupBases(QFutureInterfaceBase &futureInterface,
void CppClass::lookupDerived(QFutureInterfaceBase &futureInterface,
Symbol *declaration, const Snapshot &snapshot)
{
- using Data = QPair<CppClass*, CppTools::TypeHierarchy>;
+ using Data = QPair<CppClass*, TypeHierarchy>;
snapshot.updateDependencyTable(futureInterface);
if (futureInterface.isCanceled())
return;
- CppTools::TypeHierarchyBuilder builder(declaration, snapshot);
- const CppTools::TypeHierarchy &completeHierarchy = builder.buildDerivedTypeHierarchy(futureInterface);
+ const TypeHierarchy &completeHierarchy
+ = TypeHierarchyBuilder::buildDerivedTypeHierarchy(futureInterface, declaration, snapshot);
QQueue<Data> q;
q.enqueue(qMakePair(this, completeHierarchy));
@@ -226,8 +226,8 @@ void CppClass::lookupDerived(QFutureInterfaceBase &futureInterface,
return;
const Data &current = q.dequeue();
CppClass *clazz = current.first;
- const CppTools::TypeHierarchy &classHierarchy = current.second;
- foreach (const CppTools::TypeHierarchy &derivedHierarchy, classHierarchy.hierarchy()) {
+ const TypeHierarchy &classHierarchy = current.second;
+ foreach (const TypeHierarchy &derivedHierarchy, classHierarchy.hierarchy()) {
clazz->derived.append(CppClass(derivedHierarchy.symbol()));
q.enqueue(qMakePair(&clazz->derived.last(), derivedHierarchy));
}
@@ -349,7 +349,7 @@ public:
CppElementEvaluator::CppElementEvaluator(TextEditor::TextEditorWidget *editor) :
m_editor(editor),
- m_modelManager(CppTools::CppModelManager::instance()),
+ m_modelManager(CppModelManager::instance()),
m_tc(editor->textCursor()),
m_lookupBaseClasses(false),
m_lookupDerivedClasses(false)
@@ -497,7 +497,7 @@ static void handleLookupItemMatch(QFutureInterface<QSharedPointer<CppElement>> &
const Snapshot &snapshot,
const LookupItem &lookupItem,
const LookupContext &context,
- CppTools::SymbolFinder symbolFinder,
+ SymbolFinder symbolFinder,
bool lookupBaseClasses,
bool lookupDerivedClasses)
{
diff --git a/src/plugins/cpptools/functionutils.cpp b/src/plugins/cpptools/functionutils.cpp
index b19fe43958..7a13e7d26c 100644
--- a/src/plugins/cpptools/functionutils.cpp
+++ b/src/plugins/cpptools/functionutils.cpp
@@ -161,8 +161,8 @@ QList<Function *> FunctionUtils::overrides(Function *function, Class *functionsC
QTC_ASSERT(referenceName && referenceType.isValid(), return result);
// Find overrides
- TypeHierarchyBuilder builder(staticClass, snapshot);
- const TypeHierarchy &staticClassHierarchy = builder.buildDerivedTypeHierarchy();
+ const TypeHierarchy &staticClassHierarchy
+ = TypeHierarchyBuilder::buildDerivedTypeHierarchy(staticClass, snapshot);
QList<TypeHierarchy> l;
if (functionsClass != staticClass)
diff --git a/src/plugins/cpptools/typehierarchybuilder.cpp b/src/plugins/cpptools/typehierarchybuilder.cpp
index a5f05d9042..b843cd93d1 100644
--- a/src/plugins/cpptools/typehierarchybuilder.cpp
+++ b/src/plugins/cpptools/typehierarchybuilder.cpp
@@ -134,34 +134,42 @@ const QList<TypeHierarchy> &TypeHierarchy::hierarchy() const
return _hierarchy;
}
-TypeHierarchyBuilder::TypeHierarchyBuilder(CPlusPlus::Symbol *symbol, const CPlusPlus::Snapshot &snapshot)
- : _symbol(symbol)
- , _snapshot(snapshot)
-{}
-
-void TypeHierarchyBuilder::reset()
+TypeHierarchy TypeHierarchyBuilder::buildDerivedTypeHierarchy(CPlusPlus::Symbol *symbol,
+ const CPlusPlus::Snapshot &snapshot)
{
- _visited.clear();
- _candidates.clear();
+ QFutureInterfaceBase dummy;
+ return TypeHierarchyBuilder::buildDerivedTypeHierarchy(dummy, symbol, snapshot);
}
-TypeHierarchy TypeHierarchyBuilder::buildDerivedTypeHierarchy()
+TypeHierarchy TypeHierarchyBuilder::buildDerivedTypeHierarchy(QFutureInterfaceBase &futureInterface,
+ CPlusPlus::Symbol *symbol,
+ const CPlusPlus::Snapshot &snapshot)
{
- QFutureInterfaceBase dummy;
- return buildDerivedTypeHierarchy(dummy);
+ TypeHierarchy hierarchy(symbol);
+ TypeHierarchyBuilder builder;
+ builder.buildDerived(futureInterface, &hierarchy, snapshot);
+ return hierarchy;
}
-TypeHierarchy TypeHierarchyBuilder::buildDerivedTypeHierarchy(QFutureInterfaceBase &futureInterface)
+static QStringList filesDependingOn(const CPlusPlus::Snapshot &snapshot,
+ CPlusPlus::Symbol *symbol)
{
- reset();
- TypeHierarchy hierarchy(_symbol);
- buildDerived(futureInterface, &hierarchy, filesDependingOn(_symbol));
- return hierarchy;
+ QStringList deps;
+ if (!symbol)
+ return deps;
+
+ const Utils::FilePath file = Utils::FilePath::fromUtf8(symbol->fileName(), symbol->fileNameLength());
+ deps << file.toString();
+ const Utils::FilePaths filePaths = snapshot.filesDependingOn(file);
+ for (const Utils::FilePath &fileName : filePaths)
+ deps.append(fileName.toString());
+ return deps;
}
void TypeHierarchyBuilder::buildDerived(QFutureInterfaceBase &futureInterface,
TypeHierarchy *typeHierarchy,
- const QStringList &dependingFiles, int depth)
+ const CPlusPlus::Snapshot &snapshot,
+ int depth)
{
CPlusPlus::Symbol *symbol = typeHierarchy->_symbol;
if (_visited.contains(symbol))
@@ -172,6 +180,7 @@ void TypeHierarchyBuilder::buildDerived(QFutureInterfaceBase &futureInterface,
const QString &symbolName = _overview.prettyName(CPlusPlus::LookupContext::fullyQualifiedName(symbol));
DerivedHierarchyVisitor visitor(symbolName);
+ const QStringList &dependingFiles = filesDependingOn(snapshot, symbol);
if (depth == 0)
futureInterface.setProgressRange(0, dependingFiles.size());
@@ -181,37 +190,23 @@ void TypeHierarchyBuilder::buildDerived(QFutureInterfaceBase &futureInterface,
return;
if (depth == 0)
futureInterface.setProgressValue(++i);
- CPlusPlus::Document::Ptr doc = _snapshot.document(fileName);
+ CPlusPlus::Document::Ptr doc = snapshot.document(fileName);
if ((_candidates.contains(fileName) && !_candidates.value(fileName).contains(symbolName))
|| !doc->control()->findIdentifier(symbol->identifier()->chars(),
symbol->identifier()->size())) {
continue;
}
- visitor.execute(doc, _snapshot);
+ visitor.execute(doc, snapshot);
_candidates.insert(fileName, visitor.otherBases());
const QList<CPlusPlus::Symbol *> &derived = visitor.derived();
for (CPlusPlus::Symbol *s : derived) {
TypeHierarchy derivedHierarchy(s);
- buildDerived(futureInterface, &derivedHierarchy, filesDependingOn(s), depth + 1);
+ buildDerived(futureInterface, &derivedHierarchy, snapshot, depth + 1);
if (futureInterface.isCanceled())
return;
typeHierarchy->_hierarchy.append(derivedHierarchy);
}
}
}
-
-QStringList TypeHierarchyBuilder::filesDependingOn(CPlusPlus::Symbol *symbol) const
-{
- QStringList deps;
- if (!symbol)
- return deps;
-
- const Utils::FilePath file = Utils::FilePath::fromUtf8(symbol->fileName(), symbol->fileNameLength());
- deps << file.toString();
- const Utils::FilePaths filePaths = _snapshot.filesDependingOn(file);
- for (const Utils::FilePath &fileName : filePaths)
- deps.append(fileName.toString());
- return deps;
-}
diff --git a/src/plugins/cpptools/typehierarchybuilder.h b/src/plugins/cpptools/typehierarchybuilder.h
index 7633b42943..55dd68f54a 100644
--- a/src/plugins/cpptools/typehierarchybuilder.h
+++ b/src/plugins/cpptools/typehierarchybuilder.h
@@ -58,19 +58,17 @@ private:
class CPPTOOLS_EXPORT TypeHierarchyBuilder
{
public:
- TypeHierarchyBuilder(CPlusPlus::Symbol *symbol, const CPlusPlus::Snapshot &snapshot);
-
- TypeHierarchy buildDerivedTypeHierarchy();
- TypeHierarchy buildDerivedTypeHierarchy(QFutureInterfaceBase &futureInterface);
+ static TypeHierarchy buildDerivedTypeHierarchy(CPlusPlus::Symbol *symbol,
+ const CPlusPlus::Snapshot &snapshot);
+ static TypeHierarchy buildDerivedTypeHierarchy(QFutureInterfaceBase &futureInterface,
+ CPlusPlus::Symbol *symbol,
+ const CPlusPlus::Snapshot &snapshot);
private:
- void reset();
- void buildDerived(QFutureInterfaceBase &futureInterface,
- TypeHierarchy *typeHierarchy, const QStringList &dependencies, int depth = 0);
- QStringList filesDependingOn(CPlusPlus::Symbol *symbol) const;
+ TypeHierarchyBuilder() = default;
+ void buildDerived(QFutureInterfaceBase &futureInterface, TypeHierarchy *typeHierarchy,
+ const CPlusPlus::Snapshot &snapshot, int depth = 0);
- CPlusPlus::Symbol *_symbol;
- CPlusPlus::Snapshot _snapshot;
QSet<CPlusPlus::Symbol *> _visited;
QHash<QString, QSet<QString> > _candidates;
CPlusPlus::Overview _overview;
diff --git a/src/plugins/cpptools/typehierarchybuilder_test.cpp b/src/plugins/cpptools/typehierarchybuilder_test.cpp
index 0a4ac54568..70b172acf9 100644
--- a/src/plugins/cpptools/typehierarchybuilder_test.cpp
+++ b/src/plugins/cpptools/typehierarchybuilder_test.cpp
@@ -124,8 +124,8 @@ public:
QVERIFY(clazz);
// Generate and compare hierarchies
- TypeHierarchyBuilder typeHierarchyBuilder(clazz, snapshot);
- const TypeHierarchy hierarchy = typeHierarchyBuilder.buildDerivedTypeHierarchy();
+ const TypeHierarchy hierarchy
+ = TypeHierarchyBuilder::buildDerivedTypeHierarchy(clazz, snapshot);
const QString actualHierarchy = toString(hierarchy);
// Uncomment for updating/generating reference data: