From 54efabd6e9fbcf2a654fcbef76063bad8d79b15e Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 13 Nov 2018 15:30:27 +0100 Subject: [PATCH] Qmake: Move some data accessors from QmakeProFile to QmakeProFileNode These are not used during parsing but when operating on the items in the project tree. This loosens the ties between the qmake related parser and project nodes. Change-Id: I077356fcde240df56b466c71c902c821c4885f6d Reviewed-by: Christian Kandeler --- .../qmakebuildconfiguration.cpp | 3 +- .../qmakeprojectmanager/qmakemakestep.cpp | 3 +- .../qmakeprojectmanager/qmakenodes.cpp | 36 +++++++++++++++++++ src/plugins/qmakeprojectmanager/qmakenodes.h | 8 +++++ .../qmakeprojectmanager/qmakeparsernodes.cpp | 29 --------------- .../qmakeprojectmanager/qmakeparsernodes.h | 6 ---- src/plugins/qmakeprojectmanager/qmakestep.cpp | 2 +- 7 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index e4eeaa4f428..6dcb96a8817 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -254,7 +254,8 @@ bool QmakeBuildConfiguration::isShadowBuild() const QString QmakeBuildConfiguration::makefile() const { - return static_cast(target()->project())->rootProFile()->makefile(); + auto rootNode = dynamic_cast(target()->project()->rootProjectNode()); + return rootNode ? rootNode->makefile() : QString(); } BaseQtVersion::QmakeBuildConfigs QmakeBuildConfiguration::qmakeBuildConfiguration() const diff --git a/src/plugins/qmakeprojectmanager/qmakemakestep.cpp b/src/plugins/qmakeprojectmanager/qmakemakestep.cpp index 3fad755f80b..d4ca924dbe1 100644 --- a/src/plugins/qmakeprojectmanager/qmakemakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakemakestep.cpp @@ -99,8 +99,7 @@ bool QmakeMakeStep::init(QList &earlierSteps) QString args; - QmakeProjectManager::QmakeProFileNode *subNode = bc->subNodeBuild(); - QmakeProjectManager::QmakeProFile *subProFile = subNode ? subNode->proFile() : nullptr; + QmakeProjectManager::QmakeProFileNode *subProFile = bc->subNodeBuild(); if (subProFile) { QString makefile = subProFile->makefile(); if (makefile.isEmpty()) diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 002c39cae44..1e145fbec52 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -228,6 +228,28 @@ QmakeProFile *QmakeProFileNode::proFile() const return static_cast(QmakePriFileNode::priFile()); } +QString QmakeProFileNode::makefile() const +{ + return singleVariableValue(Variable::Makefile); +} + +QString QmakeProFileNode::objectsDirectory() const +{ + return singleVariableValue(Variable::ObjectsDir); +} + +bool QmakeProFileNode::isDebugAndRelease() const +{ + const QStringList configValues = variableValue(Variable::Config); + return configValues.contains(QLatin1String("debug_and_release")); +} + +bool QmakeProFileNode::isQtcRunnable() const +{ + const QStringList configValues = variableValue(Variable::Config); + return configValues.contains(QLatin1String("qtc_runnable")); +} + FolderNode::AddNewInformation QmakeProFileNode::addNewInformation(const QStringList &files, Node *context) const { Q_UNUSED(files) @@ -271,4 +293,18 @@ QString QmakeProFileNode::buildDir() const return QString(); } +FileName QmakeProFileNode::buildDir(QmakeBuildConfiguration *bc) const +{ + const QmakeProFile *pro = proFile(); + return pro ? pro->buildDir(bc) : FileName(); +} + +QString QmakeProFileNode::objectExtension() const +{ + QStringList exts = variableValue(Variable::ObjectExt); + if (exts.isEmpty()) + return HostOsInfo::isWindowsHost() ? QLatin1String(".obj") : QLatin1String(".o"); + return exts.first(); +} + } // namespace QmakeProjectManager diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 8c1cddbaeb3..5b69e1fae99 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -82,12 +82,20 @@ public: QmakeProFile *proFile() const; + QString makefile() const; + QString objectsDirectory() const; + QString objectExtension() const; + + bool isDebugAndRelease() const; + bool isQtcRunnable() const; + bool showInSimpleTree() const override; AddNewInformation addNewInformation(const QStringList &files, Node *context) const override; QmakeProjectManager::ProjectType projectType() const; QString buildDir() const; + Utils::FileName buildDir(QmakeBuildConfiguration *bc) const; QStringList variableValue(const Variable var) const; QString singleVariableValue(const Variable var) const; diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 53cb741e7ee..246cd05a78a 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -1029,23 +1029,6 @@ const QmakeProFile *QmakeProFile::findProFile(const FileName &fileName) const return static_cast(findPriFile(fileName)); } -QString QmakeProFile::makefile() const -{ - return singleVariableValue(Variable::Makefile); -} - -QString QmakeProFile::objectExtension() const -{ - if (m_varValues[Variable::ObjectExt].isEmpty()) - return HostOsInfo::isWindowsHost() ? QLatin1String(".obj") : QLatin1String(".o"); - return m_varValues[Variable::ObjectExt].first(); -} - -QString QmakeProFile::objectsDirectory() const -{ - return singleVariableValue(Variable::ObjectsDir); -} - QByteArray QmakeProFile::cxxDefines() const { QByteArray result; @@ -1125,18 +1108,6 @@ QList QmakeProFile::allProFiles() return result; } -bool QmakeProFile::isDebugAndRelease() const -{ - const QStringList configValues = m_varValues.value(Variable::Config); - return configValues.contains(QLatin1String("debug_and_release")); -} - -bool QmakeProFile::isQtcRunnable() const -{ - const QStringList configValues = m_varValues.value(Variable::Config); - return configValues.contains(QLatin1String("qtc_runnable")); -} - ProjectType QmakeProFile::projectType() const { return m_projectType; diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 0889d23022a..7b09fbc7024 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -303,9 +303,6 @@ public: TargetInformation targetInformation() const; InstallsList installsList() const; - QString makefile() const; - QString objectExtension() const; - QString objectsDirectory() const; QByteArray cxxDefines() const; enum AsyncUpdateDelay { ParseNow, ParseLater }; @@ -315,9 +312,6 @@ public: bool validParse() const; bool parseInProgress() const; - bool isDebugAndRelease() const; - bool isQtcRunnable() const; - void setParseInProgressRecursive(bool b); void asyncUpdate(); diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 8ff396e0224..43b0a9a6534 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -191,7 +191,7 @@ bool QMakeStep::init(QList &earlierSteps) QString makefile = workingDirectory + '/'; if (qmakeBc->subNodeBuild()) { - QmakeProFile *pro = qmakeBc->subNodeBuild()->proFile(); + QmakeProFileNode *pro = qmakeBc->subNodeBuild(); if (pro && !pro->makefile().isEmpty()) makefile.append(pro->makefile()); else