forked from qt-creator/qt-creator
ProjectExplorer: Remove BuildConfigurationFactory::priority
It's essentially an intrusive hack that's used only to prioritize Ios+Qmake over plain Qmake. The effect is now achieved by an arguably equally evil dependency on the construction order of BuildConfiguration factories. It can be argued, however, that this is a feature as it allows user plugins to intentionally override core functionality by using the standard setup pattern and depending on the to-be- overridden plugin. Change-Id: Ic1efa305daf3ca19a880d2a7ccb40e2768d8f57c Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -145,7 +145,6 @@ IosBuildConfigurationFactory::IosBuildConfigurationFactory()
|
||||
registerBuildConfiguration<IosBuildConfiguration>(QmakeProjectManager::Constants::QMAKE_BC_ID);
|
||||
addSupportedTargetDeviceType(Constants::IOS_DEVICE_TYPE);
|
||||
addSupportedTargetDeviceType(Constants::IOS_SIMULATOR_TYPE);
|
||||
setBasePriority(1);
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
@@ -325,7 +325,8 @@ static QList<BuildConfigurationFactory *> g_buildConfigurationFactories;
|
||||
|
||||
BuildConfigurationFactory::BuildConfigurationFactory()
|
||||
{
|
||||
g_buildConfigurationFactories.append(this);
|
||||
// Note: Order matters as first-in-queue wins.
|
||||
g_buildConfigurationFactories.prepend(this);
|
||||
}
|
||||
|
||||
BuildConfigurationFactory::~BuildConfigurationFactory()
|
||||
@@ -333,11 +334,6 @@ BuildConfigurationFactory::~BuildConfigurationFactory()
|
||||
g_buildConfigurationFactories.removeOne(this);
|
||||
}
|
||||
|
||||
int BuildConfigurationFactory::priority(const Target *parent) const
|
||||
{
|
||||
return canHandle(parent) ? m_basePriority : -1;
|
||||
}
|
||||
|
||||
const QList<Task> BuildConfigurationFactory::reportIssues(ProjectExplorer::Kit *kit, const QString &projectPath,
|
||||
const QString &buildDir) const
|
||||
{
|
||||
@@ -363,45 +359,28 @@ bool BuildConfigurationFactory::supportsTargetDeviceType(Core::Id id) const
|
||||
return m_supportedTargetDeviceTypes.contains(id);
|
||||
}
|
||||
|
||||
int BuildConfigurationFactory::priority(const Kit *k, const QString &projectPath) const
|
||||
{
|
||||
QTC_ASSERT(!m_supportedProjectMimeTypeName.isEmpty(), return -1);
|
||||
if (k && Utils::mimeTypeForFile(projectPath).matchesName(m_supportedProjectMimeTypeName)
|
||||
&& supportsTargetDeviceType(DeviceTypeKitInformation::deviceTypeId(k))) {
|
||||
return m_basePriority;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// setup
|
||||
BuildConfigurationFactory *BuildConfigurationFactory::find(const Kit *k, const QString &projectPath)
|
||||
{
|
||||
BuildConfigurationFactory *factory = nullptr;
|
||||
int priority = -1;
|
||||
for (BuildConfigurationFactory *i : g_buildConfigurationFactories) {
|
||||
int iPriority = i->priority(k, projectPath);
|
||||
if (iPriority > priority) {
|
||||
factory = i;
|
||||
priority = iPriority;
|
||||
}
|
||||
}
|
||||
QTC_ASSERT(k, return nullptr);
|
||||
const Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(k);
|
||||
for (BuildConfigurationFactory *factory : g_buildConfigurationFactories) {
|
||||
if (Utils::mimeTypeForFile(projectPath).matchesName(factory->m_supportedProjectMimeTypeName)
|
||||
&& factory->supportsTargetDeviceType(deviceType))
|
||||
return factory;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// create
|
||||
BuildConfigurationFactory * BuildConfigurationFactory::find(Target *parent)
|
||||
{
|
||||
BuildConfigurationFactory *factory = nullptr;
|
||||
int priority = -1;
|
||||
for (BuildConfigurationFactory *i : g_buildConfigurationFactories) {
|
||||
int iPriority = i->priority(parent);
|
||||
if (iPriority > priority) {
|
||||
factory = i;
|
||||
priority = iPriority;
|
||||
}
|
||||
}
|
||||
for (BuildConfigurationFactory *factory : g_buildConfigurationFactories) {
|
||||
if (factory->canHandle(parent))
|
||||
return factory;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void BuildConfigurationFactory::setSupportedProjectType(Core::Id id)
|
||||
{
|
||||
@@ -418,11 +397,6 @@ void BuildConfigurationFactory::addSupportedTargetDeviceType(Core::Id id)
|
||||
m_supportedTargetDeviceTypes.append(id);
|
||||
}
|
||||
|
||||
void BuildConfigurationFactory::setBasePriority(int basePriority)
|
||||
{
|
||||
m_basePriority = basePriority;
|
||||
}
|
||||
|
||||
bool BuildConfigurationFactory::canHandle(const Target *target) const
|
||||
{
|
||||
if (m_supportedProjectType.isValid() && m_supportedProjectType != target->project()->id())
|
||||
@@ -456,25 +430,13 @@ BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const Buil
|
||||
|
||||
BuildConfiguration *BuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
|
||||
{
|
||||
BuildConfigurationFactory *factory = nullptr;
|
||||
int priority = -1;
|
||||
for (BuildConfigurationFactory *i : g_buildConfigurationFactories) {
|
||||
if (!i->canHandle(parent))
|
||||
continue;
|
||||
const Core::Id id = idFromMap(map);
|
||||
if (!id.name().startsWith(i->m_buildConfigId.name()))
|
||||
continue;
|
||||
int iPriority = i->priority(parent);
|
||||
if (iPriority > priority) {
|
||||
factory = i;
|
||||
priority = iPriority;
|
||||
}
|
||||
}
|
||||
|
||||
if (!factory)
|
||||
return nullptr;
|
||||
|
||||
for (BuildConfigurationFactory *factory : g_buildConfigurationFactories) {
|
||||
QTC_ASSERT(factory->m_creator, return nullptr);
|
||||
if (!factory->canHandle(parent))
|
||||
continue;
|
||||
if (!id.name().startsWith(factory->m_buildConfigId.name()))
|
||||
continue;
|
||||
BuildConfiguration *bc = factory->m_creator(parent);
|
||||
QTC_ASSERT(bc, return nullptr);
|
||||
if (!bc->fromMap(map)) {
|
||||
@@ -483,6 +445,8 @@ BuildConfiguration *BuildConfigurationFactory::restore(Target *parent, const QVa
|
||||
}
|
||||
return bc;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BuildConfiguration *BuildConfigurationFactory::clone(Target *parent,
|
||||
const BuildConfiguration *source)
|
||||
|
@@ -128,15 +128,10 @@ protected:
|
||||
~BuildConfigurationFactory() override;
|
||||
|
||||
public:
|
||||
// The priority is negative if this factory cannot create anything for the target.
|
||||
// It is 0 for the "default" factory that wants to handle the target.
|
||||
// Add 100 for each specialization.
|
||||
virtual int priority(const Target *parent) const;
|
||||
// List of build information that can be used to create a new build configuration via
|
||||
// "Add Build Configuration" button.
|
||||
const QList<BuildInfo> allAvailableBuilds(const Target *parent) const;
|
||||
|
||||
virtual int priority(const Kit *k, const QString &projectPath) const;
|
||||
// List of build information that can be used to initially set up a new build configuration.
|
||||
const QList<BuildInfo> allAvailableSetups(const Kit *k, const QString &projectPath) const;
|
||||
|
||||
@@ -162,7 +157,6 @@ protected:
|
||||
void setSupportedProjectMimeTypeName(const QString &mimeTypeName);
|
||||
void addSupportedTargetDeviceType(Core::Id id);
|
||||
void setDefaultDisplayName(const QString &defaultDisplayName);
|
||||
void setBasePriority(int basePriority);
|
||||
|
||||
using BuildConfigurationCreator = std::function<BuildConfiguration *(Target *)>;
|
||||
|
||||
@@ -183,8 +177,6 @@ private:
|
||||
QList<Core::Id> m_supportedTargetDeviceTypes;
|
||||
QString m_supportedProjectMimeTypeName;
|
||||
IssueReporter m_issueReporter;
|
||||
|
||||
int m_basePriority = 0; // Use higher numbers (1, 2, ...) for higher priorities.
|
||||
};
|
||||
|
||||
} // namespace ProjectExplorer
|
||||
|
@@ -85,11 +85,6 @@ public:
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
int priority(const ProjectExplorer::Kit *, const QString &) const final
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
QmlProfilerDetailsRewriterTest::QmlProfilerDetailsRewriterTest(QObject *parent) : QObject(parent)
|
||||
|
Reference in New Issue
Block a user