From 45cf221b976b12298dbe81817ec1cda3e506ee97 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Sun, 16 Aug 2020 23:42:40 +0300 Subject: [PATCH] Move util functions from KotlinBuiltIns to :core:descriptors.common module --- .../providers/impl/FirTypeResolverImpl.kt | 6 +-- .../jetbrains/kotlin/ir/interpreter/Utils.kt | 6 +-- .../kotlin/builtins/KotlinBuiltInsNames.kt | 37 +++++++++++++++++++ .../builtins/jvm/JavaToKotlinClassMap.kt | 7 ++-- .../builtins/jvm/JvmBuiltInsSettings.kt | 2 +- .../kotlin/builtins/CompanionObjectMapping.kt | 2 +- .../kotlin/builtins/KotlinBuiltIns.java | 33 ----------------- .../decompiler/navigation/MemberMatching.java | 3 +- .../kotlin/android/ParcelableUtil.kt | 6 +-- ...arationAndFirDeclarationEqualityChecker.kt | 5 ++- .../api/fir/components/KtFirCallResolver.kt | 12 +++--- .../js/translate/utils/TranslationUtils.java | 2 +- 12 files changed, 65 insertions(+), 56 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt index e5918a2caf6..0bf2132e084 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl -import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.diagnostics.ConeIntermediateDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic @@ -148,9 +148,9 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver { typeRef.valueParameters.map { it.returnTypeRef.coneType } + listOf(typeRef.returnTypeRef.coneType) val classId = if (typeRef.isSuspend) { - KotlinBuiltIns.getSuspendFunctionClassId(typeRef.parametersCount) + KotlinBuiltInsNames.getSuspendFunctionClassId(typeRef.parametersCount) } else { - KotlinBuiltIns.getFunctionClassId(typeRef.parametersCount) + KotlinBuiltInsNames.getFunctionClassId(typeRef.parametersCount) } val attributes = typeRef.annotations.computeTypeAttributes() return ConeClassLikeTypeImpl( diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt index a26dcdbc7ff..2cf3b2155c4 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.ir.interpreter -import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.ir.interpreter.builtins.evaluateIntrinsicAnnotation import org.jetbrains.kotlin.ir.interpreter.stack.Variable @@ -207,7 +207,7 @@ internal fun IrFunction.getCapitalizedFileName() = this.file.name.replace(".kt", internal fun IrType.isUnsigned() = this.isUByte() || this.isUShort() || this.isUInt() || this.isULong() internal fun IrType.isPrimitiveArray(): Boolean { - return this.getClass()?.fqNameWhenAvailable?.toUnsafe()?.let { KotlinBuiltIns.isPrimitiveArray(it) } ?: false + return this.getClass()?.fqNameWhenAvailable?.toUnsafe()?.let { KotlinBuiltInsNames.isPrimitiveArray(it) } ?: false } internal fun IrType.isFunction() = this.getClass()?.fqNameWhenAvailable?.asString()?.startsWith("kotlin.Function") ?: false @@ -229,4 +229,4 @@ fun IrClass.internalName(): String { } } return internalName.toString() -} \ No newline at end of file +} diff --git a/core/descriptors.common/src/org/jetbrains/kotlin/builtins/KotlinBuiltInsNames.kt b/core/descriptors.common/src/org/jetbrains/kotlin/builtins/KotlinBuiltInsNames.kt index 8b862a07607..ad1edfea5e6 100644 --- a/core/descriptors.common/src/org/jetbrains/kotlin/builtins/KotlinBuiltInsNames.kt +++ b/core/descriptors.common/src/org/jetbrains/kotlin/builtins/KotlinBuiltInsNames.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.builtins +import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames.FqNames.reflect +import org.jetbrains.kotlin.builtins.functions.FunctionClassKind import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameUnsafe @@ -205,4 +207,39 @@ object KotlinBuiltInsNames { return ANNOTATION_PACKAGE_FQ_NAME.child(Name.identifier(simpleName)) } } + + @JvmStatic + fun getFunctionName(parameterCount: Int): String { + return "Function$parameterCount" + } + + @JvmStatic + fun getKFunctionFqName(parameterCount: Int): FqNameUnsafe { + return reflect(FunctionClassKind.KFunction.classNamePrefix + parameterCount) + } + + @JvmStatic + fun getFunctionClassId(parameterCount: Int): ClassId { + return ClassId(BUILT_INS_PACKAGE_FQ_NAME, Name.identifier(getFunctionName(parameterCount))) + } + + @JvmStatic + fun getSuspendFunctionName(parameterCount: Int): String { + return FunctionClassKind.SuspendFunction.classNamePrefix + parameterCount + } + + @JvmStatic + fun getSuspendFunctionClassId(parameterCount: Int): ClassId { + return ClassId(COROUTINES_PACKAGE_FQ_NAME_RELEASE, Name.identifier(getSuspendFunctionName(parameterCount))) + } + + @JvmStatic + fun isPrimitiveArray(arrayFqName: FqNameUnsafe): Boolean { + return FqNames.arrayClassFqNameToPrimitiveType.get(arrayFqName) != null + } + + @JvmStatic + fun getPrimitiveFqName(primitiveType: PrimitiveType): FqName { + return BUILT_INS_PACKAGE_FQ_NAME.child(primitiveType.typeName) + } } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JavaToKotlinClassMap.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JavaToKotlinClassMap.kt index 96d7f0087c9..bb4e89c8436 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JavaToKotlinClassMap.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JavaToKotlinClassMap.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.builtins.jvm import org.jetbrains.kotlin.builtins.CompanionObjectMapping import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames.FqNames import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap import org.jetbrains.kotlin.builtins.functions.FunctionClassKind @@ -86,7 +87,7 @@ object JavaToKotlinClassMap : PlatformToKotlinClassMap { for (jvmType in JvmPrimitiveType.values()) { add( ClassId.topLevel(jvmType.wrapperFqName), - ClassId.topLevel(KotlinBuiltIns.getPrimitiveFqName(jvmType.primitiveType)) + ClassId.topLevel(KotlinBuiltInsNames.getPrimitiveFqName(jvmType.primitiveType)) ) } @@ -98,7 +99,7 @@ object JavaToKotlinClassMap : PlatformToKotlinClassMap { } for (i in 0 until FunctionInvokeDescriptor.BIG_ARITY) { - add(ClassId.topLevel(FqName("kotlin.jvm.functions.Function$i")), KotlinBuiltIns.getFunctionClassId(i)) + add(ClassId.topLevel(FqName("kotlin.jvm.functions.Function$i")), KotlinBuiltInsNames.getFunctionClassId(i)) addKotlinToJava(FqName(NUMBERED_K_FUNCTION_PREFIX + i), K_FUNCTION_CLASS_ID) } for (i in 0 until FunctionInvokeDescriptor.BIG_ARITY - 1) { @@ -132,7 +133,7 @@ object JavaToKotlinClassMap : PlatformToKotlinClassMap { fun mapJavaToKotlin(fqName: FqName, builtIns: KotlinBuiltIns, functionTypeArity: Int? = null): ClassDescriptor? { val kotlinClassId = - if (functionTypeArity != null && fqName == FUNCTION_N_FQ_NAME) KotlinBuiltIns.getFunctionClassId(functionTypeArity) + if (functionTypeArity != null && fqName == FUNCTION_N_FQ_NAME) KotlinBuiltInsNames.getFunctionClassId(functionTypeArity) else mapJavaToKotlin(fqName) return if (kotlinClassId != null) builtIns.getBuiltInClassByFqName(kotlinClassId.asSingleFqName()) else null } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt index a237b3bd8b9..26fb8296612 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt @@ -339,7 +339,7 @@ open class JvmBuiltInsSettings( } private fun isArrayOrPrimitiveArray(fqName: FqNameUnsafe): Boolean { - return fqName == KotlinBuiltInsNames.FqNames.array || KotlinBuiltIns.isPrimitiveArray(fqName) + return fqName == KotlinBuiltInsNames.FqNames.array || KotlinBuiltInsNames.isPrimitiveArray(fqName) } val DROP_LIST_METHOD_SIGNATURES: Set = diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt index 6f64d234151..7d8be157c68 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt @@ -24,7 +24,7 @@ import java.util.* object CompanionObjectMapping { private val classIds = - (PrimitiveType.NUMBER_TYPES.map(KotlinBuiltIns::getPrimitiveFqName) + + (PrimitiveType.NUMBER_TYPES.map(KotlinBuiltInsNames::getPrimitiveFqName) + KotlinBuiltInsNames.FqNames.string.toSafe() + KotlinBuiltInsNames.FqNames._boolean.toSafe() + KotlinBuiltInsNames.FqNames._enum.toSafe()).mapTo(linkedSetOf(), ClassId::topLevel) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 244bb8f0706..cd48defe42e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -288,36 +288,11 @@ public abstract class KotlinBuiltIns { return getBuiltInClassByName("Unit"); } - @NotNull - public static String getFunctionName(int parameterCount) { - return "Function" + parameterCount; - } - - @NotNull - private static FqNameUnsafe getKFunctionFqName(int parameterCount) { - return FqNames.reflect(FunctionClassKind.KFunction.getClassNamePrefix() + parameterCount); - } - - @NotNull - public static ClassId getFunctionClassId(int parameterCount) { - return new ClassId(BUILT_INS_PACKAGE_FQ_NAME, Name.identifier(getFunctionName(parameterCount))); - } - @NotNull public ClassDescriptor getFunction(int parameterCount) { return getBuiltInClassByName(getFunctionName(parameterCount)); } - @NotNull - public static String getSuspendFunctionName(int parameterCount) { - return FunctionClassKind.SuspendFunction.getClassNamePrefix() + parameterCount; - } - - @NotNull - public static ClassId getSuspendFunctionClassId(int parameterCount) { - return new ClassId(COROUTINES_PACKAGE_FQ_NAME_RELEASE, Name.identifier(getSuspendFunctionName(parameterCount))); - } - @NotNull public ClassDescriptor getSuspendFunction(int parameterCount) { return getBuiltInClassByFqName(COROUTINES_PACKAGE_FQ_NAME_RELEASE.child(Name.identifier(getSuspendFunctionName(parameterCount)))); @@ -663,10 +638,6 @@ public abstract class KotlinBuiltIns { return null; } - public static boolean isPrimitiveArray(@NotNull FqNameUnsafe arrayFqName) { - return FqNames.arrayClassFqNameToPrimitiveType.get(arrayFqName) != null; - } - @Nullable public static PrimitiveType getPrimitiveType(@NotNull DeclarationDescriptor descriptor) { return FqNames.primitiveTypeShortNames.contains(descriptor.getName()) @@ -985,8 +956,4 @@ public abstract class KotlinBuiltIns { public static boolean isNotNullOrNullableFunctionSupertype(@NotNull KotlinType type) { return isConstructedFromGivenClass(type, FqNames.functionSupertype); } - - public static FqName getPrimitiveFqName(@NotNull PrimitiveType primitiveType) { - return BUILT_INS_PACKAGE_FQ_NAME.child(primitiveType.getTypeName()); - } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/MemberMatching.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/MemberMatching.java index 92cb4269021..1d0fc8c94ad 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/MemberMatching.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/MemberMatching.java @@ -24,6 +24,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; +import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames; import org.jetbrains.kotlin.descriptors.CallableDescriptor; import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor; import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor; @@ -74,7 +75,7 @@ public class MemberMatching { @Override public String visitFunctionType(@NotNull KtFunctionType type, Void data) { - return KotlinBuiltIns.getFunctionName(type.getParameters().size() + (type.getReceiverTypeReference() != null ? 1 : 0)); + return KotlinBuiltInsNames.getFunctionName(type.getParameters().size() + (type.getReceiverTypeReference() != null ? 1 : 0)); } @Override diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt index 125cf811be2..c4919f9b2b3 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt @@ -232,7 +232,7 @@ private fun PropertyDescriptor.formatReadFromParcel(parcelName: String): String? fun KotlinType.formatJavaClassloader() = "${this.constructor.declarationDescriptor?.fqNameSafe}::class.java.classLoader" // There is no read/write short array methods - if (KotlinBuiltIns.isPrimitiveArray(type) && KotlinBuiltIns.getPrimitiveArrayElementType(type) != PrimitiveType.SHORT) { + if (KotlinBuiltInsNames.isPrimitiveArray(type) && KotlinBuiltIns.getPrimitiveArrayElementType(type) != PrimitiveType.SHORT) { return "$parcelName.create${type.getName()}()" } @@ -271,7 +271,7 @@ private fun PropertyDescriptor.formatWriteToParcel(parcelName: String, flagsName val type = returnType ?: return null // There is no read/write short array methods - if (KotlinBuiltIns.isPrimitiveArray(type) && KotlinBuiltIns.getPrimitiveArrayElementType(type) != PrimitiveType.SHORT) { + if (KotlinBuiltInsNames.isPrimitiveArray(type) && KotlinBuiltIns.getPrimitiveArrayElementType(type) != PrimitiveType.SHORT) { return "$parcelName.write${type.getName()}($name)" } @@ -450,4 +450,4 @@ private fun KotlinType.isSparseBooleanArray(): Boolean = fqNameEquals("android.u private fun KotlinType.isBundle(): Boolean = fqNameEquals("android.os.Bundle") -private fun T.addNewLineBeforeDeclaration() = parent.addBefore(KtPsiFactory(this).createNewLine(), this) \ No newline at end of file +private fun T.addNewLineBeforeDeclaration() = parent.addBefore(KtPsiFactory(this).createNewLine(), this) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt index 90066f727b1..a7e3738574e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/KtDeclarationAndFirDeclarationEqualityChecker.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.fir import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.declarations.FirClass @@ -69,9 +70,9 @@ object KtDeclarationAndFirDeclarationEqualityChecker { } is FirFunctionTypeRef -> { val classId = if (isSuspend) { - KotlinBuiltIns.getSuspendFunctionClassId(parametersCount) + KotlinBuiltInsNames.getSuspendFunctionClassId(parametersCount) } else { - KotlinBuiltIns.getFunctionClassId(parametersCount) + KotlinBuiltInsNames.getFunctionClassId(parametersCount) } buildString { append(classId.asSingleFqName().toString()) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt index 99c26a25c36..00cad81c94c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt @@ -5,9 +5,11 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components -import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.KotlinBuiltInsNames import org.jetbrains.kotlin.fir.declarations.isSuspend -import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.expressions.FirFunctionCall +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol @@ -86,9 +88,9 @@ internal class KtFirCallResolver( companion object { private val kotlinFunctionInvokeCallableIds = (0..23).flatMapTo(hashSetOf()) { arity -> listOf( - CallableId(KotlinBuiltIns.getFunctionClassId(arity), Name.identifier("invoke")), - CallableId(KotlinBuiltIns.getSuspendFunctionClassId(arity), Name.identifier("invoke")) + CallableId(KotlinBuiltInsNames.getFunctionClassId(arity), Name.identifier("invoke")), + CallableId(KotlinBuiltInsNames.getSuspendFunctionClassId(arity), Name.identifier("invoke")) ) } } -} \ No newline at end of file +} diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index c96bd2353cd..6705a0adc6c 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -453,7 +453,7 @@ public final class TranslationUtils { FqNameUnsafe containingClassName = DescriptorUtilsKt.getFqNameUnsafe(containingClass); if (!CLASSES_WITH_NON_BOXED_CHARS.contains(containingClassName) && !KotlinBuiltIns.isPrimitiveType(containingClass.getDefaultType()) && - !KotlinBuiltIns.isPrimitiveArray(containingClassName) + !KotlinBuiltInsNames.isPrimitiveArray(containingClassName) ) { return getAnyTypeFromSameModule(descriptor); }