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

View File

@@ -33,6 +33,7 @@
#include <extensionsystem/iplugin.h>
#include <memory>
namespace ClangRefactoring {
@@ -44,6 +45,7 @@ class ClangRefactoringPlugin : public ExtensionSystem::IPlugin
public:
bool initialize(const QStringList &arguments, QString *errorMessage);
void extensionsInitialized();
ShutdownFlag aboutToShutdown();
static RefactoringEngine &refactoringEngine();
@@ -53,9 +55,9 @@ private:
void backendIsConnected();
private:
static ClangBackEnd::RefactoringConnectionClient connectionClient;
static RefactoringClient client;
static RefactoringEngine engine;
static std::unique_ptr<ClangBackEnd::RefactoringConnectionClient> connectionClient;
static std::unique_ptr<RefactoringClient> client;
static std::unique_ptr<RefactoringEngine> engine;
};
} // namespace ClangRefactoring