QmakeProjectManager: Add generated files to project tree

Now toggling the "Hide Generated Files" checkbox actually does something
for qmake projects.

Fixes: QTCREATORBUG-21467
Change-Id: Ifc4c8acd5bbb57ebb1f07af9d680d39e697cf113
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2019-04-03 13:13:52 +02:00
parent e257428b82
commit aa27712f61

View File

@@ -143,11 +143,21 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi
// other normal files:
const QVector<QmakeStaticData::FileTypeData> &fileTypes = qmakeStaticData()->fileTypeData;
FileNameList generatedFiles;
const auto proFile = dynamic_cast<const QmakeProFile *>(pri);
for (int i = 0; i < fileTypes.size(); ++i) {
FileType type = fileTypes.at(i).type;
const QSet<FileName> &newFilePaths = Utils::filtered(pri->files(type), [&toExclude](const Utils::FileName &fn) {
return !Utils::contains(toExclude, [&fn](const Utils::FileName &ex) { return fn.isChildOf(ex); });
});
if (proFile) {
for (const FileName &fp : newFilePaths) {
for (const ExtraCompiler *ec : proFile->extraCompilers()) {
if (ec->source() == fp)
generatedFiles << ec->targets();
}
}
}
if (!newFilePaths.isEmpty()) {
auto vfolder = std::make_unique<VirtualFolderNode>(pri->filePath().parentDir());
@@ -192,6 +202,22 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi
}
}
if (!generatedFiles.empty()) {
QTC_CHECK(proFile);
const FileName baseDir = generatedFiles.size() == 1 ? generatedFiles.first().parentDir()
: proFile->buildDir();
auto genFolder = std::make_unique<VirtualFolderNode>(baseDir);
genFolder->setDisplayName(QCoreApplication::translate("QmakeProjectManager::QmakePriFile",
"Generated Files"));
genFolder->setIsGenerated(true);
for (const FileName &fp : generatedFiles) {
auto fileNode = std::make_unique<FileNode>(fp, FileNode::fileTypeForFileName(fp));
fileNode->setIsGenerated(true);
genFolder->addNestedNode(std::move(fileNode));
}
node->addNode(std::move(genFolder));
}
// Virtual folders:
for (QmakePriFile *c : pri->children()) {
std::unique_ptr<QmakePriFileNode> newNode;