ProjectExplorer: Report project-specific kit errors/warnings

Report project-specific warnings about the kit used in Project Mode.
E.g. a python project should not complain about missing toolchains,
while a qmake project should.

Change-Id: I5ce6742683cdeffc7ff3f1a3e8f0b89aee9aa0b4
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Tobias Hunger
2018-04-18 13:39:05 +02:00
parent da18fc1f50
commit 460fdc02e0
17 changed files with 119 additions and 105 deletions

View File

@@ -198,7 +198,9 @@ Project::Project(const QString &mimeType, const Utils::FileName &fileName,
// Only set up containernode after d is set so that it will find the project directory!
d->m_containerNode = std::make_unique<ContainerNode>(this);
setRequiredKitPredicate([this](const Kit *k) { return supportsKit(k); });
setRequiredKitPredicate([this](const Kit *k) {
return !containsType(projectIssues(k), Task::TaskType::Error);
});
}
Project::~Project()
@@ -317,11 +319,12 @@ Target *Project::target(Kit *k) const
return Utils::findOrDefault(d->m_targets, Utils::equal(&Target::kit, k));
}
bool Project::supportsKit(const Kit *k, QString *errorMessage) const
QList<Task> Project::projectIssues(const Kit *k) const
{
Q_UNUSED(k);
Q_UNUSED(errorMessage);
return true;
QList<Task> result;
if (!k->isValid())
result.append(createProjectTask(Task::TaskType::Error, tr("Kit is not valid.")));
return {};
}
Target *Project::createTarget(Kit *k)
@@ -762,6 +765,11 @@ void Project::projectLoaded()
{
}
Task Project::createProjectTask(Task::TaskType type, const QString &description)
{
return Task(type, description, Utils::FileName(), -1, Core::Id());
}
Core::Context Project::projectContext() const
{
return Core::Context(d->m_id);