diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/IdeDescriptorRenderers.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/IdeDescriptorRenderers.kt index 8db19e1f421..c24be9f199c 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/IdeDescriptorRenderers.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/IdeDescriptorRenderers.kt @@ -23,7 +23,9 @@ import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer.Companion.FQ_NAMES_IN_TYPES import org.jetbrains.kotlin.renderer.DescriptorRendererModifier import org.jetbrains.kotlin.renderer.OverrideRenderingPolicy +import org.jetbrains.kotlin.resolve.calls.inference.isCaptured import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.checker.NewCapturedTypeConstructor import org.jetbrains.kotlin.types.isDynamic import org.jetbrains.kotlin.types.typeUtil.builtIns @@ -36,6 +38,7 @@ object IdeDescriptorRenderers { private fun unwrapAnonymousType(type: KotlinType): KotlinType { if (type.isDynamic()) return type + if (type.constructor is NewCapturedTypeConstructor) return type val classifier = type.constructor.declarationDescriptor if (classifier != null && !classifier.name.isSpecial) return type diff --git a/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingPerformanceTestGenerated.java b/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingPerformanceTestGenerated.java index a2eede4dfba..a70aa64fa57 100644 --- a/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingPerformanceTestGenerated.java +++ b/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingPerformanceTestGenerated.java @@ -113,6 +113,11 @@ public class FirHighlightingPerformanceTestGenerated extends AbstractFirHighligh runTest("idea/testData/highlighter/PropertiesWithPropertyDeclarations.kt"); } + @TestMetadata("RecursiveTypes.kt") + public void testRecursiveTypes() throws Exception { + runTest("idea/testData/highlighter/RecursiveTypes.kt"); + } + @TestMetadata("SmartCast.kt") public void testSmartCast() throws Exception { runTest("idea/testData/highlighter/SmartCast.kt"); diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingTestGenerated.java index b298b2f7174..e3d59a659fd 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/FirHighlightingTestGenerated.java @@ -115,6 +115,11 @@ public class FirHighlightingTestGenerated extends AbstractFirHighlightingTest { runTest("idea/testData/highlighter/PropertiesWithPropertyDeclarations.kt"); } + @TestMetadata("RecursiveTypes.kt") + public void testRecursiveTypes() throws Exception { + runTest("idea/testData/highlighter/RecursiveTypes.kt"); + } + @TestMetadata("SmartCast.kt") public void testSmartCast() throws Exception { runTest("idea/testData/highlighter/SmartCast.kt"); diff --git a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceHighlightingTestGenerated.java b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceHighlightingTestGenerated.java index 13a1bdccd07..04ea5832cdb 100644 --- a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceHighlightingTestGenerated.java +++ b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceHighlightingTestGenerated.java @@ -113,6 +113,11 @@ public class PerformanceHighlightingTestGenerated extends AbstractPerformanceHig runTest("idea/testData/highlighter/PropertiesWithPropertyDeclarations.kt"); } + @TestMetadata("RecursiveTypes.kt") + public void testRecursiveTypes() throws Exception { + runTest("idea/testData/highlighter/RecursiveTypes.kt"); + } + @TestMetadata("SmartCast.kt") public void testSmartCast() throws Exception { runTest("idea/testData/highlighter/SmartCast.kt"); diff --git a/idea/testData/highlighter/RecursiveTypes.kt b/idea/testData/highlighter/RecursiveTypes.kt new file mode 100644 index 00000000000..cc197b93a67 --- /dev/null +++ b/idea/testData/highlighter/RecursiveTypes.kt @@ -0,0 +1,23 @@ +// IGNORE_FIR +// EXPECTED_DUPLICATED_HIGHLIGHTING +// ISSUE: KT-42263 + +interface TestModule +sealed class ResultingArtifact { + abstract class Source<R : Source<R>> : ResultingArtifact() { + abstract val frontendKind: FrontendKind<R> + } +} +class ClassicFrontendSourceArtifacts : ResultingArtifact.Source<ClassicFrontendSourceArtifacts>() { + override val frontendKind: FrontendKind<ClassicFrontendSourceArtifacts> + get() = FrontendKind.ClassicFrontend +} +sealed class FrontendKind<R : ResultingArtifact.Source<R>> { + object ClassicFrontend : FrontendKind<ClassicFrontendSourceArtifacts>() +} +abstract class DependencyProvider { + abstract fun <R : ResultingArtifact.Source<R>> registerSourceArtifact(artifact: R) +} +fun test(dependencyProvider: DependencyProvider, artifact: ResultingArtifact.Source<*>) { + dependencyProvider.registerSourceArtifact(artifact) // <- uncomment this and see exception +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java index d5c50b12aec..4c4cafcb96f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java @@ -113,6 +113,11 @@ public class HighlightingTestGenerated extends AbstractHighlightingTest { runTest("idea/testData/highlighter/PropertiesWithPropertyDeclarations.kt"); } + @TestMetadata("RecursiveTypes.kt") + public void testRecursiveTypes() throws Exception { + runTest("idea/testData/highlighter/RecursiveTypes.kt"); + } + @TestMetadata("SmartCast.kt") public void testSmartCast() throws Exception { runTest("idea/testData/highlighter/SmartCast.kt");