Prepare type enhancement for codeanalysis annotations
- Rename NullabilityQualifierWithApplicability -> JavaDefaultQualifiers - Use JavaDefaultQualifiers instead of JavaTypeQualifiers for default qualifiers This change is intended to make code more clear and to allow add some additional parameters specific for default qualifiers needed for codeanalysis annotations
This commit is contained in:
committed by
Victor Petukhov
parent
e27501497b
commit
fa2578c795
+6
-5
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
|
||||
import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType
|
||||
import org.jetbrains.kotlin.load.java.JavaDefaultQualifiers
|
||||
import org.jetbrains.kotlin.load.java.MUTABLE_ANNOTATIONS
|
||||
import org.jetbrains.kotlin.load.java.READ_ONLY_ANNOTATIONS
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
|
||||
@@ -180,7 +181,7 @@ internal class EnhancementSignatureParts(
|
||||
|
||||
private fun FirTypeRef?.extractQualifiersFromAnnotations(
|
||||
isHeadTypeConstructor: Boolean,
|
||||
defaultQualifiersForType: JavaTypeQualifiers?,
|
||||
defaultQualifiersForType: JavaDefaultQualifiers?,
|
||||
jsr305State: Jsr305State
|
||||
): JavaTypeQualifiers {
|
||||
val composedAnnotation =
|
||||
@@ -204,10 +205,10 @@ internal class EnhancementSignatureParts(
|
||||
defaultQualifiersForType
|
||||
|
||||
val nullabilityInfo = composedAnnotation.extractNullability(typeQualifierResolver, jsr305State)
|
||||
?: defaultTypeQualifier?.nullability?.let { nullability ->
|
||||
?: defaultTypeQualifier?.nullabilityQualifier?.let { nullability ->
|
||||
NullabilityQualifierWithMigrationStatus(
|
||||
nullability,
|
||||
defaultTypeQualifier.isNullabilityQualifierForWarning
|
||||
nullability.qualifier,
|
||||
nullability.isForWarningOnly
|
||||
)
|
||||
}
|
||||
|
||||
@@ -233,7 +234,7 @@ internal class EnhancementSignatureParts(
|
||||
private fun FirTypeRef?.computeQualifiersForOverride(
|
||||
session: FirSession,
|
||||
fromSupertypes: Collection<FirTypeRef>,
|
||||
defaultQualifiersForType: JavaTypeQualifiers?,
|
||||
defaultQualifiersForType: JavaDefaultQualifiers?,
|
||||
isHeadTypeConstructor: Boolean,
|
||||
jsr305State: Jsr305State
|
||||
): JavaTypeQualifiers {
|
||||
|
||||
+5
-3
@@ -63,15 +63,17 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
|
||||
return resolveTypeQualifierNickname(annotationClass)
|
||||
}
|
||||
|
||||
fun resolveQualifierBuiltInDefaultAnnotation(annotationCall: FirAnnotationCall): NullabilityQualifierWithApplicability? {
|
||||
fun resolveQualifierBuiltInDefaultAnnotation(annotationCall: FirAnnotationCall): JavaDefaultQualifiers? {
|
||||
if (jsr305State.disabled) {
|
||||
return null
|
||||
}
|
||||
|
||||
val annotationClassId = annotationCall.classId
|
||||
return BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATION_IDS[annotationClassId]?.let { (qualifier, applicability) ->
|
||||
return BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATION_IDS[annotationClassId]?.let { qualifierForDefaultingAnnotation ->
|
||||
val state = resolveJsr305ReportLevel(annotationCall).takeIf { it != ReportLevel.IGNORE } ?: return null
|
||||
return NullabilityQualifierWithApplicability(qualifier.copy(isForWarningOnly = state.isWarning), applicability)
|
||||
return qualifierForDefaultingAnnotation.copy(
|
||||
nullabilityQualifier = qualifierForDefaultingAnnotation.nullabilityQualifier.copy(isForWarningOnly = state.isWarning)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+10
-10
@@ -26,7 +26,7 @@ fun extractDefaultNullabilityQualifier(
|
||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||
jsr305State: Jsr305State,
|
||||
annotationCall: FirAnnotationCall
|
||||
): NullabilityQualifierWithApplicability? {
|
||||
): JavaDefaultQualifiers? {
|
||||
typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationCall)?.let { return it }
|
||||
|
||||
val (typeQualifier, applicability) =
|
||||
@@ -45,7 +45,7 @@ fun extractDefaultNullabilityQualifier(
|
||||
typeQualifierResolver, jsr305State
|
||||
)?.copy(isForWarningOnly = jsr305ReportLevel.isWarning) ?: return null
|
||||
|
||||
return NullabilityQualifierWithApplicability(nullabilityQualifier, applicability)
|
||||
return JavaDefaultQualifiers(nullabilityQualifier, applicability)
|
||||
}
|
||||
|
||||
fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
|
||||
@@ -55,7 +55,7 @@ fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
|
||||
): JavaTypeQualifiersByElementType? {
|
||||
if (typeQualifierResolver.disabled) return defaultTypeQualifiers
|
||||
|
||||
val nullabilityQualifiersWithApplicability =
|
||||
val defaultQualifiers =
|
||||
additionalAnnotations.mapNotNull { annotationCall ->
|
||||
extractDefaultNullabilityQualifier(
|
||||
typeQualifierResolver,
|
||||
@@ -64,21 +64,21 @@ fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
|
||||
)
|
||||
}
|
||||
|
||||
if (nullabilityQualifiersWithApplicability.isEmpty()) return defaultTypeQualifiers
|
||||
if (defaultQualifiers.isEmpty()) return defaultTypeQualifiers
|
||||
|
||||
val nullabilityQualifiersByType =
|
||||
defaultTypeQualifiers?.nullabilityQualifiers?.let(::QualifierByApplicabilityType)
|
||||
val defaultQualifiersByType =
|
||||
defaultTypeQualifiers?.defaultQualifiers?.let(::QualifierByApplicabilityType)
|
||||
?: QualifierByApplicabilityType(AnnotationQualifierApplicabilityType::class.java)
|
||||
|
||||
var wasUpdate = false
|
||||
for ((nullability, applicableTo) in nullabilityQualifiersWithApplicability) {
|
||||
for (applicabilityType in applicableTo) {
|
||||
nullabilityQualifiersByType[applicabilityType] = nullability
|
||||
for (qualifier in defaultQualifiers) {
|
||||
for (applicabilityType in qualifier.qualifierApplicabilityTypes) {
|
||||
defaultQualifiersByType[applicabilityType] = qualifier
|
||||
wasUpdate = true
|
||||
}
|
||||
}
|
||||
|
||||
return if (!wasUpdate) defaultTypeQualifiers else JavaTypeQualifiersByElementType(nullabilityQualifiersByType)
|
||||
return if (!wasUpdate) defaultTypeQualifiers else JavaTypeQualifiersByElementType(defaultQualifiersByType)
|
||||
}
|
||||
|
||||
fun FirJavaEnhancementContext.copyWithNewDefaultTypeQualifiers(
|
||||
|
||||
@@ -13,6 +13,14 @@ import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
||||
@@ -25,6 +33,7 @@ import org.jetbrains.kotlin.fir.typeContext
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
|
||||
import org.jetbrains.kotlin.load.java.JavaDefaultQualifiers
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_NULL_FQ_NAME
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_VALUE_FQ_NAME
|
||||
import org.jetbrains.kotlin.load.java.descriptors.AnnotationDefaultValue
|
||||
@@ -243,7 +252,7 @@ private fun ConeClassifierLookupTag.enhanceMutability(
|
||||
|
||||
internal data class TypeAndDefaultQualifiers(
|
||||
val type: FirTypeRef?, // null denotes '*' here
|
||||
val defaultQualifiers: JavaTypeQualifiers?
|
||||
val defaultQualifiers: JavaDefaultQualifiers?
|
||||
)
|
||||
|
||||
internal fun FirTypeRef.typeArguments(): List<FirTypeProjection> =
|
||||
|
||||
Reference in New Issue
Block a user