diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-08-30 10:58:08 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-09-01 14:53:58 +0000 |
commit | 284817fae6514701902ccdb834c2faa46462f2e8 (patch) | |
tree | 44a8c7d9813dc110b61c4639036366c7696bd7e9 /src/plugins/cpptools/cppvirtualfunctionassistprovider.cpp | |
parent | 3e1fa0f170d523971d2c3c12da15a6e291f56511 (diff) | |
download | qt-creator-284817fae6514701902ccdb834c2faa46462f2e8.tar.gz |
Merge CppTools into CppEditor
There was no proper separation of responsibilities between these
plugins. In particular, CppTools had lots of editor-related
functionality, so it's not clear why it was separated out in the first
place.
In fact, for a lot of code, it seemed quite arbitrary where it was put
(just one example: switchHeaderSource() was in CppTools, wheras
switchDeclarationDefinition() was in CppEditor).
Merging the plugins will enable us to get rid of various convoluted
pseudo-abstractions that were only introduced to keep up the artificial
separation.
Change-Id: Iafc3bce625b4794f6d4aa03df6cddc7f2d26716a
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppvirtualfunctionassistprovider.cpp')
-rw-r--r-- | src/plugins/cpptools/cppvirtualfunctionassistprovider.cpp | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/src/plugins/cpptools/cppvirtualfunctionassistprovider.cpp b/src/plugins/cpptools/cppvirtualfunctionassistprovider.cpp deleted file mode 100644 index af77a83d0a..0000000000 --- a/src/plugins/cpptools/cppvirtualfunctionassistprovider.cpp +++ /dev/null @@ -1,208 +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 "cppvirtualfunctionassistprovider.h" -#include "cppvirtualfunctionproposalitem.h" - -#include "cpptoolsreuse.h" -#include "functionutils.h" -#include "symbolfinder.h" - -#include <cplusplus/Icons.h> -#include <cplusplus/Overview.h> - -#include <coreplugin/actionmanager/actionmanager.h> -#include <coreplugin/actionmanager/command.h> - -#include <texteditor/codeassist/genericproposalmodel.h> -#include <texteditor/codeassist/genericproposalwidget.h> -#include <texteditor/codeassist/assistinterface.h> -#include <texteditor/codeassist/iassistprocessor.h> -#include <texteditor/codeassist/iassistproposal.h> -#include <texteditor/texteditorconstants.h> - -#include <utils/qtcassert.h> - -using namespace CPlusPlus; -using namespace TextEditor; - -namespace CppTools { - -/// Activate current item with the same shortcut that is configured for Follow Symbol Under Cursor. -/// This is limited to single-key shortcuts without modifiers. -class VirtualFunctionProposalWidget : public GenericProposalWidget -{ -public: - VirtualFunctionProposalWidget(bool openInSplit) - { - const char *id = openInSplit - ? TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT - : TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR; - if (Core::Command *command = Core::ActionManager::command(id)) - m_sequence = command->keySequence(); - } - -protected: - bool eventFilter(QObject *o, QEvent *e) override - { - if (e->type() == QEvent::ShortcutOverride && m_sequence.count() == 1) { - auto ke = static_cast<const QKeyEvent*>(e); - const QKeySequence seq(ke->key()); - if (seq == m_sequence) { - activateCurrentProposalItem(); - e->accept(); - return true; - } - } - return GenericProposalWidget::eventFilter(o, e); - } - - void showProposal(const QString &prefix) override - { - GenericProposalModelPtr proposalModel = model(); - if (proposalModel && proposalModel->size() == 1) { - const auto item = dynamic_cast<VirtualFunctionProposalItem *>( - proposalModel->proposalItem(0)); - if (item && item->link().hasValidTarget()) { - emit proposalItemActivated(proposalModel->proposalItem(0)); - deleteLater(); - return; - } - } - GenericProposalWidget::showProposal(prefix); - } - -private: - QKeySequence m_sequence; -}; - - - -class VirtualFunctionAssistProcessor : public IAssistProcessor -{ -public: - VirtualFunctionAssistProcessor(const VirtualFunctionAssistProvider::Parameters ¶ms) - : m_params(params) - {} - - IAssistProposal *immediateProposal(const AssistInterface *) override - { - QTC_ASSERT(m_params.function, return nullptr); - - auto *hintItem = new VirtualFunctionProposalItem(Utils::Link()); - hintItem->setText(QCoreApplication::translate("VirtualFunctionsAssistProcessor", - "collecting overrides ...")); - hintItem->setOrder(-1000); - - QList<AssistProposalItemInterface *> items; - items << itemFromFunction(m_params.function); - items << hintItem; - return new VirtualFunctionProposal(m_params.cursorPosition, items, m_params.openInNextSplit); - } - - IAssistProposal *perform(const AssistInterface *assistInterface) override - { - delete assistInterface; - - QTC_ASSERT(m_params.function, return nullptr); - QTC_ASSERT(m_params.staticClass, return nullptr); - QTC_ASSERT(!m_params.snapshot.isEmpty(), return nullptr); - - Class *functionsClass = m_finder.findMatchingClassDeclaration(m_params.function, - m_params.snapshot); - if (!functionsClass) - return nullptr; - - const QList<Function *> overrides = FunctionUtils::overrides( - m_params.function, functionsClass, m_params.staticClass, m_params.snapshot); - if (overrides.isEmpty()) - return nullptr; - - QList<AssistProposalItemInterface *> items; - foreach (Function *func, overrides) - items << itemFromFunction(func); - items.first()->setOrder(1000); // Ensure top position for function of static type - - return new VirtualFunctionProposal(m_params.cursorPosition, items, m_params.openInNextSplit); - } - -private: - Function *maybeDefinitionFor(Function *func) const - { - if (Function *definition = m_finder.findMatchingDefinition(func, m_params.snapshot)) - return definition; - return func; - } - - VirtualFunctionProposalItem *itemFromFunction(Function *func) const - { - const Utils::Link link = maybeDefinitionFor(func)->toLink(); - QString text = m_overview.prettyName(LookupContext::fullyQualifiedName(func)); - if (func->isPureVirtual()) - text += QLatin1String(" = 0"); - - auto *item = new VirtualFunctionProposalItem(link, m_params.openInNextSplit); - item->setText(text); - item->setIcon(Icons::iconForSymbol(func)); - - return item; - } - - VirtualFunctionAssistProvider::Parameters m_params; - Overview m_overview; - mutable SymbolFinder m_finder; -}; - -VirtualFunctionAssistProvider::VirtualFunctionAssistProvider() = default; - -bool VirtualFunctionAssistProvider::configure(const Parameters ¶meters) -{ - m_params = parameters; - return true; -} - -IAssistProvider::RunType VirtualFunctionAssistProvider::runType() const -{ - return AsynchronousWithThread; -} - -IAssistProcessor *VirtualFunctionAssistProvider::createProcessor() const -{ - return new VirtualFunctionAssistProcessor(m_params); -} - -VirtualFunctionProposal::VirtualFunctionProposal( - int cursorPos, const QList<AssistProposalItemInterface *> &items, bool openInSplit) - : GenericProposal(cursorPos, items), m_openInSplit(openInSplit) -{ - setFragile(true); -} - -IAssistProposalWidget *VirtualFunctionProposal::createWidget() const -{ - return new VirtualFunctionProposalWidget(m_openInSplit); -} - -} // namespace CppTools |