From 5bcd59c94f75e1dfbc64827328e110d0071364c4 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 20 Jun 2019 14:03:40 +0200 Subject: [PATCH] CMake: Simplify buildkey generation Just use the target name as buildkey. This is unique in cmake projects, so there is no need to mangle the source directory into the whole thing. This is a problem since different readers might report different source directories. That will then result in RunConfigurations getting duplicated after switching the reader types. Task-number: QTCREATORBUG-22129 Change-Id: I849ab68f221d732341e98faa9a4e757d3a495b2a Reviewed-by: hjk --- .../cmakeprojectmanager/cmakebuildconfiguration.cpp | 2 +- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 2 +- src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp | 7 +------ src/plugins/cmakeprojectmanager/cmakeprojectnodes.h | 2 -- src/plugins/cmakeprojectmanager/fileapidataextractor.cpp | 2 +- src/plugins/cmakeprojectmanager/projecttreehelper.cpp | 2 +- src/plugins/cmakeprojectmanager/servermodereader.cpp | 2 +- src/plugins/cmakeprojectmanager/tealeafreader.cpp | 2 +- 8 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index f7cfa7f33f5..20970036c3c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -206,7 +206,7 @@ const QList CMakeBuildConfiguration::appTargets() const bti.targetFilePath = ct.executable; bti.projectFilePath = ct.sourceDirectory.stringAppended("/"); bti.workingDirectory = ct.workingDirectory; - bti.buildKey = CMakeTargetNode::generateId(ct.sourceDirectory, ct.title); + bti.buildKey = ct.title; appTargetList.append(bti); } } diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 08039b7229d..2e7d1600537 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -361,7 +361,7 @@ void CMakeProject::updateProjectData(CMakeBuildConfiguration *bc) setDisplayName(rootProjectNode()->displayName()); for (const CMakeBuildTarget &bt : bc->buildTargets()) { - const QString buildKey = CMakeTargetNode::generateId(bt.sourceDirectory, bt.title); + const QString buildKey = bt.title; if (ProjectNode *node = findNodeForBuildKey(buildKey)) { if (auto targetNode = dynamic_cast(node)) targetNode->setConfig(patchedConfig); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp index ea218c22574..aeee344aeae 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp @@ -177,11 +177,6 @@ CMakeTargetNode::CMakeTargetNode(const Utils::FilePath &directory, const QString setIsProduct(); } -QString CMakeTargetNode::generateId(const Utils::FilePath &directory, const QString &target) -{ - return directory.toString() + "///::///" + target; -} - QString CMakeTargetNode::tooltip() const { return m_tooltip; @@ -189,7 +184,7 @@ QString CMakeTargetNode::tooltip() const QString CMakeTargetNode::buildKey() const { - return generateId(filePath(), m_target); + return m_target; } Utils::FilePath CMakeTargetNode::buildDirectory() const diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h index b924ec62a8c..f4cea98db49 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.h @@ -63,8 +63,6 @@ class CMakeTargetNode : public ProjectExplorer::ProjectNode public: CMakeTargetNode(const Utils::FilePath &directory, const QString &target); - static QString generateId(const Utils::FilePath &directory, const QString &target); - void setTargetInformation(const QList &artifacts, const QString &type); QString tooltip() const final; diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index 0e5b0d25f66..2b38abbee79 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -237,7 +237,7 @@ CppTools::RawProjectParts generateRawProjectParts(const PreprocessedData &input, ++counter; CppTools::RawProjectPart rpp; rpp.setProjectFileLocation(t.sourceDir.pathAppended("CMakeLists.txt").toString()); - rpp.setBuildSystemTarget(CMakeTargetNode::generateId(t.sourceDir, t.name)); + rpp.setBuildSystemTarget(t.name); rpp.setDisplayName(t.id); rpp.setMacros(transform(ci.defines, &DefineInfo::define)); rpp.setHeaderPaths(transform(ci.includes, &IncludeInfo::path)); diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp index 58b2f744e8d..ab9c49acdfb 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp @@ -160,7 +160,7 @@ CMakeTargetNode *createTargetNode(const QHash &c ProjectNode *cmln = cmakeListsNodes.value(dir); QTC_ASSERT(cmln, return nullptr); - QString targetId = CMakeTargetNode::generateId(dir, displayName); + QString targetId = displayName; CMakeTargetNode *tn = static_cast( cmln->findNode([&targetId](const Node *n) { return n->buildKey() == targetId; })); diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index 6b993ecdbb3..86f463b67b8 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -311,7 +311,7 @@ CppTools::RawProjectParts ServerModeReader::createRawProjectParts(QString &error CppTools::RawProjectPart rpp; rpp.setProjectFileLocation(fg->target->sourceDirectory.toString() + "/CMakeLists.txt"); - rpp.setBuildSystemTarget(CMakeTargetNode::generateId(fg->target->sourceDirectory, fg->target->name)); + rpp.setBuildSystemTarget(fg->target->name); rpp.setDisplayName(fg->target->name + QString::number(counter)); rpp.setMacros(fg->macros); rpp.setIncludePaths(includes); diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index 264f97daceb..fb941604dd0 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp +++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp @@ -349,7 +349,7 @@ CppTools::RawProjectParts TeaLeafReader::createRawProjectParts(QString &errorMes includePaths += m_parameters.workDirectory.toString(); CppTools::RawProjectPart rpp; rpp.setProjectFileLocation(cbt.sourceDirectory.toString() + "/CMakeLists.txt"); - rpp.setBuildSystemTarget(CMakeTargetNode::generateId(cbt.sourceDirectory, cbt.title)); + rpp.setBuildSystemTarget(cbt.title); rpp.setIncludePaths(includePaths); CppTools::RawProjectPartFlags cProjectFlags;