From d93a7a954726de1f974bbbc4b9b627998b8a39d1 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 15 Apr 2015 22:33:48 +0300 Subject: [PATCH] Minor, simplify some checks in InlineUtil --- .../kotlin/codegen/inline/InlineCodegen.java | 3 ++- .../jetbrains/kotlin/builtins/InlineUtil.java | 16 +++++++--------- .../kotlin/builtins/KotlinBuiltIns.java | 18 +++++++----------- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java index b72b8bc7576..86b24345e56 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.backend.common.CodegenUtil; import org.jetbrains.kotlin.builtins.InlineStrategy; import org.jetbrains.kotlin.builtins.InlineUtil; +import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.codegen.*; import org.jetbrains.kotlin.codegen.context.CodegenContext; import org.jetbrains.kotlin.codegen.context.FieldOwnerContext; @@ -468,7 +469,7 @@ public class InlineCodegen extends CallGenerator { } //TODO: check type of context - return !(codegen.getContext().isInliningLambda() && descriptor != null && !InlineUtil.hasNoinlineAnnotation(descriptor)); + return !(codegen.getContext().isInliningLambda() && descriptor != null && !KotlinBuiltIns.isNoinline(descriptor)); } private void putParameterOnStack(ParameterInfo... infos) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/InlineUtil.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/InlineUtil.java index 00c662dcf18..0900967d3a1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/InlineUtil.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/InlineUtil.java @@ -18,7 +18,10 @@ package org.jetbrains.kotlin.builtins; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.*; +import org.jetbrains.kotlin.descriptors.CallableDescriptor; +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor; +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.constants.ArrayValue; @@ -30,14 +33,10 @@ import static kotlin.KotlinPackage.firstOrNull; public class InlineUtil { - public static boolean hasNoinlineAnnotation(@NotNull CallableDescriptor valueParameterOrReceiver) { - return KotlinBuiltIns.containsAnnotation(valueParameterOrReceiver, KotlinBuiltIns.getNoinlineClassAnnotationFqName()); - } - public static boolean isInlineLambdaParameter(@NotNull CallableDescriptor valueParameterOrReceiver) { JetType type = valueParameterOrReceiver.getOriginal().getReturnType(); - return !hasNoinlineAnnotation(valueParameterOrReceiver) && - type != null && + return type != null && + !KotlinBuiltIns.isNoinline(valueParameterOrReceiver) && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(type); } @@ -47,8 +46,7 @@ public class InlineUtil { @NotNull public static InlineStrategy getInlineStrategy(@NotNull DeclarationDescriptor descriptor) { - ClassDescriptor inlineAnnotation = KotlinBuiltIns.getInstance().getInlineClassAnnotation(); - AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(DescriptorUtils.getFqNameSafe(inlineAnnotation)); + AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.inline); if (annotation == null) { return InlineStrategy.NOT_INLINE; } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index f7ad0e1d3d3..1916111dac6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -159,6 +159,7 @@ public class KotlinBuiltIns { public final FqName data = fqName("data"); public final FqName deprecated = fqName("deprecated"); public final FqName tailRecursive = fqName("tailRecursive"); + public final FqName inline = fqName("inline"); public final FqName noinline = fqName("noinline"); public final FqNameUnsafe kClass = new FqName("kotlin.reflect.KClass").toUnsafe(); @@ -347,16 +348,6 @@ public class KotlinBuiltIns { return getBuiltInClassByName("data"); } - @NotNull - public static FqName getNoinlineClassAnnotationFqName() { - return FQ_NAMES.noinline; - } - - @NotNull - public ClassDescriptor getInlineClassAnnotation() { - return getBuiltInClassByName("inline"); - } - @NotNull public ClassDescriptor getInlineOptionsClassAnnotation() { return getBuiltInClassByName("inlineOptions"); @@ -879,11 +870,16 @@ public class KotlinBuiltIns { return containsAnnotation(declarationDescriptor, FQ_NAMES.tailRecursive); } + /** Checks that the symbol represented by the descriptor is annotated with the {@code kotlin.noinline} annotation */ + public static boolean isNoinline(@NotNull DeclarationDescriptor descriptor) { + return containsAnnotation(descriptor, FQ_NAMES.noinline); + } + public static boolean isSuppressAnnotation(@NotNull AnnotationDescriptor annotationDescriptor) { return isConstructedFromGivenClass(annotationDescriptor.getType(), FQ_NAMES.suppress); } - static boolean containsAnnotation(DeclarationDescriptor descriptor, FqName annotationClassFqName) { + private static boolean containsAnnotation(DeclarationDescriptor descriptor, FqName annotationClassFqName) { return descriptor.getOriginal().getAnnotations().findAnnotation(annotationClassFqName) != null; }