diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/config/HintProviderOption.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/config/HintProviderOption.kt index 18014d33f8b6..e4e25109881a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/config/HintProviderOption.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/config/HintProviderOption.kt @@ -8,7 +8,8 @@ internal data class HintProviderOption( val key: SettingsKey, val name: String, private var isEnabled: Boolean, - val previewText: String? + val previewText: String?, + val isOldParameterHints: Boolean = false ) { fun setEnabled(enabled: Boolean) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsConfigurable.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsConfigurable.kt index 45b2d2b0c98c..59cafbf0e047 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsConfigurable.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/config/SingleLanguageInlayHintsConfigurable.kt @@ -14,10 +14,15 @@ class SingleLanguageInlayHintsConfigurable(project: Project, val language: Langu val settings = ServiceManager.getService(InlayHintsSettings::class.java) // All configurables operate with copy of settings, that is why we can do live preview val providers = HintUtils.getHintProvidersForLanguage(language, project).map { it.withSettingsCopy() } - val options = providers.map { + val options = mutableListOf>() + providers.mapTo(options) { val provider = it.provider HintProviderOption(provider.key, provider.name, settings.hintsEnabled(provider.key, language), provider.previewText) } + val parameterHintsProvider = InlayParameterHintsExtension.forLanguage(language) + if (parameterHintsProvider != null) { + options.add(HintProviderOption(oldParameterHintsKey, "Parameter hints", true, null, true)) + } val keyToProvider = providers.associateBy { it.provider.key } val settingsWrappers = providers.map { it.toSettingsWrapper(settings, language) } SingleLanguageInlayHintsSettingsPanel(project, language, keyToProvider, settingsWrappers, providers.first(), options) @@ -49,4 +54,8 @@ class SingleLanguageInlayHintsConfigurable(project: Project, val language: Langu fun loadFromSettings() { panel.loadFromSettings() } + + companion object { + private val oldParameterHintsKey = SettingsKey("parameter.hints.old") + } } \ No newline at end of file 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 33b91bd2823f..4e17cc3918fc 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 @@ -38,7 +38,7 @@ internal class SingleLanguageInlayHintsSettingsPanel( ) : JPanel() { private val editorField = createEditor() private val hintTypeConfigurableToComponent: MutableMap = hashMapOf() - private var selectedProvider = defaultProvider + private var selectedProvider: ProviderWithSettings? = defaultProvider private val providerTypesList = CheckBoxList>() private val bottomPanel = JPanel() private val settings = ServiceManager.getService(InlayHintsSettings::class.java) @@ -48,6 +48,11 @@ internal class SingleLanguageInlayHintsSettingsPanel( } } + private val parameterHintsPanel by lazy { + val options = InlayParameterHintsExtension.forLanguage(language)?.supportedOptions ?: emptyList() + ParameterHintsSettingsPanel(language, options, true) + } + init { layout = GridLayout(1, 1) @@ -119,7 +124,10 @@ internal class SingleLanguageInlayHintsSettingsPanel( } private fun collectAndDrawHints(editor: Editor, file: PsiFile) { - val settingsWrapper = settingsWrappers.find { it.providerWithSettings.provider === selectedProvider.provider }!! + val provider = selectedProvider + // if provider == null, old parameter hints panel is current, no preview + if (provider == null) return + val settingsWrapper = settingsWrappers.find { it.providerWithSettings.provider === provider.provider }!! val collector = settingsWrapper.providerWithSettings.getCollectorWrapperFor(file, editor, settingsWrapper.language) ?: return traverse(file) { @@ -186,15 +194,20 @@ internal class SingleLanguageInlayHintsSettingsPanel( private fun initProviderList(typeSettingsPane: JBScrollPane) { providerTypesList.setCheckBoxListListener { index, value -> providerTypesList.getItemAt(index)?.setEnabled(value) - updateEditor(editorField.text) } providerTypesList.addListSelectionListener { val index = providerTypesList.selectedIndex val newOption = providerTypesList.getItemAt(index) ?: return@addListSelectionListener - val providerWithSettings = keyToProvider.getValue(newOption.key) - typeSettingsPane.setViewportView(getComponentFor(providerWithSettings.configurable)) - selectedProvider = providerWithSettings - updateEditor(newOption.previewText) + if (newOption.isOldParameterHints) { + typeSettingsPane.setViewportView(parameterHintsPanel) + selectedProvider = null + updateEditor(null) + } else { + val providerWithSettings = keyToProvider.getValue(newOption.key) + typeSettingsPane.setViewportView(getComponentFor(providerWithSettings.configurable)) + selectedProvider = providerWithSettings + updateEditor(newOption.previewText) + } } for (option in providerTypes) { providerTypesList.addItem(option, option.name, option.isEnabled())