diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ConstructorCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ConstructorCodegen.java index cf1bb8fab10..5d6cdd92961 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ConstructorCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ConstructorCodegen.java @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; -import org.jetbrains.kotlin.resolve.jvm.InlineClassManglingRulesKt; import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin; import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt; import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind; @@ -118,8 +117,9 @@ public class ConstructorCodegen { } private void registerAccessorForHiddenConstructorIfNeeded(ClassConstructorDescriptor descriptor) { - if (!InlineClassManglingRulesKt.shouldHideConstructorDueToInlineClassTypeValueParameters(descriptor)) return; - context.getAccessor(descriptor, AccessorKind.NORMAL, null, null); + if (DescriptorAsmUtil.isHiddenConstructor(descriptor)) { + context.getAccessor(descriptor, AccessorKind.NORMAL, null, null); + } } public void generateSecondaryConstructor( @@ -371,11 +371,13 @@ public class ConstructorCodegen { JvmMethodParameterKind delegatingKind = delegatingParameters.get(index).getKind(); if (delegatingKind == JvmMethodParameterKind.VALUE) { assert index == parameters.size() || parameters.get(index).getKind() == JvmMethodParameterKind.VALUE: - "Delegating constructor has not enough implicit parameters"; + "Delegating constructor has not enough implicit parameters: " + delegatingConstructor; break; } - assert index < parameters.size() && parameters.get(index).getKind() == delegatingKind : - "Constructors of the same class should have the same set of implicit arguments"; + if (index >= parameters.size() || parameters.get(index).getKind() != delegatingKind) { + throw new AssertionError( + "Constructors of the same class should have the same set of implicit arguments: " + delegatingConstructor); + } JvmMethodParameterSignature parameter = parameters.get(index); iv.load(offset, parameter.getAsmType()); @@ -383,7 +385,7 @@ public class ConstructorCodegen { } assert index == parameters.size() || parameters.get(index).getKind() == JvmMethodParameterKind.VALUE : - "Delegating constructor has not enough parameters"; + "Delegating constructor has not enough parameters: " + delegatingConstructor; return new CallBasedArgumentGenerator(codegen, codegen.defaultCallGenerator, delegatingConstructor.getValueParameters(), delegatingCallable.getValueParameterTypes()); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/DescriptorAsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/DescriptorAsmUtil.java index 2ab32eba3b0..2764a922a58 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/DescriptorAsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/DescriptorAsmUtil.java @@ -61,7 +61,8 @@ import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface; import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineOnlyPrivateInBytecode; import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineWithReified; -import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*; +import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.JAVA_STRING_TYPE; +import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE; import static org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt.hasJvmSyntheticAnnotation; import static org.jetbrains.kotlin.types.TypeUtils.isNullableType; import static org.jetbrains.org.objectweb.asm.Opcodes.*; @@ -368,6 +369,18 @@ public class DescriptorAsmUtil { return ACC_PRIVATE; } + // Sealed class constructors should be ACC_PRIVATE. + // In 1.4 and before, sealed class constructors had PRIVATE visibility, and were represented as private methods in bytecode. + // In 1.5 (+AllowSealedInheritorsInDifferentFilesOfSamePackage), sealed class constructors became INTERNAL, + // but still should be represented as private methods in bytecode in order to prevent inheriting from sealed classes on JVM. + if (memberDescriptor instanceof ConstructorDescriptor && + !(memberDescriptor instanceof AccessorForConstructorDescriptor) && + isSealedClass(((ConstructorDescriptor) memberDescriptor).getConstructedClass()) && + memberDescriptor.getVisibility() != DescriptorVisibilities.PUBLIC + ) { + return ACC_PRIVATE; + } + if (isInlineOnlyPrivateInBytecode(memberDescriptor)) { return ACC_PRIVATE; } @@ -893,4 +906,19 @@ public class DescriptorAsmUtil { //Trait always should have this descriptor return kind != OwnerKind.DEFAULT_IMPLS && isStaticMethod(kind, descriptor) ? 0 : 1; } + + public static boolean isHiddenConstructor(FunctionDescriptor descriptor) { + if (!(descriptor instanceof ClassConstructorDescriptor)) return false; + + ClassConstructorDescriptor classConstructorDescriptor = (ClassConstructorDescriptor) descriptor; + if (InlineClassManglingRulesKt.shouldHideConstructorDueToInlineClassTypeValueParameters(descriptor)) { + return true; + } + if (isSealedClass(classConstructorDescriptor.getConstructedClass()) && + classConstructorDescriptor.getVisibility() != DescriptorVisibilities.PUBLIC + ) { + return true; + } + return false; + } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 7abf69564b4..974f617c47d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2523,21 +2523,39 @@ public class ExpressionCodegen extends KtVisitor impleme // $default method is not private, so you need no accessor to call it return descriptor; } - else if (InlineClassManglingRulesKt.shouldHideConstructorDueToInlineClassTypeValueParameters(descriptor.getOriginal())) { - // Constructors with inline class type value parameters should always be called using an accessor. - // NB this will require accessors even if the constructor itself is in a different module. - return new AccessorForConstructorDescriptor( - (ClassConstructorDescriptor) descriptor.getOriginal(), - descriptor.getContainingDeclaration(), - getSuperCallTarget(resolvedCall.getCall()), - AccessorKind.NORMAL - ); + else if (shouldForceAccessorForConstructor(descriptor.getOriginal())) { + return createAccessorForHiddenConstructor(resolvedCall, descriptor); } else { return context.accessibleDescriptor(descriptor, getSuperCallTarget(resolvedCall.getCall())); } } + private boolean shouldForceAccessorForConstructor(FunctionDescriptor descriptor) { + // Force using accessors on hidden constructors only + if (!isHiddenConstructor(descriptor)) { + return false; + } + // Don't use accessor when calling hidden constructor from the same class. + if (descriptor.getContainingDeclaration() == context.getContextDescriptor().getContainingDeclaration()) { + return false; + } + return true; + } + + @NotNull + private AccessorForConstructorDescriptor createAccessorForHiddenConstructor( + @NotNull ResolvedCall resolvedCall, + FunctionDescriptor descriptor + ) { + return new AccessorForConstructorDescriptor( + (ClassConstructorDescriptor) descriptor.getOriginal(), + descriptor.getContainingDeclaration(), + getSuperCallTarget(resolvedCall.getCall()), + AccessorKind.NORMAL + ); + } + @NotNull public StackValue invokeFunction(@NotNull ResolvedCall resolvedCall, @NotNull StackValue receiver) { return invokeFunction(resolvedCall.getCall(), resolvedCall, receiver); diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 0da9a2ee212..162e67b96b6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -4906,12 +4906,6 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @Test - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @Test @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { @@ -34494,6 +34488,18 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("constructorAnnotations.kt") + public void testConstructorAnnotations() throws Exception { + runTest("compiler/testData/codegen/box/sealed/constructorAnnotations.kt"); + } + + @Test + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @Test @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { @@ -34506,6 +34512,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @Test + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @Test @TestMetadata("simple.kt") public void testSimple() throws Exception { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt index 0af9cf5f60a..62e5b8d0a60 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt @@ -210,28 +210,46 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle } private val IrConstructor.isOrShouldBeHidden: Boolean - get() = this in context.hiddenConstructors || ( - !DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isInline && hasMangledParameters && - origin != IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER && - origin != JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR && - origin != JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR) + get() { + if (this in context.hiddenConstructors) + return true + + if (origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER || + origin == JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR || + origin == JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR + ) { + return false + } + + val constructedClass = constructedClass + + if (!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isInline && hasMangledParameters) + return true + + if (visibility != DescriptorVisibilities.PUBLIC && constructedClass.modality == Modality.SEALED) + return true + + return false + } private fun handleHiddenConstructor(declaration: IrConstructor): IrConstructor { require(declaration.isOrShouldBeHidden, declaration::render) return context.hiddenConstructors.getOrPut(declaration) { declaration.makeConstructorAccessor(JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR).also { accessor -> - // There's a special case in the JVM backend for serializing the metadata of hidden - // constructors - we serialize the descriptor of the original constructor, but the - // signature of the accessor. We implement this special case in the JVM IR backend by - // attaching the metadata directly to the accessor. We also have to move all annotations - // to the accessor. Parameter annotations are already moved by the copyTo method. - if (declaration.metadata != null) { - accessor.metadata = declaration.metadata - declaration.metadata = null + if (declaration.constructedClass.modality != Modality.SEALED) { + // There's a special case in the JVM backend for serializing the metadata of hidden + // constructors - we serialize the descriptor of the original constructor, but the + // signature of the accessor. We implement this special case in the JVM IR backend by + // attaching the metadata directly to the accessor. We also have to move all annotations + // to the accessor. Parameter annotations are already moved by the copyTo method. + if (declaration.metadata != null) { + accessor.metadata = declaration.metadata + declaration.metadata = null + } + accessor.annotations += declaration.annotations + declaration.annotations = emptyList() + declaration.valueParameters.forEach { it.annotations = emptyList() } } - accessor.annotations += declaration.annotations - declaration.annotations = emptyList() - declaration.valueParameters.forEach { it.annotations = emptyList() } } } } @@ -263,6 +281,12 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle accessor.copyTypeParametersFrom(source, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR) accessor.copyValueParametersToStatic(source, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR) + if (source.constructedClass.modality == Modality.SEALED) { + for (accessorValueParameter in accessor.valueParameters) { + accessorValueParameter.annotations = emptyList() + } + } + accessor.returnType = source.returnType.remapTypeParameters(source, accessor) accessor.addValueParameter( diff --git a/compiler/testData/codegen/box/sealed/constructorAnnotations.kt b/compiler/testData/codegen/box/sealed/constructorAnnotations.kt new file mode 100644 index 00000000000..d50d938a067 --- /dev/null +++ b/compiler/testData/codegen/box/sealed/constructorAnnotations.kt @@ -0,0 +1,24 @@ +// TARGET_BACKEND: JVM +// WITH_REFLECT + +annotation class Ann + +sealed class Test @Ann constructor(@Ann val x: String) + +fun box(): String { + val testCtor = Test::class.constructors.single() + + val testCtorAnnClasses = testCtor.annotations.map { it.annotationClass } + if (testCtorAnnClasses != listOf(Ann::class)) { + throw AssertionError("Annotations on constructor: $testCtorAnnClasses") + } + + for (param in testCtor.parameters) { + val paramAnnClasses = param.annotations.map { it.annotationClass } + if (paramAnnClasses != listOf(Ann::class)) { + throw AssertionError("Annotations on constructor parameter $param: $paramAnnClasses") + } + } + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/sealed/delegatingConstructor.kt b/compiler/testData/codegen/box/sealed/delegatingConstructor.kt new file mode 100644 index 00000000000..8ad9684fe1f --- /dev/null +++ b/compiler/testData/codegen/box/sealed/delegatingConstructor.kt @@ -0,0 +1,7 @@ +sealed class Sealed(val value: String) { + constructor() : this("OK") +} + +class Derived : Sealed() + +fun box() = Derived().value \ No newline at end of file diff --git a/compiler/testData/codegen/box/classes/sealedInSameFile.kt b/compiler/testData/codegen/box/sealed/sealedInSameFile.kt similarity index 100% rename from compiler/testData/codegen/box/classes/sealedInSameFile.kt rename to compiler/testData/codegen/box/sealed/sealedInSameFile.kt diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.kt new file mode 100644 index 00000000000..ed1f3abb4fb --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.kt @@ -0,0 +1,13 @@ +inline class Z(val x: Int) + +class Test1(val z: Z) + +class Test2(val x: String) { + constructor(z: Z) : this(z.toString()) +} + +class Test3(val z: Z = Z(0)) + +class Test4(val x: String) { + constructor(z: Z = Z(0)) : this(z.toString()) +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.txt new file mode 100644 index 00000000000..1afb869415c --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.txt @@ -0,0 +1,58 @@ +@kotlin.Metadata +public final class Test1 { + // source: 'hiddenConstructor.kt' + private final field z: int + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getZ-a_XrcN0(): int +} + +@kotlin.Metadata +public final class Test2 { + // source: 'hiddenConstructor.kt' + private final @org.jetbrains.annotations.NotNull field x: java.lang.String + public method (@org.jetbrains.annotations.NotNull p0: java.lang.String): void + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final @org.jetbrains.annotations.NotNull method getX(): java.lang.String +} + +@kotlin.Metadata +public final class Test3 { + // source: 'hiddenConstructor.kt' + private final field z: int + private method (p0: int): void + public synthetic method (p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getZ-a_XrcN0(): int +} + +@kotlin.Metadata +public final class Test4 { + // source: 'hiddenConstructor.kt' + private final @org.jetbrains.annotations.NotNull field x: java.lang.String + public method (@org.jetbrains.annotations.NotNull p0: java.lang.String): void + private method (p0: int): void + public synthetic method (p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final @org.jetbrains.annotations.NotNull method getX(): java.lang.String +} + +@kotlin.jvm.JvmInline +@kotlin.Metadata +public final class Z { + // source: 'hiddenConstructor.kt' + private final field x: int + private synthetic method (p0: int): void + public synthetic final static method box-impl(p0: int): Z + public static method constructor-impl(p0: int): int + public method equals(p0: java.lang.Object): boolean + public static method equals-impl(p0: int, p1: java.lang.Object): boolean + public final static method equals-impl0(p0: int, p1: int): boolean + public final method getX(): int + public method hashCode(): int + public static method hashCode-impl(p0: int): int + public method toString(): java.lang.String + public static method toString-impl(p0: int): java.lang.String + public synthetic final method unbox-impl(): int +} diff --git a/compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.kt b/compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.kt new file mode 100644 index 00000000000..59e8e65a14d --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.kt @@ -0,0 +1,3 @@ +annotation class Ann + +sealed class Sealed @Ann constructor(@Ann val x: String) \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.txt b/compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.txt new file mode 100644 index 00000000000..f1027cc7182 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.txt @@ -0,0 +1,14 @@ +@java.lang.annotation.Retention +@kotlin.Metadata +public annotation class Ann { + // source: 'annotationsOnSealedConstructor.kt' +} + +@kotlin.Metadata +public abstract class Sealed { + // source: 'annotationsOnSealedConstructor.kt' + private final @org.jetbrains.annotations.NotNull field x: java.lang.String + private @Ann method (@Ann p0: java.lang.String): void + public synthetic method (p0: java.lang.String, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final @org.jetbrains.annotations.NotNull method getX(): java.lang.String +} diff --git a/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.kt b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.kt new file mode 100644 index 00000000000..070b143bfb4 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: -AllowSealedInheritorsInDifferentFilesOfSamePackage + +sealed class TestNoSubclasses(val x: Int) + +sealed class TestSubclassAfter(val x: Int) +class X1 : TestSubclassAfter(42) + +sealed class TestNoSubclassesAllDefaults(val x: Int = 0) + +sealed class TestSubclassAfterAllDefaults(val x: Int = 0) +class X3 : TestSubclassAfterAllDefaults() + +class X4: TestSubclassBefore(1) +sealed class TestSubclassBefore(val x: Int) \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.txt b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.txt new file mode 100644 index 00000000000..5d8e527ebbd --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.txt @@ -0,0 +1,64 @@ +@kotlin.Metadata +public abstract class TestNoSubclasses { + // source: 'sealedClassConstructor_1_4.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestNoSubclassesAllDefaults { + // source: 'sealedClassConstructor_1_4.kt' + private final field x: int + private method (p0: int): void + synthetic method (p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestSubclassAfter { + // source: 'sealedClassConstructor_1_4.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestSubclassAfterAllDefaults { + // source: 'sealedClassConstructor_1_4.kt' + private final field x: int + private method (p0: int): void + synthetic method (p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestSubclassBefore { + // source: 'sealedClassConstructor_1_4.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public final class X1 { + // source: 'sealedClassConstructor_1_4.kt' + public method (): void +} + +@kotlin.Metadata +public final class X3 { + // source: 'sealedClassConstructor_1_4.kt' + public method (): void +} + +@kotlin.Metadata +public final class X4 { + // source: 'sealedClassConstructor_1_4.kt' + public method (): void +} diff --git a/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.kt b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.kt new file mode 100644 index 00000000000..ba125795acf --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: +AllowSealedInheritorsInDifferentFilesOfSamePackage + +sealed class TestNoSubclasses(val x: Int) + +sealed class TestSubclassAfter(val x: Int) +class X1 : TestSubclassAfter(42) + +sealed class TestNoSubclassesAllDefaults(val x: Int = 0) + +sealed class TestSubclassAfterAllDefaults(val x: Int = 0) +class X3 : TestSubclassAfterAllDefaults() + +class X4: TestSubclassBefore(1) +sealed class TestSubclassBefore(val x: Int) \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.txt b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.txt new file mode 100644 index 00000000000..81f26fefd28 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.txt @@ -0,0 +1,64 @@ +@kotlin.Metadata +public abstract class TestNoSubclasses { + // source: 'sealedClassConstructor_1_5.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestNoSubclassesAllDefaults { + // source: 'sealedClassConstructor_1_5.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestSubclassAfter { + // source: 'sealedClassConstructor_1_5.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestSubclassAfterAllDefaults { + // source: 'sealedClassConstructor_1_5.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public abstract class TestSubclassBefore { + // source: 'sealedClassConstructor_1_5.kt' + private final field x: int + private method (p0: int): void + public synthetic method (p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getX(): int +} + +@kotlin.Metadata +public final class X1 { + // source: 'sealedClassConstructor_1_5.kt' + public method (): void +} + +@kotlin.Metadata +public final class X3 { + // source: 'sealedClassConstructor_1_5.kt' + public method (): void +} + +@kotlin.Metadata +public final class X4 { + // source: 'sealedClassConstructor_1_5.kt' + public method (): void +} diff --git a/compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.kt b/compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.kt deleted file mode 100644 index 3162a07b22c..00000000000 --- a/compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.kt +++ /dev/null @@ -1,3 +0,0 @@ -// !LANGUAGE: +AllowSealedInheritorsInDifferentFilesOfSamePackage - -sealed class Test(val x: Int = 0) \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.txt b/compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.txt deleted file mode 100644 index 87a02147c1a..00000000000 --- a/compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.txt +++ /dev/null @@ -1,8 +0,0 @@ -@kotlin.Metadata -public abstract class Test { - // source: 'sealedClassConstructorWithDefaultParams.kt' - private final field x: int - public method (p0: int): void - public synthetic method (p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void - public final method getX(): int -} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 3e005c6199c..bffd9fc2e07 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -4906,12 +4906,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @Test - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @Test @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { @@ -34694,6 +34688,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @Test + @TestMetadata("constructorAnnotations.kt") + public void testConstructorAnnotations() throws Exception { + runTest("compiler/testData/codegen/box/sealed/constructorAnnotations.kt"); + } + + @Test + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @Test @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { @@ -34706,6 +34712,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @Test + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @Test @TestMetadata("simple.kt") public void testSimple() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 3b5da1b20ab..5ccba3a78a5 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -4906,12 +4906,6 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @Test - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @Test @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { @@ -34494,6 +34488,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("constructorAnnotations.kt") + public void testConstructorAnnotations() throws Exception { + runTest("compiler/testData/codegen/box/sealed/constructorAnnotations.kt"); + } + + @Test + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @Test @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { @@ -34506,6 +34512,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @Test + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @Test @TestMetadata("simple.kt") public void testSimple() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 9ebdc0c348a..ff9c69c972a 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -235,11 +235,6 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt"); } - @TestMetadata("sealedClassConstructorWithDefaultParams.kt") - public void testSealedClassConstructorWithDefaultParams() throws Exception { - runTest("compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.kt"); - } - @TestMetadata("strictfpFlag.kt") public void testStrictfpFlag() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/strictfpFlag.kt"); @@ -1057,6 +1052,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt"); } + @TestMetadata("hiddenConstructor.kt") + public void testHiddenConstructor() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.kt"); + } + @TestMetadata("inlineCharSequence.kt") public void testInlineCharSequence() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt"); @@ -1639,6 +1639,34 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { } } + @TestMetadata("compiler/testData/codegen/bytecodeListing/sealed") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Sealed extends AbstractBytecodeListingTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath); + } + + public void testAllFilesPresentInSealed() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeListing/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); + } + + @TestMetadata("annotationsOnSealedConstructor.kt") + public void testAnnotationsOnSealedConstructor() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.kt"); + } + + @TestMetadata("sealedClassConstructor_1_4.kt") + public void testSealedClassConstructor_1_4() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.kt"); + } + + @TestMetadata("sealedClassConstructor_1_5.kt") + public void testSealedClassConstructor_1_5() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.kt"); + } + } + @TestMetadata("compiler/testData/codegen/bytecodeListing/specialBridges") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 93d7d5e89fa..00323b09d18 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -4284,11 +4284,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { runTest("compiler/testData/codegen/box/classes/selfcreate.kt"); @@ -28314,6 +28309,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @TestMetadata("constructorAnnotations.kt") + public void testConstructorAnnotations() throws Exception { + runTest("compiler/testData/codegen/box/sealed/constructorAnnotations.kt"); + } + + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt"); @@ -28324,6 +28329,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/testData/codegen/box/sealed/simple.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index cb0deeb7551..096199f57f7 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -235,11 +235,6 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt"); } - @TestMetadata("sealedClassConstructorWithDefaultParams.kt") - public void testSealedClassConstructorWithDefaultParams() throws Exception { - runTest("compiler/testData/codegen/bytecodeListing/sealedClassConstructorWithDefaultParams.kt"); - } - @TestMetadata("strictfpFlag.kt") public void testStrictfpFlag() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/strictfpFlag.kt"); @@ -1057,6 +1052,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt"); } + @TestMetadata("hiddenConstructor.kt") + public void testHiddenConstructor() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/hiddenConstructor.kt"); + } + @TestMetadata("inlineCharSequence.kt") public void testInlineCharSequence() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt"); @@ -1639,6 +1639,34 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes } } + @TestMetadata("compiler/testData/codegen/bytecodeListing/sealed") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Sealed extends AbstractIrBytecodeListingTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath); + } + + public void testAllFilesPresentInSealed() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeListing/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @TestMetadata("annotationsOnSealedConstructor.kt") + public void testAnnotationsOnSealedConstructor() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sealed/annotationsOnSealedConstructor.kt"); + } + + @TestMetadata("sealedClassConstructor_1_4.kt") + public void testSealedClassConstructor_1_4() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_4.kt"); + } + + @TestMetadata("sealedClassConstructor_1_5.kt") + public void testSealedClassConstructor_1_5() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sealed/sealedClassConstructor_1_5.kt"); + } + } + @TestMetadata("compiler/testData/codegen/bytecodeListing/specialBridges") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index e46e1454e62..360ee393f14 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -3414,11 +3414,6 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { runTest("compiler/testData/codegen/box/classes/selfcreate.kt"); @@ -24565,6 +24560,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true); } + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt"); @@ -24575,6 +24575,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/testData/codegen/box/sealed/simple.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 79d643230e5..9c921643b65 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -3414,11 +3414,6 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { runTest("compiler/testData/codegen/box/classes/selfcreate.kt"); @@ -24565,6 +24560,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); } + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt"); @@ -24575,6 +24575,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/testData/codegen/box/sealed/simple.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 30ef2e712cc..52787c0d968 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -3414,11 +3414,6 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { runTest("compiler/testData/codegen/box/classes/selfcreate.kt"); @@ -24530,6 +24525,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true); } + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt"); @@ -24540,6 +24540,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/testData/codegen/box/sealed/simple.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 32c76383dda..99f5351fe67 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -2315,11 +2315,6 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt"); } - @TestMetadata("sealedInSameFile.kt") - public void testSealedInSameFile() throws Exception { - runTest("compiler/testData/codegen/box/classes/sealedInSameFile.kt"); - } - @TestMetadata("selfcreate.kt") public void testSelfcreate() throws Exception { runTest("compiler/testData/codegen/box/classes/selfcreate.kt"); @@ -13064,6 +13059,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sealed"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true); } + @TestMetadata("delegatingConstructor.kt") + public void testDelegatingConstructor() throws Exception { + runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); + } + @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception { runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt"); @@ -13074,6 +13074,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/sealed/objects.kt"); } + @TestMetadata("sealedInSameFile.kt") + public void testSealedInSameFile() throws Exception { + runTest("compiler/testData/codegen/box/sealed/sealedInSameFile.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/testData/codegen/box/sealed/simple.kt");