diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index 4a32d255fc8..2be82ea6b47 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -163,16 +163,17 @@ ProjectInfoGenerator::ProjectInfoGenerator(const QFutureInterface &futureI ProjectInfo ProjectInfoGenerator::generate() { - m_projectInfo = ProjectInfo(m_projectUpdateInfo.project); + ProjectInfo projectInfo(m_projectUpdateInfo.project); for (const RawProjectPart &rpp : m_projectUpdateInfo.rawProjectParts) { if (m_futureInterface.isCanceled()) return ProjectInfo(); - createProjectParts(rpp); + for (ProjectPart::Ptr part : createProjectParts(rpp)) + projectInfo.appendProjectPart(part); } - return m_projectInfo; + return projectInfo; } static ProjectPart::Ptr projectPartFromRawProjectPart(const RawProjectPart &rawProjectPart, @@ -196,8 +197,9 @@ static ProjectPart::Ptr projectPartFromRawProjectPart(const RawProjectPart &rawP return part; } -void ProjectInfoGenerator::createProjectParts(const RawProjectPart &rawProjectPart) +QVector ProjectInfoGenerator::createProjectParts(const RawProjectPart &rawProjectPart) { + QVector result; ProjectFileCategorizer cat(rawProjectPart.displayName, rawProjectPart.files, rawProjectPart.fileClassifier); @@ -210,49 +212,50 @@ void ProjectInfoGenerator::createProjectParts(const RawProjectPart &rawProjectPa if (rawProjectPart.qtVersion == ProjectPart::Qt4_8_6AndOlder) defaultVersion = ProjectPart::CXX11; if (cat.hasCxxSources()) { - createProjectPart(rawProjectPart, - part, - cat.cxxSources(), - cat.partName("C++"), - defaultVersion, - ProjectPart::NoExtensions); + result << createProjectPart(rawProjectPart, + part, + cat.cxxSources(), + cat.partName("C++"), + defaultVersion, + ProjectPart::NoExtensions); } if (cat.hasObjcxxSources()) { - createProjectPart(rawProjectPart, - part, - cat.objcxxSources(), - cat.partName("Obj-C++"), - defaultVersion, - ProjectPart::ObjectiveCExtensions); + result << createProjectPart(rawProjectPart, + part, + cat.objcxxSources(), + cat.partName("Obj-C++"), + defaultVersion, + ProjectPart::ObjectiveCExtensions); } if (cat.hasCSources()) { - createProjectPart(rawProjectPart, - part, - cat.cSources(), - cat.partName("C"), - ProjectPart::LatestCVersion, - ProjectPart::NoExtensions); + result << createProjectPart(rawProjectPart, + part, + cat.cSources(), + cat.partName("C"), + ProjectPart::LatestCVersion, + ProjectPart::NoExtensions); } if (cat.hasObjcSources()) { - createProjectPart(rawProjectPart, - part, - cat.objcSources(), - cat.partName("Obj-C"), - ProjectPart::LatestCVersion, - ProjectPart::ObjectiveCExtensions); + result << createProjectPart(rawProjectPart, + part, + cat.objcSources(), + cat.partName("Obj-C"), + ProjectPart::LatestCVersion, + ProjectPart::ObjectiveCExtensions); } } + return result; } -void ProjectInfoGenerator::createProjectPart(const RawProjectPart &rawProjectPart, - const ProjectPart::Ptr &templateProjectPart, - const ProjectFiles &projectFiles, - const QString &partName, - ProjectPart::LanguageVersion languageVersion, - ProjectPart::LanguageExtensions languageExtensions) +ProjectPart::Ptr ProjectInfoGenerator::createProjectPart(const RawProjectPart &rawProjectPart, + const ProjectPart::Ptr &templateProjectPart, + const ProjectFiles &projectFiles, + const QString &partName, + ProjectPart::LanguageVersion languageVersion, + ProjectPart::LanguageExtensions languageExtensions) { ProjectPart::Ptr part(templateProjectPart->copy()); part->displayName = partName; @@ -277,7 +280,7 @@ void ProjectInfoGenerator::createProjectPart(const RawProjectPart &rawProjectPar part->languageExtensions |= languageExtensions; part->updateLanguageFeatures(); - m_projectInfo.appendProjectPart(part); + return part; } } // namespace Internal diff --git a/src/plugins/cpptools/cppprojectinfogenerator.h b/src/plugins/cpptools/cppprojectinfogenerator.h index f1972cd5c2c..6f81eaf85f5 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.h +++ b/src/plugins/cpptools/cppprojectinfogenerator.h @@ -41,19 +41,17 @@ public: ProjectInfo generate(); private: - void createProjectParts(const RawProjectPart &rawProjectPart); - void createProjectPart(const RawProjectPart &rawProjectPart, - const ProjectPart::Ptr &templateProjectPart, - const ProjectFiles &projectFiles, - const QString &partName, - ProjectPart::LanguageVersion languageVersion, - ProjectPart::LanguageExtensions languageExtensions); + QVector createProjectParts(const RawProjectPart &rawProjectPart); + ProjectPart::Ptr createProjectPart(const RawProjectPart &rawProjectPart, + const ProjectPart::Ptr &templateProjectPart, + const ProjectFiles &projectFiles, + const QString &partName, + ProjectPart::LanguageVersion languageVersion, + ProjectPart::LanguageExtensions languageExtensions); private: - const QFutureInterface &m_futureInterface; + const QFutureInterface m_futureInterface; const ProjectUpdateInfo &m_projectUpdateInfo; - - ProjectInfo m_projectInfo; }; } // namespace Internal } // namespace CppTools diff --git a/src/plugins/cpptools/cppprojectupdater.cpp b/src/plugins/cpptools/cppprojectupdater.cpp index 33a2b1df585..50a404664c3 100644 --- a/src/plugins/cpptools/cppprojectupdater.cpp +++ b/src/plugins/cpptools/cppprojectupdater.cpp @@ -62,9 +62,8 @@ void CppProjectUpdater::update(const ProjectUpdateInfo &projectUpdateInfo) this, &CppProjectUpdater::onToolChainRemoved); // Run the project info generator in a worker thread and continue if that one is finished. - const QFutureInterface &futureInterface = m_futureInterface; const QFuture future = Utils::runAsync([=]() { - Internal::ProjectInfoGenerator generator(futureInterface, projectUpdateInfo); + Internal::ProjectInfoGenerator generator(m_futureInterface, projectUpdateInfo); return generator.generate(); }); m_generateFutureWatcher.setFuture(future);