diff options
author | Christian Stenger <christian.stenger@qt.io> | 2017-08-29 12:11:27 +0200 |
---|---|---|
committer | Christian Stenger <christian.stenger@qt.io> | 2017-09-18 10:01:30 +0000 |
commit | e255baaa8feaa447127f71f24f894155b4e5a952 (patch) | |
tree | 1f5c07e9ff33c58f50fc3771d3d47ee7390f007c | |
parent | 8288eadac6b1c3bc8a1965f8da749af67e646785 (diff) | |
download | qt-creator-e255baaa8feaa447127f71f24f894155b4e5a952.tar.gz |
CppTools: Add target type information to project part
Let project managers store information whether a project part
belongs to an executable or a library and use this information
inside the AutoTest plugin.
This information will help to determine which targets are
relevant for the execution of tests.
Change-Id: I93b42797bf55225425398dc83aecea3c99eea290
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
-rw-r--r-- | src/plugins/autotest/gtest/gtesttreeitem.cpp | 2 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktesttreeitem.cpp | 2 | ||||
-rw-r--r-- | src/plugins/autotest/testtreeitem.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cmakeprojectmanager/servermodereader.cpp | 3 | ||||
-rw-r--r-- | src/plugins/cmakeprojectmanager/tealeafreader.cpp | 3 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppcodemodelinspectordialog.cpp | 1 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodemodelinspectordumper.cpp | 13 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodemodelinspectordumper.h | 1 | ||||
-rw-r--r-- | src/plugins/cpptools/cppprojectinfogenerator.cpp | 1 | ||||
-rw-r--r-- | src/plugins/cpptools/cpprawprojectpart.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cpprawprojectpart.h | 2 | ||||
-rw-r--r-- | src/plugins/cpptools/projectpart.h | 7 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsproject.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeproject.cpp | 4 |
14 files changed, 50 insertions, 1 deletions
diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp index de65f8d34d..92d24bc5a3 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.cpp +++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp @@ -294,6 +294,8 @@ QSet<QString> GTestTreeItem::internalTargets() const const auto cppMM = CppTools::CppModelManager::instance(); const auto projectInfo = cppMM->projectInfo(ProjectExplorer::SessionManager::startupProject()); for (const CppTools::ProjectPart::Ptr projectPart : projectInfo.projectParts()) { + if (projectPart->buildTargetType != CppTools::ProjectPart::Executable) + continue; if (projectPart->projectFile == proFile()) result.insert(projectPart->buildSystemTarget + '|' + projectPart->projectFile); } diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index 9ebcdd48c6..3520269636 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -292,6 +292,8 @@ QSet<QString> QuickTestTreeItem::internalTargets() const const auto cppMM = CppTools::CppModelManager::instance(); const auto projectInfo = cppMM->projectInfo(ProjectExplorer::SessionManager::startupProject()); for (const CppTools::ProjectPart::Ptr projectPart : projectInfo.projectParts()) { + if (projectPart->buildTargetType != CppTools::ProjectPart::Executable) + continue; if (projectPart->projectFile == proFile()) { result.insert(projectPart->buildSystemTarget + '|' + projectPart->projectFile); break; diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp index d5fba23b2a..626fda93d3 100644 --- a/src/plugins/autotest/testtreeitem.cpp +++ b/src/plugins/autotest/testtreeitem.cpp @@ -288,8 +288,11 @@ QSet<QString> TestTreeItem::internalTargets() const auto cppMM = CppTools::CppModelManager::instance(); const QList<CppTools::ProjectPart::Ptr> projectParts = cppMM->projectPart(filePath()); QSet<QString> targets; - for (const CppTools::ProjectPart::Ptr part : projectParts) + for (const CppTools::ProjectPart::Ptr part : projectParts) { + if (part->buildTargetType != CppTools::ProjectPart::Executable) + continue; targets.insert(part->buildSystemTarget + '|' + part->projectFile); + } return targets; } diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index 1b97b6b838..f7a4221864 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -347,6 +347,9 @@ void ServerModeReader::updateCodeModel(CppTools::RawProjectParts &rpps) rpp.setFiles(transform(fg->sources, &FileName::toString)); + const bool isExecutable = fg->target->type == "EXECUTABLE"; + rpp.setBuildTargetType(isExecutable ? CppTools::ProjectPart::Executable + : CppTools::ProjectPart::Library); rpps.append(rpp); } diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index 69b170d38d..2fbe12d28d 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp +++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp @@ -388,6 +388,9 @@ void TeaLeafReader::updateCodeModel(CppTools::RawProjectParts &rpps) rpp.setDisplayName(cbt.title); rpp.setFiles(transform(cbt.files, [](const FileName &fn) { return fn.toString(); })); + const bool isExecutable = cbt.targetType == ExecutableType; + rpp.setBuildTargetType(isExecutable ? CppTools::ProjectPart::Executable + : CppTools::ProjectPart::Library); rpps.append(rpp); } } diff --git a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp index 51ff075845..7a701ab692 100644 --- a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp +++ b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp @@ -1800,6 +1800,7 @@ void CppCodeModelInspectorDialog::updateProjectPartData(const ProjectPart::Ptr & {QString::fromLatin1("Callgroup Id"), callGroupId}, {QString::fromLatin1("Precompiled Headers"), precompiledHeaders}, {QString::fromLatin1("Selected For Building"), CMI::Utils::toString(part->selectedForBuilding)}, + {QString::fromLatin1("Build Target Type"), CMI::Utils::toString(part->buildTargetType)}, {QString::fromLatin1("Language Version"), CMI::Utils::toString(part->languageVersion)}, {QString::fromLatin1("Language Extensions"), CMI::Utils::toString(part->languageExtensions)}, {QString::fromLatin1("Qt Version"), CMI::Utils::toString(part->qtVersion)} diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp index 8797a2ba63..60f7bb3242 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp @@ -154,6 +154,18 @@ QString Utils::toString(ProjectPart::QtVersion qtVersion) return QString(); } +QString Utils::toString(ProjectPart::BuildTargetType buildTargetType) +{ +#define CASE_BUILDTARGETTYPE(x) case ProjectPart::x: return QLatin1String(#x) + switch (buildTargetType) { + CASE_BUILDTARGETTYPE(Unknown); + CASE_BUILDTARGETTYPE(Executable); + CASE_BUILDTARGETTYPE(Library); + } +#undef CASE_BUILDTARGETTYPE + return QString(); +} + QString Utils::toString(ProjectFile::Kind kind) { return QString::fromLatin1(projectFileKindToText(kind)); @@ -483,6 +495,7 @@ void Dumper::dumpProjectInfos( const QList<ProjectInfo> &projectInfos) m_out << i3 << "Project Name : " << projectName << "\n"; m_out << i3 << "Project File : " << projectFilePath << "\n"; m_out << i3 << "Selected For Building: " << part->selectedForBuilding << "\n"; + m_out << i3 << "Build Target Type : " << Utils::toString(part->buildTargetType) << "\n"; m_out << i3 << "Lanugage Version : " << Utils::toString(part->languageVersion)<<"\n"; m_out << i3 << "Lanugage Extensions : " << Utils::toString(part->languageExtensions) << "\n"; diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.h b/src/plugins/cpptools/cppcodemodelinspectordumper.h index d281722790..a21bb5acbd 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.h +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.h @@ -50,6 +50,7 @@ struct CPPTOOLS_EXPORT Utils static QString toString(CppTools::ProjectPart::LanguageVersion languageVersion); static QString toString(CppTools::ProjectPart::LanguageExtensions languageExtension); static QString toString(CppTools::ProjectPart::QtVersion qtVersion); + static QString toString(CppTools::ProjectPart::BuildTargetType buildTargetType); static QString toString(const QVector<CppTools::ProjectFile> &projectFiles); static QString toString(CppTools::ProjectFile::Kind kind); static QString toString(CPlusPlus::Kind kind); diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index 3c8ac37654..4a32d255fc 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -186,6 +186,7 @@ static ProjectPart::Ptr projectPartFromRawProjectPart(const RawProjectPart &rawP part->projectFileColumn = rawProjectPart.projectFileColumn; part->callGroupId = rawProjectPart.callGroupId; part->buildSystemTarget = rawProjectPart.buildSystemTarget; + part->buildTargetType = rawProjectPart.buildTargetType; part->qtVersion = rawProjectPart.qtVersion; part->projectMacros = rawProjectPart.projectMacros; part->headerPaths = rawProjectPart.headerPaths; diff --git a/src/plugins/cpptools/cpprawprojectpart.cpp b/src/plugins/cpptools/cpprawprojectpart.cpp index 001bf01af3..fc66420323 100644 --- a/src/plugins/cpptools/cpprawprojectpart.cpp +++ b/src/plugins/cpptools/cpprawprojectpart.cpp @@ -133,4 +133,9 @@ void RawProjectPart::setFlagsForCxx(const RawProjectPartFlags &flags) flagsForCxx = flags; } +void RawProjectPart::setBuildTargetType(ProjectPart::BuildTargetType type) +{ + buildTargetType = type; +} + } // namespace CppTools diff --git a/src/plugins/cpptools/cpprawprojectpart.h b/src/plugins/cpptools/cpprawprojectpart.h index aafe74281d..cc4a1ee878 100644 --- a/src/plugins/cpptools/cpprawprojectpart.h +++ b/src/plugins/cpptools/cpprawprojectpart.h @@ -78,6 +78,7 @@ public: void setFlagsForC(const RawProjectPartFlags &flags); void setFlagsForCxx(const RawProjectPartFlags &flags); + void setBuildTargetType(ProjectPart::BuildTargetType type); public: QString displayName; QString projectFile; @@ -97,6 +98,7 @@ public: QStringList files; FileClassifier fileClassifier; + ProjectPart::BuildTargetType buildTargetType = ProjectPart::BuildTargetType::Unknown; }; using RawProjectParts = QVector<RawProjectPart>; diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h index a6851e001d..51b620f0c3 100644 --- a/src/plugins/cpptools/projectpart.h +++ b/src/plugins/cpptools/projectpart.h @@ -91,6 +91,12 @@ public: WordWidth64Bit, }; + enum BuildTargetType { + Unknown, + Executable, + Library + }; + using Ptr = QSharedPointer<ProjectPart>; public: @@ -134,6 +140,7 @@ public: ProjectExplorer::Macros toolChainMacros; ToolChainWordWidth toolChainWordWidth = WordWidth32Bit; QString toolChainTargetTriple; + BuildTargetType buildTargetType = Unknown; }; } // namespace CppTools diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 902bed93f0..f9f212fcb0 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -1004,6 +1004,8 @@ void QbsProject::updateCppCodeModel() rpp.setProjectFileLocation(grp.location().filePath(), grp.location().line(), grp.location().column()); rpp.setBuildSystemTarget(prd.name()); + rpp.setBuildTargetType(prd.isRunnable() ? CppTools::ProjectPart::Executable + : CppTools::ProjectPart::Library); QHash<QString, qbs::ArtifactData> filePathToSourceArtifact; bool hasCFiles = false; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index f53192e016..c3b847447a 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -290,6 +290,10 @@ void QmakeProject::updateCppCodeModel() rpp.setDisplayName(pro->displayName()); rpp.setProjectFileLocation(pro->filePath().toString()); rpp.setBuildSystemTarget(pro->targetInformation().target); + const bool isExecutable = pro->projectType() == ProjectType::ApplicationTemplate; + rpp.setBuildTargetType(isExecutable ? CppTools::ProjectPart::Executable + : CppTools::ProjectPart::Library); + // TODO: Handle QMAKE_CFLAGS rpp.setFlagsForCxx({cxxToolChain, pro->variableValue(Variable::CppFlags)}); rpp.setMacros(ProjectExplorer::Macro::toMacros(pro->cxxDefines())); |