forked from qt-creator/qt-creator
Clang: use local renaming based on ClangCodeModel
Provide refactoring engine for ClangCodeModel and implement missing methods. Change-Id: If5c913e0c5a7941cd2ced54d0fcfa4d625eadc93 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
@@ -76,6 +76,7 @@ public:
|
||||
virtual void setParserConfig(const BaseEditorDocumentParser::Configuration config);
|
||||
|
||||
virtual QFuture<CursorInfo> cursorInfo(const CursorInfoParams ¶ms) = 0;
|
||||
virtual QFuture<CursorInfo> requestLocalReferences(const QTextCursor &cursor) = 0;
|
||||
virtual QFuture<SymbolInfo> requestFollowSymbol(int line, int column) = 0;
|
||||
|
||||
public:
|
||||
|
||||
@@ -260,6 +260,24 @@ BuiltinEditorDocumentProcessor::cursorInfo(const CursorInfoParams ¶ms)
|
||||
return BuiltinCursorInfo::run(params);
|
||||
}
|
||||
|
||||
QFuture<CursorInfo> BuiltinEditorDocumentProcessor::requestLocalReferences(const QTextCursor &)
|
||||
{
|
||||
QFutureInterface<CppTools::CursorInfo> futureInterface;
|
||||
futureInterface.reportResult(CppTools::CursorInfo());
|
||||
futureInterface.reportFinished();
|
||||
|
||||
return futureInterface.future();
|
||||
}
|
||||
|
||||
QFuture<SymbolInfo> BuiltinEditorDocumentProcessor::requestFollowSymbol(int, int)
|
||||
{
|
||||
QFutureInterface<CppTools::SymbolInfo> futureInterface;
|
||||
futureInterface.reportResult(CppTools::SymbolInfo());
|
||||
futureInterface.reportFinished();
|
||||
|
||||
return futureInterface.future();
|
||||
}
|
||||
|
||||
void BuiltinEditorDocumentProcessor::onParserFinished(CPlusPlus::Document::Ptr document,
|
||||
CPlusPlus::Snapshot snapshot)
|
||||
{
|
||||
|
||||
@@ -52,8 +52,8 @@ public:
|
||||
bool isParserRunning() const override;
|
||||
|
||||
QFuture<CursorInfo> cursorInfo(const CursorInfoParams ¶ms) override;
|
||||
QFuture<SymbolInfo> requestFollowSymbol(int, int) override
|
||||
{ return QFuture<SymbolInfo>(); }
|
||||
QFuture<CursorInfo> requestLocalReferences(const QTextCursor &) override;
|
||||
QFuture<SymbolInfo> requestFollowSymbol(int, int) override;
|
||||
|
||||
private:
|
||||
void onParserFinished(CPlusPlus::Document::Ptr document, CPlusPlus::Snapshot snapshot);
|
||||
|
||||
@@ -169,9 +169,8 @@ public:
|
||||
QTimer m_delayedGcTimer;
|
||||
|
||||
// Refactoring
|
||||
CppRefactoringEngine m_builtInRefactoringEngine;
|
||||
using REHash = QMap<REType, RefactoringEngineInterface *>;
|
||||
REHash m_refactoringEngines {{REType::BuiltIn, &m_builtInRefactoringEngine}};
|
||||
REHash m_refactoringEngines;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
@@ -274,6 +273,7 @@ QString CppModelManager::editorConfigurationFileName()
|
||||
static RefactoringEngineInterface *getRefactoringEngine(
|
||||
CppModelManagerPrivate::REHash &engines, bool excludeClangCodeModel = true)
|
||||
{
|
||||
QTC_ASSERT(!engines.empty(), return nullptr;);
|
||||
RefactoringEngineInterface *currentEngine = engines[REType::BuiltIn];
|
||||
if (!excludeClangCodeModel && engines.find(REType::ClangCodeModel) != engines.end()) {
|
||||
currentEngine = engines[REType::ClangCodeModel];
|
||||
@@ -291,6 +291,7 @@ void CppModelManager::startLocalRenaming(const CursorInEditor &data,
|
||||
{
|
||||
RefactoringEngineInterface *engine = getRefactoringEngine(instance()->d->m_refactoringEngines,
|
||||
false);
|
||||
QTC_ASSERT(engine, return;);
|
||||
engine->startLocalRenaming(data, projectPart, std::move(renameSymbolsCallback));
|
||||
}
|
||||
|
||||
@@ -298,12 +299,15 @@ void CppModelManager::globalRename(const CursorInEditor &data, UsagesCallback &&
|
||||
const QString &replacement)
|
||||
{
|
||||
RefactoringEngineInterface *engine = getRefactoringEngine(instance()->d->m_refactoringEngines);
|
||||
QTC_ASSERT(engine, return;);
|
||||
engine->globalRename(data, std::move(renameCallback), replacement);
|
||||
}
|
||||
|
||||
void CppModelManager::findUsages(const CppTools::CursorInEditor &data,
|
||||
UsagesCallback &&showUsagesCallback) const
|
||||
{
|
||||
RefactoringEngineInterface *engine = getRefactoringEngine(instance()->d->m_refactoringEngines);
|
||||
QTC_ASSERT(engine, return;);
|
||||
engine->findUsages(data, std::move(showUsagesCallback));
|
||||
}
|
||||
|
||||
@@ -367,6 +371,8 @@ void CppModelManager::initializeBuiltinModelManagerSupport()
|
||||
d->m_builtinModelManagerSupport
|
||||
= ModelManagerSupportProviderInternal().createModelManagerSupport();
|
||||
d->m_activeModelManagerSupport = d->m_builtinModelManagerSupport;
|
||||
d->m_refactoringEngines[RefactoringEngineType::BuiltIn] =
|
||||
&d->m_activeModelManagerSupport->refactoringEngineInterface();
|
||||
}
|
||||
|
||||
CppModelManager::CppModelManager(QObject *parent)
|
||||
@@ -1267,6 +1273,8 @@ void CppModelManager::activateClangCodeModel(
|
||||
QTC_ASSERT(modelManagerSupportProvider, return);
|
||||
|
||||
d->m_activeModelManagerSupport = modelManagerSupportProvider->createModelManagerSupport();
|
||||
d->m_refactoringEngines[RefactoringEngineType::ClangCodeModel] =
|
||||
&d->m_activeModelManagerSupport->refactoringEngineInterface();
|
||||
}
|
||||
|
||||
CppCompletionAssistProvider *CppModelManager::completionAssistProvider() const
|
||||
|
||||
@@ -37,6 +37,7 @@ namespace CppTools {
|
||||
class BaseEditorDocumentProcessor;
|
||||
class CppCompletionAssistProvider;
|
||||
class FollowSymbolInterface;
|
||||
class RefactoringEngineInterface;
|
||||
|
||||
class CPPTOOLS_EXPORT ModelManagerSupport
|
||||
{
|
||||
@@ -50,6 +51,7 @@ public:
|
||||
virtual BaseEditorDocumentProcessor *editorDocumentProcessor(
|
||||
TextEditor::TextDocument *baseTextDocument) = 0;
|
||||
virtual FollowSymbolInterface &followSymbolInterface() = 0;
|
||||
virtual RefactoringEngineInterface &refactoringEngineInterface() = 0;
|
||||
};
|
||||
|
||||
class CPPTOOLS_EXPORT ModelManagerSupportProvider
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "cppcompletionassist.h"
|
||||
#include "cppmodelmanagersupportinternal.h"
|
||||
#include "cppfollowsymbolundercursor.h"
|
||||
#include "cpprefactoringengine.h"
|
||||
#include "builtineditordocumentprocessor.h"
|
||||
|
||||
#include <app/app_version.h>
|
||||
@@ -53,7 +54,8 @@ ModelManagerSupport::Ptr ModelManagerSupportProviderInternal::createModelManager
|
||||
|
||||
ModelManagerSupportInternal::ModelManagerSupportInternal()
|
||||
: m_completionAssistProvider(new InternalCompletionAssistProvider),
|
||||
m_followSymbol(new FollowSymbolUnderCursor)
|
||||
m_followSymbol(new FollowSymbolUnderCursor),
|
||||
m_refactoringEngine(new CppRefactoringEngine)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -76,3 +78,8 @@ FollowSymbolInterface &ModelManagerSupportInternal::followSymbolInterface()
|
||||
{
|
||||
return *m_followSymbol;
|
||||
}
|
||||
|
||||
RefactoringEngineInterface &ModelManagerSupportInternal::refactoringEngineInterface()
|
||||
{
|
||||
return *m_refactoringEngine;
|
||||
}
|
||||
|
||||
@@ -44,10 +44,12 @@ public:
|
||||
BaseEditorDocumentProcessor *editorDocumentProcessor(
|
||||
TextEditor::TextDocument *baseTextDocument) final;
|
||||
FollowSymbolInterface &followSymbolInterface() final;
|
||||
RefactoringEngineInterface &refactoringEngineInterface() final;
|
||||
|
||||
private:
|
||||
QScopedPointer<CppCompletionAssistProvider> m_completionAssistProvider;
|
||||
QScopedPointer<FollowSymbolInterface> m_followSymbol;
|
||||
QScopedPointer<RefactoringEngineInterface> m_refactoringEngine;
|
||||
};
|
||||
|
||||
class ModelManagerSupportProviderInternal : public ModelManagerSupportProvider
|
||||
|
||||
Reference in New Issue
Block a user