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