Pull Java<->Kotlin primitive type mapping up to JavaToKotlinClassMapBuilder
This commit is contained in:
+1
-17
@@ -18,13 +18,11 @@ package org.jetbrains.kotlin.resolve.jvm.types;
|
|||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder;
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -44,16 +42,6 @@ public class KotlinToJavaTypesMap extends JavaToKotlinClassMapBuilder {
|
|||||||
|
|
||||||
private KotlinToJavaTypesMap() {
|
private KotlinToJavaTypesMap() {
|
||||||
init();
|
init();
|
||||||
initPrimitives();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initPrimitives() {
|
|
||||||
for (JvmPrimitiveType type : JvmPrimitiveType.values()) {
|
|
||||||
register(
|
|
||||||
KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.child(type.getPrimitiveType().getTypeName()).toUnsafe(),
|
|
||||||
ClassId.topLevel(type.getWrapperFqName())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -71,7 +59,7 @@ public class KotlinToJavaTypesMap extends JavaToKotlinClassMapBuilder {
|
|||||||
@Override
|
@Override
|
||||||
protected void register(@NotNull ClassId javaClassId, @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) {
|
if (direction == Direction.BOTH || direction == Direction.KOTLIN_TO_JAVA) {
|
||||||
register(DescriptorUtils.getFqName(kotlinDescriptor), javaClassId);
|
map.put(DescriptorUtils.getFqName(kotlinDescriptor), javaClassId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,8 +72,4 @@ public class KotlinToJavaTypesMap extends JavaToKotlinClassMapBuilder {
|
|||||||
register(javaClassId, kotlinDescriptor, Direction.BOTH);
|
register(javaClassId, kotlinDescriptor, Direction.BOTH);
|
||||||
register(javaClassId, kotlinMutableDescriptor, Direction.BOTH);
|
register(javaClassId, kotlinMutableDescriptor, Direction.BOTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void register(@NotNull FqNameUnsafe kotlinFqName, @NotNull ClassId javaClassId) {
|
|
||||||
map.put(kotlinFqName, javaClassId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
-10
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.name.ClassId;
|
|||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -37,15 +36,6 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements
|
|||||||
|
|
||||||
private JavaToKotlinClassMap() {
|
private JavaToKotlinClassMap() {
|
||||||
init();
|
init();
|
||||||
initPrimitives();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initPrimitives() {
|
|
||||||
KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance();
|
|
||||||
|
|
||||||
for (JvmPrimitiveType jvmType : JvmPrimitiveType.values()) {
|
|
||||||
register(ClassId.topLevel(jvmType.getWrapperFqName()), builtIns.getPrimitiveClassDescriptor(jvmType.getPrimitiveType()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
+9
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
|||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -56,6 +57,14 @@ public abstract class JavaToKotlinClassMapBuilder {
|
|||||||
register(Map.Entry.class, kotlinBuiltIns.getMapEntry(), kotlinBuiltIns.getMutableMapEntry());
|
register(Map.Entry.class, kotlinBuiltIns.getMapEntry(), kotlinBuiltIns.getMutableMapEntry());
|
||||||
register(ListIterator.class, kotlinBuiltIns.getListIterator(), kotlinBuiltIns.getMutableListIterator());
|
register(ListIterator.class, kotlinBuiltIns.getListIterator(), kotlinBuiltIns.getMutableListIterator());
|
||||||
|
|
||||||
|
for (JvmPrimitiveType jvmType : JvmPrimitiveType.values()) {
|
||||||
|
register(
|
||||||
|
ClassId.topLevel(jvmType.getWrapperFqName()),
|
||||||
|
kotlinBuiltIns.getPrimitiveClassDescriptor(jvmType.getPrimitiveType()),
|
||||||
|
Direction.BOTH
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
register(classId(Deprecated.class), kotlinBuiltIns.getDeprecatedAnnotation(), Direction.JAVA_TO_KOTLIN);
|
register(classId(Deprecated.class), kotlinBuiltIns.getDeprecatedAnnotation(), Direction.JAVA_TO_KOTLIN);
|
||||||
|
|
||||||
register(classId(Void.class), kotlinBuiltIns.getNothing(), Direction.KOTLIN_TO_JAVA);
|
register(classId(Void.class), kotlinBuiltIns.getNothing(), Direction.KOTLIN_TO_JAVA);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.structure.reflect.classId
|
import org.jetbrains.kotlin.load.java.structure.reflect.classId
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder.Direction.BOTH
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder.Direction.BOTH
|
||||||
@@ -36,28 +36,15 @@ import org.jetbrains.kotlin.types.JetType
|
|||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
|
|
||||||
object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
|
object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
|
||||||
private val kotlinFqNameToJvmDesc = linkedMapOf<FqName, String>()
|
private val kotlinFqNameToJvmDesc = linkedMapOf<FqNameUnsafe, String>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
init()
|
init()
|
||||||
initPrimitives()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initPrimitives() {
|
|
||||||
val builtIns = KotlinBuiltIns.getInstance()
|
|
||||||
|
|
||||||
for (type in JvmPrimitiveType.values()) {
|
|
||||||
recordKotlinToJvm(builtIns.getPrimitiveClassDescriptor(type.getPrimitiveType()), type.getDesc())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun recordKotlinToJvm(kotlinDescriptor: ClassDescriptor, jvmDesc: String) {
|
|
||||||
kotlinFqNameToJvmDesc[DescriptorUtils.getFqNameSafe(kotlinDescriptor)] = jvmDesc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun register(javaClassId: ClassId, kotlinDescriptor: ClassDescriptor, direction: JavaToKotlinClassMapBuilder.Direction) {
|
override fun register(javaClassId: ClassId, kotlinDescriptor: ClassDescriptor, direction: JavaToKotlinClassMapBuilder.Direction) {
|
||||||
if (direction == BOTH || direction == KOTLIN_TO_JAVA) {
|
if (direction == BOTH || direction == KOTLIN_TO_JAVA) {
|
||||||
recordKotlinToJvm(kotlinDescriptor, javaClassId.desc)
|
kotlinFqNameToJvmDesc[DescriptorUtils.getFqName(kotlinDescriptor)] = javaClassId.desc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,20 +68,18 @@ object RuntimeTypeMapper : JavaToKotlinClassMapBuilder() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val classDescriptor = classifier as ClassDescriptor
|
val classDescriptor = classifier as ClassDescriptor
|
||||||
val fqNameUnsafe = DescriptorUtils.getFqName(classDescriptor)
|
val fqName = DescriptorUtils.getFqName(classDescriptor)
|
||||||
|
|
||||||
KotlinBuiltIns.getPrimitiveTypeByFqName(fqNameUnsafe)?.let { primitiveType ->
|
KotlinBuiltIns.getPrimitiveTypeByFqName(fqName)?.let { primitiveType ->
|
||||||
val jvmType = JvmPrimitiveType.get(primitiveType)
|
val jvmType = JvmPrimitiveType.get(primitiveType)
|
||||||
return if (TypeUtils.isNullableType(type)) ClassId.topLevel(jvmType.getWrapperFqName()).desc else jvmType.getDesc()
|
return if (TypeUtils.isNullableType(type)) ClassId.topLevel(jvmType.getWrapperFqName()).desc else jvmType.getDesc()
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinBuiltIns.getPrimitiveTypeByArrayClassFqName(fqNameUnsafe)?.let { primitiveType ->
|
KotlinBuiltIns.getPrimitiveTypeByArrayClassFqName(fqName)?.let { primitiveType ->
|
||||||
return "[" + JvmPrimitiveType.get(primitiveType).getDesc()
|
return "[" + JvmPrimitiveType.get(primitiveType).getDesc()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fqNameUnsafe.isSafe()) {
|
kotlinFqNameToJvmDesc[fqName]?.let { return it }
|
||||||
kotlinFqNameToJvmDesc[fqNameUnsafe.toSafe()]?.let { return it }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (classDescriptor.isCompanionObject()) {
|
if (classDescriptor.isCompanionObject()) {
|
||||||
IntrinsicObjects.mapType(classDescriptor)?.let { fqName ->
|
IntrinsicObjects.mapType(classDescriptor)?.let { fqName ->
|
||||||
|
|||||||
Reference in New Issue
Block a user