From 27f6e838ee2965b508bd6422dac76817b4070bdb Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 26 Mar 2020 13:20:58 +0100 Subject: [PATCH] ClangTools: Add "Analyze Current File" to Tools menu and context menu Add the action to "Tools > C++" and the C++ editor context menu. Task-number: QTCREATORBUG-23348 Change-Id: I650e4d10e07ba227c6f89ab660ce7fa81263172e Reviewed-by: David Schulz --- src/plugins/clangtools/CMakeLists.txt | 1 + src/plugins/clangtools/clangtools.qbs | 4 ++++ .../clangtools/clangtools_dependencies.pri | 2 ++ src/plugins/clangtools/clangtoolsplugin.cpp | 14 +++++++++++-- src/plugins/cppeditor/cppeditorconstants.h | 1 + src/plugins/cppeditor/cppeditorplugin.cpp | 21 ++++++++++--------- 6 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/plugins/clangtools/CMakeLists.txt b/src/plugins/clangtools/CMakeLists.txt index 88b25830d7e..9831046b5f7 100644 --- a/src/plugins/clangtools/CMakeLists.txt +++ b/src/plugins/clangtools/CMakeLists.txt @@ -8,6 +8,7 @@ add_qtc_plugin(ClangTools CONDITION TARGET libclang AND TARGET yaml-cpp DEPENDS ClangSupport libclang yaml-cpp PLUGIN_DEPENDS Core Debugger CppTools ${TST_COMPONENT} + PLUGIN_RECOMMENDS CppEditor INCLUDES ${CLANG_INCLUDE_DIRS} SOURCES clangfileinfo.h diff --git a/src/plugins/clangtools/clangtools.qbs b/src/plugins/clangtools/clangtools.qbs index d25707c562d..07ec6201b12 100644 --- a/src/plugins/clangtools/clangtools.qbs +++ b/src/plugins/clangtools/clangtools.qbs @@ -18,6 +18,10 @@ QtcPlugin { Depends { name: "Qt.widgets" } + pluginRecommends: [ + "CppEditor" + ] + pluginTestDepends: [ "QbsProjectManager", "QmakeProjectManager", diff --git a/src/plugins/clangtools/clangtools_dependencies.pri b/src/plugins/clangtools/clangtools_dependencies.pri index 943ca179360..eaaaf295154 100644 --- a/src/plugins/clangtools/clangtools_dependencies.pri +++ b/src/plugins/clangtools/clangtools_dependencies.pri @@ -9,6 +9,8 @@ isEmpty(EXTERNAL_YAML_CPP_FOUND): QTC_LIB_DEPENDS += yaml-cpp QTC_PLUGIN_DEPENDS += \ debugger \ cpptools +QTC_PLUGIN_RECOMMENDS += \ + cppeditor QTC_TEST_DEPENDS += \ qbsprojectmanager \ qmakeprojectmanager diff --git a/src/plugins/clangtools/clangtoolsplugin.cpp b/src/plugins/clangtools/clangtoolsplugin.cpp index 6d9e8b8aa55..eb1d73663ed 100644 --- a/src/plugins/clangtools/clangtoolsplugin.cpp +++ b/src/plugins/clangtools/clangtoolsplugin.cpp @@ -48,6 +48,8 @@ #include #include +#include + #include #include #include @@ -95,8 +97,16 @@ bool ClangToolsPlugin::initialize(const QStringList &arguments, QString *errorSt d = new ClangToolsPluginPrivate; ActionManager::registerAction(d->clangTool.startAction(), Constants::RUN_ON_PROJECT); - ActionManager::registerAction(d->clangTool.startOnCurrentFileAction(), - Constants::RUN_ON_CURRENT_FILE); + Command *cmd = ActionManager::registerAction(d->clangTool.startOnCurrentFileAction(), + Constants::RUN_ON_CURRENT_FILE); + ActionContainer *mtoolscpp = ActionManager::actionContainer(CppTools::Constants::M_TOOLS_CPP); + if (mtoolscpp) + mtoolscpp->addAction(cmd); + + Core::ActionContainer *mcontext = Core::ActionManager::actionContainer( + CppEditor::Constants::M_CONTEXT); + if (mcontext) + mcontext->addAction(cmd, CppEditor::Constants::G_CONTEXT_FIRST); // TODO auto panelFactory = m_projectPanelFactoryInstance = new ProjectPanelFactory; panelFactory->setPriority(100); diff --git a/src/plugins/cppeditor/cppeditorconstants.h b/src/plugins/cppeditor/cppeditorconstants.h index 4df974e1262..a6f3f9609f2 100644 --- a/src/plugins/cppeditor/cppeditorconstants.h +++ b/src/plugins/cppeditor/cppeditorconstants.h @@ -29,6 +29,7 @@ namespace CppEditor { namespace Constants { const char M_CONTEXT[] = "CppEditor.ContextMenu"; +const char G_CONTEXT_FIRST[] = "CppEditor.GFirst"; const char CPPEDITOR_ID[] = "CppEditor.C++Editor"; const char CPPEDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("OpenWith::Editors", "C++ Editor"); const char SWITCH_DECLARATION_DEFINITION[] = "CppEditor.SwitchDeclarationDefinition"; diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp index bb86ee5be78..1376843080b 100644 --- a/src/plugins/cppeditor/cppeditorplugin.cpp +++ b/src/plugins/cppeditor/cppeditorplugin.cpp @@ -174,6 +174,7 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err Context context(Constants::CPPEDITOR_ID); ActionContainer *contextMenu = ActionManager::createMenu(Constants::M_CONTEXT); + contextMenu->insertGroup(Core::Constants::G_DEFAULT_ONE, Constants::G_CONTEXT_FIRST); Command *cmd; ActionContainer *cppToolsMenu = ActionManager::actionContainer(CppTools::Constants::M_TOOLS_CPP); @@ -181,12 +182,12 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err cmd = ActionManager::command(CppTools::Constants::SWITCH_HEADER_SOURCE); cmd->setTouchBarText(tr("Header/Source", "text on macOS touch bar")); - contextMenu->addAction(cmd); + contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION); cmd = ActionManager::command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR); cmd->setTouchBarText(tr("Follow", "text on macOS touch bar")); - contextMenu->addAction(cmd); + contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); cppToolsMenu->addAction(cmd); touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION); @@ -204,7 +205,7 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err cmd->setTouchBarText(tr("Decl/Def", "text on macOS touch bar")); connect(switchDeclarationDefinition, &QAction::triggered, this, &CppEditorPlugin::switchDeclarationDefinition); - contextMenu->addAction(cmd); + contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); cppToolsMenu->addAction(cmd); touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION); @@ -223,21 +224,21 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err cppToolsMenu->addAction(cmd); cmd = ActionManager::command(TextEditor::Constants::FIND_USAGES); - contextMenu->addAction(cmd); + contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); cppToolsMenu->addAction(cmd); d->m_openTypeHierarchyAction = new QAction(tr("Open Type Hierarchy"), this); cmd = ActionManager::registerAction(d->m_openTypeHierarchyAction, Constants::OPEN_TYPE_HIERARCHY, context); cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? tr("Meta+Shift+T") : tr("Ctrl+Shift+T"))); connect(d->m_openTypeHierarchyAction, &QAction::triggered, this, &CppEditorPlugin::openTypeHierarchy); - contextMenu->addAction(cmd); + contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); cppToolsMenu->addAction(cmd); d->m_openIncludeHierarchyAction = new QAction(tr("Open Include Hierarchy"), this); cmd = ActionManager::registerAction(d->m_openIncludeHierarchyAction, Constants::OPEN_INCLUDE_HIERARCHY, context); cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? tr("Meta+Shift+I") : tr("Ctrl+Shift+I"))); connect(d->m_openIncludeHierarchyAction, &QAction::triggered, this, &CppEditorPlugin::openIncludeHierarchy); - contextMenu->addAction(cmd); + contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST); cppToolsMenu->addAction(cmd); // Refactoring sub-menu @@ -256,19 +257,19 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err cppToolsMenu->addAction(cmd); // Update context in global context - cppToolsMenu->addSeparator(); + cppToolsMenu->addSeparator(Core::Constants::G_DEFAULT_THREE); d->m_reparseExternallyChangedFiles = new QAction(tr("Reparse Externally Changed Files"), this); cmd = ActionManager::registerAction(d->m_reparseExternallyChangedFiles, Constants::UPDATE_CODEMODEL); CppTools::CppModelManager *cppModelManager = CppTools::CppModelManager::instance(); connect(d->m_reparseExternallyChangedFiles, &QAction::triggered, cppModelManager, &CppTools::CppModelManager::updateModifiedSourceFiles); - cppToolsMenu->addAction(cmd); + cppToolsMenu->addAction(cmd, Core::Constants::G_DEFAULT_THREE); - cppToolsMenu->addSeparator(); + cppToolsMenu->addSeparator(Core::Constants::G_DEFAULT_THREE); QAction *inspectCppCodeModel = new QAction(tr("Inspect C++ Code Model..."), this); cmd = ActionManager::registerAction(inspectCppCodeModel, Constants::INSPECT_CPP_CODEMODEL); cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? tr("Meta+Shift+F12") : tr("Ctrl+Shift+F12"))); connect(inspectCppCodeModel, &QAction::triggered, d, &CppEditorPluginPrivate::inspectCppCodeModel); - cppToolsMenu->addAction(cmd); + cppToolsMenu->addAction(cmd, Core::Constants::G_DEFAULT_THREE); contextMenu->addSeparator(context);