From 50d16908541026dbbb0523566dafb5ed291e383a Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 28 Feb 2017 16:07:53 +0100 Subject: [PATCH] ProjectManager: Centralize "File not found handling" That's the only error that was ever checked for, in all nine project manager. In the hypothetical case that we'll need something else than the name of a file to identify a "project file", we'd probably need to touch the signature anyway. Until then, remove the duplication. Change-Id: Iba00b8f71309a908e2d29c0a58c50b685eca0cae Reviewed-by: Tobias Hunger --- .../autotoolsprojectmanager/autotoolsmanager.cpp | 16 +--------------- .../autotoolsprojectmanager/autotoolsmanager.h | 2 +- .../cmakeprojectmanager/cmakeprojectmanager.cpp | 12 ++---------- .../cmakeprojectmanager/cmakeprojectmanager.h | 2 +- .../genericprojectmanager.cpp | 16 +--------------- .../genericprojectmanager.h | 2 +- src/plugins/nim/project/nimprojectmanager.cpp | 7 +------ src/plugins/nim/project/nimprojectmanager.h | 2 +- src/plugins/projectexplorer/iprojectmanager.h | 4 ++-- .../projectexplorer/jsonwizard/jsonkitspage.cpp | 3 +-- src/plugins/projectexplorer/projectexplorer.cpp | 8 ++++---- src/plugins/pythoneditor/pythoneditorplugin.cpp | 11 ++--------- .../qbsprojectmanager/qbsprojectmanager.cpp | 9 +-------- .../qbsprojectmanager/qbsprojectmanager.h | 2 +- .../qmakeprojectmanager/qmakeprojectmanager.cpp | 9 +-------- .../qmakeprojectmanager/qmakeprojectmanager.h | 2 +- .../qmlprojectmanager/qmlprojectmanager.cpp | 9 +-------- .../qmlprojectmanager/qmlprojectmanager.h | 2 +- 18 files changed, 24 insertions(+), 94 deletions(-) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsmanager.cpp b/src/plugins/autotoolsprojectmanager/autotoolsmanager.cpp index cdc806e3324..6e19e8516aa 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsmanager.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsmanager.cpp @@ -29,27 +29,13 @@ #include "autotoolsproject.h" #include "autotoolsprojectconstants.h" -#include -#include -#include -#include -#include -#include - using namespace ProjectExplorer; namespace AutotoolsProjectManager { namespace Internal { -Project *AutotoolsManager::openProject(const QString &fileName, QString *errorString) +Project *AutotoolsManager::openProject(const QString &fileName) { - if (!QFileInfo(fileName).isFile()) { - if (errorString) - *errorString = tr("Failed opening project \"%1\": Project is not a file") - .arg(fileName); - return 0; - } - return new AutotoolsProject(fileName); } diff --git a/src/plugins/autotoolsprojectmanager/autotoolsmanager.h b/src/plugins/autotoolsprojectmanager/autotoolsmanager.h index dd857811ef6..500a2599ddc 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsmanager.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsmanager.h @@ -44,7 +44,7 @@ class AutotoolsManager : public ProjectExplorer::IProjectManager Q_OBJECT public: - ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; + ProjectExplorer::Project *openProject(const QString &fileName) override; QString mimeType() const override; }; diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp index f7e4c22cd5e..46aaeb3347b 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp @@ -156,17 +156,9 @@ void CMakeManager::rescanProject(Project *project) cmakeProject->runCMake(); // by my experience: every rescan run requires cmake run too } -Project *CMakeManager::openProject(const QString &fileName, QString *errorString) +Project *CMakeManager::openProject(const QString &fileName) { - Utils::FileName file = Utils::FileName::fromString(fileName); - if (!file.toFileInfo().isFile()) { - if (errorString) - *errorString = tr("Failed opening project \"%1\": Project is not a file") - .arg(file.toUserOutput()); - return 0; - } - - return new CMakeProject(file); + return new CMakeProject(Utils::FileName::fromString(fileName)); } QString CMakeManager::mimeType() const diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h index cd8f414a814..e8e42059ae0 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h @@ -42,7 +42,7 @@ class CMakeManager : public ProjectExplorer::IProjectManager public: CMakeManager(); - ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; + ProjectExplorer::Project *openProject(const QString &fileName) override; QString mimeType() const override; private: diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.cpp b/src/plugins/genericprojectmanager/genericprojectmanager.cpp index 9e46f6c1ced..bde3d17c56b 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.cpp +++ b/src/plugins/genericprojectmanager/genericprojectmanager.cpp @@ -27,13 +27,6 @@ #include "genericprojectconstants.h" #include "genericproject.h" -#include -#include -#include -#include - -#include - namespace GenericProjectManager { namespace Internal { @@ -42,15 +35,8 @@ QString Manager::mimeType() const return QLatin1String(Constants::GENERICMIMETYPE); } -ProjectExplorer::Project *Manager::openProject(const QString &fileName, QString *errorString) +ProjectExplorer::Project *Manager::openProject(const QString &fileName) { - if (!QFileInfo(fileName).isFile()) { - if (errorString) - *errorString = tr("Failed opening project \"%1\": Project is not a file.") - .arg(fileName); - return 0; - } - return new GenericProject(fileName); } diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.h b/src/plugins/genericprojectmanager/genericprojectmanager.h index 139739c827b..213de64644f 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.h +++ b/src/plugins/genericprojectmanager/genericprojectmanager.h @@ -38,7 +38,7 @@ class Manager : public ProjectExplorer::IProjectManager public: virtual QString mimeType() const override; - virtual ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; + virtual ProjectExplorer::Project *openProject(const QString &fileName) override; void registerProject(GenericProject *project); void unregisterProject(GenericProject *project); diff --git a/src/plugins/nim/project/nimprojectmanager.cpp b/src/plugins/nim/project/nimprojectmanager.cpp index 3a529519164..3235b0f0dec 100644 --- a/src/plugins/nim/project/nimprojectmanager.cpp +++ b/src/plugins/nim/project/nimprojectmanager.cpp @@ -37,13 +37,8 @@ QString NimProjectManager::mimeType() const return QLatin1String(Constants::C_NIM_PROJECT_MIMETYPE); } -Project *NimProjectManager::openProject(const QString &fileName, QString *errorString) +Project *NimProjectManager::openProject(const QString &fileName) { - if (!QFileInfo(fileName).isFile()) { - *errorString = tr("Failed opening project \"%1\": Project is not a file.").arg(fileName); - return nullptr; - } - return new NimProject(fileName); } diff --git a/src/plugins/nim/project/nimprojectmanager.h b/src/plugins/nim/project/nimprojectmanager.h index 81703d16fd2..a5336e465bc 100644 --- a/src/plugins/nim/project/nimprojectmanager.h +++ b/src/plugins/nim/project/nimprojectmanager.h @@ -36,7 +36,7 @@ class NimProjectManager : public ProjectExplorer::IProjectManager public: QString mimeType() const override; - ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; + ProjectExplorer::Project *openProject(const QString &fileName) override; }; } diff --git a/src/plugins/projectexplorer/iprojectmanager.h b/src/plugins/projectexplorer/iprojectmanager.h index 7d25e9ba026..ff01c83a113 100644 --- a/src/plugins/projectexplorer/iprojectmanager.h +++ b/src/plugins/projectexplorer/iprojectmanager.h @@ -39,8 +39,8 @@ class PROJECTEXPLORER_EXPORT IProjectManager : public QObject public: virtual QString mimeType() const = 0; - // fileName is a canonical path! - virtual Project *openProject(const QString &fileName, QString *errorString) = 0; + // FileName is a canonical path of a checked-to-exist file. + virtual Project *openProject(const QString &fileName) = 0; }; } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp index e9059a656a7..12e5d7556cd 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp @@ -109,7 +109,6 @@ void JsonKitsPage::setupProjectFiles(const JsonWizard::GeneratorFiles &files) foreach (const JsonWizard::GeneratorFile &f, files) { if (f.file.attributes() & GeneratedFile::OpenProjectAttribute) { - QString errorMessage; const QFileInfo fi(f.file.path()); const QString path = fi.absoluteFilePath(); @@ -119,7 +118,7 @@ void JsonKitsPage::setupProjectFiles(const JsonWizard::GeneratorFiles &files) continue; auto manager = Utils::findOrDefault(managerList, Utils::equal(&IProjectManager::mimeType, mt.name())); - project = manager ? manager->openProject(path, &errorMessage) : nullptr; + project = manager ? manager->openProject(path) : nullptr; if (project) { if (setupProject(project)) project->saveSettings(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index de3cef38551..9940afa0b35 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1707,8 +1707,10 @@ ProjectExplorerPlugin::OpenProjectResult ProjectExplorerPlugin::openProjects(con foreach (IProjectManager *manager, projectManagers) { if (mt.matchesName(manager->mimeType())) { foundProjectManager = true; - QString tmp; - if (Project *pro = manager->openProject(filePath, &tmp)) { + if (!QFileInfo(filePath).isFile()) { + 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); @@ -1726,8 +1728,6 @@ ProjectExplorerPlugin::OpenProjectResult ProjectExplorerPlugin::openProjects(con delete pro; } } - if (!tmp.isEmpty()) - appendError(errorString, tmp); break; } } diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp index d66eb705ded..543113f583e 100644 --- a/src/plugins/pythoneditor/pythoneditorplugin.cpp +++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp @@ -94,7 +94,7 @@ class PythonProjectManager : public IProjectManager Q_OBJECT public: QString mimeType() const override { return QLatin1String(PythonMimeType); } - Project *openProject(const QString &fileName, QString *errorString) override; + Project *openProject(const QString &fileName) override; }; class PythonProject : public Project @@ -361,15 +361,8 @@ PythonRunConfigurationWidget::PythonRunConfigurationWidget(PythonRunConfiguratio setEnabled(runConfiguration->isEnabled()); } -Project *PythonProjectManager::openProject(const QString &fileName, QString *errorString) +Project *PythonProjectManager::openProject(const QString &fileName) { - if (!QFileInfo(fileName).isFile()) { - if (errorString) - *errorString = tr("Failed opening project \"%1\": Project is not a file.") - .arg(fileName); - return 0; - } - return new PythonProject(fileName); } diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp index bc5f41711f9..0d2a489d697 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp @@ -105,15 +105,8 @@ QString QbsManager::mimeType() const return QLatin1String(QmlJSTools::Constants::QBS_MIMETYPE); } -ProjectExplorer::Project *QbsManager::openProject(const QString &fileName, QString *errorString) +ProjectExplorer::Project *QbsManager::openProject(const QString &fileName) { - if (!QFileInfo(fileName).isFile()) { - if (errorString) - *errorString = tr("Failed opening project \"%1\": Project is not a file.") - .arg(fileName); - return nullptr; - } - return new QbsProject(fileName); } diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.h b/src/plugins/qbsprojectmanager/qbsprojectmanager.h index ecade37059d..fa9af9cf2ca 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.h @@ -60,7 +60,7 @@ public: ~QbsManager(); QString mimeType() const override; - ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; + ProjectExplorer::Project *openProject(const QString &fileName) override; // QBS profiles management: QString profileForKit(const ProjectExplorer::Kit *k); diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp index e2563f14224..8bf477cb43b 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp @@ -74,15 +74,8 @@ QString QmakeManager::mimeType() const return QLatin1String(QmakeProjectManager::Constants::PROFILE_MIMETYPE); } -ProjectExplorer::Project *QmakeManager::openProject(const QString &fileName, QString *errorString) +ProjectExplorer::Project *QmakeManager::openProject(const QString &fileName) { - if (!QFileInfo(fileName).isFile()) { - if (errorString) - *errorString = tr("Failed opening project \"%1\": Project is not a file") - .arg(fileName); - return 0; - } - return new QmakeProject(this, fileName); } diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h index a32cb665ef7..bf472002ef6 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h @@ -53,7 +53,7 @@ public: void notifyChanged(const Utils::FileName &name); QString mimeType() const override; - ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; + ProjectExplorer::Project *openProject(const QString &fileName) override; // Context information used in the slot implementations static ProjectExplorer::Node *contextNode(); diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp b/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp index 9af1acfcd08..b2669bf46b5 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp @@ -43,15 +43,8 @@ Manager::Manager() QString Manager::mimeType() const { return QLatin1String(Constants::QMLPROJECT_MIMETYPE); } -ProjectExplorer::Project *Manager::openProject(const QString &fileName, QString *errorString) +ProjectExplorer::Project *Manager::openProject(const QString &fileName) { - if (!QFileInfo(fileName).isFile()) { - if (errorString) - *errorString = tr("Failed opening project \"%1\": Project is not a file.") - .arg(fileName); - return 0; - } - return new QmlProject(this, Utils::FileName::fromString(fileName)); } diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.h b/src/plugins/qmlprojectmanager/qmlprojectmanager.h index 0b0038fa6b2..0d49694a75c 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.h +++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.h @@ -39,7 +39,7 @@ public: Manager(); QString mimeType() const override; - ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString) override; + ProjectExplorer::Project *openProject(const QString &fileName) override; }; } // namespace Internal