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);
|
registerBuildConfiguration<IosBuildConfiguration>(QmakeProjectManager::Constants::QMAKE_BC_ID);
|
||||||
addSupportedTargetDeviceType(Constants::IOS_DEVICE_TYPE);
|
addSupportedTargetDeviceType(Constants::IOS_DEVICE_TYPE);
|
||||||
addSupportedTargetDeviceType(Constants::IOS_SIMULATOR_TYPE);
|
addSupportedTargetDeviceType(Constants::IOS_SIMULATOR_TYPE);
|
||||||
setBasePriority(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -325,7 +325,8 @@ static QList<BuildConfigurationFactory *> g_buildConfigurationFactories;
|
|||||||
|
|
||||||
BuildConfigurationFactory::BuildConfigurationFactory()
|
BuildConfigurationFactory::BuildConfigurationFactory()
|
||||||
{
|
{
|
||||||
g_buildConfigurationFactories.append(this);
|
// Note: Order matters as first-in-queue wins.
|
||||||
|
g_buildConfigurationFactories.prepend(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildConfigurationFactory::~BuildConfigurationFactory()
|
BuildConfigurationFactory::~BuildConfigurationFactory()
|
||||||
@@ -333,11 +334,6 @@ BuildConfigurationFactory::~BuildConfigurationFactory()
|
|||||||
g_buildConfigurationFactories.removeOne(this);
|
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 QList<Task> BuildConfigurationFactory::reportIssues(ProjectExplorer::Kit *kit, const QString &projectPath,
|
||||||
const QString &buildDir) const
|
const QString &buildDir) const
|
||||||
{
|
{
|
||||||
@@ -363,44 +359,27 @@ bool BuildConfigurationFactory::supportsTargetDeviceType(Core::Id id) const
|
|||||||
return m_supportedTargetDeviceTypes.contains(id);
|
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
|
// setup
|
||||||
BuildConfigurationFactory *BuildConfigurationFactory::find(const Kit *k, const QString &projectPath)
|
BuildConfigurationFactory *BuildConfigurationFactory::find(const Kit *k, const QString &projectPath)
|
||||||
{
|
{
|
||||||
BuildConfigurationFactory *factory = nullptr;
|
QTC_ASSERT(k, return nullptr);
|
||||||
int priority = -1;
|
const Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(k);
|
||||||
for (BuildConfigurationFactory *i : g_buildConfigurationFactories) {
|
for (BuildConfigurationFactory *factory : g_buildConfigurationFactories) {
|
||||||
int iPriority = i->priority(k, projectPath);
|
if (Utils::mimeTypeForFile(projectPath).matchesName(factory->m_supportedProjectMimeTypeName)
|
||||||
if (iPriority > priority) {
|
&& factory->supportsTargetDeviceType(deviceType))
|
||||||
factory = i;
|
return factory;
|
||||||
priority = iPriority;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return factory;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create
|
// create
|
||||||
BuildConfigurationFactory * BuildConfigurationFactory::find(Target *parent)
|
BuildConfigurationFactory * BuildConfigurationFactory::find(Target *parent)
|
||||||
{
|
{
|
||||||
BuildConfigurationFactory *factory = nullptr;
|
for (BuildConfigurationFactory *factory : g_buildConfigurationFactories) {
|
||||||
int priority = -1;
|
if (factory->canHandle(parent))
|
||||||
for (BuildConfigurationFactory *i : g_buildConfigurationFactories) {
|
return factory;
|
||||||
int iPriority = i->priority(parent);
|
|
||||||
if (iPriority > priority) {
|
|
||||||
factory = i;
|
|
||||||
priority = iPriority;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return factory;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildConfigurationFactory::setSupportedProjectType(Core::Id id)
|
void BuildConfigurationFactory::setSupportedProjectType(Core::Id id)
|
||||||
@@ -418,11 +397,6 @@ void BuildConfigurationFactory::addSupportedTargetDeviceType(Core::Id id)
|
|||||||
m_supportedTargetDeviceTypes.append(id);
|
m_supportedTargetDeviceTypes.append(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildConfigurationFactory::setBasePriority(int basePriority)
|
|
||||||
{
|
|
||||||
m_basePriority = basePriority;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BuildConfigurationFactory::canHandle(const Target *target) const
|
bool BuildConfigurationFactory::canHandle(const Target *target) const
|
||||||
{
|
{
|
||||||
if (m_supportedProjectType.isValid() && m_supportedProjectType != target->project()->id())
|
if (m_supportedProjectType.isValid() && m_supportedProjectType != target->project()->id())
|
||||||
@@ -456,32 +430,22 @@ BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const Buil
|
|||||||
|
|
||||||
BuildConfiguration *BuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
|
BuildConfiguration *BuildConfigurationFactory::restore(Target *parent, const QVariantMap &map)
|
||||||
{
|
{
|
||||||
BuildConfigurationFactory *factory = nullptr;
|
const Core::Id id = idFromMap(map);
|
||||||
int priority = -1;
|
for (BuildConfigurationFactory *factory : g_buildConfigurationFactories) {
|
||||||
for (BuildConfigurationFactory *i : g_buildConfigurationFactories) {
|
QTC_ASSERT(factory->m_creator, return nullptr);
|
||||||
if (!i->canHandle(parent))
|
if (!factory->canHandle(parent))
|
||||||
continue;
|
continue;
|
||||||
const Core::Id id = idFromMap(map);
|
if (!id.name().startsWith(factory->m_buildConfigId.name()))
|
||||||
if (!id.name().startsWith(i->m_buildConfigId.name()))
|
|
||||||
continue;
|
continue;
|
||||||
int iPriority = i->priority(parent);
|
BuildConfiguration *bc = factory->m_creator(parent);
|
||||||
if (iPriority > priority) {
|
QTC_ASSERT(bc, return nullptr);
|
||||||
factory = i;
|
if (!bc->fromMap(map)) {
|
||||||
priority = iPriority;
|
delete bc;
|
||||||
|
bc = nullptr;
|
||||||
}
|
}
|
||||||
|
return bc;
|
||||||
}
|
}
|
||||||
|
return nullptr;
|
||||||
if (!factory)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
QTC_ASSERT(factory->m_creator, return nullptr);
|
|
||||||
BuildConfiguration *bc = factory->m_creator(parent);
|
|
||||||
QTC_ASSERT(bc, return nullptr);
|
|
||||||
if (!bc->fromMap(map)) {
|
|
||||||
delete bc;
|
|
||||||
bc = nullptr;
|
|
||||||
}
|
|
||||||
return bc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildConfiguration *BuildConfigurationFactory::clone(Target *parent,
|
BuildConfiguration *BuildConfigurationFactory::clone(Target *parent,
|
||||||
|
@@ -128,15 +128,10 @@ protected:
|
|||||||
~BuildConfigurationFactory() override;
|
~BuildConfigurationFactory() override;
|
||||||
|
|
||||||
public:
|
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
|
// List of build information that can be used to create a new build configuration via
|
||||||
// "Add Build Configuration" button.
|
// "Add Build Configuration" button.
|
||||||
const QList<BuildInfo> allAvailableBuilds(const Target *parent) const;
|
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.
|
// 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;
|
const QList<BuildInfo> allAvailableSetups(const Kit *k, const QString &projectPath) const;
|
||||||
|
|
||||||
@@ -162,7 +157,6 @@ protected:
|
|||||||
void setSupportedProjectMimeTypeName(const QString &mimeTypeName);
|
void setSupportedProjectMimeTypeName(const QString &mimeTypeName);
|
||||||
void addSupportedTargetDeviceType(Core::Id id);
|
void addSupportedTargetDeviceType(Core::Id id);
|
||||||
void setDefaultDisplayName(const QString &defaultDisplayName);
|
void setDefaultDisplayName(const QString &defaultDisplayName);
|
||||||
void setBasePriority(int basePriority);
|
|
||||||
|
|
||||||
using BuildConfigurationCreator = std::function<BuildConfiguration *(Target *)>;
|
using BuildConfigurationCreator = std::function<BuildConfiguration *(Target *)>;
|
||||||
|
|
||||||
@@ -183,8 +177,6 @@ private:
|
|||||||
QList<Core::Id> m_supportedTargetDeviceTypes;
|
QList<Core::Id> m_supportedTargetDeviceTypes;
|
||||||
QString m_supportedProjectMimeTypeName;
|
QString m_supportedProjectMimeTypeName;
|
||||||
IssueReporter m_issueReporter;
|
IssueReporter m_issueReporter;
|
||||||
|
|
||||||
int m_basePriority = 0; // Use higher numbers (1, 2, ...) for higher priorities.
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ProjectExplorer
|
} // namespace ProjectExplorer
|
||||||
|
@@ -85,11 +85,6 @@ public:
|
|||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
int priority(const ProjectExplorer::Kit *, const QString &) const final
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
QmlProfilerDetailsRewriterTest::QmlProfilerDetailsRewriterTest(QObject *parent) : QObject(parent)
|
QmlProfilerDetailsRewriterTest::QmlProfilerDetailsRewriterTest(QObject *parent) : QObject(parent)
|
||||||
|
Reference in New Issue
Block a user