summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2017-08-29 12:11:27 +0200
committerChristian Stenger <christian.stenger@qt.io>2017-09-18 10:01:30 +0000
commite255baaa8feaa447127f71f24f894155b4e5a952 (patch)
tree1f5c07e9ff33c58f50fc3771d3d47ee7390f007c
parent8288eadac6b1c3bc8a1965f8da749af67e646785 (diff)
downloadqt-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.cpp2
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.cpp2
-rw-r--r--src/plugins/autotest/testtreeitem.cpp5
-rw-r--r--src/plugins/cmakeprojectmanager/servermodereader.cpp3
-rw-r--r--src/plugins/cmakeprojectmanager/tealeafreader.cpp3
-rw-r--r--src/plugins/cppeditor/cppcodemodelinspectordialog.cpp1
-rw-r--r--src/plugins/cpptools/cppcodemodelinspectordumper.cpp13
-rw-r--r--src/plugins/cpptools/cppcodemodelinspectordumper.h1
-rw-r--r--src/plugins/cpptools/cppprojectinfogenerator.cpp1
-rw-r--r--src/plugins/cpptools/cpprawprojectpart.cpp5
-rw-r--r--src/plugins/cpptools/cpprawprojectpart.h2
-rw-r--r--src/plugins/cpptools/projectpart.h7
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.cpp4
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()));