Minor, simplify some checks in InlineUtil
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user