From 5a1f5bc28bd606b38786f0bbc1afbd9a287438f8 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Thu, 11 Oct 2018 00:37:56 +0300 Subject: [PATCH] speedup code setting init/clone/external writing - calculate page providers once - get rif of expensive reflection calls --- .../psi/codeStyle/LanguageCodeStyleSettingsProvider.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java b/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java index ea15c79b494f..bc426ec5ff0a 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java @@ -18,6 +18,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; /** * Base class and extension point for common code style settings for a specific language. @@ -323,11 +324,17 @@ public abstract class LanguageCodeStyleSettingsProvider extends CodeStyleSetting this.getClass().getCanonicalName() + " for language #" + getLanguage().getID() + " doesn't implement createConfigurable()"); } + private static final AtomicReference> ourSettingsPagesProviders = new AtomicReference<>(); /** * @return A list of providers implementing {@link #createConfigurable(CodeStyleSettings, CodeStyleSettings)} */ public static List getSettingsPagesProviders() { + return ourSettingsPagesProviders.updateAndGet(__ -> __ != null ? __ : calcSettingPagesProviders()); + } + + @NotNull + protected static List calcSettingPagesProviders() { List settingsPagesProviders = ContainerUtil.newArrayList(); for (LanguageCodeStyleSettingsProvider provider : EP_NAME.getExtensionList()) { try {