[FIR] Properly enhance raw Class type in java annotations

This commit is contained in:
Dmitriy Novozhilov
2022-01-19 15:09:56 +03:00
committed by TeamCityServer
parent 239a330ddd
commit 1a3841d66d
8 changed files with 97 additions and 4 deletions
@@ -99,7 +99,7 @@ private fun JavaType?.toConeTypeProjection(
is JavaClassifierType -> {
val lowerBound = toConeKotlinTypeForFlexibleBound(session, javaTypeParameterStack, mode, attributes)
if (mode == FirJavaTypeConversionMode.ANNOTATION_MEMBER) {
return lowerBound // TODO: `KClass<Any>` is wrong for raw `Class`
return lowerBound
}
val upperBound = toConeKotlinTypeForFlexibleBound(session, javaTypeParameterStack, mode, attributes, lowerBound)
if (isRaw) ConeRawType(lowerBound, upperBound) else ConeFlexibleType(lowerBound, upperBound)
@@ -171,8 +171,11 @@ private fun JavaClassifierType.toConeKotlinTypeForFlexibleBound(
lookupTag.takeIf { lowerBound == null && mode != FirJavaTypeConversionMode.TYPE_PARAMETER_BOUND }
?.toFirRegularClassSymbol(session)?.typeParameterSymbols
// Given `C<T : X>`, `C` -> `C<X>..C<*>?`.
typeParameterSymbols?.eraseToUpperBounds(session)
?: Array(classifier.typeParameters.size) { ConeStarProjection }
when (mode) {
FirJavaTypeConversionMode.ANNOTATION_MEMBER -> Array(classifier.typeParameters.size) { ConeStarProjection }
else -> typeParameterSymbols?.eraseToUpperBounds(session)
?: Array(classifier.typeParameters.size) { ConeStarProjection }
}
}
lookupTag != lowerBound?.lookupTag && typeArguments.isNotEmpty() -> {
val typeParameterSymbols =