Use new default settings for java nullability annotations in JavaTypeEnhancementState and get rid of all hardcoded defaults

This commit is contained in:
Victor Petukhov
2021-06-01 12:21:24 +03:00
parent 8e7c0e8c61
commit 46d0b16142
27 changed files with 218 additions and 305 deletions
@@ -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.JavaTypeEnhancementState
import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
internal class EnhancementSignatureParts(
@@ -14,8 +14,9 @@ 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.JavaTypeEnhancementState
import org.jetbrains.kotlin.utils.ReportLevel
import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState
import org.jetbrains.kotlin.load.java.ReportLevel
import org.jetbrains.kotlin.name.FqName
class FirAnnotationTypeQualifierResolver(private val session: FirSession, private val javaTypeEnhancementState: JavaTypeEnhancementState) {
@@ -52,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 (javaTypeEnhancementState.disabledJsr305) {
if (javaTypeEnhancementState.jsr305.isDisabled) {
return null
}
@@ -63,7 +64,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
}
fun resolveQualifierBuiltInDefaultAnnotation(annotationCall: FirAnnotationCall): JavaDefaultQualifiers? {
if (javaTypeEnhancementState.disabledJsr305) {
if (javaTypeEnhancementState.jsr305.isDisabled) {
return null
}
@@ -77,7 +78,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
}
fun resolveTypeQualifierDefaultAnnotation(annotationCall: FirAnnotationCall): TypeQualifierWithApplicability? {
if (javaTypeEnhancementState.disabledJsr305) {
if (javaTypeEnhancementState.jsr305.isDisabled) {
return null
}
@@ -109,11 +110,11 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
fun resolveJsr305ReportLevel(annotationCall: FirAnnotationCall): ReportLevel {
resolveJsr305CustomLevel(annotationCall)?.let { return it }
return javaTypeEnhancementState.globalJsr305Level
return javaTypeEnhancementState.jsr305.globalLevel
}
fun resolveJsr305CustomLevel(annotationCall: FirAnnotationCall): ReportLevel? {
javaTypeEnhancementState.userDefinedLevelForSpecificJsr305Annotation[annotationCall.classId?.run { packageFqName.asString() + "." + relativeClassName.asString() }]?.let { return it }
javaTypeEnhancementState.jsr305.userDefinedLevelForSpecificAnnotation[annotationCall.classId?.run { FqName(packageFqName.asString() + "." + relativeClassName.asString()) }]?.let { return it }
return annotationCall.resolvedClass?.migrationAnnotationStatus()
}
@@ -122,7 +123,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
it.classId == MIGRATION_ANNOTATION_ID
}?.arguments?.firstOrNull()?.toResolvedCallableSymbol()?.callableId?.callableName ?: return null
javaTypeEnhancementState.migrationLevelForJsr305?.let { return it }
javaTypeEnhancementState.jsr305.migrationLevel?.let { return it }
return when (enumEntryName.asString()) {
"STRICT" -> ReportLevel.STRICT
@@ -146,7 +147,7 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
)
}
val disabled: Boolean = javaTypeEnhancementState.disabledJsr305
val isDisabled: Boolean = javaTypeEnhancementState.jsr305.isDisabled
}
@@ -8,7 +8,6 @@ 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.JavaTypeEnhancementState
class FirJavaEnhancementContext private constructor(
val session: FirSession,
@@ -51,7 +50,7 @@ fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
javaTypeEnhancementState: JavaTypeEnhancementState,
additionalAnnotations: List<FirAnnotationCall>
): JavaTypeQualifiersByElementType? {
if (typeQualifierResolver.disabled) return defaultTypeQualifiers
if (typeQualifierResolver.isDisabled) return defaultTypeQualifiers
val defaultQualifiers =
additionalAnnotations.mapNotNull { annotationCall ->
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.java.enhancement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState
class FirJsr305StateContainer(val javaTypeEnhancementState: JavaTypeEnhancementState) : FirSessionComponent {
companion object {
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.load.java.typeEnhancement.*
import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class FirSignatureEnhancement(
@@ -13,7 +13,6 @@ 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.JavaTypeEnhancementState
fun List<FirAnnotationCall>.extractNullability(
annotationTypeQualifierResolver: FirAnnotationTypeQualifierResolver,
@@ -42,24 +41,21 @@ fun FirAnnotationCall.extractNullability(
private fun FirAnnotationCall.extractNullabilityFromKnownAnnotations(javaTypeEnhancementState: JavaTypeEnhancementState): NullabilityQualifierWithMigrationStatus? {
val annotationClassId = classId ?: return null
val reportLevel = javaTypeEnhancementState.getReportLevelForAnnotation(annotationClassId.asSingleFqName())
return when {
annotationClassId in NULLABLE_ANNOTATION_IDS -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE)
annotationClassId in NOT_NULL_ANNOTATION_IDS -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL)
annotationClassId == JAVAX_NONNULL_ANNOTATION_ID -> extractNullabilityTypeFromArgument()
if (reportLevel == ReportLevel.IGNORE) return null
annotationClassId == COMPATQUAL_NULLABLE_ANNOTATION_ID && javaTypeEnhancementState.enableCompatqualCheckerFrameworkAnnotations ->
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE)
annotationClassId == COMPATQUAL_NONNULL_ANNOTATION_ID && javaTypeEnhancementState.enableCompatqualCheckerFrameworkAnnotations ->
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL)
annotationClassId == ANDROIDX_RECENTLY_NON_NULL_ANNOTATION_ID -> NullabilityQualifierWithMigrationStatus(
return when (annotationClassId) {
in NULLABLE_ANNOTATION_IDS -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE)
in NOT_NULL_ANNOTATION_IDS -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL)
JAVAX_NONNULL_ANNOTATION_ID -> extractNullabilityTypeFromArgument()
COMPATQUAL_NULLABLE_ANNOTATION_ID -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE)
COMPATQUAL_NONNULL_ANNOTATION_ID -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL)
ANDROIDX_RECENTLY_NON_NULL_ANNOTATION_ID -> NullabilityQualifierWithMigrationStatus(
NullabilityQualifier.NOT_NULL,
isForWarningOnly = true
)
annotationClassId == ANDROIDX_RECENTLY_NULLABLE_ANNOTATION_ID -> NullabilityQualifierWithMigrationStatus(
ANDROIDX_RECENTLY_NULLABLE_ANNOTATION_ID -> NullabilityQualifierWithMigrationStatus(
NullabilityQualifier.NULLABLE,
isForWarningOnly = true
)