forked from qt-creator/qt-creator
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 <orgads@gmail.com> Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -354,7 +354,11 @@ ExtraCompilerFactory::ExtraCompilerFactory(QObject *parent) : QObject(parent)
|
|||||||
|
|
||||||
void ExtraCompilerFactory::registerExtraCompilerFactory(ExtraCompilerFactory *factory)
|
void ExtraCompilerFactory::registerExtraCompilerFactory(ExtraCompilerFactory *factory)
|
||||||
{
|
{
|
||||||
factories()->append(factory);
|
QList<ExtraCompilerFactory *> *factoryList = factories();
|
||||||
|
factoryList->append(factory);
|
||||||
|
connect(factory, &QObject::destroyed, [factoryList, factory]() {
|
||||||
|
factoryList->removeAll(factory);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ExtraCompilerFactory *> ExtraCompilerFactory::extraCompilerFactories()
|
QList<ExtraCompilerFactory *> ExtraCompilerFactory::extraCompilerFactories()
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ class QScxmlcGeneratorFactory : public ProjectExplorer::ExtraCompilerFactory
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
QScxmlcGeneratorFactory(QObject *parent = 0) : ExtraCompilerFactory(parent) {}
|
||||||
|
|
||||||
ProjectExplorer::FileType sourceType() const override;
|
ProjectExplorer::FileType sourceType() const override;
|
||||||
|
|
||||||
QString sourceTag() const override;
|
QString sourceTag() const override;
|
||||||
|
|||||||
@@ -89,9 +89,9 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes
|
|||||||
ProjectExplorer::KitManager::registerKitInformation(new QtKitInformation);
|
ProjectExplorer::KitManager::registerKitInformation(new QtKitInformation);
|
||||||
|
|
||||||
ProjectExplorer::ExtraCompilerFactory::registerExtraCompilerFactory(
|
ProjectExplorer::ExtraCompilerFactory::registerExtraCompilerFactory(
|
||||||
new UicGeneratorFactory);
|
new UicGeneratorFactory(this));
|
||||||
ProjectExplorer::ExtraCompilerFactory::registerExtraCompilerFactory(
|
ProjectExplorer::ExtraCompilerFactory::registerExtraCompilerFactory(
|
||||||
new QScxmlcGeneratorFactory);
|
new QScxmlcGeneratorFactory(this));
|
||||||
|
|
||||||
QtVersionManager::initialized();
|
QtVersionManager::initialized();
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ class UicGeneratorFactory : public ProjectExplorer::ExtraCompilerFactory
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
UicGeneratorFactory(QObject *parent = 0) : ExtraCompilerFactory(parent) {}
|
||||||
|
|
||||||
ProjectExplorer::FileType sourceType() const override;
|
ProjectExplorer::FileType sourceType() const override;
|
||||||
|
|
||||||
QString sourceTag() const override;
|
QString sourceTag() const override;
|
||||||
|
|||||||
Reference in New Issue
Block a user