Register/unregister CommonCodeStyleSettings from LanguageCodeStyleSettingsProvider

GitOrigin-RevId: f35d03c74fa85d3e0d9bbe70d9cd261c58c18c30
This commit is contained in:
Rustam Vishnyakov
2019-12-23 13:08:30 +00:00
committed by intellij-monorepo-bot
parent 9035ce470c
commit e37fc7d205
7 changed files with 90 additions and 2 deletions
@@ -1,9 +1,13 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.psi.codeStyle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.extensions.ExtensionPointListener;
import com.intellij.openapi.extensions.PluginDescriptor;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Collections;
@@ -15,6 +19,25 @@ public final class AppCodeStyleSettingsManager extends CodeStyleSettingsManager
registerExtensionPointListeners(ApplicationManager.getApplication());
}
@Override
protected void registerExtensionPointListeners(@NotNull Disposable disposable) {
super.registerExtensionPointListeners(disposable);
LanguageCodeStyleSettingsProvider.EP_NAME.addExtensionPointListener(
new ExtensionPointListener<LanguageCodeStyleSettingsProvider>() {
@Override
public void extensionAdded(@NotNull LanguageCodeStyleSettingsProvider extension, @NotNull PluginDescriptor pluginDescriptor) {
LanguageCodeStyleSettingsProvider.resetSettingsPagesProviders();
}
@Override
public void extensionRemoved(@NotNull LanguageCodeStyleSettingsProvider extension, @NotNull PluginDescriptor pluginDescriptor) {
LanguageCodeStyleSettingsProvider.resetSettingsPagesProviders();
}
},
disposable
);
}
@Override
protected Collection<CodeStyleSettings> enumSettings() {
return getMainProjectCodeStyle() != null ?
@@ -1413,4 +1413,13 @@ public class CodeStyleSettings extends LegacyCodeStyleSettings implements Clonea
return myModificationTracker;
}
@ApiStatus.Internal
public void removeSettings(@NotNull LanguageCodeStyleSettingsProvider provider) {
myCommonSettingsManager.removeLanguageSettings(provider.getLanguage());
}
@ApiStatus.Internal
public void registerSettings(@NotNull LanguageCodeStyleSettingsProvider provider) {
myCommonSettingsManager.addLanguageSettings(provider.getLanguage(), provider.getDefaultCommonSettings());
}
}
@@ -60,7 +60,7 @@ public class CodeStyleSettingsManager implements PersistentStateComponent<Elemen
return ApplicationManager.getApplication().getService(AppCodeStyleSettingsManager.class);
}
protected final void registerExtensionPointListeners(@NotNull Disposable disposable) {
protected void registerExtensionPointListeners(@NotNull Disposable disposable) {
FileIndentOptionsProvider.EP_NAME.addExtensionPointListener(
new ExtensionPointListener<FileIndentOptionsProvider>() {
@Override
@@ -89,6 +89,19 @@ public class CodeStyleSettingsManager implements PersistentStateComponent<Elemen
unregisterFileTypeIndentOptions(enumSettings(), extension.getFileType());
}
}, disposable);
LanguageCodeStyleSettingsProvider.EP_NAME.addExtensionPointListener(
new ExtensionPointListener<LanguageCodeStyleSettingsProvider>() {
@Override
public void extensionAdded(@NotNull LanguageCodeStyleSettingsProvider extension, @NotNull PluginDescriptor pluginDescriptor) {
registerLanguageSettings(enumSettings(), extension);
}
@Override
public void extensionRemoved(@NotNull LanguageCodeStyleSettingsProvider extension, @NotNull PluginDescriptor pluginDescriptor) {
unregisterLanguageSettings(enumSettings(), extension);
}
}, disposable
);
}
protected Collection<CodeStyleSettings> enumSettings() { return Collections.emptyList(); }
@@ -108,6 +121,20 @@ public class CodeStyleSettingsManager implements PersistentStateComponent<Elemen
notifyCodeStyleSettingsChanged();
}
@ApiStatus.Internal
public final void registerLanguageSettings(@NotNull Collection<CodeStyleSettings> allSettings,
@NotNull LanguageCodeStyleSettingsProvider provider) {
allSettings.forEach(settings -> settings.registerSettings(provider));
notifyCodeStyleSettingsChanged();
}
@ApiStatus.Internal
public final void unregisterLanguageSettings(@NotNull Collection<CodeStyleSettings> allSettings,
@NotNull LanguageCodeStyleSettingsProvider provider) {
allSettings.forEach(settings -> settings.removeSettings(provider));
notifyCodeStyleSettingsChanged();
}
/**
* @deprecated Use one of the following methods:
* <ul>
@@ -247,4 +247,12 @@ class CommonCodeStyleSettingsManager {
}
return false;
}
void removeLanguageSettings(@NotNull Language language) {
myCommonSettingsMap.remove(language);
}
void addLanguageSettings(@NotNull Language language, @NotNull CommonCodeStyleSettings settings) {
myCommonSettingsMap.put(language, settings);
}
}
@@ -368,6 +368,11 @@ public abstract class LanguageCodeStyleSettingsProvider extends CodeStyleSetting
private static final AtomicReference<List<LanguageCodeStyleSettingsProvider>> ourSettingsPagesProviders = new AtomicReference<>();
@ApiStatus.Internal
public static void resetSettingsPagesProviders() {
ourSettingsPagesProviders.set(null);
}
/**
* @return A list of providers implementing {@link #createConfigurable(CodeStyleSettings, CodeStyleSettings)}
*/
@@ -58,6 +58,22 @@ public abstract class CodeStyleSchemesImpl extends CodeStyleSchemes {
.unregisterFileTypeIndentOptions(getAllSettings(), extension.getFileType());
}
}, ApplicationManager.getApplication());
LanguageCodeStyleSettingsProvider.EP_NAME.addExtensionPointListener(
new ExtensionPointListener<LanguageCodeStyleSettingsProvider>() {
@Override
public void extensionAdded(@NotNull LanguageCodeStyleSettingsProvider extension, @NotNull PluginDescriptor pluginDescriptor) {
//noinspection deprecation
CodeStyleSettingsManager.getInstance().registerLanguageSettings(getAllSettings(), extension);
}
@Override
public void extensionRemoved(@NotNull LanguageCodeStyleSettingsProvider extension, @NotNull PluginDescriptor pluginDescriptor) {
//noinspection deprecation
CodeStyleSettingsManager.getInstance().unregisterLanguageSettings(getAllSettings(), extension);
}
}, ApplicationManager.getApplication()
);
}
private List<CodeStyleSettings> getAllSettings() {
@@ -40,7 +40,7 @@
<extensionPoint name="fileIndentOptionsProvider" interface="com.intellij.psi.codeStyle.FileIndentOptionsProvider" dynamic="true"/>
<extensionPoint name="fileCodeStyleProvider" interface="com.intellij.psi.codeStyle.FileCodeStyleProvider" dynamic="true"/>
<extensionPoint name="langCodeStyleSettingsProvider" interface="com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider" dynamic="false"/>
<extensionPoint name="langCodeStyleSettingsProvider" interface="com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider" dynamic="true"/>
<extensionPoint name="predefinedCodeStyle" interface="com.intellij.psi.codeStyle.PredefinedCodeStyle" dynamic="true"/>
</extensionPoints>
</idea-plugin>