Refactor RuntimeTypeMapper, extract IntrinsicObjects-related behavior
Make it similar to other JavaToKotlinClassMapBuilder implementations to be able to get rid of that inheritance
This commit is contained in:
+3
-4
@@ -58,10 +58,9 @@ class LazyJavaAnnotationDescriptor(
|
||||
}
|
||||
|
||||
private val type = c.storageManager.createLazyValue {
|
||||
val fqName = fqName()
|
||||
if (fqName == null) return@createLazyValue ErrorUtils.createErrorType("No fqName: $javaAnnotation")
|
||||
val annotationClass = JavaToKotlinClassMap.INSTANCE.mapKotlinClass(fqName, TypeUsage.MEMBER_SIGNATURE_INVARIANT)
|
||||
?: javaAnnotation.resolve()?.let { javaClass -> c.moduleClassResolver.resolveClass(javaClass) }
|
||||
val fqName = fqName() ?: return@createLazyValue ErrorUtils.createErrorType("No fqName: $javaAnnotation")
|
||||
val annotationClass = JavaToKotlinClassMap.INSTANCE.mapJavaToKotlin(fqName)
|
||||
?: javaAnnotation.resolve()?.let { javaClass -> c.moduleClassResolver.resolveClass(javaClass) }
|
||||
annotationClass?.getDefaultType() ?: ErrorUtils.createErrorType(fqName.asString())
|
||||
}
|
||||
|
||||
|
||||
+9
-3
@@ -146,7 +146,7 @@ class LazyJavaTypeResolver(
|
||||
return c.reflectionTypes.kClass
|
||||
}
|
||||
|
||||
val javaToKotlinClassMap = JavaToKotlinClassMap.INSTANCE
|
||||
val javaToKotlin = JavaToKotlinClassMap.INSTANCE
|
||||
|
||||
val howThisTypeIsUsedEffectively = when {
|
||||
attr.flexibility == FLEXIBLE_LOWER_BOUND -> MEMBER_SIGNATURE_COVARIANT
|
||||
@@ -154,13 +154,19 @@ class LazyJavaTypeResolver(
|
||||
|
||||
// This case has to be checked before isMarkedReadOnly/isMarkedMutable, because those two are slow
|
||||
// not mapped, we don't care about being marked mutable/read-only
|
||||
javaToKotlinClassMap.mapPlatformClass(fqName).isEmpty() -> attr.howThisTypeIsUsed
|
||||
javaToKotlin.mapPlatformClass(fqName).isEmpty() -> attr.howThisTypeIsUsed
|
||||
|
||||
// Read (possibly external) annotations
|
||||
else -> attr.howThisTypeIsUsedAccordingToAnnotations
|
||||
}
|
||||
|
||||
return javaToKotlinClassMap.mapKotlinClass(fqName, howThisTypeIsUsedEffectively)
|
||||
if (howThisTypeIsUsedEffectively == MEMBER_SIGNATURE_COVARIANT || howThisTypeIsUsedEffectively == SUPERTYPE) {
|
||||
javaToKotlin.mapJavaToKotlinCovariant(fqName)?.let { mutableCollectionDescriptor ->
|
||||
return mutableCollectionDescriptor
|
||||
}
|
||||
}
|
||||
|
||||
return javaToKotlin.mapJavaToKotlin(fqName)
|
||||
}
|
||||
|
||||
private fun isConstructorTypeParameter(): Boolean {
|
||||
|
||||
+8
-10
@@ -21,7 +21,6 @@ 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.load.java.components.TypeUsage;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
@@ -49,16 +48,15 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassDescriptor mapKotlinClass(@NotNull FqName fqName, @NotNull TypeUsage typeUsage) {
|
||||
if (typeUsage == TypeUsage.MEMBER_SIGNATURE_COVARIANT || typeUsage == TypeUsage.SUPERTYPE) {
|
||||
ClassDescriptor descriptor = classDescriptorMapForCovariantPositions.get(fqName);
|
||||
if (descriptor != null) {
|
||||
return descriptor;
|
||||
}
|
||||
}
|
||||
public ClassDescriptor mapJavaToKotlin(@NotNull FqName fqName) {
|
||||
return classDescriptorMap.get(fqName);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassDescriptor mapJavaToKotlinCovariant(@NotNull FqName fqName) {
|
||||
return classDescriptorMapForCovariantPositions.get(fqName);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static FqName fqNameByClass(@NotNull Class<?> clazz) {
|
||||
return new FqName(clazz.getCanonicalName());
|
||||
@@ -92,8 +90,8 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements
|
||||
|
||||
@NotNull
|
||||
public Collection<ClassDescriptor> mapPlatformClass(@NotNull FqName fqName) {
|
||||
ClassDescriptor kotlinAnalog = classDescriptorMap.get(fqName);
|
||||
ClassDescriptor kotlinCovariantAnalog = classDescriptorMapForCovariantPositions.get(fqName);
|
||||
ClassDescriptor kotlinAnalog = mapJavaToKotlin(fqName);
|
||||
ClassDescriptor kotlinCovariantAnalog = mapJavaToKotlinCovariant(fqName);
|
||||
List<ClassDescriptor> descriptors = new ArrayList<ClassDescriptor>(2);
|
||||
if (kotlinAnalog != null) {
|
||||
descriptors.add(kotlinAnalog);
|
||||
|
||||
Reference in New Issue
Block a user