From aa27712f61886b4fba6e39e2b1a03ce6cbd6c855 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 3 Apr 2019 13:13:52 +0200 Subject: [PATCH] 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 --- .../qmakenodetreebuilder.cpp | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp index dcd92eb54dc..594fb7613ac 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp @@ -143,11 +143,21 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi // other normal files: const QVector &fileTypes = qmakeStaticData()->fileTypeData; + FileNameList generatedFiles; + const auto proFile = dynamic_cast(pri); for (int i = 0; i < fileTypes.size(); ++i) { FileType type = fileTypes.at(i).type; const QSet &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(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(baseDir); + genFolder->setDisplayName(QCoreApplication::translate("QmakeProjectManager::QmakePriFile", + "Generated Files")); + genFolder->setIsGenerated(true); + for (const FileName &fp : generatedFiles) { + auto fileNode = std::make_unique(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 newNode;