FE: slowly refactor extractQualifiersFromAnnotations 3
This commit is contained in:
+1
-3
@@ -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")
|
||||||
|
|||||||
+13
-26
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user