isInlineOnly renamed to isInlineOnlyOrReified

This commit is contained in:
Michael Bogdanov
2016-02-18 15:37:00 +03:00
parent 30c2abba3c
commit 6f1def9366
4 changed files with 12 additions and 8 deletions
@@ -329,7 +329,7 @@ public class AsmUtil {
DeclarationDescriptor containingDeclaration = memberDescriptor.getContainingDeclaration();
Visibility memberVisibility = memberDescriptor.getVisibility();
if (AnnotationUtilKt.isInlineOnly(memberDescriptor)) return ACC_PRIVATE;
if (AnnotationUtilKt.isInlineOnlyOrReified(memberDescriptor)) return ACC_PRIVATE;
if (memberVisibility == Visibilities.LOCAL && memberDescriptor instanceof CallableMemberDescriptor) {
return ACC_PUBLIC;
@@ -610,7 +610,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
boolean withinInline,
boolean isSuperCall
) {
if (AnnotationUtilKt.isInlineOnly(unwrappedDescriptor)) return false;
if (AnnotationUtilKt.isInlineOnlyOrReified(unwrappedDescriptor)) return false;
return isSuperCall && withinInline ||
(accessFlag & ACC_PRIVATE) != 0 ||
@@ -68,10 +68,14 @@ fun AnnotationDescriptor.argumentValue(parameterName: String): Any? {
private val INLINE_ONLY_ANNOTATION_FQ_NAME = FqName("kotlin.internal.InlineOnly")
fun MemberDescriptor.isInlineOnly(): Boolean {
fun MemberDescriptor.isInlineOnlyOrReified(): Boolean {
if (this !is FunctionDescriptor) return false
return typeParameters.any { it.isReified } ||
annotations.hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME) && InlineUtil.isInline(this).apply {
assert(this) { "Function is not inline: ${this@isInlineOnly}"; }
}
return typeParameters.any { it.isReified } || hasInlineOnlyAnnotation()
}
fun MemberDescriptor.hasInlineOnlyAnnotation(): Boolean {
if (this !is FunctionDescriptor) return false
return annotations.hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME) && InlineUtil.isInline(this).apply {
assert(this) { "Function is not inline: ${this@hasInlineOnlyAnnotation}"; }
}
}
@@ -120,7 +120,7 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz
hasInlinable |= InlineUtil.containsReifiedTypeParameters(functionDescriptor);
if (!hasInlinable && !AnnotationUtilKt.isInlineOnly(functionDescriptor)) {
if (!hasInlinable && !AnnotationUtilKt.isInlineOnlyOrReified(functionDescriptor)) {
KtModifierList modifierList = function.getModifierList();
PsiElement inlineModifier = modifierList == null ? null : modifierList.getModifier(KtTokens.INLINE_KEYWORD);
PsiElement reportOn = inlineModifier == null ? function : inlineModifier;