diff --git a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt index 6484b5a493e..d82568d334a 100644 --- a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt +++ b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JvmTarget.kt @@ -33,6 +33,7 @@ enum class JvmTarget( JVM_14("14", Opcodes.V12 + 2), JVM_15("15", Opcodes.V12 + 3), JVM_16("16", Opcodes.V12 + 4), + JVM_17("17", Opcodes.V12 + 5), ; companion object { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index f8efa52d23b..c93a0b5254a 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -29886,38 +29886,48 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/supertypesCheck.kt"); } } + } + + @Nested + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17") + @TestDataPath("$PROJECT_ROOT") + public class TestsWithJava17 { + @Test + public void testAllFilesPresentInTestsWithJava17() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + } @Nested - @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses") + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses") @TestDataPath("$PROJECT_ROOT") public class SealedClasses { @Test public void testAllFilesPresentInSealedClasses() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); } @Test @TestMetadata("javaSealedClassExhaustiveness.kt") public void testJavaSealedClassExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt"); } @Test @TestMetadata("javaSealedInterfaceExhaustiveness.kt") public void testJavaSealedInterfaceExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); } @Test @TestMetadata("kotlinInheritsJavaClass.kt") public void testKotlinInheritsJavaClass() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt"); } @Test @TestMetadata("kotlinInheritsJavaInterface.kt") public void testKotlinInheritsJavaInterface() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt"); } } } diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 32e2526a358..de1d0562883 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -29886,38 +29886,48 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/supertypesCheck.kt"); } } + } + + @Nested + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17") + @TestDataPath("$PROJECT_ROOT") + public class TestsWithJava17 { + @Test + public void testAllFilesPresentInTestsWithJava17() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + } @Nested - @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses") + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses") @TestDataPath("$PROJECT_ROOT") public class SealedClasses { @Test public void testAllFilesPresentInSealedClasses() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); } @Test @TestMetadata("javaSealedClassExhaustiveness.kt") public void testJavaSealedClassExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt"); } @Test @TestMetadata("javaSealedInterfaceExhaustiveness.kt") public void testJavaSealedInterfaceExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); } @Test @TestMetadata("kotlinInheritsJavaClass.kt") public void testKotlinInheritsJavaClass() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt"); } @Test @TestMetadata("kotlinInheritsJavaInterface.kt") public void testKotlinInheritsJavaInterface() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt"); } } } diff --git a/compiler/test-infrastructure-utils/tests/org/jetbrains/kotlin/test/util/KtTestUtil.java b/compiler/test-infrastructure-utils/tests/org/jetbrains/kotlin/test/util/KtTestUtil.java index 7e4380b4c45..46ded45af2d 100644 --- a/compiler/test-infrastructure-utils/tests/org/jetbrains/kotlin/test/util/KtTestUtil.java +++ b/compiler/test-infrastructure-utils/tests/org/jetbrains/kotlin/test/util/KtTestUtil.java @@ -116,7 +116,10 @@ public class KtTestUtil { @NotNull private static File getJdkHome(@NotNull String prop, @Nullable String otherProp, @NotNull String propToReport) { - String jdk = System.getenv(prop); + String jdk = System.getProperty(prop); + if (jdk == null) { + jdk = System.getenv(prop); + } if (jdk == null) { if (otherProp != null) { return getJdkHome(otherProp, null, prop); @@ -152,6 +155,11 @@ public class KtTestUtil { return getJdkHome("JDK_15", "JDK_15_0"); } + @NotNull + public static File getJdk17Home() { + return getJdkHome("JDK_17_0", "JDK_17"); + } + @NotNull public static String getTestDataPathBase() { return getHomeDirectory() + "/compiler/testData"; diff --git a/compiler/testData/cli/jvm/wrongJvmTargetVersion.out b/compiler/testData/cli/jvm/wrongJvmTargetVersion.out index 7f6fd46a34b..d870339d0d5 100644 --- a/compiler/testData/cli/jvm/wrongJvmTargetVersion.out +++ b/compiler/testData/cli/jvm/wrongJvmTargetVersion.out @@ -1,3 +1,3 @@ error: unknown JVM target version: 1.5 -Supported versions: 1.6, 1.8, 9, 10, 11, 12, 13, 14, 15, 16 +Supported versions: 1.6, 1.8, 9, 10, 11, 12, 13, 14, 15, 16, 17 COMPILATION_ERROR diff --git a/compiler/testData/codegen/boxModernJdk/testsWithJava17/_tags.txt b/compiler/testData/codegen/boxModernJdk/testsWithJava17/_tags.txt new file mode 100644 index 00000000000..167aa007616 --- /dev/null +++ b/compiler/testData/codegen/boxModernJdk/testsWithJava17/_tags.txt @@ -0,0 +1 @@ + diff --git a/compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedClass.kt b/compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedClass.kt new file mode 100644 index 00000000000..d2b77d3a71a --- /dev/null +++ b/compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedClass.kt @@ -0,0 +1,36 @@ +// ISSUE: KT-41215, KT-43551 + +// MODULE: lib + +// FILE: Base.java +public sealed class Base permits A, B {} + +// FILE: A.java +public final class A extends Base {} + +// FILE: B.java +public sealed class B extends Base permits B.C, B.D { + public static final class C extends B {} + + public static non-sealed class D extends B {} +} + +// MODULE: main(lib) +fun test_1(base: Base): String { + return when (base) { + is A -> "O" + is B -> "Fail" + } +} + +fun test_2(base: Base): String { + return when (base) { + is A -> "Fail A" + is B.C -> "K" + is B.D -> "Fail B.D" + } +} + +fun box(): String { + return test_1(A()) + test_2(B.C()) +} diff --git a/compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedInterface.kt b/compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedInterface.kt new file mode 100644 index 00000000000..455ed01527d --- /dev/null +++ b/compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedInterface.kt @@ -0,0 +1,45 @@ +// ISSUE: KT-41215, KT-43551 + +// MODULE: lib +// FILE: Base.java +public sealed interface Base permits A, B, E {} + +// FILE: A.java +public non-sealed interface A extends Base {} + +// FILE: B.java +public sealed interface B extends Base permits B.C, B.D { + public static final class C implements B {} + + public static non-sealed interface D extends B {} +} + +// FILE: E.java +public enum E implements Base { + First, Second +} + +// MODULE: main(lib) +fun test_1(base: Base): String { + return when (base) { + is A -> "Fail A" + is B -> "Fail B" + is E -> "O" + } +} + +fun test_2(base: Base): String { + return when (base) { + is A -> "Fail A" + is B.C -> "Fail B.C" + is B.D -> "K" + E.First -> "Fail E.First" + E.Second -> "Fail E.Second" + } +} + +class MyD : B.D + +fun box(): String { + return test_1(E.First) + test_2(MyD()) +} diff --git a/compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedClass.kt b/compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedClass.kt new file mode 100644 index 00000000000..ad57f48a690 --- /dev/null +++ b/compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedClass.kt @@ -0,0 +1,34 @@ +// ISSUE: KT-41215, KT-43551 + +// FILE: Base.java +public sealed class Base permits A, B {} + +// FILE: A.java +public final class A extends Base {} + +// FILE: B.java +public sealed class B extends Base permits B.C, B.D { + public static final class C extends B {} + + public static non-sealed class D extends B {} +} + +// FILE: main.kt +fun test_1(base: Base): String { + return when (base) { + is A -> "O" + is B -> "Fail" + } +} + +fun test_2(base: Base): String { + return when (base) { + is A -> "Fail A" + is B.C -> "K" + is B.D -> "Fail B.D" + } +} + +fun box(): String { + return test_1(A()) + test_2(B.C()) +} diff --git a/compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedInterface.kt b/compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedInterface.kt new file mode 100644 index 00000000000..f5f4813a9b5 --- /dev/null +++ b/compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedInterface.kt @@ -0,0 +1,44 @@ +// ISSUE: KT-41215, KT-43551 + +// FILE: Base.java +public sealed interface Base permits A, B, E {} + +// FILE: A.java +public non-sealed interface A extends Base {} + +// FILE: B.java +public sealed interface B extends Base permits B.C, B.D { + public static final class C implements B {} + + public static non-sealed interface D extends B {} +} + +// FILE: E.java +public enum E implements Base { + First, Second +} + +// FILE: main.kt +fun test_1(base: Base): String { + return when (base) { + is A -> "Fail A" + is B -> "Fail B" + is E -> "O" + } +} + +fun test_2(base: Base): String { + return when (base) { + is A -> "Fail A" + is B.C -> "Fail B.C" + is B.D -> "K" + E.First -> "Fail E.First" + E.Second -> "Fail E.Second" + } +} + +class MyD : B.D + +fun box(): String { + return test_1(E.First) + test_2(MyD()) +} diff --git a/compiler/testData/codegen/boxModernJdk/testsWithJava17/sealedJavaClassViaJavaReflection.kt b/compiler/testData/codegen/boxModernJdk/testsWithJava17/sealedJavaClassViaJavaReflection.kt new file mode 100644 index 00000000000..5485b25e7aa --- /dev/null +++ b/compiler/testData/codegen/boxModernJdk/testsWithJava17/sealedJavaClassViaJavaReflection.kt @@ -0,0 +1,17 @@ +// WITH_REFLECT +// FILE: Base.java +public sealed class Base permits O, K {} + +// FILE: O.java +public final class O extends Base {} + +// FILE: K.java +public non-sealed class K extends Base {} + +// FILE: main.kt + +fun box(): String { + val clazz = Base::class.java + if (!clazz.isSealed) return "Error: Base is not sealed" + return clazz.permittedSubclasses.joinToString("") { it.simpleName ?: "_No name provided_" } +} diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.fir.kt similarity index 100% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.fir.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.fir.kt diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt similarity index 88% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt index 6bd8769c2bd..0ae9771eb1f 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt @@ -16,14 +16,14 @@ public sealed class B extends Base permits B.C, B.D { // FILE: main.kt fun test_ok_1(base: Base) { - val x = when (base) { + val x = when (base) { is A -> 1 is B -> 2 } } fun test_ok_2(base: Base) { - val x = when (base) { + val x = when (base) { is A -> 1 is B.C -> 2 is B.D -> 3 diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.txt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.txt similarity index 96% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.txt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.txt index 5a14a0617b1..8d90f4c6fcf 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.txt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.txt @@ -12,7 +12,7 @@ public final class A : Base { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -public abstract class B : Base { +public sealed class B : Base { public constructor B() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -33,7 +33,7 @@ public abstract class B : Base { } } -public abstract class Base { +public sealed class Base { public constructor Base() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt similarity index 100% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.fir.kt diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt similarity index 92% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt index 47af93f24e0..3419f18de62 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt @@ -21,7 +21,7 @@ public enum E implements Base { // FILE: main.kt fun test_ok_1(base: Base) { - val x = when (base) { + val x = when (base) { is A -> 1 is B -> 2 is E -> 3 @@ -29,7 +29,7 @@ fun test_ok_1(base: Base) { } fun test_ok_2(base: Base) { - val x = when (base) { + val x = when (base) { is A -> 1 is B.C -> 2 is B.D -> 3 diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.txt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.txt similarity index 98% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.txt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.txt index fc87a4c379d..6b88bec8277 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.txt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.txt @@ -12,7 +12,7 @@ public interface A : Base { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -public interface B : Base { +public sealed interface B : Base { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String @@ -31,7 +31,7 @@ public interface B : Base { } } -public interface Base { +public sealed interface Base { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.fir.kt similarity index 100% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.fir.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.fir.kt diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt similarity index 100% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.txt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.txt similarity index 96% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.txt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.txt index 707ef3816da..0b902f9c44b 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.txt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.txt @@ -14,7 +14,7 @@ public final class B : Base { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -public abstract class Base { +public sealed class Base { public constructor Base() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.fir.kt similarity index 100% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.fir.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.fir.kt diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.kt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt similarity index 100% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.kt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.txt b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.txt similarity index 96% rename from compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.txt rename to compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.txt index cf566afb543..5e98dbfb22d 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.txt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.txt @@ -14,7 +14,7 @@ public final class B : Base { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -public interface Base { +public sealed interface Base { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String 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 81c42d5369a..c108ca604ed 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 @@ -29982,38 +29982,48 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/supertypesCheck.kt"); } } + } + + @Nested + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17") + @TestDataPath("$PROJECT_ROOT") + public class TestsWithJava17 { + @Test + public void testAllFilesPresentInTestsWithJava17() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + } @Nested - @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses") + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses") @TestDataPath("$PROJECT_ROOT") public class SealedClasses { @Test public void testAllFilesPresentInSealedClasses() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); } @Test @TestMetadata("javaSealedClassExhaustiveness.kt") public void testJavaSealedClassExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt"); } @Test @TestMetadata("javaSealedInterfaceExhaustiveness.kt") public void testJavaSealedInterfaceExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); } @Test @TestMetadata("kotlinInheritsJavaClass.kt") public void testKotlinInheritsJavaClass() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt"); } @Test @TestMetadata("kotlinInheritsJavaInterface.kt") public void testKotlinInheritsJavaInterface() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt"); } } } diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxModernJdkCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxModernJdkCodegenTestGenerated.java index f9c7da77f23..9680cafe029 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxModernJdkCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxModernJdkCodegenTestGenerated.java @@ -107,6 +107,47 @@ public class BlackBoxModernJdkCodegenTestGenerated extends AbstractBlackBoxCodeg } } + @Nested + @Tag("") + @TestMetadata("compiler/testData/codegen/boxModernJdk/testsWithJava17") + @TestDataPath("$PROJECT_ROOT") + public class TestsWithJava17 { + @Test + public void testAllFilesPresentInTestsWithJava17() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxModernJdk/testsWithJava17"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); + } + + @Test + @TestMetadata("compiledJavaSealedClass.kt") + public void testCompiledJavaSealedClass() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedClass.kt"); + } + + @Test + @TestMetadata("compiledJavaSealedInterface.kt") + public void testCompiledJavaSealedInterface() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedInterface.kt"); + } + + @Test + @TestMetadata("javaSealedClass.kt") + public void testJavaSealedClass() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedClass.kt"); + } + + @Test + @TestMetadata("javaSealedInterface.kt") + public void testJavaSealedInterface() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedInterface.kt"); + } + + @Test + @TestMetadata("sealedJavaClassViaJavaReflection.kt") + public void testSealedJavaClassViaJavaReflection() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealedJavaClassViaJavaReflection.kt"); + } + } + @Nested @Tag("") @TestMetadata("compiler/testData/codegen/boxModernJdk/testsWithJava9") 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 6cda0bd9916..1cbdac21a17 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 @@ -107,6 +107,47 @@ public class IrBlackBoxModernJdkCodegenTestGenerated extends AbstractIrBlackBoxC } } + @Nested + @Tag("") + @TestMetadata("compiler/testData/codegen/boxModernJdk/testsWithJava17") + @TestDataPath("$PROJECT_ROOT") + public class TestsWithJava17 { + @Test + public void testAllFilesPresentInTestsWithJava17() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxModernJdk/testsWithJava17"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("compiledJavaSealedClass.kt") + public void testCompiledJavaSealedClass() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedClass.kt"); + } + + @Test + @TestMetadata("compiledJavaSealedInterface.kt") + public void testCompiledJavaSealedInterface() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/compiledJavaSealedInterface.kt"); + } + + @Test + @TestMetadata("javaSealedClass.kt") + public void testJavaSealedClass() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedClass.kt"); + } + + @Test + @TestMetadata("javaSealedInterface.kt") + public void testJavaSealedInterface() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/javaSealedInterface.kt"); + } + + @Test + @TestMetadata("sealedJavaClassViaJavaReflection.kt") + public void testSealedJavaClassViaJavaReflection() throws Exception { + runTest("compiler/testData/codegen/boxModernJdk/testsWithJava17/sealedJavaClassViaJavaReflection.kt"); + } + } + @Nested @Tag("") @TestMetadata("compiler/testData/codegen/boxModernJdk/testsWithJava9") diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/classic/JavaCompilerFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/classic/JavaCompilerFacade.kt index 7ca9021661e..2e61ff2c0af 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/classic/JavaCompilerFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/classic/JavaCompilerFacade.kt @@ -84,6 +84,7 @@ class JavaCompilerFacade(private val testServices: TestServices) { JvmTarget.JVM_9 -> KtTestUtil.getJdk9Home() JvmTarget.JVM_11 -> KtTestUtil.getJdk11Home() JvmTarget.JVM_15 -> KtTestUtil.getJdk15Home() + JvmTarget.JVM_17 -> KtTestUtil.getJdk17Home() else -> null } ?: error("JDK for $jvmTarget is not found") diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt index bb36a32969b..166c8266eac 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt @@ -112,6 +112,14 @@ abstract class AbstractDiagnosticTest : AbstractKotlinCompilerTest() { } } + forTestsMatching("compiler/testData/diagnostics/tests/testsWithJava17/*") { + defaultDirectives { + JDK_KIND with TestJdkKind.FULL_JDK_17 + +WITH_STDLIB + +WITH_REFLECT + } + } + // ----------------------- constant evaluation tests ----------------------- forTestsMatching("compiler/testData/diagnostics/tests/constantEvaluator/*") { defaultDirectives { diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/AbstractJvmBlackBoxCodegenTestBase.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/AbstractJvmBlackBoxCodegenTestBase.kt index 3dcd5709138..ec9f85c4f0f 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/AbstractJvmBlackBoxCodegenTestBase.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/codegen/AbstractJvmBlackBoxCodegenTestBase.kt @@ -64,6 +64,10 @@ abstract class AbstractJvmBlackBoxCodegenTestBase { configuration.put(JVMConfigurationKeys.JDK_HOME, KtTestUtil.getJdk15Home()) } + TestJdkKind.FULL_JDK_17 -> { + configuration.put(JVMConfigurationKeys.JDK_HOME, KtTestUtil.getJdk17Home()) + } TestJdkKind.FULL_JDK -> { if (SystemInfo.IS_AT_LEAST_JAVA9) { configuration.put(JVMConfigurationKeys.JDK_HOME, File(System.getProperty("java.home"))) diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt index 3db48713d96..3d8ae3468c1 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt @@ -81,8 +81,11 @@ class LazyJavaClassDescriptor( private val modality = if (jClass.isAnnotationType || jClass.isEnum) Modality.FINAL - // TODO: replace false with jClass.isSealed when it will be properly supported in platform - else Modality.convertFromFlags(sealed = false, jClass.isSealed || jClass.isAbstract || jClass.isInterface, !jClass.isFinal) + else Modality.convertFromFlags( + sealed = jClass.isSealed, + abstract = jClass.isSealed || jClass.isAbstract || jClass.isInterface, + open = !jClass.isFinal + ) private val visibility = jClass.visibility private val isInner = jClass.outerClass != null && !jClass.isStatic diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index c185ff775da..9819cba51f0 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -29886,38 +29886,48 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/supertypesCheck.kt"); } } + } + + @Nested + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17") + @TestDataPath("$PROJECT_ROOT") + public class TestsWithJava17 { + @Test + public void testAllFilesPresentInTestsWithJava17() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + } @Nested - @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses") + @TestMetadata("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses") @TestDataPath("$PROJECT_ROOT") public class SealedClasses { @Test public void testAllFilesPresentInSealedClasses() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); } @Test @TestMetadata("javaSealedClassExhaustiveness.kt") public void testJavaSealedClassExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedClassExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedClassExhaustiveness.kt"); } @Test @TestMetadata("javaSealedInterfaceExhaustiveness.kt") public void testJavaSealedInterfaceExhaustiveness() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/javaSealedInterfaceExhaustiveness.kt"); } @Test @TestMetadata("kotlinInheritsJavaClass.kt") public void testKotlinInheritsJavaClass() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaClass.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaClass.kt"); } @Test @TestMetadata("kotlinInheritsJavaInterface.kt") public void testKotlinInheritsJavaInterface() throws Exception { - runTest("compiler/testData/diagnostics/tests/testsWithJava15/sealedClasses/kotlinInheritsJavaInterface.kt"); + runTest("compiler/testData/diagnostics/tests/testsWithJava17/sealedClasses/kotlinInheritsJavaInterface.kt"); } } }