Mangle inline class members

<IMPL_SUFFIX> for method is a method signature hash,
if method value parameter types contain inline class types,
otherwise 'impl'.

Constructor methods are named as 'constructor-<IMPL_SUFFIX>'.

Synthesized 'box' and 'unbox' methods are named as
'<METHOD_NAME>-<IMPL_SUFFIX>'.

Erased implementations of overriding and non-overriding methods
are named as '<METHOD_NAME>-<IMPL_SUFFIX>'.

Fully specialized implementation of 'equals' will have a special suffix.
This commit is contained in:
Dmitry Petrov
2018-09-06 10:12:50 +03:00
parent aec173ac5c
commit cafaa3e13c
40 changed files with 398 additions and 184 deletions
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
import org.jetbrains.kotlin.descriptors.PropertyDescriptor;
import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.psi.KtClassOrObject;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt;
@@ -74,7 +75,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
) {
MethodContext context = fieldOwnerContext.intoFunction(function);
JvmDeclarationOrigin methodOrigin = JvmDeclarationOriginKt.OtherOrigin(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), "toString", getToStringDesc(), null, null);
String toStringMethodName = mapFunctionName(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), toStringMethodName, getToStringDesc(), null, null);
if (fieldOwnerContext.getContextKind() != OwnerKind.ERASED_INLINE_CLASS && classDescriptor.isInline()) {
FunctionCodegen.generateMethodInsideInlineClassWrapper(methodOrigin, function, classDescriptor, mv, typeMapper);
@@ -84,7 +86,7 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
mv.visitAnnotation(Type.getDescriptor(NotNull.class), false);
if (!generationState.getClassBuilderMode().generateBodies) {
FunctionCodegen.endVisit(mv, "toString", getDeclaration());
FunctionCodegen.endVisit(mv, toStringMethodName, getDeclaration());
return;
}
@@ -129,7 +131,7 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
iv.invokevirtual("java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false);
iv.areturn(JAVA_STRING_TYPE);
FunctionCodegen.endVisit(mv, "toString", getDeclaration());
FunctionCodegen.endVisit(mv, toStringMethodName, getDeclaration());
}
@Override
@@ -138,7 +140,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
) {
MethodContext context = fieldOwnerContext.intoFunction(function);
JvmDeclarationOrigin methodOrigin = JvmDeclarationOriginKt.OtherOrigin(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), "hashCode", getHashCodeDesc(), null, null);
String hashCodeMethodName = mapFunctionName(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), hashCodeMethodName, getHashCodeDesc(), null, null);
if (fieldOwnerContext.getContextKind() != OwnerKind.ERASED_INLINE_CLASS && classDescriptor.isInline()) {
FunctionCodegen.generateMethodInsideInlineClassWrapper(methodOrigin, function, classDescriptor, mv, typeMapper);
@@ -146,7 +149,7 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
}
if (!generationState.getClassBuilderMode().generateBodies) {
FunctionCodegen.endVisit(mv, "hashCode", getDeclaration());
FunctionCodegen.endVisit(mv, hashCodeMethodName, getDeclaration());
return;
}
@@ -193,8 +196,11 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
mv.visitInsn(IRETURN);
FunctionCodegen.endVisit(mv, "hashCode", getDeclaration());
FunctionCodegen.endVisit(mv, hashCodeMethodName, getDeclaration());
}
private String mapFunctionName(@NotNull FunctionDescriptor functionDescriptor) {
return typeMapper.mapFunctionName(functionDescriptor, fieldOwnerContext.getContextKind());
}
@Override
@@ -203,7 +209,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
) {
MethodContext context = fieldOwnerContext.intoFunction(function);
JvmDeclarationOrigin methodOrigin = JvmDeclarationOriginKt.OtherOrigin(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), "equals", getEqualsDesc(), null, null);
String equalsMethodName = mapFunctionName(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), equalsMethodName, getEqualsDesc(), null, null);
boolean isErasedInlineClassKind = fieldOwnerContext.getContextKind() == OwnerKind.ERASED_INLINE_CLASS;
if (!isErasedInlineClassKind && classDescriptor.isInline()) {
@@ -214,7 +221,7 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
mv.visitParameterAnnotation(isErasedInlineClassKind ? 1 : 0, Type.getDescriptor(Nullable.class), false);
if (!generationState.getClassBuilderMode().generateBodies) {
FunctionCodegen.endVisit(mv, "equals", getDeclaration());
FunctionCodegen.endVisit(mv, equalsMethodName, getDeclaration());
return;
}
@@ -261,7 +268,7 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
iv.iconst(0);
iv.areturn(Type.INT_TYPE);
FunctionCodegen.endVisit(mv, "equals", getDeclaration());
FunctionCodegen.endVisit(mv, equalsMethodName, getDeclaration());
}
private int generateBasicChecksAndStoreTarget(InstructionAdapter iv, Label eq, Label ne) {
@@ -414,12 +414,12 @@ public abstract class StackValue {
private static void invokeBoxMethod(
@NotNull InstructionAdapter v,
Type boxedType,
Type underlyingType
@NotNull Type boxedType,
@NotNull Type underlyingType
) {
v.invokestatic(
boxedType.getInternalName(),
InlineClassDescriptorResolver.BOX_METHOD_NAME.asString(),
KotlinTypeMapper.BOX_JVM_METHOD_NAME,
Type.getMethodDescriptor(boxedType, underlyingType),
false
);
@@ -440,10 +440,14 @@ public abstract class StackValue {
}
}
private static void invokeUnboxMethod(@NotNull InstructionAdapter v, Type owner, Type resultType) {
private static void invokeUnboxMethod(
@NotNull InstructionAdapter v,
@NotNull Type owner,
@NotNull Type resultType
) {
v.invokevirtual(
owner.getInternalName(),
InlineClassDescriptorResolver.UNBOX_METHOD_NAME.asString(),
KotlinTypeMapper.UNBOX_JVM_METHOD_NAME,
"()" + resultType.getDescriptor(),
false
);
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.codegen.isRangeOrProgression
import org.jetbrains.kotlin.codegen.optimization.common.OptimizationBasicInterpreter
import org.jetbrains.kotlin.codegen.optimization.common.StrictBasicValue
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
@@ -236,7 +236,7 @@ private fun AbstractInsnNode.isInlineClassUnboxing(state: GenerationState) =
}
private fun MethodInsnNode.isInlineClassBoxingMethodDescriptor(state: GenerationState): Boolean {
if (name != InlineClassDescriptorResolver.BOX_METHOD_NAME.asString()) return false
if (name != KotlinTypeMapper.BOX_JVM_METHOD_NAME) return false
val ownerType = Type.getObjectType(owner)
val descriptor = state.jvmBackendClassResolver.resolveToClassDescriptors(ownerType).singleOrNull() ?: return false
@@ -247,7 +247,7 @@ private fun MethodInsnNode.isInlineClassBoxingMethodDescriptor(state: Generation
}
private fun MethodInsnNode.isInlineClassUnboxingMethodDescriptor(state: GenerationState): Boolean {
if (name != InlineClassDescriptorResolver.UNBOX_METHOD_NAME.asString()) return false
if (name != KotlinTypeMapper.UNBOX_JVM_METHOD_NAME) return false
val ownerType = Type.getObjectType(owner)
val descriptor = state.jvmBackendClassResolver.resolveToClassDescriptors(ownerType).singleOrNull() ?: return false
@@ -1010,7 +1010,7 @@ public class KotlinTypeMapper {
? JvmAbi.getterName(propertyName)
: JvmAbi.setterName(propertyName);
return mangleMemberNameIfRequired(isAccessor ? "access$" + accessorName : accessorName, descriptor);
return mangleMemberNameIfRequired(isAccessor ? "access$" + accessorName : accessorName, descriptor, kind);
}
else if (isFunctionLiteral(descriptor)) {
PsiElement element = DescriptorToSourceUtils.getSourceFromDescriptor(descriptor);
@@ -1029,11 +1029,8 @@ public class KotlinTypeMapper {
else if (isLocalFunction(descriptor) || isFunctionExpression(descriptor)) {
return OperatorNameConventions.INVOKE.asString();
}
else if (OwnerKind.ERASED_INLINE_CLASS == kind && descriptor instanceof ConstructorDescriptor) {
return JvmAbi.ERASED_INLINE_CONSTRUCTOR_NAME;
}
else {
return mangleMemberNameIfRequired(descriptor.getName().asString(), descriptor);
return mangleMemberNameIfRequired(descriptor.getName().asString(), descriptor, kind);
}
}
@@ -1062,15 +1059,46 @@ public class KotlinTypeMapper {
}
@NotNull
private String mangleMemberNameIfRequired(@NotNull String name, @NotNull CallableMemberDescriptor descriptor) {
if (descriptor.getContainingDeclaration() instanceof ScriptDescriptor) {
private String mangleMemberNameIfRequired(
@NotNull String name,
@NotNull CallableMemberDescriptor descriptor,
@Nullable OwnerKind kind
) {
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
if (containingDeclaration instanceof ScriptDescriptor && descriptor instanceof PropertyDescriptor) {
//script properties should be public
return name;
}
String manglingSuffix = InlineClassManglingUtilsKt.getInlineClassValueParametersManglingSuffix(descriptor);
if (manglingSuffix != null) {
name += "-" + manglingSuffix;
// Special methods for inline classes.
if (InlineClassDescriptorResolver.isSynthesizedBoxMethod(descriptor)) {
return BOX_JVM_METHOD_NAME;
}
if (InlineClassDescriptorResolver.isSynthesizedUnboxMethod(descriptor)) {
return UNBOX_JVM_METHOD_NAME;
}
if (InlineClassDescriptorResolver.isSpecializedEqualsMethod(descriptor)) {
return name;
}
// Constructor:
// either a constructor method for inline class (should be mangled),
// or should stay as it is ('<init>').
if (descriptor instanceof ConstructorDescriptor) {
if (kind == OwnerKind.ERASED_INLINE_CLASS) {
name = JvmAbi.ERASED_INLINE_CONSTRUCTOR_NAME;
}
else {
return name;
}
}
String suffix = InlineClassManglingUtilsKt.getInlineClassSignatureManglingSuffix(descriptor);
if (suffix != null) {
name += suffix;
}
else if (kind == OwnerKind.ERASED_INLINE_CLASS) {
name += JvmAbi.IMPL_SUFFIX_FOR_INLINE_CLASS_MEMBERS;
}
if (DescriptorUtils.isTopLevelDeclaration(descriptor)) {
@@ -1090,6 +1118,12 @@ public class KotlinTypeMapper {
return name;
}
public static final String BOX_JVM_METHOD_NAME =
InlineClassDescriptorResolver.BOX_METHOD_NAME + JvmAbi.IMPL_SUFFIX_FOR_INLINE_CLASS_MEMBERS;
public static final String UNBOX_JVM_METHOD_NAME =
InlineClassDescriptorResolver.UNBOX_METHOD_NAME + JvmAbi.IMPL_SUFFIX_FOR_INLINE_CLASS_MEMBERS;
@NotNull
private String getModuleName(@NotNull CallableMemberDescriptor descriptor) {
String deserialized = ModuleNameKt.getJvmModuleNameForDeserializedDescriptor(descriptor);
@@ -15,19 +15,24 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
import org.jetbrains.kotlin.resolve.isInlineClassType
import org.jetbrains.kotlin.types.KotlinType
import java.security.MessageDigest
import java.util.*
fun getInlineClassValueParametersManglingSuffix(descriptor: CallableMemberDescriptor): String? {
fun getInlineClassSignatureManglingSuffix(descriptor: CallableMemberDescriptor): String? {
if (descriptor !is FunctionDescriptor) return null
if (descriptor is ConstructorDescriptor) return null
if (InlineClassDescriptorResolver.isSynthesizedBoxMethod(descriptor)) return null
if (InlineClassDescriptorResolver.isSynthesizedBoxOrUnboxMethod(descriptor)) return null
val actualValueParameterTypes = listOfNotNull(descriptor.extensionReceiverParameter?.type) + descriptor.valueParameters.map { it.type }
if (actualValueParameterTypes.none { it.requiresFunctionNameMangling() }) return null
return md5radix36string(collectSignatureForMangling(actualValueParameterTypes))
return getInlineClassSignatureManglingSuffix(actualValueParameterTypes)
}
fun getInlineClassSignatureManglingSuffix(valueParameterTypes: List<KotlinType>) =
if (valueParameterTypes.none { it.requiresFunctionNameMangling() })
null
else
"-" + md5base64(collectSignatureForMangling(valueParameterTypes))
private fun KotlinType.requiresFunctionNameMangling() =
isInlineClassThatRequiresMangling() || isTypeParameterWithUpperBoundThatRequiresMangling()
@@ -61,11 +66,8 @@ private fun getSignatureElementForMangling(type: KotlinType): String = buildStri
}
}
private fun md5radix36string(signatureForMangling: String): String {
val d = MessageDigest.getInstance("MD5").digest(signatureForMangling.toByteArray())
var acc = 0L
for (i in 0..4) {
acc = (acc shl 8) + (d[i].toLong() and 0xFFL)
}
return acc.toString(36)
private fun md5base64(signatureForMangling: String): String {
val d = MessageDigest.getInstance("MD5").digest(signatureForMangling.toByteArray()).copyOfRange(0, 5)
// base64 URL encoder without padding uses exactly the characters allowed in both JVM bytecode and Dalvik bytecode names
return Base64.getUrlEncoder().withoutPadding().encodeToString(d)
}
@@ -26,25 +26,35 @@ object InlineClassDescriptorResolver {
private val SPECIALIZED_EQUALS_FIRST_PARAMETER_NAME = Name.identifier("p1")
private val SPECIALIZED_EQUALS_SECOND_PARAMETER_NAME = Name.identifier("p2")
fun createBoxFunctionDescriptor(owner: ClassDescriptor): SimpleFunctionDescriptor? {
return createConversionFunctionDescriptor(true, owner)
}
@JvmStatic
fun createBoxFunctionDescriptor(owner: ClassDescriptor): SimpleFunctionDescriptor? =
createConversionFunctionDescriptor(true, owner)
@JvmStatic
fun createUnboxFunctionDescriptor(owner: ClassDescriptor): SimpleFunctionDescriptor? =
createConversionFunctionDescriptor(false, owner)
@JvmStatic
fun isSynthesizedBoxMethod(descriptor: FunctionDescriptor) =
isSynthesizedInlineClassMethod(descriptor, BOX_METHOD_NAME)
fun isSynthesizedBoxMethod(descriptor: CallableMemberDescriptor) =
isSynthesizedInlineClassMemberWithName(descriptor, BOX_METHOD_NAME)
@JvmStatic
fun isSynthesizedUnboxMethod(descriptor: FunctionDescriptor) =
isSynthesizedInlineClassMethod(descriptor, UNBOX_METHOD_NAME)
fun isSynthesizedUnboxMethod(descriptor: CallableMemberDescriptor) =
isSynthesizedInlineClassMemberWithName(descriptor, UNBOX_METHOD_NAME)
private fun isSynthesizedInlineClassMethod(descriptor: FunctionDescriptor, name: Name) =
descriptor.kind == CallableMemberDescriptor.Kind.SYNTHESIZED &&
descriptor.containingDeclaration.isInlineClass() &&
descriptor.name == name
@JvmStatic
fun isSynthesizedBoxOrUnboxMethod(descriptor: CallableMemberDescriptor) =
isSynthesizedInlineClassMember(descriptor) && (descriptor.name == BOX_METHOD_NAME || descriptor.name == UNBOX_METHOD_NAME)
@JvmStatic
fun isSpecializedEqualsMethod(descriptor: CallableMemberDescriptor) =
isSynthesizedInlineClassMemberWithName(descriptor, SPECIALIZED_EQUALS_NAME)
private fun isSynthesizedInlineClassMemberWithName(descriptor: CallableMemberDescriptor, name: Name) =
isSynthesizedInlineClassMember(descriptor) && descriptor.name == name
private fun isSynthesizedInlineClassMember(descriptor: CallableMemberDescriptor) =
descriptor.kind == CallableMemberDescriptor.Kind.SYNTHESIZED && descriptor.containingDeclaration.isInlineClass()
fun createSpecializedEqualsDescriptor(owner: ClassDescriptor): SimpleFunctionDescriptor? {
val inlinedValue = owner.underlyingRepresentation() ?: return null
@@ -0,0 +1,15 @@
// !LANGUAGE: +InlineClasses
// IGNORE_BACKEND: JVM_IR
inline class Z(val data: Int)
fun box(): String {
if (Z(0) != Z(0)) throw AssertionError()
if (Z(0) == Z(1)) throw AssertionError()
if (Z(1234).hashCode() != 1234) throw AssertionError(Z(1234).hashCode().toString())
if (Z(0).toString() != "Z(data=0)") throw AssertionError(Z(0).toString())
return "OK"
}
@@ -14,15 +14,16 @@ public final class Foo {
inner class Foo$Companion
static method <clinit>(): void
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: int): Foo
public static method constructor(p0: int): int
public static method equals(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): Foo
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable 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(p0: int): int
public final static method inInlineClass(p0: int): void
public static method hashCode-impl(p0: int): int
public final static method inInlineClass-impl(p0: int): void
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String
public synthetic final method unbox(): int
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@@ -2,17 +2,17 @@
public final class Foo {
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: int): Foo
public static method constructor(p0: int): int
public static method equals(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): Foo
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final static method getAsThis(p0: int): int
public final static method getProp(p0: int): int
public final static method getAsThis-impl(p0: int): int
public final static method getProp-impl(p0: int): int
public final method getX(): int
public method hashCode(): int
public static method hashCode(p0: int): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String
public synthetic final method unbox(): int
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@@ -2,41 +2,42 @@
public final class Z {
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: int): Z
public static method constructor(p0: int): int
public static method constructor(p0: int, p1: int): int
public static method constructor(p0: long): int
private static method constructor(p0: short): int
public static method equals(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): Z
public static method constructor-impl(p0: int): int
public static method constructor-impl(p0: int, p1: int): int
public static method constructor-impl(p0: long): int
private static method constructor-impl(p0: short): int
public method equals(p0: java.lang.Object): boolean
public final static method getInternalExtensionVal$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getInternalExtensionVar$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getInternalVal$test_module(p0: int): int
public final static method getInternalVar$test_module(p0: int): int
private final static method getPrivateExtensionVal(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
private final static method getPrivateExtensionVar(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
private final static method getPrivateVal(p0: int): int
private final static method getPrivateVar(p0: int): int
public final static method getPublicExtensionVal(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getPublicExtensionVar(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getPublicVal(p0: int): int
public final static method getPublicVar(p0: int): int
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final static method getInternalExtensionVal-impl$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getInternalExtensionVar-impl$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getInternalVal-impl$test_module(p0: int): int
public final static method getInternalVar-impl$test_module(p0: int): int
private final static method getPrivateExtensionVal-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
private final static method getPrivateExtensionVar-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
private final static method getPrivateVal-impl(p0: int): int
private final static method getPrivateVar-impl(p0: int): int
public final static method getPublicExtensionVal-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getPublicExtensionVar-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static method getPublicVal-impl(p0: int): int
public final static method getPublicVar-impl(p0: int): int
public final method getX(): int
public method hashCode(): int
public static method hashCode(p0: int): int
public final static method internalExtensionFun$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public final static method internalFun$test_module(p0: int): void
private final static method privateExtensionFun(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
private final static method privateFun(p0: int): void
public final static method publicExtensionFun(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public final static method publicFun(p0: int): void
public final static method setInternalExtensionVar$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String, p2: int): void
public final static method setInternalVar$test_module(p0: int, p1: int): void
private final static method setPrivateExtensionVar(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String, p2: int): void
private final static method setPrivateVar(p0: int, p1: int): void
public final static method setPublicExtensionVar(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String, p2: int): void
public final static method setPublicVar(p0: int, p1: int): void
public static method hashCode-impl(p0: int): int
public final static method internalExtensionFun-impl$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public final static method internalFun-impl$test_module(p0: int): void
private final static method privateExtensionFun-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
private final static method privateFun-impl(p0: int): void
public final static method publicExtensionFun-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public final static method publicFun-impl(p0: int): void
public final static method setInternalExtensionVar-impl$test_module(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String, p2: int): void
public final static method setInternalVar-impl$test_module(p0: int, p1: int): void
private final static method setPrivateExtensionVar-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String, p2: int): void
private final static method setPrivateVar-impl(p0: int, p1: int): void
public final static method setPublicExtensionVar-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String, p2: int): void
public final static method setPublicVar-impl(p0: int, p1: int): void
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String
public synthetic final method unbox(): int
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@@ -0,0 +1,13 @@
// !LANGUAGE: +InlineClasses
inline class Z1(val x: Int)
inline class Z2(val z: Z1) {
fun foo(z: Z1) {}
fun foo(z2: Z2) {}
fun bar(z: Z1) {}
fun Z2.bar() {}
fun qux() = z
}
@@ -0,0 +1,38 @@
@kotlin.Metadata
public final class Z1 {
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): Z1
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable 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 @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class Z2 {
private final field z: int
private synthetic method <init>(p0: int): void
public final static method bar-E2ud15U(p0: int, p1: int): void
public final static method bar-cYvoCnY(p0: int, p1: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): Z2
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final static method foo-E2ud15U(p0: int, p1: int): void
public final static method foo-cYvoCnY(p0: int, p1: int): void
public final method getZ(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public final static method qux-impl(p0: int): int
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@@ -49,47 +49,48 @@ public interface IFoo {
public final class Z {
private final field x: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: int): Z
public static method constructor(p0: int): int
public static method constructor(p0: long): int
public static method equals(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): Z
public static method constructor-impl(p0: int): int
public static method constructor-impl(p0: long): int
public method equals(p0: java.lang.Object): boolean
public final static @AGet method getNonOverridingExtVal(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static @AGet method getNonOverridingExtVar(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static @AGet method getNonOverridingVal(p0: int): int
public final static @AGet method getNonOverridingVar(p0: int): int
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final static @AGet method getNonOverridingExtVal-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static @AGet method getNonOverridingExtVar-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final static @AGet method getNonOverridingVal-impl(p0: int): int
public final static @AGet method getNonOverridingVar-impl(p0: int): int
public @AGet method getOverridingExtVal(@AReceiver @org.jetbrains.annotations.NotNull p0: java.lang.String): int
public static @AGet method getOverridingExtVal(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public static @AGet method getOverridingExtVal-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public @AGet method getOverridingExtVar(@AReceiver @org.jetbrains.annotations.NotNull p0: java.lang.String): int
public static @AGet method getOverridingExtVar(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public static @AGet method getOverridingExtVar-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public @AGet method getOverridingVal(): int
public static @AGet method getOverridingVal(p0: int): int
public static @AGet method getOverridingVal-impl(p0: int): int
public @AGet method getOverridingVar(): int
public static @AGet method getOverridingVar(p0: int): int
public static @AGet method getOverridingVar-impl(p0: int): int
public final @AGet method getX(): int
public method hashCode(): int
public static method hashCode(p0: int): int
public final static @A method nonOverridingExtFun(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public static method hashCode-impl(p0: int): int
public final static @A method nonOverridingExtFun-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public synthetic deprecated static @A method nonOverridingExtVal$annotations(p0: java.lang.String): void
public synthetic deprecated static @A method nonOverridingExtVar$annotations(p0: java.lang.String): void
public final static @A method nonOverridingFun(p0: int): void
public final static @A method nonOverridingFun-impl(p0: int): void
public synthetic deprecated static @A method nonOverridingVal$annotations(): void
public synthetic deprecated static @A method nonOverridingVar$annotations(): void
public @A method overridingExtFun(@AReceiver @org.jetbrains.annotations.NotNull p0: java.lang.String): void
public static @A method overridingExtFun(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public static @A method overridingExtFun-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String): void
public synthetic deprecated static @A method overridingExtVal$annotations(p0: java.lang.String): void
public synthetic deprecated static @A method overridingExtVar$annotations(p0: java.lang.String): void
public @A method overridingFun(): void
public static @A method overridingFun(p0: int): void
public static @A method overridingFun-impl(p0: int): void
public synthetic deprecated static @A method overridingVal$annotations(): void
public synthetic deprecated static @A method overridingVar$annotations(): void
public final static @ASet method setNonOverridingExtVar(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String, @ASetParam p2: int): void
public final static @ASet method setNonOverridingVar(p0: int, @ASetParam p1: int): void
public final static @ASet method setNonOverridingExtVar-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String, @ASetParam p2: int): void
public final static @ASet method setNonOverridingVar-impl(p0: int, @ASetParam p1: int): void
public @ASet method setOverridingExtVar(@AReceiver @org.jetbrains.annotations.NotNull p0: java.lang.String, @ASetParam p1: int): void
public static @ASet method setOverridingExtVar(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String, @ASetParam p2: int): void
public static @ASet method setOverridingExtVar-impl(p0: int, @AReceiver @org.jetbrains.annotations.NotNull p1: java.lang.String, @ASetParam p2: int): void
public @ASet method setOverridingVar(@ASetParam p0: int): void
public static @ASet method setOverridingVar(p0: int, @ASetParam p1: int): void
public static @ASet method setOverridingVar-impl(p0: int, @ASetParam p1: int): void
public @A @org.jetbrains.annotations.NotNull method toString(): java.lang.String
public static @A @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String
public synthetic final method unbox(): int
public static @A @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@@ -7,17 +7,18 @@ public interface A {
public final class Foo {
private final field x: long
private synthetic method <init>(p0: long): void
public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: long): Foo
public static method constructor(p0: long): long
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: long): Foo
public static method constructor-impl(p0: long): long
public method equals(p0: java.lang.Object): boolean
public static method equals(p0: long, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public static method equals-impl(p0: long, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: long, p1: long): boolean
public synthetic method foo(p0: java.lang.Object): void
public method foo-1e4ch6lh(p0: long): void
public static method foo-1e4ch6lh(p0: long, p1: long): void
public method foo-GWb7d6U(p0: long): void
public static method foo-GWb7d6U(p0: long, p1: long): void
public final method getX(): long
public method hashCode(): int
public static method hashCode(p0: long): int
public static method hashCode-impl(p0: long): int
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString(p0: long): java.lang.String
public synthetic final method unbox(): long
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: long): java.lang.String
public synthetic final method unbox-impl(): long
}
@@ -0,0 +1,70 @@
@kotlin.Metadata
public interface IValue {
public abstract method getValue(): int
}
@kotlin.Metadata
public final class TestInternal {
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): TestInternal
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class TestOverriding {
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): TestOverriding
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public method getValue(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class TestPrivate {
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): TestPrivate
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class TestPublic {
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): TestPublic
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getValue(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@@ -2,18 +2,18 @@
public final class Foo {
private final field l: long
private synthetic method <init>(p0: long): void
public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: long): Foo
public static method constructor(p0: long): long
public final static method empty(p0: long): void
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: long): Foo
public static method constructor-impl(p0: long): long
public final static method empty-impl(p0: long): void
public method equals(p0: java.lang.Object): boolean
public static method equals(p0: long, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public static method equals-impl(p0: long, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
public final static method equals-impl0(p0: long, p1: long): boolean
public final static method extension(p0: long, @org.jetbrains.annotations.NotNull p1: java.lang.Object, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
public final static method extension-impl(p0: long, @org.jetbrains.annotations.NotNull p1: java.lang.Object, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
public final method getL(): long
public method hashCode(): int
public static method hashCode(p0: long): int
public final static method param(p0: long, p1: double): void
public static method hashCode-impl(p0: long): int
public final static method param-impl(p0: long, p1: double): void
public method toString(): java.lang.String
public static @org.jetbrains.annotations.NotNull method toString(p0: long): java.lang.String
public synthetic final method unbox(): long
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: long): java.lang.String
public synthetic final method unbox-impl(): long
}
@@ -1,7 +1,8 @@
// !LANGUAGE: +InlineClasses
inline class AsNonNullPrimitive(val i: Int)
inline class AsNonNullReference(val s: String) // 3 assertions (constructor, box method, static constructor in $Erased classs)
inline class AsNonNullReference(val s: String)
// ^ 5 assertions (constructor, box method, erased constructor, 2 assertions in equals--impl)
fun nonNullPrimitive(a: AsNonNullPrimitive) {}
@@ -11,4 +12,4 @@ fun AsNonNullReference.nonNullReferenceExtension(b1: AsNonNullReference) {} // 2
fun asNullablePrimitive(c: AsNonNullPrimitive?) {}
fun asNullableReference(c: AsNonNullReference?) {}
// 6 checkParameterIsNotNull
// 8 checkParameterIsNotNull
@@ -9,4 +9,4 @@ fun test(): Any = Z(42)
// @TestKt.class:
// 0 INVOKESTATIC Z\$Erased\.box
// 0 INVOKESTATIC Z\-Erased\.box
// 1 INVOKESTATIC Z\.box \(I\)LZ;
// 1 INVOKESTATIC Z\.box-impl \(I\)LZ;
@@ -12,7 +12,7 @@ inline class Foo(val x: Int) {
}
}
// 1 INVOKESTATIC Foo\.empty \(I\)V
// 1 INVOKESTATIC Foo\.withParam \(ILjava/lang/String;\)V
// 1 INVOKESTATIC Foo\.withInlineClassParam-1e4ch6lh \(II\)V
// 1 INVOKESTATIC Foo\.empty-impl \(I\)V
// 1 INVOKESTATIC Foo\.withParam-impl \(ILjava/lang/String;\)V
// 1 INVOKESTATIC Foo\.withInlineClassParam-GWb7d6U \(II\)V
// 5 INVOKEVIRTUAL
@@ -11,4 +11,4 @@ fun testNZ(z: Z?) = z?.equals(z)
// @TestKt.class:
// 0 INVOKESTATIC Z\$Erased\.equals
// 0 INVOKESTATIC Z\-Erased\.equals
// 3 INVOKESTATIC Z\.equals \(ILjava/lang/Object;\)Z
// 3 INVOKESTATIC Z\.equals-impl \(ILjava/lang/Object;\)Z
@@ -15,6 +15,6 @@ fun test3() = Z(1, 2)
// @TestKt.class:
// 0 INVOKESTATIC Z\$Erased\.constructor
// 0 INVOKESTATIC Z\-Erased\.constructor
// 1 INVOKESTATIC Z\.constructor \(J\)I
// 1 INVOKESTATIC Z\.constructor \(Ljava/lang/String;\)I
// 1 INVOKESTATIC Z\.constructor \(II\)I
// 1 INVOKESTATIC Z\.constructor-impl \(J\)I
// 1 INVOKESTATIC Z\.constructor-impl \(Ljava/lang/String;\)I
// 1 INVOKESTATIC Z\.constructor-impl \(II\)I
@@ -23,7 +23,7 @@ fun test(password: Password) {
if (password.password != "OK") throw AssertionError()
}
// 1 public final static test-9zx0e0j9\(Ljava/lang/String;\)V
// 1 public final static test-79jv2l6i\(Ljava/lang/String;\)V
// 1 public final static test-d4pejdz3\(Ljava/lang/String;\)V
// 1 public final static test-c6sgoxk6\(Ljava/lang/String;\)V
// 1 public final static test-tmnojjU\(Ljava/lang/String;\)V
// 1 public final static test-hI9h0ro\(Ljava/lang/String;\)V
// 1 public final static test-75PUH38\(Ljava/lang/String;\)V
// 1 public final static test-3mN7H-Y\(Ljava/lang/String;\)V
@@ -10,4 +10,4 @@ fun testNZ(z: Z?) = z?.hashCode()
// @TestKt.class:
// 0 INVOKESTATIC Z\$Erased\.hashCode
// 0 INVOKESTATIC Z\-Erased\.hashCode
// 2 INVOKESTATIC Z\.hashCode \(I\)I
// 2 INVOKESTATIC Z\.hashCode-impl \(I\)I
@@ -9,4 +9,4 @@ fun testNZ(z: Z?) = z?.foo()
// 0 INVOKESTATIC Z\$Erased\.foo
// 0 INVOKESTATIC Z\-Erased\.foo
// 2 INVOKESTATIC Z\.foo \(I\)V
// 2 INVOKESTATIC Z\.foo-impl \(I\)V
@@ -17,4 +17,4 @@ fun testNZ(z: Z?) = z?.foo()
// @TestKt.class:
// 0 INVOKESTATIC Z\$Erased\.foo
// 0 INVOKESTATIC Z\-Erased\.foo
// 2 INVOKESTATIC Z\.foo \(I\)V
// 2 INVOKESTATIC Z\.foo-impl \(I\)V
@@ -7,4 +7,4 @@ inline class Z(val x: Int)
fun testZ() = Z(42)
// @TestKt.class:
// 1 INVOKESTATIC Z\.constructor \(I\)I
// 1 INVOKESTATIC Z\.constructor-impl \(I\)I
@@ -33,9 +33,9 @@ fun Z.test() {
// @TestKt.class:
// 0 INVOKESTATIC Z\$Erased\.
// 0 INVOKESTATIC Z\-Erased\.
// 1 INVOKESTATIC Z.getAVal \(I\)I
// 2 INVOKESTATIC Z.getAVar \(I\)I
// 2 INVOKESTATIC Z.setAVar \(II\)V
// 1 INVOKESTATIC Z.getExtVal \(ILjava/lang/String;\)I
// 2 INVOKESTATIC Z.getExtVar \(ILjava/lang/String;\)I
// 2 INVOKESTATIC Z.setExtVar \(ILjava/lang/String;I\)V
// 1 INVOKESTATIC Z.getAVal-impl \(I\)I
// 2 INVOKESTATIC Z.getAVar-impl \(I\)I
// 2 INVOKESTATIC Z.setAVar-impl \(II\)V
// 1 INVOKESTATIC Z.getExtVal-impl \(ILjava/lang/String;\)I
// 2 INVOKESTATIC Z.getExtVar-impl \(ILjava/lang/String;\)I
// 2 INVOKESTATIC Z.setExtVar-impl \(ILjava/lang/String;I\)V
@@ -7,4 +7,4 @@ class C {
}
// 1 public final getS\(\)Ljava/lang/String;
// 1 public final setS-90215lrx\(Ljava/lang/String;\)V
// 1 public final setS-pD0jJn0\(Ljava/lang/String;\)V
@@ -1,11 +0,0 @@
// !LANGUAGE: +InlineClasses
inline class Z1(val x: Int)
inline class Z2(val x: Z1)
fun test(zs: MutableList<Z2>, z: Z2) {
zs.add(z)
}
// 1 public final static synthetic box\(I\)LZ2;
// 1 INVOKESTATIC Z2\.box \(I\)LZ2;
@@ -10,4 +10,4 @@ fun testNZ(z: Z?) = z?.toString()
// @TestKt.class:
// 0 INVOKESTATIC Z\$Erased\.toString
// 0 INVOKESTATIC Z\-Erased\.toString
// 2 INVOKESTATIC Z\.toString \(I\)Ljava/lang/String;
// 2 INVOKESTATIC Z\.toString-impl \(I\)Ljava/lang/String;
@@ -9,4 +9,4 @@ fun test(xs: List<Z>) = xs[0]
// @TestKt.class:
// 0 INVOKEVIRTUAL Z\$Erased\.unbox
// 0 INVOKEVIRTUAL Z\-Erased\.unbox
// 1 INVOKEVIRTUAL Z\.unbox \(\)I
// 1 INVOKEVIRTUAL Z\.unbox-impl \(\)I
@@ -11661,6 +11661,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
}
@TestMetadata("inlineClassWithDefaultFunctionsFromAny.kt")
public void testInlineClassWithDefaultFunctionsFromAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt");
}
@TestMetadata("inlineClassesAsInlineFunParameters.kt")
public void testInlineClassesAsInlineFunParameters() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesAsInlineFunParameters.kt");
@@ -289,9 +289,14 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassMembersVisibility.kt");
}
@TestMetadata("inlineClassWithEverything.kt")
public void testInlineClassWithEverything() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.kt");
@TestMetadata("inlineClassWithInlineClassUnderlyingType.kt")
public void testInlineClassWithInlineClassUnderlyingType() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.kt");
}
@TestMetadata("inlineClassWithManyKindsOfMembers.kt")
public void testInlineClassWithManyKindsOfMembers() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.kt");
}
@TestMetadata("noBridgesForErasedInlineClass.kt")
@@ -2178,11 +2178,6 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
runTest("compiler/testData/codegen/bytecodeText/inlineClasses/successOrFailureApiDoesntUseErasedClass.kt");
}
@TestMetadata("synthesizedBoxMethodIsNotMangled.kt")
public void testSynthesizedBoxMethodIsNotMangled() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt");
}
@TestMetadata("toStringIsCalledByInlineClass.kt")
public void testToStringIsCalledByInlineClass() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/inlineClasses/toStringIsCalledByInlineClass.kt");
@@ -11661,6 +11661,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
}
@TestMetadata("inlineClassWithDefaultFunctionsFromAny.kt")
public void testInlineClassWithDefaultFunctionsFromAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt");
}
@TestMetadata("inlineClassesAsInlineFunParameters.kt")
public void testInlineClassesAsInlineFunParameters() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesAsInlineFunParameters.kt");
@@ -11661,6 +11661,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
}
@TestMetadata("inlineClassWithDefaultFunctionsFromAny.kt")
public void testInlineClassWithDefaultFunctionsFromAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt");
}
@TestMetadata("inlineClassesAsInlineFunParameters.kt")
public void testInlineClassesAsInlineFunParameters() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesAsInlineFunParameters.kt");
@@ -50,6 +50,8 @@ public final class JvmAbi {
public static final String LOCAL_VARIABLE_NAME_PREFIX_INLINE_ARGUMENT = "$i$a$";
public static final String LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION = "$i$f$";
public static final String IMPL_SUFFIX_FOR_INLINE_CLASS_MEMBERS = "-impl";
@NotNull
public static String getSyntheticMethodNameForAnnotatedProperty(@NotNull Name propertyName) {
return propertyName.asString() + ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX;
@@ -10196,6 +10196,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
}
@TestMetadata("inlineClassWithDefaultFunctionsFromAny.kt")
public void testInlineClassWithDefaultFunctionsFromAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt");
}
@TestMetadata("inlineClassesAsInlineFunParameters.kt")
public void testInlineClassesAsInlineFunParameters() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesAsInlineFunParameters.kt");
@@ -11261,6 +11261,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
}
@TestMetadata("inlineClassWithDefaultFunctionsFromAny.kt")
public void testInlineClassWithDefaultFunctionsFromAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt");
}
@TestMetadata("inlineClassesAsInlineFunParameters.kt")
public void testInlineClassesAsInlineFunParameters() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesAsInlineFunParameters.kt");