Support enhancement of type parameter's bound for all nullability annotations
This commit is contained in:
@@ -173,10 +173,7 @@ private fun LazyJavaResolverContext.extractDefaultNullabilityQualifier(
|
||||
}
|
||||
|
||||
val nullabilityQualifier =
|
||||
components
|
||||
.signatureEnhancement
|
||||
.extractNullability(typeQualifier, onlyForJspecify = false)
|
||||
?.copy(isForWarningOnly = jsr305State.isWarning)
|
||||
components.signatureEnhancement.extractNullability(typeQualifier)?.copy(isForWarningOnly = jsr305State.isWarning)
|
||||
?: return null
|
||||
|
||||
return JavaDefaultQualifiers(nullabilityQualifier, applicability)
|
||||
|
||||
+10
-19
@@ -65,11 +65,8 @@ class SignatureEnhancement(
|
||||
}
|
||||
}
|
||||
|
||||
fun extractNullability(
|
||||
annotationDescriptor: AnnotationDescriptor,
|
||||
onlyForJspecify: Boolean
|
||||
): NullabilityQualifierWithMigrationStatus? {
|
||||
extractNullabilityFromKnownAnnotations(annotationDescriptor, onlyForJspecify)?.let { return it }
|
||||
fun extractNullability(annotationDescriptor: AnnotationDescriptor): NullabilityQualifierWithMigrationStatus? {
|
||||
extractNullabilityFromKnownAnnotations(annotationDescriptor)?.let { return it }
|
||||
|
||||
val typeQualifierAnnotation =
|
||||
annotationTypeQualifierResolver.resolveTypeQualifierAnnotation(annotationDescriptor)
|
||||
@@ -78,28 +75,25 @@ class SignatureEnhancement(
|
||||
val jsr305State = annotationTypeQualifierResolver.resolveJsr305AnnotationState(annotationDescriptor)
|
||||
if (jsr305State.isIgnore) return null
|
||||
|
||||
return extractNullabilityFromKnownAnnotations(
|
||||
typeQualifierAnnotation, onlyForJspecify
|
||||
)?.copy(isForWarningOnly = jsr305State.isWarning)
|
||||
return extractNullabilityFromKnownAnnotations(typeQualifierAnnotation)?.copy(isForWarningOnly = jsr305State.isWarning)
|
||||
}
|
||||
|
||||
private fun extractNullabilityFromKnownAnnotations(
|
||||
annotationDescriptor: AnnotationDescriptor,
|
||||
onlyForJspecify: Boolean
|
||||
annotationDescriptor: AnnotationDescriptor
|
||||
): NullabilityQualifierWithMigrationStatus? {
|
||||
val annotationFqName = annotationDescriptor.fqName ?: return null
|
||||
|
||||
val migrationStatus =
|
||||
jspecifyMigrationStatus(annotationFqName)
|
||||
?: (if (!onlyForJspecify) commonMigrationStatus(annotationFqName, annotationDescriptor) else null)
|
||||
?: commonMigrationStatus(annotationFqName, annotationDescriptor)
|
||||
?: return null
|
||||
|
||||
return if (!migrationStatus.isForWarningOnly
|
||||
&& annotationDescriptor is PossiblyExternalAnnotationDescriptor
|
||||
&& annotationDescriptor.isIdeExternalAnnotation
|
||||
)
|
||||
) {
|
||||
migrationStatus.copy(isForWarningOnly = true)
|
||||
else migrationStatus
|
||||
} else migrationStatus
|
||||
}
|
||||
|
||||
private fun jspecifyMigrationStatus(
|
||||
@@ -251,15 +245,12 @@ class SignatureEnhancement(
|
||||
}
|
||||
}
|
||||
|
||||
private fun ValueParameterDescriptor.hasDefaultValueInAnnotation(type: KotlinType): Boolean {
|
||||
val defaultValue = getDefaultValueFromAnnotation()
|
||||
|
||||
return when (defaultValue) {
|
||||
private fun ValueParameterDescriptor.hasDefaultValueInAnnotation(type: KotlinType) =
|
||||
when (val defaultValue = getDefaultValueFromAnnotation()) {
|
||||
is StringDefaultValue -> type.lexicalCastFrom(defaultValue.value) != null
|
||||
NullDefaultValue -> TypeUtils.acceptsNullable(type)
|
||||
null -> declaresDefaultValue()
|
||||
} && overriddenDescriptors.isEmpty()
|
||||
}
|
||||
|
||||
private inner class SignatureParts(
|
||||
private val typeContainer: Annotated?,
|
||||
@@ -438,7 +429,7 @@ class SignatureEnhancement(
|
||||
}
|
||||
|
||||
private fun Annotations.extractNullability(): NullabilityQualifierWithMigrationStatus? =
|
||||
this.firstNotNullResult { extractNullability(it, onlyForJspecify = typeParameterBounds) }
|
||||
this.firstNotNullResult { extractNullability(it) }
|
||||
|
||||
private fun computeIndexedQualifiersForOverride(): (Int) -> JavaTypeQualifiers {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user