diff options
author | hjk <hjk@qt.io> | 2017-03-03 18:16:34 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2017-03-09 10:41:33 +0000 |
commit | c1bfc5d8ec99e7874208ad2f4dc312b73f1817cd (patch) | |
tree | 140e487fb3758bd9edf96ff91f597b3729f380bb /src | |
parent | 57144e28da79bc8e9df00b0c7dfc5d054d066877 (diff) | |
download | qt-creator-c1bfc5d8ec99e7874208ad2f4dc312b73f1817cd.tar.gz |
ProjectExplorer: Follow up on too-much-magic in IProjectManager
Use a ProjectManager::registerProjectType<Project>(MimeType) function,
removing cryptic IProjectManager object ownership.
Change-Id: I212cd25bd4ee757022a8cb0decb4b8de3a112d12
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src')
54 files changed, 153 insertions, 533 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsmanager.cpp b/src/plugins/autotoolsprojectmanager/autotoolsmanager.cpp deleted file mode 100644 index 6e19e8516a..0000000000 --- a/src/plugins/autotoolsprojectmanager/autotoolsmanager.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Openismus GmbH. -** Author: Peter Penz (ppenz@openismus.com) -** Author: Patricia Santana Cruz (patriciasantanacruz@gmail.com) -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "autotoolsmanager.h" -#include "autotoolsproject.h" -#include "autotoolsprojectconstants.h" - -using namespace ProjectExplorer; - -namespace AutotoolsProjectManager { -namespace Internal { - -Project *AutotoolsManager::openProject(const QString &fileName) -{ - return new AutotoolsProject(fileName); -} - -QString AutotoolsManager::mimeType() const -{ - return QLatin1String(Constants::MAKEFILE_MIMETYPE); -} - -} // namespace Internal -} // namespace AutotoolsProjectManager diff --git a/src/plugins/autotoolsprojectmanager/autotoolsmanager.h b/src/plugins/autotoolsprojectmanager/autotoolsmanager.h deleted file mode 100644 index 500a2599dd..0000000000 --- a/src/plugins/autotoolsprojectmanager/autotoolsmanager.h +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Openismus GmbH. -** Author: Peter Penz (ppenz@openismus.com) -** Author: Patricia Santana Cruz (patriciasantanacruz@gmail.com) -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include <projectexplorer/iprojectmanager.h> - -namespace AutotoolsProjectManager { -namespace Internal { - -/** - * @brief Implementation of ProjectExplorer::IProjectManager interface. - * - * An autotools project is identified by the MIME type text/x-makefile. - * The project is represented by an instance of ProjectExplorer::Project, - * which gets created by AutotoolsManager::openProject(). - */ -class AutotoolsManager : public ProjectExplorer::IProjectManager -{ - Q_OBJECT - -public: - ProjectExplorer::Project *openProject(const QString &fileName) override; - QString mimeType() const override; -}; - -} // namespace Internal -} // namespace AutotoolsProjectManager diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp index 1b986bd7ed..1733d5ec5d 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp @@ -28,7 +28,6 @@ #include "autotoolsproject.h" #include "autotoolsbuildconfiguration.h" #include "autotoolsprojectconstants.h" -#include "autotoolsmanager.h" #include "autotoolsprojectnode.h" #include "autotoolsprojectfile.h" #include "autotoolsopenprojectwizard.h" @@ -69,7 +68,7 @@ using namespace AutotoolsProjectManager; using namespace AutotoolsProjectManager::Internal; using namespace ProjectExplorer; -AutotoolsProject::AutotoolsProject(const QString &fileName) : +AutotoolsProject::AutotoolsProject(const Utils::FileName &fileName) : m_fileWatcher(new Utils::FileSystemWatcher(this)), m_cppCodeModelUpdater(new CppTools::CppProjectUpdater(this)) { diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.h b/src/plugins/autotoolsprojectmanager/autotoolsproject.h index 501fb9f98e..8b2d5ab788 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsproject.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.h @@ -54,7 +54,7 @@ class AutotoolsProject : public ProjectExplorer::Project Q_OBJECT public: - AutotoolsProject(const QString &fileName); + explicit AutotoolsProject(const Utils::FileName &fileName); ~AutotoolsProject() override; QString displayName() const override; diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.cpp b/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.cpp index 096ed7301a..49a3d1e6ff 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.cpp @@ -32,11 +32,11 @@ namespace AutotoolsProjectManager { namespace Internal { -AutotoolsProjectFile::AutotoolsProjectFile(const QString &fileName) +AutotoolsProjectFile::AutotoolsProjectFile(const Utils::FileName &fileName) { setId("Autotools.ProjectFile"); setMimeType(QLatin1String(Constants::MAKEFILE_MIMETYPE)); - setFilePath(Utils::FileName::fromString(fileName)); + setFilePath(fileName); } } // namespace Internal diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.h b/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.h index 2e1d9b54e9..8c41e19bd5 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectfile.h @@ -45,7 +45,7 @@ namespace Internal { class AutotoolsProjectFile : public Core::IDocument { public: - AutotoolsProjectFile(const QString &fileName); + AutotoolsProjectFile(const Utils::FileName &fileName); }; } // namespace Internal diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.pro b/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.pro index 2c259f6c61..3e30bf328c 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.pro +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.pro @@ -2,7 +2,6 @@ include(../../qtcreatorplugin.pri) HEADERS = autotoolsprojectplugin.h\ autotoolsopenprojectwizard.h\ - autotoolsmanager.h\ autotoolsprojectfile.h\ autotoolsprojectnode.h\ autotoolsproject.h\ @@ -17,7 +16,6 @@ HEADERS = autotoolsprojectplugin.h\ makefileparser.h SOURCES = autotoolsprojectplugin.cpp\ autotoolsopenprojectwizard.cpp\ - autotoolsmanager.cpp\ autotoolsprojectfile.cpp\ autotoolsprojectnode.cpp\ autotoolsproject.cpp\ diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs b/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs index af646ffa2e..8c76c5d41f 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs @@ -20,8 +20,6 @@ QtcPlugin { "autotoolsbuildconfiguration.h", "autotoolsbuildsettingswidget.cpp", "autotoolsbuildsettingswidget.h", - "autotoolsmanager.cpp", - "autotoolsmanager.h", "autotoolsopenprojectwizard.cpp", "autotoolsopenprojectwizard.h", "autotoolsproject.cpp", diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp index d5815515af..c323754a65 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp @@ -26,13 +26,15 @@ ****************************************************************************/ #include "autotoolsprojectplugin.h" -#include "autotoolsmanager.h" +#include "autotoolsproject.h" +#include "autotoolsprojectconstants.h" #include "autotoolsbuildconfiguration.h" #include "makestep.h" #include "autogenstep.h" #include "autoreconfstep.h" #include "configurestep.h" -#include "autotoolsprojectconstants.h" + +#include <projectexplorer/projectmanager.h> #include <QStringList> #include <QtPlugin> @@ -53,7 +55,8 @@ bool AutotoolsProjectPlugin::initialize(const QStringList &arguments, addAutoReleasedObject(new AutogenStepFactory); addAutoReleasedObject(new ConfigureStepFactory); addAutoReleasedObject(new AutoreconfStepFactory); - addAutoReleasedObject(new AutotoolsManager); + + ProjectExplorer::ProjectManager::registerProjectType<AutotoolsProject>(Constants::MAKEFILE_MIMETYPE); return true; } diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index a8bc76c3a5..c5beb51b43 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -52,7 +52,7 @@ #include <texteditor/textdocument.h> #include <projectexplorer/session.h> #include <projectexplorer/project.h> -#include <projectexplorer/iprojectmanager.h> +#include <projectexplorer/projectmanager.h> #include <utils/algorithm.h> #include <utils/synchronousprocess.h> #include <utils/temporarydirectory.h> diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp index 46aaeb3347..844a8a95bb 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp @@ -155,13 +155,3 @@ void CMakeManager::rescanProject(Project *project) cmakeProject->scanProjectTree(); cmakeProject->runCMake(); // by my experience: every rescan run requires cmake run too } - -Project *CMakeManager::openProject(const QString &fileName) -{ - return new CMakeProject(Utils::FileName::fromString(fileName)); -} - -QString CMakeManager::mimeType() const -{ - return QLatin1String(Constants::CMAKEPROJECTMIMETYPE); -} diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h index e8e42059ae..c1d19514ea 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h @@ -25,7 +25,7 @@ #pragma once -#include <projectexplorer/iprojectmanager.h> +#include <projectexplorer/project.h> QT_BEGIN_NAMESPACE class QAction; @@ -36,15 +36,13 @@ namespace Internal { class CMakeSettingsPage; -class CMakeManager : public ProjectExplorer::IProjectManager +class CMakeManager : public QObject { Q_OBJECT + public: CMakeManager(); - ProjectExplorer::Project *openProject(const QString &fileName) override; - QString mimeType() const override; - private: void updateCmakeActions(); void clearCMakeCache(ProjectExplorer::Project *project); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp index b91b1a944c..1e972f9421 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp @@ -45,6 +45,7 @@ #include <coreplugin/fileiconprovider.h> #include <projectexplorer/kitmanager.h> +#include <projectexplorer/projectmanager.h> #include <projectexplorer/projecttree.h> #include <utils/parameteraction.h> @@ -64,6 +65,9 @@ bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString * addAutoReleasedObject(new Internal::CMakeSnippetProvider); addAutoReleasedObject(new CMakeSettingsPage); addAutoReleasedObject(new CMakeManager); + + ProjectManager::registerProjectType<CMakeProject>(Constants::CMAKEPROJECTMIMETYPE); + addAutoReleasedObject(new CMakeBuildStepFactory); addAutoReleasedObject(new CMakeRunConfigurationFactory); addAutoReleasedObject(new CMakeBuildConfigurationFactory); diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 0fb396598b..6c394c5cb1 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -54,6 +54,7 @@ using namespace Core; using namespace ProjectExplorer; +using namespace Utils; namespace GenericProjectManager { namespace Internal { @@ -64,7 +65,7 @@ namespace Internal { // //////////////////////////////////////////////////////////////////////////////////// -GenericProject::GenericProject(const QString &fileName) +GenericProject::GenericProject(const Utils::FileName &fileName) : m_cppCodeModelUpdater(new CppTools::CppProjectUpdater(this)) { setId(Constants::GENERICPROJECT_ID); @@ -81,9 +82,9 @@ GenericProject::GenericProject(const QString &fileName) m_includesFileName = QFileInfo(dir, m_projectName + ".includes").absoluteFilePath(); m_configFileName = QFileInfo(dir, m_projectName + ".config").absoluteFilePath(); - m_filesIDocument = new GenericProjectFile(this, m_filesFileName, GenericProject::Files); - m_includesIDocument = new GenericProjectFile(this, m_includesFileName, GenericProject::Configuration); - m_configIDocument = new GenericProjectFile(this, m_configFileName, GenericProject::Configuration); + m_filesIDocument = new GenericProjectFile(this, FileName::fromString(m_filesFileName), GenericProject::Files); + m_includesIDocument = new GenericProjectFile(this, FileName::fromString(m_includesFileName), GenericProject::Configuration); + m_configIDocument = new GenericProjectFile(this, FileName::fromString(m_configFileName), GenericProject::Configuration); DocumentManager::addDocument(document()); DocumentManager::addDocument(m_filesIDocument); @@ -461,14 +462,14 @@ Project::RestoreResult GenericProject::fromMap(const QVariantMap &map, QString * // //////////////////////////////////////////////////////////////////////////////////// -GenericProjectFile::GenericProjectFile(GenericProject *parent, QString fileName, +GenericProjectFile::GenericProjectFile(GenericProject *parent, const Utils::FileName &fileName, GenericProject::RefreshOptions options) : m_project(parent), m_options(options) { setId("Generic.ProjectFile"); setMimeType(Constants::GENERICMIMETYPE); - setFilePath(Utils::FileName::fromString(fileName)); + setFilePath(fileName); } IDocument::ReloadBehavior GenericProjectFile::reloadBehavior(ChangeTrigger state, ChangeType type) const diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index 7dac99847b..12e02de5b1 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -48,7 +48,7 @@ class GenericProject : public ProjectExplorer::Project Q_OBJECT public: - explicit GenericProject(const QString &filename); + explicit GenericProject(const Utils::FileName &filename); ~GenericProject() override; QString filesFileName() const; @@ -112,7 +112,8 @@ private: class GenericProjectFile : public Core::IDocument { public: - GenericProjectFile(GenericProject *parent, QString fileName, GenericProject::RefreshOptions options); + GenericProjectFile(GenericProject *parent, const Utils::FileName &fileName, + GenericProject::RefreshOptions options); ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp index 9372153793..6a61790fd8 100644 --- a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp +++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp @@ -24,7 +24,6 @@ ****************************************************************************/ #include "genericprojectfileseditor.h" -#include "genericprojectmanager.h" #include "genericprojectconstants.h" #include <coreplugin/editormanager/editormanager.h> diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.cpp b/src/plugins/genericprojectmanager/genericprojectmanager.cpp deleted file mode 100644 index 2d3784d6d6..0000000000 --- a/src/plugins/genericprojectmanager/genericprojectmanager.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "genericprojectmanager.h" -#include "genericprojectconstants.h" -#include "genericproject.h" - -namespace GenericProjectManager { -namespace Internal { - -QString Manager::mimeType() const -{ - return QLatin1String(Constants::GENERICMIMETYPE); -} - -ProjectExplorer::Project *Manager::openProject(const QString &fileName) -{ - return new GenericProject(fileName); -} - -} // namespace Internal -} // namespace GenericProjectManager diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.h b/src/plugins/genericprojectmanager/genericprojectmanager.h deleted file mode 100644 index d86df741f4..0000000000 --- a/src/plugins/genericprojectmanager/genericprojectmanager.h +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include <projectexplorer/iprojectmanager.h> - -namespace GenericProjectManager { -namespace Internal { - -class Manager : public ProjectExplorer::IProjectManager -{ - Q_OBJECT - -public: - virtual QString mimeType() const override; - virtual ProjectExplorer::Project *openProject(const QString &fileName) override; -}; - -} // namespace Internal -} // namespace GenericProjectManager diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.pro b/src/plugins/genericprojectmanager/genericprojectmanager.pro index 1d325cef32..b4a8cf0631 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.pro +++ b/src/plugins/genericprojectmanager/genericprojectmanager.pro @@ -2,7 +2,6 @@ include(../../qtcreatorplugin.pri) HEADERS = genericproject.h \ genericprojectplugin.h \ - genericprojectmanager.h \ genericprojectconstants.h \ genericprojectnodes.h \ genericprojectwizard.h \ @@ -12,7 +11,6 @@ HEADERS = genericproject.h \ filesselectionwizardpage.h SOURCES = genericproject.cpp \ genericprojectplugin.cpp \ - genericprojectmanager.cpp \ genericprojectnodes.cpp \ genericprojectwizard.cpp \ genericprojectfileseditor.cpp \ diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.qbs b/src/plugins/genericprojectmanager/genericprojectmanager.qbs index 1027e04f89..74fc022ec2 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.qbs +++ b/src/plugins/genericprojectmanager/genericprojectmanager.qbs @@ -30,8 +30,6 @@ QtcPlugin { "genericprojectconstants.h", "genericprojectfileseditor.cpp", "genericprojectfileseditor.h", - "genericprojectmanager.cpp", - "genericprojectmanager.h", "genericprojectnodes.cpp", "genericprojectnodes.h", "genericprojectplugin.cpp", diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp index 3141ecf255..fb69394ff5 100644 --- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp +++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp @@ -26,7 +26,6 @@ #include "genericprojectplugin.h" #include "genericbuildconfiguration.h" -#include "genericprojectmanager.h" #include "genericprojectwizard.h" #include "genericprojectconstants.h" #include "genericprojectfileseditor.h" @@ -39,6 +38,7 @@ #include <coreplugin/actionmanager/command.h> #include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/projectmanager.h> #include <projectexplorer/projecttree.h> #include <projectexplorer/selectablefilesmodel.h> @@ -59,7 +59,8 @@ bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage { Q_UNUSED(errorMessage) - addAutoReleasedObject(new Manager); + ProjectManager::registerProjectType<GenericProject>(Constants::GENERICMIMETYPE); + addAutoReleasedObject(new ProjectFilesFactory); addAutoReleasedObject(new GenericMakeStepFactory); addAutoReleasedObject(new GenericBuildConfigurationFactory); diff --git a/src/plugins/nim/nim.pro b/src/plugins/nim/nim.pro index 90a8303725..85e3881e92 100644 --- a/src/plugins/nim/nim.pro +++ b/src/plugins/nim/nim.pro @@ -16,7 +16,6 @@ HEADERS += \ tools/nimlexer.h \ tools/sourcecodestream.h \ project/nimproject.h \ - project/nimprojectmanager.h \ project/nimprojectnode.h \ project/nimbuildconfiguration.h \ project/nimbuildconfigurationfactory.h \ @@ -47,7 +46,6 @@ SOURCES += \ editor/nimindenter.cpp \ tools/nimlexer.cpp \ project/nimproject.cpp \ - project/nimprojectmanager.cpp \ project/nimprojectnode.cpp \ project/nimbuildconfiguration.cpp \ project/nimbuildconfigurationfactory.cpp \ diff --git a/src/plugins/nim/nim.qbs b/src/plugins/nim/nim.qbs index d894d2a30a..94ec0a0de4 100644 --- a/src/plugins/nim/nim.qbs +++ b/src/plugins/nim/nim.qbs @@ -45,7 +45,6 @@ QtcPlugin { "nimcompilercleanstepconfigwidget.h", "nimcompilercleanstepconfigwidget.cpp", "nimcompilercleanstepconfigwidget.ui", "nimcompilercleanstepfactory.h", "nimcompilercleanstepfactory.cpp", "nimproject.h", "nimproject.cpp", - "nimprojectmanager.h", "nimprojectmanager.cpp", "nimprojectnode.h", "nimprojectnode.cpp", "nimrunconfiguration.h", "nimrunconfiguration.cpp", "nimrunconfigurationfactory.h", "nimrunconfigurationfactory.cpp", diff --git a/src/plugins/nim/nimplugin.cpp b/src/plugins/nim/nimplugin.cpp index 4017f5e950..d884e43f6a 100644 --- a/src/plugins/nim/nimplugin.cpp +++ b/src/plugins/nim/nimplugin.cpp @@ -31,7 +31,7 @@ #include "project/nimbuildconfigurationfactory.h" #include "project/nimcompilerbuildstepfactory.h" #include "project/nimcompilercleanstepfactory.h" -#include "project/nimprojectmanager.h" +#include "project/nimproject.h" #include "project/nimrunconfigurationfactory.h" #include "project/nimruncontrolfactory.h" #include "project/nimtoolchainfactory.h" @@ -41,6 +41,7 @@ #include "settings/nimsnippetprovider.h" #include <coreplugin/fileiconprovider.h> +#include <projectexplorer/projectmanager.h> #include <projectexplorer/toolchainmanager.h> #include <QtPlugin> @@ -71,7 +72,6 @@ bool NimPlugin::initialize(const QStringList &arguments, QString *errorMessage) addAutoReleasedObject(new NimSettings); addAutoReleasedObject(new NimSnippetProvider); addAutoReleasedObject(new NimEditorFactory); - addAutoReleasedObject(new NimProjectManager); addAutoReleasedObject(new NimBuildConfigurationFactory); addAutoReleasedObject(new NimRunConfigurationFactory); addAutoReleasedObject(new NimCompilerBuildStepFactory); @@ -81,6 +81,8 @@ bool NimPlugin::initialize(const QStringList &arguments, QString *errorMessage) addAutoReleasedObject(new NimCodeStylePreferencesFactory); addAutoReleasedObject(new NimToolChainFactory); + ProjectExplorer::ProjectManager::registerProjectType<NimProject>(Constants::C_NIM_PROJECT_MIMETYPE); + return true; } diff --git a/src/plugins/nim/project/nimproject.cpp b/src/plugins/nim/project/nimproject.cpp index bb3a8ef261..4794653c9e 100644 --- a/src/plugins/nim/project/nimproject.cpp +++ b/src/plugins/nim/project/nimproject.cpp @@ -26,7 +26,6 @@ #include "nimproject.h" #include "nimbuildconfiguration.h" #include "nimprojectnode.h" -#include "nimprojectmanager.h" #include "nimtoolchain.h" #include "../nimconstants.h" @@ -54,12 +53,12 @@ namespace Nim { const int MIN_TIME_BETWEEN_PROJECT_SCANS = 4500; -NimProject::NimProject(const QString &fileName) +NimProject::NimProject(const FileName &fileName) { setId(Constants::C_NIMPROJECT_ID); setDocument(new TextEditor::TextDocument); - document()->setFilePath(FileName::fromString(fileName)); - QFileInfo fi = QFileInfo(fileName); + document()->setFilePath(fileName); + QFileInfo fi = fileName.toFileInfo(); QDir dir = fi.dir(); setRootProjectNode(new NimProjectNode(*this, FileName::fromString(dir.absolutePath()))); rootProjectNode()->setDisplayName(dir.dirName()); diff --git a/src/plugins/nim/project/nimproject.h b/src/plugins/nim/project/nimproject.h index 385942dbe4..7ea82a0c81 100644 --- a/src/plugins/nim/project/nimproject.h +++ b/src/plugins/nim/project/nimproject.h @@ -39,7 +39,7 @@ class NimProject : public ProjectExplorer::Project Q_OBJECT public: - explicit NimProject(const QString &fileName); + explicit NimProject(const Utils::FileName &fileName); QString displayName() const override; QStringList files(FilesMode) const override; diff --git a/src/plugins/nim/project/nimprojectmanager.cpp b/src/plugins/nim/project/nimprojectmanager.cpp deleted file mode 100644 index 3235b0f0de..0000000000 --- a/src/plugins/nim/project/nimprojectmanager.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) Filippo Cucchetto <filippocucchetto@gmail.com> -** Contact: http://www.qt.io/licensing -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "nimprojectmanager.h" -#include "nimproject.h" - -#include "../nimconstants.h" - -using namespace ProjectExplorer; - -namespace Nim { - -QString NimProjectManager::mimeType() const -{ - return QLatin1String(Constants::C_NIM_PROJECT_MIMETYPE); -} - -Project *NimProjectManager::openProject(const QString &fileName) -{ - return new NimProject(fileName); -} - -} diff --git a/src/plugins/nim/project/nimprojectmanager.h b/src/plugins/nim/project/nimprojectmanager.h deleted file mode 100644 index a5336e465b..0000000000 --- a/src/plugins/nim/project/nimprojectmanager.h +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) Filippo Cucchetto <filippocucchetto@gmail.com> -** Contact: http://www.qt.io/licensing -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include <projectexplorer/iprojectmanager.h> - -namespace Nim { - -class NimProjectManager : public ProjectExplorer::IProjectManager -{ - Q_OBJECT - -public: - QString mimeType() const override; - - ProjectExplorer::Project *openProject(const QString &fileName) override; -}; - -} diff --git a/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp index 23576222a3..5faa5c3642 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonkitspage.cpp @@ -26,10 +26,10 @@ #include "jsonkitspage.h" #include "jsonwizard.h" -#include "../iprojectmanager.h" #include "../kit.h" #include "../project.h" #include "../projectexplorer.h" +#include "../projectmanager.h" #include <coreplugin/featureprovider.h> @@ -102,19 +102,16 @@ void JsonKitsPage::setPreferredFeatures(const QVariant &data) void JsonKitsPage::setupProjectFiles(const JsonWizard::GeneratorFiles &files) { - Project *project = nullptr; - for (const JsonWizard::GeneratorFile &f : files) { if (f.file.attributes() & GeneratedFile::OpenProjectAttribute) { const QFileInfo fi(f.file.path()); const QString path = fi.absoluteFilePath(); - IProjectManager *manager = IProjectManager::managerForMimeType(Utils::mimeTypeForFile(fi)); - project = manager ? manager->openProject(path) : nullptr; + Project *project = ProjectManager::openProject(Utils::mimeTypeForFile(fi), + Utils::FileName::fromString(path)); if (project) { if (setupProject(project)) project->saveSettings(); delete project; - project = nullptr; } } } diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardscannergenerator.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardscannergenerator.cpp index 88efc6f5e7..08d3ed1f88 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardscannergenerator.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardscannergenerator.cpp @@ -26,7 +26,7 @@ #include "jsonwizardscannergenerator.h" #include "../projectexplorer.h" -#include "../iprojectmanager.h" +#include "../projectmanager.h" #include "jsonwizard.h" #include "jsonwizardfactory.h" @@ -105,7 +105,7 @@ Core::GeneratedFiles JsonWizardScannerGenerator::fileList(Utils::MacroExpander * for (auto it = result.begin(); it != result.end(); ++it) { const QString relPath = project.relativeFilePath(it->path()); it->setBinary(binaryPattern.match(relPath).hasMatch()); - bool found = IProjectManager::managerForMimeType(Utils::mimeTypeForFile(relPath)); + bool found = ProjectManager::canOpenProjectForMimeType(Utils::mimeTypeForFile(relPath)); if (found && !(onlyFirst && projectCount++)) it->setAttributes(it->attributes() | Core::GeneratedFile::OpenProjectAttribute); } diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 081f7559eb..fbddc1a7a2 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -41,6 +41,7 @@ #include "project.h" #include "projectexplorersettings.h" #include "projectexplorersettingspage.h" +#include "projectmanager.h" #include "removetaskhandler.h" #include "kitfeatureprovider.h" #include "kitmanager.h" @@ -62,11 +63,11 @@ #include "codestylesettingspropertiespage.h" #include "dependenciespanel.h" #include "foldernavigationwidget.h" -#include "iprojectmanager.h" #include "appoutputpane.h" #include "processstep.h" #include "kitinformation.h" #include "projectfilewizardextension.h" +#include "projectmanager.h" #include "projecttreewidget.h" #include "projectwindow.h" #include "runsettingspropertiespage.h" @@ -340,7 +341,7 @@ public: QStringList m_profileMimeTypes; AppOutputPane *m_outputPane = nullptr; - Utils::ObjectPool<IProjectManager> m_projectManagers; + QHash<QString, std::function<Project *(const Utils::FileName &)>> m_projectCreators; QList<QPair<QString, QString> > m_recentProjects; // pair of filename, displayname static const int m_maxRecentProjects = 25; @@ -1472,15 +1473,13 @@ void ProjectExplorerPlugin::extensionsInitialized() }); factory->addMimeType(QStringLiteral("inode/directory")); - dd->m_projectManagers.forEachObject([&](IProjectManager *manager) { - const QString mimeType = manager->mimeType(); + for (const QString &mimeType : dd->m_projectCreators.keys()) { factory->addMimeType(mimeType); Utils::MimeType mime = Utils::mimeTypeForName(mimeType); allGlobPatterns.append(mime.globPatterns()); filterStrings.append(mime.filterString()); - dd->m_profileMimeTypes += mimeType; - }); + } addAutoReleasedObject(factory); @@ -1693,11 +1692,11 @@ ProjectExplorerPlugin::OpenProjectResult ProjectExplorerPlugin::openProjects(con Utils::MimeType mt = Utils::mimeTypeForFile(fileName); if (mt.isValid()) { - if (IProjectManager *manager = IProjectManager::managerForMimeType(mt)) { + if (ProjectManager::canOpenProjectForMimeType(mt)) { 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)) { + } else if (Project *pro = ProjectManager::openProject(mt, Utils::FileName::fromString(filePath))) { QObject::connect(pro, &Project::parsingFinished, [pro]() { emit SessionManager::instance()->projectFinishedParsing(pro); }); @@ -1785,8 +1784,8 @@ void ProjectExplorerPluginPrivate::determineSessionToRestoreAtStartup() QStringList ProjectExplorerPlugin::projectFileGlobs() { QStringList result; - foreach (const IProjectManager *ipm, ExtensionSystem::PluginManager::getObjects<IProjectManager>()) { - Utils::MimeType mimeType = Utils::mimeTypeForName(ipm->mimeType()); + for (const QString &mt : dd->m_projectCreators.keys()) { + Utils::MimeType mimeType = Utils::mimeTypeForName(mt); if (mimeType.isValid()) { const QStringList patterns = mimeType.globPatterns(); if (!patterns.isEmpty()) @@ -3386,11 +3385,11 @@ ProjectExplorerSettings ProjectExplorerPlugin::projectExplorerSettings() QStringList ProjectExplorerPlugin::projectFilePatterns() { QStringList patterns; - dd->m_projectManagers.forEachObject([&](IProjectManager *pm) { - Utils::MimeType mt = Utils::mimeTypeForName(pm->mimeType()); + for (const QString &mime : dd->m_projectCreators.keys()) { + Utils::MimeType mt = Utils::mimeTypeForName(mime); if (mt.isValid()) patterns.append(mt.globPatterns()); - }); + } return patterns; } @@ -3407,17 +3406,32 @@ QList<QPair<QString, QString> > ProjectExplorerPlugin::recentProjects() return dd->recentProjects(); } -IProjectManager::IProjectManager() +void ProjectManager::registerProjectCreator(const QString &mimeType, + const std::function<Project *(const Utils::FileName &)> &creator) { - dd->m_projectManagers.addObject(this); + dd->m_projectCreators[mimeType] = creator; } -IProjectManager *IProjectManager::managerForMimeType(const Utils::MimeType &mt) +Project *ProjectManager::openProject(const Utils::MimeType &mt, const Utils::FileName &fileName) { - if (!mt.isValid()) - return nullptr; - auto pred = [mt](IProjectManager *m) { return mt.matchesName(m->mimeType()); }; - return dd->m_projectManagers.findObject(pred); + if (mt.isValid()) { + for (const QString &mimeType : dd->m_projectCreators.keys()) { + if (mt.matchesName(mimeType)) + return dd->m_projectCreators[mimeType](fileName); + } + } + return nullptr; +} + +bool ProjectManager::canOpenProjectForMimeType(const Utils::MimeType &mt) +{ + if (mt.isValid()) { + for (const QString &mimeType : dd->m_projectCreators.keys()) { + if (mt.matchesName(mimeType)) + return true; + } + } + return false; } } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 65c86e5a7b..d05aec8848 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -59,7 +59,7 @@ HEADERS += projectexplorer.h \ projectexplorerconstants.h \ projectexplorersettings.h \ project.h \ - iprojectmanager.h \ + projectmanager.h \ currentprojectfilter.h \ allprojectsfind.h \ buildstep.h \ diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs index 4a0ed91714..7fd2062e9d 100644 --- a/src/plugins/projectexplorer/projectexplorer.qbs +++ b/src/plugins/projectexplorer/projectexplorer.qbs @@ -82,7 +82,6 @@ Project { "importwidget.cpp", "importwidget.h", "ioutputparser.cpp", "ioutputparser.h", "ipotentialkit.h", - "iprojectmanager.h", "itaskhandler.h", "kit.cpp", "kit.h", "kitchooser.cpp", "kitchooser.h", @@ -117,6 +116,7 @@ Project { "projectfilewizardextension.cpp", "projectfilewizardextension.h", "projectimporter.cpp", "projectimporter.h", "projectmacroexpander.cpp", "projectmacroexpander.h", + "projectmanager.h", "projectmodels.cpp", "projectmodels.h", "projectnodes.cpp", "projectnodes.h", "projectpanelfactory.cpp", "projectpanelfactory.h", diff --git a/src/plugins/projectexplorer/iprojectmanager.h b/src/plugins/projectexplorer/projectmanager.h index 0e4d5f0733..1e90f958c1 100644 --- a/src/plugins/projectexplorer/iprojectmanager.h +++ b/src/plugins/projectexplorer/projectmanager.h @@ -27,26 +27,32 @@ #include "projectexplorer_export.h" -#include <QObject> - -namespace Utils { class MimeType; } +namespace Utils { +class FileName; +class MimeType; +} // Utils namespace ProjectExplorer { class Project; -class PROJECTEXPLORER_EXPORT IProjectManager : public QObject +class PROJECTEXPLORER_EXPORT ProjectManager { - Q_OBJECT - public: - IProjectManager(); - // Finds a IProjectManager matching the passed MimeType. - static IProjectManager *managerForMimeType(const Utils::MimeType &mt); - - virtual QString mimeType() const = 0; - // FileName is a canonical path of a checked-to-exist file. - virtual Project *openProject(const QString &fileName) = 0; + static bool canOpenProjectForMimeType(const Utils::MimeType &mt); + static Project *openProject(const Utils::MimeType &mt, const Utils::FileName &fileName); + + template <typename T> + static void registerProjectType(const QString &mimeType) + { + ProjectManager::registerProjectCreator(mimeType, [](const Utils::FileName &fileName) { + return new T(fileName); + }); + } + +private: + static void registerProjectCreator(const QString &mimeType, + const std::function<Project *(const Utils::FileName &)> &); }; } // namespace ProjectExplorer diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp index 328cd59c92..67b13c5a0a 100644 --- a/src/plugins/pythoneditor/pythoneditorplugin.cpp +++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp @@ -43,10 +43,10 @@ #include <projectexplorer/runconfiguration.h> #include <projectexplorer/runconfigurationaspects.h> #include <projectexplorer/project.h> +#include <projectexplorer/projectmanager.h> +#include <projectexplorer/projectnodes.h> #include <projectexplorer/runnables.h> #include <projectexplorer/target.h> -#include <projectexplorer/iprojectmanager.h> -#include <projectexplorer/projectnodes.h> #include <texteditor/texteditorconstants.h> @@ -77,7 +77,6 @@ const char PythonProjectContext[] = "PythonProjectContext"; class PythonRunConfiguration; class PythonProjectFile; -class PythonProject; static QString scriptFromId(Core::Id id) { @@ -92,7 +91,7 @@ static Core::Id idFromScript(const QString &target) class PythonProject : public Project { public: - explicit PythonProject(const QString &filename); + explicit PythonProject(const Utils::FileName &filename); QString displayName() const override { return m_projectName; } @@ -123,11 +122,11 @@ private: class PythonProjectFile : public Core::IDocument { public: - PythonProjectFile(PythonProject *parent, QString fileName) : m_project(parent) + PythonProjectFile(PythonProject *parent, const FileName &fileName) : m_project(parent) { setId("Generic.ProjectFile"); setMimeType(PythonMimeType); - setFilePath(FileName::fromString(fileName)); + setFilePath(fileName); } ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override @@ -350,13 +349,6 @@ PythonRunConfigurationWidget::PythonRunConfigurationWidget(PythonRunConfiguratio setEnabled(runConfiguration->isEnabled()); } -class PythonProjectManager : public IProjectManager -{ -public: - QString mimeType() const override { return QLatin1String(PythonMimeType); } - Project *openProject(const QString &fileName) override { return new PythonProject(fileName); } -}; - class PythonRunConfigurationFactory : public IRunConfigurationFactory { public: @@ -427,7 +419,7 @@ private: } }; -PythonProject::PythonProject(const QString &fileName) +PythonProject::PythonProject(const FileName &fileName) { setId(PythonProjectId); setDocument(new PythonProjectFile(this, fileName)); @@ -858,7 +850,8 @@ bool PythonEditorPlugin::initialize(const QStringList &arguments, QString *error Q_UNUSED(arguments) Q_UNUSED(errorMessage) - addAutoReleasedObject(new PythonProjectManager); + ProjectManager::registerProjectType<PythonProject>(PythonMimeType); + addAutoReleasedObject(new PythonEditorFactory); addAutoReleasedObject(new PythonRunConfigurationFactory); addAutoReleasedObject(new PythonRunControlFactory); diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 31023041ed..82fe5d6310 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -116,8 +116,8 @@ private: // QbsProject: // -------------------------------------------------------------------- -QbsProject::QbsProject(const QString &fileName) : - m_projectName(QFileInfo(fileName).completeBaseName()), +QbsProject::QbsProject(const FileName &fileName) : + m_projectName(fileName.toFileInfo().completeBaseName()), m_qbsProjectParser(0), m_qbsUpdateFutureInterface(0), m_parsingScheduled(false), @@ -766,7 +766,7 @@ void QbsProject::updateDocuments(const QSet<QString> &files) } QSet<IDocument *> toAdd; foreach (const QString &f, filesToAdd) - toAdd.insert(new QbsProjectFile(this, f)); + toAdd.insert(new QbsProjectFile(this, FileName::fromString(f))); DocumentManager::addDocuments(toAdd.toList()); m_qbsDocuments.unite(toAdd); diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index 00bf5f2993..6e966c56f0 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -58,7 +58,7 @@ class QbsProject : public ProjectExplorer::Project Q_OBJECT public: - explicit QbsProject(const QString &filename); + explicit QbsProject(const Utils::FileName &filename); ~QbsProject() override; QString displayName() const override; diff --git a/src/plugins/qbsprojectmanager/qbsprojectfile.cpp b/src/plugins/qbsprojectmanager/qbsprojectfile.cpp index 21455d7e4a..59dbff968f 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectfile.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectfile.cpp @@ -31,12 +31,12 @@ namespace QbsProjectManager { namespace Internal { -QbsProjectFile::QbsProjectFile(QbsProject *parent, QString fileName) : Core::IDocument(parent), +QbsProjectFile::QbsProjectFile(QbsProject *parent, const Utils::FileName &fileName) : Core::IDocument(parent), m_project(parent) { setId("Qbs.ProjectFile"); - setMimeType(QLatin1String(Constants::MIME_TYPE)); - setFilePath(Utils::FileName::fromString(fileName)); + setMimeType(Constants::MIME_TYPE); + setFilePath(fileName); } Core::IDocument::ReloadBehavior QbsProjectFile::reloadBehavior(ChangeTrigger state, ChangeType type) const diff --git a/src/plugins/qbsprojectmanager/qbsprojectfile.h b/src/plugins/qbsprojectmanager/qbsprojectfile.h index 80cf70113b..b0879fcee2 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectfile.h +++ b/src/plugins/qbsprojectmanager/qbsprojectfile.h @@ -35,7 +35,7 @@ class QbsProject; class QbsProjectFile : public Core::IDocument { public: - QbsProjectFile(QbsProject *parent, QString fileName); + QbsProjectFile(QbsProject *parent, const Utils::FileName &fileName); ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp index 853077e86c..e9eff1f483 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp @@ -100,16 +100,6 @@ QbsManager::~QbsManager() m_instance = nullptr; } -QString QbsManager::mimeType() const -{ - return QLatin1String(QmlJSTools::Constants::QBS_MIMETYPE); -} - -ProjectExplorer::Project *QbsManager::openProject(const QString &fileName) -{ - return new QbsProject(fileName); -} - QString QbsManager::profileForKit(const ProjectExplorer::Kit *k) { if (!k) diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.h b/src/plugins/qbsprojectmanager/qbsprojectmanager.h index 458690565c..ec0ab7a6ab 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.h @@ -27,8 +27,6 @@ #include "qbsprojectmanager_global.h" -#include <projectexplorer/iprojectmanager.h> - #include <QList> #include <QString> #include <QVariantMap> @@ -45,7 +43,7 @@ namespace Internal { class DefaultPropertyProvider; class QbsLogSink; -class QbsManager : public ProjectExplorer::IProjectManager +class QbsManager : public QObject { Q_OBJECT @@ -53,9 +51,6 @@ public: QbsManager(); ~QbsManager(); - QString mimeType() const override; - ProjectExplorer::Project *openProject(const QString &fileName) override; - // QBS profiles management: static QString profileForKit(const ProjectExplorer::Kit *k); void setProfileForKit(const QString &name, const ProjectExplorer::Kit *k); diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp index 3d7c299474..f6ca67c018 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp @@ -46,14 +46,18 @@ #include <coreplugin/icore.h> #include <coreplugin/idocument.h> #include <coreplugin/fileiconprovider.h> + #include <projectexplorer/buildmanager.h> #include <projectexplorer/project.h> #include <projectexplorer/projectexplorer.h> -#include <projectexplorer/projecttree.h> #include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/projectmanager.h> +#include <projectexplorer/projecttree.h> #include <projectexplorer/session.h> #include <projectexplorer/target.h> + #include <qtsupport/qtsupportconstants.h> +#include <qmljstools/qmljstoolsconstants.h> #include <utils/fileutils.h> #include <utils/qtcassert.h> @@ -87,6 +91,8 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString * Core::FileIconProvider::registerIconOverlayForSuffix(ProjectExplorer::Constants::FILEOVERLAY_QT, "qbs"); + ProjectManager::registerProjectType<QbsProject>(QmlJSTools::Constants::QBS_MIMETYPE); + //create and register objects addAutoReleasedObject(new QbsManager); addAutoReleasedObject(new QbsBuildConfigurationFactory); diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 16a00a5f70..7d23622385 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -77,7 +77,7 @@ namespace Internal { class QmakeProjectFile : public Core::IDocument { public: - QmakeProjectFile(const QString &filePath); + explicit QmakeProjectFile(const FileName &fileName); ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override; bool reload(QString *errorString, ReloadFlag flag, ChangeType type) override; @@ -158,11 +158,11 @@ QDebug operator<<(QDebug d, const QmakeProjectFiles &f) // ----------- QmakeProjectFile -QmakeProjectFile::QmakeProjectFile(const QString &filePath) +QmakeProjectFile::QmakeProjectFile(const FileName &fileName) { setId("Qmake.ProFile"); - setMimeType(QLatin1String(QmakeProjectManager::Constants::PROFILE_MIMETYPE)); - setFilePath(FileName::fromString(filePath)); + setMimeType(QmakeProjectManager::Constants::PROFILE_MIMETYPE); + setFilePath(fileName); } Core::IDocument::ReloadBehavior QmakeProjectFile::reloadBehavior(ChangeTrigger state, ChangeType type) const @@ -190,7 +190,7 @@ static QList<QmakeProject *> s_projects; QmakeProject manages information about an individual Qt 4 (.pro) project file. */ -QmakeProject::QmakeProject(const QString &fileName) : +QmakeProject::QmakeProject(const FileName &fileName) : m_projectFiles(new QmakeProjectFiles), m_qmakeVfs(new QMakeVfs), m_cppCodeModelUpdater(new CppTools::CppProjectUpdater(this)) diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 1be48a4f18..fb96fbc266 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -60,7 +60,7 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeProject : public ProjectExplorer::Project Q_OBJECT public: - explicit QmakeProject(const QString &proFile); + explicit QmakeProject(const Utils::FileName &proFile); ~QmakeProject() final; QmakeProFile *rootProFile() const; diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp index d2d9cce65e..4a54beadd5 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp @@ -53,16 +53,6 @@ using namespace TextEditor; namespace QmakeProjectManager { -QString QmakeManager::mimeType() const -{ - return QLatin1String(QmakeProjectManager::Constants::PROFILE_MIMETYPE); -} - -ProjectExplorer::Project *QmakeManager::openProject(const QString &fileName) -{ - return new QmakeProject(fileName); -} - Node *QmakeManager::contextNode() { return ProjectTree::currentNode(); diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h index 170343a531..b7869f9374 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.h @@ -27,7 +27,6 @@ #include "qmakeprojectmanager_global.h" -#include <projectexplorer/iprojectmanager.h> #include <projectexplorer/projectnodes.h> namespace Core { class IEditor; } @@ -41,14 +40,12 @@ class ToolChain; namespace QmakeProjectManager { -class QMAKEPROJECTMANAGER_EXPORT QmakeManager : public ProjectExplorer::IProjectManager +class QMAKEPROJECTMANAGER_EXPORT QmakeManager : public QObject { Q_OBJECT public: void notifyChanged(const Utils::FileName &name); - QString mimeType() const override; - ProjectExplorer::Project *openProject(const QString &fileName) override; // Context information used in the slot implementations static ProjectExplorer::Node *contextNode(); diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp index df5b0c8741..a771f344d5 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp @@ -45,18 +45,22 @@ #include "profilehighlighter.h" #include <coreplugin/icore.h> -#include <projectexplorer/buildmanager.h> -#include <projectexplorer/session.h> -#include <projectexplorer/projecttree.h> -#include <projectexplorer/target.h> #include <coreplugin/coreconstants.h> #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/actioncontainer.h> #include <coreplugin/actionmanager/command.h> #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/ieditor.h> + +#include <projectexplorer/buildmanager.h> +#include <projectexplorer/session.h> +#include <projectexplorer/projectmanager.h> +#include <projectexplorer/projecttree.h> +#include <projectexplorer/target.h> + #include <texteditor/texteditoractionhandler.h> #include <texteditor/texteditorconstants.h> + #include <utils/hostosinfo.h> #include <utils/parameteraction.h> @@ -82,6 +86,8 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString m_qmakeProjectManager = new QmakeManager; addAutoReleasedObject(m_qmakeProjectManager); + ProjectManager::registerProjectType<QmakeProject>(QmakeProjectManager::Constants::PROFILE_MIMETYPE); + ProjectExplorer::KitManager::registerKitInformation(new QmakeKitInformation); IWizardFactory::registerFactoryCreator([] { diff --git a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp index c716c4117b..f740378580 100644 --- a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp @@ -256,7 +256,7 @@ bool BaseQmakeProjectWizardDialog::writeUserFile(const QString &proFileName) con if (!m_targetSetupPage) return false; - QmakeProject *pro = new QmakeProject(proFileName); + QmakeProject *pro = new QmakeProject(Utils::FileName::fromString(proFileName)); bool success = m_targetSetupPage->setupProject(pro); if (success) pro->saveSettings(); diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index 909f6d14c7..3bfae5970e 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -30,19 +30,20 @@ #include "qmlprojectrunconfiguration.h" #include "qmlprojectconstants.h" #include "qmlprojectnodes.h" -#include "qmlprojectmanager.h" #include <coreplugin/icontext.h> #include <coreplugin/icore.h> #include <coreplugin/messagemanager.h> #include <coreplugin/documentmanager.h> -#include <qtsupport/baseqtversion.h> -#include <qtsupport/qtkitinformation.h> -#include <qmljs/qmljsmodelmanagerinterface.h> + #include <projectexplorer/kitinformation.h> #include <projectexplorer/kitmanager.h> #include <projectexplorer/target.h> + +#include <qtsupport/baseqtversion.h> +#include <qtsupport/qtkitinformation.h> #include <qtsupport/qtsupportconstants.h> +#include <qmljs/qmljsmodelmanagerinterface.h> #include <utils/algorithm.h> diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp b/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp deleted file mode 100644 index 363bbbc162..0000000000 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "qmlprojectmanager.h" -#include "qmlprojectconstants.h" -#include "qmlproject.h" - -namespace QmlProjectManager { -namespace Internal { - -QString Manager::mimeType() const -{ - return QLatin1String(Constants::QMLPROJECT_MIMETYPE); -} - -ProjectExplorer::Project *Manager::openProject(const QString &fileName) -{ - return new QmlProject(Utils::FileName::fromString(fileName)); -} - -} // namespace Internal -} // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.h b/src/plugins/qmlprojectmanager/qmlprojectmanager.h deleted file mode 100644 index fca006db9b..0000000000 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.h +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include <projectexplorer/iprojectmanager.h> - -namespace QmlProjectManager { -namespace Internal { - -class Manager: public ProjectExplorer::IProjectManager -{ - Q_OBJECT - -public: - QString mimeType() const override; - ProjectExplorer::Project *openProject(const QString &fileName) override; -}; - -} // namespace Internal -} // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro index 8545eee471..a28281a17d 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro +++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro @@ -7,7 +7,6 @@ DEFINES += QMLPROJECTMANAGER_LIBRARY HEADERS += qmlproject.h \ qmlprojectenvironmentaspect.h \ qmlprojectplugin.h \ - qmlprojectmanager.h \ qmlprojectconstants.h \ qmlprojectnodes.h \ qmlprojectfile.h \ @@ -20,7 +19,6 @@ HEADERS += qmlproject.h \ SOURCES += qmlproject.cpp \ qmlprojectenvironmentaspect.cpp \ qmlprojectplugin.cpp \ - qmlprojectmanager.cpp \ qmlprojectnodes.cpp \ qmlprojectfile.cpp \ qmlprojectrunconfiguration.cpp \ diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs b/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs index a138a95bd9..a033afb338 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs +++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs @@ -19,7 +19,6 @@ QtcPlugin { "qmlprojectconstants.h", "qmlprojectenvironmentaspect.cpp", "qmlprojectenvironmentaspect.h", "qmlprojectfile.cpp", "qmlprojectfile.h", - "qmlprojectmanager.cpp", "qmlprojectmanager.h", "qmlprojectmanager_global.h", "qmlprojectmanagerconstants.h", "qmlprojectnodes.cpp", "qmlprojectnodes.h", diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp index 7ce0b2c9ed..a1a3666c50 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp @@ -24,7 +24,6 @@ ****************************************************************************/ #include "qmlprojectplugin.h" -#include "qmlprojectmanager.h" #include "qmlproject.h" #include "qmlprojectrunconfigurationfactory.h" #include "fileformat/qmlprojectfileformat.h" @@ -32,7 +31,9 @@ #include <coreplugin/fileiconprovider.h> #include <coreplugin/icore.h> -#include <qtsupport/qtsupportconstants.h> +#include <projectexplorer/projectmanager.h> + +#include <qmljstools/qmljstoolsconstants.h> #include <QtPlugin> @@ -40,6 +41,8 @@ #include <QMessageBox> #include <QPushButton> +using namespace ProjectExplorer; + namespace QmlProjectManager { QmlProjectPlugin::QmlProjectPlugin() @@ -53,9 +56,9 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage) { Q_UNUSED(errorMessage) - addAutoReleasedObject(new Internal::Manager); addAutoReleasedObject(new Internal::QmlProjectRunConfigurationFactory); + ProjectManager::registerProjectType<QmlProject>(QmlJSTools::Constants::QMLPROJECT_MIMETYPE); Core::FileIconProvider::registerIconOverlayForSuffix(":/qmlproject/images/qmlproject.png", "qmlproject"); return true; } |