diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-06-20 17:44:39 +0200 |
---|---|---|
committer | Florian Apolloner <florian@apolloner.eu> | 2017-06-23 09:56:07 +0000 |
commit | 64c5f960e82f6efb947907041ab6e40860ea4652 (patch) | |
tree | ccd3d53146b3ac8bd3338909e238a9ccec9e33c9 | |
parent | 7062fd5138054a7eace18322ac5ae9f086cd1dc3 (diff) | |
download | qt-creator-64c5f960e82f6efb947907041ab6e40860ea4652.tar.gz |
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 <tim.jenssen@qt.io>
Reviewed-by: Florian Apolloner <florian@apolloner.eu>
5 files changed, 11 insertions, 5 deletions
diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index a6281fd715..71fccc5df8 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -277,10 +277,6 @@ void BuildDirManager::generateProjectTree(CMakeProjectNode *root, const QList<co const Utils::FileName projectFile = m_buildConfiguration->target()->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 8bba67e359..b4113c53fd 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -221,6 +221,10 @@ CMakeBuildConfiguration::generateProjectTree(const QList<const FileNode*> &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 9ae83d71ad..91aa189e64 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 0a3ef88380..e366d4f6ec 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<FileNode *> knownHeaders, const QList<const FileNode *> &allFiles) { + if (root->isEmpty()) + return; + auto headerNode = new VirtualFolderNode(root->filePath(), Node::DefaultPriority - 5); headerNode->setDisplayName(tr("<Headers>")); diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp index c05b0bf9c1..e7ecd026dd 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<const FileNode *> &allFiles) { + if (m_files.isEmpty()) + return; + root->setDisplayName(m_projectName); // Delete no longer necessary file watcher based on m_cmakeFiles: |