aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-01-29 16:51:17 +0100
committerhjk <hjk@qt.io>2019-01-30 16:51:05 +0000
commit9bb936499d5e386a3439e6e2856acf0caba38bc7 (patch)
tree2d8503afa77b52696a1aa83b2c6a949b64c18b8e /src/plugins/projectexplorer
parent5cf2889856847389556e6adba3e3609252dd1429 (diff)
ProjectExplorer: Collapse BuildInfo hierarchy
... to pass it around as real values, avoiding, among others, the need of occasional explicit deletion. The formerly extra members of the derived stuff are handled via an extra variant (for data) and via a functor in the build configuration factory. The change is mechanical. Change-Id: I19ca4e0c5f0a5b196fc16dfb98bb005dc679f855 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer')
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp33
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h19
-rw-r--r--src/plugins/projectexplorer/buildinfo.cpp3
-rw-r--r--src/plugins/projectexplorer/buildinfo.h23
-rw-r--r--src/plugins/projectexplorer/buildsettingspropertiespage.cpp22
-rw-r--r--src/plugins/projectexplorer/buildsettingspropertiespage.h3
-rw-r--r--src/plugins/projectexplorer/project.cpp14
-rw-r--r--src/plugins/projectexplorer/project.h2
-rw-r--r--src/plugins/projectexplorer/projectimporter.cpp10
-rw-r--r--src/plugins/projectexplorer/projectimporter.h4
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp11
-rw-r--r--src/plugins/projectexplorer/target.cpp10
-rw-r--r--src/plugins/projectexplorer/targetsetuppage.cpp15
-rw-r--r--src/plugins/projectexplorer/targetsetupwidget.cpp45
-rw-r--r--src/plugins/projectexplorer/targetsetupwidget.h10
15 files changed, 114 insertions, 110 deletions
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index d44c92bb0f..8828f36f64 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -103,11 +103,11 @@ void BuildConfiguration::setBuildDirectory(const Utils::FileName &dir)
emitBuildDirectoryChanged();
}
-void BuildConfiguration::initialize(const BuildInfo *info)
+void BuildConfiguration::initialize(const BuildInfo &info)
{
- setDisplayName(info->displayName);
- setDefaultDisplayName(info->displayName);
- setBuildDirectory(info->buildDirectory);
+ setDisplayName(info.displayName);
+ setDefaultDisplayName(info.displayName);
+ setBuildDirectory(info.buildDirectory);
m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_BUILD));
m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_CLEAN));
@@ -338,6 +338,24 @@ 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
+{
+ if (m_issueReporter)
+ return m_issueReporter(kit, projectPath, buildDir);
+ return {};
+}
+
+const QList<BuildInfo> BuildConfigurationFactory::allAvailableBuilds(const Target *parent) const
+{
+ return availableBuilds(parent);
+}
+
+const QList<BuildInfo> BuildConfigurationFactory::allAvailableSetups(const Kit *k, const QString &projectPath) const
+{
+ return availableSetups(k, projectPath);
+}
+
bool BuildConfigurationFactory::supportsTargetDeviceType(Core::Id id) const
{
if (m_supportedTargetDeviceTypes.isEmpty())
@@ -419,7 +437,12 @@ bool BuildConfigurationFactory::canHandle(const Target *target) const
return true;
}
-BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
+void BuildConfigurationFactory::setIssueReporter(const IssueReporter &issueReporter)
+{
+ m_issueReporter = issueReporter;
+}
+
+BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const BuildInfo &info) const
{
if (!canHandle(parent))
return nullptr;
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 1c2961c773..f71e895a23 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -39,6 +39,7 @@ class BuildStepList;
class Node;
class Kit;
class Target;
+class Task;
class IOutputParser;
class PROJECTEXPLORER_EXPORT BuildConfiguration : public ProjectConfiguration
@@ -105,7 +106,7 @@ signals:
void buildTypeChanged();
protected:
- virtual void initialize(const BuildInfo *info);
+ virtual void initialize(const BuildInfo &info);
private:
void emitBuildDirectoryChanged();
@@ -133,13 +134,13 @@ public:
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.
- virtual QList<BuildInfo *> availableBuilds(const Target *parent) const = 0;
+ 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.
- virtual QList<BuildInfo *> availableSetups(const Kit *k, const QString &projectPath) const = 0;
+ const QList<BuildInfo> allAvailableSetups(const Kit *k, const QString &projectPath) const;
- BuildConfiguration *create(Target *parent, const BuildInfo *info) const;
+ BuildConfiguration *create(Target *parent, const BuildInfo &info) const;
static BuildConfiguration *restore(Target *parent, const QVariantMap &map);
static BuildConfiguration *clone(Target *parent, const BuildConfiguration *source);
@@ -147,7 +148,15 @@ public:
static BuildConfigurationFactory *find(const Kit *k, const QString &projectPath);
static BuildConfigurationFactory *find(Target *parent);
+ using IssueReporter = std::function<QList<ProjectExplorer::Task>(Kit *, const QString &, const QString &)>;
+ void setIssueReporter(const IssueReporter &issueReporter);
+ const QList<Task> reportIssues(ProjectExplorer::Kit *kit,
+ const QString &projectPath, const QString &buildDir) const;
+
protected:
+ virtual QList<BuildInfo> availableBuilds(const Target *parent) const = 0;
+ virtual QList<BuildInfo> availableSetups(const Kit *k, const QString &projectPath) const = 0;
+
bool supportsTargetDeviceType(Core::Id id) const;
void setSupportedProjectType(Core::Id id);
void setSupportedProjectMimeTypeName(const QString &mimeTypeName);
@@ -173,6 +182,8 @@ private:
Core::Id m_supportedProjectType;
QList<Core::Id> m_supportedTargetDeviceTypes;
QString m_supportedProjectMimeTypeName;
+ IssueReporter m_issueReporter;
+
int m_basePriority = 0; // Use higher numbers (1, 2, ...) for higher priorities.
};
diff --git a/src/plugins/projectexplorer/buildinfo.cpp b/src/plugins/projectexplorer/buildinfo.cpp
index 67dca0e280..5afaf27791 100644
--- a/src/plugins/projectexplorer/buildinfo.cpp
+++ b/src/plugins/projectexplorer/buildinfo.cpp
@@ -27,4 +27,5 @@
using namespace ProjectExplorer;
-BuildInfo::~BuildInfo() = default;
+
+
diff --git a/src/plugins/projectexplorer/buildinfo.h b/src/plugins/projectexplorer/buildinfo.h
index 6eed9c2277..e135959352 100644
--- a/src/plugins/projectexplorer/buildinfo.h
+++ b/src/plugins/projectexplorer/buildinfo.h
@@ -37,11 +37,10 @@ namespace ProjectExplorer {
class BuildConfigurationFactory;
-class PROJECTEXPLORER_EXPORT BuildInfo
+class PROJECTEXPLORER_EXPORT BuildInfo final
{
public:
- BuildInfo(const BuildConfigurationFactory *f) : m_factory(f) { }
- virtual ~BuildInfo();
+ BuildInfo(const BuildConfigurationFactory *f = nullptr) : m_factory(f) { }
const BuildConfigurationFactory *factory() const { return m_factory; }
@@ -51,26 +50,16 @@ public:
Core::Id kitId;
BuildConfiguration::BuildType buildType = BuildConfiguration::Unknown;
- virtual bool operator==(const BuildInfo &o) const
+ QVariant extraInfo;
+ const BuildConfigurationFactory *m_factory = nullptr;
+
+ bool operator==(const BuildInfo &o) const
{
return m_factory == o.m_factory
&& displayName == o.displayName && typeName == o.typeName
&& buildDirectory == o.buildDirectory && kitId == o.kitId
&& buildType == o.buildType;
}
-
- virtual QList<Task> reportIssues(const QString &projectPath,
- const QString &buildDir) const
- {
- Q_UNUSED(projectPath);
- Q_UNUSED(buildDir);
- return QList<Task>();
- }
-
-private:
- const BuildConfigurationFactory *m_factory;
-
- friend class BuildConfigurationFactory;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 715ae977d7..772740abd2 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -57,7 +57,6 @@ using namespace ProjectExplorer::Internal;
BuildSettingsWidget::~BuildSettingsWidget()
{
clearWidgets();
- qDeleteAll(m_buildInfoList);
}
BuildSettingsWidget::BuildSettingsWidget(Target *target) :
@@ -176,16 +175,13 @@ QList<NamedWidget *> BuildSettingsWidget::subWidgets() const
void BuildSettingsWidget::updateAddButtonMenu()
{
m_addButtonMenu->clear();
- qDeleteAll(m_buildInfoList);
- m_buildInfoList.clear();
if (m_target) {
BuildConfigurationFactory *factory = BuildConfigurationFactory::find(m_target);
if (!factory)
return;
- m_buildInfoList = factory->availableBuilds(m_target);
- foreach (BuildInfo *info, m_buildInfoList) {
- QAction *action = m_addButtonMenu->addAction(info->typeName);
+ for (const BuildInfo &info : factory->allAvailableBuilds(m_target)) {
+ QAction *action = m_addButtonMenu->addAction(info.typeName);
connect(action, &QAction::triggered, this, [this, info] {
createConfiguration(info);
});
@@ -239,28 +235,26 @@ void BuildSettingsWidget::updateActiveConfiguration()
updateBuildSettings();
}
-void BuildSettingsWidget::createConfiguration(BuildInfo *info)
+void BuildSettingsWidget::createConfiguration(const BuildInfo &info_)
{
- QString originalDisplayName = info->displayName;
-
- if (info->displayName.isEmpty()) {
+ BuildInfo info = info_;
+ if (info.displayName.isEmpty()) {
bool ok = false;
- info->displayName = QInputDialog::getText(Core::ICore::mainWindow(),
+ info.displayName = QInputDialog::getText(Core::ICore::mainWindow(),
tr("New Configuration"),
tr("New configuration name:"),
QLineEdit::Normal,
QString(), &ok).trimmed();
- if (!ok || info->displayName.isEmpty())
+ if (!ok || info.displayName.isEmpty())
return;
}
- BuildConfiguration *bc = info->factory()->create(m_target, info);
+ BuildConfiguration *bc = info.factory()->create(m_target, info);
if (!bc)
return;
m_target->addBuildConfiguration(bc);
SessionManager::setActiveBuildConfiguration(m_target, bc, SetActive::Cascade);
- info->displayName = originalDisplayName;
}
QString BuildSettingsWidget::uniqueName(const QString & name)
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h
index 0686d2d341..990b43c69c 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h
@@ -63,7 +63,7 @@ private:
void updateActiveConfiguration();
- void createConfiguration(BuildInfo *info);
+ void createConfiguration(const BuildInfo &info);
void cloneConfiguration();
void deleteConfiguration(BuildConfiguration *toDelete);
QString uniqueName(const QString &name);
@@ -81,7 +81,6 @@ private:
QList<NamedWidget *> m_subWidgets;
QList<QLabel *> m_labels;
- QList<BuildInfo *> m_buildInfoList;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 1be86777d9..50cd304c9f 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -824,11 +824,11 @@ bool Project::knowsAllBuildExecutables() const
return true;
}
-void Project::setup(const QList<const BuildInfo *> &infoList)
+void Project::setup(const QList<BuildInfo> &infoList)
{
std::vector<std::unique_ptr<Target>> toRegister;
- for (const BuildInfo *info : infoList) {
- Kit *k = KitManager::kit(info->kitId);
+ for (const BuildInfo &info : infoList) {
+ Kit *k = KitManager::kit(info.kitId);
if (!k)
continue;
Target *t = target(k);
@@ -840,13 +840,11 @@ void Project::setup(const QList<const BuildInfo *> &infoList)
toRegister.emplace_back(std::move(newTarget));
}
- if (!info->factory())
+ if (!info.factory())
continue;
- BuildConfiguration *bc = info->factory()->create(t, info);
- if (!bc)
- continue;
- t->addBuildConfiguration(bc);
+ if (BuildConfiguration *bc = info.factory()->create(t, info))
+ t->addBuildConfiguration(bc);
}
for (std::unique_ptr<Target> &t : toRegister) {
t->updateDefaultDeployConfigurations();
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 3a7a010933..cf9590ad68 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -162,7 +162,7 @@ public:
// of configuration.
virtual bool knowsAllBuildExecutables() const;
- void setup(const QList<const BuildInfo *> &infoList);
+ void setup(const QList<BuildInfo> &infoList);
Utils::MacroExpander *macroExpander() const;
virtual QVariant additionalData(Core::Id id, const Target *target) const;
diff --git a/src/plugins/projectexplorer/projectimporter.cpp b/src/plugins/projectexplorer/projectimporter.cpp
index 2d4489c225..174f6a7472 100644
--- a/src/plugins/projectexplorer/projectimporter.cpp
+++ b/src/plugins/projectexplorer/projectimporter.cpp
@@ -84,9 +84,9 @@ ProjectImporter::~ProjectImporter()
removeProject(k);
}
-QList<BuildInfo *> ProjectImporter::import(const Utils::FileName &importPath, bool silent)
+const QList<BuildInfo> ProjectImporter::import(const Utils::FileName &importPath, bool silent)
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
const QLoggingCategory log("qtc.projectexplorer.import", QtWarningMsg);
qCDebug(log) << "ProjectImporter::import" << importPath << silent;
@@ -124,14 +124,14 @@ QList<BuildInfo *> ProjectImporter::import(const Utils::FileName &importPath, bo
foreach (Kit *k, kitList) {
qCDebug(log) << "Creating buildinfos for kit" << k->displayName();
- QList<BuildInfo *> infoList = buildInfoListForKit(k, data);
+ const QList<BuildInfo> infoList = buildInfoListForKit(k, data);
if (infoList.isEmpty()) {
qCDebug(log) << "No build infos for kit" << k->displayName();
continue;
}
- foreach (BuildInfo *i, infoList) {
- if (!Utils::contains(result, [i](const BuildInfo *o) { return (*i) == (*o); }))
+ for (const BuildInfo &i : infoList) {
+ if (!result.contains(i))
result += i;
}
}
diff --git a/src/plugins/projectexplorer/projectimporter.h b/src/plugins/projectexplorer/projectimporter.h
index 66f6d77831..c7df542a7a 100644
--- a/src/plugins/projectexplorer/projectimporter.h
+++ b/src/plugins/projectexplorer/projectimporter.h
@@ -56,7 +56,7 @@ public:
const Utils::FileName projectFilePath() const { return m_projectPath; }
const Utils::FileName projectDirectory() const { return m_projectPath.parentDir(); }
- virtual QList<BuildInfo *> import(const Utils::FileName &importPath, bool silent = false);
+ virtual const QList<BuildInfo> import(const Utils::FileName &importPath, bool silent = false);
virtual QStringList importCandidates() = 0;
virtual Target *preferredTarget(const QList<Target *> &possibleTargets);
@@ -93,7 +93,7 @@ protected:
// will get one of the results from examineDirectory
virtual Kit *createKit(void *directoryData) const = 0;
// will get one of the results from examineDirectory
- virtual QList<BuildInfo *> buildInfoListForKit(const Kit *k, void *directoryData) const = 0;
+ virtual const QList<BuildInfo> buildInfoListForKit(const Kit *k, void *directoryData) const = 0;
virtual void deleteDirectoryData(void *directoryData) const = 0;
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index 85917bcdda..434249bee1 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -550,18 +550,17 @@ public:
Target *lastTarget = nullptr;
BuildConfiguration *lastBc = nullptr;
- const QList<BuildInfo *> toImport = projectImporter->import(path, false);
- for (BuildInfo *info : toImport) {
- Target *target = project->target(info->kitId);
+ for (const BuildInfo &info : projectImporter->import(path, false)) {
+ Target *target = project->target(info.kitId);
if (!target) {
- std::unique_ptr<Target> newTarget = project->createTarget(KitManager::kit(info->kitId));
+ std::unique_ptr<Target> newTarget = project->createTarget(KitManager::kit(info.kitId));
target = newTarget.get();
if (newTarget)
project->addTarget(std::move(newTarget));
}
if (target) {
projectImporter->makePersistent(target->kit());
- BuildConfiguration *bc = info->factory()->create(target, info);
+ BuildConfiguration *bc = info.factory()->create(target, info);
QTC_ASSERT(bc, continue);
target->addBuildConfiguration(bc);
@@ -573,8 +572,6 @@ public:
SessionManager::setActiveBuildConfiguration(lastTarget, lastBc, SetActive::Cascade);
SessionManager::setActiveTarget(project, lastTarget, SetActive::Cascade);
}
-
- qDeleteAll(toImport);
}
void setPanel(QWidget *panel)
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index f8a3efaca9..70d742e34e 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -493,14 +493,10 @@ void Target::updateDefaultBuildConfigurations()
qWarning("No build configuration factory found for target id '%s'.", qPrintable(id().toString()));
return;
}
- QList<BuildInfo *> infoList = bcFactory->availableSetups(this->kit(), project()->projectFilePath().toString());
- foreach (BuildInfo *info, infoList) {
- BuildConfiguration *bc = bcFactory->create(this, info);
- if (!bc)
- continue;
- addBuildConfiguration(bc);
+ for (const BuildInfo &info : bcFactory->allAvailableSetups(kit(), project()->projectFilePath().toString())) {
+ if (BuildConfiguration *bc = bcFactory->create(this, info))
+ addBuildConfiguration(bc);
}
- qDeleteAll(infoList);
}
void Target::updateDefaultDeployConfigurations()
diff --git a/src/plugins/projectexplorer/targetsetuppage.cpp b/src/plugins/projectexplorer/targetsetuppage.cpp
index 6a6006c360..aea75ad993 100644
--- a/src/plugins/projectexplorer/targetsetuppage.cpp
+++ b/src/plugins/projectexplorer/targetsetuppage.cpp
@@ -485,19 +485,16 @@ void TargetSetupPage::import(const Utils::FileName &path, bool silent)
if (!m_importer)
return;
- QList<BuildInfo *> toImport = m_importer->import(path, silent);
- foreach (BuildInfo *info, toImport) {
- TargetSetupWidget *w = widget(info->kitId);
+ for (const BuildInfo &info : m_importer->import(path, silent)) {
+ TargetSetupWidget *w = widget(info.kitId);
if (!w) {
- Kit *k = KitManager::kit(info->kitId);
+ Kit *k = KitManager::kit(info.kitId);
Q_ASSERT(k);
addWidget(k);
}
- w = widget(info->kitId);
- if (!w) {
- delete info;
+ w = widget(info.kitId);
+ if (!w)
continue;
- }
w->addBuildInfo(info, true);
w->setKitSelected(true);
@@ -552,7 +549,7 @@ TargetSetupWidget *TargetSetupPage::addWidget(Kit *k)
bool TargetSetupPage::setupProject(Project *project)
{
- QList<const BuildInfo *> toSetUp; // Pointers are managed by the widgets!
+ QList<BuildInfo> toSetUp;
for (TargetSetupWidget *widget : m_widgets) {
if (!widget->isKitSelected())
continue;
diff --git a/src/plugins/projectexplorer/targetsetupwidget.cpp b/src/plugins/projectexplorer/targetsetupwidget.cpp
index e51ee45d0e..88e5b4ab06 100644
--- a/src/plugins/projectexplorer/targetsetupwidget.cpp
+++ b/src/plugins/projectexplorer/targetsetupwidget.cpp
@@ -134,9 +134,9 @@ void TargetSetupWidget::setKitSelected(bool b)
m_ignoreChange = false;
}
-void TargetSetupWidget::addBuildInfo(BuildInfo *info, bool isImport)
+void TargetSetupWidget::addBuildInfo(const BuildInfo &info, bool isImport)
{
- QTC_ASSERT(info && info->kitId == m_kit->id(), return);
+ QTC_ASSERT(info.kitId == m_kit->id(), return);
if (isImport && !m_haveImported) {
// disable everything on first import
@@ -156,16 +156,16 @@ void TargetSetupWidget::addBuildInfo(BuildInfo *info, bool isImport)
store.isEnabled = true;
++m_selected;
- if (info->factory()) {
+ if (info.factory()) {
store.checkbox = new QCheckBox;
- store.checkbox->setText(info->displayName);
+ store.checkbox->setText(info.displayName);
store.checkbox->setChecked(store.isEnabled);
store.checkbox->setAttribute(Qt::WA_LayoutUsesWidgetRect);
m_newBuildsLayout->addWidget(store.checkbox, pos * 2, 0);
store.pathChooser = new Utils::PathChooser();
store.pathChooser->setExpectedKind(Utils::PathChooser::Directory);
- store.pathChooser->setFileName(info->buildDirectory);
+ store.pathChooser->setFileName(info.buildDirectory);
store.pathChooser->setHistoryCompleter(QLatin1String("TargetSetup.BuildDir.History"));
store.pathChooser->setReadOnly(isImport);
m_newBuildsLayout->addWidget(store.pathChooser, pos * 2, 1);
@@ -217,7 +217,7 @@ void TargetSetupWidget::setProjectPath(const QString &projectPath)
m_projectPath = projectPath;
clear();
- for (BuildInfo *info : buildInfoList(m_kit, projectPath))
+ for (const BuildInfo &info : buildInfoList(m_kit, projectPath))
addBuildInfo(info, false);
}
@@ -226,16 +226,14 @@ void TargetSetupWidget::expandWidget()
m_detailsWidget->setState(Utils::DetailsWidget::Expanded);
}
-QList<BuildInfo *> TargetSetupWidget::buildInfoList(const Kit *k, const QString &projectPath)
+const QList<BuildInfo> TargetSetupWidget::buildInfoList(const Kit *k, const QString &projectPath)
{
- const BuildConfigurationFactory *const factory
- = BuildConfigurationFactory::find(k, projectPath);
- if (factory)
- return factory->availableSetups(k, projectPath);
-
- auto *info = new BuildInfo(nullptr);
- info->kitId = k->id();
- return QList<BuildInfo *>({info});
+ if (auto factory = BuildConfigurationFactory::find(k, projectPath))
+ return factory->allAvailableSetups(k, projectPath);
+
+ BuildInfo info(nullptr);
+ info.kitId = k->id();
+ return {info};
}
void TargetSetupWidget::handleKitUpdate(Kit *k)
@@ -247,9 +245,9 @@ void TargetSetupWidget::handleKitUpdate(Kit *k)
m_detailsWidget->setSummaryText(k->displayName());
}
-QList<const BuildInfo *> TargetSetupWidget::selectedBuildInfoList() const
+const QList<BuildInfo> TargetSetupWidget::selectedBuildInfoList() const
{
- QList<const BuildInfo *> result;
+ QList<BuildInfo> result;
for (const BuildInfoStore &store : m_infoStore) {
if (store.isEnabled)
result.append(store.buildInfo);
@@ -297,7 +295,7 @@ void TargetSetupWidget::pathChanged()
return store.pathChooser == pathChooser;
});
QTC_ASSERT(it != m_infoStore.end(), return);
- it->buildInfo->buildDirectory = pathChooser->fileName();
+ it->buildInfo.buildDirectory = pathChooser->fileName();
reportIssues(static_cast<int>(std::distance(m_infoStore.begin(), it)));
}
@@ -315,13 +313,15 @@ void TargetSetupWidget::reportIssues(int index)
}
}
-QPair<Task::TaskType, QString> TargetSetupWidget::findIssues(const BuildInfo *info)
+QPair<Task::TaskType, QString> TargetSetupWidget::findIssues(const BuildInfo &info)
{
- if (m_projectPath.isEmpty() || !info->factory())
+ if (m_projectPath.isEmpty() || !info.factory())
return qMakePair(Task::Unknown, QString());
- QString buildDir = info->buildDirectory.toString();
- QList<Task> issues = info->reportIssues(m_projectPath, buildDir);
+ QString buildDir = info.buildDirectory.toString();
+ QList<Task> issues;
+ if (info.factory())
+ issues = info.factory()->reportIssues(m_kit, m_projectPath, buildDir);
QString text;
Task::TaskType highestType = Task::Unknown;
@@ -347,7 +347,6 @@ QPair<Task::TaskType, QString> TargetSetupWidget::findIssues(const BuildInfo *in
TargetSetupWidget::BuildInfoStore::~BuildInfoStore()
{
- delete buildInfo;
delete checkbox;
delete label;
delete issuesLabel;
diff --git a/src/plugins/projectexplorer/targetsetupwidget.h b/src/plugins/projectexplorer/targetsetupwidget.h
index 37663343f9..62dca1af52 100644
--- a/src/plugins/projectexplorer/targetsetupwidget.h
+++ b/src/plugins/projectexplorer/targetsetupwidget.h
@@ -66,9 +66,9 @@ public:
bool isKitSelected() const;
void setKitSelected(bool b);
- void addBuildInfo(BuildInfo *info, bool isImport);
+ void addBuildInfo(const BuildInfo &info, bool isImport);
- QList<const BuildInfo *> selectedBuildInfoList() const;
+ const QList<BuildInfo> selectedBuildInfoList() const;
void setProjectPath(const QString &projectPath);
void expandWidget();
@@ -76,7 +76,7 @@ signals:
void selectedToggled() const;
private:
- static QList<BuildInfo *> buildInfoList(const Kit *k, const QString &projectPath);
+ static const QList<BuildInfo> buildInfoList(const Kit *k, const QString &projectPath);
void handleKitUpdate(ProjectExplorer::Kit *k);
@@ -86,7 +86,7 @@ private:
void manageKit();
void reportIssues(int index);
- QPair<Task::TaskType, QString> findIssues(const BuildInfo *info);
+ QPair<Task::TaskType, QString> findIssues(const BuildInfo &info);
void clear();
Kit *m_kit;
@@ -104,7 +104,7 @@ private:
BuildInfoStore &operator=(const BuildInfoStore &other) = delete;
BuildInfoStore &operator=(BuildInfoStore &&other) = delete;
- BuildInfo *buildInfo = nullptr;
+ BuildInfo buildInfo;
QCheckBox *checkbox = nullptr;
QLabel *label = nullptr;
QLabel *issuesLabel = nullptr;