From be204a125e8231650cbcb8aeb52b0a09fc1f337f Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 28 Feb 2017 18:41:02 +0100 Subject: [PATCH] ProjectManager: Cut ties between Project and IProjectManager Not needed, less code. Change-Id: Ie0d5c3a60f0392f30ed2ee9d2c5a32156b4e67e1 Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/project.cpp | 14 ------- src/plugins/projectexplorer/project.h | 4 -- .../projectexplorer/projectexplorer.cpp | 1 - src/plugins/qbsprojectmanager/qbsproject.cpp | 2 +- .../qbsprojectmanager/qbsprojectmanager.cpp | 2 +- .../qbsprojectmanager/qbsprojectmanager.h | 2 +- .../qmakeprojectmanager/qmakeparsernodes.cpp | 2 +- .../qmakeprojectmanager/qmakeproject.cpp | 41 ++++++++----------- .../qmakeprojectmanager/qmakeproject.h | 12 +----- .../qmakeprojectmanager.cpp | 18 +------- .../qmakeprojectmanager/qmakeprojectmanager.h | 6 --- .../qmakeprojectmanager/wizards/qtwizard.cpp | 5 +-- 12 files changed, 24 insertions(+), 85 deletions(-) diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index bc9f0e5dc0b..ed46df7ddba 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -90,7 +90,6 @@ public: Core::Id m_id; Core::IDocument *m_document = nullptr; - IProjectManager *m_manager = nullptr; ProjectNode *m_rootProjectNode = nullptr; QList m_targets; Target *m_activeTarget = nullptr; @@ -419,13 +418,6 @@ void Project::setDocument(Core::IDocument *doc) d->m_document = doc; } -void Project::setProjectManager(IProjectManager *manager) -{ - QTC_ASSERT(manager, return); - QTC_ASSERT(!d->m_manager, return); - d->m_manager = manager; -} - void Project::setRootProjectNode(ProjectNode *root) { ProjectNode *oldNode = d->m_rootProjectNode; @@ -529,12 +521,6 @@ Utils::FileName Project::projectDirectory(const Utils::FileName &top) return Utils::FileName::fromString(top.toFileInfo().absoluteDir().path()); } -IProjectManager *Project::projectManager() const -{ - QTC_CHECK(d->m_manager); - return d->m_manager; -} - ProjectNode *Project::rootProjectNode() const { return d->m_rootProjectNode; diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index cdadbc6faa0..731f72b975d 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -47,7 +47,6 @@ namespace ProjectExplorer { class BuildInfo; class EditorConfiguration; -class IProjectManager; class NamedWidget; class ProjectImporter; class ProjectNode; @@ -80,8 +79,6 @@ public: Utils::FileName projectDirectory() const; static Utils::FileName projectDirectory(const Utils::FileName &top); - virtual IProjectManager *projectManager() const; - virtual ProjectNode *rootProjectNode() const; bool hasActiveBuildSettings() const; @@ -176,7 +173,6 @@ 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); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 9940afa0b35..d0880a17477 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1711,7 +1711,6 @@ ProjectExplorerPlugin::OpenProjectResult ProjectExplorerPlugin::openProjects(con appendError(errorString, tr("Failed opening project \"%1\": Project is not a file").arg(fileName)); } else if (Project *pro = manager->openProject(filePath)) { - pro->setProjectManager(manager); QObject::connect(pro, &Project::parsingFinished, [pro]() { emit SessionManager::instance()->projectFinishedParsing(pro); }); diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 53bd9e76f7d..f261d095022 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -426,7 +426,7 @@ qbs::InstallJob *QbsProject::install(const qbs::InstallOptions &opts) QString QbsProject::profileForTarget(const Target *t) const { - return static_cast(projectManager())->profileForKit(t->kit()); + return QbsManager::profileForKit(t->kit()); } bool QbsProject::isParsing() const diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp index 0d2a489d697..853077e86cd 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp @@ -114,7 +114,7 @@ QString QbsManager::profileForKit(const ProjectExplorer::Kit *k) { if (!k) return QString(); - updateProfileIfNecessary(k); + m_instance->updateProfileIfNecessary(k); return settings()->value(qtcProfilePrefix() + k->id().toString()).toString(); } diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.h b/src/plugins/qbsprojectmanager/qbsprojectmanager.h index c0044d23e27..458690565c9 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.h @@ -57,7 +57,7 @@ public: ProjectExplorer::Project *openProject(const QString &fileName) override; // QBS profiles management: - QString profileForKit(const ProjectExplorer::Kit *k); + static QString profileForKit(const ProjectExplorer::Kit *k); void setProfileForKit(const QString &name, const ProjectExplorer::Kit *k); void updateProfileIfNecessary(const ProjectExplorer::Kit *kit); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 33e02dfd3a5..e7f38f0e4e8 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -626,7 +626,7 @@ bool QmakePriFile::saveModifiedEditors() // force instant reload of ourselves QtSupport::ProFileCacheManager::instance()->discardFile(filePath().toString()); - m_project->projectManager()->notifyChanged(filePath()); + QmakeProject::notifyChanged(filePath()); return true; } diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index dfb0922c742..9cb603f1cef 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -238,6 +238,8 @@ bool QmakeProjectFile::reload(QString *errorString, ReloadFlag flag, ChangeType return true; } +static QList s_projects; + } // namespace Internal /*! @@ -246,13 +248,13 @@ bool QmakeProjectFile::reload(QString *errorString, ReloadFlag flag, ChangeType QmakeProject manages information about an individual Qt 4 (.pro) project file. */ -QmakeProject::QmakeProject(IProjectManager *manager, const QString &fileName) : +QmakeProject::QmakeProject(const QString &fileName) : m_projectFiles(new QmakeProjectFiles), m_qmakeVfs(new QMakeVfs), m_cppCodeModelUpdater(new CppTools::CppProjectUpdater(this)) { + s_projects.append(this); setId(Constants::QMAKEPROJECT_ID); - setProjectManager(manager); setDocument(new QmakeProjectFile(fileName)); setProjectContext(Core::Context(QmakeProjectManager::Constants::PROJECT_ID)); setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); @@ -276,6 +278,7 @@ QmakeProject::QmakeProject(IProjectManager *manager, const QString &fileName) : QmakeProject::~QmakeProject() { + s_projects.removeOne(this); delete m_projectImporter; m_projectImporter = nullptr; delete m_cppCodeModelUpdater; @@ -286,7 +289,6 @@ QmakeProject::~QmakeProject() setRootProjectNode(nullptr); m_rootProFile.reset(); - projectManager()->unregisterProject(this); delete m_projectFiles; m_cancelEvaluate = true; Q_ASSERT(m_qmakeGlobalsRefCnt == 0); @@ -324,8 +326,6 @@ Project::RestoreResult QmakeProject::fromMap(const QVariantMap &map, QString *er } } - projectManager()->registerProject(this); - // On active buildconfiguration changes, reevaluate the .pro files m_activeTarget = activeTarget(); if (m_activeTarget) { @@ -667,11 +667,6 @@ void QmakeProject::buildFinished(bool success) m_qmakeVfs->invalidateContents(); } -QmakeManager *QmakeProject::projectManager() const -{ - return static_cast(Project::projectManager()); -} - bool QmakeProject::supportsKit(Kit *k, QString *errorMessage) const { QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); @@ -950,28 +945,24 @@ void QmakeProject::setAllBuildConfigurationsEnabled(bool enabled) } } -QList QmakeProject::findProFiles(const FileName &fileName, QmakeProFile *root) +static void notifyChangedHelper(const FileName &fileName, QmakeProFile *file) { - QList result; - if (root->filePath() == fileName) - result.append(root); - - for (QmakePriFile *fn : root->children()) { - if (auto pro = dynamic_cast(fn)) - result.append(findProFiles(fileName, pro)); + if (file->filePath() == fileName) { + QtSupport::ProFileCacheManager::instance()->discardFile(fileName.toString()); + file->scheduleUpdate(QmakeProFile::ParseNow); } - return result; + for (QmakePriFile *fn : file->children()) { + if (auto pro = dynamic_cast(fn)) + notifyChangedHelper(fileName, pro); + } } void QmakeProject::notifyChanged(const FileName &name) { - if (files(QmakeProject::SourceFiles).contains(name.toString())) { - const QList list = findProFiles(name, rootProFile()); - for (QmakeProFile *file : list) { - QtSupport::ProFileCacheManager::instance()->discardFile(name.toString()); - file->scheduleUpdate(QmakeProFile::ParseNow); - } + for (QmakeProject *project : s_projects) { + if (project->files(QmakeProject::SourceFiles).contains(name.toString())) + notifyChangedHelper(name, project->rootProFile()); } } diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 77637bd25b7..1be48a4f18c 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -52,9 +52,7 @@ class QmakeBuildConfiguration; namespace Internal { class CentralizedFolderWatcher; -class QmakeProjectFile; class QmakeProjectFiles; -class QmakeProjectConfigWidget; } class QMAKEPROJECTMANAGER_EXPORT QmakeProject : public ProjectExplorer::Project @@ -62,13 +60,12 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeProject : public ProjectExplorer::Project Q_OBJECT public: - QmakeProject(ProjectExplorer::IProjectManager *manager, const QString &proFile); + explicit QmakeProject(const QString &proFile); ~QmakeProject() final; QmakeProFile *rootProFile() const; QString displayName() const final; - QmakeManager *projectManager() const final; bool supportsKit(ProjectExplorer::Kit *k, QString *errorMesage) const final; @@ -89,7 +86,7 @@ public: ProjectExplorer::IRunConfigurationFactory::CreationMode mode, const QList &projectTypes = {}); - void notifyChanged(const Utils::FileName &name); + static void notifyChanged(const Utils::FileName &name); /// \internal QtSupport::ProFileReader *createProFileReader(const QmakeProFile *qmakeProFile); @@ -168,7 +165,6 @@ private: static QList collectAllProFiles(QmakeProFile *file, Parsing parse, const QList &projectTypes); - static QList findProFiles(const Utils::FileName &fileName, QmakeProFile *root); static bool equalFileList(const QStringList &a, const QStringList &b); @@ -216,10 +212,6 @@ private: ProjectExplorer::Target *m_activeTarget = nullptr; mutable ProjectExplorer::ProjectImporter *m_projectImporter = nullptr; - - friend class Internal::QmakeProjectFile; - friend class Internal::QmakeProjectConfigWidget; - friend class QmakeManager; // to schedule a async update if the unconfigured settings change }; } // namespace QmakeProjectManager diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp index 8bf477cb43b..d2d9cce65ee 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp @@ -53,22 +53,6 @@ using namespace TextEditor; namespace QmakeProjectManager { -void QmakeManager::registerProject(QmakeProject *project) -{ - m_projects.append(project); -} - -void QmakeManager::unregisterProject(QmakeProject *project) -{ - m_projects.removeOne(project); -} - -void QmakeManager::notifyChanged(const Utils::FileName &name) -{ - foreach (QmakeProject *pro, m_projects) - pro->notifyChanged(name); -} - QString QmakeManager::mimeType() const { return QLatin1String(QmakeProjectManager::Constants::PROFILE_MIMETYPE); @@ -76,7 +60,7 @@ QString QmakeManager::mimeType() const ProjectExplorer::Project *QmakeManager::openProject(const QString &fileName) { - return new QmakeProject(this, fileName); + return new QmakeProject(fileName); } Node *QmakeManager::contextNode() diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h index bf472002ef6..170343a531d 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h @@ -41,17 +41,12 @@ class ToolChain; namespace QmakeProjectManager { -class QmakeProject; - class QMAKEPROJECTMANAGER_EXPORT QmakeManager : public ProjectExplorer::IProjectManager { Q_OBJECT public: - void registerProject(QmakeProject *project); - void unregisterProject(QmakeProject *project); void notifyChanged(const Utils::FileName &name); - QString mimeType() const override; ProjectExplorer::Project *openProject(const QString &fileName) override; @@ -73,7 +68,6 @@ public: void buildFile(); private: - QList m_projects; void handleSubDirContextMenu(Action action, bool isFileBuild); void handleSubDirContextMenu(QmakeManager::Action action, bool isFileBuild, ProjectExplorer::Project *contextProject, diff --git a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp index 5df6ede9184..c716c4117bf 100644 --- a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp @@ -256,10 +256,7 @@ bool BaseQmakeProjectWizardDialog::writeUserFile(const QString &proFileName) con if (!m_targetSetupPage) return false; - QmakeManager *manager = ExtensionSystem::PluginManager::getObject(); - Q_ASSERT(manager); - - QmakeProject *pro = new QmakeProject(manager, proFileName); + QmakeProject *pro = new QmakeProject(proFileName); bool success = m_targetSetupPage->setupProject(pro); if (success) pro->saveSettings();