Remake KotlinTypes.
This commit is contained in:
-1
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.load.java.lazy.types.RawTypeImpl
|
||||
import org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition
|
||||
import org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition.Result
|
||||
import org.jetbrains.kotlin.resolve.OverridingUtil
|
||||
import org.jetbrains.kotlin.types.unwrap
|
||||
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
||||
|
||||
class ErasedOverridabilityCondition : ExternalOverridabilityCondition {
|
||||
|
||||
+4
-4
@@ -115,10 +115,10 @@ class LazyJavaTypeResolver(
|
||||
) : AbstractLazyType(c.storageManager) {
|
||||
override val annotations = CompositeAnnotations(listOf(LazyJavaAnnotations(c, javaType), attr.typeAnnotations))
|
||||
|
||||
private val classifier = c.storageManager.createNullableLazyValue { javaType.classifier }
|
||||
private val classifier: JavaClassifier? get() = javaType.classifier
|
||||
|
||||
override fun computeTypeConstructor(): TypeConstructor {
|
||||
val classifier = classifier() ?: return createNotFoundClass()
|
||||
val classifier = classifier ?: return createNotFoundClass()
|
||||
return when (classifier) {
|
||||
is JavaClass -> {
|
||||
val fqName = classifier.fqName.sure { "Class type should have a FQ name: $classifier" }
|
||||
@@ -279,13 +279,13 @@ class LazyJavaTypeResolver(
|
||||
!attr.isMarkedNotNull &&
|
||||
// 'L extends List<T>' in Java is a List<T> in Kotlin, not a List<T?>
|
||||
// nullability will be taken care of in individual member signatures
|
||||
when (classifier()) {
|
||||
when (classifier) {
|
||||
is JavaTypeParameter -> {
|
||||
attr.howThisTypeIsUsed !in setOf(TYPE_ARGUMENT, UPPER_BOUND, SUPERTYPE_ARGUMENT, SUPERTYPE)
|
||||
}
|
||||
is JavaClass,
|
||||
null -> attr.howThisTypeIsUsed !in setOf(TYPE_ARGUMENT, SUPERTYPE_ARGUMENT, SUPERTYPE)
|
||||
else -> error("Unknown classifier: ${classifier()}")
|
||||
else -> error("Unknown classifier: ${classifier}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-8
@@ -27,17 +27,15 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
|
||||
|
||||
class RawTypeImpl(lowerBound: SimpleType, upperBound: SimpleType) : DelegatingFlexibleType(lowerBound, upperBound), RawType {
|
||||
class RawTypeImpl(lowerBound: SimpleType, upperBound: SimpleType) : FlexibleType(lowerBound, upperBound), RawType {
|
||||
init {
|
||||
assert (KotlinTypeChecker.DEFAULT.isSubtypeOf(lowerBound, upperBound)) {
|
||||
"Lower bound $lowerBound of a flexible type must be a subtype of the upper bound $upperBound"
|
||||
}
|
||||
}
|
||||
override fun getDelegate(): KotlinType = delegateType
|
||||
|
||||
override val delegateType: KotlinType get() = lowerBound
|
||||
override val delegate: SimpleType get() = lowerBound
|
||||
|
||||
override val memberScope: MemberScope
|
||||
get() {
|
||||
@@ -46,11 +44,11 @@ class RawTypeImpl(lowerBound: SimpleType, upperBound: SimpleType) : DelegatingFl
|
||||
return classDescriptor.getMemberScope(RawSubstitution)
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: Annotations): KotlinType
|
||||
= RawTypeImpl(lowerBound.replaceAnnotations(newAnnotations).asSimpleType(), upperBound)
|
||||
override fun replaceAnnotations(newAnnotations: Annotations)
|
||||
= RawTypeImpl(lowerBound.replaceAnnotations(newAnnotations), upperBound.replaceAnnotations(newAnnotations))
|
||||
|
||||
override fun makeNullableAsSpecified(nullable: Boolean): KotlinType
|
||||
= RawTypeImpl(TypeUtils.makeNullableAsSpecified(lowerBound, nullable), TypeUtils.makeNullableAsSpecified(upperBound, nullable))
|
||||
override fun makeNullableAsSpecified(newNullability: Boolean)
|
||||
= RawTypeImpl(lowerBound.makeNullableAsSpecified(newNullability), upperBound.makeNullableAsSpecified(newNullability))
|
||||
|
||||
override fun render(renderer: DescriptorRenderer, options: DescriptorRendererOptions): String {
|
||||
fun onlyOutDiffers(first: String, second: String) = first == second.removePrefix("out ") || second == "*"
|
||||
|
||||
+10
-5
@@ -124,14 +124,14 @@ private fun KotlinType.enhanceInflexible(qualifiers: (Int) -> JavaTypeQualifiers
|
||||
|
||||
val newSubstitution = TypeConstructorSubstitution.create(typeConstructor, enhancedArguments)
|
||||
|
||||
val enhancedType = KotlinTypeImpl.create(
|
||||
val enhancedType = KotlinTypeFactory.simpleType(
|
||||
newAnnotations,
|
||||
typeConstructor,
|
||||
enhancedNullability,
|
||||
enhancedArguments,
|
||||
enhancedNullability,
|
||||
if (enhancedClassifier is ClassDescriptor)
|
||||
enhancedClassifier.getMemberScope(newSubstitution)
|
||||
else enhancedClassifier.getDefaultType().memberScope
|
||||
else enhancedClassifier.defaultType.memberScope
|
||||
)
|
||||
|
||||
val result = if (effectiveQualifiers.isNotNullTypeParameter) NotNullTypeParameter(enhancedType) else enhancedType
|
||||
@@ -213,8 +213,7 @@ private object EnhancedTypeAnnotationDescriptor : AnnotationDescriptor {
|
||||
override fun toString() = "[EnhancedType]"
|
||||
}
|
||||
|
||||
internal class NotNullTypeParameter(private val delegate: SimpleType) : CustomTypeVariable, DelegatingType(), SimpleType {
|
||||
override fun getDelegate(): KotlinType? = delegate
|
||||
internal class NotNullTypeParameter(override val delegate: SimpleType) : CustomTypeVariable, DelegatingSimpleType() {
|
||||
|
||||
override val isTypeVariable: Boolean
|
||||
get() = true
|
||||
@@ -240,4 +239,10 @@ internal class NotNullTypeParameter(private val delegate: SimpleType) : CustomTy
|
||||
|
||||
return NotNullTypeParameter(result)
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: Annotations) = NotNullTypeParameter(delegate.replaceAnnotations(newAnnotations))
|
||||
override fun makeNullableAsSpecified(newNullability: Boolean) = this
|
||||
|
||||
override val isError: Boolean
|
||||
get() = false
|
||||
}
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ open class JvmBuiltInsSettings(
|
||||
|
||||
//NOTE: can't reference anyType right away, because this is sometimes called when JvmBuiltIns are initializing
|
||||
val superTypes = listOf(object : WrappedType() {
|
||||
override fun unwrap() = moduleDescriptor.builtIns.anyType
|
||||
override val delegate: KotlinType get() = moduleDescriptor.builtIns.anyType
|
||||
})
|
||||
|
||||
val mockSerializableClass = ClassDescriptorImpl(
|
||||
|
||||
Reference in New Issue
Block a user