From d272a64eab51a1017d1a81b71512e2135f51ce93 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 16 Aug 2019 09:57:59 +0200 Subject: [PATCH] Project: Remove Project::document() method The document is used to do file watching, which may or may not be ideal. So make sure we do not leak the information how we watch files into the API and its users. The method is not used sensibly anywhere in creator, so it seems safe to remove it entirely. Change-Id: Ieed755bd5c852875378e4e96665dc906499975b0 Reviewed-by: Christian Kandeler --- src/plugins/classview/classviewparser.cpp | 4 +--- .../projectexplorer/currentprojectfind.cpp | 4 ++-- src/plugins/projectexplorer/project.cpp | 16 +++------------- src/plugins/projectexplorer/project.h | 1 - src/plugins/projectexplorer/projectexplorer.cpp | 10 +--------- .../qmlprojectmanager/qmlprojectnodes.cpp | 2 +- src/plugins/vcsbase/vcsbaseeditor.cpp | 14 ++++---------- 7 files changed, 12 insertions(+), 39 deletions(-) diff --git a/src/plugins/classview/classviewparser.cpp b/src/plugins/classview/classviewparser.cpp index 13f258b9ebc..07892d04d5d 100644 --- a/src/plugins/classview/classviewparser.cpp +++ b/src/plugins/classview/classviewparser.cpp @@ -285,9 +285,7 @@ ParserTreeItem::ConstPtr Parser::parse() for (const Project *prj : SessionManager::projects()) { ParserTreeItem::Ptr item; QString prjName(prj->displayName()); - QString prjType(prjName); - if (prj->document()) - prjType = prj->projectFilePath().toString(); + QString prjType = prj->projectFilePath().toString(); SymbolInformation inf(prjName, prjType); item = ParserTreeItem::Ptr(new ParserTreeItem()); diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp index ca8093f78b1..0eb445523a8 100644 --- a/src/plugins/projectexplorer/currentprojectfind.cpp +++ b/src/plugins/projectexplorer/currentprojectfind.cpp @@ -72,7 +72,7 @@ bool CurrentProjectFind::isEnabled() const QVariant CurrentProjectFind::additionalParameters() const { Project *project = ProjectTree::currentProject(); - if (project && project->document()) + if (project) return QVariant::fromValue(project->projectFilePath().toString()); return QVariant(); } @@ -85,7 +85,7 @@ Utils::FileIterator *CurrentProjectFind::files(const QStringList &nameFilters, return new Utils::FileListIterator(QStringList(), QList())); QString projectFile = additionalParameters.toString(); for (Project *project : SessionManager::projects()) { - if (project->document() && projectFile == project->projectFilePath().toString()) + if (project && projectFile == project->projectFilePath().toString()) return filesForProjects(nameFilters, exclusionFilters, {project}); } return new Utils::FileListIterator(QStringList(), QList()); diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index b3a28c2b6a5..73cb69ee526 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -243,7 +243,7 @@ Core::Id Project::id() const QString Project::mimeType() const { - return document()->mimeType(); + return d->m_document->mimeType(); } bool Project::canBuildProducts() const @@ -251,16 +251,10 @@ bool Project::canBuildProducts() const return d->m_canBuildProducts; } -Core::IDocument *Project::document() const -{ - QTC_CHECK(d->m_document); - return d->m_document.get(); -} - Utils::FilePath Project::projectFilePath() const { - QTC_ASSERT(document(), return Utils::FilePath()); - return document()->filePath(); + QTC_ASSERT(d->m_document, return Utils::FilePath()); + return d->m_document->filePath(); } void Project::addTarget(std::unique_ptr &&t) @@ -1074,10 +1068,6 @@ void ProjectExplorerPlugin::testProject_setup() QVERIFY(project.macroExpander()); - QVERIFY(project.document()); - QCOMPARE(project.document()->filePath(), TEST_PROJECT_PATH); - QCOMPARE(project.document()->mimeType(), TEST_PROJECT_MIMETYPE); - QCOMPARE(project.mimeType(), TEST_PROJECT_MIMETYPE); QCOMPARE(project.projectFilePath(), TEST_PROJECT_PATH); QCOMPARE(project.projectDirectory(), TEST_PROJECT_PATH.parentDir()); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index de057147bc0..ba5c3a6cdee 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -85,7 +85,6 @@ public: QString mimeType() const; bool canBuildProducts() const; - Core::IDocument *document() const; Utils::FilePath projectFilePath() const; Utils::FilePath projectDirectory() const; static Utils::FilePath projectDirectory(const Utils::FilePath &top); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index edef2d320bd..06b31a9c1c4 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1773,18 +1773,10 @@ void ProjectExplorerPlugin::unloadProject(Project *project) BuildManager::cancel(); } - IDocument *document = project->document(); - - if (!document || document->filePath().isEmpty()) //nothing to save? - return; - - if (!DocumentManager::saveModifiedDocumentSilently(document)) - return; - if (projectExplorerSettings().closeSourceFilesWithProject && !dd->closeAllFilesInProject(project)) return; - dd->addToRecentProjects(document->filePath().toString(), project->displayName()); + dd->addToRecentProjects(project->projectFilePath().toString(), project->displayName()); SessionManager::removeProject(project); dd->updateActions(); diff --git a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp index 7b311c2cf63..a4494e7064e 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp @@ -84,7 +84,7 @@ bool QmlProjectNode::renameFile(const QString & filePath, const QString & newFil m_project->setMainFile(newFilePath); // make sure to change it also in the qmlproject file - const QString qmlProjectFilePath = m_project->document()->filePath().toString(); + const QString qmlProjectFilePath = m_project->projectFilePath().toString(); Core::FileChangeBlocker fileChangeBlocker(qmlProjectFilePath); const QList editors = Core::DocumentModel::editorsForFilePath(qmlProjectFilePath); TextEditor::TextDocument *document = nullptr; diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index fee6dbc72c0..aaf677063b8 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -1246,19 +1246,13 @@ static QTextCodec *findFileCodec(const QString &source) // Find the codec by checking the projects (root dir of project file) static QTextCodec *findProjectCodec(const QString &dir) { + const FilePath dirPath = FilePath::fromString(dir); typedef QList ProjectList; // Try to find a project under which file tree the file is. const ProjectList projects = ProjectExplorer::SessionManager::projects(); - if (!projects.empty()) { - const ProjectList::const_iterator pcend = projects.constEnd(); - for (ProjectList::const_iterator it = projects.constBegin(); it != pcend; ++it) - if (const Core::IDocument *document = (*it)->document()) - if (document->filePath().toString().startsWith(dir)) { - QTextCodec *codec = (*it)->editorConfiguration()->textCodec(); - return codec; - } - } - return nullptr; + const ProjectExplorer::Project *p + = findOrDefault(projects, equal(&ProjectExplorer::Project::projectDirectory, dirPath)); + return p ? p->editorConfiguration()->textCodec() : nullptr; } QTextCodec *VcsBaseEditor::getCodec(const QString &source)