Concatenate annotations in type alias expansion.

This commit is contained in:
Dmitry Petrov
2016-10-11 17:57:30 +03:00
parent 7a41d13b41
commit c6350e1afb
5 changed files with 71 additions and 12 deletions
@@ -19,6 +19,8 @@ package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
import org.jetbrains.kotlin.descriptors.annotations.CompositeAnnotations
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.typeUtil.containsTypeAliasParameters
@@ -49,20 +51,24 @@ class TypeAliasExpander(
"Type alias expansion: result for ${typeAliasExpansion.descriptor} is ${expandedProjection.projectionKind}, should be invariant"
}
return if (withAbbreviatedType) {
val abbreviatedType = KotlinTypeFactory.simpleType(annotations,
typeAliasExpansion.descriptor.typeConstructor,
typeAliasExpansion.arguments,
originalProjection.type.isMarkedNullable,
MemberScope.Empty)
val expandedTypeWithExtraAnnotations = expandedType.replace(
newAnnotations = CompositeAnnotations(listOf(annotations, expandedType.annotations)))
expandedType.withAbbreviation(abbreviatedType)
}
else {
expandedType
}
return if (withAbbreviatedType)
expandedTypeWithExtraAnnotations.withAbbreviation(typeAliasExpansion.createAbbreviation(originalProjection, annotations))
else
expandedTypeWithExtraAnnotations
}
private fun TypeAliasExpansion.createAbbreviation(originalProjection: TypeProjection, annotations: Annotations) =
KotlinTypeFactory.simpleType(
annotations,
descriptor.typeConstructor,
arguments,
originalProjection.type.isMarkedNullable,
MemberScope.Empty
)
private fun expandTypeProjection(
originalProjection: TypeProjection,
typeAliasExpansion: TypeAliasExpansion,