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