Support enhancement of type parameter's bound for all nullability annotations

This commit is contained in:
Victor Petukhov
2020-12-08 15:56:39 +03:00
parent c91301d04c
commit 276498793f
2 changed files with 11 additions and 23 deletions
@@ -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)
@@ -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 {