FIR: Fix loading Java annotations with Class[]-typed methods

This commit is contained in:
Denis.Zharkov
2021-02-02 13:27:59 +03:00
parent 5a55d56320
commit d901ceb734
12 changed files with 50 additions and 19 deletions
@@ -125,7 +125,7 @@ internal fun JavaClassifierType.toFirResolvedTypeRef(
internal fun JavaType?.toConeKotlinTypeWithoutEnhancement(
session: FirSession,
javaTypeParameterStack: JavaTypeParameterStack,
forAnnotationValueParameter: Boolean = false,
forAnnotationMember: Boolean = false,
isForSupertypes: Boolean = false,
attributes: ConeAttributes = ConeAttributes.Empty
): ConeKotlinType {
@@ -134,7 +134,7 @@ internal fun JavaType?.toConeKotlinTypeWithoutEnhancement(
toConeKotlinTypeWithoutEnhancement(
session,
javaTypeParameterStack,
forAnnotationValueParameter = forAnnotationValueParameter,
forAnnotationMember = forAnnotationMember,
attributes = attributes
)
}
@@ -152,7 +152,7 @@ internal fun JavaType?.toConeKotlinTypeWithoutEnhancement(
toConeKotlinTypeWithoutEnhancement(
session,
javaTypeParameterStack,
forAnnotationValueParameter,
forAnnotationMember,
isForSupertypes,
attributes = attributes
)
@@ -225,7 +225,7 @@ private fun JavaClassifierType.toConeKotlinTypeWithoutEnhancement(
javaTypeParameterStack: JavaTypeParameterStack,
forTypeParameterBounds: Boolean = false,
isForSupertypes: Boolean = false,
forAnnotationValueParameter: Boolean = false,
forAnnotationMember: Boolean = false,
attributes: ConeAttributes = ConeAttributes.Empty
): ConeKotlinType {
val lowerBound = toConeKotlinTypeForFlexibleBound(
@@ -234,10 +234,10 @@ private fun JavaClassifierType.toConeKotlinTypeWithoutEnhancement(
isLowerBound = true,
forTypeParameterBounds,
isForSupertypes,
forAnnotationValueParameter = forAnnotationValueParameter,
forAnnotationMember = forAnnotationMember,
attributes = attributes
)
if (forAnnotationValueParameter) {
if (forAnnotationMember) {
return lowerBound
}
val upperBound =
@@ -248,7 +248,7 @@ private fun JavaClassifierType.toConeKotlinTypeWithoutEnhancement(
forTypeParameterBounds,
isForSupertypes,
lowerBound,
forAnnotationValueParameter = forAnnotationValueParameter,
forAnnotationMember = forAnnotationMember,
attributes = attributes
)
@@ -362,13 +362,13 @@ private fun JavaClassifierType.toConeKotlinTypeForFlexibleBound(
forTypeParameterBounds: Boolean,
isForSupertypes: Boolean,
lowerBound: ConeLookupTagBasedType? = null,
forAnnotationValueParameter: Boolean = false,
forAnnotationMember: Boolean = false,
attributes: ConeAttributes = ConeAttributes.Empty
): ConeLookupTagBasedType {
return when (val classifier = classifier) {
is JavaClass -> {
//val classId = classifier.classId!!
var classId = if (forAnnotationValueParameter) {
var classId = if (forAnnotationMember) {
JavaToKotlinClassMap.mapJavaToKotlinIncludingClassMapping(classifier.fqName!!)
} else {
JavaToKotlinClassMap.mapJavaToKotlin(classifier.fqName!!)
@@ -51,7 +51,7 @@ internal class EnhancementSignatureParts(
session: FirSession,
javaTypeEnhancementState: JavaTypeEnhancementState,
predefined: TypeEnhancementInfo? = null,
forAnnotationValueParameter: Boolean = false
forAnnotationMember: Boolean = false
): PartEnhancementResult {
val qualifiers = computeIndexedQualifiersForOverride(session, javaTypeEnhancementState)
@@ -64,7 +64,7 @@ internal class EnhancementSignatureParts(
val typeWithoutEnhancement = current.type.toConeKotlinTypeWithoutEnhancement(
session,
javaTypeParameterStack,
forAnnotationValueParameter,
forAnnotationMember,
attributes = attributesCache.getValue(current)
)
val containsFunctionN = typeWithoutEnhancement.contains {
@@ -319,7 +319,7 @@ class FirSignatureEnhancement(
session,
jsr305State,
predefinedEnhancementInfo?.parametersInfo?.getOrNull(index),
forAnnotationValueParameter = owner.classKind == ClassKind.ANNOTATION_CLASS
forAnnotationMember = owner.classKind == ClassKind.ANNOTATION_CLASS
)
val firResolvedTypeRef = signatureParts.type
val defaultValueExpression = when (val defaultValue = ownerParameter.getDefaultValueFromAnnotation()) {
@@ -345,7 +345,10 @@ class FirSignatureEnhancement(
if (owner is FirJavaField) AnnotationQualifierApplicabilityType.FIELD
else AnnotationQualifierApplicabilityType.METHOD_RETURN_TYPE,
typeInSignature = TypeInSignature.Return
).enhance(session, jsr305State, predefinedEnhancementInfo?.returnTypeInfo)
).enhance(
session, jsr305State, predefinedEnhancementInfo?.returnTypeInfo,
forAnnotationMember = this.owner.classKind == ClassKind.ANNOTATION_CLASS
)
return signatureParts.type
}