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.backend.common.CodegenUtil;
|
||||||
import org.jetbrains.kotlin.builtins.InlineStrategy;
|
import org.jetbrains.kotlin.builtins.InlineStrategy;
|
||||||
import org.jetbrains.kotlin.builtins.InlineUtil;
|
import org.jetbrains.kotlin.builtins.InlineUtil;
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
import org.jetbrains.kotlin.codegen.*;
|
import org.jetbrains.kotlin.codegen.*;
|
||||||
import org.jetbrains.kotlin.codegen.context.CodegenContext;
|
import org.jetbrains.kotlin.codegen.context.CodegenContext;
|
||||||
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext;
|
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext;
|
||||||
@@ -468,7 +469,7 @@ public class InlineCodegen extends CallGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: check type of context
|
//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) {
|
private void putParameterOnStack(ParameterInfo... infos) {
|
||||||
|
|||||||
@@ -18,7 +18,10 @@ package org.jetbrains.kotlin.builtins;
|
|||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
|
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
|
||||||
@@ -30,14 +33,10 @@ import static kotlin.KotlinPackage.firstOrNull;
|
|||||||
|
|
||||||
public class InlineUtil {
|
public class InlineUtil {
|
||||||
|
|
||||||
public static boolean hasNoinlineAnnotation(@NotNull CallableDescriptor valueParameterOrReceiver) {
|
|
||||||
return KotlinBuiltIns.containsAnnotation(valueParameterOrReceiver, KotlinBuiltIns.getNoinlineClassAnnotationFqName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isInlineLambdaParameter(@NotNull CallableDescriptor valueParameterOrReceiver) {
|
public static boolean isInlineLambdaParameter(@NotNull CallableDescriptor valueParameterOrReceiver) {
|
||||||
JetType type = valueParameterOrReceiver.getOriginal().getReturnType();
|
JetType type = valueParameterOrReceiver.getOriginal().getReturnType();
|
||||||
return !hasNoinlineAnnotation(valueParameterOrReceiver) &&
|
return type != null &&
|
||||||
type != null &&
|
!KotlinBuiltIns.isNoinline(valueParameterOrReceiver) &&
|
||||||
KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(type);
|
KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,8 +46,7 @@ public class InlineUtil {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static InlineStrategy getInlineStrategy(@NotNull DeclarationDescriptor descriptor) {
|
public static InlineStrategy getInlineStrategy(@NotNull DeclarationDescriptor descriptor) {
|
||||||
ClassDescriptor inlineAnnotation = KotlinBuiltIns.getInstance().getInlineClassAnnotation();
|
AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.inline);
|
||||||
AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(DescriptorUtils.getFqNameSafe(inlineAnnotation));
|
|
||||||
if (annotation == null) {
|
if (annotation == null) {
|
||||||
return InlineStrategy.NOT_INLINE;
|
return InlineStrategy.NOT_INLINE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ public class KotlinBuiltIns {
|
|||||||
public final FqName data = fqName("data");
|
public final FqName data = fqName("data");
|
||||||
public final FqName deprecated = fqName("deprecated");
|
public final FqName deprecated = fqName("deprecated");
|
||||||
public final FqName tailRecursive = fqName("tailRecursive");
|
public final FqName tailRecursive = fqName("tailRecursive");
|
||||||
|
public final FqName inline = fqName("inline");
|
||||||
public final FqName noinline = fqName("noinline");
|
public final FqName noinline = fqName("noinline");
|
||||||
|
|
||||||
public final FqNameUnsafe kClass = new FqName("kotlin.reflect.KClass").toUnsafe();
|
public final FqNameUnsafe kClass = new FqName("kotlin.reflect.KClass").toUnsafe();
|
||||||
@@ -347,16 +348,6 @@ public class KotlinBuiltIns {
|
|||||||
return getBuiltInClassByName("data");
|
return getBuiltInClassByName("data");
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static FqName getNoinlineClassAnnotationFqName() {
|
|
||||||
return FQ_NAMES.noinline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public ClassDescriptor getInlineClassAnnotation() {
|
|
||||||
return getBuiltInClassByName("inline");
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public ClassDescriptor getInlineOptionsClassAnnotation() {
|
public ClassDescriptor getInlineOptionsClassAnnotation() {
|
||||||
return getBuiltInClassByName("inlineOptions");
|
return getBuiltInClassByName("inlineOptions");
|
||||||
@@ -879,11 +870,16 @@ public class KotlinBuiltIns {
|
|||||||
return containsAnnotation(declarationDescriptor, FQ_NAMES.tailRecursive);
|
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) {
|
public static boolean isSuppressAnnotation(@NotNull AnnotationDescriptor annotationDescriptor) {
|
||||||
return isConstructedFromGivenClass(annotationDescriptor.getType(), FQ_NAMES.suppress);
|
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;
|
return descriptor.getOriginal().getAnnotations().findAnnotation(annotationClassFqName) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user