Get rid of excess method in compiled inline class with custom equals

^KT-54501: Fixed
This commit is contained in:
vladislav.grechko
2022-10-17 16:42:18 +02:00
committed by teamcity
parent 70c2f2b86f
commit c990bbb26c
8 changed files with 204 additions and 34 deletions
@@ -1,7 +1,6 @@
// WITH_STDLIB
// CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// FIR_IDENTICAL
inline fun <T> useRef(value: T, f: (T) -> Boolean) = f(value)
@@ -0,0 +1,88 @@
@kotlin.Metadata
public interface I {
// source: 'inlineClassEqualsOverride.kt'
public abstract method equals-ACFGG4I(p0: int): boolean
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC1 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: double
private synthetic method <init>(p0: double): void
public synthetic final static method box-impl(p0: double): IC1
public static method constructor-impl(p0: double): double
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: double, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: double, p1: double): boolean
public final method getValue(): double
public method hashCode(): int
public static method hashCode-impl(p0: double): int
public method toString(): java.lang.String
public static method toString-impl(p0: double): java.lang.String
public synthetic final method unbox-impl(): double
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC2 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IC2
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public final method equals-ACFGG4I(p0: int): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getValue(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC3 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IC3
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getValue(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC4 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IC4
public static method constructor-impl(p0: int): int
public final @org.jetbrains.annotations.NotNull method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Void
public final static @org.jetbrains.annotations.NotNull method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Void
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 method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class InlineClassEqualsOverrideKt {
// source: 'inlineClassEqualsOverride.kt'
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}
@@ -2,6 +2,7 @@
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +CustomEqualsInInlineClasses
// TARGET_BACKEND: JVM_IR
// CHECK_BYTECODE_LISTING
import kotlin.math.abs
@@ -0,0 +1,88 @@
@kotlin.Metadata
public interface I {
// source: 'inlineClassEqualsOverride.kt'
public abstract method equals-ACFGG4I(p0: int): boolean
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC1 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: double
private synthetic method <init>(p0: double): void
public synthetic final static method box-impl(p0: double): IC1
public static method constructor-impl(p0: double): double
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: double, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: double, p1: double): boolean
public final method getValue(): double
public method hashCode(): int
public static method hashCode-impl(p0: double): int
public method toString(): java.lang.String
public static method toString-impl(p0: double): java.lang.String
public synthetic final method unbox-impl(): double
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC2 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IC2
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public method equals-ACFGG4I(p0: int): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public 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 method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC3 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IC3
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getValue(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class IC4 {
// source: 'inlineClassEqualsOverride.kt'
private final field value: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IC4
public static method constructor-impl(p0: int): int
public @org.jetbrains.annotations.NotNull method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): java.lang.Void
public static @org.jetbrains.annotations.NotNull method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): java.lang.Void
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 method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class InlineClassEqualsOverrideKt {
// source: 'inlineClassEqualsOverride.kt'
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}