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:
Eike Ziller
2017-04-19 09:56:14 +02:00
232 changed files with 3919 additions and 1830 deletions

View File

@@ -40,7 +40,6 @@
#include <qbs.h>
#include <ios/iosconstants.h>
#include <qnx/qnxconstants.h>
#include <winrt/winrtconstants.h>
#include <QDir>
@@ -54,7 +53,6 @@ using namespace Constants;
namespace Internal {
using namespace ProjectExplorer::Constants;
using namespace Ios::Constants;
using namespace Qnx::Constants;
using namespace WinRt::Internal::Constants;
static QString extractToolchainPrefix(QString *compilerName)
@@ -119,10 +117,11 @@ static QStringList targetOSList(const ProjectExplorer::Abi &abi, const ProjectEx
}
os << QLatin1String("bsd") << QLatin1String("unix");
break;
case ProjectExplorer::Abi::QnxOS:
os << QLatin1String("qnx") << QLatin1String("unix");
break;
case ProjectExplorer::Abi::UnixOS:
if (device == QNX_QNX_OS_TYPE)
os << QLatin1String("qnx");
else if (abi.osFlavor() == ProjectExplorer::Abi::SolarisUnixFlavor)
if (abi.osFlavor() == ProjectExplorer::Abi::SolarisUnixFlavor)
os << QLatin1String("solaris");
os << QLatin1String("unix");
break;

View File

@@ -45,6 +45,8 @@
#include <QIcon>
#include <QStyle>
using namespace ProjectExplorer;
// ----------------------------------------------------------------------
// Helpers:
// ----------------------------------------------------------------------
@@ -223,20 +225,23 @@ public:
};
static QList<ProjectExplorer::ProjectAction> supportedNodeActions(ProjectExplorer::Node *node,
bool managesFiles)
static bool supportsNodeAction(ProjectAction action, Node *node)
{
QList<ProjectExplorer::ProjectAction> actions;
const QbsProject * const project = parentQbsProjectNode(node)->project();
if (!project->isProjectEditable())
return actions;
if (managesFiles)
actions << ProjectExplorer::AddNewFile << ProjectExplorer::AddExistingFile;
if (node->nodeType() == ProjectExplorer::NodeType::File
&& !project->qbsProject().buildSystemFiles().contains(node->filePath().toString())) {
actions << ProjectExplorer::RemoveFile << ProjectExplorer::Rename;
return false;
auto equalsNodeFilePath = [node](const QString &str)
{
return str == node->filePath().toString();
};
if (action == RemoveFile || action == Rename) {
if (node->nodeType() == ProjectExplorer::NodeType::File)
return !Utils::contains(project->qbsProject().buildSystemFiles(), equalsNodeFilePath);
}
return actions;
return false;
}
// ----------------------------------------------------------------------
@@ -265,9 +270,9 @@ QbsFolderNode::QbsFolderNode(const Utils::FileName &folderPath, ProjectExplorer:
{
}
QList<ProjectExplorer::ProjectAction> QbsFolderNode::supportedActions(ProjectExplorer::Node *node) const
bool QbsFolderNode::supportsAction(ProjectAction action, Node *node) const
{
return supportedNodeActions(node, false);
return supportsNodeAction(action, node);
}
// ---------------------------------------------------------------------------
@@ -283,12 +288,6 @@ bool QbsBaseProjectNode::showInSimpleTree() const
return false;
}
QList<ProjectExplorer::ProjectAction> QbsBaseProjectNode::supportedActions(ProjectExplorer::Node *node) const
{
Q_UNUSED(node);
return QList<ProjectExplorer::ProjectAction>();
}
// --------------------------------------------------------------------
// QbsGroupNode:
// --------------------------------------------------------------------
@@ -303,9 +302,12 @@ QbsGroupNode::QbsGroupNode(const qbs::GroupData &grp, const QString &productPath
m_qbsGroupData = grp;
}
QList<ProjectExplorer::ProjectAction> QbsGroupNode::supportedActions(ProjectExplorer::Node *node) const
bool QbsGroupNode::supportsAction(ProjectAction action, Node *node) const
{
return supportedNodeActions(node, true);
if (action == AddNewFile || action == AddExistingFile)
return true;
return supportsNodeAction(action, node);
}
bool QbsGroupNode::addFiles(const QStringList &filePaths, QStringList *notAdded)
@@ -382,9 +384,12 @@ bool QbsProductNode::showInSimpleTree() const
return true;
}
QList<ProjectExplorer::ProjectAction> QbsProductNode::supportedActions(ProjectExplorer::Node *node) const
bool QbsProductNode::supportsAction(ProjectAction action, Node *node) const
{
return supportedNodeActions(node, true);
if (action == AddNewFile || action == AddExistingFile)
return true;
return supportsNodeAction(action, node);
}
bool QbsProductNode::addFiles(const QStringList &filePaths, QStringList *notAdded)

View File

@@ -55,7 +55,7 @@ public:
const QString &displayName);
private:
QList<ProjectExplorer::ProjectAction> supportedActions(ProjectExplorer::Node *node) const override;
bool supportsAction(ProjectExplorer::ProjectAction action, Node *node) const final;
};
// ---------------------------------------------------------------------------
@@ -70,10 +70,6 @@ public:
explicit QbsBaseProjectNode(const Utils::FileName &absoluteFilePath);
bool showInSimpleTree() const override;
QList<ProjectExplorer::ProjectAction> supportedActions(Node *node) const override;
private:
friend class QbsGroupNode;
};
// --------------------------------------------------------------------
@@ -85,7 +81,7 @@ class QbsGroupNode : public QbsBaseProjectNode
public:
QbsGroupNode(const qbs::GroupData &grp, const QString &productPath);
QList<ProjectExplorer::ProjectAction> supportedActions(Node *node) const override;
bool supportsAction(ProjectExplorer::ProjectAction action, Node *node) const final;
bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0) override;
bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
@@ -107,7 +103,7 @@ public:
explicit QbsProductNode(const qbs::ProductData &prd);
bool showInSimpleTree() const override;
QList<ProjectExplorer::ProjectAction> supportedActions(Node *node) const override;
bool supportsAction(ProjectExplorer::ProjectAction action, Node *node) const final;
bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0) override;
bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;

View File

@@ -133,6 +133,10 @@ buildProductNodeTree(const qbs::Project &project, const qbs::ProductData &prd)
void setupProjectNode(QbsProjectManager::Internal::QbsProjectNode *node, const qbs::ProjectData &prjData,
const qbs::Project &qbsProject)
{
using namespace QbsProjectManager::Internal;
node->addNode(new QbsFileNode(Utils::FileName::fromString(prjData.location().filePath()),
ProjectExplorer::FileType::Project, false,
prjData.location().line()));
foreach (const qbs::ProjectData &subData, prjData.subProjects()) {
auto subProject =
new QbsProjectManager::Internal::QbsProjectNode(
@@ -169,9 +173,16 @@ QSet<QString> referencedBuildSystemFiles(const qbs::ProjectData &data)
QStringList unreferencedBuildSystemFiles(const qbs::Project &p)
{
return p.isValid()
? p.buildSystemFiles().subtract(referencedBuildSystemFiles(p.projectData())).toList()
: QStringList();
QStringList result;
if (!p.isValid())
return result;
const std::set<QString> &available = p.buildSystemFiles();
QList<QString> referenced = referencedBuildSystemFiles(p.projectData()).toList();
Utils::sort(referenced);
std::set_difference(available.begin(), available.end(), referenced.begin(), referenced.end(),
std::back_inserter(result));
return result;
}
} // namespace
@@ -182,9 +193,7 @@ namespace Internal {
QbsRootProjectNode *QbsNodeTreeBuilder::buildTree(QbsProject *project)
{
auto root = new QbsRootProjectNode(project);
root->addNode(new ProjectExplorer::FileNode(project->projectFilePath(),
ProjectExplorer::FileType::Project, false));
setupProjectNode(root, project->qbsProjectData(), project->qbsProject());
auto buildSystemFiles
= new ProjectExplorer::FolderNode(project->projectDirectory(),
ProjectExplorer::NodeType::Folder,
@@ -194,12 +203,11 @@ QbsRootProjectNode *QbsNodeTreeBuilder::buildTree(QbsProject *project)
for (const QString &f : unreferencedBuildSystemFiles(project->qbsProject())) {
const Utils::FileName filePath = Utils::FileName::fromString(f);
if (filePath.isChildOf(base))
root->addNestedNode(new ProjectExplorer::FileNode(filePath, ProjectExplorer::FileType::Project, false));
buildSystemFiles->addNestedNode(new ProjectExplorer::FileNode(filePath, ProjectExplorer::FileType::Project, false));
}
buildSystemFiles->compress();
root->addNode(buildSystemFiles);
setupProjectNode(root, project->qbsProjectData(), project->qbsProject());
return root;
}

View File

@@ -133,6 +133,8 @@ QbsProject::QbsProject(const FileName &fileName) :
setProjectContext(Context(Constants::PROJECT_ID));
setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
setDisplayName(fileName.toFileInfo().completeBaseName());
connect(this, &Project::activeTargetChanged, this, &QbsProject::changeActiveTarget);
connect(this, &Project::addedTarget, this, &QbsProject::targetWasAdded);
connect(this, &Project::removedTarget, this, &QbsProject::targetWasRemoved);
@@ -159,11 +161,6 @@ QbsProject::~QbsProject()
qDeleteAll(m_extraCompilers);
}
QString QbsProject::displayName() const
{
return projectFilePath().toFileInfo().completeBaseName();
}
QbsRootProjectNode *QbsProject::rootProjectNode() const
{
return static_cast<QbsRootProjectNode *>(Project::rootProjectNode());
@@ -434,12 +431,20 @@ bool QbsProject::checkCancelStatus()
return true;
}
static QSet<QString> toQStringSet(const std::set<QString> &src)
{
QSet<QString> result;
result.reserve(int(src.size()));
std::copy(src.begin(), src.end(), Utils::inserter(result));
return result;
}
void QbsProject::updateAfterParse()
{
qCDebug(qbsPmLog) << "Updating data after parse";
OpTimer opTimer("updateAfterParse");
updateProjectNodes();
updateDocuments(m_qbsProject.buildSystemFiles());
updateDocuments(toQStringSet(m_qbsProject.buildSystemFiles()));
updateBuildTargetData();
updateCppCodeModel();
updateQmlJsCodeModel();

View File

@@ -61,7 +61,6 @@ public:
explicit QbsProject(const Utils::FileName &filename);
~QbsProject() override;
QString displayName() const override;
QbsRootProjectNode *rootProjectNode() const override;
QStringList filesGeneratedFrom(const QString &sourceFile) const override;