diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt index 34202455858..9e749d8421e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CollectionStubMethodGenerator.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.codegen +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION @@ -24,7 +25,6 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.isBuiltinWithSpecialDescriptorInJvm import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor -import org.jetbrains.kotlin.load.java.isFromBuiltins import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JavaToKotlinClassMap import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -191,7 +191,7 @@ class CollectionStubMethodGenerator( private fun isDefaultInJdk(method: FunctionDescriptor) = method.modality != Modality.ABSTRACT && method.original.overriddenTreeUniqueAsSequence(useOriginal = true).all { - it.kind == FAKE_OVERRIDE || it.isFromBuiltins() + it.kind == FAKE_OVERRIDE || KotlinBuiltIns.isBuiltIn(it) } private data class CollectionClassPair( diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt index 291e3d9b362..67ff173b884 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.jvm.checkers import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor @@ -25,7 +26,6 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor -import org.jetbrains.kotlin.load.java.isFromBuiltins import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker @@ -53,10 +53,9 @@ private fun reportErrorIfAdditionalBuiltinDescriptor( diagnosticHolder: DiagnosticSink, reportOn: PsiElement ) { - @Suppress("UNCHECKED_CAST") - val overriddenTree = descriptor.overriddenTreeUniqueAsSequence(useOriginal = true) as Sequence + val overriddenTree = descriptor.overriddenTreeUniqueAsSequence(useOriginal = true) - if (overriddenTree.any { it.isFromBuiltins() && it is JavaCallableMemberDescriptor }) { + if (overriddenTree.any { KotlinBuiltIns.isBuiltIn(it) && it is JavaCallableMemberDescriptor }) { diagnosticHolder.report(Errors.UNSUPPORTED_FEATURE.on(reportOn, LanguageFeature.AdditionalBuiltInsMembers)) } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JavaIncompatibilityRulesOverridabilityCondition.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JavaIncompatibilityRulesOverridabilityCondition.kt index 5cdab84e488..37cc5377f61 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JavaIncompatibilityRulesOverridabilityCondition.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JavaIncompatibilityRulesOverridabilityCondition.kt @@ -60,7 +60,8 @@ class JavaIncompatibilityRulesOverridabilityCondition : ExternalOverridabilityCo subDescriptor: CallableDescriptor, subClassDescriptor: ClassDescriptor? ): Boolean { - if (superDescriptor !is CallableMemberDescriptor || subDescriptor !is FunctionDescriptor || subDescriptor.isFromBuiltins()) { + if (superDescriptor !is CallableMemberDescriptor || subDescriptor !is FunctionDescriptor || + KotlinBuiltIns.isBuiltIn(subDescriptor)) { return false } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt index 9480b5ffeb3..692f6c780a0 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt @@ -31,7 +31,10 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.descriptorUtil.* +import org.jetbrains.kotlin.resolve.descriptorUtil.firstOverridden +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure import org.jetbrains.kotlin.builtins.KotlinBuiltIns.FQ_NAMES as BUILTIN_NAMES @@ -74,7 +77,7 @@ object BuiltinSpecialProperties { private fun CallableMemberDescriptor.hasBuiltinSpecialPropertyFqNameImpl(): Boolean { if (fqNameOrNull() in SPECIAL_FQ_NAMES && valueParameters.isEmpty()) return true - if (!isFromBuiltins()) return false + if (!KotlinBuiltIns.isBuiltIn(this)) return false return overriddenDescriptors.any { hasBuiltinSpecialPropertyFqName(it) } } @@ -83,7 +86,7 @@ object BuiltinSpecialProperties { GETTER_JVM_NAME_TO_PROPERTIES_SHORT_NAME_MAP[name1] ?: emptyList() fun CallableMemberDescriptor.getBuiltinSpecialPropertyGetterName(): String? { - assert(isFromBuiltins()) { "This method is defined only for builtin members, but $this found" } + assert(KotlinBuiltIns.isBuiltIn(this)) { "This method is defined only for builtin members, but $this found" } val descriptor = propertyIfAccessor.firstOverridden { hasBuiltinSpecialPropertyFqName(it) } ?: return null return PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP[descriptor.fqNameSafe]?.asString() @@ -178,7 +181,7 @@ object BuiltinMethodsWithSpecialGenericSignature { } fun CallableMemberDescriptor.isBuiltinWithSpecialDescriptorInJvm(): Boolean { - if (!isFromBuiltins()) return false + if (!KotlinBuiltIns.isBuiltIn(this)) return false return getSpecialSignatureInfo()?.isObjectReplacedWithTypeParameter ?: false || doesOverrideBuiltinWithDifferentJvmName() } @@ -240,8 +243,7 @@ object BuiltinMethodsWithDifferentJvmName { } fun isBuiltinFunctionWithDifferentNameInJvm(functionDescriptor: SimpleFunctionDescriptor): Boolean { - if (!functionDescriptor.isFromBuiltins()) return false - return functionDescriptor.firstOverridden { + return KotlinBuiltIns.isBuiltIn(functionDescriptor) && functionDescriptor.firstOverridden { SIGNATURE_TO_JVM_REPRESENTATION_NAME.containsKey(functionDescriptor.computeJvmSignature()) } != null } @@ -279,7 +281,7 @@ fun T.getOverriddenSpecialBuiltin(): T? { if (!name.sameAsBuiltinMethodWithErasedValueParameters) return null return firstOverridden { - it.isFromBuiltins() && it.getSpecialSignatureInfo() != null + KotlinBuiltIns.isBuiltIn(it) && it.getSpecialSignatureInfo() != null } as T? } @@ -295,7 +297,7 @@ fun T.getOverriddenBuiltinReflectingJvmDescriptor if (!name.sameAsBuiltinMethodWithErasedValueParameters) return null return firstOverridden { - it.isFromBuiltins() && it.getSpecialSignatureInfo()?.isObjectReplacedWithTypeParameter ?: false + KotlinBuiltIns.isBuiltIn(it) && it.getSpecialSignatureInfo()?.isObjectReplacedWithTypeParameter ?: false }?.original as T? } @@ -311,13 +313,9 @@ fun getJvmMethodNameIfSpecial(callableMemberDescriptor: CallableMemberDescriptor private fun getOverriddenBuiltinThatAffectsJvmName( callableMemberDescriptor: CallableMemberDescriptor -): CallableMemberDescriptor? { - val overriddenBuiltin = callableMemberDescriptor.getOverriddenBuiltinWithDifferentJvmName() ?: return null - - if (callableMemberDescriptor.isFromBuiltins()) return overriddenBuiltin - - return null -} +): CallableMemberDescriptor? = + if (KotlinBuiltIns.isBuiltIn(callableMemberDescriptor)) callableMemberDescriptor.getOverriddenBuiltinWithDifferentJvmName() + else null fun ClassDescriptor.hasRealKotlinSuperClassWithOverrideOf( specialCallableDescriptor: CallableDescriptor @@ -334,9 +332,7 @@ fun ClassDescriptor.hasRealKotlinSuperClassWithOverrideOf( TypeCheckingProcedure.findCorrespondingSupertype(superClassDescriptor.defaultType, builtinContainerDefaultType) != null if (doesOverrideBuiltinDeclaration) { - val containingPackageFragment = DescriptorUtils.getParentOfType(superClassDescriptor, PackageFragmentDescriptor::class.java) - if (superClassDescriptor.builtIns.isBuiltInPackageFragment(containingPackageFragment)) return false - return true + return !KotlinBuiltIns.isBuiltIn(superClassDescriptor) } } @@ -348,12 +344,8 @@ fun ClassDescriptor.hasRealKotlinSuperClassWithOverrideOf( // Util methods val CallableMemberDescriptor.isFromJava: Boolean - get() = propertyIfAccessor is JavaCallableMemberDescriptor && propertyIfAccessor.containingDeclaration is JavaClassDescriptor + get() = propertyIfAccessor.let { descriptor -> + (descriptor as? JavaCallableMemberDescriptor)?.containingDeclaration is JavaClassDescriptor + } -fun CallableMemberDescriptor.isFromBuiltins(): Boolean { - val fqNameUnsafe = propertyIfAccessor.fqNameUnsafe - return fqNameUnsafe.startsWith(KotlinBuiltIns.BUILT_INS_PACKAGE_NAME) && - this.module == this.builtIns.builtInsModule -} - -fun CallableMemberDescriptor.isFromJavaOrBuiltins() = isFromJava || isFromBuiltins() +fun CallableMemberDescriptor.isFromJavaOrBuiltins() = isFromJava || KotlinBuiltIns.isBuiltIn(this) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index bb912286186..0e343547d6d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -288,8 +288,8 @@ public abstract class KotlinBuiltIns { return builtInsPackageFragment; } - public boolean isBuiltInPackageFragment(@Nullable PackageFragmentDescriptor packageFragment) { - return packageFragment != null && packageFragment.getContainingDeclaration() == getBuiltInsModule(); + public static boolean isBuiltIn(@NotNull DeclarationDescriptor descriptor) { + return DescriptorUtils.getParentOfType(descriptor, BuiltInsPackageFragment.class, false) != null; } @NotNull diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/descriptorUtils/descriptorUtils.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/descriptorUtils/descriptorUtils.kt index 0011f6e3c7c..fbd0cb9a6bb 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/descriptorUtils/descriptorUtils.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/descriptorUtils/descriptorUtils.kt @@ -17,23 +17,16 @@ package org.jetbrains.kotlin.js.descriptorUtils import com.intellij.openapi.util.text.StringUtil +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.addToStdlib.check val KotlinType.nameIfStandardType: Name? - get() { - return constructor.declarationDescriptor - ?.check { descriptor -> - descriptor.builtIns.isBuiltInPackageFragment(descriptor.containingDeclaration as? PackageFragmentDescriptor) - } - ?.name - } + get() = constructor.declarationDescriptor?.check(KotlinBuiltIns::isBuiltIn)?.name fun KotlinType.getJetTypeFqName(printTypeArguments: Boolean): String { val declaration = requireNotNull(constructor.declarationDescriptor) @@ -47,8 +40,9 @@ fun KotlinType.getJetTypeFqName(printTypeArguments: Boolean): String { if (printTypeArguments && !typeArguments.isEmpty()) { val joinedTypeArguments = StringUtil.join(typeArguments, { projection -> projection.type.getJetTypeFqName(false) }, ", ") - typeArgumentsAsString = "<" + joinedTypeArguments + ">" - } else { + typeArgumentsAsString = "<$joinedTypeArguments>" + } + else { typeArgumentsAsString = "" } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java index 207529dc61a..8fab9846059 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java @@ -24,6 +24,7 @@ import com.google.dart.compiler.backend.js.ast.JsBinaryOperator; import com.google.dart.compiler.backend.js.ast.JsExpression; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.FunctionDescriptor; import org.jetbrains.kotlin.js.patterns.DescriptorPredicate; import org.jetbrains.kotlin.js.patterns.NamePredicate; @@ -31,7 +32,6 @@ import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.js.translate.intrinsic.functions.basic.FunctionIntrinsic; import org.jetbrains.kotlin.js.translate.operation.OperatorTable; import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; -import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils; import org.jetbrains.kotlin.lexer.KtToken; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.types.expressions.OperatorConventions; @@ -144,7 +144,7 @@ public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory { } - if (JsDescriptorUtils.isBuiltin(descriptor) && descriptor.getName().equals(OperatorNameConventions.COMPARE_TO)) { + if (KotlinBuiltIns.isBuiltIn(descriptor) && descriptor.getName().equals(OperatorNameConventions.COMPARE_TO)) { return BUILTINS_COMPARE_TO_INTRINSIC; } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt index c4dc98bf93c..2d8002f8d21 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/CompareToBOIF.kt @@ -16,19 +16,19 @@ package org.jetbrains.kotlin.js.translate.intrinsic.operation -import com.google.common.collect.ImmutableSet -import com.google.dart.compiler.backend.js.ast.* +import com.google.dart.compiler.backend.js.ast.JsBinaryOperation +import com.google.dart.compiler.backend.js.ast.JsExpression +import com.google.dart.compiler.backend.js.ast.JsNumberLiteral +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.psi.KtBinaryExpression -import org.jetbrains.kotlin.types.expressions.OperatorConventions -import org.jetbrains.kotlin.lexer.KtToken import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.operation.OperatorTable import org.jetbrains.kotlin.js.translate.utils.JsAstUtils -import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils import org.jetbrains.kotlin.js.translate.utils.PsiUtils.getOperationToken +import org.jetbrains.kotlin.psi.KtBinaryExpression import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic +import org.jetbrains.kotlin.types.expressions.OperatorConventions object CompareToBOIF : BinaryOperationIntrinsicFactory { val COMPARE_TO_CHAR = pattern("Int|Short|Byte|Double|Float.compareTo(Char)") @@ -69,7 +69,7 @@ object CompareToBOIF : BinaryOperationIntrinsicFactory { override fun getIntrinsic(descriptor: FunctionDescriptor): BinaryOperationIntrinsic? { if (descriptor.isDynamic()) return CompareToIntrinsic - if (!JsDescriptorUtils.isBuiltin(descriptor)) return null + if (!KotlinBuiltIns.isBuiltIn(descriptor)) return null return when { COMPARE_TO_CHAR.apply(descriptor) -> diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt index 3e058e61bba..de581e02493 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/EqualsBOIF.kt @@ -20,9 +20,9 @@ import com.google.dart.compiler.backend.js.ast.JsBinaryOperation import com.google.dart.compiler.backend.js.ast.JsBinaryOperator import com.google.dart.compiler.backend.js.ast.JsExpression import com.google.dart.compiler.backend.js.ast.JsLiteral +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.js.patterns.NamePredicate -import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.intrinsic.functions.factories.TopLevelFIF import org.jetbrains.kotlin.js.translate.utils.JsAstUtils @@ -35,7 +35,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.types.isDynamic -import java.util.Arrays +import java.util.* object EqualsBOIF : BinaryOperationIntrinsicFactory { @@ -86,7 +86,7 @@ object EqualsBOIF : BinaryOperationIntrinsicFactory { when { DescriptorUtils.isEnumClass(descriptor.containingDeclaration) -> EnumEqualsIntrinsic - JsDescriptorUtils.isBuiltin(descriptor) || + KotlinBuiltIns.isBuiltIn(descriptor) || TopLevelFIF.EQUALS_IN_ANY.apply(descriptor) -> EqualsIntrinsic else -> null diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt index 6a757050e42..daa43088682 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/operation/LongCompareToBOIF.kt @@ -19,16 +19,13 @@ package org.jetbrains.kotlin.js.translate.intrinsic.operation import com.google.dart.compiler.backend.js.ast.JsBinaryOperation import com.google.dart.compiler.backend.js.ast.JsExpression import com.google.dart.compiler.backend.js.ast.JsNumberLiteral +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.js.patterns.PatternBuilder.pattern import org.jetbrains.kotlin.js.translate.context.Namer import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.operation.OperatorTable -import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.charToInt -import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.compareForObject -import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.invokeMethod -import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.longFromInt -import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.* import org.jetbrains.kotlin.js.translate.utils.PsiUtils.getOperationToken import org.jetbrains.kotlin.psi.KtBinaryExpression import org.jetbrains.kotlin.types.expressions.OperatorConventions @@ -75,7 +72,7 @@ object LongCompareToBOIF : BinaryOperationIntrinsicFactory { override fun getSupportTokens() = OperatorConventions.COMPARISON_OPERATIONS override fun getIntrinsic(descriptor: FunctionDescriptor): BinaryOperationIntrinsic? { - if (JsDescriptorUtils.isBuiltin(descriptor)) { + if (KotlinBuiltIns.isBuiltIn(descriptor)) { return when { FLOATING_POINT_COMPARE_TO_LONG_PATTERN.apply(descriptor) -> FLOATING_POINT_COMPARE_TO_LONG LONG_COMPARE_TO_FLOATING_POINT_PATTERN.apply(descriptor) -> LONG_COMPARE_TO_FLOATING_POINT diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt index b90df17b579..2b2ea7ca2d8 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallableReferenceTranslator.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.js.translate.reference import com.google.dart.compiler.backend.js.ast.JsExpression import com.google.dart.compiler.backend.js.ast.JsInvocation import com.google.dart.compiler.backend.js.ast.JsLiteral +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.js.resolve.diagnostics.ErrorsJs import org.jetbrains.kotlin.js.translate.context.TranslationContext @@ -27,7 +28,9 @@ import org.jetbrains.kotlin.js.translate.utils.BindingUtils import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils import org.jetbrains.kotlin.psi.KtCallableReferenceExpression import org.jetbrains.kotlin.resolve.DescriptorUtils -import java.util.ArrayList +import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns +import org.jetbrains.kotlin.resolve.descriptorUtil.module +import java.util.* object CallableReferenceTranslator { @@ -50,8 +53,8 @@ object CallableReferenceTranslator { private fun translateForFunction(descriptor: FunctionDescriptor, context: TranslationContext, expression: KtCallableReferenceExpression): JsExpression { return when { - // TODO Support for callable reference to builtin functions and members - JsDescriptorUtils.isBuiltin(descriptor) -> + // TODO Support for callable reference to builtin functions and members + KotlinBuiltIns.isBuiltIn(descriptor) -> reportNotSupported(context, expression) isConstructor(descriptor) -> translateForConstructor(descriptor, context) @@ -66,8 +69,8 @@ object CallableReferenceTranslator { private fun translateForProperty(descriptor: PropertyDescriptor, context: TranslationContext, expression: KtCallableReferenceExpression): JsExpression { return when { - // TODO Support for callable reference to builtin properties - JsDescriptorUtils.isBuiltin(descriptor) -> + // TODO Support for callable reference to builtin properties + KotlinBuiltIns.isBuiltIn(descriptor) -> reportNotSupported(context, expression) isExtension(descriptor) -> translateForExtensionProperty(descriptor, context) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java index b80a27a2e77..90885e80cd4 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java @@ -30,8 +30,8 @@ import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.KtExpression; import org.jetbrains.kotlin.resolve.DescriptorUtils; -import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver; +import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.util.OperatorNameConventions; @@ -154,11 +154,6 @@ public final class JsDescriptorUtils { !ModalityKt.isOverridableOrOverrides(propertyDescriptor); } - public static boolean isBuiltin(@NotNull DeclarationDescriptor descriptor) { - PackageFragmentDescriptor containingPackageFragment = DescriptorUtils.getParentOfType(descriptor, PackageFragmentDescriptor.class); - return org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getBuiltIns(descriptor).isBuiltInPackageFragment(containingPackageFragment); - } - @Nullable public static Name getNameIfStandardType(@NotNull KtExpression expression, @NotNull TranslationContext context) { KotlinType type = context.bindingContext().getType(expression); @@ -175,7 +170,7 @@ public final class JsDescriptorUtils { @Nullable public static String getExternalModuleName(@NotNull DeclarationDescriptor descriptor) { - if (isBuiltin(descriptor)) return Namer.KOTLIN_LOWER_NAME; + if (KotlinBuiltIns.isBuiltIn(descriptor)) return Namer.KOTLIN_LOWER_NAME; PsiElement element = descriptorToDeclaration(descriptor); if (element == null && descriptor instanceof PropertyAccessorDescriptor) {