summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libs/clangsupport/refactoringserverinterface.h10
-rw-r--r--src/libs/clangsupport/sourcelocationcontainer.h2
-rw-r--r--src/libs/utils/smallstringfwd.h4
-rw-r--r--src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp8
-rw-r--r--src/plugins/clangrefactoring/clangqueryprojectsfindfilter.h4
-rw-r--r--src/plugins/clangrefactoring/clangrefactoringplugin.cpp8
-rw-r--r--src/plugins/clangrefactoring/refactoringclient.cpp2
-rw-r--r--src/plugins/clangrefactoring/refactoringengine.cpp10
-rw-r--r--src/plugins/clangrefactoring/refactoringengine.h4
-rw-r--r--src/plugins/cppeditor/cppeditorwidget.cpp4
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp47
-rw-r--r--src/plugins/cpptools/cppmodelmanager.h22
-rw-r--r--src/plugins/cpptools/cpprefactoringengine.h2
-rw-r--r--src/plugins/cpptools/refactoringengineinterface.h3
-rw-r--r--tests/unit/unittest/clangqueryprojectfindfilter-test.cpp10
-rw-r--r--tests/unit/unittest/refactoringclient-test.cpp2
-rw-r--r--tests/unit/unittest/refactoringengine-test.cpp12
17 files changed, 99 insertions, 55 deletions
diff --git a/src/libs/clangsupport/refactoringserverinterface.h b/src/libs/clangsupport/refactoringserverinterface.h
index a4a3b1e6f4..09634802da 100644
--- a/src/libs/clangsupport/refactoringserverinterface.h
+++ b/src/libs/clangsupport/refactoringserverinterface.h
@@ -51,17 +51,17 @@ public:
virtual void requestSourceRangesForQueryMessage(RequestSourceRangesForQueryMessage &&message) = 0;
virtual void cancel() = 0;
- bool isUsable() const
+ bool isAvailable() const
{
- return isUsable_;
+ return isAvailable_;
}
- void setUsable(bool isUsable)
+ void setAvailable(bool isAvailable)
{
- isUsable_ = isUsable;
+ isAvailable_ = isAvailable;
}
private:
- bool isUsable_ = false;
+ bool isAvailable_ = false;
};
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/sourcelocationcontainer.h b/src/libs/clangsupport/sourcelocationcontainer.h
index 80971e8ee8..ffccc2a82a 100644
--- a/src/libs/clangsupport/sourcelocationcontainer.h
+++ b/src/libs/clangsupport/sourcelocationcontainer.h
@@ -27,7 +27,7 @@
#include "clangsupport_global.h"
-#include <utf8string.h>
+#include <sqlite/utf8string.h>
namespace ClangBackEnd {
diff --git a/src/libs/utils/smallstringfwd.h b/src/libs/utils/smallstringfwd.h
index f3b343f961..05a8a9efb4 100644
--- a/src/libs/utils/smallstringfwd.h
+++ b/src/libs/utils/smallstringfwd.h
@@ -25,10 +25,10 @@
#pragma once
-namespace Utils {
-
using uint = unsigned int;
+namespace Utils {
+
class SmallStringView;
template <uint Size>
class BasicSmallString;
diff --git a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp
index 14d8a1620e..b3d52949bd 100644
--- a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp
+++ b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp
@@ -127,14 +127,14 @@ void ClangQueryProjectsFindFilter::setProjectParts(const std::vector<CppTools::P
this->m_projectParts = projectParts;
}
-bool ClangQueryProjectsFindFilter::isUsable() const
+bool ClangQueryProjectsFindFilter::isAvailable() const
{
- return m_server.isUsable();
+ return m_server.isAvailable();
}
-void ClangQueryProjectsFindFilter::setUsable(bool isUsable)
+void ClangQueryProjectsFindFilter::setAvailable(bool isAvailable)
{
- m_server.setUsable(isUsable);
+ m_server.setAvailable(isAvailable);
}
SearchHandle *ClangQueryProjectsFindFilter::searchHandleForTestOnly() const
diff --git a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.h b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.h
index 73608557ec..a92c994f0d 100644
--- a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.h
+++ b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.h
@@ -66,8 +66,8 @@ public:
void setProjectParts(const std::vector<CppTools::ProjectPart::Ptr> &m_projectParts);
- bool isUsable() const;
- void setUsable(bool isUsable);
+ bool isAvailable() const;
+ void setAvailable(bool isAvailable);
SearchHandle* searchHandleForTestOnly() const;
diff --git a/src/plugins/clangrefactoring/clangrefactoringplugin.cpp b/src/plugins/clangrefactoring/clangrefactoringplugin.cpp
index ac5a96ee88..7ca01459c2 100644
--- a/src/plugins/clangrefactoring/clangrefactoringplugin.cpp
+++ b/src/plugins/clangrefactoring/clangrefactoringplugin.cpp
@@ -100,13 +100,15 @@ bool ClangRefactoringPlugin::initialize(const QStringList & /*arguments*/, QStri
void ClangRefactoringPlugin::extensionsInitialized()
{
- CppTools::CppModelManager::setRefactoringEngine(&refactoringEngine());
+ CppTools::CppModelManager::addRefactoringEngine(
+ CppTools::RefactoringEngineType::ClangRefactoring, &refactoringEngine());
}
ExtensionSystem::IPlugin::ShutdownFlag ClangRefactoringPlugin::aboutToShutdown()
{
ExtensionSystem::PluginManager::removeObject(&d->qtCreatorfindFilter);
- CppTools::CppModelManager::setRefactoringEngine(nullptr);
+ CppTools::CppModelManager::removeRefactoringEngine(
+ CppTools::RefactoringEngineType::ClangRefactoring);
d->refactoringClient.setRefactoringConnectionClient(nullptr);
d->refactoringClient.setRefactoringEngine(nullptr);
@@ -137,7 +139,7 @@ void ClangRefactoringPlugin::connectBackend()
void ClangRefactoringPlugin::backendIsConnected()
{
- d->engine.setUsable(true);
+ d->engine.setRefactoringEngineAvailable(true);
}
} // namespace ClangRefactoring
diff --git a/src/plugins/clangrefactoring/refactoringclient.cpp b/src/plugins/clangrefactoring/refactoringclient.cpp
index 5c544e5a22..1bbc01aa02 100644
--- a/src/plugins/clangrefactoring/refactoringclient.cpp
+++ b/src/plugins/clangrefactoring/refactoringclient.cpp
@@ -47,7 +47,7 @@ void RefactoringClient::sourceLocationsForRenamingMessage(
message.sourceLocations(),
message.textDocumentRevision());
- m_refactoringEngine->setUsable(true);
+ m_refactoringEngine->setRefactoringEngineAvailable(true);
}
void RefactoringClient::sourceRangesAndDiagnosticsForQueryMessage(
diff --git a/src/plugins/clangrefactoring/refactoringengine.cpp b/src/plugins/clangrefactoring/refactoringengine.cpp
index bc9ec9ab68..174254253c 100644
--- a/src/plugins/clangrefactoring/refactoringengine.cpp
+++ b/src/plugins/clangrefactoring/refactoringengine.cpp
@@ -60,7 +60,7 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data,
{
using CppTools::ClangCompilerOptionsBuilder;
- setUsable(false);
+ setRefactoringEngineAvailable(false);
m_client.setLocalRenamingCallback(std::move(renameSymbolsCallback));
@@ -89,14 +89,14 @@ void RefactoringEngine::startGlobalRenaming(const CppTools::CursorInEditor &)
// TODO: implement
}
-bool RefactoringEngine::isUsable() const
+bool RefactoringEngine::isRefactoringEngineAvailable() const
{
- return m_server.isUsable();
+ return m_server.isAvailable();
}
-void RefactoringEngine::setUsable(bool isUsable)
+void RefactoringEngine::setRefactoringEngineAvailable(bool isAvailable)
{
- m_server.setUsable(isUsable);
+ m_server.setAvailable(isAvailable);
}
} // namespace ClangRefactoring
diff --git a/src/plugins/clangrefactoring/refactoringengine.h b/src/plugins/clangrefactoring/refactoringengine.h
index b64a2c8eeb..eaa15ad7d5 100644
--- a/src/plugins/clangrefactoring/refactoringengine.h
+++ b/src/plugins/clangrefactoring/refactoringengine.h
@@ -48,8 +48,8 @@ public:
RenameCallback &&renameSymbolsCallback) override;
void startGlobalRenaming(const CppTools::CursorInEditor &data) override;
- bool isUsable() const override;
- void setUsable(bool isUsable);
+ bool isRefactoringEngineAvailable() const override;
+ void setRefactoringEngineAvailable(bool isAvailable);
ClangBackEnd::FilePathCachingInterface &filePathCache()
{
diff --git a/src/plugins/cppeditor/cppeditorwidget.cpp b/src/plugins/cppeditor/cppeditorwidget.cpp
index c14bb541be..cd3da7d7ee 100644
--- a/src/plugins/cppeditor/cppeditorwidget.cpp
+++ b/src/plugins/cppeditor/cppeditorwidget.cpp
@@ -524,7 +524,7 @@ void CppEditorWidget::renameSymbolUnderCursor()
using ClangBackEnd::SourceLocationsContainer;
ProjectPart *projPart = projectPart();
- if (!refactoringEngine().isUsable() || !projPart)
+ if (!projPart)
return;
d->m_useSelectionsUpdater.abortSchedule();
@@ -686,7 +686,7 @@ RefactorMarkers CppEditorWidget::refactorMarkersWithoutClangMarkers() const
RefactoringEngineInterface &CppEditorWidget::refactoringEngine() const
{
- return CppTools::CppModelManager::refactoringEngine();
+ return *CppTools::CppModelManager::instance();
}
CppTools::FollowSymbolInterface &CppEditorWidget::followSymbolInterface() const
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
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index df04beec3a..0a66e63bad 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -27,6 +27,7 @@
#include "cpptools_global.h"
+#include "refactoringengineinterface.h"
#include "projectinfo.h"
#include "projectpart.h"
#include "projectpartheaderpath.h"
@@ -53,7 +54,6 @@ class CppCompletionAssistProvider;
class CppEditorDocumentHandle;
class CppIndexingSupport;
class ModelManagerSupportProvider;
-class RefactoringEngineInterface;
class FollowSymbolInterface;
class SymbolFinder;
class WorkingCopy;
@@ -67,7 +67,15 @@ namespace Tests {
class ModelManagerTestHelper;
}
-class CPPTOOLS_EXPORT CppModelManager : public CPlusPlus::CppModelManagerBase
+enum class RefactoringEngineType : int
+{
+ BuiltIn = 0,
+ ClangCodeModel = 1,
+ ClangRefactoring = 2
+};
+
+class CPPTOOLS_EXPORT CppModelManager final : public CPlusPlus::CppModelManagerBase,
+ public RefactoringEngineInterface
{
Q_OBJECT
@@ -140,6 +148,11 @@ public:
QList<int> references(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
+ void startLocalRenaming(const CursorInEditor &data,
+ CppTools::ProjectPart *projectPart,
+ RenameCallback &&renameSymbolsCallback) final;
+ void startGlobalRenaming(const CursorInEditor &data) final;
+
void renameUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context,
const QString &replacement = QString());
void findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
@@ -179,8 +192,9 @@ public:
static QString configurationFileName();
static QString editorConfigurationFileName();
- static void setRefactoringEngine(RefactoringEngineInterface *refactoringEngine);
- static RefactoringEngineInterface &refactoringEngine();
+ static void addRefactoringEngine(RefactoringEngineType type,
+ RefactoringEngineInterface *refactoringEngine);
+ static void removeRefactoringEngine(RefactoringEngineType type);
void renameIncludes(const QString &oldFileName, const QString &newFileName);
diff --git a/src/plugins/cpptools/cpprefactoringengine.h b/src/plugins/cpptools/cpprefactoringengine.h
index acbf02e5e6..9ea61ec29a 100644
--- a/src/plugins/cpptools/cpprefactoringengine.h
+++ b/src/plugins/cpptools/cpprefactoringengine.h
@@ -36,8 +36,6 @@ public:
CppTools::ProjectPart *projectPart,
RenameCallback &&renameSymbolsCallback) override;
void startGlobalRenaming(const CppTools::CursorInEditor &data) override;
-
- bool isUsable() const override { return true; }
};
} // namespace CppEditor
diff --git a/src/plugins/cpptools/refactoringengineinterface.h b/src/plugins/cpptools/refactoringengineinterface.h
index afb6025c03..f18b6ba466 100644
--- a/src/plugins/cpptools/refactoringengineinterface.h
+++ b/src/plugins/cpptools/refactoringengineinterface.h
@@ -57,8 +57,7 @@ public:
CppTools::ProjectPart *projectPart,
RenameCallback &&renameSymbolsCallback) = 0;
virtual void startGlobalRenaming(const CursorInEditor &data) = 0;
-
- virtual bool isUsable() const = 0;
+ virtual bool isRefactoringEngineAvailable() const { return true; }
};
} // namespace CppTools
diff --git a/tests/unit/unittest/clangqueryprojectfindfilter-test.cpp b/tests/unit/unittest/clangqueryprojectfindfilter-test.cpp
index c33b8ab38a..5ffc382e18 100644
--- a/tests/unit/unittest/clangqueryprojectfindfilter-test.cpp
+++ b/tests/unit/unittest/clangqueryprojectfindfilter-test.cpp
@@ -82,25 +82,25 @@ TEST_F(ClangQueryProjectFindFilter, SupportedFindFlags)
TEST_F(ClangQueryProjectFindFilter, IsNotUsableForUnusableServer)
{
- auto isUsable = findFilter.isUsable();
+ auto isUsable = findFilter.isAvailable();
ASSERT_FALSE(isUsable);
}
TEST_F(ClangQueryProjectFindFilter, IsUsableForUsableServer)
{
- mockRefactoringServer.setUsable(true);
+ mockRefactoringServer.setAvailable(true);
- auto isUsable = findFilter.isUsable();
+ auto isUsable = findFilter.isAvailable();
ASSERT_TRUE(isUsable);
}
TEST_F(ClangQueryProjectFindFilter, ServerIsUsableForUsableFindFilter)
{
- findFilter.setUsable(true);
+ findFilter.setAvailable(true);
- auto isUsable = mockRefactoringServer.isUsable();
+ auto isUsable = mockRefactoringServer.isAvailable();
ASSERT_TRUE(isUsable);
}
diff --git a/tests/unit/unittest/refactoringclient-test.cpp b/tests/unit/unittest/refactoringclient-test.cpp
index f159c42400..c562e832db 100644
--- a/tests/unit/unittest/refactoringclient-test.cpp
+++ b/tests/unit/unittest/refactoringclient-test.cpp
@@ -123,7 +123,7 @@ TEST_F(RefactoringClient, AfterSourceLocationsForRenamingEngineIsUsableAgain)
client.sourceLocationsForRenamingMessage(std::move(renameMessage));
- ASSERT_TRUE(engine.isUsable());
+ ASSERT_TRUE(engine.isRefactoringEngineAvailable());
}
TEST_F(RefactoringClient, AfterStartLocalRenameHasValidCallback)
diff --git a/tests/unit/unittest/refactoringengine-test.cpp b/tests/unit/unittest/refactoringengine-test.cpp
index c1363bf7d8..db6eaf86d4 100644
--- a/tests/unit/unittest/refactoringengine-test.cpp
+++ b/tests/unit/unittest/refactoringengine-test.cpp
@@ -99,26 +99,26 @@ TEST_F(RefactoringEngine, AfterSendRequestSourceLocationsForRenamingMessageIsUnu
engine.startLocalRenaming(CppTools::CursorInEditor{cursor, filePath},
projectPart.data(), {});
- ASSERT_FALSE(engine.isUsable());
+ ASSERT_FALSE(engine.isRefactoringEngineAvailable());
}
TEST_F(RefactoringEngine, EngineIsNotUsableForUnusableServer)
{
- ASSERT_FALSE(engine.isUsable());
+ ASSERT_FALSE(engine.isRefactoringEngineAvailable());
}
TEST_F(RefactoringEngine, EngineIsUsableForUsableServer)
{
- mockRefactoringServer.setUsable(true);
+ mockRefactoringServer.setAvailable(true);
- ASSERT_TRUE(engine.isUsable());
+ ASSERT_TRUE(engine.isRefactoringEngineAvailable());
}
TEST_F(RefactoringEngine, ServerIsUsableForUsableEngine)
{
- engine.setUsable(true);
+ engine.setRefactoringEngineAvailable(true);
- ASSERT_TRUE(mockRefactoringServer.isUsable());
+ ASSERT_TRUE(mockRefactoringServer.isAvailable());
}
void RefactoringEngine::SetUp()