forked from qt-creator/qt-creator
Clang: Improve ClangRefactoringPlugin initializing
Change-Id: I2e45d588e7a8c50b61b401c6dea9f3cf8db45611 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -46,24 +46,34 @@ QString backendProcessPath()
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
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;
|
||||
std::unique_ptr<ClangRefactoringPluginData> ClangRefactoringPlugin::d;
|
||||
|
||||
class ClangRefactoringPluginData
|
||||
{
|
||||
public:
|
||||
RefactoringClient refactoringClient;
|
||||
ClangBackEnd::RefactoringConnectionClient connectionClient{&refactoringClient};
|
||||
RefactoringEngine engine{connectionClient.serverProxy(), refactoringClient};
|
||||
QtCreatorSearch qtCreatorSearch{*Core::SearchResultWindow::instance()};
|
||||
QtCreatorClangQueryFindFilter qtCreatorfindFilter{connectionClient.serverProxy(),
|
||||
qtCreatorSearch,
|
||||
refactoringClient};
|
||||
};
|
||||
|
||||
ClangRefactoringPlugin::ClangRefactoringPlugin()
|
||||
{
|
||||
}
|
||||
|
||||
ClangRefactoringPlugin::~ClangRefactoringPlugin()
|
||||
{
|
||||
}
|
||||
|
||||
bool ClangRefactoringPlugin::initialize(const QStringList & /*arguments*/, QString * /*errorMessage*/)
|
||||
{
|
||||
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));
|
||||
d.reset(new ClangRefactoringPluginData);
|
||||
|
||||
refactoringClient->setRefactoringEngine(engine.get());
|
||||
ExtensionSystem::PluginManager::addObject(qtCreatorfindFilter.get());
|
||||
d->refactoringClient.setRefactoringEngine(&d->engine);
|
||||
ExtensionSystem::PluginManager::addObject(&d->qtCreatorfindFilter);
|
||||
|
||||
connectBackend();
|
||||
startBackend();
|
||||
@@ -78,34 +88,29 @@ void ClangRefactoringPlugin::extensionsInitialized()
|
||||
|
||||
ExtensionSystem::IPlugin::ShutdownFlag ClangRefactoringPlugin::aboutToShutdown()
|
||||
{
|
||||
ExtensionSystem::PluginManager::removeObject(qtCreatorfindFilter.get());
|
||||
refactoringClient->setRefactoringEngine(nullptr);
|
||||
ExtensionSystem::PluginManager::removeObject(&d->qtCreatorfindFilter);
|
||||
d->refactoringClient.setRefactoringEngine(nullptr);
|
||||
|
||||
connectionClient->finishProcess();
|
||||
|
||||
qtCreatorfindFilter.reset();
|
||||
engine.reset();
|
||||
connectionClient.reset();
|
||||
refactoringClient.reset();
|
||||
d.reset();
|
||||
|
||||
return SynchronousShutdown;
|
||||
}
|
||||
|
||||
RefactoringEngine &ClangRefactoringPlugin::refactoringEngine()
|
||||
{
|
||||
return *engine;
|
||||
return d->engine;
|
||||
}
|
||||
|
||||
void ClangRefactoringPlugin::startBackend()
|
||||
{
|
||||
connectionClient->setProcessPath(backendProcessPath());
|
||||
d->connectionClient.setProcessPath(backendProcessPath());
|
||||
|
||||
connectionClient->startProcessAndConnectToServerAsynchronously();
|
||||
d->connectionClient.startProcessAndConnectToServerAsynchronously();
|
||||
}
|
||||
|
||||
void ClangRefactoringPlugin::connectBackend()
|
||||
{
|
||||
connect(connectionClient.get(),
|
||||
connect(&d->connectionClient,
|
||||
&ClangBackEnd::RefactoringConnectionClient::connectedToLocalSocket,
|
||||
this,
|
||||
&ClangRefactoringPlugin::backendIsConnected);
|
||||
@@ -113,7 +118,7 @@ void ClangRefactoringPlugin::connectBackend()
|
||||
|
||||
void ClangRefactoringPlugin::backendIsConnected()
|
||||
{
|
||||
engine->setUsable(true);
|
||||
d->engine.setUsable(true);
|
||||
}
|
||||
|
||||
} // namespace ClangRefactoring
|
||||
|
||||
@@ -39,12 +39,16 @@
|
||||
|
||||
namespace ClangRefactoring {
|
||||
|
||||
class ClangRefactoringPluginData;
|
||||
|
||||
class ClangRefactoringPlugin : public ExtensionSystem::IPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "ClangRefactoring.json")
|
||||
|
||||
public:
|
||||
ClangRefactoringPlugin();
|
||||
~ClangRefactoringPlugin();
|
||||
bool initialize(const QStringList &arguments, QString *errorMessage);
|
||||
void extensionsInitialized();
|
||||
ShutdownFlag aboutToShutdown();
|
||||
@@ -57,12 +61,7 @@ private:
|
||||
void backendIsConnected();
|
||||
|
||||
private:
|
||||
static std::unique_ptr<ClangBackEnd::RefactoringConnectionClient> connectionClient;
|
||||
static std::unique_ptr<RefactoringClient> refactoringClient;
|
||||
static std::unique_ptr<RefactoringEngine> engine;
|
||||
static std::unique_ptr<QtCreatorClangQueryFindFilter> qtCreatorfindFilter;
|
||||
static std::unique_ptr<QtCreatorSearch> qtCreatorSearch;
|
||||
|
||||
static std::unique_ptr<ClangRefactoringPluginData> d;
|
||||
};
|
||||
|
||||
} // namespace ClangRefactoring
|
||||
|
||||
Reference in New Issue
Block a user