Clang: Initialize not static but at plug initialization

Change-Id: I856c35c81d13f31c290ef40dad5ee647ab521052
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2016-09-20 13:21:46 +02:00
parent 62b2c85806
commit 3fd6b1fa0a
2 changed files with 27 additions and 12 deletions

View File

@@ -44,13 +44,17 @@ QString backendProcessPath()
} // anonymous namespace
RefactoringClient ClangRefactoringPlugin::client;
ClangBackEnd::RefactoringConnectionClient ClangRefactoringPlugin::connectionClient(&client);
RefactoringEngine ClangRefactoringPlugin::engine(connectionClient.serverProxy(), client);
std::unique_ptr<RefactoringClient> ClangRefactoringPlugin::client;
std::unique_ptr<ClangBackEnd::RefactoringConnectionClient> ClangRefactoringPlugin::connectionClient;
std::unique_ptr<RefactoringEngine> ClangRefactoringPlugin::engine;
bool ClangRefactoringPlugin::initialize(const QStringList & /*arguments*/, QString * /*errorMessage*/)
{
client.setRefactoringEngine(&engine);
client.reset(new RefactoringClient);
connectionClient.reset(new ClangBackEnd::RefactoringConnectionClient(client.get()));
engine.reset(new RefactoringEngine(connectionClient->serverProxy(), *client));
client->setRefactoringEngine(engine.get());
connectBackend();
startBackend();
@@ -63,21 +67,30 @@ void ClangRefactoringPlugin::extensionsInitialized()
CppTools::CppModelManager::setRefactoringEngine(&refactoringEngine());
}
ExtensionSystem::IPlugin::ShutdownFlag ClangRefactoringPlugin::aboutToShutdown()
{
engine.reset();
connectionClient.reset();
client.reset();
return SynchronousShutdown;
}
RefactoringEngine &ClangRefactoringPlugin::refactoringEngine()
{
return engine;
return *engine;
}
void ClangRefactoringPlugin::startBackend()
{
connectionClient.setProcessPath(backendProcessPath());
connectionClient->setProcessPath(backendProcessPath());
connectionClient.startProcessAndConnectToServerAsynchronously();
connectionClient->startProcessAndConnectToServerAsynchronously();
}
void ClangRefactoringPlugin::connectBackend()
{
connect(&connectionClient,
connect(connectionClient.get(),
&ClangBackEnd::RefactoringConnectionClient::connectedToLocalSocket,
this,
&ClangRefactoringPlugin::backendIsConnected);
@@ -85,7 +98,7 @@ void ClangRefactoringPlugin::connectBackend()
void ClangRefactoringPlugin::backendIsConnected()
{
engine.setUsable(true);
engine->setUsable(true);
}
} // namespace ClangRefactoring