JVM_IR: Generate inline functions with reified generics as public synthetic

Otherwise, proguard will remove them.
 #KT-37004 Fixed
This commit is contained in:
Ilmir Usmanov
2020-03-04 15:02:43 +01:00
parent f8903ca04b
commit 4b4a6101c1
3 changed files with 11 additions and 6 deletions
@@ -174,7 +174,8 @@ open class FunctionCodegen(
val nativeFlag = if (irFunction.isExternal) Opcodes.ACC_NATIVE else 0
val syntheticFlag =
if (irFunction.origin.isSynthetic || irFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) ||
(irFunction.isSuspend && irFunction.visibility == Visibilities.PRIVATE && !irFunction.isInline)
(irFunction.isSuspend && irFunction.visibility == Visibilities.PRIVATE && !irFunction.isInline) ||
irFunction.isReifiable()
) Opcodes.ACC_SYNTHETIC
else 0
val strictFpFlag = if (irFunction.hasAnnotation(STRICTFP_ANNOTATION_FQ_NAME)) Opcodes.ACC_STRICT else 0
@@ -181,6 +181,10 @@ private fun IrDeclarationWithVisibility.specialCaseVisibility(kind: OwnerKind?):
}
// if (memberDescriptor.isEffectivelyInlineOnly()) {
if (this is IrFunction && isReifiable()) {
return Opcodes.ACC_PUBLIC
}
if (isEffectivelyInlineOnly()) {
return Opcodes.ACC_PRIVATE
}
@@ -290,7 +294,7 @@ private fun IrDeclarationWithVisibility.isPrivateInlineSuspend(): Boolean =
fun IrFunction.isInlineOnly() =
isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)
private fun IrFunction.isReifiable() = typeParameters.any { it.isReified }
fun IrFunction.isReifiable() = typeParameters.any { it.isReified }
// Borrowed with modifications from ImplementationBodyCodegen.java
@@ -7,8 +7,8 @@ public final class Foo {
private final method generic$$forInline(p0: kotlin.coroutines.Continuation): java.lang.Object
public final @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public final @org.jetbrains.annotations.Nullable method generic(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
private final @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
private final @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public synthetic final @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public synthetic final @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
private final method privateInline(p0: kotlin.coroutines.Continuation): java.lang.Object
private final @kotlin.internal.InlineOnly @org.jetbrains.annotations.Nullable method shouldNotHaveSuffix(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
private final method simple$$forInline(p0: kotlin.Unit, p1: kotlin.coroutines.Continuation): java.lang.Object
@@ -25,8 +25,8 @@ public final class SimpleNamedKt {
private final static method generic$$forInline(p0: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method generic(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public final static @org.jetbrains.annotations.Nullable method generic(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
private final static @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
private final static @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
public synthetic final static @org.jetbrains.annotations.Nullable method genericWithReified(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
public synthetic final static @org.jetbrains.annotations.Nullable method genericWithReified(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
private final static method privateInline(p0: kotlin.coroutines.Continuation): java.lang.Object
private final static @kotlin.internal.InlineOnly @org.jetbrains.annotations.Nullable method shouldNotHaveSuffix(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object
private final static method simple$$forInline(p0: kotlin.Unit, p1: kotlin.coroutines.Continuation): java.lang.Object