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");