JVM_IR: Generate inline functions with reified generics as public synthetic
Otherwise, proguard will remove them. #KT-37004 Fixed
This commit is contained in:
+2
-1
@@ -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
|
||||
|
||||
+5
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user