diff --git a/platform/lang-api/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsSettings.kt b/platform/lang-api/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsSettings.kt index 95ccb97ae1d4..76ba95ea1f1c 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsSettings.kt +++ b/platform/lang-api/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsSettings.kt @@ -44,6 +44,7 @@ class ParameterNameHintsSettings : PersistentStateComponent { private val removedPatterns = hashMapOf>() private val addedPatterns = hashMapOf>() private val options = hashMapOf() + private val disabledLanguages = hashSetOf() fun addIgnorePattern(language: Language, pattern: String) { val patternsBefore = getAddedPatterns(language) @@ -95,6 +96,18 @@ class ParameterNameHintsSettings : PersistentStateComponent { return root } + fun setIsEnabledForLanguage(enabled: Boolean, language: Language) { + if (!enabled) { + disabledLanguages.add(language.id) + } else { + disabledLanguages.remove(language.id) + } + } + + fun isEnabledForLanguage(language: Language): Boolean { + return language.id !in disabledLanguages + } + override fun loadState(state: Element) { addedPatterns.clear() removedPatterns.clear() diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/HintUtils.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/HintUtils.kt index ebe1c9518d0f..75b18ac2d727 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/HintUtils.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/HintUtils.kt @@ -2,8 +2,10 @@ package com.intellij.codeInsight.hints import com.intellij.codeInsight.hints.filtering.MatcherConstructor +import com.intellij.codeInsight.hints.settings.ParameterNameHintsSettings import com.intellij.lang.Language import com.intellij.lang.LanguageExtensionPoint +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.util.text.StringUtil import java.util.* @@ -47,4 +49,17 @@ fun getBaseLanguagesWithProviders(): List { .map { (first) -> first } .sorted(Comparator.comparing { l -> l.displayName }) .collect(Collectors.toList()) +} + +fun isHintsEnabledForLanguage(language: Language): Boolean { + if (!EditorSettingsExternalizable.getInstance().isShowParameterNameHints) return false + return ParameterNameHintsSettings.getInstance().isEnabledForLanguage(language) +} + +fun setShowAllParameterHints(value: Boolean) { + EditorSettingsExternalizable.getInstance().isShowParameterNameHints = value +} + +fun setShowParameterHintsForLanguage(value: Boolean, language: Language) { + ParameterNameHintsSettings.getInstance().setIsEnabledForLanguage(value, language) } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPass.java index cf3ef049c6be..b6b40c24d13d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPass.java @@ -21,7 +21,6 @@ import com.intellij.diff.util.DiffUtil; import com.intellij.lang.Language; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Inlay; -import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.editor.ex.util.EditorScrollingPositionKeeper; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.util.ProgressIndicatorBase; @@ -78,13 +77,13 @@ public class ParameterHintsPass extends EditorBoundHighlightingPass { Language language = myFile.getLanguage(); InlayParameterHintsProvider provider = InlayParameterHintsExtension.INSTANCE.forLanguage(language); - if (provider == null || !provider.canShowHintsWhenDisabled() && !isEnabled() || DiffUtil.isDiffEditor(myEditor)) return; + if (provider == null || !provider.canShowHintsWhenDisabled() && !isEnabled(language) || DiffUtil.isDiffEditor(myEditor)) return; myTraverser.forEach(element -> process(element, provider)); } - private static boolean isEnabled() { - return EditorSettingsExternalizable.getInstance().isShowParameterNameHints(); + private static boolean isEnabled(Language language) { + return HintUtilsKt.isHintsEnabledForLanguage(language); } private void process(PsiElement element, InlayParameterHintsProvider provider) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsSettingsPanel.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsSettingsPanel.kt index dfa34d518a30..6f0dca07df23 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsSettingsPanel.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsSettingsPanel.kt @@ -28,6 +28,8 @@ import javax.swing.JComponent import javax.swing.JPanel import javax.swing.SwingUtilities +// Note: old parameter hints panel is special cased as it rely on global settings, so it doesn't fit to this model, +// but logically belongs to this settings internal class SingleLanguageInlayHintsSettingsPanel( val project: Project, val language: Language, @@ -188,7 +190,11 @@ internal class SingleLanguageInlayHintsSettingsPanel( settingsWrapper.apply() } for (providerType in providerTypes) { - settings.changeHintTypeStatus(providerType.key, language, providerType.isEnabled()) + if (providerType.isOldParameterHints) { + setShowParameterHintsForLanguage(providerType.isEnabled(), language) + } else { + settings.changeHintTypeStatus(providerType.key, language, providerType.isEnabled()) + } } parameterHintsPanel?.saveOptions() }