From 424d71e9642fc968da5a35879cd07da011486521 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 16 Sep 2015 15:56:42 +0300 Subject: [PATCH] Remove reference to KotlinBuiltIns from CompanionObjectMapping Make it a class --- .../src/org/jetbrains/kotlin/codegen/FieldInfo.java | 6 +++++- .../jetbrains/kotlin/platform/JavaToKotlinClassMap.java | 3 ++- .../jetbrains/kotlin/builtins/CompanionObjectMapping.kt | 7 ++----- .../js/translate/intrinsic/objects/objectsIntrinsics.kt | 5 ++++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java index 99e97b4bddc..8a8d15e42d2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.codegen; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.builtins.CompanionObjectMapping; +import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.load.java.JvmAbi; @@ -27,13 +28,16 @@ import org.jetbrains.org.objectweb.asm.Type; import static org.jetbrains.kotlin.resolve.DescriptorUtils.isNonCompanionObject; public class FieldInfo { + + private static final CompanionObjectMapping COMPANION_OBJECT_MAPPING = new CompanionObjectMapping(KotlinBuiltIns.getInstance()); + @NotNull public static FieldInfo createForSingleton(@NotNull ClassDescriptor classDescriptor, @NotNull JetTypeMapper typeMapper) { if (!classDescriptor.getKind().isSingleton()) { throw new UnsupportedOperationException("Can't create singleton field for class: " + classDescriptor); } - if (isNonCompanionObject(classDescriptor) || CompanionObjectMapping.hasMappingToObject(classDescriptor)) { + if (isNonCompanionObject(classDescriptor) || COMPANION_OBJECT_MAPPING.hasMappingToObject(classDescriptor)) { Type type = typeMapper.mapType(classDescriptor); return new FieldInfo(type, type, JvmAbi.INSTANCE_FIELD, true); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMap.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMap.java index f513fea8a00..f3036190809 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMap.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMap.java @@ -69,7 +69,8 @@ public class JavaToKotlinClassMap implements PlatformToKotlinClassMap { add(ClassId.topLevel(jvmType.getWrapperFqName()), builtIns.getPrimitiveClassDescriptor(jvmType.getPrimitiveType())); } - for (ClassDescriptor descriptor : CompanionObjectMapping.allClassesWithIntrinsicCompanions()) { + CompanionObjectMapping companionObjectMapping = new CompanionObjectMapping(builtIns); + for (ClassDescriptor descriptor : companionObjectMapping.allClassesWithIntrinsicCompanions()) { ClassDescriptor companion = descriptor.getCompanionObjectDescriptor(); assert companion != null : "No companion object found for " + descriptor; add(ClassId.topLevel(new FqName("kotlin.jvm.internal." + descriptor.getName().asString() + "CompanionObject")), companion); diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt index 1c28a64ca97..abf7f31c79b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt @@ -18,13 +18,12 @@ package org.jetbrains.kotlin.builtins import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.resolve.DescriptorUtils -import java.util.Collections +import java.util.* -public object CompanionObjectMapping { +public class CompanionObjectMapping(private val builtIns: KotlinBuiltIns) { private val classes = linkedSetOf() init { - val builtIns = KotlinBuiltIns.getInstance() for (type in PrimitiveType.NUMBER_TYPES) { classes.add(builtIns.getPrimitiveClassDescriptor(type)) } @@ -32,11 +31,9 @@ public object CompanionObjectMapping { classes.add(builtIns.getEnum()) } - @JvmStatic public fun allClassesWithIntrinsicCompanions(): Set = Collections.unmodifiableSet(classes) - @JvmStatic public fun hasMappingToObject(classDescriptor: ClassDescriptor): Boolean { return DescriptorUtils.isCompanionObject(classDescriptor) && classDescriptor.getContainingDeclaration() in classes 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 2040087319f..2342248d4bc 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 @@ -19,6 +19,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.builtins.CompanionObjectMapping +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.js.config.LibrarySourcesConfig import org.jetbrains.kotlin.js.translate.context.TranslationContext @@ -36,8 +37,10 @@ class DefaultClassObjectIntrinsic(val fqName: FqName, val moduleName: String): O } public class ObjectIntrinsics { + private val companionObjectMapping = CompanionObjectMapping(KotlinBuiltIns.getInstance()) + public fun getIntrinsic(classDescriptor: ClassDescriptor): ObjectIntrinsic { - if (!CompanionObjectMapping.hasMappingToObject(classDescriptor)) return NO_OBJECT_INTRINSIC + if (!companionObjectMapping.hasMappingToObject(classDescriptor)) return NO_OBJECT_INTRINSIC val containingDeclaration = classDescriptor.getContainingDeclaration() val name = Name.identifier(containingDeclaration.getName().asString() + "CompanionObject")