From 5515a6391171d41939babb82daaed11435af95d3 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 14 Feb 2017 12:23:49 +0300 Subject: [PATCH] Replace `KotlinBuiltIns.isBuiltIn` with corresponding package checking Method `isBuiltIn` may not work correctly as built-ins are becoming more and more like a usual dependency. Also behaviour of this method is depend on the target platform. --- .../constants/evaluate/ConstantExpressionEvaluator.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt index 7af13b4e649..7c0edbbe725 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.isSubpackageOf import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.* @@ -37,6 +38,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind import org.jetbrains.kotlin.resolve.constants.* +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.checker.KotlinTypeChecker @@ -449,7 +451,8 @@ private class ConstantExpressionEvaluatorVisitor( private fun evaluateCall(callExpression: KtExpression, receiverExpression: KtExpression, expectedType: KotlinType?): CompileTimeConstant<*>? { val resolvedCall = callExpression.getResolvedCall(trace.bindingContext) ?: return null - if (!KotlinBuiltIns.isBuiltIn(resolvedCall.resultingDescriptor)) return null + val descriptorFqName = resolvedCall.resultingDescriptor.fqNameOrNull() ?: return null + if (!descriptorFqName.isSubpackageOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME)) return null val resultingDescriptorName = resolvedCall.resultingDescriptor.name