diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp index e38cffcfa71557c7bb06317d9a86b689134131f0..cac3b255ac8b3e4bc44aa83c59b914741b41c008 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 d326202013f6730f12a4b6ae241796a61051ac11..00b13f33dfdef943bde0c151636c7e369abb1763 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 a99f2abb598c80dc6f8782f9dc392d2795231314..ea60676f95f9852688b699a6f58825aea995b6b7 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 91be36110078f7219770b2203806ccf229445332..b2477e8b545424f5f95b05d9dcf2b7acc3f8cb6c 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 5b85eedc8122631b9eeb7c0a4b7d936320870bb8..28aa6f32927b5bbf10b3b21c9086d63a775a6063 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 1e8667039bf35978f5715dcd8c6f88ecd2efa1e4..b527b36f874a700cf5c3bd5815fe18bfff5fab81 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 f2cc2171f4dfffea9b5106dcde143d7b194d3a80..c0813c338d2c2fda517d1cc636c17603d4e39531 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 a37ada5c795778b46715f21816fa2c61e01f42fc..80920bba5766aae2267fa63382c48f242f0c4bef 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 5143a03b202cd5fe994e6fded15add8c9227945a..6fb3857a38a0f3b827f36ed4879f9186c35542cd 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 e5322b44a1e9febcb4f1b7ee392b1c47d1aabb78..92c440c5bc22a91948ac518df9f2916e5281e86b 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 226d7e558b4b64db715b56e81ebed90c75d59145..ec6854bb6da20a3ae48608629b16fbdbe4426aa9 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 9d870e80a3c1590a520b7cc0a652b7147a42f4a5..065cfa31090f846a7aaffaf3bc0b7d7d1ac798f3 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 3524ab0b7a4afc0bd4772a997f093589a8480641..5380cc8861e92b3e415c020646ed48e1b0a8f623 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 1e94cf0b5b75f370d6da44693ce1b23caea4297a..af7b8c3d591b3c703a8c8d41af80feb02ea47ce5 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 2ca4ab444957ff6433c47cfc52f4690e08f2b747..c67011b1b659bb0b09e081a126f9fbe427b9a677 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 7c18c4d2351126bc6b70b819db974258524dd500..803797239988b74b0fc32e9256870601270b9085 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 0eaaad3df5309a0903df4720882a5840953e5a58..e7c919aeb4669c597f21bc83f8e72598d5a23d39 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 23b190c2c1a3307a119dcb6592dd0787b7103b2d..0ce2dc46f747c72e129d4a11ee7a41ec567e7821 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 3523f31da17f932fa63147d87bddb76fd6e2acc6..73d77b40f8ad54d391cea793d8e2a2b8cc529a45 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 f36d9d0bbfc089c4e1337be8697cb923d72e1af5..b0ba9fb4f4d3e317704bd3f5bd233c14bdf18a6c 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 5afcbf2d70ccbe29dda5ecf4c01e9bd2fba1cbee..e6e63adacb8093660b945ee017077196103b497f 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 126c3c7aa4c556486303e780c31c45d47cd32aac..64a49cc3c33bbad5547fa80ea848e45d092b5502 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 7c3019ea833f5b300975ae2c084ac9e2cb5e253f..3eca1333fb4691bba8a97fad2445771a60179628 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 202f72b7cc32893104a90813ccfbefd4abf60407..ac7bd8652c48f7d62b0a7b5c08878b008372aefb 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 3ac0858f1737324f769ae20359d9f5a53c9668ad..71e3240c96d9747301fb710dd7c71311f92608d0 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 cdddbfd3c1ed736f7e25899cbe85956ef5ae36ee..37a5566b3c9100ab3c684ab70696d331e6f80c12 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 ba60ebed9fe9e09fc9dbea141dfcea52dcbc5a0b..89d194d722710a44a00e3021fdce510415ec8893 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 d499a8aea959540034e85a61d58679d73b70fa1e..98d06e1767bcd9e974b9dbee52f6e2543371d7d4 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