forked from qt-creator/qt-creator
KitManager: Get rid of KitMatcher class
Use std::function instead. Clean up API while at it. Change-Id: I6e401ab57f5375e36710c30508c596af3f4b3385 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -64,7 +64,7 @@ StartRemoteDialog::StartRemoteDialog(QWidget *parent)
|
||||
setWindowTitle(tr("Start Remote Analysis"));
|
||||
|
||||
d->kitChooser = new KitChooser(this);
|
||||
d->kitChooser->setKitMatcher([](const Kit *kit) {
|
||||
d->kitChooser->setKitPredicate([](const Kit *kit) {
|
||||
const IDevice::ConstPtr device = DeviceKitInformation::device(kit);
|
||||
return kit->isValid() && device && !device->sshParameters().host.isEmpty();
|
||||
});
|
||||
|
||||
@@ -105,7 +105,7 @@ DebuggerKitChooser::DebuggerKitChooser(Mode mode, QWidget *parent)
|
||||
, m_hostAbi(Abi::hostAbi())
|
||||
, m_mode(mode)
|
||||
{
|
||||
setKitMatcher([this](const Kit *k) {
|
||||
setKitPredicate([this](const Kit *k) {
|
||||
// Match valid debuggers and restrict local debugging to compatible toolchains.
|
||||
auto errors = DebuggerKitInformation::configurationErrors(k);
|
||||
// we do not care for mismatched ABI if we want *any* debugging
|
||||
@@ -178,7 +178,7 @@ QString StartApplicationParameters::displayName() const
|
||||
name += QLatin1String("...");
|
||||
}
|
||||
|
||||
if (Kit *kit = KitManager::find(kitId))
|
||||
if (Kit *kit = KitManager::kit(kitId))
|
||||
name += QString::fromLatin1(" (%1)").arg(kit->displayName());
|
||||
|
||||
return name;
|
||||
@@ -226,7 +226,7 @@ StartApplicationDialog::StartApplicationDialog(QWidget *parent)
|
||||
setWindowTitle(tr("Start Debugger"));
|
||||
|
||||
d->kitChooser = new KitChooser(this);
|
||||
d->kitChooser->setKitMatcher([this](const Kit *k) {
|
||||
d->kitChooser->setKitPredicate([this](const Kit *k) {
|
||||
return !DebuggerKitInformation::configurationErrors(k);
|
||||
});
|
||||
d->kitChooser->populate();
|
||||
|
||||
@@ -578,7 +578,7 @@ static QWidget *addSearch(BaseTreeView *treeView, const QString &title,
|
||||
return widget;
|
||||
}
|
||||
|
||||
static std::function<bool(const Kit *)> cdbMatcher(char wordWidth = 0)
|
||||
static Kit::Predicate cdbPredicate(char wordWidth = 0)
|
||||
{
|
||||
return [wordWidth](const Kit *k) -> bool {
|
||||
if (DebuggerKitInformation::engineType(k) != CdbEngineType
|
||||
@@ -596,10 +596,10 @@ static std::function<bool(const Kit *)> cdbMatcher(char wordWidth = 0)
|
||||
static Kit *findUniversalCdbKit()
|
||||
{
|
||||
if (Utils::is64BitWindowsSystem()) {
|
||||
if (Kit *cdb64Kit = KitManager::find(KitMatcher(cdbMatcher(64))))
|
||||
if (Kit *cdb64Kit = KitManager::kit(cdbPredicate(64)))
|
||||
return cdb64Kit;
|
||||
}
|
||||
return KitManager::find(KitMatcher(cdbMatcher()));
|
||||
return KitManager::kit(cdbPredicate());
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
@@ -1122,17 +1122,17 @@ static Kit *guessKitFromParameters(const DebuggerRunParameters &rp)
|
||||
|
||||
if (!abis.isEmpty()) {
|
||||
// Try exact abis.
|
||||
kit = KitManager::find(KitMatcher([abis](const Kit *k) -> bool {
|
||||
kit = KitManager::kit([abis](const Kit *k) {
|
||||
const Abi tcAbi = ToolChainKitInformation::targetAbi(k);
|
||||
return abis.contains(tcAbi) && !DebuggerKitInformation::configurationErrors(k);
|
||||
}));
|
||||
});
|
||||
if (!kit) {
|
||||
// Or something compatible.
|
||||
kit = KitManager::find(KitMatcher([abis](const Kit *k) -> bool {
|
||||
kit = KitManager::kit([abis](const Kit *k) {
|
||||
const Abi tcAbi = ToolChainKitInformation::targetAbi(k);
|
||||
return !DebuggerKitInformation::configurationErrors(k)
|
||||
&& Utils::contains(abis, [tcAbi](const Abi &a) { return a.isCompatibleWith(tcAbi); });
|
||||
}));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1193,7 +1193,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
|
||||
} else if (key == QLatin1String("terminal")) {
|
||||
rp.useTerminal = bool(val.toInt());
|
||||
} else if (key == QLatin1String("kit")) {
|
||||
kit = KitManager::find(Id::fromString(val));
|
||||
kit = KitManager::kit(Id::fromString(val));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,8 +63,10 @@ void JsonKitsPage::initializePage()
|
||||
const QSet<Id> required
|
||||
= evaluate(m_requiredFeatures, wiz->value(QLatin1String("RequiredFeatures")), wiz);
|
||||
|
||||
setRequiredKitMatcher(KitMatcher([required](const Kit *k) { return k->hasFeatures(required); }));
|
||||
setPreferredKitMatcher(KitMatcher([platform, preferred](const Kit *k) { return k->supportedPlatforms().contains(platform) && k->hasFeatures(preferred); }));
|
||||
setRequiredKitPredicate([required](const Kit *k) { return k->hasFeatures(required); });
|
||||
setPreferredKitPredicate([platform, preferred](const Kit *k) {
|
||||
return k->supportedPlatforms().contains(platform) && k->hasFeatures(preferred);
|
||||
});
|
||||
setProjectPath(wiz->expander()->expand(unexpandedProjectPath()));
|
||||
|
||||
TargetSetupPage::initializePage();
|
||||
|
||||
@@ -56,6 +56,8 @@ class KitPrivate;
|
||||
class PROJECTEXPLORER_EXPORT Kit
|
||||
{
|
||||
public:
|
||||
using Predicate = std::function<bool(const Kit *)>;
|
||||
|
||||
explicit Kit(Core::Id id = Core::Id());
|
||||
|
||||
// Do not trigger evaluations
|
||||
|
||||
@@ -43,9 +43,7 @@ const char lastKitKey[] = "LastSelectedKit";
|
||||
|
||||
KitChooser::KitChooser(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
m_kitMatcher([](const Kit *k) {
|
||||
return k->isValid();
|
||||
})
|
||||
m_kitPredicate([](const Kit *k) { return k->isValid(); })
|
||||
{
|
||||
m_chooser = new QComboBox(this);
|
||||
m_chooser->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
|
||||
@@ -93,7 +91,7 @@ void KitChooser::populate()
|
||||
{
|
||||
m_chooser->clear();
|
||||
foreach (Kit *kit, KitManager::sortKits(KitManager::kits())) {
|
||||
if (m_kitMatcher(kit)) {
|
||||
if (m_kitPredicate(kit)) {
|
||||
m_chooser->addItem(kitText(kit), qVariantFromValue(kit->id()));
|
||||
m_chooser->setItemData(m_chooser->count() - 1, kitToolTip(kit), Qt::ToolTipRole);
|
||||
}
|
||||
@@ -135,16 +133,16 @@ Core::Id KitChooser::currentKitId() const
|
||||
return kit ? kit->id() : Core::Id();
|
||||
}
|
||||
|
||||
void KitChooser::setKitMatcher(const KitChooser::KitMatcher &matcher)
|
||||
void KitChooser::setKitPredicate(const Kit::Predicate &predicate)
|
||||
{
|
||||
m_kitMatcher = matcher;
|
||||
m_kitPredicate = predicate;
|
||||
populate();
|
||||
}
|
||||
|
||||
Kit *KitChooser::kitAt(int index) const
|
||||
{
|
||||
auto id = qvariant_cast<Core::Id>(m_chooser->itemData(index));
|
||||
return KitManager::find(id);
|
||||
return KitManager::kit(id);
|
||||
}
|
||||
|
||||
} // namespace ProjectExplorer
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
#include "projectexplorer_export.h"
|
||||
|
||||
#include "kit.h"
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include <functional>
|
||||
@@ -40,8 +42,6 @@ namespace Core { class Id; }
|
||||
|
||||
namespace ProjectExplorer {
|
||||
|
||||
class Kit;
|
||||
|
||||
// Let the user pick a kit.
|
||||
class PROJECTEXPLORER_EXPORT KitChooser : public QWidget
|
||||
{
|
||||
@@ -53,8 +53,7 @@ public:
|
||||
void setCurrentKitId(Core::Id id);
|
||||
Core::Id currentKitId() const;
|
||||
|
||||
typedef std::function<bool(const Kit *k)> KitMatcher;
|
||||
void setKitMatcher(const KitMatcher &matcher);
|
||||
void setKitPredicate(const Kit::Predicate &predicate);
|
||||
|
||||
Kit *currentKit() const;
|
||||
|
||||
@@ -74,7 +73,7 @@ private:
|
||||
void onManageButtonClicked();
|
||||
Kit *kitAt(int index) const;
|
||||
|
||||
KitMatcher m_kitMatcher;
|
||||
Kit::Predicate m_kitPredicate;
|
||||
QComboBox *m_chooser;
|
||||
QPushButton *m_manageButton;
|
||||
};
|
||||
|
||||
@@ -425,8 +425,7 @@ void ToolChainKitInformation::kitsWereLoaded()
|
||||
|
||||
void ToolChainKitInformation::toolChainUpdated(ToolChain *tc)
|
||||
{
|
||||
auto matcher = KitMatcher([tc, this](const Kit *k) { return toolChain(k, ToolChain::Language::Cxx) == tc; });
|
||||
foreach (Kit *k, KitManager::matchingKits(matcher))
|
||||
for (Kit *k : KitManager::kits([tc, this](const Kit *k) { return toolChain(k, ToolChain::Language::Cxx) == tc; }))
|
||||
notifyAboutUpdate(k);
|
||||
}
|
||||
|
||||
@@ -496,11 +495,9 @@ void DeviceTypeKitInformation::setDeviceTypeId(Kit *k, Core::Id type)
|
||||
k->setValue(DeviceTypeKitInformation::id(), type.toSetting());
|
||||
}
|
||||
|
||||
KitMatcher DeviceTypeKitInformation::deviceTypeMatcher(Core::Id type)
|
||||
Kit::Predicate DeviceTypeKitInformation::deviceTypePredicate(Core::Id type)
|
||||
{
|
||||
return KitMatcher(std::function<bool(const Kit *)>([type](const Kit *kit) {
|
||||
return type.isValid() && deviceTypeId(kit) == type;
|
||||
}));
|
||||
return [type](const Kit *kit) { return type.isValid() && deviceTypeId(kit) == type; };
|
||||
}
|
||||
|
||||
QSet<Core::Id> DeviceTypeKitInformation::supportedPlatforms(const Kit *k) const
|
||||
|
||||
@@ -131,7 +131,7 @@ public:
|
||||
static const Core::Id deviceTypeId(const Kit *k);
|
||||
static void setDeviceTypeId(Kit *k, Core::Id type);
|
||||
|
||||
static KitMatcher deviceTypeMatcher(Core::Id type);
|
||||
static Kit::Predicate deviceTypePredicate(Core::Id type);
|
||||
|
||||
QSet<Core::Id> supportedPlatforms(const Kit *k) const override;
|
||||
QSet<Core::Id> availableFeatures(const Kit *k) const override;
|
||||
|
||||
@@ -213,7 +213,7 @@ void KitManager::restoreKits()
|
||||
setDefaultKit(defaultKit);
|
||||
}
|
||||
|
||||
Kit *k = find(userKits.defaultKit);
|
||||
Kit *k = kit(userKits.defaultKit);
|
||||
if (!k && !defaultKit())
|
||||
k = Utils::findOrDefault(kitsToRegister + sdkKits, &Kit::isValid);
|
||||
if (k)
|
||||
@@ -378,21 +378,14 @@ KitManager::KitList KitManager::restoreKits(const FileName &fileName)
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<Kit *> KitManager::kits()
|
||||
QList<Kit *> KitManager::kits(const Kit::Predicate &predicate)
|
||||
{
|
||||
if (predicate)
|
||||
return Utils::filtered(d->m_kitList, predicate);
|
||||
return d->m_kitList;
|
||||
}
|
||||
|
||||
QList<Kit *> KitManager::matchingKits(const KitMatcher &matcher)
|
||||
{
|
||||
QList<Kit *> result;
|
||||
foreach (Kit *k, d->m_kitList)
|
||||
if (matcher.matches(k))
|
||||
result.append(k);
|
||||
return result;
|
||||
}
|
||||
|
||||
Kit *KitManager::find(Id id)
|
||||
Kit *KitManager::kit(Id id)
|
||||
{
|
||||
if (!id.isValid())
|
||||
return 0;
|
||||
@@ -400,11 +393,9 @@ Kit *KitManager::find(Id id)
|
||||
return Utils::findOrDefault(kits(), Utils::equal(&Kit::id, id));
|
||||
}
|
||||
|
||||
Kit *KitManager::find(const KitMatcher &matcher)
|
||||
Kit *KitManager::kit(const Kit::Predicate &predicate)
|
||||
{
|
||||
return Utils::findOrDefault(d->m_kitList, [&matcher](Kit *k) {
|
||||
return matcher.matches(k);
|
||||
});
|
||||
return Utils::findOrDefault(d->m_kitList, predicate);
|
||||
}
|
||||
|
||||
Kit *KitManager::defaultKit()
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
#include "projectexplorer_export.h"
|
||||
|
||||
#include "kit.h"
|
||||
|
||||
#include <coreplugin/id.h>
|
||||
#include <coreplugin/featureprovider.h>
|
||||
|
||||
@@ -44,7 +46,6 @@ class MacroExpander;
|
||||
namespace ProjectExplorer {
|
||||
class Task;
|
||||
class IOutputParser;
|
||||
class Kit;
|
||||
class KitConfigWidget;
|
||||
class KitManager;
|
||||
|
||||
@@ -106,21 +107,6 @@ private:
|
||||
int m_priority; // The higher the closer to the top.
|
||||
};
|
||||
|
||||
class PROJECTEXPLORER_EXPORT KitMatcher
|
||||
{
|
||||
public:
|
||||
typedef std::function<bool(const Kit *)> Matcher;
|
||||
|
||||
explicit KitMatcher(const Matcher &m) : m_matcher(m) {}
|
||||
KitMatcher() = default;
|
||||
|
||||
bool isValid() const { return !!m_matcher; }
|
||||
bool matches(const Kit *kit) const { return m_matcher(kit); }
|
||||
|
||||
private:
|
||||
Matcher m_matcher;
|
||||
};
|
||||
|
||||
class PROJECTEXPLORER_EXPORT KitManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -129,10 +115,9 @@ public:
|
||||
static KitManager *instance();
|
||||
~KitManager() override;
|
||||
|
||||
static QList<Kit *> kits();
|
||||
static QList<Kit *> matchingKits(const KitMatcher &matcher);
|
||||
static Kit *find(Core::Id id);
|
||||
static Kit *find(const KitMatcher &matcher);
|
||||
static QList<Kit *> kits(const Kit::Predicate &predicate = Kit::Predicate());
|
||||
static Kit *kit(const Kit::Predicate &predicate);
|
||||
static Kit *kit(Core::Id id);
|
||||
static Kit *defaultKit();
|
||||
|
||||
static QList<KitInformation *> kitInformation();
|
||||
|
||||
@@ -100,8 +100,8 @@ public:
|
||||
QVariantMap m_pluginSettings;
|
||||
Internal::UserFileAccessor *m_accessor = nullptr;
|
||||
|
||||
KitMatcher m_requiredKitMatcher;
|
||||
KitMatcher m_preferredKitMatcher;
|
||||
Kit::Predicate m_requiredKitPredicate;
|
||||
Kit::Predicate m_preferredKitPredicate;
|
||||
|
||||
Utils::MacroExpander m_macroExpander;
|
||||
};
|
||||
@@ -441,7 +441,7 @@ Target *Project::restoreTarget(const QVariantMap &data)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Kit *k = KitManager::find(id);
|
||||
Kit *k = KitManager::kit(id);
|
||||
if (!k) {
|
||||
qWarning("Warning: No kit '%s' found. Continuing.", qPrintable(id.toString()));
|
||||
return nullptr;
|
||||
@@ -685,7 +685,7 @@ void Project::setup(QList<const BuildInfo *> infoList)
|
||||
{
|
||||
QList<Target *> toRegister;
|
||||
foreach (const BuildInfo *info, infoList) {
|
||||
Kit *k = KitManager::find(info->kitId);
|
||||
Kit *k = KitManager::kit(info->kitId);
|
||||
if (!k)
|
||||
continue;
|
||||
Target *t = target(k);
|
||||
@@ -719,24 +719,24 @@ ProjectImporter *Project::projectImporter() const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
KitMatcher Project::requiredKitMatcher() const
|
||||
Kit::Predicate Project::requiredKitPredicate() const
|
||||
{
|
||||
return d->m_requiredKitMatcher;
|
||||
return d->m_requiredKitPredicate;
|
||||
}
|
||||
|
||||
void Project::setRequiredKitMatcher(const KitMatcher &matcher)
|
||||
void Project::setRequiredKitPredicate(const Kit::Predicate &predicate)
|
||||
{
|
||||
d->m_requiredKitMatcher = matcher;
|
||||
d->m_requiredKitPredicate = predicate;
|
||||
}
|
||||
|
||||
KitMatcher Project::preferredKitMatcher() const
|
||||
Kit::Predicate Project::preferredKitPredicate() const
|
||||
{
|
||||
return d->m_preferredKitMatcher;
|
||||
return d->m_preferredKitPredicate;
|
||||
}
|
||||
|
||||
void Project::setPreferredKitMatcher(const KitMatcher &matcher)
|
||||
void Project::setPreferredKitPredicate(const Kit::Predicate &predicate)
|
||||
{
|
||||
d->m_preferredKitMatcher = matcher;
|
||||
d->m_preferredKitPredicate = predicate;
|
||||
}
|
||||
|
||||
void Project::onBuildDirectoryChanged()
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
#include "projectexplorer_export.h"
|
||||
|
||||
#include "kit.h"
|
||||
|
||||
#include <coreplugin/id.h>
|
||||
|
||||
#include <utils/fileutils.h>
|
||||
@@ -46,8 +48,6 @@ namespace ProjectExplorer {
|
||||
class BuildInfo;
|
||||
class EditorConfiguration;
|
||||
class IProjectManager;
|
||||
class Kit;
|
||||
class KitMatcher;
|
||||
class NamedWidget;
|
||||
class ProjectImporter;
|
||||
class ProjectNode;
|
||||
@@ -132,11 +132,8 @@ public:
|
||||
virtual bool requiresTargetPanel() const;
|
||||
virtual ProjectImporter *projectImporter() const;
|
||||
|
||||
KitMatcher requiredKitMatcher() const;
|
||||
void setRequiredKitMatcher(const KitMatcher &matcher);
|
||||
|
||||
KitMatcher preferredKitMatcher() const;
|
||||
void setPreferredKitMatcher(const KitMatcher &matcher);
|
||||
Kit::Predicate requiredKitPredicate() const;
|
||||
Kit::Predicate preferredKitPredicate() const;
|
||||
|
||||
virtual bool needsSpecialDeployment() const;
|
||||
// The build system is able to report all executables that can be built, independent
|
||||
@@ -174,6 +171,9 @@ protected:
|
||||
virtual RestoreResult fromMap(const QVariantMap &map, QString *errorMessage);
|
||||
virtual bool setupTarget(Target *t);
|
||||
|
||||
void setRequiredKitPredicate(const Kit::Predicate &predicate);
|
||||
void setPreferredKitPredicate(const Kit::Predicate &predicate);
|
||||
|
||||
void setId(Core::Id id);
|
||||
void setDocument(Core::IDocument *doc); // takes ownership!
|
||||
void setProjectManager(IProjectManager *manager);
|
||||
|
||||
@@ -530,7 +530,7 @@ public:
|
||||
{
|
||||
if (ProjectItem *projectItem = m_projectsModel.rootItem()->childAt(0)) {
|
||||
if (KitOptionsPage *page = ExtensionSystem::PluginManager::getObject<KitOptionsPage>())
|
||||
page->showKit(KitManager::find(Id::fromSetting(projectItem->data(0, KitIdRole))));
|
||||
page->showKit(KitManager::kit(Id::fromSetting(projectItem->data(0, KitIdRole))));
|
||||
}
|
||||
ICore::showOptionsDialog(Constants::KITS_SETTINGS_PAGE_ID, ICore::mainWindow());
|
||||
}
|
||||
@@ -552,7 +552,7 @@ public:
|
||||
for (BuildInfo *info : toImport) {
|
||||
Target *target = project->target(info->kitId);
|
||||
if (!target) {
|
||||
target = project->createTarget(KitManager::find(info->kitId));
|
||||
target = project->createTarget(KitManager::kit(info->kitId));
|
||||
if (target)
|
||||
project->addTarget(target);
|
||||
}
|
||||
|
||||
@@ -767,7 +767,7 @@ bool Target::fromMap(const QVariantMap &map)
|
||||
if (!ProjectConfiguration::fromMap(map))
|
||||
return false;
|
||||
|
||||
QTC_ASSERT(d->m_kit == KitManager::find(id()), return false);
|
||||
QTC_ASSERT(d->m_kit == KitManager::kit(id()), return false);
|
||||
|
||||
setDisplayName(d->m_kit->displayName()); // Overwrite displayname read from file
|
||||
setDefaultDisplayName(d->m_kit->displayName());
|
||||
|
||||
@@ -128,8 +128,8 @@ TargetSetupPageWrapper::TargetSetupPageWrapper(Project *project)
|
||||
m_targetSetupPage = new TargetSetupPage(this);
|
||||
m_targetSetupPage->setUseScrollArea(false);
|
||||
m_targetSetupPage->setProjectPath(project->projectFilePath().toString());
|
||||
m_targetSetupPage->setRequiredKitMatcher(project->requiredKitMatcher());
|
||||
m_targetSetupPage->setPreferredKitMatcher(project->preferredKitMatcher());
|
||||
m_targetSetupPage->setRequiredKitPredicate(project->requiredKitPredicate());
|
||||
m_targetSetupPage->setPreferredKitPredicate(project->preferredKitPredicate());
|
||||
m_targetSetupPage->setProjectImporter(project->projectImporter());
|
||||
m_targetSetupPage->initializePage();
|
||||
m_targetSetupPage->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
@@ -301,13 +301,13 @@ public:
|
||||
{
|
||||
switch (role) {
|
||||
case Qt::DisplayRole: {
|
||||
if (Kit *kit = KitManager::find(m_kitId))
|
||||
if (Kit *kit = KitManager::kit(m_kitId))
|
||||
return kit->displayName();
|
||||
break;
|
||||
}
|
||||
|
||||
case Qt::DecorationRole: {
|
||||
const Kit *k = KitManager::find(m_kitId);
|
||||
const Kit *k = KitManager::kit(m_kitId);
|
||||
QTC_ASSERT(k, return QVariant());
|
||||
if (!isEnabled())
|
||||
return kitIconWithOverlay(*k, IconOverlay::Add);
|
||||
@@ -334,7 +334,7 @@ public:
|
||||
}
|
||||
|
||||
case Qt::ToolTipRole: {
|
||||
Kit *k = KitManager::find(m_kitId);
|
||||
Kit *k = KitManager::kit(m_kitId);
|
||||
QTC_ASSERT(k, return QVariant());
|
||||
QString toolTip;
|
||||
if (!isEnabled())
|
||||
@@ -371,7 +371,7 @@ public:
|
||||
QTC_ASSERT(!data.isValid(), return false);
|
||||
if (!isEnabled()) {
|
||||
m_currentChild = DefaultPage;
|
||||
Kit *k = KitManager::find(m_kitId);
|
||||
Kit *k = KitManager::kit(m_kitId);
|
||||
m_project->addTarget(m_project->createTarget(k));
|
||||
} else {
|
||||
// Go to Run page, when on Run previously etc.
|
||||
@@ -406,7 +406,7 @@ public:
|
||||
|
||||
void addToContextMenu(QMenu *menu)
|
||||
{
|
||||
Kit *kit = KitManager::find(m_kitId);
|
||||
Kit *kit = KitManager::kit(m_kitId);
|
||||
QTC_ASSERT(kit, return);
|
||||
const QString kitName = kit->displayName();
|
||||
const QString projectName = m_project->displayName();
|
||||
@@ -801,8 +801,9 @@ void TargetGroupItemPrivate::rebuildContents()
|
||||
{
|
||||
q->removeChildren();
|
||||
|
||||
KitMatcher matcher([this](const Kit *kit) { return m_project->supportsKit(const_cast<Kit *>(kit)); });
|
||||
const QList<Kit *> kits = KitManager::sortKits(KitManager::matchingKits(matcher));
|
||||
const QList<Kit *> kits = KitManager::sortKits(KitManager::kits([this](const Kit *kit) {
|
||||
return m_project->supportsKit(const_cast<Kit *>(kit));
|
||||
}));
|
||||
for (Kit *kit : kits)
|
||||
q->appendChild(new TargetItem(m_project, kit->id()));
|
||||
|
||||
|
||||
@@ -193,9 +193,9 @@ void TargetSetupPage::initializePage()
|
||||
selectAtLeastOneKit();
|
||||
}
|
||||
|
||||
void TargetSetupPage::setRequiredKitMatcher(const KitMatcher &matcher)
|
||||
void TargetSetupPage::setRequiredKitPredicate(const Kit::Predicate &predicate)
|
||||
{
|
||||
m_requiredMatcher = matcher;
|
||||
m_requiredPredicate = predicate;
|
||||
}
|
||||
|
||||
QList<Core::Id> TargetSetupPage::selectedKits() const
|
||||
@@ -211,9 +211,9 @@ QList<Core::Id> TargetSetupPage::selectedKits() const
|
||||
return result;
|
||||
}
|
||||
|
||||
void TargetSetupPage::setPreferredKitMatcher(const KitMatcher &matcher)
|
||||
void TargetSetupPage::setPreferredKitPredicate(const Kit::Predicate &predicate)
|
||||
{
|
||||
m_preferredMatcher = matcher;
|
||||
m_preferredPredicate = predicate;
|
||||
}
|
||||
|
||||
TargetSetupPage::~TargetSetupPage()
|
||||
@@ -247,11 +247,7 @@ void TargetSetupPage::setupWidgets()
|
||||
{
|
||||
// Known profiles:
|
||||
QList<Kit *> kitList;
|
||||
if (m_requiredMatcher.isValid())
|
||||
kitList = KitManager::matchingKits(m_requiredMatcher);
|
||||
else
|
||||
kitList = KitManager::kits();
|
||||
|
||||
kitList = KitManager::kits(m_requiredPredicate);
|
||||
kitList = KitManager::sortKits(kitList);
|
||||
|
||||
foreach (Kit *k, kitList)
|
||||
@@ -367,7 +363,7 @@ void TargetSetupPage::handleKitUpdate(Kit *k)
|
||||
|
||||
TargetSetupWidget *widget = m_widgets.value(k->id());
|
||||
|
||||
bool acceptable = !m_requiredMatcher.isValid() || m_requiredMatcher.matches(k);
|
||||
bool acceptable = !m_requiredPredicate || m_requiredPredicate(k);
|
||||
|
||||
if (widget && !acceptable)
|
||||
removeWidget(k);
|
||||
@@ -464,7 +460,7 @@ void TargetSetupPage::import(const Utils::FileName &path, bool silent)
|
||||
foreach (BuildInfo *info, toImport) {
|
||||
TargetSetupWidget *widget = m_widgets.value(info->kitId, 0);
|
||||
if (!widget) {
|
||||
Kit *k = KitManager::find(info->kitId);
|
||||
Kit *k = KitManager::kit(info->kitId);
|
||||
Q_ASSERT(k);
|
||||
addWidget(k);
|
||||
}
|
||||
@@ -496,7 +492,7 @@ void TargetSetupPage::removeWidget(Kit *k)
|
||||
|
||||
TargetSetupWidget *TargetSetupPage::addWidget(Kit *k)
|
||||
{
|
||||
if (!k || (m_requiredMatcher.isValid() && !m_requiredMatcher.matches(k)))
|
||||
if (!k || (m_requiredPredicate && !m_requiredPredicate(k)))
|
||||
return 0;
|
||||
|
||||
IBuildConfigurationFactory *factory
|
||||
@@ -514,7 +510,7 @@ TargetSetupWidget *TargetSetupPage::addWidget(Kit *k)
|
||||
m_baseLayout->removeWidget(widget);
|
||||
m_baseLayout->removeItem(m_spacer);
|
||||
|
||||
widget->setKitSelected(m_preferredMatcher.isValid() && m_preferredMatcher.matches(k));
|
||||
widget->setKitSelected(m_preferredPredicate && m_preferredPredicate(k));
|
||||
m_widgets.insert(k->id(), widget);
|
||||
connect(widget, &TargetSetupWidget::selectedToggled,
|
||||
this, &TargetSetupPage::kitSelectionChanged);
|
||||
|
||||
@@ -27,8 +27,9 @@
|
||||
|
||||
#include "projectexplorer_export.h"
|
||||
|
||||
#include "projectimporter.h"
|
||||
#include "kitinformation.h"
|
||||
#include "kitmanager.h"
|
||||
#include "projectimporter.h"
|
||||
|
||||
#include <utils/wizardpage.h>
|
||||
|
||||
@@ -43,7 +44,6 @@ namespace Utils { class FileName; }
|
||||
|
||||
namespace ProjectExplorer {
|
||||
class Kit;
|
||||
class KitMatcher;
|
||||
class Project;
|
||||
|
||||
namespace Internal {
|
||||
@@ -66,8 +66,8 @@ public:
|
||||
void initializePage() override;
|
||||
|
||||
// Call these before initializePage!
|
||||
void setRequiredKitMatcher(const KitMatcher &matcher);
|
||||
void setPreferredKitMatcher(const KitMatcher &matcher);
|
||||
void setRequiredKitPredicate(const ProjectExplorer::Kit::Predicate &predicate);
|
||||
void setPreferredKitPredicate(const ProjectExplorer::Kit::Predicate &predicate);
|
||||
|
||||
/// Sets whether the targetsetupage uses a scrollarea
|
||||
/// to host the widgets from the factories
|
||||
@@ -108,8 +108,8 @@ private:
|
||||
void setupWidgets();
|
||||
void reset();
|
||||
|
||||
KitMatcher m_requiredMatcher;
|
||||
KitMatcher m_preferredMatcher;
|
||||
ProjectExplorer::Kit::Predicate m_requiredPredicate;
|
||||
ProjectExplorer::Kit::Predicate m_preferredPredicate;
|
||||
QPointer<ProjectImporter> m_importer = nullptr;
|
||||
QLayout *m_baseLayout = nullptr;
|
||||
QString m_projectPath;
|
||||
|
||||
@@ -136,7 +136,7 @@ void QbsProfilesSettingsWidget::apply()
|
||||
m_applyingProperties = true; // The following will cause kitsChanged() to be emitted.
|
||||
for (CustomProperties::ConstIterator it = m_customProperties.constBegin();
|
||||
it != m_customProperties.constEnd(); ++it) {
|
||||
ProjectExplorer::Kit * const kit = ProjectExplorer::KitManager::find(it.key());
|
||||
ProjectExplorer::Kit * const kit = ProjectExplorer::KitManager::kit(it.key());
|
||||
QTC_ASSERT(kit, continue);
|
||||
kit->setValue(Core::Id(Constants::QBS_PROPERTIES_KEY_FOR_KITS), it.value());
|
||||
}
|
||||
@@ -187,7 +187,7 @@ void QbsProfilesSettingsWidget::displayCurrentProfile()
|
||||
if (m_ui.kitsComboBox->currentIndex() == -1)
|
||||
return;
|
||||
const Core::Id kitId = Core::Id::fromSetting(m_ui.kitsComboBox->currentData());
|
||||
const ProjectExplorer::Kit * const kit = ProjectExplorer::KitManager::find(kitId);
|
||||
const ProjectExplorer::Kit * const kit = ProjectExplorer::KitManager::kit(kitId);
|
||||
QTC_ASSERT(kit, return);
|
||||
const QString profileName = QbsManager::instance()->profileForKit(kit);
|
||||
m_ui.profileValueLabel->setText(profileName);
|
||||
@@ -235,7 +235,7 @@ void QbsProfilesSettingsWidget::mergeCustomPropertiesIntoModel()
|
||||
for (CustomProperties::ConstIterator it = m_customProperties.constBegin();
|
||||
it != m_customProperties.constEnd(); ++it) {
|
||||
const Core::Id kitId = it.key();
|
||||
const ProjectExplorer::Kit * const kit = ProjectExplorer::KitManager::find(kitId);
|
||||
const ProjectExplorer::Kit * const kit = ProjectExplorer::KitManager::kit(kitId);
|
||||
QTC_ASSERT(kit, continue);
|
||||
const QString keyPrefix = QLatin1String("profiles.")
|
||||
+ QbsManager::instance()->profileForKit(kit) + QLatin1Char('.');
|
||||
|
||||
@@ -58,7 +58,7 @@ public:
|
||||
QList<ProjectExplorer::Task> reportIssues(const QString &projectPath,
|
||||
const QString &buildDir) const
|
||||
{
|
||||
ProjectExplorer::Kit *k = ProjectExplorer::KitManager::find(kitId);
|
||||
ProjectExplorer::Kit *k = ProjectExplorer::KitManager::kit(kitId);
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k);
|
||||
return version ? version->reportIssues(projectPath, buildDir)
|
||||
: QList<ProjectExplorer::Task>();
|
||||
|
||||
@@ -262,7 +262,7 @@ QmakeProject::QmakeProject(QmakeManager *manager, const QString &fileName) :
|
||||
setDocument(new QmakeProjectFile(fileName));
|
||||
setProjectContext(Core::Context(QmakeProjectManager::Constants::PROJECT_ID));
|
||||
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
|
||||
setRequiredKitMatcher(QtSupport::QtKitInformation::qtVersionMatcher());
|
||||
setRequiredKitPredicate(QtSupport::QtKitInformation::qtVersionPredicate());
|
||||
|
||||
const QTextCodec *codec = Core::EditorManager::defaultTextCodec();
|
||||
m_qmakeVfs->setTextCodec(codec);
|
||||
@@ -276,9 +276,7 @@ QmakeProject::QmakeProject(QmakeManager *manager, const QString &fileName) :
|
||||
connect(BuildManager::instance(), &BuildManager::buildQueueFinished,
|
||||
this, &QmakeProject::buildFinished);
|
||||
|
||||
setPreferredKitMatcher(KitMatcher([this](const Kit *kit) -> bool {
|
||||
return matchesKit(kit);
|
||||
}));
|
||||
setPreferredKitPredicate([this](const Kit *kit) -> bool { return matchesKit(kit); });
|
||||
}
|
||||
|
||||
QmakeProject::~QmakeProject()
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <utils/algorithm.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QVariant>
|
||||
@@ -201,11 +202,11 @@ int BaseQmakeProjectWizardDialog::addTargetSetupPage(int id)
|
||||
const Core::Id platform = selectedPlatform();
|
||||
QSet<Core::Id> features = { QtSupport::Constants::FEATURE_DESKTOP };
|
||||
if (!platform.isValid())
|
||||
m_targetSetupPage->setPreferredKitMatcher(QtKitInformation::qtVersionMatcher(features));
|
||||
m_targetSetupPage->setPreferredKitPredicate(QtKitInformation::qtVersionPredicate(features));
|
||||
else
|
||||
m_targetSetupPage->setPreferredKitMatcher(QtKitInformation::platformMatcher(platform));
|
||||
m_targetSetupPage->setPreferredKitPredicate(QtKitInformation::platformPredicate(platform));
|
||||
|
||||
m_targetSetupPage->setRequiredKitMatcher(QtKitInformation::qtVersionMatcher(requiredFeatures()));
|
||||
m_targetSetupPage->setRequiredKitPredicate(QtKitInformation::qtVersionPredicate(requiredFeatures()));
|
||||
|
||||
resize(900, 450);
|
||||
if (id >= 0)
|
||||
@@ -270,11 +271,8 @@ bool BaseQmakeProjectWizardDialog::isQtPlatformSelected(Core::Id platform) const
|
||||
{
|
||||
QList<Core::Id> selectedKitList = selectedKits();
|
||||
|
||||
foreach (Kit *k, KitManager::matchingKits(QtKitInformation::platformMatcher(platform)))
|
||||
if (selectedKitList.contains(k->id()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return Utils::contains(KitManager::kits(QtKitInformation::platformPredicate(platform)),
|
||||
[selectedKitList](const Kit *k) { return selectedKitList.contains(k->id()); });
|
||||
}
|
||||
|
||||
QList<Core::Id> BaseQmakeProjectWizardDialog::selectedKits() const
|
||||
|
||||
@@ -339,8 +339,8 @@ Project::RestoreResult QmlProject::fromMap(const QVariantMap &map, QString *erro
|
||||
|
||||
if (!activeTarget()) {
|
||||
// find a kit that matches prerequisites (prefer default one)
|
||||
QList<Kit*> kits = KitManager::matchingKits(
|
||||
KitMatcher(std::function<bool(const Kit *)>([this](const Kit *k) -> bool {
|
||||
QList<Kit*> kits = KitManager::kits(
|
||||
std::function<bool(const Kit *)>([this](const Kit *k) -> bool {
|
||||
if (!k->isValid())
|
||||
return false;
|
||||
|
||||
@@ -369,7 +369,7 @@ Project::RestoreResult QmlProject::fromMap(const QVariantMap &map, QString *erro
|
||||
}
|
||||
|
||||
return version->qtVersion() >= minVersion && hasViewer;
|
||||
})));
|
||||
}));
|
||||
|
||||
if (!kits.isEmpty()) {
|
||||
Kit *kit = 0;
|
||||
|
||||
@@ -77,7 +77,7 @@ QnxAttachDebugSupport::QnxAttachDebugSupport(QObject *parent)
|
||||
void QnxAttachDebugSupport::showProcessesDialog()
|
||||
{
|
||||
auto kitChooser = new KitChooser;
|
||||
kitChooser->setKitMatcher([](const Kit *k){
|
||||
kitChooser->setKitPredicate([](const Kit *k){
|
||||
return k->isValid() && DeviceTypeKitInformation::deviceTypeId(k) == Core::Id(Constants::QNX_QNX_OS_TYPE);
|
||||
});
|
||||
|
||||
|
||||
@@ -107,8 +107,8 @@ void QnxPlugin::updateDebuggerActions()
|
||||
{
|
||||
bool hasValidQnxKit = false;
|
||||
|
||||
KitMatcher matcher = DeviceTypeKitInformation::deviceTypeMatcher(Constants::QNX_QNX_OS_TYPE);
|
||||
foreach (Kit *qnxKit, KitManager::matchingKits(matcher)) {
|
||||
auto matcher = DeviceTypeKitInformation::deviceTypePredicate(Constants::QNX_QNX_OS_TYPE);
|
||||
foreach (Kit *qnxKit, KitManager::kits(matcher)) {
|
||||
if (qnxKit->isValid() && !DeviceKitInformation::device(qnxKit).isNull()) {
|
||||
hasValidQnxKit = true;
|
||||
break;
|
||||
|
||||
@@ -208,18 +208,19 @@ void QtKitInformation::kitsWereLoaded()
|
||||
this, &QtKitInformation::qtVersionsChanged);
|
||||
}
|
||||
|
||||
KitMatcher QtKitInformation::platformMatcher(Core::Id platform)
|
||||
Kit::Predicate QtKitInformation::platformPredicate(Core::Id platform)
|
||||
{
|
||||
return KitMatcher(std::function<bool(const Kit *)>([platform](const Kit *kit) -> bool {
|
||||
return [platform](const Kit *kit) -> bool {
|
||||
BaseQtVersion *version = QtKitInformation::qtVersion(kit);
|
||||
return version && version->targetDeviceTypes().contains(platform);
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
KitMatcher QtKitInformation::qtVersionMatcher(const QSet<Core::Id> &required,
|
||||
const QtVersionNumber &min, const QtVersionNumber &max)
|
||||
Kit::Predicate QtKitInformation::qtVersionPredicate(const QSet<Core::Id> &required,
|
||||
const QtVersionNumber &min,
|
||||
const QtVersionNumber &max)
|
||||
{
|
||||
return KitMatcher(std::function<bool(const Kit *)>([required, min, max](const Kit *kit) -> bool {
|
||||
return [required, min, max](const Kit *kit) -> bool {
|
||||
BaseQtVersion *version = QtKitInformation::qtVersion(kit);
|
||||
if (!version)
|
||||
return false;
|
||||
@@ -229,7 +230,7 @@ KitMatcher QtKitInformation::qtVersionMatcher(const QSet<Core::Id> &required,
|
||||
if (max.majorVersion > -1 && current > max)
|
||||
return false;
|
||||
return version->availableFeatures().contains(required);
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
QSet<Core::Id> QtKitInformation::supportedPlatforms(const Kit *k) const
|
||||
|
||||
@@ -63,8 +63,9 @@ public:
|
||||
static BaseQtVersion *qtVersion(const ProjectExplorer::Kit *k);
|
||||
static void setQtVersion(ProjectExplorer::Kit *k, const BaseQtVersion *v);
|
||||
|
||||
static ProjectExplorer::KitMatcher platformMatcher(Core::Id availablePlatforms);
|
||||
static ProjectExplorer::KitMatcher qtVersionMatcher(const QSet<Core::Id> &required = QSet<Core::Id>(),
|
||||
static ProjectExplorer::Kit::Predicate platformPredicate(Core::Id availablePlatforms);
|
||||
static ProjectExplorer::Kit::Predicate
|
||||
qtVersionPredicate(const QSet<Core::Id> &required = QSet<Core::Id>(),
|
||||
const QtVersionNumber &min = QtVersionNumber(0, 0, 0),
|
||||
const QtVersionNumber &max = QtVersionNumber(INT_MAX, INT_MAX, INT_MAX));
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ Kit *TestQtProjectImporter::createKit(void *directoryData) const
|
||||
const DirectoryData *dd = static_cast<const DirectoryData *>(directoryData);
|
||||
assert(dd->importPath == m_path);
|
||||
|
||||
if (KitManager::instance()->find(dd->kit->id())) // known kit
|
||||
if (KitManager::instance()->kit(dd->kit->id())) // known kit
|
||||
return dd->kit;
|
||||
|
||||
// New temporary kit:
|
||||
@@ -444,7 +444,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
|
||||
QCOMPARE(bi->kitId, defaultKit->id());
|
||||
|
||||
// VALIDATE: Kit is registered with the KitManager
|
||||
Kit *newKit = KitManager::find(bi->kitId);
|
||||
Kit *newKit = KitManager::kit(bi->kitId);
|
||||
QVERIFY(newKit);
|
||||
|
||||
const int newQtId = QtKitInformation::qtVersionId(newKit);
|
||||
@@ -548,7 +548,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
|
||||
}
|
||||
|
||||
// VALIDATE: DefaultKit is still visible in KitManager
|
||||
QVERIFY(KitManager::find(newKit->id()));
|
||||
QVERIFY(KitManager::kit(newKit->id()));
|
||||
} else {
|
||||
// Validate that the kit was cleaned up.
|
||||
|
||||
@@ -579,7 +579,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
|
||||
QVERIFY(QtKitInformation::qtVersionId(newKit) == -1);
|
||||
|
||||
// VALIDATE: New kit is still visible in KitManager
|
||||
QVERIFY(KitManager::find(newKitId)); // Cleanup Kit does not unregister Kits, so it does
|
||||
QVERIFY(KitManager::kit(newKitId)); // Cleanup Kit does not unregister Kits, so it does
|
||||
// not matter here whether the kit is new or not.
|
||||
|
||||
// VALIDATE: Qt was cleaned up (new Qt!)
|
||||
|
||||
Reference in New Issue
Block a user