forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.3'
Conflicts: src/plugins/genericprojectmanager/genericproject.cpp src/plugins/genericprojectmanager/genericproject.h src/plugins/genericprojectmanager/genericprojectnodes.cpp src/plugins/genericprojectmanager/genericprojectnodes.h Change-Id: Ie0c870f68c8d200a75489b75860987655b2f6175
This commit is contained in:
@@ -149,10 +149,7 @@ void CMakeBuildConfiguration::ctor()
|
||||
emit dataAvailable();
|
||||
});
|
||||
connect(m_buildDirManager.get(), &BuildDirManager::errorOccured,
|
||||
this, [this, project](const QString &msg) {
|
||||
project->updateProjectData(this);
|
||||
setError(msg);
|
||||
});
|
||||
this, &CMakeBuildConfiguration::setError);
|
||||
connect(m_buildDirManager.get(), &BuildDirManager::configurationStarted,
|
||||
this, [this, project]() {
|
||||
project->handleParsingStarted();
|
||||
|
||||
@@ -258,6 +258,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
updateFromKit();
|
||||
connect(m_buildConfiguration->target(), &ProjectExplorer::Target::kitChanged,
|
||||
this, &CMakeBuildSettingsWidget::updateFromKit);
|
||||
connect(m_buildConfiguration, &CMakeBuildConfiguration::enabledChanged,
|
||||
this, [this]() { setError(m_buildConfiguration->disabledReason()); });
|
||||
}
|
||||
|
||||
void CMakeBuildSettingsWidget::setError(const QString &message)
|
||||
|
||||
@@ -444,19 +444,26 @@ QString CMakeBuildStepConfigWidget::displayName() const
|
||||
return tr("Build", "CMakeProjectManager::CMakeBuildStepConfigWidget display name.");
|
||||
}
|
||||
|
||||
static void createSpecialItem(const QString &text, const QString &data, QListWidget *parent)
|
||||
{
|
||||
auto item = new QListWidgetItem(text, parent);
|
||||
|
||||
item->setData(Qt::UserRole, data);
|
||||
QFont f;
|
||||
f.setItalic(true);
|
||||
item->setFont(f);
|
||||
}
|
||||
|
||||
void CMakeBuildStepConfigWidget::buildTargetsChanged()
|
||||
{
|
||||
const bool wasBlocked = m_buildTargetsList->blockSignals(true);
|
||||
m_buildTargetsList->clear();
|
||||
|
||||
auto item = new QListWidgetItem(tr(ADD_RUNCONFIGURATION_TEXT), m_buildTargetsList);
|
||||
createSpecialItem(tr(ADD_RUNCONFIGURATION_TEXT), ADD_RUNCONFIGURATION_TEXT, m_buildTargetsList);
|
||||
createSpecialItem(tr("all"), "all", m_buildTargetsList);
|
||||
createSpecialItem(tr("clean"), "clean", m_buildTargetsList);
|
||||
|
||||
item->setData(Qt::UserRole, QString::fromLatin1(ADD_RUNCONFIGURATION_TEXT));
|
||||
QFont f;
|
||||
f.setItalic(true);
|
||||
item->setFont(f);
|
||||
|
||||
CMakeProject *pro = static_cast<CMakeProject *>(m_buildStep->project());
|
||||
auto pro = static_cast<CMakeProject *>(m_buildStep->project());
|
||||
QStringList targetList = pro->buildTargetTitles();
|
||||
targetList.sort();
|
||||
|
||||
|
||||
@@ -180,15 +180,6 @@ bool CMakeCbpParser::parseCbpFile(CMakeTool::PathMapper mapper, const FileName &
|
||||
|
||||
fi.close();
|
||||
|
||||
// There is always a clean target:
|
||||
CMakeBuildTarget cleanTarget;
|
||||
cleanTarget.title = "clean";
|
||||
cleanTarget.targetType = UtilityType;
|
||||
cleanTarget.workingDirectory = m_buildDirectory;
|
||||
cleanTarget.sourceDirectory = m_sourceDirectory;
|
||||
|
||||
m_buildTargets.append(cleanTarget);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -79,6 +79,7 @@ CMakeProject::CMakeProject(const FileName &fileName) : Project(Constants::CMAKEM
|
||||
setId(CMakeProjectManager::Constants::CMAKEPROJECT_ID);
|
||||
setProjectContext(Core::Context(CMakeProjectManager::Constants::PROJECTCONTEXT));
|
||||
setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
|
||||
setDisplayName(projectDirectory().fileName());
|
||||
|
||||
connect(this, &CMakeProject::activeTargetChanged, this, &CMakeProject::handleActiveTargetChanged);
|
||||
connect(&m_treeScanner, &TreeScanner::finished, this, &CMakeProject::handleTreeScanningFinished);
|
||||
@@ -145,8 +146,10 @@ void CMakeProject::updateProjectData(CMakeBuildConfiguration *bc)
|
||||
Kit *k = t->kit();
|
||||
|
||||
auto newRoot = bc->generateProjectTree(m_allFiles);
|
||||
if (newRoot)
|
||||
if (newRoot) {
|
||||
setRootProjectNode(newRoot);
|
||||
setDisplayName(newRoot->displayName());
|
||||
}
|
||||
|
||||
updateApplicationAndDeploymentTargets();
|
||||
updateTargetRunConfigurations(t);
|
||||
@@ -296,12 +299,6 @@ bool CMakeProject::hasBuildTarget(const QString &title) const
|
||||
return anyOf(buildTargets(), [title](const CMakeBuildTarget &ct) { return ct.title == title; });
|
||||
}
|
||||
|
||||
QString CMakeProject::displayName() const
|
||||
{
|
||||
auto root = dynamic_cast<CMakeProjectNode *>(rootProjectNode());
|
||||
return root ? root->displayName() : projectDirectory().fileName();
|
||||
}
|
||||
|
||||
Project::RestoreResult CMakeProject::fromMap(const QVariantMap &map, QString *errorMessage)
|
||||
{
|
||||
RestoreResult result = Project::fromMap(map, errorMessage);
|
||||
|
||||
@@ -86,8 +86,6 @@ public:
|
||||
explicit CMakeProject(const Utils::FileName &filename);
|
||||
~CMakeProject() final;
|
||||
|
||||
QString displayName() const final;
|
||||
|
||||
QStringList buildTargetTitles(bool runnable = false) const;
|
||||
bool hasBuildTarget(const QString &title) const;
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ CMakeManager::CMakeManager() :
|
||||
m_runCMakeAction(new QAction(QIcon(), tr("Run CMake"), this)),
|
||||
m_clearCMakeCacheAction(new QAction(QIcon(), tr("Clear CMake Configuration"), this)),
|
||||
m_runCMakeActionContextMenu(new QAction(QIcon(), tr("Run CMake"), this)),
|
||||
m_rescanProjectAction(new QAction(QIcon(), tr("Rescan project"), this))
|
||||
m_rescanProjectAction(new QAction(QIcon(), tr("Rescan Project"), this))
|
||||
{
|
||||
Core::ActionContainer *mbuild =
|
||||
Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_BUILDPROJECT);
|
||||
|
||||
@@ -56,12 +56,6 @@ bool CMakeInputsNode::showInSimpleTree() const
|
||||
return false;
|
||||
}
|
||||
|
||||
QList<ProjectExplorer::ProjectAction> CMakeInputsNode::supportedActions(ProjectExplorer::Node *node) const
|
||||
{
|
||||
Q_UNUSED(node);
|
||||
return QList<ProjectExplorer::ProjectAction>();
|
||||
}
|
||||
|
||||
CMakeListsNode::CMakeListsNode(const Utils::FileName &cmakeListPath) :
|
||||
ProjectExplorer::ProjectNode(cmakeListPath)
|
||||
{
|
||||
@@ -80,12 +74,6 @@ bool CMakeListsNode::showInSimpleTree() const
|
||||
return false;
|
||||
}
|
||||
|
||||
QList<ProjectExplorer::ProjectAction> CMakeListsNode::supportedActions(ProjectExplorer::Node *node) const
|
||||
{
|
||||
Q_UNUSED(node);
|
||||
return QList<ProjectExplorer::ProjectAction>();
|
||||
}
|
||||
|
||||
CMakeProjectNode::CMakeProjectNode(const Utils::FileName &directory) :
|
||||
ProjectExplorer::ProjectNode(directory)
|
||||
{
|
||||
@@ -103,12 +91,6 @@ QString CMakeProjectNode::tooltip() const
|
||||
return QString();
|
||||
}
|
||||
|
||||
QList<ProjectExplorer::ProjectAction> CMakeProjectNode::supportedActions(ProjectExplorer::Node *node) const
|
||||
{
|
||||
Q_UNUSED(node);
|
||||
return QList<ProjectExplorer::ProjectAction>();
|
||||
}
|
||||
|
||||
CMakeTargetNode::CMakeTargetNode(const Utils::FileName &directory) :
|
||||
ProjectExplorer::ProjectNode(directory)
|
||||
{
|
||||
@@ -126,12 +108,6 @@ QString CMakeTargetNode::tooltip() const
|
||||
return m_tooltip;
|
||||
}
|
||||
|
||||
QList<ProjectExplorer::ProjectAction> CMakeTargetNode::supportedActions(ProjectExplorer::Node *node) const
|
||||
{
|
||||
Q_UNUSED(node);
|
||||
return QList<ProjectExplorer::ProjectAction>();
|
||||
}
|
||||
|
||||
void CMakeTargetNode::setTargetInformation(const QList<Utils::FileName> &artifacts,
|
||||
const QString &type)
|
||||
{
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
#include <projectexplorer/projectnodes.h>
|
||||
|
||||
namespace CMakeProjectManager {
|
||||
class CMakeProject;
|
||||
|
||||
namespace Internal {
|
||||
|
||||
class CMakeInputsNode : public ProjectExplorer::ProjectNode
|
||||
@@ -40,7 +38,6 @@ public:
|
||||
static Utils::FileName inputsPathFromCMakeListsPath(const Utils::FileName &cmakeLists);
|
||||
|
||||
bool showInSimpleTree() const final;
|
||||
QList<ProjectExplorer::ProjectAction> supportedActions(Node *node) const final;
|
||||
};
|
||||
|
||||
class CMakeListsNode : public ProjectExplorer::ProjectNode
|
||||
@@ -49,7 +46,6 @@ public:
|
||||
CMakeListsNode(const Utils::FileName &cmakeListPath);
|
||||
|
||||
bool showInSimpleTree() const final;
|
||||
QList<ProjectExplorer::ProjectAction> supportedActions(Node *node) const final;
|
||||
};
|
||||
|
||||
class CMakeProjectNode : public ProjectExplorer::ProjectNode
|
||||
@@ -59,7 +55,6 @@ public:
|
||||
|
||||
bool showInSimpleTree() const final;
|
||||
QString tooltip() const final;
|
||||
QList<ProjectExplorer::ProjectAction> supportedActions(Node *node) const final;
|
||||
};
|
||||
|
||||
class CMakeTargetNode : public ProjectExplorer::ProjectNode
|
||||
@@ -71,7 +66,6 @@ public:
|
||||
|
||||
bool showInSimpleTree() const final;
|
||||
QString tooltip() const final;
|
||||
QList<ProjectExplorer::ProjectAction> supportedActions(Node *node) const final;
|
||||
|
||||
private:
|
||||
QString m_tooltip;
|
||||
|
||||
@@ -414,14 +414,16 @@ void ServerModeReader::extractConfigurationData(const QVariantMap &data)
|
||||
{
|
||||
const QString name = data.value(NAME_KEY).toString();
|
||||
Q_UNUSED(name);
|
||||
QSet<QString> knownTargets; // To filter duplicate target names:-/
|
||||
const QVariantList projects = data.value("projects").toList();
|
||||
for (const QVariant &p : projects) {
|
||||
const QVariantMap pData = p.toMap();
|
||||
m_projects.append(extractProjectData(pData));
|
||||
m_projects.append(extractProjectData(pData, knownTargets));
|
||||
}
|
||||
}
|
||||
|
||||
ServerModeReader::Project *ServerModeReader::extractProjectData(const QVariantMap &data)
|
||||
ServerModeReader::Project *ServerModeReader::extractProjectData(const QVariantMap &data,
|
||||
QSet<QString> &knownTargets)
|
||||
{
|
||||
auto project = new Project;
|
||||
project->name = data.value(NAME_KEY).toString();
|
||||
@@ -430,16 +432,28 @@ ServerModeReader::Project *ServerModeReader::extractProjectData(const QVariantMa
|
||||
const QVariantList targets = data.value("targets").toList();
|
||||
for (const QVariant &t : targets) {
|
||||
const QVariantMap tData = t.toMap();
|
||||
project->targets.append(extractTargetData(tData, project));
|
||||
Target *tp = extractTargetData(tData, project, knownTargets);
|
||||
if (tp)
|
||||
project->targets.append(tp);
|
||||
}
|
||||
return project;
|
||||
}
|
||||
|
||||
ServerModeReader::Target *ServerModeReader::extractTargetData(const QVariantMap &data, Project *p)
|
||||
ServerModeReader::Target *ServerModeReader::extractTargetData(const QVariantMap &data, Project *p,
|
||||
QSet<QString> &knownTargets)
|
||||
{
|
||||
const QString targetName = data.value(NAME_KEY).toString();
|
||||
|
||||
// Remove duplicate targets: CMake unfortunately does duplicate targets for all projects that
|
||||
// contain them. Keep at least till cmake 3.9 is deprecated.
|
||||
const int count = knownTargets.count();
|
||||
knownTargets.insert(targetName);
|
||||
if (knownTargets.count() == count)
|
||||
return nullptr;
|
||||
|
||||
auto target = new Target;
|
||||
target->project = p;
|
||||
target->name = data.value(NAME_KEY).toString();
|
||||
target->name = targetName;
|
||||
target->sourceDirectory = FileName::fromString(data.value(SOURCE_DIRECTORY_KEY).toString());
|
||||
target->buildDirectory = FileName::fromString(data.value("buildDirectory").toString());
|
||||
|
||||
@@ -664,7 +678,6 @@ void ServerModeReader::addHeaderNodes(ProjectNode *root, const QList<FileNode *>
|
||||
{
|
||||
auto headerNode = new VirtualFolderNode(root->filePath(), Node::DefaultPriority - 5);
|
||||
headerNode->setDisplayName(tr("<Headers>"));
|
||||
root->addNode(headerNode);
|
||||
|
||||
// knownHeaders are already listed in their targets:
|
||||
QSet<Utils::FileName> seenHeaders = Utils::transform<QSet>(knownHeaders, &FileNode::filePath);
|
||||
@@ -681,6 +694,11 @@ void ServerModeReader::addHeaderNodes(ProjectNode *root, const QList<FileNode *>
|
||||
headerNode->addNestedNode(node);
|
||||
}
|
||||
}
|
||||
|
||||
if (headerNode->nodes().isEmpty())
|
||||
delete headerNode; // No Headers, do not show this Folder.
|
||||
else
|
||||
root->addNode(headerNode);
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -107,8 +107,8 @@ private:
|
||||
|
||||
void extractCodeModelData(const QVariantMap &data);
|
||||
void extractConfigurationData(const QVariantMap &data);
|
||||
Project *extractProjectData(const QVariantMap &data);
|
||||
Target *extractTargetData(const QVariantMap &data, Project *p);
|
||||
Project *extractProjectData(const QVariantMap &data, QSet<QString> &knownTargets);
|
||||
Target *extractTargetData(const QVariantMap &data, Project *p, QSet<QString> &knownTargets);
|
||||
FileGroup *extractFileGroupData(const QVariantMap &data, const QDir &srcDir, Target *t);
|
||||
void extractCMakeInputsData(const QVariantMap &data);
|
||||
void extractCacheData(const QVariantMap &data);
|
||||
|
||||
Reference in New Issue
Block a user