From b6c1e58f58658a97dfd11ec150e2fddcec366944 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 14 Mar 2016 10:58:55 +0100 Subject: [PATCH] ExtraCompiler: Parent extra compilers to plugins Previously the extra compilers were never destructed. As any plugin that registers an extra compiler factory has to depend on ProjectExplorer, it will delete its factory before ProjectExplorer is unloaded. So, removing the extra compiler from the list on destroyed() is safe. Change-Id: I22fbe662a5704c0294512b8774acb85745c1cbe5 Reviewed-by: Orgad Shaneh Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/extracompiler.cpp | 6 +++++- src/plugins/qtsupport/qscxmlcgenerator.h | 2 ++ src/plugins/qtsupport/qtsupportplugin.cpp | 4 ++-- src/plugins/qtsupport/uicgenerator.h | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/extracompiler.cpp b/src/plugins/projectexplorer/extracompiler.cpp index ecefbf353a8..328d24df405 100644 --- a/src/plugins/projectexplorer/extracompiler.cpp +++ b/src/plugins/projectexplorer/extracompiler.cpp @@ -354,7 +354,11 @@ ExtraCompilerFactory::ExtraCompilerFactory(QObject *parent) : QObject(parent) void ExtraCompilerFactory::registerExtraCompilerFactory(ExtraCompilerFactory *factory) { - factories()->append(factory); + QList *factoryList = factories(); + factoryList->append(factory); + connect(factory, &QObject::destroyed, [factoryList, factory]() { + factoryList->removeAll(factory); + }); } QList ExtraCompilerFactory::extraCompilerFactories() diff --git a/src/plugins/qtsupport/qscxmlcgenerator.h b/src/plugins/qtsupport/qscxmlcgenerator.h index cb375999c64..1c52f0410db 100644 --- a/src/plugins/qtsupport/qscxmlcgenerator.h +++ b/src/plugins/qtsupport/qscxmlcgenerator.h @@ -58,6 +58,8 @@ class QScxmlcGeneratorFactory : public ProjectExplorer::ExtraCompilerFactory { Q_OBJECT public: + QScxmlcGeneratorFactory(QObject *parent = 0) : ExtraCompilerFactory(parent) {} + ProjectExplorer::FileType sourceType() const override; QString sourceTag() const override; diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp index cc2b1ae3cc7..279776fdf1c 100644 --- a/src/plugins/qtsupport/qtsupportplugin.cpp +++ b/src/plugins/qtsupport/qtsupportplugin.cpp @@ -89,9 +89,9 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes ProjectExplorer::KitManager::registerKitInformation(new QtKitInformation); ProjectExplorer::ExtraCompilerFactory::registerExtraCompilerFactory( - new UicGeneratorFactory); + new UicGeneratorFactory(this)); ProjectExplorer::ExtraCompilerFactory::registerExtraCompilerFactory( - new QScxmlcGeneratorFactory); + new QScxmlcGeneratorFactory(this)); QtVersionManager::initialized(); diff --git a/src/plugins/qtsupport/uicgenerator.h b/src/plugins/qtsupport/uicgenerator.h index e51281606ee..21fd09e12b9 100644 --- a/src/plugins/qtsupport/uicgenerator.h +++ b/src/plugins/qtsupport/uicgenerator.h @@ -50,6 +50,8 @@ class UicGeneratorFactory : public ProjectExplorer::ExtraCompilerFactory { Q_OBJECT public: + UicGeneratorFactory(QObject *parent = 0) : ExtraCompilerFactory(parent) {} + ProjectExplorer::FileType sourceType() const override; QString sourceTag() const override;