diff options
45 files changed, 419 insertions, 596 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index 93f62323a1..33ebf0f188 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -64,7 +64,7 @@ AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::I setBuildDirectory(Utils::FileName::fromString("/<foobar>")); } -void AutotoolsBuildConfiguration::initialize(const BuildInfo *info) +void AutotoolsBuildConfiguration::initialize(const BuildInfo &info) { BuildConfiguration::initialize(info); @@ -114,30 +114,27 @@ AutotoolsBuildConfigurationFactory::AutotoolsBuildConfigurationFactory() setSupportedProjectMimeTypeName(Constants::MAKEFILE_MIMETYPE); } -QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableBuilds(const Target *parent) const +QList<BuildInfo> AutotoolsBuildConfigurationFactory::availableBuilds(const Target *parent) const { return {createBuildInfo(parent->kit(), parent->project()->projectDirectory())}; } -QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const +QList<BuildInfo> AutotoolsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const { - QList<BuildInfo *> result; - BuildInfo *info = createBuildInfo(k, - Utils::FileName::fromString(AutotoolsProject::defaultBuildDirectory(projectPath))); + BuildInfo info = createBuildInfo(k, + Utils::FileName::fromString(AutotoolsProject::defaultBuildDirectory(projectPath))); //: The name of the build configuration created by default for a autotools project. - info->displayName = tr("Default"); - result << info; - return result; + info.displayName = tr("Default"); + return {info}; } -BuildInfo *AutotoolsBuildConfigurationFactory::createBuildInfo(const Kit *k, - const Utils::FileName &buildDir) const +BuildInfo AutotoolsBuildConfigurationFactory::createBuildInfo(const Kit *k, + const Utils::FileName &buildDir) const { - auto info = new BuildInfo(this); - info->typeName = tr("Build"); - info->buildDirectory = buildDir; - info->kitId = k->id(); - + BuildInfo info(this); + info.typeName = tr("Build"); + info.buildDirectory = buildDir; + info.kitId = k->id(); return info; } diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h index 2c88c26b71..2cd784c235 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h @@ -41,7 +41,7 @@ class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration friend class ProjectExplorer::BuildConfigurationFactory; AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id); - void initialize(const ProjectExplorer::BuildInfo *info) override; + void initialize(const ProjectExplorer::BuildInfo &info) override; ProjectExplorer::NamedWidget *createConfigWidget() override; BuildType buildType() const override; }; @@ -54,11 +54,11 @@ public: AutotoolsBuildConfigurationFactory(); private: - QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override; - QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k, - const QString &projectPath) const override; + QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *parent) const override; + QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k, + const QString &projectPath) const override; - ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const; + ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 66d3ba5fbe..565b6b80c3 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -26,8 +26,8 @@ #include "cmakebuildconfiguration.h" #include "builddirmanager.h" -#include "cmakebuildinfo.h" #include "cmakebuildstep.h" +#include "cmakeconfigitem.h" #include "cmakekitinformation.h" #include "cmakeproject.h" #include "cmakeprojectconstants.h" @@ -37,6 +37,7 @@ #include <coreplugin/icore.h> +#include <projectexplorer/buildinfo.h> #include <projectexplorer/buildmanager.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/kit.h> @@ -55,6 +56,20 @@ using namespace ProjectExplorer; using namespace Utils; namespace CMakeProjectManager { + +class CMakeExtraBuildInfo +{ +public: + QString sourceDirectory; + CMakeConfig configuration; +}; + +} // namespace CMakeProjectManager + +Q_DECLARE_METATYPE(CMakeProjectManager::CMakeExtraBuildInfo) + + +namespace CMakeProjectManager { namespace Internal { const char INITIAL_ARGUMENTS[] = "CMakeProjectManager.CMakeBuildConfiguration.InitialArgument"; // Obsolete since QtC 3.7 @@ -70,7 +85,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *parent, Core::Id id) connect(project, &Project::parsingFinished, this, &BuildConfiguration::enabledChanged); } -void CMakeBuildConfiguration::initialize(const BuildInfo *info) +void CMakeBuildConfiguration::initialize(const BuildInfo &info) { BuildConfiguration::initialize(info); @@ -80,13 +95,14 @@ void CMakeBuildConfiguration::initialize(const BuildInfo *info) BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN); cleanSteps->appendStep(new CMakeBuildStep(cleanSteps)); - if (info->buildDirectory.isEmpty()) { + if (info.buildDirectory.isEmpty()) { auto project = static_cast<const CMakeProject *>(target()->project()); setBuildDirectory(CMakeBuildConfiguration::shadowBuildDirectory(project->projectFilePath(), target()->kit(), - info->displayName, info->buildType)); + info.displayName, info.buildType)); } - setConfigurationForCMake(static_cast<const CMakeBuildInfo *>(info)->configuration); + auto extraInfo = info.extraInfo.value<CMakeExtraBuildInfo>(); + setConfigurationForCMake(extraInfo.configuration); } bool CMakeBuildConfiguration::isEnabled() const @@ -424,74 +440,74 @@ BuildConfiguration::BuildType CMakeBuildConfigurationFactory::cmakeBuildTypeToBu return BuildConfiguration::Unknown; } -QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableBuilds(const ProjectExplorer::Target *parent) const +QList<BuildInfo> CMakeBuildConfigurationFactory::availableBuilds(const Target *parent) const { - QList<ProjectExplorer::BuildInfo *> result; + QList<BuildInfo> result; for (int type = BuildTypeNone; type != BuildTypeLast; ++type) { - CMakeBuildInfo *info = createBuildInfo(parent->kit(), - parent->project()->projectDirectory().toString(), - BuildType(type)); - result << info; + result << createBuildInfo(parent->kit(), + parent->project()->projectDirectory().toString(), + BuildType(type)); } return result; } -QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableSetups(const ProjectExplorer::Kit *k, - const QString &projectPath) const +QList<BuildInfo> CMakeBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const { - QList<ProjectExplorer::BuildInfo *> result; + QList<BuildInfo> result; const FileName projectPathName = FileName::fromString(projectPath); for (int type = BuildTypeNone; type != BuildTypeLast; ++type) { - CMakeBuildInfo *info = createBuildInfo(k, - ProjectExplorer::Project::projectDirectory(projectPathName).toString(), - BuildType(type)); + BuildInfo info = createBuildInfo(k, + ProjectExplorer::Project::projectDirectory(projectPathName).toString(), + BuildType(type)); if (type == BuildTypeNone) { //: The name of the build configuration created by default for a cmake project. - info->displayName = tr("Default"); + info.displayName = tr("Default"); } else { - info->displayName = info->typeName; + info.displayName = info.typeName; } - info->buildDirectory + info.buildDirectory = CMakeBuildConfiguration::shadowBuildDirectory(projectPathName, k, - info->displayName, info->buildType); + info.displayName, info.buildType); result << info; } return result; } -CMakeBuildInfo *CMakeBuildConfigurationFactory::createBuildInfo(const ProjectExplorer::Kit *k, - const QString &sourceDir, - BuildType buildType) const +BuildInfo CMakeBuildConfigurationFactory::createBuildInfo(const Kit *k, + const QString &sourceDir, + BuildType buildType) const { - auto info = new CMakeBuildInfo(this); - info->kitId = k->id(); - info->sourceDirectory = sourceDir; + BuildInfo info(this); + info.kitId = k->id(); + + CMakeExtraBuildInfo extra; + extra.sourceDirectory = sourceDir; CMakeConfigItem buildTypeItem; switch (buildType) { case BuildTypeNone: - info->typeName = tr("Build"); + info.typeName = tr("Build"); break; case BuildTypeDebug: buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "Debug")}; - info->typeName = tr("Debug"); - info->buildType = BuildConfiguration::Debug; + info.typeName = tr("Debug"); + info.buildType = BuildConfiguration::Debug; break; case BuildTypeRelease: buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "Release")}; - info->typeName = tr("Release"); - info->buildType = BuildConfiguration::Release; + info.typeName = tr("Release"); + info.buildType = BuildConfiguration::Release; break; case BuildTypeMinSizeRel: buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "MinSizeRel")}; - info->typeName = tr("Minimum Size Release"); - info->buildType = BuildConfiguration::Release; + info.typeName = tr("Minimum Size Release"); + info.buildType = BuildConfiguration::Release; break; case BuildTypeRelWithDebInfo: buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "RelWithDebInfo")}; - info->typeName = tr("Release with Debug Information"); - info->buildType = BuildConfiguration::Profile; + info.typeName = tr("Release with Debug Information"); + info.buildType = BuildConfiguration::Profile; break; default: QTC_CHECK(false); @@ -499,19 +515,20 @@ CMakeBuildInfo *CMakeBuildConfigurationFactory::createBuildInfo(const ProjectExp } if (!buildTypeItem.isNull()) - info->configuration.append(buildTypeItem); + extra.configuration.append(buildTypeItem); const QString sysRoot = SysRootKitInformation::sysRoot(k).toString(); if (!sysRoot.isEmpty()) { - info->configuration.append(CMakeConfigItem("CMAKE_SYSROOT", sysRoot.toUtf8())); + extra.configuration.append(CMakeConfigItem("CMAKE_SYSROOT", sysRoot.toUtf8())); ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain( k, ProjectExplorer::Constants::CXX_LANGUAGE_ID); if (tc) { const QByteArray targetTriple = tc->originalTargetTriple().toUtf8(); - info->configuration.append(CMakeConfigItem("CMAKE_C_COMPILER_TARGET", targetTriple)); - info->configuration.append(CMakeConfigItem("CMAKE_CXX_COMPILER_TARGET ", targetTriple)); + extra.configuration.append(CMakeConfigItem("CMAKE_C_COMPILER_TARGET", targetTriple)); + extra.configuration.append(CMakeConfigItem("CMAKE_CXX_COMPILER_TARGET ", targetTriple)); } } + info.extraInfo = QVariant::fromValue(extra); return info; } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index d093d4474e..587666b0bf 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -36,7 +36,7 @@ #include <projectexplorer/deploymentdata.h> namespace CMakeProjectManager { -class CMakeBuildInfo; +class CMakeExtraBuildInfo; class CMakeProject; namespace Internal { @@ -83,7 +83,7 @@ private: QVariantMap toMap() const override; BuildType buildType() const override; - void initialize(const ProjectExplorer::BuildInfo *info) override; + void initialize(const ProjectExplorer::BuildInfo &info) override; QString disabledReason() const override; ProjectExplorer::NamedWidget *createConfigWidget() override; @@ -133,14 +133,14 @@ public: static BuildType buildTypeFromByteArray(const QByteArray &in); static ProjectExplorer::BuildConfiguration::BuildType cmakeBuildTypeToBuildType(const BuildType &in); - QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override; - QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k, - const QString &projectPath) const override; + QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *parent) const override; + QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k, + const QString &projectPath) const override; private: - CMakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, - const QString &sourceDir, - BuildType buildType) const; + ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, + const QString &sourceDir, + BuildType buildType) const; friend class CMakeProjectImporter; }; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildinfo.h b/src/plugins/cmakeprojectmanager/cmakebuildinfo.h deleted file mode 100644 index fed92439d5..0000000000 --- a/src/plugins/cmakeprojectmanager/cmakebuildinfo.h +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include "cmakebuildconfiguration.h" -#include "cmakeconfigitem.h" - -#include <projectexplorer/buildinfo.h> -#include <projectexplorer/kit.h> -#include <projectexplorer/target.h> -#include <projectexplorer/project.h> -#include <utils/environment.h> -#include <utils/qtcassert.h> - -namespace CMakeProjectManager { - -class CMakeBuildInfo : public ProjectExplorer::BuildInfo -{ -public: - CMakeBuildInfo(const ProjectExplorer::BuildConfigurationFactory *f) : ProjectExplorer::BuildInfo(f) - { } - - CMakeBuildInfo(const Internal::CMakeBuildConfiguration *bc) : - ProjectExplorer::BuildInfo(ProjectExplorer::BuildConfigurationFactory::find(bc->target())) - { - displayName = bc->displayName(); - buildDirectory = bc->buildDirectory(); - kitId = bc->target()->kit()->id(); - - QTC_ASSERT(bc->target()->project(), return); - sourceDirectory = bc->target()->project()->projectDirectory().toString(); - configuration = bc->configurationForCMake(); - } - - bool operator==(const BuildInfo &o) const final - { - if (!ProjectExplorer::BuildInfo::operator==(o)) - return false; - - auto other = static_cast<const CMakeBuildInfo *>(&o); - return sourceDirectory == other->sourceDirectory - && configuration == other->configuration; - } - - QString sourceDirectory; - CMakeConfig configuration; -}; - -} // namespace CMakeProjectManager diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index 68836b6b56..7a83f082f8 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -27,10 +27,10 @@ #include "builddirmanager.h" #include "cmakebuildconfiguration.h" -#include "cmakebuildinfo.h" #include "cmakekitinformation.h" #include "cmaketoolmanager.h" +#include <projectexplorer/buildinfo.h> #include <projectexplorer/kit.h> #include <projectexplorer/kitmanager.h> #include <projectexplorer/projectexplorerconstants.h> @@ -347,9 +347,9 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const }); } -QList<BuildInfo *> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const +const QList<BuildInfo> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const { - QList<BuildInfo *> result; + QList<BuildInfo> result; auto data = static_cast<const DirectoryData *>(directoryData); auto factory = qobject_cast<CMakeBuildConfigurationFactory *>( BuildConfigurationFactory::find(k, projectFilePath().toString())); @@ -357,21 +357,20 @@ QList<BuildInfo *> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void return result; // create info: - std::unique_ptr<CMakeBuildInfo> - info(factory->createBuildInfo(k, projectDirectory().toString(), - CMakeBuildConfigurationFactory::buildTypeFromByteArray(data->cmakeBuildType))); - info->buildDirectory = data->buildDirectory; - info->displayName = info->typeName; + BuildInfo info = factory->createBuildInfo(k, projectDirectory().toString(), + CMakeBuildConfigurationFactory::buildTypeFromByteArray(data->cmakeBuildType)); + info.buildDirectory = data->buildDirectory; + info.displayName = info.typeName; bool found = false; - foreach (BuildInfo *bInfo, result) { - if (*static_cast<CMakeBuildInfo *>(bInfo) == *info) { + foreach (BuildInfo bInfo, result) { + if (bInfo == info) { found = true; break; } } if (!found) - result << info.release(); + result << info; qCDebug(cmInputLog()) << "BuildInfo configured."; diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h index f2cfa620e0..c86fe77041 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h @@ -44,8 +44,8 @@ private: QList<void *> examineDirectory(const Utils::FileName &importPath) const final; bool matchKit(void *directoryData, const ProjectExplorer::Kit *k) const final; ProjectExplorer::Kit *createKit(void *directoryData) const final; - QList<ProjectExplorer::BuildInfo *> buildInfoListForKit(const ProjectExplorer::Kit *k, - void *directoryData) const final; + const QList<ProjectExplorer::BuildInfo> buildInfoListForKit(const ProjectExplorer::Kit *k, + void *directoryData) const final; struct CMakeToolData { bool isTemporary = false; diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro index c242998441..641c53bb25 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro @@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri) HEADERS = builddirmanager.h \ builddirparameters.h \ builddirreader.h \ - cmakebuildinfo.h \ cmakebuildstep.h \ cmakebuildtarget.h \ cmakeconfigitem.h \ diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs index d0ce6bebe2..cfa9b36e30 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs @@ -28,7 +28,6 @@ QtcPlugin { "cmake_global.h", "cmakebuildconfiguration.cpp", "cmakebuildconfiguration.h", - "cmakebuildinfo.h", "cmakebuildsettingswidget.cpp", "cmakebuildsettingswidget.h", "cmakebuildstep.cpp", diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index f6b9ea99f5..28dfdc86bb 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -58,7 +58,7 @@ GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, Core::Id id updateCacheAndEmitEnvironmentChanged(); } -void GenericBuildConfiguration::initialize(const BuildInfo *info) +void GenericBuildConfiguration::initialize(const BuildInfo &info) { BuildConfiguration::initialize(info); @@ -91,28 +91,26 @@ GenericBuildConfigurationFactory::GenericBuildConfigurationFactory() GenericBuildConfigurationFactory::~GenericBuildConfigurationFactory() = default; -QList<BuildInfo *> GenericBuildConfigurationFactory::availableBuilds(const Target *parent) const +QList<BuildInfo> GenericBuildConfigurationFactory::availableBuilds(const Target *parent) const { return {createBuildInfo(parent->kit(), parent->project()->projectDirectory())}; } -QList<BuildInfo *> GenericBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const +QList<BuildInfo> GenericBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const { - QList<BuildInfo *> result; - BuildInfo *info = createBuildInfo(k, Project::projectDirectory(Utils::FileName::fromString(projectPath))); + BuildInfo info = createBuildInfo(k, Project::projectDirectory(Utils::FileName::fromString(projectPath))); //: The name of the build configuration created by default for a generic project. - info->displayName = tr("Default"); - result << info; - return result; + info.displayName = tr("Default"); + return {info}; } -BuildInfo *GenericBuildConfigurationFactory::createBuildInfo(const Kit *k, - const Utils::FileName &buildDir) const +BuildInfo GenericBuildConfigurationFactory::createBuildInfo(const Kit *k, + const Utils::FileName &buildDir) const { - auto info = new BuildInfo(this); - info->typeName = tr("Build"); - info->buildDirectory = buildDir; - info->kitId = k->id(); + BuildInfo info(this); + info.typeName = tr("Build"); + info.buildDirectory = buildDir; + info.kitId = k->id(); return info; } diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index f0ff7a0d35..e4d2e3e65a 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -43,7 +43,7 @@ class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration friend class ProjectExplorer::BuildConfigurationFactory; GenericBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id); - void initialize(const ProjectExplorer::BuildInfo *info) override; + void initialize(const ProjectExplorer::BuildInfo &info) override; ProjectExplorer::NamedWidget *createConfigWidget() override; BuildType buildType() const override; void addToEnvironment(Utils::Environment &env) const final; @@ -58,11 +58,11 @@ public: ~GenericBuildConfigurationFactory() override; private: - QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override; - QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k, - const QString &projectPath) const override; + QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *parent) const override; + QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k, + const QString &projectPath) const override; - ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const; + ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const; }; class GenericBuildSettingsWidget : public ProjectExplorer::NamedWidget diff --git a/src/plugins/nim/project/nimbuildconfiguration.cpp b/src/plugins/nim/project/nimbuildconfiguration.cpp index 3aa94c6b17..46acf4881b 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.cpp +++ b/src/plugins/nim/project/nimbuildconfiguration.cpp @@ -75,7 +75,7 @@ NimBuildConfiguration::NimBuildConfiguration(Target *target, Core::Id id) { } -void NimBuildConfiguration::initialize(const BuildInfo *info) +void NimBuildConfiguration::initialize(const BuildInfo &info) { BuildConfiguration::initialize(info); @@ -85,15 +85,15 @@ void NimBuildConfiguration::initialize(const BuildInfo *info) // Create the build configuration and initialize it from build info setBuildDirectory(defaultBuildDirectory(target()->kit(), project->projectFilePath().toString(), - info->displayName, - info->buildType)); + info.displayName, + info.buildType)); // Add nim compiler build step { BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps); NimCompilerBuildStep::DefaultBuildOptions defaultOption; - switch (info->buildType) { + switch (info.buildType) { case BuildConfiguration::Release: defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release; break; @@ -181,32 +181,32 @@ NimBuildConfigurationFactory::NimBuildConfigurationFactory() setSupportedProjectMimeTypeName(Constants::C_NIM_PROJECT_MIMETYPE); } -QList<BuildInfo *> NimBuildConfigurationFactory::availableBuilds(const Target *parent) const +QList<BuildInfo> NimBuildConfigurationFactory::availableBuilds(const Target *parent) const { - QList<BuildInfo *> result; + QList<BuildInfo> result; for (auto buildType : {BuildConfiguration::Debug, BuildConfiguration::Release}) result.push_back(createBuildInfo(parent->kit(), buildType)); return result; } -QList<BuildInfo *> NimBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const +QList<BuildInfo> NimBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const { - QList<BuildInfo *> result; + QList<BuildInfo> result; for (auto buildType : {BuildConfiguration::Debug, BuildConfiguration::Release}) { - BuildInfo *info = createBuildInfo(k, buildType); - info->displayName = info->typeName; - info->buildDirectory = defaultBuildDirectory(k, projectPath, info->typeName, buildType); + BuildInfo info = createBuildInfo(k, buildType); + info.displayName = info.typeName; + info.buildDirectory = defaultBuildDirectory(k, projectPath, info.typeName, buildType); result.push_back(info); } return result; } -BuildInfo *NimBuildConfigurationFactory::createBuildInfo(const Kit *k, BuildConfiguration::BuildType buildType) const +BuildInfo NimBuildConfigurationFactory::createBuildInfo(const Kit *k, BuildConfiguration::BuildType buildType) const { - auto info = new BuildInfo(this); - info->buildType = buildType; - info->kitId = k->id(); - info->typeName = displayName(buildType); + BuildInfo info(this); + info.buildType = buildType; + info.kitId = k->id(); + info.typeName = displayName(buildType); return info; } diff --git a/src/plugins/nim/project/nimbuildconfiguration.h b/src/plugins/nim/project/nimbuildconfiguration.h index ef90c69839..90175647ea 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.h +++ b/src/plugins/nim/project/nimbuildconfiguration.h @@ -39,7 +39,7 @@ class NimBuildConfiguration : public ProjectExplorer::BuildConfiguration friend class ProjectExplorer::BuildConfigurationFactory; NimBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); - void initialize(const ProjectExplorer::BuildInfo *info) override; + void initialize(const ProjectExplorer::BuildInfo &info) override; ProjectExplorer::NamedWidget *createConfigWidget() override; ProjectExplorer::BuildConfiguration::BuildType buildType() const override; @@ -67,13 +67,13 @@ public: NimBuildConfigurationFactory(); private: - QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override; + QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *parent) const override; - QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k, - const QString &projectPath) const override; + QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k, + const QString &projectPath) const override; - ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, - ProjectExplorer::BuildConfiguration::BuildType buildType) const; + ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, + ProjectExplorer::BuildConfiguration::BuildType buildType) const; QString displayName(ProjectExplorer::BuildConfiguration::BuildType buildType) const; }; 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; diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index e7874737d8..1d464039f5 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -26,7 +26,6 @@ #include "qbsbuildconfiguration.h" #include "qbsbuildconfigurationwidget.h" -#include "qbsbuildinfo.h" #include "qbsbuildstep.h" #include "qbscleanstep.h" #include "qbsinstallstep.h" @@ -36,7 +35,8 @@ #include <coreplugin/documentmanager.h> #include <coreplugin/icore.h> -#include <utils/qtcassert.h> + +#include <projectexplorer/buildinfo.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/deployconfiguration.h> #include <projectexplorer/kit.h> @@ -46,7 +46,11 @@ #include <projectexplorer/projectmacroexpander.h> #include <projectexplorer/target.h> #include <projectexplorer/toolchain.h> + +#include <qtsupport/qtkitinformation.h> + #include <utils/mimetypes/mimedatabase.h> +#include <utils/qtcassert.h> #include <utils/qtcprocess.h> #include <QCoreApplication> @@ -82,21 +86,20 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id) connect(project(), &Project::parsingFinished, this, &BuildConfiguration::enabledChanged); } -void QbsBuildConfiguration::initialize(const BuildInfo *info) +void QbsBuildConfiguration::initialize(const BuildInfo &info) { BuildConfiguration::initialize(info); - const auto * const bi = static_cast<const QbsBuildInfo *>(info); - QVariantMap configData = bi->config; + QVariantMap configData = info.extraInfo.value<QVariantMap>(); configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY), - (info->buildType == BuildConfiguration::Debug) + (info.buildType == BuildConfiguration::Debug) ? QLatin1String(Constants::QBS_VARIANT_DEBUG) : QLatin1String(Constants::QBS_VARIANT_RELEASE)); - Utils::FileName buildDir = info->buildDirectory; + Utils::FileName buildDir = info.buildDirectory; if (buildDir.isEmpty()) buildDir = defaultBuildDirectory(target()->project()->projectFilePath().toString(), - target()->kit(), info->displayName, info->buildType); + target()->kit(), info.displayName, info.buildType); setBuildDirectory(buildDir); // Add the build configuration. @@ -104,13 +107,13 @@ void QbsBuildConfiguration::initialize(const BuildInfo *info) QString configName = bd.take("configName").toString(); if (configName.isEmpty()) { configName = "qtc_" + target()->kit()->fileSystemFriendlyName() + '_' - + Utils::FileUtils::fileSystemFriendlyName(info->displayName); + + Utils::FileUtils::fileSystemFriendlyName(info.displayName); } setConfigurationName(configName); BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); auto bs = new QbsBuildStep(buildSteps); - if (info->buildType == Release) + if (info.buildType == Release) bs->setQmlDebuggingEnabled(false); bs->setQbsConfiguration(bd); buildSteps->appendStep(bs); @@ -401,44 +404,51 @@ QbsBuildConfigurationFactory::QbsBuildConfigurationFactory() registerBuildConfiguration<QbsBuildConfiguration>(Constants::QBS_BC_ID); setSupportedProjectType(Constants::PROJECT_ID); setSupportedProjectMimeTypeName(Constants::MIME_TYPE); + setIssueReporter([](Kit *k, const QString &projectPath, const QString &buildDir) -> QList<Task> { + const QtSupport::BaseQtVersion * const version = QtSupport::QtKitInformation::qtVersion(k); + return version ? version->reportIssues(projectPath, buildDir) + : QList<ProjectExplorer::Task>(); + }); } -BuildInfo *QbsBuildConfigurationFactory::createBuildInfo(const Kit *k, - BuildConfiguration::BuildType type) const +BuildInfo QbsBuildConfigurationFactory::createBuildInfo(const Kit *k, + BuildConfiguration::BuildType type) const { - auto info = new QbsBuildInfo(this); - info->typeName = tr("Build"); - info->kitId = k->id(); - info->buildType = type; - info->config.insert("configName", type == BuildConfiguration::Debug ? "Debug" : "Release"); + BuildInfo info(this); + info.kitId = k->id(); + info.buildType = type; + info.typeName = tr("Build"); + QVariantMap config; + config.insert("configName", type == BuildConfiguration::Debug ? "Debug" : "Release"); + info.extraInfo = config; return info; } -QList<BuildInfo *> QbsBuildConfigurationFactory::availableBuilds(const Target *parent) const +QList<BuildInfo> QbsBuildConfigurationFactory::availableBuilds(const Target *parent) const { return {createBuildInfo(parent->kit(), BuildConfiguration::Debug)}; } -QList<BuildInfo *> QbsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const +QList<BuildInfo> QbsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const { - QList<BuildInfo *> result; + QList<BuildInfo> result; - 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. - info->displayName = tr("Debug"); + info.displayName = tr("Debug"); //: Non-ASCII characters in directory suffix may cause build issues. - info->buildDirectory + info.buildDirectory = defaultBuildDirectory(projectPath, k, tr("Debug", "Shadow build directory suffix"), - info->buildType); + info.buildType); result << info; info = createBuildInfo(k, BuildConfiguration::Release); //: The name of the release build configuration created by default for a qbs project. - info->displayName = tr("Release"); + info.displayName = tr("Release"); //: Non-ASCII characters in directory suffix may cause build issues. - info->buildDirectory + info.buildDirectory = defaultBuildDirectory(projectPath, k, tr("Release", "Shadow build directory suffix"), - info->buildType); + info.buildType); result << info; return result; diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h index f5a48d3b05..19c29ac33f 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h @@ -49,7 +49,7 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration QbsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); public: - void initialize(const ProjectExplorer::BuildInfo *info) override; + void initialize(const ProjectExplorer::BuildInfo &info) override; ProjectExplorer::NamedWidget *createConfigWidget() override; QbsBuildStep *qbsStep() const; @@ -104,12 +104,12 @@ class QbsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationF public: QbsBuildConfigurationFactory(); - QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override; - QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k, - const QString &projectPath) const override; + QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *parent) const override; + QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k, + const QString &projectPath) const override; private: - ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, + ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, ProjectExplorer::BuildConfiguration::BuildType type) const; }; diff --git a/src/plugins/qbsprojectmanager/qbsbuildinfo.cpp b/src/plugins/qbsprojectmanager/qbsbuildinfo.cpp deleted file mode 100644 index fec26589a3..0000000000 --- a/src/plugins/qbsprojectmanager/qbsbuildinfo.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "qbsbuildinfo.h" - -#include <qtsupport/qtkitinformation.h> - -namespace QbsProjectManager { -namespace Internal { - -QbsBuildInfo::QbsBuildInfo(const ProjectExplorer::BuildConfigurationFactory *f) - : ProjectExplorer::BuildInfo(f) -{ -} - -QList<ProjectExplorer::Task> QbsBuildInfo::reportIssues(const QString &projectPath, - const QString &buildDir) const -{ - const ProjectExplorer::Kit * const k = ProjectExplorer::KitManager::kit(kitId); - const QtSupport::BaseQtVersion * const version = QtSupport::QtKitInformation::qtVersion(k); - return version ? version->reportIssues(projectPath, buildDir) - : QList<ProjectExplorer::Task>(); -} - -} // namespace Internal -} // namespace QbsProjectManager diff --git a/src/plugins/qbsprojectmanager/qbsbuildinfo.h b/src/plugins/qbsprojectmanager/qbsbuildinfo.h deleted file mode 100644 index 9e1c9cd521..0000000000 --- a/src/plugins/qbsprojectmanager/qbsbuildinfo.h +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include <projectexplorer/buildinfo.h> - -#include <QVariantMap> - -namespace QbsProjectManager { -namespace Internal { - -class QbsBuildInfo final : public ProjectExplorer::BuildInfo -{ -public: - QbsBuildInfo(const ProjectExplorer::BuildConfigurationFactory *f); - - QVariantMap config; - -private: - QList<ProjectExplorer::Task> reportIssues(const QString &projectPath, - const QString &buildDir) const override; -}; - -} // namespace Internal -} // namespace QbsProjectManager diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 9321403013..0ea82d6f40 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -686,7 +686,7 @@ QString QbsProject::uniqueProductName(const qbs::ProductData &product) void QbsProject::configureAsExampleProject(const QSet<Id> &platforms) { - QList<const BuildInfo *> infoList; + QList<BuildInfo> infoList; QList<Kit *> kits = KitManager::kits(); const auto qtVersionMatchesPlatform = [platforms](const QtSupport::BaseQtVersion *version) { return platforms.isEmpty() || platforms.intersects(version->targetDeviceTypes()); @@ -696,16 +696,10 @@ void QbsProject::configureAsExampleProject(const QSet<Id> &platforms) = QtSupport::QtKitInformation::qtVersion(k); if (!qtVersion || !qtVersionMatchesPlatform(qtVersion)) continue; - const BuildConfigurationFactory * const factory - = BuildConfigurationFactory::find(k, projectFilePath().toString()); - if (!factory) - continue; - const auto &buildInfos = factory->availableSetups(k, projectFilePath().toString()); - for (BuildInfo * const info : buildInfos) - infoList << info; + if (auto factory = BuildConfigurationFactory::find(k, projectFilePath().toString())) + infoList << factory->allAvailableSetups(k, projectFilePath().toString()); } setup(infoList); - qDeleteAll(infoList); prepareForParsing(); } diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp index 77676c9405..7e3f37d0a8 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp @@ -26,11 +26,11 @@ #include "qbsprojectimporter.h" #include "qbsbuildconfiguration.h" -#include "qbsbuildinfo.h" #include "qbspmlogging.h" #include <coreplugin/documentmanager.h> #include <projectexplorer/buildconfiguration.h> +#include <projectexplorer/buildinfo.h> #include <projectexplorer/kitinformation.h> #include <projectexplorer/kitmanager.h> #include <projectexplorer/project.h> @@ -221,26 +221,26 @@ Kit *QbsProjectImporter::createKit(void *directoryData) 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(); - QList<BuildInfo *> result; const auto factory = qobject_cast<QbsBuildConfigurationFactory *>( BuildConfigurationFactory::find(k, projectFilePath().toString())); if (!factory) { qCDebug(qbsPmLog) << "no build config factory found"; - return result; + return {}; } const auto * const bgData = static_cast<BuildGraphData *>(directoryData); - auto * const buildInfo = new QbsBuildInfo(factory); - buildInfo->displayName = bgData->bgFilePath.toFileInfo().completeBaseName(); - buildInfo->buildType = bgData->buildVariant == "debug" + BuildInfo info(factory); + info.displayName = bgData->bgFilePath.toFileInfo().completeBaseName(); + info.buildType = bgData->buildVariant == "debug" ? BuildConfiguration::Debug : BuildConfiguration::Release; - buildInfo->kitId = k->id(); - buildInfo->buildDirectory = bgData->bgFilePath.parentDir().parentDir(); - buildInfo->config = bgData->overriddenProperties; - buildInfo->config.insert("configName", buildInfo->displayName); - return result << buildInfo; + info.kitId = k->id(); + info.buildDirectory = bgData->bgFilePath.parentDir().parentDir(); + QVariantMap config = bgData->overriddenProperties; + config.insert("configName", info.displayName); + info.extraInfo = config; + return {info}; } void QbsProjectImporter::deleteDirectoryData(void *directoryData) const diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.h b/src/plugins/qbsprojectmanager/qbsprojectimporter.h index 2980a70834..4aa3682a38 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectimporter.h +++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.h @@ -42,8 +42,8 @@ private: QList<void *> examineDirectory(const Utils::FileName &importPath) const override; bool matchKit(void *directoryData, const ProjectExplorer::Kit *k) const override; ProjectExplorer::Kit *createKit(void *directoryData) const override; - QList<ProjectExplorer::BuildInfo *> buildInfoListForKit(const ProjectExplorer::Kit *k, - void *directoryData) const override; + const QList<ProjectExplorer::BuildInfo> buildInfoListForKit(const ProjectExplorer::Kit *k, + void *directoryData) const override; void deleteDirectoryData(void *directoryData) const override; }; diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro index dcd01e32ad..d5d0b1b79a 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro @@ -23,7 +23,6 @@ HEADERS = \ propertyprovider.h \ qbsbuildconfiguration.h \ qbsbuildconfigurationwidget.h \ - qbsbuildinfo.h \ qbsbuildstep.h \ qbscleanstep.h \ qbskitinformation.h \ @@ -49,7 +48,6 @@ SOURCES = \ defaultpropertyprovider.cpp \ qbsbuildconfiguration.cpp \ qbsbuildconfigurationwidget.cpp \ - qbsbuildinfo.cpp \ qbsbuildstep.cpp \ qbscleanstep.cpp \ qbsinstallstep.cpp \ diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs index 4182fc1252..6c7793db55 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs @@ -72,8 +72,6 @@ QtcPlugin { "qbsbuildconfiguration.h", "qbsbuildconfigurationwidget.cpp", "qbsbuildconfigurationwidget.h", - "qbsbuildinfo.cpp", - "qbsbuildinfo.h", "qbsbuildstep.cpp", "qbsbuildstep.h", "qbsbuildstepconfigwidget.ui", diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index 25e1f8486c..9435155b44 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -41,6 +41,7 @@ #include <coreplugin/documentmanager.h> #include <coreplugin/icore.h> +#include <projectexplorer/buildinfo.h> #include <projectexplorer/buildmanager.h> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/kit.h> @@ -126,7 +127,7 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id) this, &QmakeBuildConfiguration::qtVersionsChanged); } -void QmakeBuildConfiguration::initialize(const BuildInfo *info) +void QmakeBuildConfiguration::initialize(const BuildInfo &info) { BuildConfiguration::initialize(info); @@ -138,28 +139,28 @@ void QmakeBuildConfiguration::initialize(const BuildInfo *info) BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN); cleanSteps->appendStep(new QmakeMakeStep(cleanSteps)); - const auto *qmakeInfo = static_cast<const QmakeBuildInfo *>(info); + const QmakeExtraBuildInfo qmakeExtra = info.extraInfo.value<QmakeExtraBuildInfo>(); BaseQtVersion *version = QtKitInformation::qtVersion(target()->kit()); BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); - if (qmakeInfo->buildType == BuildConfiguration::Debug) + if (info.buildType == BuildConfiguration::Debug) config |= BaseQtVersion::DebugBuild; else config &= ~BaseQtVersion::DebugBuild; - QString additionalArguments = qmakeInfo->additionalArguments; + QString additionalArguments = qmakeExtra.additionalArguments; if (!additionalArguments.isEmpty()) qmakeStep->setUserArguments(additionalArguments); - qmakeStep->setLinkQmlDebuggingLibrary(qmakeInfo->config.linkQmlDebuggingQQ2); - qmakeStep->setSeparateDebugInfo(qmakeInfo->config.separateDebugInfo); - qmakeStep->setUseQtQuickCompiler(qmakeInfo->config.useQtQuickCompiler); + qmakeStep->setLinkQmlDebuggingLibrary(qmakeExtra.config.linkQmlDebuggingQQ2); + qmakeStep->setSeparateDebugInfo(qmakeExtra.config.separateDebugInfo); + qmakeStep->setUseQtQuickCompiler(qmakeExtra.config.useQtQuickCompiler); setQMakeBuildConfiguration(config); - FileName directory = qmakeInfo->buildDirectory; + FileName directory = info.buildDirectory; if (directory.isEmpty()) { directory = defaultBuildDirectory(target()->project()->projectFilePath().toString(), - target()->kit(), qmakeInfo->displayName, buildType()); + target()->kit(), info.displayName, buildType()); } setBuildDirectory(directory); @@ -565,43 +566,66 @@ QmakeBuildConfigurationFactory::QmakeBuildConfigurationFactory() registerBuildConfiguration<QmakeBuildConfiguration>(Constants::QMAKE_BC_ID); setSupportedProjectType(Constants::QMAKEPROJECT_ID); setSupportedProjectMimeTypeName(Constants::PROFILE_MIMETYPE); + setIssueReporter([](Kit *k, const QString &projectPath, const QString &buildDir) { + QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); + QList<Task> issues; + if (version) + issues << version->reportIssues(projectPath, buildDir); + + QString tmpBuildDir = QDir(buildDir).absolutePath(); + const QChar slash = QLatin1Char('/'); + if (!tmpBuildDir.endsWith(slash)) + tmpBuildDir.append(slash); + QString sourcePath = QFileInfo(projectPath).absolutePath(); + if (!sourcePath.endsWith(slash)) + sourcePath.append(slash); + if (tmpBuildDir.count(slash) != sourcePath.count(slash)) { + const QString msg = QCoreApplication::translate("QmakeProjectManager::QtVersion", + "The build directory needs to be at the same level as the source directory."); + + issues.append(Task(Task::Warning, msg, Utils::FileName(), -1, + ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); + } + return issues; + }); } -QmakeBuildInfo *QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k, - const QString &projectPath, - BuildConfiguration::BuildType type) const +BuildInfo QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k, + const QString &projectPath, + BuildConfiguration::BuildType type) const { BaseQtVersion *version = QtKitInformation::qtVersion(k); - auto *info = new QmakeBuildInfo(this); + QmakeExtraBuildInfo extraInfo; + BuildInfo info(this); QString suffix; if (type == BuildConfiguration::Release) { //: The name of the release build configuration created by default for a qmake project. - info->displayName = tr("Release"); + info.displayName = tr("Release"); //: Non-ASCII characters in directory suffix may cause build issues. suffix = tr("Release", "Shadow build directory suffix"); if (version && version->isQtQuickCompilerSupported()) - info->config.useQtQuickCompiler = true; + extraInfo.config.useQtQuickCompiler = true; } else { if (type == BuildConfiguration::Debug) { //: The name of the debug build configuration created by default for a qmake project. - info->displayName = tr("Debug"); + info.displayName = tr("Debug"); //: Non-ASCII characters in directory suffix may cause build issues. suffix = tr("Debug", "Shadow build directory suffix"); } else if (type == BuildConfiguration::Profile) { //: The name of the profile build configuration created by default for a qmake project. - info->displayName = tr("Profile"); + info.displayName = tr("Profile"); //: Non-ASCII characters in directory suffix may cause build issues. suffix = tr("Profile", "Shadow build directory suffix"); - info->config.separateDebugInfo = true; + extraInfo.config.separateDebugInfo = true; if (version && version->isQtQuickCompilerSupported()) - info->config.useQtQuickCompiler = true; + extraInfo.config.useQtQuickCompiler = true; } if (version && version->isQmlDebuggingSupported()) - info->config.linkQmlDebuggingQQ2 = true; + extraInfo.config.linkQmlDebuggingQQ2 = true; } - info->typeName = info->displayName; - // Leave info->buildDirectory unset; - info->kitId = k->id(); + info.typeName = info.displayName; + // Leave info.buildDirectory unset; + info.kitId = k->id(); // check if this project is in the source directory: FileName projectFilePath = FileName::fromString(projectPath); @@ -613,11 +637,12 @@ QmakeBuildInfo *QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k, QString qtBuildDir = version->qmakeProperty("QT_INSTALL_PREFIX"); QString absoluteBuildPath = QDir::cleanPath(qtBuildDir + QLatin1Char('/') + relativeProjectPath); - info->buildDirectory = FileName::fromString(absoluteBuildPath); + info.buildDirectory = FileName::fromString(absoluteBuildPath); } else { - info->buildDirectory = defaultBuildDirectory(projectPath, k, suffix, type); + info.buildDirectory = defaultBuildDirectory(projectPath, k, suffix, type); } - info->buildType = type; + info.buildType = type; + info.extraInfo = QVariant::fromValue(extraInfo); return info; } @@ -630,26 +655,26 @@ static QList<BuildConfiguration::BuildType> availableBuildTypes(const BaseQtVers return types; } -QList<BuildInfo *> QmakeBuildConfigurationFactory::availableBuilds(const Target *parent) const +QList<BuildInfo> QmakeBuildConfigurationFactory::availableBuilds(const Target *parent) const { - QList<BuildInfo *> result; + QList<BuildInfo> result; const QString projectFilePath = parent->project()->projectFilePath().toString(); foreach (BuildConfiguration::BuildType buildType, availableBuildTypes(QtKitInformation::qtVersion(parent->kit()))) { - QmakeBuildInfo *info = createBuildInfo(parent->kit(), projectFilePath, buildType); - info->displayName.clear(); // ask for a name - info->buildDirectory.clear(); // This depends on the displayName + BuildInfo info = createBuildInfo(parent->kit(), projectFilePath, buildType); + info.displayName.clear(); // ask for a name + info.buildDirectory.clear(); // This depends on the displayName result << info; } return result; } -QList<BuildInfo *> QmakeBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const +QList<BuildInfo> QmakeBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const { - QList<BuildInfo *> result; + QList<BuildInfo> result; BaseQtVersion *qtVersion = QtKitInformation::qtVersion(k); if (!qtVersion || !qtVersion->isValid()) return result; diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h index 48485c0cfe..fe4bdeb21e 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h @@ -34,7 +34,6 @@ namespace ProjectExplorer { class FileNode; } namespace QmakeProjectManager { -class QmakeBuildInfo; class QMakeStep; class QmakeMakeStep; class QmakeBuildConfigurationFactory; @@ -50,7 +49,7 @@ public: QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); ~QmakeBuildConfiguration() override; - void initialize(const ProjectExplorer::BuildInfo *info) override; + void initialize(const ProjectExplorer::BuildInfo &info) override; ProjectExplorer::NamedWidget *createConfigWidget() override; bool isShadowBuild() const; @@ -152,12 +151,12 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeBuildConfigurationFactory : public Project public: QmakeBuildConfigurationFactory(); - QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override; - QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k, - const QString &projectPath) const override; + QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *parent) const override; + QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k, + const QString &projectPath) const override; private: - QmakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const QString &projectPath, - ProjectExplorer::BuildConfiguration::BuildType type) const; + ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, const QString &projectPath, + ProjectExplorer::BuildConfiguration::BuildType type) const; }; } // namespace QmakeProjectManager diff --git a/src/plugins/qmakeprojectmanager/qmakebuildinfo.h b/src/plugins/qmakeprojectmanager/qmakebuildinfo.h index 57a001c9cc..1d513f3271 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildinfo.h +++ b/src/plugins/qmakeprojectmanager/qmakebuildinfo.h @@ -25,66 +25,18 @@ #pragma once -#include "qmakebuildconfiguration.h" #include "qmakestep.h" -#include <projectexplorer/buildinfo.h> -#include <projectexplorer/kitmanager.h> -#include <projectexplorer/projectexplorerconstants.h> -#include <qtsupport/baseqtversion.h> -#include <qtsupport/qtkitinformation.h> - -#include <QDir> -#include <QFileInfo> - namespace QmakeProjectManager { -using ProjectExplorer::Task; - -class QmakeBuildInfo : public ProjectExplorer::BuildInfo +class QmakeExtraBuildInfo final { public: - QmakeBuildInfo(const QmakeBuildConfigurationFactory *f) : ProjectExplorer::BuildInfo(f) { } - QString additionalArguments; QString makefile; QMakeStepConfig config; - - bool operator==(const BuildInfo &o) const final - { - if (!ProjectExplorer::BuildInfo::operator==(o)) - return false; - - auto other = static_cast<const QmakeBuildInfo *>(&o); - return additionalArguments == other->additionalArguments - && makefile == other->makefile - && config == other->config; - } - - QList<Task> reportIssues(const QString &projectPath, const QString &buildDir) const override - { - ProjectExplorer::Kit *k = ProjectExplorer::KitManager::kit(kitId); - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); - QList<Task> issues; - if (version) - issues << version->reportIssues(projectPath, buildDir); - - QString tmpBuildDir = QDir(buildDir).absolutePath(); - const QChar slash = QLatin1Char('/'); - if (!tmpBuildDir.endsWith(slash)) - tmpBuildDir.append(slash); - QString sourcePath = QFileInfo(projectPath).absolutePath(); - if (!sourcePath.endsWith(slash)) - sourcePath.append(slash); - if (tmpBuildDir.count(slash) != sourcePath.count(slash)) { - const QString msg = QCoreApplication::translate("QmakeProjectManager::QtVersion", - "The build directory needs to be at the same level as the source directory."); - - issues.append(Task(Task::Warning, msg, Utils::FileName(), -1, - ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); - } - return issues; - } }; } // namespace QmakeProjectManager + +Q_DECLARE_METATYPE(QmakeProjectManager::QmakeExtraBuildInfo) diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index dd26db82e0..894163ab47 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -45,6 +45,8 @@ #include <cpptools/cppprojectupdater.h> #include <cpptools/cppmodelmanager.h> #include <qmljs/qmljsmodelmanagerinterface.h> + +#include <projectexplorer/buildinfo.h> #include <projectexplorer/buildmanager.h> #include <projectexplorer/buildtargetinfo.h> #include <projectexplorer/deploymentdata.h> @@ -957,7 +959,7 @@ void CentralizedFolderWatcher::delayedFolderChanged(const QString &folder) void QmakeProject::configureAsExampleProject(const QSet<Core::Id> &platforms) { - QList<const BuildInfo *> infoList; + QList<BuildInfo> infoList; QList<Kit *> kits = KitManager::kits(); foreach (Kit *k, kits) { QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); @@ -966,14 +968,10 @@ void QmakeProject::configureAsExampleProject(const QSet<Core::Id> &platforms) && !Utils::contains(version->targetDeviceTypes(), [platforms](Core::Id i) { return platforms.contains(i); }))) continue; - BuildConfigurationFactory *factory = BuildConfigurationFactory::find(k, projectFilePath().toString()); - if (!factory) - continue; - foreach (BuildInfo *info, factory->availableSetups(k, projectFilePath().toString())) - infoList << info; + if (auto factory = BuildConfigurationFactory::find(k, projectFilePath().toString())) + infoList << factory->allAvailableSetups(k, projectFilePath().toString()); } setup(infoList); - qDeleteAll(infoList); } void QmakeProject::updateBuildSystemData() diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp index 46129ee909..f6d4aad459 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp @@ -32,10 +32,12 @@ #include "makefileparse.h" #include "qmakestep.h" +#include <projectexplorer/buildinfo.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/kitmanager.h> #include <projectexplorer/toolchain.h> #include <projectexplorer/toolchainmanager.h> + #include <qtsupport/qtkitinformation.h> #include <qtsupport/qtsupportconstants.h> #include <qtsupport/qtversionfactory.h> @@ -229,9 +231,9 @@ Kit *QmakeProjectImporter::createKit(void *directoryData) const return createTemporaryKit(data->qtVersionData, data->parsedSpec, data->archConfig, data->osType); } -QList<BuildInfo *> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const +const QList<BuildInfo> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const { - QList<BuildInfo *> result; + QList<BuildInfo> result; auto *data = static_cast<DirectoryData *>(directoryData); auto factory = qobject_cast<QmakeBuildConfigurationFactory *>( BuildConfigurationFactory::find(k, projectFilePath().toString())); @@ -239,29 +241,32 @@ QList<BuildInfo *> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void return result; // create info: - std::unique_ptr<QmakeBuildInfo> info(new QmakeBuildInfo(factory)); + BuildInfo info(factory); if (data->buildConfig & BaseQtVersion::DebugBuild) { - info->buildType = BuildConfiguration::Debug; - info->displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Debug"); + info.buildType = BuildConfiguration::Debug; + info.displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Debug"); } else { - info->buildType = BuildConfiguration::Release; - info->displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Release"); + info.buildType = BuildConfiguration::Release; + info.displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Release"); } - info->kitId = k->id(); - info->buildDirectory = data->buildDirectory; - info->additionalArguments = data->additionalArguments; - info->config = data->config; - info->makefile = data->makefile; + info.kitId = k->id(); + info.buildDirectory = data->buildDirectory; + + QmakeExtraBuildInfo extra; + extra.additionalArguments = data->additionalArguments; + extra.config = data->config; + extra.makefile = data->makefile; + info.extraInfo = QVariant::fromValue(extra); bool found = false; - foreach (BuildInfo *bInfo, result) { - if (*static_cast<QmakeBuildInfo *>(bInfo) == *info) { + foreach (const BuildInfo &bInfo, result) { + if (bInfo == info) { found = true; break; } } if (!found) - result << info.release(); + result << info; return result; } diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h index adb5a4c9c6..13dad12de5 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h @@ -44,8 +44,8 @@ private: QList<void *> examineDirectory(const Utils::FileName &importPath) const final; bool matchKit(void *directoryData, const ProjectExplorer::Kit *k) const final; ProjectExplorer::Kit *createKit(void *directoryData) const final; - QList<ProjectExplorer::BuildInfo *> buildInfoListForKit(const ProjectExplorer::Kit *k, - void *directoryData) const final; + const QList<ProjectExplorer::BuildInfo> buildInfoListForKit(const ProjectExplorer::Kit *k, + void *directoryData) const final; void deleteDirectoryData(void *directoryData) const final; diff --git a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp index 0a65ec24bf..927c397aa8 100644 --- a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp +++ b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp @@ -25,6 +25,7 @@ #include "qmlprofilerdetailsrewriter_test.h" +#include <projectexplorer/buildinfo.h> #include <projectexplorer/customexecutablerunconfiguration.h> #include <projectexplorer/project.h> #include <projectexplorer/target.h> @@ -74,15 +75,15 @@ public: class DummyBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory { public: - QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *) const final + QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *) const final { - return QList<ProjectExplorer::BuildInfo *>(); + return {}; } - QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *, - const QString &) const final + QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *, + const QString &) const final { - return QList<ProjectExplorer::BuildInfo *>(); + return {}; } int priority(const ProjectExplorer::Kit *, const QString &) const final diff --git a/src/plugins/qtsupport/qtprojectimporter.cpp b/src/plugins/qtsupport/qtprojectimporter.cpp index af32e4a459..b9e50017d4 100644 --- a/src/plugins/qtsupport/qtprojectimporter.cpp +++ b/src/plugins/qtsupport/qtprojectimporter.cpp @@ -181,7 +181,7 @@ protected: QList<void *> examineDirectory(const Utils::FileName &importPath) const override; bool matchKit(void *directoryData, const Kit *k) const override; Kit *createKit(void *directoryData) const override; - QList<BuildInfo *> buildInfoListForKit(const Kit *k, void *directoryData) const override; + const QList<BuildInfo> buildInfoListForKit(const Kit *k, void *directoryData) const override; void deleteDirectoryData(void *directoryData) const override; private: @@ -241,20 +241,19 @@ Kit *TestQtProjectImporter::createKit(void *directoryData) const }); } -QList<BuildInfo *> TestQtProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const +const QList<BuildInfo> TestQtProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const { Q_UNUSED(directoryData); assert(m_testData.contains(directoryData)); assert(!m_deletedTestData.contains(directoryData)); assert(static_cast<const DirectoryData *>(directoryData)->importPath == m_path); - BuildInfo *info = new BuildInfo(nullptr); - info->displayName = "Test Build info"; - info->typeName = "Debug"; - info->buildDirectory = m_path; - info->kitId = k->id(); - info->buildType = BuildConfiguration::Debug; - + BuildInfo info; + info.displayName = "Test Build info"; + info.typeName = "Debug"; + info.buildDirectory = m_path; + info.kitId = k->id(); + info.buildType = BuildConfiguration::Debug; return {info}; } @@ -422,7 +421,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() // -------------------------------------------------------------------- // choose an existing directory to "import" - const QList<BuildInfo *> buildInfo = importer.import(Utils::FileName::fromString(appDir), true); + const QList<BuildInfo> buildInfo = importer.import(Utils::FileName::fromString(appDir), true); // VALIDATE: Basic TestImporter state: QCOMPARE(importer.projectFilePath().toString(), tempDir1.path()); @@ -436,14 +435,14 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() // VALIDATE: Validate result: for (int i = 0; i < buildInfo.count(); ++i) { const DirectoryData *dd = testData.at(i); - const BuildInfo *bi = buildInfo.at(i); + const BuildInfo &bi = buildInfo.at(i); // VALIDATE: Kit id is unchanged (unless it is a new kit) if (!dd->isNewKit) - QCOMPARE(bi->kitId, defaultKit->id()); + QCOMPARE(bi.kitId, defaultKit->id()); // VALIDATE: Kit is registered with the KitManager - Kit *newKit = KitManager::kit(bi->kitId); + Kit *newKit = KitManager::kit(bi.kitId); QVERIFY(newKit); const int newQtId = QtKitInformation::qtVersionId(newKit); @@ -596,7 +595,6 @@ void QtSupportPlugin::testQtProjectImporter_oneProject() // Teardown: // -------------------------------------------------------------------- - qDeleteAll(buildInfo); qDeleteAll(testData); foreach (Kit *k, toUnregisterLater) |