Don't generate reified inline function as privates
#KT-18563 Fixed
This commit is contained in:
@@ -59,6 +59,7 @@ import static org.jetbrains.kotlin.codegen.CodegenUtilKt.isToArrayFromCollection
|
|||||||
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation;
|
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation;
|
||||||
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
|
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
|
||||||
import static org.jetbrains.kotlin.descriptors.annotations.AnnotationUtilKt.isEffectivelyInlineOnly;
|
import static org.jetbrains.kotlin.descriptors.annotations.AnnotationUtilKt.isEffectivelyInlineOnly;
|
||||||
|
import static org.jetbrains.kotlin.descriptors.annotations.AnnotationUtilKt.isInlineOnly;
|
||||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
||||||
import static org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt.hasJvmDefaultAnnotation;
|
import static org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt.hasJvmDefaultAnnotation;
|
||||||
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
|
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
|
||||||
@@ -238,6 +239,10 @@ public class AsmUtil {
|
|||||||
flags |= ACC_SYNTHETIC;
|
flags |= ACC_SYNTHETIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isEffectivelyInlineOnly(functionDescriptor, false)) {
|
||||||
|
flags |= ACC_SYNTHETIC;
|
||||||
|
}
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,7 +351,8 @@ public class AsmUtil {
|
|||||||
DeclarationDescriptor containingDeclaration = memberDescriptor.getContainingDeclaration();
|
DeclarationDescriptor containingDeclaration = memberDescriptor.getContainingDeclaration();
|
||||||
Visibility memberVisibility = memberDescriptor.getVisibility();
|
Visibility memberVisibility = memberDescriptor.getVisibility();
|
||||||
|
|
||||||
if (isEffectivelyInlineOnly(memberDescriptor)) {
|
if (isInlineOnly(memberDescriptor)) {
|
||||||
|
//inline only functions are only allowed in stdlib and it's never shrinked
|
||||||
return ACC_PRIVATE;
|
return ACC_PRIVATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class test/Foo {
|
public final class test/Foo {
|
||||||
public final static method foo(): void
|
public final static method foo(): void
|
||||||
|
public synthetic final static method inlineOnly(): void
|
||||||
}
|
}
|
||||||
|
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
synthetic final class test/Foo__InlineOnlyMultifileKt {
|
synthetic final class test/Foo__InlineOnlyMultifileKt {
|
||||||
public final static method foo(): void
|
public final static method foo(): void
|
||||||
private final static method inlineOnly(): void
|
public synthetic final static method inlineOnly(): void
|
||||||
private final static @kotlin.internal.InlineOnly method inlineOnlyAnnotated(): void
|
private final static @kotlin.internal.InlineOnly method inlineOnlyAnnotated(): void
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class test/Foo {
|
public final class test/Foo {
|
||||||
public final static method foo(): void
|
public final static method foo(): void
|
||||||
|
public synthetic final static @org.jetbrains.annotations.NotNull method getExtProp(p0: java.lang.Object): java.lang.String
|
||||||
}
|
}
|
||||||
|
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
synthetic final class test/Foo__InlineOnlyPropertyMultifileKt {
|
synthetic final class test/Foo__InlineOnlyPropertyMultifileKt {
|
||||||
public final static method foo(): void
|
public final static method foo(): void
|
||||||
private final static method getExtProp(p0: java.lang.Object): java.lang.String
|
public synthetic final static @org.jetbrains.annotations.NotNull method getExtProp(p0: java.lang.Object): java.lang.String
|
||||||
private final static method getProp(): java.lang.String
|
private final static method getProp(): java.lang.String
|
||||||
public synthetic deprecated static @kotlin.internal.InlineOnly method prop$annotations(): void
|
public synthetic deprecated static @kotlin.internal.InlineOnly method prop$annotations(): void
|
||||||
private final static method setProp(p0: java.lang.String): void
|
private final static method setProp(p0: java.lang.String): void
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
public final class Foo {
|
public final class Foo {
|
||||||
public method <init>(): void
|
public method <init>(): void
|
||||||
public final method bar(): void
|
public final method bar(): void
|
||||||
private final method baz(): void
|
public synthetic final method baz(): void
|
||||||
private final @kotlin.internal.InlineOnly method foo(): void
|
private final @kotlin.internal.InlineOnly method foo(): void
|
||||||
}
|
}
|
||||||
|
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class InlineOnlyKt {
|
public final class InlineOnlyKt {
|
||||||
public final static method bar(): void
|
public final static method bar(): void
|
||||||
private final static method baz(): void
|
public synthetic final static method baz(): void
|
||||||
private final static @kotlin.internal.InlineOnly method foo(): void
|
private final static @kotlin.internal.InlineOnly method foo(): void
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class Foo {
|
public final class Foo {
|
||||||
public method <init>(): void
|
public method <init>(): void
|
||||||
private final method getExtProp(p0: java.lang.Object): java.lang.String
|
public synthetic final @org.jetbrains.annotations.NotNull method getExtProp(p0: java.lang.Object): java.lang.String
|
||||||
private final method getProp(): java.lang.String
|
private final method getProp(): java.lang.String
|
||||||
private final @kotlin.internal.InlineOnly method getProp2(): java.lang.String
|
private final @kotlin.internal.InlineOnly method getProp2(): java.lang.String
|
||||||
public synthetic deprecated static @kotlin.internal.InlineOnly method prop$annotations(): void
|
public synthetic deprecated static @kotlin.internal.InlineOnly method prop$annotations(): void
|
||||||
@@ -11,7 +11,7 @@ public final class Foo {
|
|||||||
|
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class InlineOnlyPropertyKt {
|
public final class InlineOnlyPropertyKt {
|
||||||
private final static method getExtProp(p0: java.lang.Object): java.lang.String
|
public synthetic final static @org.jetbrains.annotations.NotNull method getExtProp(p0: java.lang.Object): java.lang.String
|
||||||
private final static method getProp(): java.lang.String
|
private final static method getProp(): java.lang.String
|
||||||
private final static @kotlin.internal.InlineOnly method getProp2(): java.lang.String
|
private final static @kotlin.internal.InlineOnly method getProp2(): java.lang.String
|
||||||
public synthetic deprecated static @kotlin.internal.InlineOnly method prop$annotations(): void
|
public synthetic deprecated static @kotlin.internal.InlineOnly method prop$annotations(): void
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ final class test/SamAdapterAndInlinedOneKt$sam$java_lang_Runnable$0 {
|
|||||||
|
|
||||||
@kotlin.Metadata
|
@kotlin.Metadata
|
||||||
public final class test/SamAdapterAndInlinedOneKt {
|
public final class test/SamAdapterAndInlinedOneKt {
|
||||||
private final static method makeRunnable(p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
public synthetic final static @org.jetbrains.annotations.NotNull method makeRunnable(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
||||||
public final static @org.jetbrains.annotations.NotNull method makeRunnable2(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
public final static @org.jetbrains.annotations.NotNull method makeRunnable2(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
||||||
public final static @org.jetbrains.annotations.NotNull method noInline(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
public final static @org.jetbrains.annotations.NotNull method noInline(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
||||||
public final static @org.jetbrains.annotations.NotNull method noInline2(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
public final static @org.jetbrains.annotations.NotNull method noInline2(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): java.lang.Runnable
|
||||||
|
|||||||
@@ -69,11 +69,13 @@ private val REPLACE_WITH_IMPORTS_NAME = Name.identifier("imports")
|
|||||||
|
|
||||||
private val INLINE_ONLY_ANNOTATION_FQ_NAME = FqName("kotlin.internal.InlineOnly")
|
private val INLINE_ONLY_ANNOTATION_FQ_NAME = FqName("kotlin.internal.InlineOnly")
|
||||||
|
|
||||||
fun MemberDescriptor.isInlineOnlyOrReifiable(): Boolean =
|
fun MemberDescriptor.isInlineOnlyOrReifiable(checkInlineOnly: Boolean = true): Boolean =
|
||||||
this is CallableMemberDescriptor && (isReifiable() || DescriptorUtils.getDirectMember(this).isReifiable() || isInlineOnly())
|
this is CallableMemberDescriptor &&
|
||||||
|
(isReifiable() || DescriptorUtils.getDirectMember(this).isReifiable() || (checkInlineOnly && isInlineOnly()))
|
||||||
|
|
||||||
fun MemberDescriptor.isEffectivelyInlineOnly(): Boolean =
|
@JvmOverloads
|
||||||
isInlineOnlyOrReifiable() || safeAs<FunctionDescriptor>()?.let { it.isSuspend && it.isInline } == true
|
fun MemberDescriptor.isEffectivelyInlineOnly(checkInlineOnly: Boolean = true): Boolean =
|
||||||
|
isInlineOnlyOrReifiable(checkInlineOnly) || safeAs<FunctionDescriptor>()?.let { it.isSuspend && it.isInline } == true
|
||||||
|
|
||||||
fun MemberDescriptor.isInlineOnly(): Boolean {
|
fun MemberDescriptor.isInlineOnly(): Boolean {
|
||||||
if (this !is FunctionDescriptor ||
|
if (this !is FunctionDescriptor ||
|
||||||
|
|||||||
Reference in New Issue
Block a user