From 31e2ddd08535e792337075de86465d0360cbcf2a Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Fri, 2 Nov 2012 12:45:09 +0100 Subject: [PATCH] Kit: Add createOutputParser method Which asks each KitInformation for their parser, thus currently creating a toolchain + qt chain if that is applicable. Remove all code that does that by hand from various buildsteps/buildconfigurations. Change-Id: I79a07ffd1dbe9a43bdbc838bc0098071aa412009 Reviewed-by: Tobias Hunger --- .../autotoolsbuildconfiguration.cpp | 8 -------- .../autotoolsbuildconfiguration.h | 1 - .../autotoolsprojectmanager/makestep.cpp | 8 +++----- .../cmakebuildconfiguration.cpp | 14 -------------- .../cmakebuildconfiguration.h | 2 -- src/plugins/cmakeprojectmanager/makestep.cpp | 9 +++------ .../genericbuildconfiguration.cpp | 6 ------ .../genericbuildconfiguration.h | 1 - .../genericprojectmanager/genericmakestep.cpp | 8 +++----- .../projectexplorer/buildconfiguration.h | 7 ------- src/plugins/projectexplorer/kit.cpp | 18 ++++++++++++++++++ src/plugins/projectexplorer/kit.h | 2 ++ src/plugins/projectexplorer/kitinformation.cpp | 8 ++++++++ src/plugins/projectexplorer/kitinformation.h | 1 + src/plugins/projectexplorer/kitmanager.cpp | 6 ++++++ src/plugins/projectexplorer/kitmanager.h | 2 ++ src/plugins/projectexplorer/processstep.cpp | 5 ++++- src/plugins/qt4projectmanager/makestep.cpp | 18 +++++------------- .../qt4buildconfiguration.cpp | 6 ------ .../qt4projectmanager/qt4buildconfiguration.h | 2 -- src/plugins/qtsupport/baseqtversion.cpp | 5 ----- src/plugins/qtsupport/baseqtversion.h | 2 -- src/plugins/qtsupport/qtkitinformation.cpp | 8 ++++++++ src/plugins/qtsupport/qtkitinformation.h | 1 + 24 files changed, 64 insertions(+), 84 deletions(-) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index 7508d9ddeb9..fe6ec93f70e 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -112,14 +112,6 @@ void AutotoolsBuildConfiguration::setBuildDirectory(const QString &buildDirector emit buildDirectoryChanged(); } -IOutputParser *AutotoolsBuildConfiguration::createOutputParser() const -{ - ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit()); - if (tc) - return tc->outputParser(); - return 0; -} - ////////////////////////////////////// // AutotoolsBuildConfiguration class ////////////////////////////////////// diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h index 2ef889d5f57..362dec94df6 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h @@ -53,7 +53,6 @@ public: QString buildDirectory() const; void setBuildDirectory(const QString &buildDirectory); QVariantMap toMap() const; - ProjectExplorer::IOutputParser *createOutputParser() const; BuildType buildType() const; protected: diff --git a/src/plugins/autotoolsprojectmanager/makestep.cpp b/src/plugins/autotoolsprojectmanager/makestep.cpp index c0160986a4a..186ec90bb24 100644 --- a/src/plugins/autotoolsprojectmanager/makestep.cpp +++ b/src/plugins/autotoolsprojectmanager/makestep.cpp @@ -192,11 +192,9 @@ bool MakeStep::init() pp->setArguments(arguments); setOutputParser(new GnuMakeParser()); - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); - if (version) - appendOutputParser(new QtSupport::QtParser); - if (tc) - appendOutputParser(tc->outputParser()); + IOutputParser *parser = target()->kit()->createOutputParser(); + if (parser) + appendOutputParser(parser); outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory()); return AbstractProcessStep::init(); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 88ff7c10f9d..aacada4e38b 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -125,20 +125,6 @@ void CMakeBuildConfiguration::setBuildDirectory(const QString &buildDirectory) emit environmentChanged(); } -ProjectExplorer::IOutputParser *CMakeBuildConfiguration::createOutputParser() const -{ - ProjectExplorer::IOutputParser *parserchain = new ProjectExplorer::GnuMakeParser; - - int versionId = QtSupport::QtKitInformation::qtVersionId(target()->kit()); - if (versionId >= 0) - parserchain->appendOutputParser(new QtSupport::QtParser); - - ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit()); - if (tc) - parserchain->appendOutputParser(tc->outputParser()); - return parserchain; -} - /*! \class CMakeBuildConfigurationFactory */ diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index ce769b1352a..973766394c1 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -58,8 +58,6 @@ public: QVariantMap toMap() const; - ProjectExplorer::IOutputParser *createOutputParser() const; - BuildType buildType() const; bool useNinja() const; diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 66fb55ba908..0a7a856ee19 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -201,12 +201,9 @@ bool MakeStep::init() pp->setArguments(arguments); setOutputParser(new ProjectExplorer::GnuMakeParser()); - - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); - if (version) - appendOutputParser(new QtSupport::QtParser); - if (tc) - appendOutputParser(tc->outputParser()); + IOutputParser *parser = target()->kit()->createOutputParser(); + if (parser) + appendOutputParser(parser); outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory()); return AbstractProcessStep::init(); diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 056974510fc..7083fbf5309 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -110,12 +110,6 @@ BuildConfigWidget *GenericBuildConfiguration::createConfigWidget() return new GenericBuildSettingsWidget; } -IOutputParser *GenericBuildConfiguration::createOutputParser() const -{ - ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit()); - return tc ? tc->outputParser() : 0; -} - /*! \class GenericBuildConfigurationFactory diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index e1f1edef5c3..f0e4f2ac957 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -56,7 +56,6 @@ public: void setBuildDirectory(const QString &buildDirectory); QVariantMap toMap() const; - ProjectExplorer::IOutputParser *createOutputParser() const; BuildType buildType() const; protected: diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index 3e7fd4f1612..8e81265636a 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -129,11 +129,9 @@ bool GenericMakeStep::init() setIgnoreReturnValue(m_clean); setOutputParser(new GnuMakeParser()); - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); - if (version) - appendOutputParser(new QtSupport::QtParser); - if (tc) - appendOutputParser(tc->outputParser()); + IOutputParser *parser = target()->kit()->createOutputParser(); + if (parser) + appendOutputParser(parser); outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory()); return AbstractProcessStep::init(); diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 5007c731382..78ed6bd93f1 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -76,13 +76,6 @@ public: virtual QVariantMap toMap() const; - // Creates a suitable outputparser for custom build steps - // (based on the tool chain) - // this is not great API - // it's mainly so that custom build systems are better integrated - // with the generic project manager - virtual IOutputParser *createOutputParser() const = 0; - Target *target() const; virtual bool isEnabled() const; diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index 5ce108f1d05..2513a9f00db 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -34,6 +34,7 @@ #include "kitmanager.h" #include "project.h" #include "toolchainmanager.h" +#include "ioutputparser.h" #include @@ -363,6 +364,23 @@ void Kit::addToEnvironment(Utils::Environment &env) const ki->addToEnvironment(this, env); } +IOutputParser *Kit::createOutputParser() const +{ + IOutputParser *last = 0; + IOutputParser *first = 0; + QList infoList = KitManager::instance()->kitInformation(); + foreach (KitInformation *ki, infoList) { + IOutputParser *next = ki->createOutputParser(this); + if (!first) + first = next; + if (last && next) + last->appendOutputParser(next); + if (next) + last = next; + } + return first; +} + QString Kit::toHtml() { QString rc; diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h index 3dfcd61034f..ddac0c153a4 100644 --- a/src/plugins/projectexplorer/kit.h +++ b/src/plugins/projectexplorer/kit.h @@ -40,6 +40,7 @@ namespace Utils { class Environment; } namespace ProjectExplorer { +class IOutputParser; namespace Internal { class KitManagerPrivate; @@ -88,6 +89,7 @@ public: bool isEqual(const Kit *other) const; void addToEnvironment(Utils::Environment &env) const; + IOutputParser *createOutputParser() const; QString toHtml(); Kit *clone(bool keepName = false) const; diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index 6d0b3a64067..1ee06ab73d2 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -207,6 +207,14 @@ void ToolChainKitInformation::addToEnvironment(const Kit *k, Utils::Environment tc->addToEnvironment(env); } +IOutputParser *ToolChainKitInformation::createOutputParser(const Kit *k) const +{ + ToolChain *tc = toolChain(k); + if (tc) + return tc->outputParser(); + return 0; +} + ToolChain *ToolChainKitInformation::toolChain(const Kit *k) { if (!k) diff --git a/src/plugins/projectexplorer/kitinformation.h b/src/plugins/projectexplorer/kitinformation.h index 3abb091eaba..d6c785a5e49 100644 --- a/src/plugins/projectexplorer/kitinformation.h +++ b/src/plugins/projectexplorer/kitinformation.h @@ -112,6 +112,7 @@ public: ItemList toUserOutput(Kit *k) const; void addToEnvironment(const Kit *k, Utils::Environment &env) const; + IOutputParser *createOutputParser(const Kit *k) const; static ToolChain *toolChain(const Kit *k); static void setToolChain(Kit *k, ToolChain *tc); diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 45c4ef0c029..9aad1ce7743 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -454,6 +454,12 @@ void KitInformation::addToEnvironment(const Kit *k, Utils::Environment &env) con Q_UNUSED(env); } +IOutputParser *KitInformation::createOutputParser(const Kit *k) const +{ + Q_UNUSED(k); + return 0; +} + QString KitInformation::displayNamePostfix(const Kit *k) const { Q_UNUSED(k); diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index 88bbcbd6a57..b1c4f13b658 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -43,6 +43,7 @@ namespace Utils { class Environment; } namespace ProjectExplorer { +class IOutputParser; class Kit; class KitConfigWidget; @@ -82,6 +83,7 @@ public: virtual KitConfigWidget *createConfigWidget(Kit *) const = 0; virtual void addToEnvironment(const Kit *k, Utils::Environment &env) const; + virtual IOutputParser *createOutputParser(const Kit *k) const; virtual QString displayNamePostfix(const Kit *k) const; diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index 4549e23eb6a..0b57d4d7adc 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -33,6 +33,7 @@ #include "buildconfiguration.h" #include "projectexplorerconstants.h" #include "target.h" +#include "kit.h" #include #include @@ -95,7 +96,9 @@ bool ProcessStep::init() pp->setWorkingDirectory(workingDirectory()); pp->setCommand(m_command); pp->setArguments(m_arguments); - setOutputParser(bc->createOutputParser()); + IOutputParser *parser = target()->kit()->createOutputParser(); + if (parser) + setOutputParser(parser); return AbstractProcessStep::init(); } diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index feec0184f56..ec4df7f6856 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -248,20 +249,11 @@ bool MakeStep::init() pp->setEnvironment(env); pp->setArguments(args); - IOutputParser *parser = 0; - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); - if (version) - parser = version->createOutputParser(); + setOutputParser(new ProjectExplorer::GnuMakeParser()); + IOutputParser *parser = target()->kit()->createOutputParser(); if (parser) - parser->appendOutputParser(new QtSupport::QtParser); - else - parser = new QtSupport::QtParser; - if (tc) - parser->appendOutputParser(tc->outputParser()); - - parser->setWorkingDirectory(workingDirectory); - - setOutputParser(parser); + appendOutputParser(parser); + outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory()); m_scriptTarget = (static_cast(bc->target()->project())->rootQt4ProjectNode()->projectType() == ScriptTemplate); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 0368047864e..1195499a1a6 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -538,12 +538,6 @@ FileName Qt4BuildConfiguration::extractSpecFromArguments(QString *args, return parsedSpec; } -IOutputParser *Qt4BuildConfiguration::createOutputParser() const -{ - ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit()); - return tc ? tc->outputParser() : 0; -} - bool Qt4BuildConfiguration::isEnabled() const { return m_isEnabled; diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index 807eaa14641..b2348b8306d 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -98,8 +98,6 @@ public: QVariantMap toMap() const; - ProjectExplorer::IOutputParser *createOutputParser() const; - virtual bool isEnabled() const; virtual QString disabledReason() const; /// \internal For Qt4Project, since that manages the parsing information diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index a5c645be0f9..3f6297d9407 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1162,11 +1162,6 @@ BaseQtVersion::reportIssues(const QString &proFile, const QString &buildDir) con return results; } -ProjectExplorer::IOutputParser *BaseQtVersion::createOutputParser() const -{ - return new ProjectExplorer::GnuMakeParser; -} - QtConfigWidget *BaseQtVersion::createConfigurationWidget() const { return 0; diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index f9fc3ff573a..8c66709b860 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -185,8 +185,6 @@ public: /// warnings and finally info items. QList reportIssues(const QString &proFile, const QString &buildDir) const; - virtual ProjectExplorer::IOutputParser *createOutputParser() const; - static bool queryQMakeVariables(const Utils::FileName &binary, QHash *versionInfo); static bool queryQMakeVariables(const Utils::FileName &binary, QHash *versionInfo, bool *qmakeIsExecutable); static Utils::FileName mkspecDirectoryFromVersionInfo(const QHash &versionInfo); diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index 40fef3c0aa3..b742a7e6dc5 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -32,6 +32,7 @@ #include "qtkitconfigwidget.h" #include "qtsupportconstants.h" #include "qtversionmanager.h" +#include "qtparser.h" #include @@ -126,6 +127,13 @@ void QtKitInformation::addToEnvironment(const ProjectExplorer::Kit *k, Utils::En version->addToEnvironment(k, env); } +ProjectExplorer::IOutputParser *QtKitInformation::createOutputParser(const ProjectExplorer::Kit *k) const +{ + if (qtVersion(k)) + return new QtParser; + return 0; +} + int QtKitInformation::qtVersionId(const ProjectExplorer::Kit *k) { if (!k) diff --git a/src/plugins/qtsupport/qtkitinformation.h b/src/plugins/qtsupport/qtkitinformation.h index ac788e47458..508c21f2462 100644 --- a/src/plugins/qtsupport/qtkitinformation.h +++ b/src/plugins/qtsupport/qtkitinformation.h @@ -61,6 +61,7 @@ public: ItemList toUserOutput(ProjectExplorer::Kit *k) const; void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const; + ProjectExplorer::IOutputParser *createOutputParser(const ProjectExplorer::Kit *k) const; static int qtVersionId(const ProjectExplorer::Kit *k); static void setQtVersionId(ProjectExplorer::Kit *k, const int id);