Null-aware types introduced
Flexible types should drive their own conversions to nullable/not-null
This commit is contained in:
+13
-3
@@ -61,7 +61,7 @@ class LazyJavaTypeResolver(
|
||||
val jetType = JavaToKotlinClassMap.getInstance().mapPrimitiveKotlinClass("[" + javaComponentType.getCanonicalText())
|
||||
if (jetType != null) {
|
||||
return if (PLATFORM_TYPES && attr.allowFlexible)
|
||||
DelegatingFlexibleType(jetType, TypeUtils.makeNullable(jetType))
|
||||
FlexibleJavaClassifierType.create(jetType, TypeUtils.makeNullable(jetType))
|
||||
else TypeUtils.makeNullableAsSpecified(jetType, !attr.isMarkedNotNull)
|
||||
}
|
||||
}
|
||||
@@ -72,7 +72,7 @@ class LazyJavaTypeResolver(
|
||||
val componentType = transformJavaType(javaComponentType, howArgumentTypeIsUsed.toAttributes(attr.allowFlexible))
|
||||
val result = KotlinBuiltIns.getInstance().getArrayType(projectionKind, componentType)
|
||||
return if (PLATFORM_TYPES && attr.allowFlexible)
|
||||
DelegatingFlexibleType(
|
||||
FlexibleJavaClassifierType.create(
|
||||
KotlinBuiltIns.getInstance().getArrayType(INVARIANT, componentType),
|
||||
TypeUtils.makeNullable(
|
||||
KotlinBuiltIns.getInstance().getArrayType(OUT_VARIANCE, componentType)
|
||||
@@ -264,10 +264,20 @@ class LazyJavaTypeResolver(
|
||||
override fun isNullable(): Boolean = _nullable()
|
||||
}
|
||||
|
||||
private open class FlexibleJavaClassifierType(
|
||||
public open class FlexibleJavaClassifierType protected (
|
||||
lowerBound: JetType,
|
||||
upperBound: JetType
|
||||
) : DelegatingFlexibleType(lowerBound, upperBound), CustomTypeVariable {
|
||||
public class object {
|
||||
public fun create(lowerBound: JetType, upperBound: JetType): JetType {
|
||||
if (lowerBound == upperBound) return lowerBound
|
||||
return FlexibleJavaClassifierType(lowerBound, upperBound)
|
||||
}
|
||||
}
|
||||
|
||||
override fun create(lowerBound: JetType, upperBound: JetType): JetType {
|
||||
return FlexibleJavaClassifierType.create(lowerBound, upperBound)
|
||||
}
|
||||
|
||||
override val isTypeVariable: Boolean = lowerBound.getConstructor() == upperBound.getConstructor()
|
||||
&& lowerBound.getConstructor().getDeclarationDescriptor() is TypeParameterDescriptor
|
||||
|
||||
+2
-1
@@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaPackage;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.lazy.types.LazyJavaTypeResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -101,7 +102,7 @@ public class SingleAbstractMethodUtils {
|
||||
if (fixedProjections == null) return null;
|
||||
|
||||
if (JavaPackage.getPLATFORM_TYPES() && !isSamConstructor) {
|
||||
return new DelegatingFlexibleType(fixedProjections, TypeUtils.makeNullable(fixedProjections));
|
||||
return LazyJavaTypeResolver.FlexibleJavaClassifierType.OBJECT$.create(fixedProjections, TypeUtils.makeNullable(fixedProjections));
|
||||
}
|
||||
|
||||
return TypeUtils.makeNullableAsSpecified(fixedProjections, !isSamConstructor && samType.isNullable());
|
||||
|
||||
Reference in New Issue
Block a user