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:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user