forked from qt-creator/qt-creator
ProjectNodes: Do not derive Project Nodes from QObject
That should save some memory per node, and since creator has a lot of nodes (e.g. opening the LLVM project adds about 1 000 000 nodes) this should be noticeable:-) Calling update inside ProjectTree::currentNode() and rename it to findCurrentNode() to make sure it is an still existing pointer. Also, try to reduce the somehow more expensive currentNode() calls and sprinkle some const around that usage. Change-Id: I6a7c5db01a71d53d39544d3013cad557d5b96cdc Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
committed by
Tim Jenssen
parent
bbb54cdeba
commit
45046f7071
@@ -67,20 +67,20 @@ static QIcon generateIcon(const QString &overlay)
|
||||
namespace QbsProjectManager {
|
||||
namespace Internal {
|
||||
|
||||
static QbsProjectNode *parentQbsProjectNode(ProjectExplorer::Node *node)
|
||||
static const QbsProjectNode *parentQbsProjectNode(const ProjectExplorer::Node *node)
|
||||
{
|
||||
for (ProjectExplorer::FolderNode *pn = node->managingProject(); pn; pn = pn->parentProjectNode()) {
|
||||
QbsProjectNode *prjNode = dynamic_cast<QbsProjectNode *>(pn);
|
||||
for (const ProjectExplorer::FolderNode *pn = node->managingProject(); pn; pn = pn->parentProjectNode()) {
|
||||
const QbsProjectNode *prjNode = dynamic_cast<const QbsProjectNode *>(pn);
|
||||
if (prjNode)
|
||||
return prjNode;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static QbsProductNode *parentQbsProductNode(ProjectExplorer::Node *node)
|
||||
static const QbsProductNode *parentQbsProductNode(const ProjectExplorer::Node *node)
|
||||
{
|
||||
for (; node; node = node->parentFolderNode()) {
|
||||
QbsProductNode *prdNode = dynamic_cast<QbsProductNode *>(node);
|
||||
const QbsProductNode *prdNode = dynamic_cast<const QbsProductNode *>(node);
|
||||
if (prdNode)
|
||||
return prdNode;
|
||||
}
|
||||
@@ -225,7 +225,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
static bool supportsNodeAction(ProjectAction action, Node *node)
|
||||
static bool supportsNodeAction(ProjectAction action, const Node *node)
|
||||
{
|
||||
const QbsProject * const project = parentQbsProjectNode(node)->project();
|
||||
if (!project->isProjectEditable())
|
||||
@@ -270,7 +270,7 @@ QbsFolderNode::QbsFolderNode(const Utils::FileName &folderPath, ProjectExplorer:
|
||||
{
|
||||
}
|
||||
|
||||
bool QbsFolderNode::supportsAction(ProjectAction action, Node *node) const
|
||||
bool QbsFolderNode::supportsAction(ProjectAction action, const Node *node) const
|
||||
{
|
||||
return supportsNodeAction(action, node);
|
||||
}
|
||||
@@ -302,7 +302,7 @@ QbsGroupNode::QbsGroupNode(const qbs::GroupData &grp, const QString &productPath
|
||||
m_qbsGroupData = grp;
|
||||
}
|
||||
|
||||
bool QbsGroupNode::supportsAction(ProjectAction action, Node *node) const
|
||||
bool QbsGroupNode::supportsAction(ProjectAction action, const Node *node) const
|
||||
{
|
||||
if (action == AddNewFile || action == AddExistingFile)
|
||||
return true;
|
||||
@@ -316,13 +316,13 @@ bool QbsGroupNode::addFiles(const QStringList &filePaths, QStringList *notAdded)
|
||||
if (!notAdded)
|
||||
notAdded = ¬AddedDummy;
|
||||
|
||||
QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
const QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
if (!prjNode || !prjNode->qbsProject().isValid()) {
|
||||
*notAdded += filePaths;
|
||||
return false;
|
||||
}
|
||||
|
||||
QbsProductNode *prdNode = parentQbsProductNode(this);
|
||||
const QbsProductNode *prdNode = parentQbsProductNode(this);
|
||||
if (!prdNode || !prdNode->qbsProductData().isValid()) {
|
||||
*notAdded += filePaths;
|
||||
return false;
|
||||
@@ -338,13 +338,13 @@ bool QbsGroupNode::removeFiles(const QStringList &filePaths, QStringList *notRem
|
||||
if (!notRemoved)
|
||||
notRemoved = ¬RemovedDummy;
|
||||
|
||||
QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
const QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
if (!prjNode || !prjNode->qbsProject().isValid()) {
|
||||
*notRemoved += filePaths;
|
||||
return false;
|
||||
}
|
||||
|
||||
QbsProductNode *prdNode = parentQbsProductNode(this);
|
||||
const QbsProductNode *prdNode = parentQbsProductNode(this);
|
||||
if (!prdNode || !prdNode->qbsProductData().isValid()) {
|
||||
*notRemoved += filePaths;
|
||||
return false;
|
||||
@@ -356,10 +356,10 @@ bool QbsGroupNode::removeFiles(const QStringList &filePaths, QStringList *notRem
|
||||
|
||||
bool QbsGroupNode::renameFile(const QString &filePath, const QString &newFilePath)
|
||||
{
|
||||
QbsProjectNode * const prjNode = parentQbsProjectNode(this);
|
||||
const QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
if (!prjNode || !prjNode->qbsProject().isValid())
|
||||
return false;
|
||||
QbsProductNode * const prdNode = parentQbsProductNode(this);
|
||||
const QbsProductNode *prdNode = parentQbsProductNode(this);
|
||||
if (!prdNode || !prdNode->qbsProductData().isValid())
|
||||
return false;
|
||||
|
||||
@@ -384,7 +384,7 @@ bool QbsProductNode::showInSimpleTree() const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QbsProductNode::supportsAction(ProjectAction action, Node *node) const
|
||||
bool QbsProductNode::supportsAction(ProjectAction action, const Node *node) const
|
||||
{
|
||||
if (action == AddNewFile || action == AddExistingFile)
|
||||
return true;
|
||||
@@ -398,7 +398,7 @@ bool QbsProductNode::addFiles(const QStringList &filePaths, QStringList *notAdde
|
||||
if (!notAdded)
|
||||
notAdded = ¬AddedDummy;
|
||||
|
||||
QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
const QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
if (!prjNode || !prjNode->qbsProject().isValid()) {
|
||||
*notAdded += filePaths;
|
||||
return false;
|
||||
@@ -418,7 +418,7 @@ bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notR
|
||||
if (!notRemoved)
|
||||
notRemoved = ¬RemovedDummy;
|
||||
|
||||
QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
const QbsProjectNode *prjNode = parentQbsProjectNode(this);
|
||||
if (!prjNode || !prjNode->qbsProject().isValid()) {
|
||||
*notRemoved += filePaths;
|
||||
return false;
|
||||
@@ -435,7 +435,7 @@ bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notR
|
||||
|
||||
bool QbsProductNode::renameFile(const QString &filePath, const QString &newFilePath)
|
||||
{
|
||||
QbsProjectNode * const prjNode = parentQbsProjectNode(this);
|
||||
const QbsProjectNode * prjNode = parentQbsProjectNode(this);
|
||||
if (!prjNode || !prjNode->qbsProject().isValid())
|
||||
return false;
|
||||
const qbs::GroupData grp = findMainQbsGroup(m_qbsProductData);
|
||||
|
||||
@@ -55,7 +55,7 @@ public:
|
||||
const QString &displayName);
|
||||
|
||||
private:
|
||||
bool supportsAction(ProjectExplorer::ProjectAction action, Node *node) const final;
|
||||
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -81,7 +81,7 @@ class QbsGroupNode : public QbsBaseProjectNode
|
||||
public:
|
||||
QbsGroupNode(const qbs::GroupData &grp, const QString &productPath);
|
||||
|
||||
bool supportsAction(ProjectExplorer::ProjectAction action, Node *node) const final;
|
||||
bool supportsAction(ProjectExplorer::ProjectAction action, const 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;
|
||||
@@ -103,7 +103,7 @@ public:
|
||||
explicit QbsProductNode(const qbs::ProductData &prd);
|
||||
|
||||
bool showInSimpleTree() const override;
|
||||
bool supportsAction(ProjectExplorer::ProjectAction action, Node *node) const final;
|
||||
bool supportsAction(ProjectExplorer::ProjectAction action, const 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;
|
||||
|
||||
@@ -304,14 +304,14 @@ void QbsProjectManagerPlugin::projectWasAdded(Project *project)
|
||||
void QbsProjectManagerPlugin::updateContextActions()
|
||||
{
|
||||
QbsProject *project = qobject_cast<Internal::QbsProject *>(ProjectTree::currentProject());
|
||||
Node *node = ProjectTree::currentNode();
|
||||
const Node *node = ProjectTree::findCurrentNode();
|
||||
bool isEnabled = !BuildManager::isBuilding(project)
|
||||
&& project && !project->isParsing()
|
||||
&& node && node->isEnabled();
|
||||
|
||||
bool isFile = project && node && (node->nodeType() == NodeType::File);
|
||||
bool isProduct = project && node && dynamic_cast<QbsProductNode *>(node);
|
||||
QbsProjectNode *subproject = dynamic_cast<QbsProjectNode *>(node);
|
||||
const bool isProduct = project && node && dynamic_cast<const QbsProductNode *>(node);
|
||||
const QbsProjectNode *subproject = dynamic_cast<const QbsProjectNode *>(node);
|
||||
bool isSubproject = project && subproject && subproject != project->rootProjectNode();
|
||||
|
||||
m_reparseQbsCtx->setEnabled(isEnabled);
|
||||
@@ -407,7 +407,7 @@ void QbsProjectManagerPlugin::projectChanged()
|
||||
|
||||
void QbsProjectManagerPlugin::buildFileContextMenu()
|
||||
{
|
||||
Node *node = ProjectTree::currentNode();
|
||||
const Node *node = ProjectTree::findCurrentNode();
|
||||
QTC_ASSERT(node, return);
|
||||
QbsProject *project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
|
||||
QTC_ASSERT(project, return);
|
||||
@@ -444,12 +444,12 @@ void QbsProjectManagerPlugin::rebuildProductContextMenu()
|
||||
|
||||
void QbsProjectManagerPlugin::runStepsForProductContextMenu(const QList<Core::Id> &stepTypes)
|
||||
{
|
||||
Node *node = ProjectTree::currentNode();
|
||||
const Node *node = ProjectTree::findCurrentNode();
|
||||
QTC_ASSERT(node, return);
|
||||
QbsProject *project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
|
||||
QTC_ASSERT(project, return);
|
||||
|
||||
const QbsProductNode * const productNode = dynamic_cast<QbsProductNode *>(node);
|
||||
const QbsProductNode * const productNode = dynamic_cast<const QbsProductNode *>(node);
|
||||
QTC_ASSERT(productNode, return);
|
||||
|
||||
runStepsForProducts(project, {QbsProject::uniqueProductName(productNode->qbsProductData())},
|
||||
@@ -509,12 +509,12 @@ void QbsProjectManagerPlugin::rebuildSubprojectContextMenu()
|
||||
|
||||
void QbsProjectManagerPlugin::runStepsForSubprojectContextMenu(const QList<Core::Id> &stepTypes)
|
||||
{
|
||||
Node *node = ProjectTree::currentNode();
|
||||
const Node *node = ProjectTree::findCurrentNode();
|
||||
QTC_ASSERT(node, return);
|
||||
QbsProject *project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
|
||||
QTC_ASSERT(project, return);
|
||||
|
||||
QbsProjectNode *subProject = dynamic_cast<QbsProjectNode *>(node);
|
||||
const QbsProjectNode *subProject = dynamic_cast<const QbsProjectNode *>(node);
|
||||
QTC_ASSERT(subProject, return);
|
||||
|
||||
QStringList toBuild;
|
||||
|
||||
Reference in New Issue
Block a user