Support compiler flag -Xcodeanalysis-annotations
This commit is contained in:
committed by
Victor Petukhov
parent
c734bac676
commit
f3a490ee16
+10
-4
@@ -79,18 +79,26 @@ class AnnotationTypeQualifierResolver(storageManager: StorageManager, private va
|
||||
}
|
||||
|
||||
fun resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor: AnnotationDescriptor): JavaDefaultQualifiers? {
|
||||
if (javaTypeEnhancementState.disabledJsr305) {
|
||||
if (javaTypeEnhancementState.disabledDefaultAnnotations) {
|
||||
return null
|
||||
}
|
||||
|
||||
return BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATIONS[annotationDescriptor.fqName]?.let { qualifierForDefaultingAnnotation ->
|
||||
val state = resolveJsr305AnnotationState(annotationDescriptor).takeIf { it != ReportLevel.IGNORE } ?: return null
|
||||
val state = resolveDefaultAnnotationState(annotationDescriptor).takeIf { it != ReportLevel.IGNORE } ?: return null
|
||||
return qualifierForDefaultingAnnotation.copy(
|
||||
nullabilityQualifier = qualifierForDefaultingAnnotation.nullabilityQualifier.copy(isForWarningOnly = state.isWarning)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun resolveDefaultAnnotationState(annotationDescriptor: AnnotationDescriptor): ReportLevel {
|
||||
if (annotationDescriptor.fqName in CODE_ANALYSIS_DEFAULT_ANNOTATIONS) {
|
||||
return javaTypeEnhancementState.jspecifyReportLevel
|
||||
}
|
||||
|
||||
return resolveJsr305AnnotationState(annotationDescriptor)
|
||||
}
|
||||
|
||||
fun resolveTypeQualifierDefaultAnnotation(annotationDescriptor: AnnotationDescriptor): TypeQualifierWithApplicability? {
|
||||
if (javaTypeEnhancementState.disabledJsr305) {
|
||||
return null
|
||||
@@ -156,8 +164,6 @@ class AnnotationTypeQualifierResolver(storageManager: StorageManager, private va
|
||||
)
|
||||
else -> emptyList()
|
||||
}
|
||||
|
||||
val disabled: Boolean = javaTypeEnhancementState.disabledJsr305
|
||||
}
|
||||
|
||||
private val ClassDescriptor.isAnnotatedWithTypeQualifier: Boolean
|
||||
|
||||
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.resolve.sam.SamConversionResolver
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
import java.util.*
|
||||
|
||||
class JavaResolverComponents(
|
||||
@@ -64,7 +65,8 @@ class JavaResolverComponents(
|
||||
val signatureEnhancement: SignatureEnhancement,
|
||||
val javaClassesTracker: JavaClassesTracker,
|
||||
val settings: JavaResolverSettings,
|
||||
val kotlinTypeChecker: NewKotlinTypeChecker
|
||||
val kotlinTypeChecker: NewKotlinTypeChecker,
|
||||
val javaTypeEnhancementState: JavaTypeEnhancementState
|
||||
) {
|
||||
fun replace(
|
||||
javaResolverCache: JavaResolverCache = this.javaResolverCache
|
||||
@@ -74,7 +76,8 @@ class JavaResolverComponents(
|
||||
javaPropertyInitializerEvaluator, samConversionResolver, sourceElementFactory,
|
||||
moduleClassResolver, packagePartProvider, supertypeLoopChecker, lookupTracker, module, reflectionTypes,
|
||||
annotationTypeQualifierResolver, signatureEnhancement, javaClassesTracker, settings,
|
||||
kotlinTypeChecker
|
||||
kotlinTypeChecker,
|
||||
javaTypeEnhancementState
|
||||
)
|
||||
}
|
||||
|
||||
@@ -130,7 +133,7 @@ fun LazyJavaResolverContext.child(
|
||||
fun LazyJavaResolverContext.computeNewDefaultTypeQualifiers(
|
||||
additionalAnnotations: Annotations
|
||||
): JavaTypeQualifiersByElementType? {
|
||||
if (components.annotationTypeQualifierResolver.disabled) return defaultTypeQualifiers
|
||||
if (components.javaTypeEnhancementState.disabledDefaultAnnotations) return defaultTypeQualifiers
|
||||
|
||||
val defaultQualifiers =
|
||||
additionalAnnotations.mapNotNull(this::extractDefaultNullabilityQualifier)
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ class LazyJavaPackageFragment(
|
||||
|
||||
override val annotations =
|
||||
// Do not resolve package annotations if JSR-305 is disabled
|
||||
if (c.components.annotationTypeQualifierResolver.disabled) Annotations.EMPTY
|
||||
if (c.components.javaTypeEnhancementState.disabledDefaultAnnotations) Annotations.EMPTY
|
||||
else c.resolveAnnotations(jPackage)
|
||||
|
||||
internal fun getSubPackageFqNames(): List<FqName> = subPackages()
|
||||
|
||||
+11
-5
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
import org.jetbrains.kotlin.types.typeUtil.isTypeParameter
|
||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||
import org.jetbrains.kotlin.utils.ReportLevel
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
@@ -102,11 +103,16 @@ class SignatureEnhancement(
|
||||
|
||||
private fun jspecifyMigrationStatus(
|
||||
annotationFqName: FqName
|
||||
): NullabilityQualifierWithMigrationStatus? = when (annotationFqName) {
|
||||
JSPECIFY_NOT_NULL -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL)
|
||||
JSPECIFY_NULLABLE -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE)
|
||||
JSPECIFY_NULLNESS_UNKNOWN -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.FORCE_FLEXIBILITY)
|
||||
else -> null
|
||||
): NullabilityQualifierWithMigrationStatus? {
|
||||
if (javaTypeEnhancementState.jspecifyReportLevel == ReportLevel.IGNORE) return null
|
||||
val isForWarningOnly = javaTypeEnhancementState.jspecifyReportLevel == ReportLevel.WARN
|
||||
return when (annotationFqName) {
|
||||
JSPECIFY_NOT_NULL -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL, isForWarningOnly)
|
||||
JSPECIFY_NULLABLE -> NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE, isForWarningOnly)
|
||||
JSPECIFY_NULLNESS_UNKNOWN ->
|
||||
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.FORCE_FLEXIBILITY, isForWarningOnly)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
private fun commonMigrationStatus(
|
||||
|
||||
Reference in New Issue
Block a user