Rename Jsr305State -> JavaTypeEnhancementState
Also, rename some of the properties It's needed to store status for codeanalysis annotation in that class
This commit is contained in:
committed by
Victor Petukhov
parent
2f04a1505d
commit
6c37574fce
+13
-13
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.load.java.structure.JavaWildcardType
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.utils.Jsr305State
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
internal class EnhancementSignatureParts(
|
||||
@@ -47,11 +47,11 @@ internal class EnhancementSignatureParts(
|
||||
|
||||
internal fun enhance(
|
||||
session: FirSession,
|
||||
jsr305State: Jsr305State,
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState,
|
||||
predefined: TypeEnhancementInfo? = null,
|
||||
forAnnotationValueParameter: Boolean = false
|
||||
): PartEnhancementResult {
|
||||
val qualifiers = computeIndexedQualifiersForOverride(session, jsr305State)
|
||||
val qualifiers = computeIndexedQualifiersForOverride(session, javaTypeEnhancementState)
|
||||
|
||||
val qualifiersWithPredefined = predefined?.let {
|
||||
IndexedJavaTypeQualifiers(qualifiers.size) { index ->
|
||||
@@ -92,13 +92,13 @@ internal class EnhancementSignatureParts(
|
||||
|
||||
private fun FirTypeRef.toIndexed(
|
||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||
jsr305State: Jsr305State,
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState,
|
||||
context: FirJavaEnhancementContext
|
||||
): List<TypeAndDefaultQualifiers> {
|
||||
val list = ArrayList<TypeAndDefaultQualifiers>(1)
|
||||
|
||||
fun add(type: FirTypeRef?) {
|
||||
val c = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, type?.annotations.orEmpty())
|
||||
val c = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, javaTypeEnhancementState, type?.annotations.orEmpty())
|
||||
|
||||
list.add(
|
||||
TypeAndDefaultQualifiers(
|
||||
@@ -182,7 +182,7 @@ internal class EnhancementSignatureParts(
|
||||
private fun FirTypeRef?.extractQualifiersFromAnnotations(
|
||||
isHeadTypeConstructor: Boolean,
|
||||
defaultQualifiersForType: JavaDefaultQualifiers?,
|
||||
jsr305State: Jsr305State
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState
|
||||
): JavaTypeQualifiers {
|
||||
val composedAnnotation =
|
||||
if (isHeadTypeConstructor && typeContainer != null)
|
||||
@@ -204,7 +204,7 @@ internal class EnhancementSignatureParts(
|
||||
else
|
||||
defaultQualifiersForType
|
||||
|
||||
val nullabilityInfo = composedAnnotation.extractNullability(typeQualifierResolver, jsr305State)
|
||||
val nullabilityInfo = composedAnnotation.extractNullability(typeQualifierResolver, javaTypeEnhancementState)
|
||||
?: defaultTypeQualifier?.nullabilityQualifier?.let { nullability ->
|
||||
NullabilityQualifierWithMigrationStatus(
|
||||
nullability.qualifier,
|
||||
@@ -236,7 +236,7 @@ internal class EnhancementSignatureParts(
|
||||
fromSupertypes: Collection<FirTypeRef>,
|
||||
defaultQualifiersForType: JavaDefaultQualifiers?,
|
||||
isHeadTypeConstructor: Boolean,
|
||||
jsr305State: Jsr305State
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState
|
||||
): JavaTypeQualifiers {
|
||||
val superQualifiers = fromSupertypes.map { it.extractQualifiers(session) }
|
||||
val mutabilityFromSupertypes = superQualifiers.mapNotNull { it.mutability }.toSet()
|
||||
@@ -245,7 +245,7 @@ internal class EnhancementSignatureParts(
|
||||
.mapNotNull { it.extractQualifiers(session).nullability }
|
||||
.toSet()
|
||||
|
||||
val own = extractQualifiersFromAnnotations(isHeadTypeConstructor, defaultQualifiersForType, jsr305State)
|
||||
val own = extractQualifiersFromAnnotations(isHeadTypeConstructor, defaultQualifiersForType, javaTypeEnhancementState)
|
||||
val ownNullability = own.takeIf { !it.isNullabilityQualifierForWarning }?.nullability
|
||||
val ownNullabilityForWarning = own.nullability
|
||||
|
||||
@@ -279,9 +279,9 @@ internal class EnhancementSignatureParts(
|
||||
)
|
||||
}
|
||||
|
||||
private fun computeIndexedQualifiersForOverride(session: FirSession, jsr305State: Jsr305State): IndexedJavaTypeQualifiers {
|
||||
val indexedFromSupertypes = fromOverridden.map { it.toIndexed(typeQualifierResolver, jsr305State, context) }
|
||||
val indexedThisType = current.toIndexed(typeQualifierResolver, jsr305State, context)
|
||||
private fun computeIndexedQualifiersForOverride(session: FirSession, javaTypeEnhancementState: JavaTypeEnhancementState): IndexedJavaTypeQualifiers {
|
||||
val indexedFromSupertypes = fromOverridden.map { it.toIndexed(typeQualifierResolver, javaTypeEnhancementState, context) }
|
||||
val indexedThisType = current.toIndexed(typeQualifierResolver, javaTypeEnhancementState, context)
|
||||
|
||||
// The covariant case may be hard, e.g. in the superclass the return may be Super<T>, but in the subclass it may be Derived, which
|
||||
// is declared to extend Super<T>, and propagating data here is highly non-trivial, so we only look at the head type constructor
|
||||
@@ -299,7 +299,7 @@ internal class EnhancementSignatureParts(
|
||||
val verticalSlice = indexedFromSupertypes.mapNotNull { it.getOrNull(index)?.type }
|
||||
|
||||
// Only the head type constructor is safely co-variant
|
||||
type.computeQualifiersForOverride(session, verticalSlice, defaultQualifiers, isHeadTypeConstructor, jsr305State)
|
||||
type.computeQualifiersForOverride(session, verticalSlice, defaultQualifiers, isHeadTypeConstructor, javaTypeEnhancementState)
|
||||
}
|
||||
|
||||
return IndexedJavaTypeQualifiers(computedResult)
|
||||
|
||||
+9
-9
@@ -14,11 +14,11 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.load.java.*
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.utils.Jsr305State
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
import org.jetbrains.kotlin.utils.ReportLevel
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||
|
||||
class FirAnnotationTypeQualifierResolver(private val session: FirSession, private val jsr305State: Jsr305State) {
|
||||
class FirAnnotationTypeQualifierResolver(private val session: FirSession, private val javaTypeEnhancementState: JavaTypeEnhancementState) {
|
||||
|
||||
class TypeQualifierWithApplicability(
|
||||
private val typeQualifier: FirAnnotationCall,
|
||||
@@ -53,7 +53,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
|
||||
get() = (coneClassLikeType?.lookupTag?.toSymbol(this@FirAnnotationTypeQualifierResolver.session) as? FirRegularClassSymbol)?.fir
|
||||
|
||||
fun resolveTypeQualifierAnnotation(annotationCall: FirAnnotationCall): FirAnnotationCall? {
|
||||
if (jsr305State.disabled) {
|
||||
if (javaTypeEnhancementState.disabledJsr305) {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
|
||||
}
|
||||
|
||||
fun resolveQualifierBuiltInDefaultAnnotation(annotationCall: FirAnnotationCall): JavaDefaultQualifiers? {
|
||||
if (jsr305State.disabled) {
|
||||
if (javaTypeEnhancementState.disabledJsr305) {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
|
||||
}
|
||||
|
||||
fun resolveTypeQualifierDefaultAnnotation(annotationCall: FirAnnotationCall): TypeQualifierWithApplicability? {
|
||||
if (jsr305State.disabled) {
|
||||
if (javaTypeEnhancementState.disabledJsr305) {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -110,11 +110,11 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
|
||||
|
||||
fun resolveJsr305ReportLevel(annotationCall: FirAnnotationCall): ReportLevel {
|
||||
resolveJsr305CustomLevel(annotationCall)?.let { return it }
|
||||
return jsr305State.global
|
||||
return javaTypeEnhancementState.globalJsr305Level
|
||||
}
|
||||
|
||||
fun resolveJsr305CustomLevel(annotationCall: FirAnnotationCall): ReportLevel? {
|
||||
jsr305State.user[annotationCall.classId?.run { packageFqName.asString() + "." + relativeClassName.asString() }]?.let { return it }
|
||||
javaTypeEnhancementState.userDefinedLevelForSpecificJsr305Annotation[annotationCall.classId?.run { packageFqName.asString() + "." + relativeClassName.asString() }]?.let { return it }
|
||||
return annotationCall.resolvedClass?.migrationAnnotationStatus()
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
|
||||
it.classId == MIGRATION_ANNOTATION_ID
|
||||
}?.arguments?.firstOrNull()?.toResolvedCallableSymbol()?.callableId?.callableName ?: return null
|
||||
|
||||
jsr305State.migration?.let { return it }
|
||||
javaTypeEnhancementState.migrationLevelForJsr305?.let { return it }
|
||||
|
||||
return when (enumEntryName.asString()) {
|
||||
"STRICT" -> ReportLevel.STRICT
|
||||
@@ -147,7 +147,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
|
||||
)
|
||||
}
|
||||
|
||||
val disabled: Boolean = jsr305State.disabled
|
||||
val disabled: Boolean = javaTypeEnhancementState.disabledJsr305
|
||||
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.java.enhancement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.load.java.*
|
||||
import org.jetbrains.kotlin.utils.Jsr305State
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
|
||||
class FirJavaEnhancementContext private constructor(
|
||||
val session: FirSession,
|
||||
@@ -24,7 +24,7 @@ class FirJavaEnhancementContext private constructor(
|
||||
|
||||
fun extractDefaultNullabilityQualifier(
|
||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||
jsr305State: Jsr305State,
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState,
|
||||
annotationCall: FirAnnotationCall
|
||||
): JavaDefaultQualifiers? {
|
||||
typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationCall)?.let { return it }
|
||||
@@ -42,7 +42,7 @@ fun extractDefaultNullabilityQualifier(
|
||||
}
|
||||
|
||||
val nullabilityQualifier = typeQualifier.extractNullability(
|
||||
typeQualifierResolver, jsr305State
|
||||
typeQualifierResolver, javaTypeEnhancementState
|
||||
)?.copy(isForWarningOnly = jsr305ReportLevel.isWarning) ?: return null
|
||||
|
||||
return JavaDefaultQualifiers(nullabilityQualifier, applicability)
|
||||
@@ -50,7 +50,7 @@ fun extractDefaultNullabilityQualifier(
|
||||
|
||||
fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
|
||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||
jsr305State: Jsr305State,
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState,
|
||||
additionalAnnotations: List<FirAnnotationCall>
|
||||
): JavaTypeQualifiersByElementType? {
|
||||
if (typeQualifierResolver.disabled) return defaultTypeQualifiers
|
||||
@@ -59,7 +59,7 @@ fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
|
||||
additionalAnnotations.mapNotNull { annotationCall ->
|
||||
extractDefaultNullabilityQualifier(
|
||||
typeQualifierResolver,
|
||||
jsr305State,
|
||||
javaTypeEnhancementState,
|
||||
annotationCall
|
||||
)
|
||||
}
|
||||
@@ -83,12 +83,12 @@ fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
|
||||
|
||||
fun FirJavaEnhancementContext.copyWithNewDefaultTypeQualifiers(
|
||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||
jsr305State: Jsr305State,
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState,
|
||||
additionalAnnotations: List<FirAnnotationCall>
|
||||
): FirJavaEnhancementContext =
|
||||
when {
|
||||
additionalAnnotations.isEmpty() -> this
|
||||
else -> FirJavaEnhancementContext(session) {
|
||||
computeNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, additionalAnnotations)
|
||||
computeNewDefaultTypeQualifiers(typeQualifierResolver, javaTypeEnhancementState, additionalAnnotations)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -7,11 +7,11 @@ package org.jetbrains.kotlin.fir.java.enhancement
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||
import org.jetbrains.kotlin.utils.Jsr305State
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
|
||||
class FirJsr305StateContainer(val jsr305State: Jsr305State) : FirSessionComponent {
|
||||
class FirJsr305StateContainer(val javaTypeEnhancementState: JavaTypeEnhancementState) : FirSessionComponent {
|
||||
companion object {
|
||||
val Default: FirJsr305StateContainer = FirJsr305StateContainer(Jsr305State.DEFAULT)
|
||||
val Default: FirJsr305StateContainer = FirJsr305StateContainer(JavaTypeEnhancementState.DEFAULT)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.load.java.descriptors.StringDefaultValue
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.*
|
||||
import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.utils.Jsr305State
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
class FirSignatureEnhancement(
|
||||
@@ -47,7 +47,7 @@ class FirSignatureEnhancement(
|
||||
private val javaTypeParameterStack: JavaTypeParameterStack =
|
||||
if (owner is FirJavaClass) owner.javaTypeParameterStack else JavaTypeParameterStack.EMPTY
|
||||
|
||||
private val jsr305State: Jsr305State = session.jsr305StateContainer.jsr305State
|
||||
private val jsr305State: JavaTypeEnhancementState = session.javaTypeEnhancementState ?: JavaTypeEnhancementState.DEFAULT
|
||||
|
||||
private val typeQualifierResolver = FirAnnotationTypeQualifierResolver(session, jsr305State)
|
||||
|
||||
|
||||
@@ -13,23 +13,23 @@ import org.jetbrains.kotlin.load.java.*
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifier
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifierWithMigrationStatus
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.utils.Jsr305State
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||
|
||||
fun List<FirAnnotationCall>.extractNullability(
|
||||
annotationTypeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||
jsr305State: Jsr305State
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState
|
||||
): NullabilityQualifierWithMigrationStatus? =
|
||||
this.firstNotNullResult { annotationCall ->
|
||||
annotationCall.extractNullability(annotationTypeQualifierResolver, jsr305State)
|
||||
annotationCall.extractNullability(annotationTypeQualifierResolver, javaTypeEnhancementState)
|
||||
}
|
||||
|
||||
|
||||
fun FirAnnotationCall.extractNullability(
|
||||
annotationTypeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||
jsr305State: Jsr305State
|
||||
javaTypeEnhancementState: JavaTypeEnhancementState
|
||||
): NullabilityQualifierWithMigrationStatus? {
|
||||
this.extractNullabilityFromKnownAnnotations(jsr305State)?.let { return it }
|
||||
this.extractNullabilityFromKnownAnnotations(javaTypeEnhancementState)?.let { return it }
|
||||
|
||||
val typeQualifierAnnotation =
|
||||
annotationTypeQualifierResolver.resolveTypeQualifierAnnotation(this)
|
||||
@@ -38,10 +38,10 @@ fun FirAnnotationCall.extractNullability(
|
||||
val jsr305ReportLevel = annotationTypeQualifierResolver.resolveJsr305ReportLevel(this)
|
||||
if (jsr305ReportLevel.isIgnore) return null
|
||||
|
||||
return typeQualifierAnnotation.extractNullabilityFromKnownAnnotations(jsr305State)?.copy(isForWarningOnly = jsr305ReportLevel.isWarning)
|
||||
return typeQualifierAnnotation.extractNullabilityFromKnownAnnotations(javaTypeEnhancementState)?.copy(isForWarningOnly = jsr305ReportLevel.isWarning)
|
||||
}
|
||||
|
||||
private fun FirAnnotationCall.extractNullabilityFromKnownAnnotations(jsr305State: Jsr305State): NullabilityQualifierWithMigrationStatus? {
|
||||
private fun FirAnnotationCall.extractNullabilityFromKnownAnnotations(javaTypeEnhancementState: JavaTypeEnhancementState): NullabilityQualifierWithMigrationStatus? {
|
||||
val annotationClassId = classId ?: return null
|
||||
|
||||
return when {
|
||||
@@ -49,10 +49,10 @@ private fun FirAnnotationCall.extractNullabilityFromKnownAnnotations(jsr305State
|
||||
annotationClassId in NOT_NULL_ANNOTATION_IDS -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL)
|
||||
annotationClassId == JAVAX_NONNULL_ANNOTATION_ID -> extractNullabilityTypeFromArgument()
|
||||
|
||||
annotationClassId == COMPATQUAL_NULLABLE_ANNOTATION_ID && jsr305State.enableCompatqualCheckerFrameworkAnnotations ->
|
||||
annotationClassId == COMPATQUAL_NULLABLE_ANNOTATION_ID && javaTypeEnhancementState.enableCompatqualCheckerFrameworkAnnotations ->
|
||||
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE)
|
||||
|
||||
annotationClassId == COMPATQUAL_NONNULL_ANNOTATION_ID && jsr305State.enableCompatqualCheckerFrameworkAnnotations ->
|
||||
annotationClassId == COMPATQUAL_NONNULL_ANNOTATION_ID && javaTypeEnhancementState.enableCompatqualCheckerFrameworkAnnotations ->
|
||||
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL)
|
||||
|
||||
annotationClassId == ANDROIDX_RECENTLY_NON_NULL_ANNOTATION_ID -> NullabilityQualifierWithMigrationStatus(
|
||||
|
||||
Reference in New Issue
Block a user