diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index fc641a5f09dc0490cd6ef647690a1de9f675edb8..82279e4e0132374a11ac2bf42d1931f385e213cd 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -38,7 +38,6 @@ #include <coreplugin/iversioncontrol.h> #include <coreplugin/vcsmanager.h> #include <cpptools/cpptoolsconstants.h> -#include <projectexplorer/nodesvisitor.h> #include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> @@ -286,6 +285,18 @@ QVector<QmakePriFile *> QmakePriFile::children() const return m_children; } +QmakePriFile *QmakePriFile::findPriFile(const FileName &fileName) +{ + if (fileName == filePath()) + return this; + for (QmakePriFile *n : children()) { + if (QmakePriFile *result = n->findPriFile(fileName)) + return result; + } + return nullptr; + +} + void QmakePriFile::makeEmpty() { qDeleteAll(m_children); @@ -1113,40 +1124,9 @@ static ProjectType proFileTemplateTypeToProjectType(ProFileEvaluator::TemplateTy } } -namespace { - // feed all files accepted by any of the factories to the callback. - class FindGeneratorSourcesVisitor : public NodesVisitor - { - public: - FindGeneratorSourcesVisitor( - const QList<ProjectExplorer::ExtraCompilerFactory *> &factories, - std::function<void(FileNode *, ProjectExplorer::ExtraCompilerFactory *)> callback) : - factories(factories), callback(callback) {} - - void visitFolderNode(FolderNode *folderNode) final - { - foreach (FileNode *fileNode, folderNode->fileNodes()) { - foreach (ProjectExplorer::ExtraCompilerFactory *factory, factories) { - if (factory->sourceType() == fileNode->fileType()) - callback(fileNode, factory); - } - } - } - - const QList<ProjectExplorer::ExtraCompilerFactory *> factories; - std::function<void(FileNode *, ProjectExplorer::ExtraCompilerFactory *)> callback; - }; -} - -QmakeProFile *QmakeProFile::findProFileFor(const FileName &fileName) const +QmakeProFile *QmakeProFile::findProFile(const FileName &fileName) { - if (fileName == filePath()) - return const_cast<QmakeProFile *>(this); - foreach (const QmakePriFile *n, children()) - if (auto qmakeProFileNode = dynamic_cast<const QmakeProFile *>(n)) - if (QmakeProFile *result = qmakeProFileNode->findProFileFor(fileName)) - return result; - return nullptr; + return dynamic_cast<QmakeProFile *>(findPriFile(fileName)); } QString QmakeProFile::makefile() const diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 8bc5fdfbf709913e50e1ed3143e28805431dff6e..86fbd97e8375b2ff0406ce5526b0a74739643013 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -119,6 +119,9 @@ public: QmakePriFile *parent() const; QmakeProject *project() const; QVector<QmakePriFile *> children() const; + + QmakePriFile *findPriFile(const Utils::FileName &fileName); + void makeEmpty(); QSet<Utils::FileName> files(const ProjectExplorer::FileType &type) const; @@ -216,7 +219,7 @@ private: // Memory is cheap... QMap<ProjectExplorer::FileType, QSet<Utils::FileName>> m_files; - QSet<Utils::FileName> m_recursiveEnumerateFiles; + QSet<Utils::FileName> m_recursiveEnumerateFiles; // FIXME: Remove this?! QSet<QString> m_watchedFolders; bool m_includedInExactParse = true; @@ -277,6 +280,7 @@ public: QString displayName() const final; QList<QmakeProFile *> allProFiles(); + QmakeProFile *findProFile(const Utils::FileName &fileName); ProjectType projectType() const; @@ -294,7 +298,6 @@ public: const Utils::FileName &sourceFile) const; QList<ProjectExplorer::ExtraCompiler *> extraCompilers() const; - QmakeProFile *findProFileFor(const Utils::FileName &string) const; TargetParserInformation targetInformation() const; InstallsParserList installsList() const; @@ -333,8 +336,6 @@ private: void asyncEvaluate(QFutureInterface<Internal::QmakeEvalResult *> &fi, Internal::QmakeEvalInput input); void cleanupProFileReaders(); - using VariablesHash = QHash<Variable, QStringList>; - void updateGeneratedFiles(const Utils::FileName &buildDir); static QString uiDirPath(QtSupport::ProFileReader *reader, const Utils::FileName &buildDir); @@ -352,7 +353,10 @@ private: QString m_displayName; ProjectType m_projectType = ProjectType::Invalid; + + using VariablesHash = QHash<Variable, QStringList>; VariablesHash m_varValues; + QList<ProjectExplorer::ExtraCompiler *> m_extraCompilers; TargetParserInformation m_qmakeTargetInformation;