diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/RangeCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/RangeCodegenUtil.java index c5ecebd3d72..1e2171db8a2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/RangeCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/RangeCodegenUtil.java @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilKt; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; -import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt; import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.kotlin.types.KotlinType; @@ -220,19 +219,17 @@ public class RangeCodegenUtil { @NotNull KtExpression rangeExpression, @NotNull BindingContext bindingContext ) { - if (rangeExpression instanceof KtBinaryExpression) { - KtBinaryExpression binaryExpression = (KtBinaryExpression) rangeExpression; - if (binaryExpression.getOperationReference().getReferencedNameElementType() == KtTokens.RANGE) { - KotlinType kotlinType = bindingContext.getType(rangeExpression); - assert kotlinType != null; - DeclarationDescriptor descriptor = kotlinType.getConstructor().getDeclarationDescriptor(); - - // noinspection ConstantConditions - if (DescriptorUtilsKt.getBuiltIns(descriptor).getIntegralRanges().contains(descriptor)) { - if ("LongRange".equals(descriptor.getName().asString())) { - return argumentType == Type.LONG_TYPE; - } - + if (rangeExpression instanceof KtBinaryExpression && + ((KtBinaryExpression) rangeExpression).getOperationReference().getReferencedNameElementType() == KtTokens.RANGE) { + KotlinType kotlinType = bindingContext.getType(rangeExpression); + assert kotlinType != null; + DeclarationDescriptor descriptor = kotlinType.getConstructor().getDeclarationDescriptor(); + if (descriptor != null) { + FqNameUnsafe fqName = DescriptorUtils.getFqName(descriptor); + if (fqName.equals(KotlinBuiltIns.FQ_NAMES.longRange)) { + return argumentType == Type.LONG_TYPE; + } + if (fqName.equals(KotlinBuiltIns.FQ_NAMES.charRange) || fqName.equals(KotlinBuiltIns.FQ_NAMES.intRange)) { return AsmUtil.isIntPrimitive(argumentType); } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 4daac83d303..bb912286186 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.builtins; -import kotlin.collections.SetsKt; import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -68,7 +67,6 @@ public abstract class KotlinBuiltIns { private final ModuleDescriptorImpl builtInsModule; private final PackageFragmentDescriptor builtInsPackageFragment; private final PackageFragmentDescriptor collectionsPackageFragment; - private final PackageFragmentDescriptor rangesPackageFragment; private final PackageFragmentDescriptor annotationPackageFragment; private final Set builtInsPackageFragments; @@ -106,7 +104,7 @@ public abstract class KotlinBuiltIns { builtInsPackageFragment = createPackage(packageFragmentProvider, packageNameToPackageFragment, BUILT_INS_PACKAGE_FQ_NAME); collectionsPackageFragment = createPackage(packageFragmentProvider, packageNameToPackageFragment, COLLECTIONS_PACKAGE_FQ_NAME); - rangesPackageFragment = createPackage(packageFragmentProvider, packageNameToPackageFragment, RANGES_PACKAGE_FQ_NAME); + createPackage(packageFragmentProvider, packageNameToPackageFragment, RANGES_PACKAGE_FQ_NAME); annotationPackageFragment = createPackage(packageFragmentProvider, packageNameToPackageFragment, ANNOTATION_PACKAGE_FQ_NAME); createPackage(packageFragmentProvider, packageNameToPackageFragment, COROUTINES_PACKAGE_FQ_NAME); @@ -189,6 +187,10 @@ public abstract class KotlinBuiltIns { public final FqName throwable = fqName("Throwable"); public final FqName comparable = fqName("Comparable"); + public final FqNameUnsafe charRange = rangesFqName("CharRange"); + public final FqNameUnsafe intRange = rangesFqName("IntRange"); + public final FqNameUnsafe longRange = rangesFqName("LongRange"); + public final FqName deprecated = fqName("Deprecated"); public final FqName deprecationLevel = fqName("DeprecationLevel"); public final FqName extensionFunctionType = fqName("ExtensionFunctionType"); @@ -255,6 +257,11 @@ public abstract class KotlinBuiltIns { return COLLECTIONS_PACKAGE_FQ_NAME.child(Name.identifier(simpleName)); } + @NotNull + private static FqNameUnsafe rangesFqName(@NotNull String simpleName) { + return RANGES_PACKAGE_FQ_NAME.child(Name.identifier(simpleName)).toUnsafe(); + } + @NotNull private static FqNameUnsafe reflect(@NotNull String simpleName) { return ReflectionTypesKt.getKOTLIN_REFLECT_FQ_NAME().child(Name.identifier(simpleName)).toUnsafe(); @@ -400,15 +407,6 @@ public abstract class KotlinBuiltIns { return getPrimitiveClassDescriptor(BOOLEAN); } - @NotNull - public Set getIntegralRanges() { - return SetsKt.setOf( - getBuiltInClassByName("CharRange", rangesPackageFragment), - getBuiltInClassByName("IntRange", rangesPackageFragment), - getBuiltInClassByName("LongRange", rangesPackageFragment) - ); - } - @NotNull public ClassDescriptor getArray() { return getBuiltInClassByName("Array");