Make inline+reified functions synthetic instead of private in bytecode
#KT-18563 Fixed
This commit is contained in:
+3
-1
@@ -181,7 +181,9 @@ class InlineAnalyzerExtension(
|
||||
}
|
||||
if (hasInlineArgs) return
|
||||
|
||||
if (functionDescriptor.isInlineOnlyOrReifiable() || functionDescriptor.isExpect || functionDescriptor.isSuspend) return
|
||||
if (functionDescriptor.isInlineWithReified() || functionDescriptor.isInlineOnly() || functionDescriptor.isExpect ||
|
||||
functionDescriptor.isSuspend
|
||||
) return
|
||||
|
||||
if (reasonableInlineRules.any { it.isInlineReasonable(functionDescriptor, function, trace.bindingContext) }) return
|
||||
|
||||
|
||||
@@ -14,8 +14,17 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
|
||||
private val INLINE_ONLY_ANNOTATION_FQ_NAME = FqName("kotlin.internal.InlineOnly")
|
||||
|
||||
/**
|
||||
* @return true if it's impossible to observe a call instruction referencing this member in the bytecode.
|
||||
*/
|
||||
fun MemberDescriptor.isEffectivelyInlineOnly(): Boolean =
|
||||
isInlineWithReified() || isInlineOnly() || isPrivateInlineSuspend()
|
||||
isInlineWithReified() || isInlineOnlyPrivateInBytecode()
|
||||
|
||||
/**
|
||||
* @return true if this member should be private in bytecode because it's effectively inline-only.
|
||||
*/
|
||||
fun MemberDescriptor.isInlineOnlyPrivateInBytecode(): Boolean =
|
||||
isInlineOnly() || isPrivateInlineSuspend()
|
||||
|
||||
fun MemberDescriptor.isInlineOnly(): Boolean =
|
||||
this is FunctionDescriptor && isInline &&
|
||||
|
||||
Reference in New Issue
Block a user