diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/inline/inlineOnly.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/inline/inlineOnly.kt index e8b941b96c1..ea16e6702a6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/inline/inlineOnly.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/inline/inlineOnly.kt @@ -14,16 +14,21 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils private val INLINE_ONLY_ANNOTATION_FQ_NAME = FqName("kotlin.internal.InlineOnly") -fun MemberDescriptor.isInlineOnlyOrReifiable(): Boolean = - this is CallableMemberDescriptor && (isReifiable() || DescriptorUtils.getDirectMember(this).isReifiable() || isInlineOnly()) - fun MemberDescriptor.isEffectivelyInlineOnly(): Boolean = - isInlineOnlyOrReifiable() || (this is FunctionDescriptor && isSuspend && isInline && visibility == Visibilities.PRIVATE) + isInlineWithReified() || isInlineOnly() || isPrivateInlineSuspend() fun MemberDescriptor.isInlineOnly(): Boolean = this is FunctionDescriptor && isInline && (hasInlineOnlyAnnotation() || DescriptorUtils.getDirectMember(this).hasInlineOnlyAnnotation()) -private fun CallableMemberDescriptor.isReifiable() = typeParameters.any { it.isReified } +private fun MemberDescriptor.isPrivateInlineSuspend(): Boolean = + this is FunctionDescriptor && isSuspend && isInline && visibility == Visibilities.PRIVATE -private fun CallableMemberDescriptor.hasInlineOnlyAnnotation() = annotations.hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME) +fun MemberDescriptor.isInlineWithReified(): Boolean = + this is CallableMemberDescriptor && (hasReifiedParameters() || DescriptorUtils.getDirectMember(this).hasReifiedParameters()) + +private fun CallableMemberDescriptor.hasReifiedParameters(): Boolean = + typeParameters.any { it.isReified } + +private fun CallableMemberDescriptor.hasInlineOnlyAnnotation(): Boolean = + annotations.hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)