diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-05-06 16:46:03 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-05-08 13:07:31 +0000 |
commit | b1b52ac6746f5e7d935ecb106e48a87b656447c0 (patch) | |
tree | 03504e4e0742fa786698474bcc7fef69920e8428 /src | |
parent | 75e408584ac9a60c3a4dd714f5620814485fcdca (diff) |
QmakeProjectManager: Do not ignore files from included .pri files
... when setting up extra compilers.
For example, the code model was not able to resolve included ui_*.h
files in a project that wasn't built yet, if the respective FORMS
declaration came from a .pri file.
Fixes: QTCREATORBUG-22395
Change-Id: I75c4b2b38fec209519adb563d579ecd3a17fe042
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp | 15 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeparsernodes.h | 4 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 7b050a5ed6..dad44e2f6b 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -234,6 +234,16 @@ QSet<FileName> QmakePriFile::files(const FileType &type) const return m_files.value(type); } +const QSet<FileName> QmakePriFile::collectFiles(const FileType &type) const +{ + QSet<FileName> allFiles = files(type); + for (const QmakePriFile * const priFile : qAsConst(m_children)) { + if (!dynamic_cast<const QmakeProFile *>(priFile)) + allFiles.unite(priFile->collectFiles(type)); + } + return allFiles; +} + QmakePriFile::~QmakePriFile() { watchFolders( {} ); @@ -1958,11 +1968,10 @@ QList<ExtraCompiler *> QmakeProFile::extraCompilers() const void QmakeProFile::setupExtraCompiler(const FileName &buildDir, const FileType &fileType, ExtraCompilerFactory *factory) { - foreach (const FileName &fn, files(fileType)) { + for (const FileName &fn : collectFiles(fileType)) { const FileNameList generated = generatedFiles(buildDir, fn, fileType); - if (!generated.isEmpty()) { + if (!generated.isEmpty()) m_extraCompilers.append(factory->create(m_project, fn, generated)); - } } } diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 68b406fe63..4c5b7048eb 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -133,8 +133,12 @@ public: void makeEmpty(); + // Files of the specified type declared in this file. QSet<Utils::FileName> files(const ProjectExplorer::FileType &type) const; + // Files of the specified type declared in this file and in included .pri files. + const QSet<Utils::FileName> collectFiles(const ProjectExplorer::FileType &type) const; + void update(const Internal::QmakePriFileEvalResult &result); bool canAddSubProject(const QString &proFilePath) const; |