ProjectExplorer: Streamline OutputFormatter creation a bit

Note that the concept of a single monolithic OutputFormatter per
RunConfiguration (and why RunConfiguration, not RunControl to start
with?) is unchanged and suboptimal as one cannot easily combine
existing use cases, e.g. Python_and_Qt.

Change-Id: Ibeb8191020387324f22ed313230293597f96e36a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2018-04-06 09:21:44 +02:00
parent 845541c89d
commit 83c6a4916c
19 changed files with 26 additions and 63 deletions

View File

@@ -48,6 +48,7 @@ const char postFinishShellCmdsKey[] = "Android.PostFinishShellCmdListKey";
AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id)
: RunConfiguration(target, id)
{
setOutputFormatter<QtSupport::QtOutputFormatter>();
}
void AndroidRunConfiguration::setPreStartShellCommands(const QStringList &cmdList)
@@ -80,11 +81,6 @@ QWidget *AndroidRunConfiguration::createConfigurationWidget()
return configWidget;
}
Utils::OutputFormatter *AndroidRunConfiguration::createOutputFormatter() const
{
return new QtSupport::QtOutputFormatter(target()->project());
}
bool AndroidRunConfiguration::fromMap(const QVariantMap &map)
{
if (!RunConfiguration::fromMap(map))

View File

@@ -38,7 +38,6 @@ public:
explicit AndroidRunConfiguration(ProjectExplorer::Target *target, Core::Id id);
QWidget *createConfigurationWidget() override;
Utils::OutputFormatter *createOutputFormatter() const override;
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;

View File

@@ -83,6 +83,9 @@ CMakeRunConfiguration::CMakeRunConfiguration(Target *target)
connect(target->project(), &Project::parsingFinished,
this, &CMakeRunConfiguration::updateTargetInformation);
if (QtSupport::QtKitInformation::qtVersion(target->kit()))
setOutputFormatter<QtSupport::QtOutputFormatter>();
}
Runnable CMakeRunConfiguration::runnable() const
@@ -143,13 +146,6 @@ QString CMakeRunConfiguration::disabledReason() const
return RunConfiguration::disabledReason();
}
Utils::OutputFormatter *CMakeRunConfiguration::createOutputFormatter() const
{
if (QtSupport::QtKitInformation::qtVersion(target()->kit()))
return new QtSupport::QtOutputFormatter(target()->project());
return RunConfiguration::createOutputFormatter();
}
void CMakeRunConfiguration::updateTargetInformation()
{
setDefaultDisplayName(m_title);

View File

@@ -44,8 +44,6 @@ private:
QVariantMap toMap() const override;
QString disabledReason() const override;
Utils::OutputFormatter *createOutputFormatter() const final;
bool fromMap(const QVariantMap &map) override;
void doAdditionalSetup(const ProjectExplorer::RunConfigurationCreationInfo &) override;
bool isBuildTargetValid() const;

View File

@@ -97,6 +97,7 @@ IosRunConfiguration::IosRunConfiguration(Target *target)
: RunConfiguration(target, Constants::IOS_RC_ID_PREFIX)
{
addExtraAspect(new ArgumentsAspect(this, "Ios.run_arguments"));
setOutputFormatter<QtSupport::QtOutputFormatter>();
connect(DeviceManager::instance(), &DeviceManager::updated,
this, &IosRunConfiguration::deviceChanges);
@@ -115,11 +116,6 @@ QWidget *IosRunConfiguration::createConfigurationWidget()
return new IosRunConfigurationWidget(this);
}
OutputFormatter *IosRunConfiguration::createOutputFormatter() const
{
return new QtSupport::QtOutputFormatter(target()->project());
}
QString IosRunConfiguration::commandLineArguments() const
{
return extraAspect<ArgumentsAspect>()->arguments();

View File

@@ -47,7 +47,6 @@ public:
explicit IosRunConfiguration(ProjectExplorer::Target *target);
QWidget *createConfigurationWidget() override;
Utils::OutputFormatter *createOutputFormatter() const override;
IosDeployStep *deployStep() const;
QString commandLineArguments() const;

View File

@@ -419,9 +419,11 @@ Runnable RunConfiguration::runnable() const
return Runnable();
}
Utils::OutputFormatter *RunConfiguration::createOutputFormatter() const
OutputFormatter *RunConfiguration::createOutputFormatter() const
{
return new Utils::OutputFormatter();
if (m_outputFormatterCreator)
return m_outputFormatterCreator(project());
return new OutputFormatter();
}

View File

@@ -226,7 +226,7 @@ public:
Target *target() const;
Project *project() const override;
virtual Utils::OutputFormatter *createOutputFormatter() const;
Utils::OutputFormatter *createOutputFormatter() const;
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
@@ -271,6 +271,11 @@ protected:
BuildConfiguration *activeBuildConfiguration() const;
QWidget *wrapWidget(QWidget *inner) const;
template<class T> void setOutputFormatter()
{
m_outputFormatterCreator = [](Project *project) { return new T(project); };
}
virtual void updateEnabledState();
virtual void doAdditionalSetup(const RunConfigurationCreationInfo &) {}
@@ -281,6 +286,7 @@ private:
QList<IRunConfigurationAspect *> m_aspects;
QString m_buildKey;
std::function<Utils::OutputFormatter *(Project *)> m_outputFormatterCreator;
};
class RunConfigurationCreationInfo

View File

@@ -144,7 +144,7 @@ static QTextCharFormat linkFormat(const QTextCharFormat &inputFormat, const QStr
class PythonOutputFormatter : public OutputFormatter
{
public:
PythonOutputFormatter()
PythonOutputFormatter(Project *)
// Note that moc dislikes raw string literals.
: filePattern("^(\\s*)(File \"([^\"]+)\", line (\\d+), .*$)")
{
@@ -239,7 +239,6 @@ public:
QWidget *createConfigurationWidget() override;
QVariantMap toMap() const override;
bool fromMap(const QVariantMap &map) override;
OutputFormatter *createOutputFormatter() const override;
Runnable runnable() const override;
void doAdditionalSetup(const RunConfigurationCreationInfo &info) override;
@@ -266,6 +265,7 @@ PythonRunConfiguration::PythonRunConfiguration(Target *target)
addExtraAspect(new LocalEnvironmentAspect(this, LocalEnvironmentAspect::BaseEnvironmentModifier()));
addExtraAspect(new ArgumentsAspect(this, "PythonEditor.RunConfiguration.Arguments"));
addExtraAspect(new TerminalAspect(this, "PythonEditor.RunConfiguration.UseTerminal"));
setOutputFormatter<PythonOutputFormatter>();
}
QVariantMap PythonRunConfiguration::toMap() const
@@ -315,11 +315,6 @@ Runnable PythonRunConfiguration::runnable() const
return r;
}
OutputFormatter *PythonRunConfiguration::createOutputFormatter() const
{
return new PythonOutputFormatter;
}
QString PythonRunConfiguration::arguments() const
{
auto aspect = extraAspect<ArgumentsAspect>();

View File

@@ -101,6 +101,8 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target)
addExtraAspect(new WorkingDirectoryAspect(this, "Qbs.RunConfiguration.WorkingDirectory"));
addExtraAspect(new TerminalAspect(this, "Qbs.RunConfiguration.UseTerminal"));
setOutputFormatter<QtSupport::QtOutputFormatter>();
connect(project(), &Project::parsingFinished, this,
[envAspect]() { envAspect->buildEnvironmentHasChanged(); });
@@ -176,11 +178,6 @@ void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
m_envCache.insert(key, env);
}
Utils::OutputFormatter *QbsRunConfiguration::createOutputFormatter() const
{
return new QtSupport::QtOutputFormatter(target()->project());
}
void QbsRunConfiguration::updateTargetInformation()
{
BuildTargetInfo bti = target()->applicationTargets().buildTargetInfo(buildKey());

View File

@@ -49,7 +49,6 @@ public:
QWidget *createConfigurationWidget() final;
ProjectExplorer::Runnable runnable() const final;
Utils::OutputFormatter *createOutputFormatter() const final;
void addToBaseEnvironment(Utils::Environment &env) const;

View File

@@ -82,6 +82,8 @@ DesktopQmakeRunConfiguration::DesktopQmakeRunConfiguration(Target *target)
addExtraAspect(new TerminalAspect(this, "Qt4ProjectManager.Qt4RunConfiguration.UseTerminal"));
addExtraAspect(new WorkingDirectoryAspect(this, "Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"));
setOutputFormatter<QtSupport::QtOutputFormatter>();
connect(target->project(), &Project::parsingFinished,
this, &DesktopQmakeRunConfiguration::updateTargetInformation);
}
@@ -281,11 +283,6 @@ QString DesktopQmakeRunConfiguration::defaultDisplayName()
return tr("Qt Run Configuration");
}
OutputFormatter *DesktopQmakeRunConfiguration::createOutputFormatter() const
{
return new QtSupport::QtOutputFormatter(target()->project());
}
//
// DesktopQmakeRunConfigurationFactory
//

View File

@@ -60,8 +60,6 @@ public:
QVariantMap toMap() const override;
Utils::OutputFormatter *createOutputFormatter() const override;
void addToBaseEnvironment(Utils::Environment &env) const;
signals:

View File

@@ -56,6 +56,7 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target)
: RunConfiguration(target, Constants::QML_SCENE_RC_ID)
{
addExtraAspect(new QmlProjectEnvironmentAspect(this));
setOutputFormatter<QtSupport::QtOutputFormatter>();
// reset default settings in constructor
connect(EditorManager::instance(), &EditorManager::currentEditorChanged,
@@ -147,11 +148,6 @@ QWidget *QmlProjectRunConfiguration::createConfigurationWidget()
return wrapWidget(new Internal::QmlProjectRunConfigurationWidget(this));
}
Utils::OutputFormatter *QmlProjectRunConfiguration::createOutputFormatter() const
{
return new QtSupport::QtOutputFormatter(target()->project());
}
QmlProjectRunConfiguration::MainScriptSource QmlProjectRunConfiguration::mainScriptSource() const
{
QmlProject *project = static_cast<QmlProject *>(target()->project());

View File

@@ -57,10 +57,8 @@ public:
QString mainScript() const;
// RunConfiguration
QString disabledReason() const override;
QWidget *createConfigurationWidget() override;
Utils::OutputFormatter *createOutputFormatter() const override;
QVariantMap toMap() const override;
ProjectExplorer::Abi abi() const override;

View File

@@ -86,6 +86,7 @@ RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *tar
addExtraAspect(new WorkingDirectoryAspect(this, "RemoteLinux.CustomRunConfig.WorkingDirectory"));
addExtraAspect(new RemoteLinuxEnvironmentAspect(this));
setDefaultDisplayName(runConfigDefaultDisplayName());
setOutputFormatter<QtSupport::QtOutputFormatter>();
}
bool RemoteLinuxCustomRunConfiguration::isConfigured() const
@@ -111,11 +112,6 @@ QWidget *RemoteLinuxCustomRunConfiguration::createConfigurationWidget()
return wrapWidget(new RemoteLinuxCustomRunConfigWidget(this));
}
Utils::OutputFormatter *RemoteLinuxCustomRunConfiguration::createOutputFormatter() const
{
return new QtSupport::QtOutputFormatter(target()->project());
}
Runnable RemoteLinuxCustomRunConfiguration::runnable() const
{
StandardRunnable r;

View File

@@ -42,7 +42,6 @@ public:
bool isConfigured() const override;
ConfigurationState ensureConfigured(QString *errorMessage) override;
QWidget *createConfigurationWidget() override;
Utils::OutputFormatter *createOutputFormatter() const override;
ProjectExplorer::Runnable runnable() const override;
QString localExecutableFilePath() const { return m_localExecutable; }
QString remoteExecutableFilePath() const { return m_remoteExecutable; }

View File

@@ -76,6 +76,8 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Core::I
addExtraAspect(new ArgumentsAspect(this, ArgumentsKey));
addExtraAspect(new WorkingDirectoryAspect(this, WorkingDirectoryKey));
setOutputFormatter<QtSupport::QtOutputFormatter>();
connect(target, &Target::deploymentDataChanged,
this, &RemoteLinuxRunConfiguration::handleBuildSystemDataUpdated);
connect(target, &Target::applicationTargetsChanged,
@@ -95,11 +97,6 @@ QWidget *RemoteLinuxRunConfiguration::createConfigurationWidget()
return new RemoteLinuxRunConfigurationWidget(this);
}
OutputFormatter *RemoteLinuxRunConfiguration::createOutputFormatter() const
{
return new QtSupport::QtOutputFormatter(target()->project());
}
Runnable RemoteLinuxRunConfiguration::runnable() const
{
StandardRunnable r;

View File

@@ -46,7 +46,6 @@ public:
~RemoteLinuxRunConfiguration() override;
QWidget *createConfigurationWidget() override;
Utils::OutputFormatter *createOutputFormatter() const override;
ProjectExplorer::Runnable runnable() const override;