Rollback parameter descriptor propagation to CapturedTypeConstructor
This commit is contained in:
+1
-1
@@ -320,7 +320,7 @@ class ConstraintSystemBuilderImpl : ConstraintSystem.Builder {
|
||||
else {
|
||||
constrainingTypeProjection
|
||||
}
|
||||
val capturedType = createCapturedType(typeProjection, typeVariable.originalTypeParameter)
|
||||
val capturedType = createCapturedType(typeProjection)
|
||||
addBound(typeVariable, capturedType, EXACT_BOUND, constraintContext)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -87,8 +87,8 @@ private fun ConstraintSystemBuilderImpl.generateNewBound(bound: Bound, substitut
|
||||
|
||||
val substitutedType = when (substitution.kind) {
|
||||
EXACT_BOUND -> substitution.constrainingType
|
||||
UPPER_BOUND -> CapturedType(TypeProjectionImpl(Variance.OUT_VARIANCE, substitution.constrainingType), substitution.typeVariable.originalTypeParameter)
|
||||
LOWER_BOUND -> CapturedType(TypeProjectionImpl(Variance.IN_VARIANCE, substitution.constrainingType), substitution.typeVariable.originalTypeParameter)
|
||||
UPPER_BOUND -> CapturedType(TypeProjectionImpl(Variance.OUT_VARIANCE, substitution.constrainingType))
|
||||
LOWER_BOUND -> CapturedType(TypeProjectionImpl(Variance.IN_VARIANCE, substitution.constrainingType))
|
||||
}
|
||||
|
||||
val newTypeProjection = TypeProjectionImpl(substitutedType)
|
||||
|
||||
+1
-1
@@ -84,7 +84,7 @@ class CapturedTypeApproximationTest() : KotlinLiteFixture() {
|
||||
fun createTestSubstitutor(testSubstitution: Map<TypeParameterDescriptor, TypeProjection>): TypeSubstitutor {
|
||||
val substitutionContext = testSubstitution.map {
|
||||
val (typeParameter, typeProjection) = it
|
||||
typeParameter.typeConstructor to TypeProjectionImpl(createCapturedType(typeProjection, typeParameter))
|
||||
typeParameter.typeConstructor to TypeProjectionImpl(createCapturedType(typeProjection))
|
||||
}.toMap()
|
||||
return TypeSubstitutor.create(substitutionContext)
|
||||
}
|
||||
|
||||
+7
-9
@@ -25,8 +25,7 @@ import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE
|
||||
import org.jetbrains.kotlin.types.typeUtil.builtIns
|
||||
|
||||
class CapturedTypeConstructor(
|
||||
val typeProjection: TypeProjection,
|
||||
val typeParameterDescriptor: TypeParameterDescriptor
|
||||
val typeProjection: TypeProjection
|
||||
): TypeConstructor {
|
||||
init {
|
||||
assert(typeProjection.projectionKind != Variance.INVARIANT) {
|
||||
@@ -48,7 +47,7 @@ class CapturedTypeConstructor(
|
||||
|
||||
override fun isDenotable() = false
|
||||
|
||||
override fun getDeclarationDescriptor() = typeParameterDescriptor
|
||||
override fun getDeclarationDescriptor() = null
|
||||
|
||||
override fun getAnnotations() = Annotations.EMPTY
|
||||
|
||||
@@ -58,14 +57,13 @@ class CapturedTypeConstructor(
|
||||
}
|
||||
|
||||
class CapturedType(
|
||||
private val typeProjection: TypeProjection,
|
||||
private val typeParameterDescriptor: TypeParameterDescriptor
|
||||
private val typeProjection: TypeProjection
|
||||
): DelegatingType(), SubtypingRepresentatives {
|
||||
|
||||
private val delegateType = run {
|
||||
val scope = ErrorUtils.createErrorScope(
|
||||
"No member resolution should be done on captured type, it used only during constraint system resolution", true)
|
||||
KotlinTypeImpl.create(Annotations.EMPTY, CapturedTypeConstructor(typeProjection, typeParameterDescriptor), false, listOf(), scope)
|
||||
KotlinTypeImpl.create(Annotations.EMPTY, CapturedTypeConstructor(typeProjection), false, listOf(), scope)
|
||||
}
|
||||
|
||||
override fun getDelegate(): KotlinType = delegateType
|
||||
@@ -95,8 +93,8 @@ class CapturedType(
|
||||
override fun toString() = "Captured($typeProjection)"
|
||||
}
|
||||
|
||||
fun createCapturedType(typeProjection: TypeProjection, typeParameterDescriptor: TypeParameterDescriptor): KotlinType
|
||||
= CapturedType(typeProjection, typeParameterDescriptor)
|
||||
fun createCapturedType(typeProjection: TypeProjection): KotlinType
|
||||
= CapturedType(typeProjection)
|
||||
|
||||
fun KotlinType.isCaptured(): Boolean = constructor is CapturedTypeConstructor
|
||||
|
||||
@@ -128,5 +126,5 @@ private fun TypeProjection.createCapturedIfNeeded(typeParameterDescriptor: TypeP
|
||||
TypeProjectionImpl(this@createCapturedIfNeeded.type)
|
||||
}
|
||||
|
||||
return TypeProjectionImpl(createCapturedType(this, typeParameterDescriptor))
|
||||
return TypeProjectionImpl(createCapturedType(this))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user