JVM JVM_IR hide sealed class constructors
This commit is contained in:
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.resolve.BindingContext;
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
||||||
import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt;
|
import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
|
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.JvmDeclarationOrigin;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt;
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
|
||||||
@@ -118,8 +117,9 @@ public class ConstructorCodegen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerAccessorForHiddenConstructorIfNeeded(ClassConstructorDescriptor descriptor) {
|
private void registerAccessorForHiddenConstructorIfNeeded(ClassConstructorDescriptor descriptor) {
|
||||||
if (!InlineClassManglingRulesKt.shouldHideConstructorDueToInlineClassTypeValueParameters(descriptor)) return;
|
if (DescriptorAsmUtil.isHiddenConstructor(descriptor)) {
|
||||||
context.getAccessor(descriptor, AccessorKind.NORMAL, null, null);
|
context.getAccessor(descriptor, AccessorKind.NORMAL, null, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateSecondaryConstructor(
|
public void generateSecondaryConstructor(
|
||||||
@@ -371,11 +371,13 @@ public class ConstructorCodegen {
|
|||||||
JvmMethodParameterKind delegatingKind = delegatingParameters.get(index).getKind();
|
JvmMethodParameterKind delegatingKind = delegatingParameters.get(index).getKind();
|
||||||
if (delegatingKind == JvmMethodParameterKind.VALUE) {
|
if (delegatingKind == JvmMethodParameterKind.VALUE) {
|
||||||
assert index == parameters.size() || parameters.get(index).getKind() == 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;
|
break;
|
||||||
}
|
}
|
||||||
assert index < parameters.size() && parameters.get(index).getKind() == delegatingKind :
|
if (index >= parameters.size() || parameters.get(index).getKind() != delegatingKind) {
|
||||||
"Constructors of the same class should have the same set of implicit arguments";
|
throw new AssertionError(
|
||||||
|
"Constructors of the same class should have the same set of implicit arguments: " + delegatingConstructor);
|
||||||
|
}
|
||||||
JvmMethodParameterSignature parameter = parameters.get(index);
|
JvmMethodParameterSignature parameter = parameters.get(index);
|
||||||
|
|
||||||
iv.load(offset, parameter.getAsmType());
|
iv.load(offset, parameter.getAsmType());
|
||||||
@@ -383,7 +385,7 @@ public class ConstructorCodegen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
assert index == parameters.size() || parameters.get(index).getKind() == JvmMethodParameterKind.VALUE :
|
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(),
|
return new CallBasedArgumentGenerator(codegen, codegen.defaultCallGenerator, delegatingConstructor.getValueParameters(),
|
||||||
delegatingCallable.getValueParameterTypes());
|
delegatingCallable.getValueParameterTypes());
|
||||||
|
|||||||
@@ -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.DescriptorUtils.*;
|
||||||
import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineOnlyPrivateInBytecode;
|
import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineOnlyPrivateInBytecode;
|
||||||
import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineWithReified;
|
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.resolve.jvm.annotations.JvmAnnotationUtilKt.hasJvmSyntheticAnnotation;
|
||||||
import static org.jetbrains.kotlin.types.TypeUtils.isNullableType;
|
import static org.jetbrains.kotlin.types.TypeUtils.isNullableType;
|
||||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||||
@@ -368,6 +369,18 @@ public class DescriptorAsmUtil {
|
|||||||
return ACC_PRIVATE;
|
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)) {
|
if (isInlineOnlyPrivateInBytecode(memberDescriptor)) {
|
||||||
return ACC_PRIVATE;
|
return ACC_PRIVATE;
|
||||||
}
|
}
|
||||||
@@ -893,4 +906,19 @@ public class DescriptorAsmUtil {
|
|||||||
//Trait always should have this descriptor
|
//Trait always should have this descriptor
|
||||||
return kind != OwnerKind.DEFAULT_IMPLS && isStaticMethod(kind, descriptor) ? 0 : 1;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2523,21 +2523,39 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
// $default method is not private, so you need no accessor to call it
|
// $default method is not private, so you need no accessor to call it
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
else if (InlineClassManglingRulesKt.shouldHideConstructorDueToInlineClassTypeValueParameters(descriptor.getOriginal())) {
|
else if (shouldForceAccessorForConstructor(descriptor.getOriginal())) {
|
||||||
// Constructors with inline class type value parameters should always be called using an accessor.
|
return createAccessorForHiddenConstructor(resolvedCall, descriptor);
|
||||||
// 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 {
|
else {
|
||||||
return context.accessibleDescriptor(descriptor, getSuperCallTarget(resolvedCall.getCall()));
|
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
|
@NotNull
|
||||||
public StackValue invokeFunction(@NotNull ResolvedCall<?> resolvedCall, @NotNull StackValue receiver) {
|
public StackValue invokeFunction(@NotNull ResolvedCall<?> resolvedCall, @NotNull StackValue receiver) {
|
||||||
return invokeFunction(resolvedCall.getCall(), resolvedCall, receiver);
|
return invokeFunction(resolvedCall.getCall(), resolvedCall, receiver);
|
||||||
|
|||||||
+18
-6
@@ -4906,12 +4906,6 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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
|
@Test
|
||||||
@TestMetadata("selfcreate.kt")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("multipleFiles_enabled.kt")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
@@ -34506,6 +34512,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/sealed/objects.kt");
|
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
|
@Test
|
||||||
@TestMetadata("simple.kt")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
|
|||||||
+40
-16
@@ -210,28 +210,46 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val IrConstructor.isOrShouldBeHidden: Boolean
|
private val IrConstructor.isOrShouldBeHidden: Boolean
|
||||||
get() = this in context.hiddenConstructors || (
|
get() {
|
||||||
!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isInline && hasMangledParameters &&
|
if (this in context.hiddenConstructors)
|
||||||
origin != IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER &&
|
return true
|
||||||
origin != JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR &&
|
|
||||||
origin != JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR)
|
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 {
|
private fun handleHiddenConstructor(declaration: IrConstructor): IrConstructor {
|
||||||
require(declaration.isOrShouldBeHidden, declaration::render)
|
require(declaration.isOrShouldBeHidden, declaration::render)
|
||||||
return context.hiddenConstructors.getOrPut(declaration) {
|
return context.hiddenConstructors.getOrPut(declaration) {
|
||||||
declaration.makeConstructorAccessor(JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR).also { accessor ->
|
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
|
if (declaration.constructedClass.modality != Modality.SEALED) {
|
||||||
// constructors - we serialize the descriptor of the original constructor, but the
|
// There's a special case in the JVM backend for serializing the metadata of hidden
|
||||||
// signature of the accessor. We implement this special case in the JVM IR backend by
|
// constructors - we serialize the descriptor of the original constructor, but the
|
||||||
// attaching the metadata directly to the accessor. We also have to move all annotations
|
// signature of the accessor. We implement this special case in the JVM IR backend by
|
||||||
// to the accessor. Parameter annotations are already moved by the copyTo method.
|
// attaching the metadata directly to the accessor. We also have to move all annotations
|
||||||
if (declaration.metadata != null) {
|
// to the accessor. Parameter annotations are already moved by the copyTo method.
|
||||||
accessor.metadata = declaration.metadata
|
if (declaration.metadata != null) {
|
||||||
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.copyTypeParametersFrom(source, JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR)
|
||||||
accessor.copyValueParametersToStatic(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.returnType = source.returnType.remapTypeParameters(source, accessor)
|
||||||
|
|
||||||
accessor.addValueParameter(
|
accessor.addValueParameter(
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
sealed class Sealed(val value: String) {
|
||||||
|
constructor() : this("OK")
|
||||||
|
}
|
||||||
|
|
||||||
|
class Derived : Sealed()
|
||||||
|
|
||||||
|
fun box() = Derived().value
|
||||||
@@ -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())
|
||||||
|
}
|
||||||
+58
@@ -0,0 +1,58 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public final class Test1 {
|
||||||
|
// source: 'hiddenConstructor.kt'
|
||||||
|
private final field z: int
|
||||||
|
private method <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||||
|
private method <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
public synthetic method <init>(p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic method <init>(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 <init>(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||||
|
private method <init>(p0: int): void
|
||||||
|
public synthetic method <init>(p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic method <init>(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 <init>(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
|
||||||
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
annotation class Ann
|
||||||
|
|
||||||
|
sealed class Sealed @Ann constructor(@Ann val x: String)
|
||||||
+14
@@ -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 <init>(@Ann p0: java.lang.String): void
|
||||||
|
public synthetic method <init>(p0: java.lang.String, p1: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public final @org.jetbrains.annotations.NotNull method getX(): java.lang.String
|
||||||
|
}
|
||||||
+14
@@ -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)
|
||||||
+64
@@ -0,0 +1,64 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public abstract class TestNoSubclasses {
|
||||||
|
// source: 'sealedClassConstructor_1_4.kt'
|
||||||
|
private final field x: int
|
||||||
|
private method <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
synthetic method <init>(p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
synthetic method <init>(p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class X3 {
|
||||||
|
// source: 'sealedClassConstructor_1_4.kt'
|
||||||
|
public method <init>(): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class X4 {
|
||||||
|
// source: 'sealedClassConstructor_1_4.kt'
|
||||||
|
public method <init>(): void
|
||||||
|
}
|
||||||
+14
@@ -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)
|
||||||
+64
@@ -0,0 +1,64 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public abstract class TestNoSubclasses {
|
||||||
|
// source: 'sealedClassConstructor_1_5.kt'
|
||||||
|
private final field x: int
|
||||||
|
private method <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
public synthetic method <init>(p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
public synthetic method <init>(p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic method <init>(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 <init>(p0: int): void
|
||||||
|
public synthetic method <init>(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 <init>(): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class X3 {
|
||||||
|
// source: 'sealedClassConstructor_1_5.kt'
|
||||||
|
public method <init>(): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class X4 {
|
||||||
|
// source: 'sealedClassConstructor_1_5.kt'
|
||||||
|
public method <init>(): void
|
||||||
|
}
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
// !LANGUAGE: +AllowSealedInheritorsInDifferentFilesOfSamePackage
|
|
||||||
|
|
||||||
sealed class Test(val x: Int = 0)
|
|
||||||
-8
@@ -1,8 +0,0 @@
|
|||||||
@kotlin.Metadata
|
|
||||||
public abstract class Test {
|
|
||||||
// source: 'sealedClassConstructorWithDefaultParams.kt'
|
|
||||||
private final field x: int
|
|
||||||
public method <init>(p0: int): void
|
|
||||||
public synthetic method <init>(p0: int, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
|
||||||
public final method getX(): int
|
|
||||||
}
|
|
||||||
+18
-6
@@ -4906,12 +4906,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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
|
@Test
|
||||||
@TestMetadata("selfcreate.kt")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("multipleFiles_enabled.kt")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
@@ -34706,6 +34712,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/sealed/objects.kt");
|
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
|
@Test
|
||||||
@TestMetadata("simple.kt")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
|
|||||||
+18
-6
@@ -4906,12 +4906,6 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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
|
@Test
|
||||||
@TestMetadata("selfcreate.kt")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("multipleFiles_enabled.kt")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
@@ -34506,6 +34512,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/sealed/objects.kt");
|
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
|
@Test
|
||||||
@TestMetadata("simple.kt")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
|
|||||||
+33
-5
@@ -235,11 +235,6 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
|||||||
runTest("compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt");
|
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")
|
@TestMetadata("strictfpFlag.kt")
|
||||||
public void testStrictfpFlag() throws Exception {
|
public void testStrictfpFlag() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/strictfpFlag.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/strictfpFlag.kt");
|
||||||
@@ -1057,6 +1052,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
|||||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt");
|
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")
|
@TestMetadata("inlineCharSequence.kt")
|
||||||
public void testInlineCharSequence() throws Exception {
|
public void testInlineCharSequence() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt");
|
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")
|
@TestMetadata("compiler/testData/codegen/bytecodeListing/specialBridges")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
+15
-5
@@ -4284,11 +4284,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
public void testSelfcreate() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/classes/selfcreate.kt");
|
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);
|
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")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt");
|
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");
|
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")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
||||||
|
|||||||
+33
-5
@@ -235,11 +235,6 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
|
|||||||
runTest("compiler/testData/codegen/bytecodeListing/rawTypeInSignature.kt");
|
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")
|
@TestMetadata("strictfpFlag.kt")
|
||||||
public void testStrictfpFlag() throws Exception {
|
public void testStrictfpFlag() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/strictfpFlag.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/strictfpFlag.kt");
|
||||||
@@ -1057,6 +1052,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
|
|||||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/genericChild.kt");
|
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")
|
@TestMetadata("inlineCharSequence.kt")
|
||||||
public void testInlineCharSequence() throws Exception {
|
public void testInlineCharSequence() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt");
|
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")
|
@TestMetadata("compiler/testData/codegen/bytecodeListing/specialBridges")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java
Generated
+10
-5
@@ -3414,11 +3414,6 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
public void testSelfcreate() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/classes/selfcreate.kt");
|
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);
|
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")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt");
|
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");
|
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")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
||||||
|
|||||||
Generated
+10
-5
@@ -3414,11 +3414,6 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
public void testSelfcreate() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/classes/selfcreate.kt");
|
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);
|
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")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt");
|
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");
|
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")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
||||||
|
|||||||
Generated
+10
-5
@@ -3414,11 +3414,6 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
public void testSelfcreate() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/classes/selfcreate.kt");
|
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);
|
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")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt");
|
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");
|
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")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
||||||
|
|||||||
js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java
Generated
+10
-5
@@ -2315,11 +2315,6 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
|||||||
runTest("compiler/testData/codegen/box/classes/rightHandOverride.kt");
|
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")
|
@TestMetadata("selfcreate.kt")
|
||||||
public void testSelfcreate() throws Exception {
|
public void testSelfcreate() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/classes/selfcreate.kt");
|
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);
|
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")
|
@TestMetadata("multipleFiles_enabled.kt")
|
||||||
public void testMultipleFiles_enabled() throws Exception {
|
public void testMultipleFiles_enabled() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/multipleFiles_enabled.kt");
|
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");
|
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")
|
@TestMetadata("simple.kt")
|
||||||
public void testSimple() throws Exception {
|
public void testSimple() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
runTest("compiler/testData/codegen/box/sealed/simple.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user