[FIR] Do not enhance nullability for annotation interface field types.

Java annotation interface fields are constant declarations that can
have any Java type and are not restricted in the same way that
method return types are for annotation interfaces.

#KT-65482 Fixed
This commit is contained in:
Mads Ager
2024-02-02 12:11:03 +01:00
committed by Space Team
parent f5d0a5b92d
commit 79eee6de4f
12 changed files with 99 additions and 3 deletions
@@ -632,10 +632,19 @@ class FirSignatureEnhancement(
defaultQualifiers: JavaTypeQualifiersByElementType?,
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
): FirResolvedTypeRef {
val containerApplicabilityType = if (owner is FirJavaField)
val containerApplicabilityType = if (owner is FirJavaField) {
AnnotationQualifierApplicabilityType.FIELD
else
} else {
AnnotationQualifierApplicabilityType.METHOD_RETURN_TYPE
}
val forAnnotationMember = if (owner is FirJavaField) {
// Fields in annotation interfaces are constant declarations that can have any Java type.
// For example: public @interface MyApi { Integer field = -1; }
// Therefore, for such annotation interface fields, we use default Java type enhancement.
false
} else {
this.owner.classKind == ClassKind.ANNOTATION_CLASS
}
return owner.enhance(
overriddenMembers,
owner,
@@ -644,7 +653,7 @@ class FirSignatureEnhancement(
containerApplicabilityType,
TypeInSignature.Return,
predefinedEnhancementInfo?.returnTypeInfo,
forAnnotationMember = this.owner.classKind == ClassKind.ANNOTATION_CLASS
forAnnotationMember = forAnnotationMember
)
}