From d8a6db8774db29eff21bc81709e096fb5f00b199 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 5 Sep 2018 15:12:02 +0300 Subject: [PATCH] Mark synthesized box/unbox methods in inline classes as ACC_SYNTHETIC --- .../backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java | 5 ++++- .../inlineClasses/companionObjectInsideInlineClass.txt | 4 ++-- .../inlineClasses/computablePropertiesInsideInlineClass.txt | 4 ++-- .../inlineClasses/inlineClassConstructors.txt | 4 ++-- .../inlineClasses/inlineClassWithEverything.txt | 4 ++-- .../inlineClasses/noBridgesForErasedInlineClass.txt | 4 ++-- .../inlineClasses/shapeOfInlineClassWithPrimitive.txt | 4 ++-- .../inlineClasses/synthesizedBoxMethodIsNotMangled.kt | 2 +- 8 files changed, 17 insertions(+), 14 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index ad57c468f1e..3ddfb676595 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.protobuf.MessageLite; import org.jetbrains.kotlin.renderer.DescriptorRenderer; import org.jetbrains.kotlin.resolve.DescriptorUtils; +import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver; import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt; import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker; import org.jetbrains.kotlin.resolve.inline.InlineUtil; @@ -255,7 +256,9 @@ public class AsmUtil { if (KotlinTypeMapper.isAccessor(functionDescriptor) || hasJvmSyntheticAnnotation(functionDescriptor) || - isInlineClassWrapperConstructor(functionDescriptor, kind) + isInlineClassWrapperConstructor(functionDescriptor, kind) || + InlineClassDescriptorResolver.isSynthesizedBoxMethod(functionDescriptor) || + InlineClassDescriptorResolver.isSynthesizedUnboxMethod(functionDescriptor) ) { flags |= ACC_SYNTHETIC; } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt index e036a19d50a..4d7da752ed7 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/companionObjectInsideInlineClass.txt @@ -14,7 +14,7 @@ public final class Foo { inner class Foo$Companion static method (): void private synthetic method (p0: int): void - public final static @org.jetbrains.annotations.NotNull method box(p0: int): Foo + 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 method equals(p0: java.lang.Object): boolean @@ -24,5 +24,5 @@ public final class Foo { public final static method inInlineClass(p0: int): void public method toString(): java.lang.String public static @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String - public final method unbox(): int + public synthetic final method unbox(): int } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt index 1f5342a99ce..54fdb496775 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.txt @@ -2,7 +2,7 @@ public final class Foo { private final field x: int private synthetic method (p0: int): void - public final static @org.jetbrains.annotations.NotNull method box(p0: int): Foo + 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 method equals(p0: java.lang.Object): boolean @@ -14,5 +14,5 @@ public final class Foo { public static method hashCode(p0: int): int public method toString(): java.lang.String public static @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String - public final method unbox(): int + public synthetic final method unbox(): int } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.txt index 7ef86b28437..5da0485fab7 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.txt @@ -2,7 +2,7 @@ public final class Foo { private final field x: int private synthetic method (p0: int): void - public final static @org.jetbrains.annotations.NotNull method box(p0: int): Foo + public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: int): Foo public static method constructor(p0: int): int public static method constructor(p0: int, p1: int): int public static method constructor(p0: long): int @@ -15,5 +15,5 @@ public final class Foo { public static method hashCode(p0: int): int public method toString(): java.lang.String public static @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String - public final method unbox(): int + public synthetic final method unbox(): int } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.txt index 92416debfad..3e652c65c6f 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithEverything.txt @@ -49,7 +49,7 @@ public interface IFoo { public final class Z { private final field x: int private synthetic method (p0: int): void - public final static @org.jetbrains.annotations.NotNull method box(p0: int): Z + 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 @@ -91,5 +91,5 @@ public final class Z { public static @ASet method setOverridingVar(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 final method unbox(): int + public synthetic final method unbox(): int } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt index 0645f79b215..f89187e136c 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.txt @@ -7,7 +7,7 @@ public interface A { public final class Foo { private final field x: long private synthetic method (p0: long): void - public final static @org.jetbrains.annotations.NotNull method box(p0: long): Foo + public synthetic final static @org.jetbrains.annotations.NotNull method box(p0: long): Foo public static method constructor(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 @@ -19,5 +19,5 @@ public final class Foo { public static method hashCode(p0: long): int public method toString(): java.lang.String public static @org.jetbrains.annotations.NotNull method toString(p0: long): java.lang.String - public final method unbox(): long + public synthetic final method unbox(): long } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt index a400dca84c1..f2c4c75b272 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.txt @@ -2,7 +2,7 @@ public final class Foo { private final field l: long private synthetic method (p0: long): void - public final static @org.jetbrains.annotations.NotNull method box(p0: long): Foo + 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 method equals(p0: java.lang.Object): boolean @@ -15,5 +15,5 @@ public final class Foo { public final static method param(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 final method unbox(): long + public synthetic final method unbox(): long } diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt index da21ee77231..5a5dfae55bc 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/synthesizedBoxMethodIsNotMangled.kt @@ -7,5 +7,5 @@ fun test(zs: MutableList, z: Z2) { zs.add(z) } -// 1 public final static box\(I\)LZ2; +// 1 public final static synthetic box\(I\)LZ2; // 1 INVOKESTATIC Z2\.box \(I\)LZ2; \ No newline at end of file