ProjectExplorer: De-QObject-ify BuildConfigurationFactories

The QObject was not heavily used. Object name was for debugging only,
translation context can be taken from the corresponding BuildConfiguration
objects, the qobject_casts in the three big importers are replaced by
dynamic_cast, which is good enough in that context.

Take the opportunity to re-use translations from base BuildConfiguration
for the common cases and sprinkle in some 'final'.

Change-Id: I8e9727c98c6e943cb333556861c24e701c2bdf45
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2020-01-09 17:32:51 +01:00
parent 675c414b07
commit 1eaf44a270
20 changed files with 45 additions and 65 deletions

View File

@@ -78,13 +78,13 @@ AutotoolsBuildConfigurationFactory::AutotoolsBuildConfigurationFactory()
setBuildGenerator([this](const Kit *k, const FilePath &projectPath, bool forSetup) { setBuildGenerator([this](const Kit *k, const FilePath &projectPath, bool forSetup) {
BuildInfo info(this); BuildInfo info(this);
info.typeName = tr("Build"); info.typeName = BuildConfiguration::tr("Build");
info.buildDirectory = forSetup info.buildDirectory = forSetup
? FilePath::fromString(projectPath.toFileInfo().absolutePath()) : projectPath; ? FilePath::fromString(projectPath.toFileInfo().absolutePath()) : projectPath;
info.kitId = k->id(); info.kitId = k->id();
if (forSetup) { if (forSetup) {
//: The name of the build configuration created by default for a autotools project. //: The name of the build configuration created by default for a autotools project.
info.displayName = tr("Default"); info.displayName = BuildConfiguration::tr("Default");
} }
return QList<BuildInfo>{info}; return QList<BuildInfo>{info};
}); });

View File

@@ -40,10 +40,8 @@ class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration
AutotoolsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); AutotoolsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
}; };
class AutotoolsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory class AutotoolsBuildConfigurationFactory final : public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
AutotoolsBuildConfigurationFactory(); AutotoolsBuildConfigurationFactory();
}; };

View File

@@ -467,27 +467,27 @@ BuildInfo CMakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
switch (buildType) { switch (buildType) {
case BuildTypeNone: case BuildTypeNone:
info.typeName = "Build"; info.typeName = "Build";
info.displayName = tr("Build"); info.displayName = BuildConfiguration::tr("Build");
info.buildType = BuildConfiguration::Unknown; info.buildType = BuildConfiguration::Unknown;
break; break;
case BuildTypeDebug: case BuildTypeDebug:
info.typeName = "Debug"; info.typeName = "Debug";
info.displayName = tr("Debug"); info.displayName = BuildConfiguration::tr("Debug");
info.buildType = BuildConfiguration::Debug; info.buildType = BuildConfiguration::Debug;
break; break;
case BuildTypeRelease: case BuildTypeRelease:
info.typeName = "Release"; info.typeName = "Release";
info.displayName = tr("Release"); info.displayName = BuildConfiguration::tr("Release");
info.buildType = BuildConfiguration::Release; info.buildType = BuildConfiguration::Release;
break; break;
case BuildTypeMinSizeRel: case BuildTypeMinSizeRel:
info.typeName = "MinSizeRel"; info.typeName = "MinSizeRel";
info.displayName = tr("Minimum Size Release"); info.displayName = CMakeBuildConfiguration::tr("Minimum Size Release");
info.buildType = BuildConfiguration::Release; info.buildType = BuildConfiguration::Release;
break; break;
case BuildTypeRelWithDebInfo: case BuildTypeRelWithDebInfo:
info.typeName = "RelWithDebInfo"; info.typeName = "RelWithDebInfo";
info.displayName = tr("Release with Debug Information"); info.displayName = CMakeBuildConfiguration::tr("Release with Debug Information");
info.buildType = BuildConfiguration::Profile; info.buildType = BuildConfiguration::Profile;
break; break;
default: default:

View File

@@ -109,10 +109,8 @@ private:
class CMakeProjectImporter; class CMakeProjectImporter;
class CMakeBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory class CMakeBuildConfigurationFactory final : public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
CMakeBuildConfigurationFactory(); CMakeBuildConfigurationFactory();

View File

@@ -338,7 +338,7 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const
const QList<BuildInfo> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const const QList<BuildInfo> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
{ {
auto data = static_cast<const DirectoryData *>(directoryData); auto data = static_cast<const DirectoryData *>(directoryData);
auto factory = qobject_cast<CMakeBuildConfigurationFactory *>( auto factory = dynamic_cast<CMakeBuildConfigurationFactory *>(
BuildConfigurationFactory::find(k, projectFilePath())); BuildConfigurationFactory::find(k, projectFilePath()));
if (!factory) if (!factory)
return {}; return {};

View File

@@ -540,7 +540,7 @@ CompilationDatabaseBuildConfigurationFactory::CompilationDatabaseBuildConfigurat
setSupportedProjectMimeTypeName(Constants::COMPILATIONDATABASEMIMETYPE); setSupportedProjectMimeTypeName(Constants::COMPILATIONDATABASEMIMETYPE);
setBuildGenerator([this](const Kit *kit, const FilePath &projectPath, bool) { setBuildGenerator([this](const Kit *kit, const FilePath &projectPath, bool) {
const QString name = tr("Release"); const QString name = BuildConfiguration::tr("Release");
ProjectExplorer::BuildInfo info(this); ProjectExplorer::BuildInfo info(this);
info.typeName = name; info.typeName = name;
info.displayName = name; info.displayName = name;

View File

@@ -94,10 +94,8 @@ public:
CompilationDatabaseEditorFactory(); CompilationDatabaseEditorFactory();
}; };
class CompilationDatabaseBuildConfigurationFactory class CompilationDatabaseBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory
: public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
CompilationDatabaseBuildConfigurationFactory(); CompilationDatabaseBuildConfigurationFactory();
}; };

View File

@@ -65,9 +65,7 @@ GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, Core::Id id
} }
/*! // GenericBuildConfigurationFactory
\class GenericBuildConfigurationFactory
*/
GenericBuildConfigurationFactory::GenericBuildConfigurationFactory() GenericBuildConfigurationFactory::GenericBuildConfigurationFactory()
{ {
@@ -79,13 +77,13 @@ GenericBuildConfigurationFactory::GenericBuildConfigurationFactory()
setBuildGenerator([this](const Kit *k, const FilePath &projectPath, bool forSetup) { setBuildGenerator([this](const Kit *k, const FilePath &projectPath, bool forSetup) {
BuildInfo info(this); BuildInfo info(this);
info.typeName = tr("Build"); info.typeName = BuildConfiguration::tr("Build");
info.buildDirectory = forSetup ? Project::projectDirectory(projectPath) : projectPath; info.buildDirectory = forSetup ? Project::projectDirectory(projectPath) : projectPath;
info.kitId = k->id(); info.kitId = k->id();
if (forSetup) { if (forSetup) {
//: The name of the build configuration created by default for a generic project. //: The name of the build configuration created by default for a generic project.
info.displayName = tr("Default"); info.displayName = BuildConfiguration::tr("Default");
} }
return QList<BuildInfo>{info}; return QList<BuildInfo>{info};

View File

@@ -40,10 +40,8 @@ class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
void addToEnvironment(Utils::Environment &env) const final; void addToEnvironment(Utils::Environment &env) const final;
}; };
class GenericBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory class GenericBuildConfigurationFactory final : public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
GenericBuildConfigurationFactory(); GenericBuildConfigurationFactory();
}; };

View File

@@ -99,8 +99,8 @@ NimbleBuildConfigurationFactory::NimbleBuildConfigurationFactory()
return info; return info;
}; };
return QList<BuildInfo>{ return QList<BuildInfo>{
oneBuild(BuildConfiguration::Debug, tr("Debug")), oneBuild(BuildConfiguration::Debug, BuildConfiguration::tr("Debug")),
oneBuild(BuildConfiguration::Release, tr("Release")) oneBuild(BuildConfiguration::Release, BuildConfiguration::tr("Release"))
}; };
}); });
} }

View File

@@ -48,12 +48,10 @@ private:
BuildType m_buildType; BuildType m_buildType;
}; };
class NimbleBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory class NimbleBuildConfigurationFactory final : public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
NimbleBuildConfigurationFactory(); NimbleBuildConfigurationFactory();
}; };
} } // Nim

View File

@@ -148,8 +148,8 @@ NimBuildConfigurationFactory::NimBuildConfigurationFactory()
return info; return info;
}; };
return QList<BuildInfo>{ return QList<BuildInfo>{
oneBuild(BuildConfiguration::Debug, tr("Debug")), oneBuild(BuildConfiguration::Debug, BuildConfiguration::tr("Debug")),
oneBuild(BuildConfiguration::Release, tr("Release")) oneBuild(BuildConfiguration::Release, BuildConfiguration::tr("Release"))
}; };
}); });
} }

View File

@@ -52,12 +52,10 @@ private:
}; };
class NimBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory class NimBuildConfigurationFactory final : public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
NimBuildConfigurationFactory(); NimBuildConfigurationFactory();
}; };
} } // Nim

View File

@@ -132,13 +132,14 @@ private:
Internal::BuildConfigurationPrivate *d = nullptr; Internal::BuildConfigurationPrivate *d = nullptr;
}; };
class PROJECTEXPLORER_EXPORT BuildConfigurationFactory : public QObject class PROJECTEXPLORER_EXPORT BuildConfigurationFactory
{ {
Q_OBJECT
protected: protected:
BuildConfigurationFactory(); BuildConfigurationFactory();
~BuildConfigurationFactory() override; BuildConfigurationFactory(const BuildConfigurationFactory &) = delete;
BuildConfigurationFactory &operator=(const BuildConfigurationFactory &) = delete;
virtual ~BuildConfigurationFactory(); // Needed for dynamic_casts in importers.
public: public:
// List of build information that can be used to create a new build configuration via // List of build information that can be used to create a new build configuration via
@@ -178,7 +179,6 @@ protected:
template <class BuildConfig> template <class BuildConfig>
void registerBuildConfiguration(Core::Id buildConfigId) void registerBuildConfiguration(Core::Id buildConfigId)
{ {
setObjectName(buildConfigId.toString() + "BuildConfigurationFactory");
m_creator = [buildConfigId](Target *t) { return new BuildConfig(t, buildConfigId); }; m_creator = [buildConfigId](Target *t) { return new BuildConfig(t, buildConfigId); };
m_buildConfigId = buildConfigId; m_buildConfigId = buildConfigId;
} }

View File

@@ -430,20 +430,18 @@ QbsBuildConfigurationFactory::QbsBuildConfigurationFactory()
BuildInfo info = createBuildInfo(k, BuildConfiguration::Debug); BuildInfo info = createBuildInfo(k, BuildConfiguration::Debug);
//: The name of the debug build configuration created by default for a qbs project. //: The name of the debug build configuration created by default for a qbs project.
info.displayName = tr("Debug"); info.displayName = BuildConfiguration::tr("Debug");
//: Non-ASCII characters in directory suffix may cause build issues. //: Non-ASCII characters in directory suffix may cause build issues.
info.buildDirectory const QString dbg = QbsBuildConfiguration::tr("Debug", "Shadow build directory suffix");
= defaultBuildDirectory(projectPath, k, tr("Debug", "Shadow build directory suffix"), info.buildDirectory = defaultBuildDirectory(projectPath, k, dbg, info.buildType);
info.buildType);
result << info; result << info;
info = createBuildInfo(k, BuildConfiguration::Release); info = createBuildInfo(k, BuildConfiguration::Release);
//: The name of the release build configuration created by default for a qbs project. //: The name of the release build configuration created by default for a qbs project.
info.displayName = tr("Release"); info.displayName = BuildConfiguration::tr("Release");
//: Non-ASCII characters in directory suffix may cause build issues. //: Non-ASCII characters in directory suffix may cause build issues.
info.buildDirectory const QString rel = QbsBuildConfiguration::tr("Release", "Shadow build directory suffix");
= defaultBuildDirectory(projectPath, k, tr("Release", "Shadow build directory suffix"), info.buildDirectory = defaultBuildDirectory(projectPath, k, rel, info.buildType);
info.buildType);
result << info; result << info;
} else { } else {
@@ -462,7 +460,7 @@ BuildInfo QbsBuildConfigurationFactory::createBuildInfo(const Kit *k,
BuildInfo info(this); BuildInfo info(this);
info.kitId = k->id(); info.kitId = k->id();
info.buildType = type; info.buildType = type;
info.typeName = tr("Build"); info.typeName = BuildConfiguration::tr("Build");
QVariantMap config; QVariantMap config;
config.insert("configName", type == BuildConfiguration::Debug ? "Debug" : "Release"); config.insert("configName", type == BuildConfiguration::Debug ? "Debug" : "Release");
info.extraInfo = config; info.extraInfo = config;

View File

@@ -95,10 +95,8 @@ private:
QbsBuildSystem *m_buildSystem = nullptr; QbsBuildSystem *m_buildSystem = nullptr;
}; };
class QbsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory class QbsBuildConfigurationFactory final : public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
QbsBuildConfigurationFactory(); QbsBuildConfigurationFactory();

View File

@@ -221,7 +221,7 @@ Kit *QbsProjectImporter::createKit(void *directoryData) const
const QList<BuildInfo> QbsProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const const QList<BuildInfo> QbsProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
{ {
qCDebug(qbsPmLog) << "creating build info for kit" << k->displayName(); qCDebug(qbsPmLog) << "creating build info for kit" << k->displayName();
const auto factory = qobject_cast<QbsBuildConfigurationFactory *>( const auto factory = dynamic_cast<QbsBuildConfigurationFactory *>(
BuildConfigurationFactory::find(k, projectFilePath())); BuildConfigurationFactory::find(k, projectFilePath()));
if (!factory) { if (!factory) {
qCDebug(qbsPmLog) << "no build config factory found"; qCDebug(qbsPmLog) << "no build config factory found";

View File

@@ -750,9 +750,9 @@ BuildInfo QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
if (type == BuildConfiguration::Release) { if (type == BuildConfiguration::Release) {
//: The name of the release build configuration created by default for a qmake project. //: The name of the release build configuration created by default for a qmake project.
info.displayName = tr("Release"); info.displayName = BuildConfiguration::tr("Release");
//: Non-ASCII characters in directory suffix may cause build issues. //: Non-ASCII characters in directory suffix may cause build issues.
suffix = tr("Release", "Shadow build directory suffix"); suffix = QmakeBuildConfiguration::tr("Release", "Shadow build directory suffix");
if (settings.qtQuickCompiler == TriState::Default) { if (settings.qtQuickCompiler == TriState::Default) {
if (version && version->isQtQuickCompilerSupported()) if (version && version->isQtQuickCompilerSupported())
extraInfo.config.useQtQuickCompiler = TriState::Enabled; extraInfo.config.useQtQuickCompiler = TriState::Enabled;
@@ -760,14 +760,14 @@ BuildInfo QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
} else { } else {
if (type == BuildConfiguration::Debug) { if (type == BuildConfiguration::Debug) {
//: The name of the debug build configuration created by default for a qmake project. //: The name of the debug build configuration created by default for a qmake project.
info.displayName = tr("Debug"); info.displayName = BuildConfiguration::tr("Debug");
//: Non-ASCII characters in directory suffix may cause build issues. //: Non-ASCII characters in directory suffix may cause build issues.
suffix = tr("Debug", "Shadow build directory suffix"); suffix = QmakeBuildConfiguration::tr("Debug", "Shadow build directory suffix");
} else if (type == BuildConfiguration::Profile) { } else if (type == BuildConfiguration::Profile) {
//: The name of the profile build configuration created by default for a qmake project. //: The name of the profile build configuration created by default for a qmake project.
info.displayName = tr("Profile"); info.displayName = BuildConfiguration::tr("Profile");
//: Non-ASCII characters in directory suffix may cause build issues. //: Non-ASCII characters in directory suffix may cause build issues.
suffix = tr("Profile", "Shadow build directory suffix"); suffix = QmakeBuildConfiguration::tr("Profile", "Shadow build directory suffix");
if (settings.separateDebugInfo == TriState::Default) if (settings.separateDebugInfo == TriState::Default)
extraInfo.config.separateDebugInfo = TriState::Enabled; extraInfo.config.separateDebugInfo = TriState::Enabled;

View File

@@ -153,8 +153,6 @@ private:
class QMAKEPROJECTMANAGER_EXPORT QmakeBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory class QMAKEPROJECTMANAGER_EXPORT QmakeBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory
{ {
Q_OBJECT
public: public:
QmakeBuildConfigurationFactory(); QmakeBuildConfigurationFactory();

View File

@@ -235,7 +235,7 @@ Kit *QmakeProjectImporter::createKit(void *directoryData) const
const QList<BuildInfo> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const const QList<BuildInfo> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
{ {
auto *data = static_cast<DirectoryData *>(directoryData); auto *data = static_cast<DirectoryData *>(directoryData);
auto factory = qobject_cast<QmakeBuildConfigurationFactory *>( auto factory = dynamic_cast<QmakeBuildConfigurationFactory *>(
BuildConfigurationFactory::find(k, projectFilePath())); BuildConfigurationFactory::find(k, projectFilePath()));
if (!factory) if (!factory)
return {}; return {};