FE: slowly refactor extractQualifiersFromAnnotations 3

This commit is contained in:
pyos
2021-08-10 23:24:42 +02:00
committed by teamcityserver
parent 5c8d3180f7
commit b31925e6c9
2 changed files with 14 additions and 29 deletions
@@ -14,9 +14,7 @@ data class JavaDefaultQualifiers(
val qualifierApplicabilityTypes: Collection<AnnotationQualifierApplicabilityType>, val qualifierApplicabilityTypes: Collection<AnnotationQualifierApplicabilityType>,
val affectsTypeParameterBasedTypes: Boolean = nullabilityQualifier.qualifier == NullabilityQualifier.NOT_NULL, val affectsTypeParameterBasedTypes: Boolean = nullabilityQualifier.qualifier == NullabilityQualifier.NOT_NULL,
val affectsStarProjection: Boolean = affectsTypeParameterBasedTypes val affectsStarProjection: Boolean = affectsTypeParameterBasedTypes
) { )
val makesTypeParameterNotNull get() = nullabilityQualifier.qualifier == NullabilityQualifier.NOT_NULL && affectsTypeParameterBasedTypes
}
val TYPE_QUALIFIER_NICKNAME_FQNAME = FqName("javax.annotation.meta.TypeQualifierNickname") val TYPE_QUALIFIER_NICKNAME_FQNAME = FqName("javax.annotation.meta.TypeQualifierNickname")
val TYPE_QUALIFIER_FQNAME = FqName("javax.annotation.meta.TypeQualifier") val TYPE_QUALIFIER_FQNAME = FqName("javax.annotation.meta.TypeQualifier")
@@ -318,34 +318,21 @@ private class SignatureParts(
?: defaultTypeQualifier?.nullabilityQualifier ?: defaultTypeQualifier?.nullabilityQualifier
val isNotNullTypeParameter = val isNotNullTypeParameter =
referencedParameterBoundsNullability?.qualifier == NullabilityQualifier.NOT_NULL || referencedParameterBoundsNullability?.qualifier == NullabilityQualifier.NOT_NULL ||
(typeOrBound.isTypeParameter() && defaultTypeQualifier?.makesTypeParameterNotNull == true) (typeOrBound.isTypeParameter() && defaultTypeQualifier?.nullabilityQualifier?.qualifier == NullabilityQualifier.NOT_NULL)
val nullabilityInfo = computeNullabilityInfoInTheAbsenceOfExplicitAnnotation(defaultNullability, typeParameterForArgument) // We should also enhance this type to satisfy the bound of the type parameter it is instantiating:
// for C<T extends @NotNull V>, C<X!> becomes C<X!!> regardless of the above.
return JavaTypeQualifiers( val substitutedParameterBoundsNullability = typeParameterForArgument?.boundsNullability()
nullabilityInfo?.qualifier, annotationsMutability, val result = when {
isNotNullTypeParameter, substitutedParameterBoundsNullability == null -> defaultNullability
nullabilityInfo?.isForWarningOnly == true defaultNullability == null ->
) if (substitutedParameterBoundsNullability.qualifier == NullabilityQualifier.NULLABLE)
} substitutedParameterBoundsNullability.copy(qualifier = NullabilityQualifier.FORCE_FLEXIBILITY)
else
private fun computeNullabilityInfoInTheAbsenceOfExplicitAnnotation( substitutedParameterBoundsNullability
result: NullabilityQualifierWithMigrationStatus?, else -> mostSpecific(substitutedParameterBoundsNullability, defaultNullability)
typeParameterForArgument: TypeParameterDescriptor?
): NullabilityQualifierWithMigrationStatus? {
val boundsFromTypeParameterForArgument = typeParameterForArgument?.boundsNullability() ?: return result
if (result == null && boundsFromTypeParameterForArgument.qualifier == NullabilityQualifier.NULLABLE) {
return NullabilityQualifierWithMigrationStatus(
NullabilityQualifier.FORCE_FLEXIBILITY,
boundsFromTypeParameterForArgument.isForWarningOnly
)
} }
return JavaTypeQualifiers(result?.qualifier, annotationsMutability, isNotNullTypeParameter, result?.isForWarningOnly == true)
if (result == null) return boundsFromTypeParameterForArgument
return mostSpecific(boundsFromTypeParameterForArgument, result)
} }
private fun mostSpecific( private fun mostSpecific(