From 4b07ec11ea642d4e5791062970399cc8402c1f13 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 22 Apr 2015 04:33:44 +0300 Subject: [PATCH] Change Class parameter to ClassId in JavaToKotlinClassMap implementations --- .../CollectionClassMapping.java | 5 ++- .../jvm/types/KotlinToJavaTypesMap.java | 21 +++------- .../kotlin/platform/JavaToKotlinClassMap.java | 27 ++++++------- .../platform/JavaToKotlinClassMapBuilder.java | 38 +++++++++++++++---- .../reflect/jvm/internal/RuntimeTypeMapper.kt | 10 ++--- 5 files changed, 54 insertions(+), 47 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/CollectionClassMapping.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/CollectionClassMapping.java index a9c5f55b11b..19d9f3e3b5c 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/CollectionClassMapping.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/CollectionClassMapping.java @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve.jvm.kotlinSignature; import com.google.common.collect.ImmutableBiMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.ClassDescriptor; +import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder; public class CollectionClassMapping extends JavaToKotlinClassMapBuilder { @@ -42,13 +43,13 @@ public class CollectionClassMapping extends JavaToKotlinClassMapBuilder { } @Override - protected void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction) { + protected void register(@NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction) { // do nothing } @Override protected void register( - @NotNull Class javaClass, + @NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull ClassDescriptor kotlinMutableDescriptor ) { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java index f0988551104..82ae5dfbebc 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/types/KotlinToJavaTypesMap.java @@ -21,9 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.name.ClassId; -import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqNameUnsafe; -import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType; @@ -71,32 +69,23 @@ public class KotlinToJavaTypesMap extends JavaToKotlinClassMapBuilder { } @Override - protected void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction) { + protected void register(@NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction) { if (direction == Direction.BOTH || direction == Direction.KOTLIN_TO_JAVA) { - register(DescriptorUtils.getFqName(kotlinDescriptor), computeClassId(javaClass)); + register(DescriptorUtils.getFqName(kotlinDescriptor), javaClassId); } } @Override protected void register( - @NotNull Class javaClass, + @NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull ClassDescriptor kotlinMutableDescriptor ) { - register(javaClass, kotlinDescriptor, Direction.BOTH); - register(javaClass, kotlinMutableDescriptor, Direction.BOTH); + register(javaClassId, kotlinDescriptor, Direction.BOTH); + register(javaClassId, kotlinMutableDescriptor, Direction.BOTH); } private void register(@NotNull FqNameUnsafe kotlinFqName, @NotNull ClassId javaClassId) { map.put(kotlinFqName, javaClassId); } - - @NotNull - private static ClassId computeClassId(@NotNull Class clazz) { - assert !clazz.isPrimitive() && !clazz.isArray() : "Invalid class: " + clazz; - Class outer = clazz.getDeclaringClass(); - return outer == null - ? ClassId.topLevel(new FqName(clazz.getCanonicalName())) - : computeClassId(outer).createNestedClassId(Name.identifier(clazz.getSimpleName())); - } } 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 2b954c5f797..5043c2c1f9c 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 @@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.builtins.PrimitiveType; import org.jetbrains.kotlin.descriptors.ClassDescriptor; +import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.resolve.DescriptorUtils; @@ -43,7 +44,7 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); for (JvmPrimitiveType jvmType : JvmPrimitiveType.values()) { - register(jvmType.getWrapperFqName(), builtIns.getPrimitiveClassDescriptor(jvmType.getPrimitiveType())); + register(ClassId.topLevel(jvmType.getWrapperFqName()), builtIns.getPrimitiveClassDescriptor(jvmType.getPrimitiveType())); } } @@ -57,35 +58,29 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements return classDescriptorMapForCovariantPositions.get(fqName); } - @NotNull - private static FqName fqNameByClass(@NotNull Class clazz) { - return new FqName(clazz.getCanonicalName()); - } - @Override - protected void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction) { + protected void register(@NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction) { if (direction == Direction.BOTH || direction == Direction.JAVA_TO_KOTLIN) { - register(fqNameByClass(javaClass), kotlinDescriptor); + register(javaClassId, kotlinDescriptor); } } @Override protected void register( - @NotNull Class javaClass, + @NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull ClassDescriptor kotlinMutableDescriptor ) { - FqName javaClassName = fqNameByClass(javaClass); - register(javaClassName, kotlinDescriptor); - registerCovariant(javaClassName, kotlinMutableDescriptor); + register(javaClassId, kotlinDescriptor); + registerCovariant(javaClassId, kotlinMutableDescriptor); } - private void register(@NotNull FqName javaClassName, @NotNull ClassDescriptor kotlinDescriptor) { - classDescriptorMap.put(javaClassName, kotlinDescriptor); + private void register(@NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor) { + classDescriptorMap.put(javaClassId.asSingleFqName(), kotlinDescriptor); } - private void registerCovariant(@NotNull FqName javaClassName, @NotNull ClassDescriptor kotlinDescriptor) { - classDescriptorMapForCovariantPositions.put(javaClassName, kotlinDescriptor); + private void registerCovariant(@NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor) { + classDescriptorMapForCovariantPositions.put(javaClassId.asSingleFqName(), kotlinDescriptor); } @NotNull diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMapBuilder.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMapBuilder.java index 3413fbd75e7..a54520e4e42 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMapBuilder.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/platform/JavaToKotlinClassMapBuilder.java @@ -19,6 +19,9 @@ package org.jetbrains.kotlin.platform; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.ClassDescriptor; +import org.jetbrains.kotlin.name.ClassId; +import org.jetbrains.kotlin.name.FqName; +import org.jetbrains.kotlin.name.Name; import java.lang.annotation.Annotation; import java.util.*; @@ -43,8 +46,6 @@ public abstract class JavaToKotlinClassMapBuilder { register(Comparable.class, kotlinBuiltIns.getComparable()); register(Enum.class, kotlinBuiltIns.getEnum()); register(Annotation.class, kotlinBuiltIns.getAnnotation()); - register(Deprecated.class, kotlinBuiltIns.getDeprecatedAnnotation(), Direction.JAVA_TO_KOTLIN); - register(Void.class, kotlinBuiltIns.getNothing(), Direction.KOTLIN_TO_JAVA); register(Iterable.class, kotlinBuiltIns.getIterable(), kotlinBuiltIns.getMutableIterable()); register(Iterator.class, kotlinBuiltIns.getIterator(), kotlinBuiltIns.getMutableIterator()); @@ -54,17 +55,38 @@ public abstract class JavaToKotlinClassMapBuilder { register(Map.class, kotlinBuiltIns.getMap(), kotlinBuiltIns.getMutableMap()); register(Map.Entry.class, kotlinBuiltIns.getMapEntry(), kotlinBuiltIns.getMutableMapEntry()); register(ListIterator.class, kotlinBuiltIns.getListIterator(), kotlinBuiltIns.getMutableListIterator()); + + register(classId(Deprecated.class), kotlinBuiltIns.getDeprecatedAnnotation(), Direction.JAVA_TO_KOTLIN); + + register(classId(Void.class), kotlinBuiltIns.getNothing(), Direction.KOTLIN_TO_JAVA); } - private void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor) { - register(javaClass, kotlinDescriptor, Direction.BOTH); - } - - protected abstract void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction); + protected abstract void register(@NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction); protected abstract void register( - @NotNull Class javaClass, + @NotNull ClassId javaClassId, @NotNull ClassDescriptor kotlinDescriptor, @NotNull ClassDescriptor kotlinMutableDescriptor ); + + @NotNull + private static ClassId classId(@NotNull Class clazz) { + assert !clazz.isPrimitive() && !clazz.isArray() : "Invalid class: " + clazz; + Class outer = clazz.getDeclaringClass(); + return outer == null + ? ClassId.topLevel(new FqName(clazz.getCanonicalName())) + : classId(outer).createNestedClassId(Name.identifier(clazz.getSimpleName())); + } + + private void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor) { + register(classId(javaClass), kotlinDescriptor, Direction.BOTH); + } + + private void register( + @NotNull Class javaClass, + @NotNull ClassDescriptor kotlinDescriptor, + @NotNull ClassDescriptor kotlinMutableDescriptor + ) { + register(classId(javaClass), kotlinDescriptor, kotlinMutableDescriptor); + } } 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 5741196da31..156ad8665a8 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/RuntimeTypeMapper.kt @@ -55,15 +55,15 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() { kotlinFqNameToJvmDesc[DescriptorUtils.getFqNameSafe(kotlinDescriptor)] = jvmDesc } - override fun register(javaClass: Class<*>, kotlinDescriptor: ClassDescriptor, direction: JavaToKotlinClassMapBuilder.Direction) { + override fun register(javaClassId: ClassId, kotlinDescriptor: ClassDescriptor, direction: JavaToKotlinClassMapBuilder.Direction) { if (direction == BOTH || direction == KOTLIN_TO_JAVA) { - recordKotlinToJvm(kotlinDescriptor, javaClass.classId.desc) + recordKotlinToJvm(kotlinDescriptor, javaClassId.desc) } } - override fun register(javaClass: Class<*>, kotlinDescriptor: ClassDescriptor, kotlinMutableDescriptor: ClassDescriptor) { - register(javaClass, kotlinMutableDescriptor, JavaToKotlinClassMapBuilder.Direction.BOTH) - register(javaClass, kotlinDescriptor, JavaToKotlinClassMapBuilder.Direction.BOTH) + override fun register(javaClassId: ClassId, kotlinDescriptor: ClassDescriptor, kotlinMutableDescriptor: ClassDescriptor) { + register(javaClassId, kotlinMutableDescriptor, JavaToKotlinClassMapBuilder.Direction.BOTH) + register(javaClassId, kotlinDescriptor, JavaToKotlinClassMapBuilder.Direction.BOTH) } // TODO: this logic must be shared with JetTypeMapper