diff --git a/platform/platform-api/api-dump-unreviewed.txt b/platform/platform-api/api-dump-unreviewed.txt index cd2a29d90714..152bfe9be9b5 100644 --- a/platform/platform-api/api-dump-unreviewed.txt +++ b/platform/platform-api/api-dump-unreviewed.txt @@ -9514,14 +9514,6 @@ f:com.intellij.ui.dsl.listCellRenderer.BuilderKt - f:setSpeedSearchHighlighting(Z):V f:com.intellij.ui.dsl.listCellRenderer.LcrUtilsKt - sf:stripHorizontalInsets(javax.swing.JComponent):V -com.intellij.ui.dsl.listCellRenderer.UiDslRendererProvider -- sf:Companion:com.intellij.ui.dsl.listCellRenderer.UiDslRendererProvider$Companion -- s:getEP():com.intellij.openapi.extensions.ExtensionPointName -- a:getRenderer(kotlin.jvm.functions.Function1):javax.swing.ListCellRenderer -- a:isApplicable():Z -f:com.intellij.ui.dsl.listCellRenderer.UiDslRendererProvider$Companion -- f:getEP():com.intellij.openapi.extensions.ExtensionPointName -- f:getRenderer(kotlin.jvm.functions.Function1):javax.swing.ListCellRenderer com.intellij.ui.dualView.CellWrapper - a:wrap(java.awt.Component,javax.swing.JTable,java.lang.Object,Z,Z,I,I,java.lang.Object):V com.intellij.ui.dualView.DualTreeElement diff --git a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/UiDslRendererProvider.kt b/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/UiDslRendererProvider.kt index 031e00c85d16..f3383d895fda 100644 --- a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/UiDslRendererProvider.kt +++ b/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/UiDslRendererProvider.kt @@ -1,33 +1,23 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.ui.dsl.listCellRenderer -import com.intellij.openapi.extensions.ExtensionPointName -import com.intellij.ui.dsl.listCellRenderer.impl.LcrRowImpl +import com.intellij.openapi.application.ApplicationManager +import org.jetbrains.annotations.ApiStatus import javax.swing.ListCellRenderer /** * Provides cell renderer for DSL UI lists (@see [com.intellij.ui.dsl.listCellRenderer.listCellRenderer] - * - * Default DSL renderer ([LcrRowImpl]) will be chosen if there are no other suitable renderer providers (@see [isApplicable]) */ +@ApiStatus.Internal interface UiDslRendererProvider { + companion object { - fun getRenderer(renderContent: LcrRow.() -> Unit): ListCellRenderer { - val renderer = EP.findFirstSafe { it.isApplicable() }?.getRenderer(renderContent) - return renderer ?: LcrRowImpl(renderContent) + fun getInstance(): UiDslRendererProvider { + return ApplicationManager.getApplication().getService(UiDslRendererProvider::class.java) + ?: throw IllegalStateException("No UiDslRendererProvider service found") } - - @JvmStatic - val EP: ExtensionPointName = ExtensionPointName("com.intellij.uiDslRendererProvider") } - /** - * Checks if the current renderer provider is applicable for the specified situation - * - * @return true if the provider is able to return its renderer ([getRenderer]) - */ - fun isApplicable(): Boolean - /** * Retrieves a `ListCellRenderer` for rendering the content of an `LcrRow`. * @@ -35,5 +25,5 @@ interface UiDslRendererProvider { * This function is responsible for providing the content of the row. * @return The `ListCellRenderer` to be used for rendering the content of an `LcrRow`. */ - fun getRenderer(renderContent: LcrRow.() -> Unit): ListCellRenderer -} \ No newline at end of file + fun getLcrRenderer(renderContent: LcrRow.() -> Unit): ListCellRenderer +} diff --git a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/builder.kt b/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/builder.kt index 06ce41d47a47..0fa3135faceb 100644 --- a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/builder.kt +++ b/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/builder.kt @@ -22,7 +22,7 @@ internal annotation class LcrDslMarker * Because of all described nuances, it is hard to write correct own render. So using Kotlin UI DSL is highly recommended */ fun listCellRenderer(init: LcrRow.() -> Unit): ListCellRenderer { - return UiDslRendererProvider.getRenderer(init) + return UiDslRendererProvider.getInstance().getLcrRenderer(init) } /** diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/DefaultUiDslRendererProvider.kt b/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/DefaultUiDslRendererProvider.kt new file mode 100644 index 000000000000..57bbd723acaf --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/DefaultUiDslRendererProvider.kt @@ -0,0 +1,15 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.ui.dsl.listCellRenderer.impl + +import com.intellij.ui.dsl.listCellRenderer.LcrRow +import com.intellij.ui.dsl.listCellRenderer.UiDslRendererProvider +import org.jetbrains.annotations.ApiStatus +import javax.swing.ListCellRenderer + +@ApiStatus.Internal +open class DefaultUiDslRendererProvider : UiDslRendererProvider { + + override fun getLcrRenderer(renderContent: LcrRow.() -> Unit): ListCellRenderer { + return LcrRowImpl(renderContent) + } +} diff --git a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrCellBaseImpl.kt b/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrCellBaseImpl.kt similarity index 100% rename from platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrCellBaseImpl.kt rename to platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrCellBaseImpl.kt diff --git a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrIconImpl.kt b/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrIconImpl.kt similarity index 100% rename from platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrIconImpl.kt rename to platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrIconImpl.kt diff --git a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrRowImpl.kt b/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrRowImpl.kt similarity index 96% rename from platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrRowImpl.kt rename to platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrRowImpl.kt index cd3691fb890c..679d044cae09 100644 --- a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrRowImpl.kt +++ b/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrRowImpl.kt @@ -10,6 +10,7 @@ import com.intellij.ui.dsl.gridLayout.HorizontalAlign import com.intellij.ui.dsl.gridLayout.UnscaledGaps import com.intellij.ui.dsl.gridLayout.builders.RowsGridBuilder import com.intellij.ui.dsl.listCellRenderer.* +import com.intellij.ui.popup.list.ComboBoxPopup import com.intellij.ui.popup.list.SelectablePanel import com.intellij.ui.render.RenderingUtil import com.intellij.ui.speedSearch.SpeedSearchUtil @@ -156,23 +157,10 @@ open class LcrRowImpl(private val renderer: LcrRow.() -> Unit) : LcrRow } private fun isComboBoxPopup(list: JList<*>): Boolean { - return isComboBoxPopupClass(list.getClientProperty(JBPopup.KEY)?.javaClass) // isSwingPopup = false + return (list.getClientProperty(JBPopup.KEY) is ComboBoxPopup<*>) // isSwingPopup = false || UIUtil.getParentOfType(BasicComboPopup::class.java, list) != null // isSwingPopup = true } - // todo move the impl into intellij.platform.ide.impl module and use `is` - private fun isComboBoxPopupClass(clazz: Class<*>?): Boolean { - var c = clazz - while (c != null) { - if (c.name == "com.intellij.ui.popup.list.ComboBoxPopup") { - return true - } - c = c.superclass - } - - return false - } - /** * Uses reflection as a workaround, don't call frequently */ diff --git a/platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrSimpleColoredTextImpl.kt b/platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrSimpleColoredTextImpl.kt similarity index 100% rename from platform/platform-api/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrSimpleColoredTextImpl.kt rename to platform/platform-impl/src/com/intellij/ui/dsl/listCellRenderer/impl/LcrSimpleColoredTextImpl.kt diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 710ef81c120b..b3ef2eac5bb2 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -564,7 +564,6 @@ - diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index 53690fb61e2d..65a7b41dc3ee 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -156,6 +156,8 @@ + Allow IDE to use the \\wsl$\ paths to access the WSL filesystem using 9P protocol (available since Windows 10 update 1903).