summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager.cpp
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2017-09-25 16:41:17 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2017-10-17 13:32:51 +0000
commit5c554c0de9fd9115dbcfa010353640b11e349c6c (patch)
tree5b019c66e95a596a9e31d783a6a6ecd7ab750ddc /src/plugins/cpptools/cppmodelmanager.cpp
parent57e35274c24591dfc616ed0b638c428b5a5a2cc1 (diff)
downloadqt-creator-5c554c0de9fd9115dbcfa010353640b11e349c6c.tar.gz
CppTools: add multiple refactoring engines support
Make model manager able to select the most functional refactoring engine from the available ones. Change-Id: I74031c910706fd694a0a7def022531501f1ea005 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp47
1 files changed, 39 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index da45301782..633ad7a747 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -119,6 +119,9 @@ protected:
#endif // QTCREATOR_WITH_DUMP_AST
namespace CppTools {
+
+using REType = RefactoringEngineType;
+
namespace Internal {
static QMutex m_instanceMutex;
@@ -167,7 +170,8 @@ public:
// Refactoring
CppRefactoringEngine m_builtInRefactoringEngine;
- RefactoringEngineInterface *m_refactoringEngine { &m_builtInRefactoringEngine };
+ using REHash = QMap<REType, RefactoringEngineInterface *>;
+ REHash m_refactoringEngines {{REType::BuiltIn, &m_builtInRefactoringEngine}};
};
} // namespace Internal
@@ -267,17 +271,44 @@ QString CppModelManager::editorConfigurationFileName()
return QLatin1String("<per-editor-defines>");
}
-void CppModelManager::setRefactoringEngine(RefactoringEngineInterface *refactoringEngine)
+static RefactoringEngineInterface *getRefactoringEngine(
+ CppModelManagerPrivate::REHash &engines, bool excludeClangCodeModel = true)
+{
+ RefactoringEngineInterface *currentEngine = engines[REType::BuiltIn];
+ if (!excludeClangCodeModel && engines.find(REType::ClangCodeModel) != engines.end()) {
+ currentEngine = engines[REType::ClangCodeModel];
+ } else if (engines.find(REType::ClangRefactoring) != engines.end()) {
+ RefactoringEngineInterface *engine = engines[REType::ClangRefactoring];
+ if (engine->isRefactoringEngineAvailable())
+ currentEngine = engine;
+ }
+ return currentEngine;
+}
+
+void CppModelManager::startLocalRenaming(const CursorInEditor &data,
+ CppTools::ProjectPart *projectPart,
+ RenameCallback &&renameSymbolsCallback)
+{
+ RefactoringEngineInterface *engine = getRefactoringEngine(instance()->d->m_refactoringEngines,
+ false);
+ engine->startLocalRenaming(data, projectPart, std::move(renameSymbolsCallback));
+}
+
+void CppModelManager::startGlobalRenaming(const CursorInEditor &data)
+{
+ RefactoringEngineInterface *engine = getRefactoringEngine(instance()->d->m_refactoringEngines);
+ engine->startGlobalRenaming(data);
+}
+
+void CppModelManager::addRefactoringEngine(RefactoringEngineType type,
+ RefactoringEngineInterface *refactoringEngine)
{
- if (refactoringEngine)
- instance()->d->m_refactoringEngine = refactoringEngine;
- else
- instance()->d->m_refactoringEngine = &instance()->d->m_builtInRefactoringEngine;
+ instance()->d->m_refactoringEngines[type] = refactoringEngine;
}
-RefactoringEngineInterface &CppModelManager::refactoringEngine()
+void CppModelManager::removeRefactoringEngine(RefactoringEngineType type)
{
- return *instance()->d->m_refactoringEngine;
+ instance()->d->m_refactoringEngines.remove(type);
}
FollowSymbolInterface &CppModelManager::followSymbolInterface() const