diff options
Diffstat (limited to 'src/plugins/clangstaticanalyzer/clangstaticanalyzerplugin.cpp')
-rw-r--r-- | src/plugins/clangstaticanalyzer/clangstaticanalyzerplugin.cpp | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerplugin.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerplugin.cpp new file mode 100644 index 0000000000..eb9683e3d4 --- /dev/null +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerplugin.cpp @@ -0,0 +1,184 @@ +/**************************************************************************** +** +** 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 "clangstaticanalyzerplugin.h" + +#include "clangstaticanalyzerconfigwidget.h" +#include "clangstaticanalyzerconstants.h" +#include "clangstaticanalyzerprojectsettingswidget.h" +#include "clangstaticanalyzerruncontrolfactory.h" +#include "clangstaticanalyzertool.h" + +#ifdef WITH_TESTS +#include "clangstaticanalyzerunittests.h" +#endif + +#include <analyzerbase/analyzermanager.h> +#include <coreplugin/icore.h> +#include <coreplugin/icontext.h> +#include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/actionmanager/command.h> +#include <coreplugin/actionmanager/actioncontainer.h> +#include <coreplugin/coreconstants.h> +#include <coreplugin/dialogs/ioptionspage.h> +#include <projectexplorer/projectpanelfactory.h> + +#include <QAction> +#include <QDebug> +#include <QMainWindow> +#include <QMessageBox> +#include <QMenu> + +#include <QtPlugin> + +using namespace Analyzer; + +namespace ClangStaticAnalyzer { +namespace Internal { + +class ClangStaticAnalyzerOptionsPage : public Core::IOptionsPage +{ +public: + explicit ClangStaticAnalyzerOptionsPage() + { + setId("Analyzer.ClangStaticAnalyzer.Settings"); // TODO: Get it from "clangstaticanalyzersettings.h" + setDisplayName(QCoreApplication::translate( + "ClangStaticAnalyzer::Internal::ClangStaticAnalyzerOptionsPage", + "Clang Static Analyzer")); + setCategory("T.Analyzer"); + setDisplayCategory(QCoreApplication::translate("Analyzer", "Analyzer")); + setCategoryIcon(QLatin1String(":/images/analyzer_category.png")); + } + + QWidget *widget() + { + if (!m_widget) + m_widget = new ClangStaticAnalyzerConfigWidget(ClangStaticAnalyzerSettings::instance()); + return m_widget; + } + + void apply() + { + ClangStaticAnalyzerSettings::instance()->writeSettings(); + } + + void finish() + { + delete m_widget; + } + +private: + QPointer<QWidget> m_widget; +}; + +ClangStaticAnalyzerPlugin::ClangStaticAnalyzerPlugin() +{ + // Create your members +} + +ClangStaticAnalyzerPlugin::~ClangStaticAnalyzerPlugin() +{ + // Unregister objects from the plugin manager's object pool + // Delete members +} + +bool ClangStaticAnalyzerPlugin::initialize(const QStringList &arguments, QString *errorString) +{ + // Register objects in the plugin manager's object pool + // Load settings + // Add actions to menus + // Connect to other plugins' signals + // In the initialize method, a plugin can be sure that the plugins it + // depends on have initialized their members. + + auto panelFactory = new ProjectExplorer::ProjectPanelFactory(); + panelFactory->setPriority(100); + panelFactory->setDisplayName(tr("Clang Static Analyzer Settings")); + panelFactory->setSimpleCreateWidgetFunction<ProjectSettingsWidget>(QIcon()); + ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory); + return initializeEnterpriseFeatures(arguments, errorString); +} + +bool ClangStaticAnalyzerPlugin::initializeEnterpriseFeatures(const QStringList &arguments, + QString *errorString) +{ + Q_UNUSED(arguments); + Q_UNUSED(errorString); + + auto tool = m_analyzerTool = new ClangStaticAnalyzerTool(this); + addAutoReleasedObject(new ClangStaticAnalyzerRunControlFactory(m_analyzerTool)); + addAutoReleasedObject(new ClangStaticAnalyzerOptionsPage); + + auto widgetCreator = [tool] { return tool->createWidgets(); }; + auto runControlCreator = [tool](const AnalyzerStartParameters &, + ProjectExplorer::RunConfiguration *runConfiguration, Core::Id runMode) { + return tool->createRunControl(runConfiguration, runMode); + }; + + const QString toolTip = tr("Clang Static Analyzer uses the analyzer from the clang project " + "to find bugs."); + + auto action = new AnalyzerAction(this); + action->setRunMode(Constants::CLANGSTATICANALYZER_RUN_MODE); + action->setToolId(ClangStaticAnalyzerToolId); + action->setActionId("ClangStaticAnalyzer"); + action->setWidgetCreator(widgetCreator); + action->setRunControlCreator(runControlCreator); + action->setCustomToolStarter([tool] { tool->startTool(); }); + action->setText(tr("Clang Static Analyzer")); + action->setToolTip(toolTip); + action->setMenuGroup(Analyzer::Constants::G_ANALYZER_TOOLS); + action->setEnabled(false); + AnalyzerManager::addAction(action); + + return true; +} + +void ClangStaticAnalyzerPlugin::extensionsInitialized() +{ + // Retrieve objects from the plugin manager's object pool + // In the extensionsInitialized method, a plugin can be sure that all + // plugins that depend on it are completely initialized. +} + +ExtensionSystem::IPlugin::ShutdownFlag ClangStaticAnalyzerPlugin::aboutToShutdown() +{ + // Save settings + // Disconnect from signals that are not needed during shutdown + // Hide UI (if you add UI that is not in the main window directly) + return SynchronousShutdown; +} + +QList<QObject *> ClangStaticAnalyzerPlugin::createTestObjects() const +{ + QList<QObject *> tests; +#ifdef WITH_TESTS + tests << new ClangStaticAnalyzerUnitTests(m_analyzerTool); +#endif + return tests; +} + +} // namespace Internal +} // namespace ClangStaticAnalyzerPlugin |