diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 7e575f33b40..212a8a9f660 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -3901,6 +3901,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/types"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("bareWithFlexibleArg.kt") + public void testBareWithFlexibleArg() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.kt"); + } + @Test @TestMetadata("bareWithSubjectTypeAlias.kt") public void testBareWithSubjectTypeAlias() throws Exception { diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index 25759941174..f121e9d32bc 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -3496,6 +3496,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/types"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @TestMetadata("bareWithFlexibleArg.kt") + public void testBareWithFlexibleArg() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.kt"); + } + @TestMetadata("bareWithSubjectTypeAlias.kt") public void testBareWithSubjectTypeAlias() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/types/bareWithSubjectTypeAlias.kt"); diff --git a/compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.fir.txt b/compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.fir.txt new file mode 100644 index 00000000000..8afdaa5cd48 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.fir.txt @@ -0,0 +1,6 @@ +FILE: main.kt + public final fun foo(x: R|Promise|): R|kotlin/Unit| { + R|/bar|((R|/x| as R|CancellablePromise|)) + } + public final fun bar(x: R|CancellablePromise|): R|kotlin/Unit| { + } diff --git a/compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.kt b/compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.kt new file mode 100644 index 00000000000..b89971f5850 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.kt @@ -0,0 +1,15 @@ +// FIR_IDENTICAL +// SKIP_TXT + +// FILE: Promise.java +public interface Promise {} + +// FILE: CancellablePromise.java +public interface CancellablePromise extends Promise {} + +// FILE: main.kt +fun foo(x: Promise) { + bar(x as CancellablePromise) +} +fun bar(x: CancellablePromise) {} + diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index 57517a67b3e..5e34ec31c44 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -3901,6 +3901,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/types"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("bareWithFlexibleArg.kt") + public void testBareWithFlexibleArg() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.kt"); + } + @Test @TestMetadata("bareWithSubjectTypeAlias.kt") public void testBareWithSubjectTypeAlias() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 9be6320aea7..9b1c43e88a3 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -3901,6 +3901,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolve/types"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("bareWithFlexibleArg.kt") + public void testBareWithFlexibleArg() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/types/bareWithFlexibleArg.kt"); + } + @Test @TestMetadata("bareWithSubjectTypeAlias.kt") public void testBareWithSubjectTypeAlias() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt index 6d56e28e559..69f6da8899a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/bareTypes.kt @@ -97,7 +97,7 @@ private fun BodyResolveComponents.doUnify( } // Foo? ~ X? => Foo ~ X - if (originalType?.nullability?.isNullable == true && typeWithParameters?.nullability?.isNullable == true) { + if (originalType?.nullability == ConeNullability.NULLABLE && typeWithParameters?.nullability == ConeNullability.NULLABLE) { return doUnify( originalTypeProjection.removeQuestionMark(session.typeContext), typeWithParametersProjection.removeQuestionMark(session.typeContext), @@ -113,17 +113,14 @@ private fun BodyResolveComponents.doUnify( if (typeWithParameters is ConeFlexibleType) { return doUnify( - if (originalType?.nullability?.isNullable == true) - originalTypeProjection.removeQuestionMark(session.typeContext) - else - originalTypeProjection, + originalTypeProjection, typeWithParametersProjection.replaceType(typeWithParameters.lowerBound), targetTypeParameters, result, ) } // Foo ~ X? => fail - if (originalType?.nullability?.isNullable != true && typeWithParameters?.nullability?.isNullable == true) { + if (originalType?.nullability != ConeNullability.NULLABLE && typeWithParameters?.nullability == ConeNullability.NULLABLE) { return true }