From 64c5f960e82f6efb947907041ab6e40860ea4652 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 20 Jun 2017 17:44:39 +0200 Subject: [PATCH] CMake: Return an empty project tree if parsing failed This triggers the logic in Project to show the top level project file in the project tree. Remove similar logic in CMake. Change-Id: I2bfdd3f5e3d4126910a3feb480cec5ef689954ed Reviewed-by: Tim Jenssen Reviewed-by: Florian Apolloner --- src/plugins/cmakeprojectmanager/builddirmanager.cpp | 4 ---- src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp | 4 ++++ src/plugins/cmakeprojectmanager/cmakeproject.cpp | 2 +- src/plugins/cmakeprojectmanager/servermodereader.cpp | 3 +++ src/plugins/cmakeprojectmanager/tealeafreader.cpp | 3 +++ 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index a6281fd7151..71fccc5df8c 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -277,10 +277,6 @@ void BuildDirManager::generateProjectTree(CMakeProjectNode *root, const QListtarget()->project()->projectFilePath(); m_reader->generateProjectTree(root, allFiles); - - // Make sure the top level CMakeLists.txt is always visible: - if (root->isEmpty()) - root->addNode(new FileNode(projectFile, FileType::Project, false)); } void BuildDirManager::updateCodeModel(CppTools::RawProjectParts &rpps) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 8bba67e359c..b4113c53fdc 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -221,6 +221,10 @@ CMakeBuildConfiguration::generateProjectTree(const QList &allFi auto root = new CMakeProjectNode(target()->project()->projectDirectory()); m_buildDirManager->generateProjectTree(root, allFiles); + if (root->isEmpty()) { + delete root; + return nullptr; + } return root; } diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 9ae83d71ad6..91aa189e64c 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -147,8 +147,8 @@ void CMakeProject::updateProjectData(CMakeBuildConfiguration *bc) auto newRoot = bc->generateProjectTree(m_allFiles); if (newRoot) { - setRootProjectNode(newRoot); setDisplayName(newRoot->displayName()); + setRootProjectNode(newRoot); } updateApplicationAndDeploymentTargets(); diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index 0a3ef883805..e366d4f6ecc 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -741,6 +741,9 @@ void ServerModeReader::addFileGroups(ProjectNode *targetRoot, void ServerModeReader::addHeaderNodes(ProjectNode *root, const QList knownHeaders, const QList &allFiles) { + if (root->isEmpty()) + return; + auto headerNode = new VirtualFolderNode(root->filePath(), Node::DefaultPriority - 5); headerNode->setDisplayName(tr("")); diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index c05b0bf9c11..e7ecd026dd4 100644 --- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp +++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp @@ -270,6 +270,9 @@ CMakeConfig TeaLeafReader::takeParsedConfiguration() void TeaLeafReader::generateProjectTree(CMakeProjectNode *root, const QList &allFiles) { + if (m_files.isEmpty()) + return; + root->setDisplayName(m_projectName); // Delete no longer necessary file watcher based on m_cmakeFiles: