Rollback parameter descriptor propagation to CapturedTypeConstructor

This commit is contained in:
Michael Bogdanov
2016-01-13 12:47:34 +03:00
parent 6e5a2208c0
commit 2228cb6a9a
4 changed files with 11 additions and 13 deletions
@@ -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)
}
@@ -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)
@@ -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)
}
@@ -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))
}