diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 8d80f87a19f..2ba1ee18690 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -20156,6 +20156,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/j+k/kt36856.kt"); } + @Test + @TestMetadata("kt60580.kt") + public void testKt60580() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/kt60580.kt"); + } + @Test @TestMetadata("kt6720_abstractProperty.kt") public void testKt6720_abstractProperty() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 24794e624e8..64e3832ea0c 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -20156,6 +20156,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/j+k/kt36856.kt"); } + @Test + @TestMetadata("kt60580.kt") + public void testKt60580() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/kt60580.kt"); + } + @Test @TestMetadata("kt6720_abstractProperty.kt") public void testKt6720_abstractProperty() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 4907f4bb02e..c477a9de022 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -20156,6 +20156,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/j+k/kt36856.kt"); } + @Test + @TestMetadata("kt60580.kt") + public void testKt60580() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/kt60580.kt"); + } + @Test @TestMetadata("kt6720_abstractProperty.kt") public void testKt6720_abstractProperty() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 2a266523a58..0defec62bf6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -20162,6 +20162,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/j+k/kt36856.kt"); } + @Test + @TestMetadata("kt60580.kt") + public void testKt60580() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/kt60580.kt"); + } + @Test @TestMetadata("kt6720_abstractProperty.kt") public void testKt6720_abstractProperty() throws Exception { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt index 567f7478bac..7cab694b908 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt @@ -136,7 +136,22 @@ fun ConeDynamicType.Companion.create(session: FirSession): ConeDynamicType = * * @see CustomAnnotationTypeAttribute.independentInstance */ -fun ConeKotlinType.independentInstance(): ConeKotlinType = instanceWithIndependentArguments().instanceWithIndependentAnnotations() +@OptIn(DynamicTypeConstructor::class) +fun ConeKotlinType.independentInstance(): ConeKotlinType = if (this is ConeFlexibleType) { + val newLowerBound = lowerBound.independentInstance() as ConeSimpleKotlinType + val newUpperBound = upperBound.independentInstance() as ConeSimpleKotlinType + if (newLowerBound !== lowerBound || newUpperBound !== upperBound) { + when (this) { + is ConeRawType -> ConeRawType.create(newLowerBound, newUpperBound) + is ConeDynamicType -> ConeDynamicType(newLowerBound, newUpperBound) + else -> ConeFlexibleType(newLowerBound, newUpperBound) + } + } else { + this + } +} else { + instanceWithIndependentArguments().instanceWithIndependentAnnotations() +} private fun ConeKotlinType.instanceWithIndependentArguments(): ConeKotlinType { val typeProjections = typeArguments diff --git a/compiler/testData/diagnostics/tests/j+k/kt60580.kt b/compiler/testData/diagnostics/tests/j+k/kt60580.kt new file mode 100644 index 00000000000..935b60e4227 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/kt60580.kt @@ -0,0 +1,24 @@ +// FIR_IDENTICAL +// FILE: usage.kt +@Target(AnnotationTarget.TYPE) +annotation class Anno + +data class P(val t1: T1, val t2: T2) + +fun foo(m: Manager>) { + m.action {} +} + +// FILE: Manager.java +import org.jetbrains.annotations.NotNull; + +public interface Manager { + @NotNull + Manager action(@NotNull Consumer handler); +} + +// FILE: Consumer.java +@FunctionalInterface +public interface Consumer { + void accept(T t); +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index afe0cc37dc0..743391f1114 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -20162,6 +20162,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/j+k/kt36856.kt"); } + @Test + @TestMetadata("kt60580.kt") + public void testKt60580() throws Exception { + runTest("compiler/testData/diagnostics/tests/j+k/kt60580.kt"); + } + @Test @TestMetadata("kt6720_abstractProperty.kt") public void testKt6720_abstractProperty() throws Exception {