From 7e86d871338caa57e6a927ee97306eca2eee48d7 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 31 Mar 2015 13:39:38 +0300 Subject: [PATCH] Move built-in companion intrinsics to core to reuse in reflection --- .../src/org/jetbrains/kotlin/codegen/FieldInfo.java | 2 +- .../kotlin/codegen/state/JetTypeMapper.java | 4 ++-- .../kotlin/builtins/jvm}/IntrinsicObjects.kt | 13 ++++++++----- .../kotlin/builtins/CompanionObjectMapping.kt | 5 ++--- .../reflect/jvm/internal/RuntimeTypeMapper.kt | 10 +++++++--- .../intrinsic/objects/objectsIntrinsics.kt | 4 ++-- 6 files changed, 22 insertions(+), 16 deletions(-) rename {compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics => core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/jvm}/IntrinsicObjects.kt (75%) rename compiler/backend-common/src/org/jetbrains/kotlin/backend/common/builtins/DefaultObjectMapping.kt => core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt (92%) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java index f968f3662e7..a4ea4669937 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java @@ -17,7 +17,7 @@ package org.jetbrains.kotlin.codegen; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicObjects; +import org.jetbrains.kotlin.builtins.jvm.IntrinsicObjects; import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.descriptors.ClassifierDescriptor; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java index 145964e5d65..2feb61dff90 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java @@ -21,12 +21,12 @@ import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; +import org.jetbrains.kotlin.builtins.jvm.IntrinsicObjects; import org.jetbrains.kotlin.codegen.*; import org.jetbrains.kotlin.codegen.binding.CodegenBinding; import org.jetbrains.kotlin.codegen.binding.MutableClosure; import org.jetbrains.kotlin.codegen.binding.PsiCodegenPredictor; import org.jetbrains.kotlin.codegen.context.CodegenContext; -import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicObjects; import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.Annotated; @@ -305,7 +305,7 @@ public class JetTypeMapper { } if (descriptor instanceof ClassDescriptor) { - FqName companionObjectMappedFqName = IntrinsicObjects.INSTANCE$.mapType((ClassDescriptor) descriptor); + FqName companionObjectMappedFqName = IntrinsicObjects.mapType((ClassDescriptor) descriptor); if (companionObjectMappedFqName != null) { Type asmType = AsmUtil.asmTypeByFqNameWithoutInnerClasses(companionObjectMappedFqName); if (signatureVisitor != null) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicObjects.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/jvm/IntrinsicObjects.kt similarity index 75% rename from compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicObjects.kt rename to core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/jvm/IntrinsicObjects.kt index 160a2315061..f34df49a66f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicObjects.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/jvm/IntrinsicObjects.kt @@ -14,19 +14,22 @@ * limitations under the License. */ -package org.jetbrains.kotlin.codegen.intrinsics +package org.jetbrains.kotlin.builtins.jvm -import org.jetbrains.kotlin.backend.common.builtins.CompanionObjectMapping +import org.jetbrains.kotlin.builtins.CompanionObjectMapping import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import kotlin.platform.platformStatic public object IntrinsicObjects : CompanionObjectMapping() { - public fun mapType(classDescriptor: ClassDescriptor): FqName? { + private val kotlinJvmInternal = FqName("kotlin.jvm.internal") + + public platformStatic fun mapType(classDescriptor: ClassDescriptor): FqName? { if (!hasMappingToObject(classDescriptor)) return null val containingDeclaration = classDescriptor.getContainingDeclaration() val name = Name.identifier(containingDeclaration.getName().asString() + "CompanionObject") - return FqName("kotlin.jvm.internal").child(name) + return kotlinJvmInternal.child(name) } -} \ No newline at end of file +} diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/builtins/DefaultObjectMapping.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt similarity index 92% rename from compiler/backend-common/src/org/jetbrains/kotlin/backend/common/builtins/DefaultObjectMapping.kt rename to core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt index 2cec9a55ef6..f1a2c89db83 100644 --- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/builtins/DefaultObjectMapping.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt @@ -14,9 +14,8 @@ * limitations under the License. */ -package org.jetbrains.kotlin.backend.common.builtins +package org.jetbrains.kotlin.builtins -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -31,4 +30,4 @@ public abstract class CompanionObjectMapping { KotlinBuiltIns.getInstance().getString() == containingDeclaration || KotlinBuiltIns.getInstance().getEnum() == containingDeclaration } -} \ No newline at end of file +} diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt index da4a2933427..146250b9541 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt @@ -17,6 +17,7 @@ package kotlin.reflect.jvm.internal import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.jvm.IntrinsicObjects import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.load.java.structure.reflect.classId @@ -30,11 +31,12 @@ import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeUtils +import kotlin.reflect.KotlinReflectionInternalError object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() { private val kotlinFqNameToJvmDesc = linkedMapOf() private val kotlinFqNameToJvmDescNullable = linkedMapOf() - private val jvmDescToKotlinClassId = linkedMapOf(); + private val jvmDescToKotlinClassId = linkedMapOf() init { init() @@ -61,8 +63,9 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() { val companionObject = kotlinDescriptor.getCompanionObjectDescriptor() if (companionObject != null) { - // TODO: see org.jetbrains.kotlin.codegen.intrinsics.IntrinsicObjects, extract that logic to core/ - recordMapping(companionObject, "Lkotlin/jvm/internal/${kotlinDescriptor.getName().asString()}CompanionObject;") + val runtimeCompanionFqName = IntrinsicObjects.mapType(companionObject) + ?: throw KotlinReflectionInternalError("Failed to map intrinsic companion of $kotlinDescriptor") + recordMapping(companionObject, ClassId.topLevel(runtimeCompanionFqName).desc) } } @@ -72,6 +75,7 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() { } override fun register(javaClass: Class<*>, kotlinDescriptor: ClassDescriptor, direction: JavaToKotlinClassMapBuilder.Direction) { + // TODO: use direction correctly recordMapping(kotlinDescriptor, javaClass.classId.desc) } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt index 27f855dafe8..4823b876354 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.js.translate.intrinsic.objects import com.google.dart.compiler.backend.js.ast.JsArrayAccess import com.google.dart.compiler.backend.js.ast.JsExpression -import org.jetbrains.kotlin.backend.common.builtins.CompanionObjectMapping +import org.jetbrains.kotlin.builtins.CompanionObjectMapping import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.js.config.LibrarySourcesConfig import org.jetbrains.kotlin.js.translate.context.TranslationContext @@ -56,4 +56,4 @@ object NO_OBJECT_INTRINSIC : ObjectIntrinsic { throw UnsupportedOperationException("ObjectIntrinsic#NO_OBJECT_INTRINSIC_#apply") override fun exists(): Boolean = false -} \ No newline at end of file +}