Clang: Add clang query

Clang query is mechanism to use AST matcher to search for code. Think
about regular expression but in the context of AST. So you get a semantic
search tool for C++.

Change-Id: I72e882c5b53a0c52f352a3664847c4c3e4f6fc2e
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tim Jenssen
2016-11-15 15:38:12 +01:00
parent 96187594b5
commit 9c7ff5199f
99 changed files with 4603 additions and 246 deletions

View File

@@ -28,6 +28,8 @@
#include <cpptools/cppmodelmanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/find/searchresultwindow.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/hostosinfo.h>
@@ -44,17 +46,24 @@ QString backendProcessPath()
} // anonymous namespace
std::unique_ptr<RefactoringClient> ClangRefactoringPlugin::client;
std::unique_ptr<RefactoringClient> ClangRefactoringPlugin::refactoringClient;
std::unique_ptr<ClangBackEnd::RefactoringConnectionClient> ClangRefactoringPlugin::connectionClient;
std::unique_ptr<RefactoringEngine> ClangRefactoringPlugin::engine;
std::unique_ptr<QtCreatorSearch> ClangRefactoringPlugin::qtCreatorSearch;
std::unique_ptr<QtCreatorClangQueryFindFilter> ClangRefactoringPlugin::qtCreatorfindFilter;
bool ClangRefactoringPlugin::initialize(const QStringList & /*arguments*/, QString * /*errorMessage*/)
{
client.reset(new RefactoringClient);
connectionClient.reset(new ClangBackEnd::RefactoringConnectionClient(client.get()));
engine.reset(new RefactoringEngine(connectionClient->serverProxy(), *client));
refactoringClient.reset(new RefactoringClient);
connectionClient.reset(new ClangBackEnd::RefactoringConnectionClient(refactoringClient.get()));
engine.reset(new RefactoringEngine(connectionClient->serverProxy(), *refactoringClient));
qtCreatorSearch.reset(new ClangRefactoring::QtCreatorSearch(*Core::SearchResultWindow::instance()));
qtCreatorfindFilter.reset(new QtCreatorClangQueryFindFilter(connectionClient->serverProxy(),
*qtCreatorSearch.get(),
*refactoringClient));
client->setRefactoringEngine(engine.get());
refactoringClient->setRefactoringEngine(engine.get());
ExtensionSystem::PluginManager::addObject(qtCreatorfindFilter.get());
connectBackend();
startBackend();
@@ -69,13 +78,15 @@ void ClangRefactoringPlugin::extensionsInitialized()
ExtensionSystem::IPlugin::ShutdownFlag ClangRefactoringPlugin::aboutToShutdown()
{
client->setRefactoringEngine(nullptr);
ExtensionSystem::PluginManager::removeObject(qtCreatorfindFilter.get());
refactoringClient->setRefactoringEngine(nullptr);
connectionClient->finishProcess();
qtCreatorfindFilter.reset();
engine.reset();
connectionClient.reset();
client.reset();
refactoringClient.reset();
return SynchronousShutdown;
}