forked from qt-creator/qt-creator
Avoid crash on qmljs plugin unload
The unload of qmljs plugin caused qmljs code style settings to be deleted, while core still had a pointer to them and used it afterwards. Added unregisterCodeStyle* methods for symmetry and used them on plugin destruction. Change-Id: I49f0fc52f3e71d053e6ada604672a4cc3eafa486 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
@@ -241,6 +241,11 @@ CppToolsSettings::~CppToolsSettings()
|
|||||||
{
|
{
|
||||||
ExtensionSystem::PluginManager::removeObject(d->m_completionSettingsPage);
|
ExtensionSystem::PluginManager::removeObject(d->m_completionSettingsPage);
|
||||||
|
|
||||||
|
TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance();
|
||||||
|
textEditorSettings->unregisterCodeStyle(Constants::CPP_SETTINGS_ID);
|
||||||
|
textEditorSettings->unregisterCodeStylePool(Constants::CPP_SETTINGS_ID);
|
||||||
|
textEditorSettings->unregisterCodeStyleFactory(Constants::CPP_SETTINGS_ID);
|
||||||
|
|
||||||
delete d;
|
delete d;
|
||||||
|
|
||||||
m_instance = 0;
|
m_instance = 0;
|
||||||
|
|||||||
@@ -159,6 +159,11 @@ QmlJSToolsSettings::QmlJSToolsSettings(QObject *parent)
|
|||||||
|
|
||||||
QmlJSToolsSettings::~QmlJSToolsSettings()
|
QmlJSToolsSettings::~QmlJSToolsSettings()
|
||||||
{
|
{
|
||||||
|
TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance();
|
||||||
|
textEditorSettings->unregisterCodeStyle(QmlJSTools::Constants::QML_JS_SETTINGS_ID);
|
||||||
|
textEditorSettings->unregisterCodeStylePool(QmlJSTools::Constants::QML_JS_SETTINGS_ID);
|
||||||
|
textEditorSettings->unregisterCodeStyleFactory(QmlJSTools::Constants::QML_JS_SETTINGS_ID);
|
||||||
|
|
||||||
delete m_globalCodeStyle;
|
delete m_globalCodeStyle;
|
||||||
m_globalCodeStyle = 0;
|
m_globalCodeStyle = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -411,6 +411,11 @@ void TextEditorSettings::registerCodeStyleFactory(ICodeStylePreferencesFactory *
|
|||||||
m_d->m_languageToFactory.insert(factory->languageId(), factory);
|
m_d->m_languageToFactory.insert(factory->languageId(), factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextEditorSettings::unregisterCodeStyleFactory(Core::Id languageId)
|
||||||
|
{
|
||||||
|
m_d->m_languageToFactory.remove(languageId);
|
||||||
|
}
|
||||||
|
|
||||||
QMap<Core::Id, ICodeStylePreferencesFactory *> TextEditorSettings::codeStyleFactories() const
|
QMap<Core::Id, ICodeStylePreferencesFactory *> TextEditorSettings::codeStyleFactories() const
|
||||||
{
|
{
|
||||||
return m_d->m_languageToFactory;
|
return m_d->m_languageToFactory;
|
||||||
@@ -441,6 +446,11 @@ void TextEditorSettings::registerCodeStyle(Core::Id languageId, ICodeStylePrefer
|
|||||||
m_d->m_languageToCodeStyle.insert(languageId, prefs);
|
m_d->m_languageToCodeStyle.insert(languageId, prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextEditorSettings::unregisterCodeStyle(Core::Id languageId)
|
||||||
|
{
|
||||||
|
m_d->m_languageToCodeStyle.remove(languageId);
|
||||||
|
}
|
||||||
|
|
||||||
CodeStylePool *TextEditorSettings::codeStylePool() const
|
CodeStylePool *TextEditorSettings::codeStylePool() const
|
||||||
{
|
{
|
||||||
return m_d->m_behaviorSettingsPage->codeStylePool();
|
return m_d->m_behaviorSettingsPage->codeStylePool();
|
||||||
@@ -456,6 +466,11 @@ void TextEditorSettings::registerCodeStylePool(Core::Id languageId, CodeStylePoo
|
|||||||
m_d->m_languageToCodeStylePool.insert(languageId, pool);
|
m_d->m_languageToCodeStylePool.insert(languageId, pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextEditorSettings::unregisterCodeStylePool(Core::Id languageId)
|
||||||
|
{
|
||||||
|
m_d->m_languageToCodeStylePool.remove(languageId);
|
||||||
|
}
|
||||||
|
|
||||||
void TextEditorSettings::registerMimeTypeForLanguageId(const QString &mimeType, Core::Id languageId)
|
void TextEditorSettings::registerMimeTypeForLanguageId(const QString &mimeType, Core::Id languageId)
|
||||||
{
|
{
|
||||||
m_d->m_mimeTypeToLanguage.insert(mimeType, languageId);
|
m_d->m_mimeTypeToLanguage.insert(mimeType, languageId);
|
||||||
|
|||||||
@@ -92,15 +92,18 @@ public:
|
|||||||
ICodeStylePreferencesFactory *codeStyleFactory(Core::Id languageId) const;
|
ICodeStylePreferencesFactory *codeStyleFactory(Core::Id languageId) const;
|
||||||
QMap<Core::Id, ICodeStylePreferencesFactory *> codeStyleFactories() const;
|
QMap<Core::Id, ICodeStylePreferencesFactory *> codeStyleFactories() const;
|
||||||
void registerCodeStyleFactory(ICodeStylePreferencesFactory *codeStyleFactory);
|
void registerCodeStyleFactory(ICodeStylePreferencesFactory *codeStyleFactory);
|
||||||
|
void unregisterCodeStyleFactory(Core::Id languageId);
|
||||||
|
|
||||||
CodeStylePool *codeStylePool() const;
|
CodeStylePool *codeStylePool() const;
|
||||||
CodeStylePool *codeStylePool(Core::Id languageId) const;
|
CodeStylePool *codeStylePool(Core::Id languageId) const;
|
||||||
void registerCodeStylePool(Core::Id languageId, CodeStylePool *pool);
|
void registerCodeStylePool(Core::Id languageId, CodeStylePool *pool);
|
||||||
|
void unregisterCodeStylePool(Core::Id languageId);
|
||||||
|
|
||||||
ICodeStylePreferences *codeStyle() const;
|
ICodeStylePreferences *codeStyle() const;
|
||||||
ICodeStylePreferences *codeStyle(Core::Id languageId) const;
|
ICodeStylePreferences *codeStyle(Core::Id languageId) const;
|
||||||
QMap<Core::Id, ICodeStylePreferences *> codeStyles() const;
|
QMap<Core::Id, ICodeStylePreferences *> codeStyles() const;
|
||||||
void registerCodeStyle(Core::Id languageId, ICodeStylePreferences *prefs);
|
void registerCodeStyle(Core::Id languageId, ICodeStylePreferences *prefs);
|
||||||
|
void unregisterCodeStyle(Core::Id languageId);
|
||||||
|
|
||||||
void registerMimeTypeForLanguageId(const QString &mimeType, Core::Id languageId);
|
void registerMimeTypeForLanguageId(const QString &mimeType, Core::Id languageId);
|
||||||
Core::Id languageId(const QString &mimeType) const;
|
Core::Id languageId(const QString &mimeType) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user