From a645b3668821c2b36d376d56114f76a46fa034c0 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 11 Apr 2019 18:14:44 +0300 Subject: [PATCH] Minor, restructure InlineOnly-related utilities --- .../kotlin/resolve/inline/inlineOnly.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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)