forked from qt-creator/qt-creator
Clang: Initialize not static but at plug initialization
Change-Id: I856c35c81d13f31c290ef40dad5ee647ab521052 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user