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 nativeFlag = if (irFunction.isExternal) Opcodes.ACC_NATIVE else 0
|
||||||
val syntheticFlag =
|
val syntheticFlag =
|
||||||
if (irFunction.origin.isSynthetic || irFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) ||
|
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
|
) Opcodes.ACC_SYNTHETIC
|
||||||
else 0
|
else 0
|
||||||
val strictFpFlag = if (irFunction.hasAnnotation(STRICTFP_ANNOTATION_FQ_NAME)) Opcodes.ACC_STRICT 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 (memberDescriptor.isEffectivelyInlineOnly()) {
|
||||||
|
if (this is IrFunction && isReifiable()) {
|
||||||
|
return Opcodes.ACC_PUBLIC
|
||||||
|
}
|
||||||
|
|
||||||
if (isEffectivelyInlineOnly()) {
|
if (isEffectivelyInlineOnly()) {
|
||||||
return Opcodes.ACC_PRIVATE
|
return Opcodes.ACC_PRIVATE
|
||||||
}
|
}
|
||||||
@@ -290,7 +294,7 @@ private fun IrDeclarationWithVisibility.isPrivateInlineSuspend(): Boolean =
|
|||||||
fun IrFunction.isInlineOnly() =
|
fun IrFunction.isInlineOnly() =
|
||||||
isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)
|
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
|
// 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
|
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(@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
|
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
|
public synthetic 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(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 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 @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
|
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
|
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(@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
|
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
|
public synthetic 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(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 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 @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
|
private final static method simple$$forInline(p0: kotlin.Unit, p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||||
|
|||||||
Reference in New Issue
Block a user