diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java index cb6b5950c83..49dcae30b5f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionsFromAnyGeneratorImpl.java @@ -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) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index ff768c55b92..07fca59b815 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -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 ); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt index 12e833f09e8..062db855371 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt @@ -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 diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java index 5abdf2f8082..14877e4811f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java @@ -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 (''). + 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); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt index 1e59d75cf7e..9b5790c6f4e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/inlineClassManglingUtils.kt @@ -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) = + 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) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt index f3e95cfb3f8..17cf2d447ff 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt @@ -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 diff --git a/compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt b/compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt new file mode 100644 index 00000000000..2641cc15bbf --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/inlineClassWithDefaultFunctionsFromAny.kt @@ -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" +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt index 4d7da752ed7..5c6ff41c1bb 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt @@ -14,15 +14,16 @@ public final class Foo { inner class Foo$Companion static method (): void private synthetic method (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 } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt index 54fdb496775..aa7263715b6 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt @@ -2,17 +2,17 @@ public final class Foo { private final field x: int private synthetic method (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 } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassMembersVisibility.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassMembersVisibility.txt index 263de174ac0..e98ab969975 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassMembersVisibility.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassMembersVisibility.txt @@ -2,41 +2,42 @@ public final class Z { private final field x: int private synthetic method (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 } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.kt new file mode 100644 index 00000000000..ac8d12e9f93 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.kt @@ -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 +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.txt new file mode 100644 index 00000000000..4bdb330da2d --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.txt @@ -0,0 +1,38 @@ +@kotlin.Metadata +public final class Z1 { + private final field x: int + private synthetic method (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 (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 +} diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.kt similarity index 100% rename from compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.kt rename to compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.kt diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.txt similarity index 60% rename from compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.txt rename to compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.txt index 3e652c65c6f..1850c41333c 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.txt @@ -49,47 +49,48 @@ public interface IFoo { public final class Z { private final field x: int private synthetic method (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 } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt index f89187e136c..d496dfe579b 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt @@ -7,17 +7,18 @@ public interface A { public final class Foo { private final field x: long private synthetic method (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 } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.txt new file mode 100644 index 00000000000..25ea8de3cf2 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.txt @@ -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 (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 (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 (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 (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 +} diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt index f2c4c75b272..df131a1d223 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt @@ -2,18 +2,18 @@ public final class Foo { private final field l: long private synthetic method (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 } diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/assertionsForParametersOfInlineClassTypes.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/assertionsForParametersOfInlineClassTypes.kt index 6b462abec91..5cb8de34998 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/assertionsForParametersOfInlineClassTypes.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/assertionsForParametersOfInlineClassTypes.kt @@ -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 \ No newline at end of file +// 8 checkParameterIsNotNull \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/boxMethodCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/boxMethodCalledByInlineClass.kt index 6dd30fff001..8c6c0d5ad4f 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/boxMethodCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/boxMethodCalledByInlineClass.kt @@ -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; \ No newline at end of file +// 1 INVOKESTATIC Z\.box-impl \(I\)LZ; \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/callMemberMethodsInsideInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/callMemberMethodsInsideInlineClass.kt index 7f61cfc51d3..deb1ac794a1 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/callMemberMethodsInsideInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/callMemberMethodsInsideInlineClass.kt @@ -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 \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/equalsIsCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/equalsIsCalledByInlineClass.kt index 6c1ff170558..ace25a5efb9 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/equalsIsCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/equalsIsCalledByInlineClass.kt @@ -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 \ No newline at end of file +// 3 INVOKESTATIC Z\.equals-impl \(ILjava/lang/Object;\)Z \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/factoryMethodForSecondaryConstructorsCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/factoryMethodForSecondaryConstructorsCalledByInlineClass.kt index 1357046fd2c..742bbcec27a 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/factoryMethodForSecondaryConstructorsCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/factoryMethodForSecondaryConstructorsCalledByInlineClass.kt @@ -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 \ No newline at end of file +// 1 INVOKESTATIC Z\.constructor-impl \(J\)I +// 1 INVOKESTATIC Z\.constructor-impl \(Ljava/lang/String;\)I +// 1 INVOKESTATIC Z\.constructor-impl \(II\)I \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/functionsWithInlineClassParametersHaveStableMangledNames.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/functionsWithInlineClassParametersHaveStableMangledNames.kt index 8bdbd155275..3c68ea419df 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/functionsWithInlineClassParametersHaveStableMangledNames.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/functionsWithInlineClassParametersHaveStableMangledNames.kt @@ -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 \ No newline at end of file +// 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 \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/hashCodeIsCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/hashCodeIsCalledByInlineClass.kt index cd015f12fca..0f058373224 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/hashCodeIsCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/hashCodeIsCalledByInlineClass.kt @@ -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 diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/nonOverridingMethodsAreCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/nonOverridingMethodsAreCalledByInlineClass.kt index cf23b9fd51e..492e3355ac1 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/nonOverridingMethodsAreCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/nonOverridingMethodsAreCalledByInlineClass.kt @@ -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 diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/overridingMethodsAreCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/overridingMethodsAreCalledByInlineClass.kt index db011795844..c1d88099ab9 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/overridingMethodsAreCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/overridingMethodsAreCalledByInlineClass.kt @@ -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 \ No newline at end of file +// 2 INVOKESTATIC Z\.foo-impl \(I\)V \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/primaryConstructorCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/primaryConstructorCalledByInlineClass.kt index 53fd56dde5c..a2062a30184 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/primaryConstructorCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/primaryConstructorCalledByInlineClass.kt @@ -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 diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/propertyAccessorsAreCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/propertyAccessorsAreCalledByInlineClass.kt index 527fee8f618..6e182314fbf 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/propertyAccessorsAreCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/propertyAccessorsAreCalledByInlineClass.kt @@ -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 \ No newline at end of file +// 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 \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/propertySetterWithInlineClassTypeArgument.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/propertySetterWithInlineClassTypeArgument.kt index 437a6c24c76..821d95f7d42 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/propertySetterWithInlineClassTypeArgument.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/propertySetterWithInlineClassTypeArgument.kt @@ -7,4 +7,4 @@ class C { } // 1 public final getS\(\)Ljava/lang/String; -// 1 public final setS-90215lrx\(Ljava/lang/String;\)V \ No newline at end of file +// 1 public final setS-pD0jJn0\(Ljava/lang/String;\)V \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt deleted file mode 100644 index 5a5dfae55bc..00000000000 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt +++ /dev/null @@ -1,11 +0,0 @@ -// !LANGUAGE: +InlineClasses - -inline class Z1(val x: Int) -inline class Z2(val x: Z1) - -fun test(zs: MutableList, z: Z2) { - zs.add(z) -} - -// 1 public final static synthetic box\(I\)LZ2; -// 1 INVOKESTATIC Z2\.box \(I\)LZ2; \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/toStringIsCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/toStringIsCalledByInlineClass.kt index e8d0117f32e..a1d87cc9a16 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/toStringIsCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/toStringIsCalledByInlineClass.kt @@ -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; diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/unboxMethodCalledByInlineClass.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/unboxMethodCalledByInlineClass.kt index ad913c1384e..7e1e7a8d75f 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/unboxMethodCalledByInlineClass.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/unboxMethodCalledByInlineClass.kt @@ -9,4 +9,4 @@ fun test(xs: List) = xs[0] // @TestKt.class: // 0 INVOKEVIRTUAL Z\$Erased\.unbox // 0 INVOKEVIRTUAL Z\-Erased\.unbox -// 1 INVOKEVIRTUAL Z\.unbox \(\)I \ No newline at end of file +// 1 INVOKEVIRTUAL Z\.unbox-impl \(\)I \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 8838e298589..0c47e6c8414 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -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"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 2c15f4e367c..64e895c7c5c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -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") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 07ba78228a5..06a39a6ed02 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -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"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 2cb897b0453..348bbd82798 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -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"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 102fbe3fb1b..e2a1c054f65 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -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"); diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java index 684a368fb77..2f175bed8ff 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java @@ -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; diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java index 25453f30740..6cbef43390d 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java @@ -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"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 087277992c1..920d9ed2bf5 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -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");