diff --git a/platform/ide-core/src/com/intellij/openapi/options/Configurable.java b/platform/ide-core/src/com/intellij/openapi/options/Configurable.java index 43b17c53a36c..e6df6c260c8b 100644 --- a/platform/ide-core/src/com/intellij/openapi/options/Configurable.java +++ b/platform/ide-core/src/com/intellij/openapi/options/Configurable.java @@ -256,6 +256,11 @@ public interface Configurable extends UnnamedConfigurable { } + @ApiStatus.Internal + interface ClassCastChecker { + boolean tryToCast(@NotNull Class type); + } + interface TopComponentController { TopComponentController EMPTY = new TopComponentController() { @Override diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.kt b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.kt index 7956ca1fdc7b..40c136c7fb74 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.kt +++ b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.kt @@ -145,9 +145,10 @@ open class ShowSettingsUtilImpl : ShowSettingsUtil() { additionalConfiguration: Consumer?, ) { assert(Configurable::class.java.isAssignableFrom(configurableClass)) { "Not a configurable: " + configurableClass.name } - showSettingsDialog(project, { it: Configurable? -> ConfigurableWrapper.cast(configurableClass, it) != null }) { it: Configurable -> + showSettingsDialog(project, { it: Configurable? -> ConfigurableWrapper.tryToCast(configurableClass, it) }) { it: Configurable -> if (additionalConfiguration != null) { - val toConfigure = ConfigurableWrapper.cast(configurableClass, it) ?: error("Wrong configurable found: " + it.javaClass) + val toConfigure = ConfigurableWrapper.cast(configurableClass, it) + ?: error("Wrong configurable found: " + it.javaClass + " but expected: " + configurableClass) additionalConfiguration.accept(toConfigure) } } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java index a1f8bc82483c..3e0a7b7da16a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java @@ -91,6 +91,17 @@ public class ConfigurableWrapper implements SearchableConfigurable, Weighted, Hi } } + @ApiStatus.Internal + public static boolean tryToCast(@NotNull Class type, @Nullable UnnamedConfigurable configurable) { + if (cast(type, configurable) != null) { + return true; + } + if (configurable instanceof ClassCastChecker checker) { + return checker.tryToCast(type); + } + return false; + } + public static @Nullable T cast(@NotNull Class type, @Nullable UnnamedConfigurable configurable) { if (configurable instanceof ConfigurableWrapper wrapper) { if (wrapper.myConfigurable == null) {