forked from qt-creator/qt-creator
CMakeProjectManager: Simplify creation of virtual folders
Change-Id: I781c0f6551ca01feaf1cc0fc1148a151777f91bf Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -217,27 +217,18 @@ CMakeConfig ServerModeReader::takeParsedConfiguration()
|
|||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
FolderNode *setupCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, int priority,
|
void addCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, int priority,
|
||||||
const QString &displayName, QList<FileNode *> &files)
|
const QString &displayName, QList<FileNode *> &files)
|
||||||
{
|
{
|
||||||
if (files.isEmpty())
|
if (files.isEmpty())
|
||||||
return nullptr;
|
return;
|
||||||
|
auto folder = new VirtualFolderNode(basePath, priority);
|
||||||
FolderNode *folder
|
|
||||||
= findOrDefault(base->folderNodes(), [basePath](const FolderNode *fn) {
|
|
||||||
return fn->filePath() == basePath;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!folder) {
|
|
||||||
folder = new VirtualFolderNode(basePath, priority);
|
|
||||||
folder->setDisplayName(displayName);
|
folder->setDisplayName(displayName);
|
||||||
base->addFolderNode(folder);
|
base->addFolderNode(folder);
|
||||||
}
|
|
||||||
folder->buildTree(files);
|
folder->buildTree(files);
|
||||||
return folder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ProjectNode *updateCMakeInputs(CMakeListsNode *root,
|
static ProjectNode *addCMakeInputs(CMakeListsNode *root,
|
||||||
const Utils::FileName &sourceDir,
|
const Utils::FileName &sourceDir,
|
||||||
const Utils::FileName &buildDir,
|
const Utils::FileName &buildDir,
|
||||||
QList<FileNode *> &sourceInputs,
|
QList<FileNode *> &sourceInputs,
|
||||||
@@ -259,22 +250,15 @@ static ProjectNode *updateCMakeInputs(CMakeListsNode *root,
|
|||||||
if (!hasInputs)
|
if (!hasInputs)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
QList<FolderNode *> toKeep;
|
addCMakeVFolder(cmakeVFolder, sourceDir, 1000,
|
||||||
toKeep.append(setupCMakeVFolder(cmakeVFolder, sourceDir, 1000,
|
|
||||||
QCoreApplication::translate("CMakeProjectManager::Internal", "<Source Directory>"),
|
QCoreApplication::translate("CMakeProjectManager::Internal", "<Source Directory>"),
|
||||||
sourceInputs));
|
sourceInputs);
|
||||||
toKeep.append(setupCMakeVFolder(cmakeVFolder, buildDir, 100,
|
addCMakeVFolder(cmakeVFolder, buildDir, 100,
|
||||||
QCoreApplication::translate("CMakeProjectManager::Internal", "<Build Directory>"),
|
QCoreApplication::translate("CMakeProjectManager::Internal", "<Build Directory>"),
|
||||||
buildInputs));
|
buildInputs);
|
||||||
toKeep.append(setupCMakeVFolder(cmakeVFolder, Utils::FileName(), 10,
|
addCMakeVFolder(cmakeVFolder, Utils::FileName(), 10,
|
||||||
QCoreApplication::translate("CMakeProjectManager::Internal", "<Other Locations>"),
|
QCoreApplication::translate("CMakeProjectManager::Internal", "<Other Locations>"),
|
||||||
rootInputs));
|
rootInputs);
|
||||||
|
|
||||||
// Clean out unused nodes in "CMake Files":
|
|
||||||
const QList<FolderNode *> tmp = filtered(cmakeVFolder->folderNodes(), [&toKeep](FolderNode *fn) {
|
|
||||||
return !toKeep.contains(fn);
|
|
||||||
});
|
|
||||||
cmakeVFolder->removeFolderNodes(tmp);
|
|
||||||
|
|
||||||
return cmakeVFolder;
|
return cmakeVFolder;
|
||||||
}
|
}
|
||||||
@@ -304,11 +288,11 @@ void ServerModeReader::generateProjectTree(CMakeListsNode *root,
|
|||||||
if (!m_projects.isEmpty())
|
if (!m_projects.isEmpty())
|
||||||
root->setDisplayName(m_projects.at(0)->name);
|
root->setDisplayName(m_projects.at(0)->name);
|
||||||
|
|
||||||
updateCMakeInputs(root, m_parameters.sourceDirectory, m_parameters.buildDirectory,
|
addCMakeInputs(root, m_parameters.sourceDirectory, m_parameters.buildDirectory,
|
||||||
cmakeFilesSource, cmakeFilesBuild, cmakeFilesOther);
|
cmakeFilesSource, cmakeFilesBuild, cmakeFilesOther);
|
||||||
|
|
||||||
updateCMakeLists(root, cmakeLists);
|
addCMakeLists(root, cmakeLists);
|
||||||
updateProjects(root, m_projects, allFiles);
|
addProjects(root, m_projects, allFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSet<Core::Id> ServerModeReader::updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder)
|
QSet<Core::Id> ServerModeReader::updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder)
|
||||||
@@ -538,7 +522,7 @@ void ServerModeReader::extractCacheData(const QVariantMap &data)
|
|||||||
m_cmakeCache = config;
|
m_cmakeCache = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerModeReader::updateCMakeLists(CMakeListsNode *root, const QList<FileNode *> &cmakeLists)
|
void ServerModeReader::addCMakeLists(CMakeListsNode *root, const QList<FileNode *> &cmakeLists)
|
||||||
{
|
{
|
||||||
const QDir baseDir = QDir(m_parameters.sourceDirectory.toString());
|
const QDir baseDir = QDir(m_parameters.sourceDirectory.toString());
|
||||||
|
|
||||||
@@ -642,7 +626,7 @@ static CMakeProjectNode *findOrCreateProjectNode(CMakeListsNode *root, const Uti
|
|||||||
return pn;
|
return pn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerModeReader::updateProjects(CMakeListsNode *root,
|
void ServerModeReader::addProjects(CMakeListsNode *root,
|
||||||
const QList<Project *> &projects,
|
const QList<Project *> &projects,
|
||||||
const QList<const FileNode *> &allFiles)
|
const QList<const FileNode *> &allFiles)
|
||||||
{
|
{
|
||||||
@@ -656,7 +640,7 @@ void ServerModeReader::updateProjects(CMakeListsNode *root,
|
|||||||
for (const Project *p : projects) {
|
for (const Project *p : projects) {
|
||||||
CMakeProjectNode *pNode = findOrCreateProjectNode(root, p->sourceDirectory, p->name);
|
CMakeProjectNode *pNode = findOrCreateProjectNode(root, p->sourceDirectory, p->name);
|
||||||
QTC_ASSERT(pNode, continue);
|
QTC_ASSERT(pNode, continue);
|
||||||
updateTargets(root, p->targets, includeFiles);
|
addTargets(root, p->targets, includeFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -678,18 +662,18 @@ static CMakeTargetNode *findOrCreateTargetNode(CMakeListsNode *root, const Utils
|
|||||||
return tn;
|
return tn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerModeReader::updateTargets(CMakeListsNode *root,
|
void ServerModeReader::addTargets(CMakeListsNode *root,
|
||||||
const QList<ServerModeReader::Target *> &targets,
|
const QList<ServerModeReader::Target *> &targets,
|
||||||
const QHash<FileName, QList<const FileNode *>> &headers)
|
const QHash<FileName, QList<const FileNode *>> &headers)
|
||||||
{
|
{
|
||||||
for (const Target *t : targets) {
|
for (const Target *t : targets) {
|
||||||
CMakeTargetNode *tNode = findOrCreateTargetNode(root, t->sourceDirectory, t->name);
|
CMakeTargetNode *tNode = findOrCreateTargetNode(root, t->sourceDirectory, t->name);
|
||||||
tNode->setTargetInformation(t->artifacts, t->type);
|
tNode->setTargetInformation(t->artifacts, t->type);
|
||||||
updateFileGroups(tNode, t->sourceDirectory, t->buildDirectory, t->fileGroups, headers);
|
addFileGroups(tNode, t->sourceDirectory, t->buildDirectory, t->fileGroups, headers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerModeReader::updateFileGroups(ProjectNode *targetRoot,
|
void ServerModeReader::addFileGroups(ProjectNode *targetRoot,
|
||||||
const Utils::FileName &sourceDirectory,
|
const Utils::FileName &sourceDirectory,
|
||||||
const Utils::FileName &buildDirectory,
|
const Utils::FileName &buildDirectory,
|
||||||
const QList<ServerModeReader::FileGroup *> &fileGroups,
|
const QList<ServerModeReader::FileGroup *> &fileGroups,
|
||||||
@@ -737,15 +721,10 @@ void ServerModeReader::updateFileGroups(ProjectNode *targetRoot,
|
|||||||
otherFileNodes.append(fn);
|
otherFileNodes.append(fn);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<FolderNode *> toKeep;
|
targetRoot->removeFolderNodes();
|
||||||
toKeep.append(setupCMakeVFolder(targetRoot, sourceDirectory, 1000, tr("<Source Directory>"), sourceFileNodes));
|
addCMakeVFolder(targetRoot, sourceDirectory, 1000, tr("<Source Directory>"), sourceFileNodes);
|
||||||
toKeep.append(setupCMakeVFolder(targetRoot, buildDirectory, 100, tr("<Build Directory>"), buildFileNodes));
|
addCMakeVFolder(targetRoot, buildDirectory, 100, tr("<Build Directory>"), buildFileNodes);
|
||||||
toKeep.append(setupCMakeVFolder(targetRoot, Utils::FileName(), 10, tr("<Other Locations>"), otherFileNodes));
|
addCMakeVFolder(targetRoot, Utils::FileName(), 10, tr("<Other Locations>"), otherFileNodes);
|
||||||
|
|
||||||
const QList<FolderNode *> toDelete
|
|
||||||
= filtered(targetRoot->folderNodes(), [&toKeep](FolderNode *fn) { return !toKeep.contains(fn); });
|
|
||||||
if (!toDelete.isEmpty())
|
|
||||||
targetRoot->removeFolderNodes(toDelete);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -110,12 +110,12 @@ private:
|
|||||||
void extractCMakeInputsData(const QVariantMap &data);
|
void extractCMakeInputsData(const QVariantMap &data);
|
||||||
void extractCacheData(const QVariantMap &data);
|
void extractCacheData(const QVariantMap &data);
|
||||||
|
|
||||||
void updateCMakeLists(CMakeListsNode *root, const QList<ProjectExplorer::FileNode *> &cmakeLists);
|
void addCMakeLists(CMakeListsNode *root, const QList<ProjectExplorer::FileNode *> &cmakeLists);
|
||||||
void updateProjects(CMakeListsNode *root, const QList<Project *> &projects,
|
void addProjects(CMakeListsNode *root, const QList<Project *> &projects,
|
||||||
const QList<const ProjectExplorer::FileNode *> &allFiles);
|
const QList<const ProjectExplorer::FileNode *> &allFiles);
|
||||||
void updateTargets(CMakeListsNode *root, const QList<Target *> &targets,
|
void addTargets(CMakeListsNode *root, const QList<Target *> &targets,
|
||||||
const QHash<Utils::FileName, QList<const ProjectExplorer::FileNode *>> &headers);
|
const QHash<Utils::FileName, QList<const ProjectExplorer::FileNode *>> &headers);
|
||||||
void updateFileGroups(ProjectExplorer::ProjectNode *targetRoot,
|
void addFileGroups(ProjectExplorer::ProjectNode *targetRoot,
|
||||||
const Utils::FileName &sourceDirectory,
|
const Utils::FileName &sourceDirectory,
|
||||||
const Utils::FileName &buildDirectory,
|
const Utils::FileName &buildDirectory,
|
||||||
const QList<FileGroup *> &fileGroups,
|
const QList<FileGroup *> &fileGroups,
|
||||||
|
|||||||
Reference in New Issue
Block a user