diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt index 1c55f24319c..9032cb8c70d 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt @@ -518,6 +518,8 @@ fun createProjectEnvironment( project.registerService(MetadataFinderFactory::class.java, finderFactory) project.registerService(VirtualFileFinderFactory::class.java, finderFactory) + project.setupHighestLanguageLevel() + return ProjectEnvironmentWithCoreEnvironmentEmulation( project, localFileSystem, diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxModernJdkCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxModernJdkCodegenTestGenerated.java index a1479df5111..4bbdc26d773 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxModernJdkCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxModernJdkCodegenTestGenerated.java @@ -766,6 +766,12 @@ public class FirLightTreeBlackBoxModernJdkCodegenTestGenerated extends AbstractF runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/javaSealedInterface.kt"); } + @Test + @TestMetadata("kotlinExhaustiveWhenOnJavaSealedClass.kt") + public void testKotlinExhaustiveWhenOnJavaSealedClass() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/kotlinExhaustiveWhenOnJavaSealedClass.kt"); + } + @Test @TestMetadata("permittedSubclassesOfSealedKotlinClass.kt") public void testPermittedSubclassesOfSealedKotlinClass() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxModernJdkCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxModernJdkCodegenTestGenerated.java index 2e949e0e489..7c3dd9f2943 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxModernJdkCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxModernJdkCodegenTestGenerated.java @@ -340,6 +340,12 @@ public class FirPsiBlackBoxModernJdkCodegenTestGenerated extends AbstractFirPsiB KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxModernJdk/testsWithJava17/records"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("binaryRecord.kt") + public void testBinaryRecord() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/records/binaryRecord.kt"); + } + @Test @TestMetadata("bytecodeShapeForJava.kt") public void testBytecodeShapeForJava() throws Exception { @@ -760,6 +766,12 @@ public class FirPsiBlackBoxModernJdkCodegenTestGenerated extends AbstractFirPsiB runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/javaSealedInterface.kt"); } + @Test + @TestMetadata("kotlinExhaustiveWhenOnJavaSealedClass.kt") + public void testKotlinExhaustiveWhenOnJavaSealedClass() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/kotlinExhaustiveWhenOnJavaSealedClass.kt"); + } + @Test @TestMetadata("permittedSubclassesOfSealedKotlinClass.kt") public void testPermittedSubclassesOfSealedKotlinClass() throws Exception { diff --git a/compiler/testData/cli/jvm/javaSealedClass.args b/compiler/testData/cli/jvm/javaSealedClass.args new file mode 100644 index 00000000000..b9ed06bb5f6 --- /dev/null +++ b/compiler/testData/cli/jvm/javaSealedClass.args @@ -0,0 +1,8 @@ +$TESTDATA_DIR$/javaSealedClass/SealedJava.java +$TESTDATA_DIR$/javaSealedClass/SubSealedAJava.java +$TESTDATA_DIR$/javaSealedClass/SubSealedBJava.java +$TESTDATA_DIR$/javaSealedClass/javaSealedClass.kt +-d +$TEMP_DIR$ +-language-version +2.0 diff --git a/compiler/testData/cli/jvm/javaSealedClass.out b/compiler/testData/cli/jvm/javaSealedClass.out new file mode 100644 index 00000000000..86ca0241885 --- /dev/null +++ b/compiler/testData/cli/jvm/javaSealedClass.out @@ -0,0 +1,2 @@ +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features +OK diff --git a/compiler/testData/cli/jvm/javaSealedClass/SealedJava.java b/compiler/testData/cli/jvm/javaSealedClass/SealedJava.java new file mode 100644 index 00000000000..fa0c180eea8 --- /dev/null +++ b/compiler/testData/cli/jvm/javaSealedClass/SealedJava.java @@ -0,0 +1 @@ +public abstract sealed class SealedJava permits SubSealedAJava, SubSealedBJava {} diff --git a/compiler/testData/cli/jvm/javaSealedClass/SubSealedAJava.java b/compiler/testData/cli/jvm/javaSealedClass/SubSealedAJava.java new file mode 100644 index 00000000000..c489a0beab9 --- /dev/null +++ b/compiler/testData/cli/jvm/javaSealedClass/SubSealedAJava.java @@ -0,0 +1 @@ +public final class SubSealedAJava extends SealedJava {} diff --git a/compiler/testData/cli/jvm/javaSealedClass/SubSealedBJava.java b/compiler/testData/cli/jvm/javaSealedClass/SubSealedBJava.java new file mode 100644 index 00000000000..878ed769144 --- /dev/null +++ b/compiler/testData/cli/jvm/javaSealedClass/SubSealedBJava.java @@ -0,0 +1 @@ +public non-sealed class SubSealedBJava extends SealedJava {} diff --git a/compiler/testData/cli/jvm/javaSealedClass/javaSealedClass.kt b/compiler/testData/cli/jvm/javaSealedClass/javaSealedClass.kt new file mode 100644 index 00000000000..60dba881e4a --- /dev/null +++ b/compiler/testData/cli/jvm/javaSealedClass/javaSealedClass.kt @@ -0,0 +1,4 @@ +fun test(sj: SealedJava) = when (sj) { + is SubSealedAJava -> "O" + is SubSealedBJava -> "K" +} diff --git a/compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/kotlinExhaustiveWhenOnJavaSealedClass.kt b/compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/kotlinExhaustiveWhenOnJavaSealedClass.kt new file mode 100644 index 00000000000..432f051d8e7 --- /dev/null +++ b/compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/kotlinExhaustiveWhenOnJavaSealedClass.kt @@ -0,0 +1,21 @@ +// TARGET_BACKEND: JVM_IR +// ISSUE: KT-56549 + +// FILE: SealedJava.java +public abstract sealed class SealedJava permits SubSealedAJava, SubSealedBJava {} + +// FILE: SubSealedAJava.java +public final class SubSealedAJava extends SealedJava {} + +// FILE: SubSealedBJava.java +public non-sealed class SubSealedBJava extends SealedJava {} + +// FILE: main.kt +fun test(sj: SealedJava) = when (sj) { + is SubSealedAJava -> "O" + is SubSealedBJava -> "K" +} + +fun box(): String { + return test(SubSealedAJava()) + test(SubSealedBJava()) +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxModernJdkCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxModernJdkCodegenTestGenerated.java index 777192d914a..e1a96081b7b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxModernJdkCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxModernJdkCodegenTestGenerated.java @@ -766,6 +766,12 @@ public class IrBlackBoxModernJdkCodegenTestGenerated extends AbstractIrBlackBoxC runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/javaSealedInterface.kt"); } + @Test + @TestMetadata("kotlinExhaustiveWhenOnJavaSealedClass.kt") + public void testKotlinExhaustiveWhenOnJavaSealedClass() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealed/kotlinExhaustiveWhenOnJavaSealedClass.kt"); + } + @Test @TestMetadata("permittedSubclassesOfSealedKotlinClass.kt") public void testPermittedSubclassesOfSealedKotlinClass() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java index 35a2d2955db..8d56689db2c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -680,6 +680,11 @@ public class CliTestGenerated extends AbstractCliTest { runTest("compiler/testData/cli/jvm/irSupported.args"); } + @TestMetadata("javaSealedClass.args") + public void testJavaSealedClass() throws Exception { + runTest("compiler/testData/cli/jvm/javaSealedClass.args"); + } + @TestMetadata("javaSrcWrongPackage.args") public void testJavaSrcWrongPackage() throws Exception { runTest("compiler/testData/cli/jvm/javaSrcWrongPackage.args");