summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@theqtcompany.com>2016-01-08 12:49:00 +0100
committerTobias Hunger <tobias.hunger@theqtcompany.com>2016-01-11 15:33:26 +0000
commitd144ea58e02468c40afd1316a08baf5b04b799a2 (patch)
tree602906691dd0ecdedef483e968e4f039a4fea253 /src
parent219b2d9c162f780f8dd03089746ef4af01233164 (diff)
downloadqt-creator-d144ea58e02468c40afd1316a08baf5b04b799a2.tar.gz
Project: Add setRootProjectNode method
Add setRootProjectNode method and a default implementation of rootProjectNode to Project. Use that in all derived classes. Change-Id: Id28cde04457a20a8963d43020785ef9d77fea57c Reviewed-by: Niels Weber <niels.weber@theqtcompany.com> Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsproject.cpp27
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsproject.h4
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.cpp19
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.h3
-rw-r--r--src/plugins/cpptools/modelmanagertesthelper.h1
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp18
-rw-r--r--src/plugins/genericprojectmanager/genericproject.h2
-rw-r--r--src/plugins/ios/iosrunconfiguration.cpp4
-rw-r--r--src/plugins/projectexplorer/project.cpp21
-rw-r--r--src/plugins/projectexplorer/project.h5
-rw-r--r--src/plugins/pythoneditor/pythoneditorplugin.cpp16
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp24
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.h7
-rw-r--r--src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp2
-rw-r--r--src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp2
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp4
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp2
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp4
-rw-r--r--src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp8
-rw-r--r--src/plugins/qmakeprojectmanager/makestep.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodes.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.cpp50
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.h5
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakestep.cpp2
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp12
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.h10
28 files changed, 101 insertions, 159 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp
index e38cffcfa7..cac3b255ac 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp
@@ -78,24 +78,18 @@ AutotoolsProject::AutotoolsProject(AutotoolsManager *manager, const QString &fil
setId(Constants::AUTOTOOLS_PROJECT_ID);
setProjectManager(manager);
setDocument(new AutotoolsProjectFile(fileName));
- m_rootNode = new AutotoolsProjectNode(projectFilePath());
+ setRootProjectNode(new AutotoolsProjectNode(projectFilePath()));
setProjectContext(Core::Context(Constants::PROJECT_CONTEXT));
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
const QFileInfo fileInfo = projectFilePath().toFileInfo();
m_projectName = fileInfo.absoluteDir().dirName();
- m_rootNode->setDisplayName(fileInfo.absoluteDir().dirName());
+ rootProjectNode()->setDisplayName(m_projectName);
}
AutotoolsProject::~AutotoolsProject()
{
- // Although ProjectExplorer::ProjectNode is a QObject, the ctor
- // does not allow to specify the parent. Manually setting the
- // parent would be possible, but we use the same approach as in the
- // other project managers and delete the node manually (TBD).
- //
- delete m_rootNode;
- m_rootNode = 0;
+ setRootProjectNode(0);
if (m_makefileParserThread != 0) {
m_makefileParserThread->wait();
@@ -114,11 +108,6 @@ QString AutotoolsProject::defaultBuildDirectory(const QString &projectPath)
return QFileInfo(projectPath).absolutePath();
}
-ProjectNode *AutotoolsProject::rootProjectNode() const
-{
- return m_rootNode;
-}
-
QStringList AutotoolsProject::files(FilesMode fileMode) const
{
Q_UNUSED(fileMode);
@@ -261,7 +250,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
// This allows to reuse existing nodes and to remove obsolete
// nodes later.
QHash<QString, Node *> nodeHash;
- foreach (Node * node, nodes(m_rootNode))
+ foreach (Node *node, nodes(rootProjectNode()))
nodeHash.insert(node->filePath().toString(), node);
// Add the sources to the filenode project tree. Sources
@@ -291,7 +280,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
parentFolder = insertFolderNode(QDir(subDir), nodeHash);
if (parentFolder == 0) {
// No node gets created for the root folder
- parentFolder = m_rootNode;
+ parentFolder = rootProjectNode();
}
}
QTC_ASSERT(parentFolder, return);
@@ -332,7 +321,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
FolderNode *grandParent = parent->parentFolderNode();
grandParent->removeFolderNodes(QList<FolderNode *>() << parent);
parent = grandParent;
- if (parent == m_rootNode)
+ if (parent == rootProjectNode())
break;
}
}
@@ -343,7 +332,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
FolderNode *AutotoolsProject::insertFolderNode(const QDir &nodeDir, QHash<QString, Node *> &nodes)
{
const Utils::FileName nodePath = Utils::FileName::fromString(nodeDir.absolutePath());
- QFileInfo rootInfo = m_rootNode->filePath().toFileInfo();
+ QFileInfo rootInfo = rootProjectNode()->filePath().toFileInfo();
const Utils::FileName rootPath = Utils::FileName::fromString(rootInfo.absolutePath());
// Do not create a folder for the root node
@@ -356,7 +345,7 @@ FolderNode *AutotoolsProject::insertFolderNode(const QDir &nodeDir, QHash<QStrin
// Get parent-folder. If it does not exist, create it recursively.
// Take care that the m_rootNode is considered as top folder.
- FolderNode *parentFolder = m_rootNode;
+ FolderNode *parentFolder = rootProjectNode();
if ((rootPath != folder->filePath()) && dir.cdUp()) {
const QString parentDir = dir.absolutePath();
if (!nodes.contains(parentDir)) {
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.h b/src/plugins/autotoolsprojectmanager/autotoolsproject.h
index d326202013..00b13f33df 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsproject.h
+++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.h
@@ -74,7 +74,6 @@ public:
~AutotoolsProject() override;
QString displayName() const override;
- ProjectExplorer::ProjectNode *rootProjectNode() const override;
QStringList files(FilesMode fileMode) const override;
static QString defaultBuildDirectory(const QString &projectPath);
QStringList buildTargets() const;
@@ -140,9 +139,6 @@ private:
/// Return value for AutotoolsProject::files()
QStringList m_files;
- /// Return value for AutotoolsProject::rootProjectNode()
- AutotoolsProjectNode *m_rootNode;
-
/// Watches project files for changes.
Utils::FileSystemWatcher *m_fileWatcher;
QStringList m_watchedFiles;
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index a99f2abb59..ea60676f95 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -88,16 +88,16 @@ using namespace Utils;
\class CMakeProject
*/
CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName) :
- m_rootNode(new CMakeProjectNode(fileName)),
m_watcher(new QFileSystemWatcher(this))
{
setId(Constants::CMAKEPROJECT_ID);
setProjectManager(manager);
setDocument(new CMakeFile(fileName));
+ setRootProjectNode(new CMakeProjectNode(fileName));
setProjectContext(Core::Context(CMakeProjectManager::Constants::PROJECTCONTEXT));
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
- m_rootNode->setDisplayName(fileName.parentDir().fileName());
+ rootProjectNode()->setDisplayName(fileName.parentDir().fileName());
connect(this, &CMakeProject::buildTargetsChanged, this, &CMakeProject::updateRunConfigurations);
connect(m_watcher, &QFileSystemWatcher::fileChanged, this, &CMakeProject::fileChanged);
@@ -106,7 +106,6 @@ CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName) :
CMakeProject::~CMakeProject()
{
m_codeModelFuture.cancel();
- delete m_rootNode;
}
void CMakeProject::fileChanged(const QString &fileName)
@@ -265,7 +264,7 @@ bool CMakeProject::parseCMakeLists()
Kit *k = activeTarget()->kit();
// setFolderName
- m_rootNode->setDisplayName(QFileInfo(cbpFile).completeBaseName());
+ rootProjectNode()->setDisplayName(QFileInfo(cbpFile).completeBaseName());
CMakeCbpParser cbpparser;
// Parsing
//qDebug()<<"Parsing file "<<cbpFile;
@@ -282,7 +281,7 @@ bool CMakeProject::parseCMakeLists()
// how can we ensure that it is completely written?
m_watcher->addPath(cbpFile);
- m_rootNode->setDisplayName(cbpparser.projectName());
+ rootProjectNode()->setDisplayName(cbpparser.projectName());
//qDebug()<<"Building Tree";
QList<ProjectExplorer::FileNode *> fileList = cbpparser.fileList();
@@ -306,7 +305,7 @@ bool CMakeProject::parseCMakeLists()
m_files.append(fn->filePath().toString());
m_files.sort();
- buildTree(m_rootNode, fileList);
+ buildTree(static_cast<CMakeProjectNode *>(rootProjectNode()), fileList);
//qDebug()<<"Adding Targets";
m_buildTargets = cbpparser.buildTargets();
@@ -506,15 +505,9 @@ ProjectExplorer::FolderNode *CMakeProject::findOrCreateFolder(CMakeProjectNode *
QString CMakeProject::displayName() const
{
- return m_rootNode->displayName();
+ return rootProjectNode()->displayName();
}
-ProjectExplorer::ProjectNode *CMakeProject::rootProjectNode() const
-{
- return m_rootNode;
-}
-
-
QStringList CMakeProject::files(FilesMode fileMode) const
{
Q_UNUSED(fileMode)
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h
index 91be361100..b2477e8b54 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.h
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.h
@@ -100,8 +100,6 @@ public:
QString displayName() const override;
- ProjectExplorer::ProjectNode *rootProjectNode() const override;
-
QStringList files(FilesMode fileMode) const override;
QStringList buildTargetTitles(bool runnable = false) const;
QList<CMakeBuildTarget> buildTargets() const;
@@ -149,7 +147,6 @@ private:
ProjectExplorer::Target *m_activeTarget = 0;
// TODO probably need a CMake specific node structure
- Internal::CMakeProjectNode *m_rootNode;
QStringList m_files;
QList<CMakeBuildTarget> m_buildTargets;
QFileSystemWatcher *m_watcher;
diff --git a/src/plugins/cpptools/modelmanagertesthelper.h b/src/plugins/cpptools/modelmanagertesthelper.h
index 5b85eedc81..28aa6f3292 100644
--- a/src/plugins/cpptools/modelmanagertesthelper.h
+++ b/src/plugins/cpptools/modelmanagertesthelper.h
@@ -50,7 +50,6 @@ public:
~TestProject() override;
QString displayName() const override { return m_name; }
- ProjectExplorer::ProjectNode *rootProjectNode() const override { return 0; }
QStringList files(FilesMode fileMode) const override { Q_UNUSED(fileMode); return QStringList(); }
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 1e8667039b..b527b36f87 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -72,6 +72,7 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
setId(Constants::GENERICPROJECT_ID);
setProjectManager(manager);
setDocument(new GenericProjectFile(this, fileName, GenericProject::Everything));
+ setRootProjectNode(new GenericProjectNode(this));
setProjectContext(Context(GenericProjectManager::Constants::PROJECTCONTEXT));
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
@@ -92,8 +93,6 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
DocumentManager::addDocument(m_includesIDocument);
DocumentManager::addDocument(m_configIDocument);
- m_rootNode = new GenericProjectNode(this);
-
FileNode *projectFilesNode = new FileNode(Utils::FileName::fromString(m_filesFileName),
ProjectFileType,
/* generated = */ false);
@@ -106,10 +105,8 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
ProjectFileType,
/* generated = */ false);
- m_rootNode->addFileNodes(QList<FileNode *>()
- << projectFilesNode
- << projectIncludesNode
- << projectConfigNode);
+ rootProjectNode()->addFileNodes(QList<FileNode *>() << projectFilesNode
+ << projectIncludesNode << projectConfigNode);
projectManager()->registerProject(this);
}
@@ -118,8 +115,6 @@ GenericProject::~GenericProject()
{
m_codeModelFuture.cancel();
projectManager()->unregisterProject(this);
-
- delete m_rootNode;
}
QString GenericProject::filesFileName() const
@@ -281,7 +276,7 @@ void GenericProject::refresh(RefreshOptions options)
parseProject(options);
if (options & Files)
- m_rootNode->refresh(oldFileList);
+ static_cast<GenericProjectNode *>(rootProjectNode())->refresh(oldFileList);
refreshCppCodeModel();
}
@@ -392,11 +387,6 @@ Manager *GenericProject::projectManager() const
return static_cast<Manager *>(Project::projectManager());
}
-GenericProjectNode *GenericProject::rootProjectNode() const
-{
- return m_rootNode;
-}
-
QStringList GenericProject::files(FilesMode fileMode) const
{
Q_UNUSED(fileMode);
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index f2cc2171f4..c0813c338d 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -63,7 +63,6 @@ public:
QString displayName() const override;
Manager *projectManager() const override;
- GenericProjectNode *rootProjectNode() const override;
QStringList files(FilesMode fileMode) const override;
QStringList buildTargets() const;
@@ -109,7 +108,6 @@ private:
QStringList m_rawProjectIncludePaths;
QStringList m_projectIncludePaths;
- GenericProjectNode *m_rootNode;
QFuture<void> m_codeModelFuture;
};
diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp
index a37ada5c79..80920bba57 100644
--- a/src/plugins/ios/iosrunconfiguration.cpp
+++ b/src/plugins/ios/iosrunconfiguration.cpp
@@ -207,7 +207,7 @@ QString IosRunConfiguration::applicationName() const
QmakeProject *pro = qobject_cast<QmakeProject *>(target()->project());
const QmakeProFileNode *node = 0;
if (pro)
- node = pro->rootQmakeProjectNode();
+ node = pro->rootProjectNode();
if (node)
node = node->findProFileFor(profilePath());
if (node) {
@@ -233,7 +233,7 @@ FileName IosRunConfiguration::bundleDirectory() const
QmakeProject *pro = qobject_cast<QmakeProject *>(target()->project());
const QmakeProFileNode *node = 0;
if (pro)
- node = pro->rootQmakeProjectNode();
+ node = pro->rootProjectNode();
if (node)
node = node->findProFileFor(profilePath());
if (node) {
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 5143a03b20..6fb3857a38 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -36,6 +36,7 @@
#include "editorconfiguration.h"
#include "kit.h"
#include "projectexplorer.h"
+#include "projectnodes.h"
#include "target.h"
#include "session.h"
#include "settingsaccessor.h"
@@ -95,6 +96,7 @@ public:
Core::Id m_id;
Core::IDocument *m_document = 0;
IProjectManager *m_manager = 0;
+ ProjectNode *m_rootProjectNode = 0;
QList<Target *> m_targets;
Target *m_activeTarget = 0;
EditorConfiguration m_editorConfiguration;
@@ -111,8 +113,13 @@ public:
ProjectPrivate::~ProjectPrivate()
{
- delete m_accessor;
+ // Make sure our root node is 0 when deleting
+ ProjectNode *oldNode = m_rootProjectNode;
+ m_rootProjectNode = 0;
+ delete oldNode;
+
delete m_document;
+ delete m_accessor;
}
Project::Project() : d(new ProjectPrivate)
@@ -432,6 +439,13 @@ void Project::setProjectManager(IProjectManager *manager)
d->m_manager = manager;
}
+void Project::setRootProjectNode(ProjectNode *root)
+{
+ ProjectNode *oldNode = d->m_rootProjectNode;
+ d->m_rootProjectNode = root;
+ delete oldNode;
+}
+
Target *Project::restoreTarget(const QVariantMap &data)
{
Core::Id id = idFromMap(data);
@@ -522,6 +536,11 @@ IProjectManager *Project::projectManager() const
return d->m_manager;
}
+ProjectNode *Project::rootProjectNode() const
+{
+ return d->m_rootProjectNode;
+}
+
Project::RestoreResult Project::fromMap(const QVariantMap &map, QString *errorMessage)
{
Q_UNUSED(errorMessage);
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index e5322b44a1..92c440c5bc 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -88,6 +88,8 @@ public:
virtual IProjectManager *projectManager() const;
+ virtual ProjectNode *rootProjectNode() const;
+
bool hasActiveBuildSettings() const;
// EditorConfiguration:
@@ -112,8 +114,6 @@ public:
enum class RestoreResult { Ok, Error, UserAbort };
RestoreResult restoreSettings(QString *errorMessage);
- virtual ProjectNode *rootProjectNode() const = 0;
-
enum FilesMode { AllFiles, ExcludeGeneratedFiles };
virtual QStringList files(FilesMode fileMode) const = 0;
// TODO: generalize to find source(s) of generated files?
@@ -175,6 +175,7 @@ protected:
void setId(Core::Id id);
void setDocument(Core::IDocument *doc); // takes ownership!
void setProjectManager(IProjectManager *manager);
+ void setRootProjectNode(ProjectNode *root); // takes ownership!
void setProjectContext(Core::Context context);
void setProjectLanguages(Core::Context language);
void addProjectLanguage(Core::Id id);
diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp
index 226d7e558b..ec6854bb6d 100644
--- a/src/plugins/pythoneditor/pythoneditorplugin.cpp
+++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp
@@ -251,7 +251,6 @@ public:
QString displayName() const override { return m_projectName; }
PythonProjectManager *projectManager() const override;
- ProjectNode *rootProjectNode() const override;
QStringList files(FilesMode) const override { return m_files; }
QStringList files() const { return m_files; }
@@ -274,8 +273,6 @@ private:
QStringList m_rawFileList;
QStringList m_files;
QHash<QString, QString> m_rawListEntries;
-
- ProjectNode *m_rootNode;
};
class PythonProjectFile : public Core::IDocument
@@ -620,6 +617,7 @@ PythonProject::PythonProject(PythonProjectManager *manager, const QString &fileN
setProjectManager(manager);
setDocument(new PythonProjectFile(this, fileName));
DocumentManager::addDocument(document());
+ setRootProjectNode(new PythonProjectNode(this));
setProjectContext(Context(PythonProjectContext));
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
@@ -627,7 +625,6 @@ PythonProject::PythonProject(PythonProjectManager *manager, const QString &fileN
QFileInfo fileInfo = projectFilePath().toFileInfo();
m_projectName = fileInfo.completeBaseName();
- m_rootNode = new PythonProjectNode(this);
projectManager()->registerProject(this);
}
@@ -635,8 +632,6 @@ PythonProject::PythonProject(PythonProjectManager *manager, const QString &fileN
PythonProject::~PythonProject()
{
projectManager()->unregisterProject(this);
-
- delete m_rootNode;
}
PythonProjectManager *PythonProject::projectManager() const
@@ -775,7 +770,7 @@ private:
void PythonProject::refresh()
{
- m_rootNode->removeFileNodes(m_rootNode->fileNodes());
+ rootProjectNode()->removeFileNodes(rootProjectNode()->fileNodes());
parseProject();
QDir baseDir(projectDirectory().toString());
@@ -786,7 +781,7 @@ void PythonProject::refresh()
fileNodes.append(new PythonFileNode(FileName::fromString(file), displayName));
}
- m_rootNode->addFileNodes(fileNodes);
+ rootProjectNode()->addFileNodes(fileNodes);
}
/**
@@ -844,11 +839,6 @@ QStringList PythonProject::processEntries(const QStringList &paths,
return absolutePaths;
}
-ProjectNode *PythonProject::rootProjectNode() const
-{
- return m_rootNode;
-}
-
Project::RestoreResult PythonProject::fromMap(const QVariantMap &map, QString *errorMessage)
{
Project::RestoreResult res = Project::fromMap(map, errorMessage);
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 9d870e80a3..065cfa3109 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -101,7 +101,6 @@ static const char CONFIG_PRECOMPILEDHEADER[] = "precompiledHeader";
QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
m_projectName(QFileInfo(fileName).completeBaseName()),
- m_rootProjectNode(0),
m_qbsProjectParser(0),
m_qbsUpdateFutureInterface(0),
m_parsingScheduled(false),
@@ -112,9 +111,9 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
setId(Constants::PROJECT_ID);
setProjectManager(manager);
-
setDocument(new QbsProjectFile(this, fileName));
DocumentManager::addDocument(document());
+ setRootProjectNode(new QbsRootProjectNode(this));
setProjectContext(Context(Constants::PROJECT_ID));
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
@@ -126,9 +125,6 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
connect(this, SIGNAL(environmentChanged()), this, SLOT(delayParsing()));
connect(&m_parsingDelay, SIGNAL(timeout()), this, SLOT(startParsing()));
-
- // NOTE: QbsProjectNode does not use this as a parent!
- m_rootProjectNode = new QbsRootProjectNode(this); // needs documents to be initialized!
}
QbsProject::~QbsProject()
@@ -141,12 +137,6 @@ QbsProject::~QbsProject()
delete m_qbsUpdateFutureInterface;
m_qbsUpdateFutureInterface = 0;
}
-
- // Deleting the root node triggers a few things, make sure rootProjectNode
- // returns 0 already
- QbsProjectNode *root = m_rootProjectNode;
- m_rootProjectNode = 0;
- delete root;
}
QString QbsProject::displayName() const
@@ -159,9 +149,9 @@ QbsManager *QbsProject::projectManager() const
return static_cast<QbsManager *>(Project::projectManager());
}
-ProjectNode *QbsProject::rootProjectNode() const
+QbsRootProjectNode *QbsProject::rootProjectNode() const
{
- return m_rootProjectNode;
+ return static_cast<QbsRootProjectNode *>(Project::rootProjectNode());
}
static void collectFilesForProject(const qbs::ProjectData &project, QSet<QString> &result)
@@ -286,7 +276,7 @@ bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList &
m_projectData = m_qbsProject.projectData();
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData),
allPaths, QFileInfo(productFilePath).absolutePath(), true);
- m_rootProjectNode->update();
+ rootProjectNode()->update();
emit fileListChanged();
}
return notAdded->isEmpty();
@@ -315,7 +305,7 @@ bool QbsProject::removeFilesFromProduct(QbsBaseProjectNode *node, const QStringL
m_projectData = m_qbsProject.projectData();
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData), allPaths,
QFileInfo(productFilePath).absolutePath(), true);
- m_rootProjectNode->update();
+ rootProjectNode()->update();
emit fileListChanged();
}
return notRemoved->isEmpty();
@@ -454,7 +444,7 @@ void QbsProject::handleQbsParsingDone(bool success)
if (projectData != m_projectData) {
m_projectData = projectData;
- m_rootProjectNode->update();
+ rootProjectNode()->update();
updateDocuments(m_qbsProject.isValid()
? m_qbsProject.buildSystemFiles() : QSet<QString>() << projectFilePath().toString());
@@ -767,7 +757,7 @@ void QbsProject::updateCppCodeModel()
foreach (const QString &file, grp.allFilePaths()) {
if (file.endsWith(QLatin1String(".ui"))) {
- QStringList generated = m_rootProjectNode->qbsProject()
+ QStringList generated = rootProjectNode()->qbsProject()
.generatedFiles(prd, file, QStringList(QLatin1String("hpp")));
if (generated.count() == 1)
uiFiles.insert(file, generated.at(0));
diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h
index 3524ab0b7a..5380cc8861 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.h
+++ b/src/plugins/qbsprojectmanager/qbsproject.h
@@ -33,6 +33,8 @@
#include "qbsprojectmanager.h"
+#include "qbsnodes.h"
+
#include <cpptools/cppprojects.h>
#include <projectexplorer/project.h>
@@ -53,7 +55,6 @@ namespace QbsProjectManager {
namespace Internal {
class QbsBaseProjectNode;
class QbsProjectNode;
-class QbsRootProjectNode;
class QbsProjectParser;
class QbsBuildConfiguration;
@@ -67,8 +68,7 @@ public:
QString displayName() const override;
QbsManager *projectManager() const override;
-
- ProjectExplorer::ProjectNode *rootProjectNode() const override;
+ QbsRootProjectNode *rootProjectNode() const override;
QStringList files(FilesMode fileMode) const override;
@@ -149,7 +149,6 @@ private:
qbs::Project m_qbsProject;
qbs::ProjectData m_projectData;
QSet<Core::IDocument *> m_qbsDocuments;
- QbsRootProjectNode *m_rootProjectNode;
QbsProjectParser *m_qbsProjectParser;
diff --git a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp b/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp
index 1e94cf0b5b..af7b8c3d59 100644
--- a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp
+++ b/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp
@@ -123,7 +123,7 @@ QmakeProjectManager::QmakeProFileNode *AndroidExtraLibraryListModel::activeNode(
if (!qarc)
return 0;
auto project = static_cast<QmakeProject *>(m_target->project());
- return project->rootQmakeProjectNode()->findProFileFor(qarc->proFilePath());
+ return project->rootProjectNode()->findProFileFor(qarc->proFilePath());
}
void AndroidExtraLibraryListModel::proFileUpdated(QmakeProjectManager::QmakeProFileNode *node)
diff --git a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp b/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp
index 2ca4ab4449..c67011b1b6 100644
--- a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp
+++ b/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp
@@ -211,7 +211,7 @@ CreateAndroidManifestWizard::CreateAndroidManifestWizard(ProjectExplorer::Target
const QmakeProFileNode *currentRunNode = 0;
ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration();
if (auto qrc = qobject_cast<QmakeAndroidRunConfiguration *>(rc))
- currentRunNode = project->rootQmakeProjectNode()->findProFileFor(qrc->proFilePath());
+ currentRunNode = project->rootProjectNode()->findProFileFor(qrc->proFilePath());
if (nodes.isEmpty()) {
// oh uhm can't create anything
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
index 7c18c4d235..8037972399 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
@@ -158,7 +158,7 @@ Utils::FileName QmakeAndroidBuildApkStep::androidPackageSourceDir() const
{
QmakeProjectManager::QmakeProject *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
const QmakeProjectManager::QmakeProFileNode *node
- = pro->rootQmakeProjectNode()->findProFileFor(proFilePathForInputFile());
+ = pro->rootProjectNode()->findProFileFor(proFilePathForInputFile());
if (!node)
return Utils::FileName();
return Utils::FileName::fromString(node->singleVariableValue(QmakeProjectManager::AndroidPackageSourceDir));
@@ -199,7 +199,7 @@ bool QmakeAndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
QString outputDir = bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString();
const auto *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
- const QmakeProjectManager::QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(proFilePathForInputFile());
+ const QmakeProjectManager::QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(proFilePathForInputFile());
m_skipBuilding = !node;
if (m_skipBuilding)
return true;
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp
index 0eaaad3df5..e7c919aeb4 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp
@@ -112,7 +112,7 @@ QVariantMap QmakeAndroidRunConfiguration::toMap() const
QString QmakeAndroidRunConfiguration::defaultDisplayName()
{
auto project = static_cast<QmakeProject *>(target()->project());
- const QmakeProjectManager::QmakeProFileNode *root = project->rootQmakeProjectNode();
+ const QmakeProjectManager::QmakeProFileNode *root = project->rootProjectNode();
if (root) {
const QmakeProjectManager::QmakeProFileNode *node = root->findProFileFor(m_proFilePath);
if (node) // should always be found
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
index 23b190c2c1..0ce2dc46f7 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
@@ -114,7 +114,7 @@ Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(ProjectExplorer::Targ
return Utils::FileName();
const QmakeProFileNode *node =
- pro->rootQmakeProjectNode()->findProFileFor(buildApkStep->proFilePathForInputFile());
+ pro->rootProjectNode()->findProFileFor(buildApkStep->proFilePathForInputFile());
if (!node) // should never happen
return Utils::FileName();
@@ -138,7 +138,7 @@ Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::T
if (auto qrc = qobject_cast<QmakeAndroidRunConfiguration *>(rc)) {
Utils::FileName proFilePath = qrc->proFilePath();
const auto project = static_cast<QmakeProjectManager::QmakeProject *>(target->project());
- const QmakeProFileNode *node = project->rootQmakeProjectNode()->findProFileFor(proFilePath);
+ const QmakeProFileNode *node = project->rootProjectNode()->findProFileFor(proFilePath);
if (node) {
QString packageSource = node->singleVariableValue(AndroidPackageSourceDir);
if (!packageSource.isEmpty()) {
diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
index 3523f31da1..73d77b40f8 100644
--- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
@@ -352,7 +352,7 @@ bool DesktopQmakeRunConfiguration::fromMap(const QVariantMap &map)
QString DesktopQmakeRunConfiguration::executable() const
{
QmakeProject *pro = static_cast<QmakeProject *>(target()->project());
- const QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(m_proFilePath);
+ const QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(m_proFilePath);
return extractWorkingDirAndExecutable(node).second;
}
@@ -399,7 +399,7 @@ QString DesktopQmakeRunConfiguration::workingDirectory() const
QString DesktopQmakeRunConfiguration::baseWorkingDirectory() const
{
QmakeProject *pro = static_cast<QmakeProject *>(target()->project());
- const QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(m_proFilePath);
+ const QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(m_proFilePath);
return extractWorkingDirAndExecutable(node).first;
}
@@ -416,7 +416,7 @@ void DesktopQmakeRunConfiguration::addToBaseEnvironment(Environment &env) const
// The user could be linking to a library found via a -L/some/dir switch
// to find those libraries while actually running we explicitly prepend those
// dirs to the library search path
- const QmakeProFileNode *node = static_cast<QmakeProject *>(target()->project())->rootQmakeProjectNode()->findProFileFor(m_proFilePath);
+ const QmakeProFileNode *node = static_cast<QmakeProject *>(target()->project())->rootProjectNode()->findProFileFor(m_proFilePath);
if (m_isUsingLibrarySearchPath && node) {
const QStringList libDirectories = node->variableValue(LibDirectoriesVar);
if (!libDirectories.isEmpty()) {
@@ -444,7 +444,7 @@ Utils::FileName DesktopQmakeRunConfiguration::proFilePath() const
QString DesktopQmakeRunConfiguration::defaultDisplayName()
{
auto project = static_cast<QmakeProject *>(target()->project());
- const QmakeProFileNode *root = project->rootQmakeProjectNode();
+ const QmakeProFileNode *root = project->rootProjectNode();
if (root) {
const QmakeProFileNode *node = root->findProFileFor(m_proFilePath);
if (node) // should always be found
diff --git a/src/plugins/qmakeprojectmanager/makestep.cpp b/src/plugins/qmakeprojectmanager/makestep.cpp
index f36d9d0bbf..b0ba9fb4f4 100644
--- a/src/plugins/qmakeprojectmanager/makestep.cpp
+++ b/src/plugins/qmakeprojectmanager/makestep.cpp
@@ -264,7 +264,7 @@ bool MakeStep::init(QList<const BuildStep *> &earlierSteps)
appendOutputParser(new QMakeParser); // make may cause qmake to be run, add last to make sure
// it has a low priority.
- m_scriptTarget = (static_cast<QmakeProject *>(bc->target()->project())->rootQmakeProjectNode()->projectType() == ScriptTemplate);
+ m_scriptTarget = (static_cast<QmakeProject *>(bc->target()->project())->rootProjectNode()->projectType() == ScriptTemplate);
return AbstractProcessStep::init(earlierSteps);
}
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index 5afcbf2d70..e6e63adacb 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -238,7 +238,7 @@ void QmakeBuildConfiguration::setBuildDirectory(const FileName &directory)
QString QmakeBuildConfiguration::makefile() const
{
- return static_cast<QmakeProject *>(target()->project())->rootQmakeProjectNode()->makefile();
+ return static_cast<QmakeProject *>(target()->project())->rootProjectNode()->makefile();
}
BaseQtVersion::QmakeBuildConfigs QmakeBuildConfiguration::qmakeBuildConfiguration() const
diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
index 126c3c7aa4..64a49cc3c3 100644
--- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
@@ -2538,7 +2538,7 @@ QString QmakeProFileNode::sourceDir() const
QString QmakeProFileNode::buildDir(QmakeBuildConfiguration *bc) const
{
- const QDir srcDirRoot = m_project->rootQmakeProjectNode()->sourceDir();
+ const QDir srcDirRoot = m_project->rootProjectNode()->sourceDir();
const QString relativeDir = srcDirRoot.relativeFilePath(m_projectDir);
if (!bc && m_project->activeTarget())
bc = static_cast<QmakeBuildConfiguration *>(m_project->activeTarget()->activeBuildConfiguration());
diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
index 7c3019ea83..3eca1333fb 100644
--- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
@@ -337,11 +337,6 @@ QmakeProject::~QmakeProject()
projectManager()->unregisterProject(this);
delete m_projectFiles;
m_cancelEvaluate = true;
- // Deleting the root node triggers a few things, make sure rootProjectNode
- // returns 0 already
- QmakeProFileNode *root = m_rootProjectNode;
- m_rootProjectNode = 0;
- delete root;
Q_ASSERT(m_qmakeGlobalsRefCnt == 0);
delete m_qmakeVfs;
}
@@ -349,7 +344,7 @@ QmakeProject::~QmakeProject()
void QmakeProject::updateFileList()
{
QmakeProjectFiles newFiles;
- ProjectFilesVisitor::findProjectFiles(m_rootProjectNode, &newFiles);
+ ProjectFilesVisitor::findProjectFiles(rootProjectNode(), &newFiles);
if (newFiles != *m_projectFiles) {
*m_projectFiles = newFiles;
emit fileListChanged();
@@ -376,7 +371,7 @@ Project::RestoreResult QmakeProject::fromMap(const QVariantMap &map, QString *er
projectManager()->registerProject(this);
- m_rootProjectNode = new QmakeProFileNode(this, projectFilePath());
+ setRootProjectNode(new QmakeProFileNode(this, projectFilePath()));
// On active buildconfiguration changes, reevaluate the .pro files
m_activeTarget = activeTarget();
@@ -702,7 +697,7 @@ void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode::AsyncUpdateDelay delay)
m_cancelEvaluate = true;
m_asyncUpdateState = AsyncFullUpdatePending;
enableActiveQmakeBuildConfiguration(activeTarget(), false);
- m_rootProjectNode->setParseInProgressRecursive(true);
+ rootProjectNode()->setParseInProgressRecursive(true);
return;
}
@@ -710,7 +705,7 @@ void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode::AsyncUpdateDelay delay)
qDebug()<<" starting timer for full update, setting state to full update pending";
m_partialEvaluate.clear();
enableActiveQmakeBuildConfiguration(activeTarget(), false);
- m_rootProjectNode->setParseInProgressRecursive(true);
+ rootProjectNode()->setParseInProgressRecursive(true);
m_asyncUpdateState = AsyncFullUpdatePending;
// Cancel running code model update
@@ -805,7 +800,7 @@ void QmakeProject::asyncUpdate()
if (m_asyncUpdateState == AsyncFullUpdatePending) {
if (debug)
qDebug()<<" full update, starting with root node";
- m_rootProjectNode->asyncUpdate();
+ rootProjectNode()->asyncUpdate();
} else {
if (debug)
qDebug()<<" partial update,"<<m_partialEvaluate.size()<<"nodes to update";
@@ -883,8 +878,8 @@ QString QmakeProject::generatedUiHeader(const FileName &formFile) const
{
// Look in sub-profiles as SessionManager::projectForFile returns
// the top-level project only.
- if (m_rootProjectNode)
- if (const QmakeProFileNode *pro = proFileNodeOf(m_rootProjectNode, FormType, formFile))
+ if (rootProjectNode())
+ if (const QmakeProFileNode *pro = proFileNodeOf(rootProjectNode(), FormType, formFile))
return QmakeProFileNode::uiHeaderFile(
pro->uiDirectory(Utils::FileName::fromString(pro->buildDir())),
formFile, pro->singleVariableValue(QmakeVariable::UiHeaderExtensionVar));
@@ -927,14 +922,14 @@ QtSupport::ProFileReader *QmakeProject::createProFileReader(const QmakeProFileNo
m_qmakeGlobals->qmake_abslocation = QDir::cleanPath(qtVersion->qmakeCommand().toString());
m_qmakeGlobals->setProperties(qtVersion->versionInfo());
}
- m_qmakeGlobals->setDirectories(m_rootProjectNode->sourceDir(), m_rootProjectNode->buildDir());
+ m_qmakeGlobals->setDirectories(rootProjectNode()->sourceDir(), rootProjectNode()->buildDir());
m_qmakeGlobals->sysroot = systemRoot;
Environment::const_iterator eit = env.constBegin(), eend = env.constEnd();
for (; eit != eend; ++eit)
m_qmakeGlobals->environment.insert(env.key(eit), env.value(eit));
- m_qmakeGlobals->setCommandLineArguments(m_rootProjectNode->buildDir(), qmakeArgs);
+ m_qmakeGlobals->setCommandLineArguments(rootProjectNode()->buildDir(), qmakeArgs);
QtSupport::ProFileCacheManager::instance()->incRefCount();
@@ -986,29 +981,24 @@ void QmakeProject::destroyProFileReader(QtSupport::ProFileReader *reader)
}
}
-ProjectNode *QmakeProject::rootProjectNode() const
+QmakeProFileNode *QmakeProject::rootProjectNode() const
{
- return m_rootProjectNode;
-}
-
-QmakeProFileNode *QmakeProject::rootQmakeProjectNode() const
-{
- return m_rootProjectNode;
+ return static_cast<QmakeProFileNode *>(Project::rootProjectNode());
}
bool QmakeProject::validParse(const FileName &proFilePath) const
{
- if (!m_rootProjectNode)
+ if (!rootProjectNode())
return false;
- const QmakeProFileNode *node = m_rootProjectNode->findProFileFor(proFilePath);
+ const QmakeProFileNode *node = rootProjectNode()->findProFileFor(proFilePath);
return node && node->validParse();
}
bool QmakeProject::parseInProgress(const FileName &proFilePath) const
{
- if (!m_rootProjectNode)
+ if (!rootProjectNode())
return false;
- const QmakeProFileNode *node = m_rootProjectNode->findProFileFor(proFilePath);
+ const QmakeProFileNode *node = rootProjectNode()->findProFileFor(proFilePath);
return node && node->parseInProgress();
}
@@ -1035,7 +1025,7 @@ QList<QmakeProFileNode *> QmakeProject::allProFiles(const QList<QmakeProjectType
QList<QmakeProFileNode *> list;
if (!rootProjectNode())
return list;
- collectAllProFiles(list, rootQmakeProjectNode(), parse, projectTypes);
+ collectAllProFiles(list, rootProjectNode(), parse, projectTypes);
return list;
}
@@ -1116,7 +1106,7 @@ void QmakeProject::notifyChanged(const FileName &name)
{
if (files(QmakeProject::ExcludeGeneratedFiles).contains(name.toString())) {
QList<QmakeProFileNode *> list;
- findProFile(name, rootQmakeProjectNode(), list);
+ findProFile(name, rootProjectNode(), list);
foreach (QmakeProFileNode *node, list) {
QtSupport::ProFileCacheManager::instance()->discardFile(name.toString());
node->scheduleUpdate(QmakeProFileNode::ParseNow);
@@ -1357,10 +1347,10 @@ QString QmakeProject::disabledReasonForRunConfiguration(const FileName &proFileP
return tr("The .pro file \"%1\" does not exist.")
.arg(proFilePath.fileName());
- if (!m_rootProjectNode) // Shutting down
+ if (!rootProjectNode()) // Shutting down
return QString();
- if (!m_rootProjectNode->findProFileFor(proFilePath))
+ if (!rootProjectNode()->findProFileFor(proFilePath))
return tr("The .pro file \"%1\" is not part of the project.")
.arg(proFilePath.fileName());
@@ -1381,7 +1371,7 @@ void QmakeProject::updateBuildSystemData()
Target * const target = activeTarget();
if (!target)
return;
- const QmakeProFileNode * const rootNode = rootQmakeProjectNode();
+ const QmakeProFileNode * const rootNode = rootProjectNode();
if (!rootNode || rootNode->parseInProgress())
return;
diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h
index 202f72b7cc..ac7bd8652c 100644
--- a/src/plugins/qmakeprojectmanager/qmakeproject.h
+++ b/src/plugins/qmakeprojectmanager/qmakeproject.h
@@ -76,8 +76,7 @@ public:
bool supportsKit(ProjectExplorer::Kit *k, QString *errorMesage) const override;
- ProjectExplorer::ProjectNode *rootProjectNode() const override;
- QmakeProFileNode *rootQmakeProjectNode() const;
+ QmakeProFileNode *rootProjectNode() const override;
bool validParse(const Utils::FileName &proFilePath) const;
bool parseInProgress(const Utils::FileName &proFilePath) const;
@@ -180,8 +179,6 @@ private:
void startAsyncTimer(QmakeProFileNode::AsyncUpdateDelay delay);
bool matchesKit(const ProjectExplorer::Kit *kit);
- QmakeProFileNode *m_rootProjectNode = 0;
-
// Current configuration
QString m_oldQtIncludePath;
QString m_oldQtLibsPath;
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
index 3ac0858f17..71e3240c96 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
@@ -207,7 +207,7 @@ void QmakeProjectConfigWidget::updateProblemLabel()
}
QmakeProject *p = static_cast<QmakeProject *>(m_buildConfiguration->target()->project());
- if (p->rootQmakeProjectNode()->parseInProgress() || !p->rootQmakeProjectNode()->validParse()) {
+ if (p->rootProjectNode()->parseInProgress() || !p->rootProjectNode()->validParse()) {
setProblemLabel(QString());
return;
}
diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp
index cdddbfd3c1..37a5566b3c 100644
--- a/src/plugins/qmakeprojectmanager/qmakestep.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp
@@ -227,7 +227,7 @@ bool QMakeStep::init(QList<const BuildStep *> &earlierSteps)
setOutputParser(new QMakeParser);
- QmakeProFileNode *node = static_cast<QmakeProject *>(qt4bc->target()->project())->rootQmakeProjectNode();
+ QmakeProFileNode *node = static_cast<QmakeProject *>(qt4bc->target()->project())->rootProjectNode();
if (qt4bc->subNodeBuild())
node = qt4bc->subNodeBuild();
QString proFile = node->filePath().toString();
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index ba60ebed9f..89d194d722 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -65,14 +65,13 @@ QmlProject::QmlProject(Internal::Manager *manager, const Utils::FileName &fileNa
setProjectManager(manager);
setDocument(new Internal::QmlProjectFile(this, fileName));
DocumentManager::addDocument(document(), true);
+ setRootProjectNode(new Internal::QmlProjectNode(this));
setProjectContext(Context(QmlProjectManager::Constants::PROJECTCONTEXT));
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_QMLJS));
m_projectName = projectFilePath().toFileInfo().completeBaseName();
- m_rootNode = new Internal::QmlProjectNode(this);
-
projectManager()->registerProject(this);
}
@@ -81,7 +80,6 @@ QmlProject::~QmlProject()
projectManager()->unregisterProject(this);
delete m_projectItem.data();
- delete m_rootNode;
}
void QmlProject::addedTarget(Target *target)
@@ -177,7 +175,7 @@ void QmlProject::parseProject(RefreshOptions options)
}
}
}
- m_rootNode->refresh();
+ rootProjectNode()->refresh();
}
if (options & Configuration) {
@@ -193,7 +191,7 @@ void QmlProject::refresh(RefreshOptions options)
parseProject(options);
if (options & Files)
- m_rootNode->refresh();
+ rootProjectNode()->refresh();
if (!modelManager())
return;
@@ -323,9 +321,9 @@ bool QmlProject::supportsKit(Kit *k, QString *errorMessage) const
return true;
}
-ProjectNode *QmlProject::rootProjectNode() const
+Internal::QmlProjectNode *QmlProject::rootProjectNode() const
{
- return m_rootNode;
+ return static_cast<Internal::QmlProjectNode *>(Project::rootProjectNode());
}
QStringList QmlProject::files(FilesMode) const
diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h
index d499a8aea9..98d06e1767 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.h
+++ b/src/plugins/qmlprojectmanager/qmlproject.h
@@ -34,6 +34,7 @@
#include "qmlprojectmanager_global.h"
#include "qmlprojectmanager.h"
+#include "qmlprojectnodes.h"
#include <projectexplorer/project.h>
@@ -47,10 +48,7 @@ namespace QmlProjectManager {
class QmlProjectItem;
-namespace Internal {
-class QmlProjectFile;
-class QmlProjectNode;
-} // namespace Internal
+namespace Internal { class QmlProjectFile; }
class QMLPROJECTMANAGER_EXPORT QmlProject : public ProjectExplorer::Project
{
@@ -67,7 +65,7 @@ public:
bool supportsKit(ProjectExplorer::Kit *k, QString *errorMessage) const override;
- ProjectExplorer::ProjectNode *rootProjectNode() const override;
+ Internal::QmlProjectNode *rootProjectNode() const override;
QStringList files(FilesMode fileMode) const override;
bool validProjectFile() const;
@@ -118,8 +116,6 @@ private:
QStringList m_files;
QPointer<QmlProjectItem> m_projectItem;
-
- Internal::QmlProjectNode *m_rootNode;
};
} // namespace QmlProjectManager