CMake: Always show CMakeLists.txt in project tree

Always show the top level CMakeLists.txt file in the project tree,
even when parsing failed.

Change-Id: I42c844eb54b32fcb51131ad63a8fc372622636fc
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2016-11-07 21:20:55 +01:00
parent 9c09ca9e42
commit 38f30e733f

View File

@@ -331,8 +331,7 @@ void BuildDirManager::generateProjectTree(CMakeProjectNode *root)
const Utils::FileName projectFile = m_buildConfiguration->target()->project()->projectFilePath(); const Utils::FileName projectFile = m_buildConfiguration->target()->project()->projectFilePath();
QList<FileNode *> tmp = Utils::filtered(m_futureInterface->future().result(), QList<FileNode *> tmp = Utils::filtered(m_futureInterface->future().result(),
[projectFile](const FileNode *fn) -> bool { [projectFile](const FileNode *fn) -> bool {
const Utils::FileName &path = fn->filePath(); return !fn->filePath().toString().startsWith(projectFile.toString() + ".user");
return path != projectFile && !path.toString().startsWith(projectFile.toString() + ".user");
}); });
Utils::sort(tmp, ProjectExplorer::Node::sortByPath); Utils::sort(tmp, ProjectExplorer::Node::sortByPath);
@@ -344,6 +343,19 @@ void BuildDirManager::generateProjectTree(CMakeProjectNode *root)
foreach (FileNode *fn, root->recursiveFileNodes()) foreach (FileNode *fn, root->recursiveFileNodes())
usedNodes.insert(fn); usedNodes.insert(fn);
// Make sure the top level CMakeLists.txt is always visible:
if (root->fileNodes().isEmpty()
&& root->folderNodes().isEmpty()
&& root->projectNodes().isEmpty()) {
FileNode *cm = Utils::findOrDefault(allFiles, [&projectFile](const FileNode *fn) {
return fn->filePath() == projectFile;
});
if (cm) {
root->addFileNodes({ cm });
usedNodes.insert(cm);
}
}
QList<FileNode *> leftOvers = Utils::filtered(allFiles, [&usedNodes](FileNode *fn) { QList<FileNode *> leftOvers = Utils::filtered(allFiles, [&usedNodes](FileNode *fn) {
return !usedNodes.contains(fn); return !usedNodes.contains(fn);
}); });