Change Class<?> parameter to ClassId in JavaToKotlinClassMap implementations

This commit is contained in:
Alexander Udalov
2015-04-22 04:33:44 +03:00
parent 0dec1eaaad
commit 4b07ec11ea
5 changed files with 54 additions and 47 deletions
@@ -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
@@ -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);
}
}