mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
InlayHints: add old parameter hints to the language section
GitOrigin-RevId: 762e21bffb70c4e9b89017626119d7bfa7d52597
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1be4cde11d
commit
2ebbf38aaa
@@ -8,7 +8,8 @@ internal data class HintProviderOption<T>(
|
||||
val key: SettingsKey<T>,
|
||||
val name: String,
|
||||
private var isEnabled: Boolean,
|
||||
val previewText: String?
|
||||
val previewText: String?,
|
||||
val isOldParameterHints: Boolean = false
|
||||
) {
|
||||
|
||||
fun setEnabled(enabled: Boolean) {
|
||||
|
||||
+10
-1
@@ -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<HintProviderOption<out Any>>()
|
||||
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<NoSettings>("parameter.hints.old")
|
||||
}
|
||||
}
|
||||
+20
-7
@@ -38,7 +38,7 @@ internal class SingleLanguageInlayHintsSettingsPanel(
|
||||
) : JPanel() {
|
||||
private val editorField = createEditor()
|
||||
private val hintTypeConfigurableToComponent: MutableMap<ImmediateConfigurable, JComponent> = hashMapOf()
|
||||
private var selectedProvider = defaultProvider
|
||||
private var selectedProvider: ProviderWithSettings<out Any>? = defaultProvider
|
||||
private val providerTypesList = CheckBoxList<HintProviderOption<out Any>>()
|
||||
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())
|
||||
|
||||
Reference in New Issue
Block a user