FIR/FE: extract common code for type qualifier defaults
This commit is contained in:
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.ClassOrPackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.load.java.*
|
||||
@@ -29,7 +28,6 @@ import org.jetbrains.kotlin.load.java.components.JavaPropertyInitializerEvaluato
|
||||
import org.jetbrains.kotlin.load.java.components.JavaResolverCache
|
||||
import org.jetbrains.kotlin.load.java.components.SignaturePropagator
|
||||
import org.jetbrains.kotlin.load.java.lazy.types.JavaTypeResolver
|
||||
import org.jetbrains.kotlin.load.java.lazy.types.TypeParameterUpperBoundEraser
|
||||
import org.jetbrains.kotlin.load.java.sources.JavaSourceElementFactory
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameterListOwner
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.SignatureEnhancement
|
||||
@@ -131,55 +129,8 @@ fun LazyJavaResolverContext.child(
|
||||
|
||||
fun LazyJavaResolverContext.computeNewDefaultTypeQualifiers(
|
||||
additionalAnnotations: Annotations
|
||||
): JavaTypeQualifiersByElementType? {
|
||||
if (components.javaTypeEnhancementState.disabledDefaultAnnotations) return defaultTypeQualifiers
|
||||
|
||||
val defaultQualifiers =
|
||||
additionalAnnotations.mapNotNull(this::extractDefaultNullabilityQualifier)
|
||||
|
||||
if (defaultQualifiers.isEmpty()) return defaultTypeQualifiers
|
||||
|
||||
val defaultQualifiersByType =
|
||||
defaultTypeQualifiers?.defaultQualifiers?.let(::QualifierByApplicabilityType)
|
||||
?: QualifierByApplicabilityType(AnnotationQualifierApplicabilityType::class.java)
|
||||
|
||||
var wasUpdate = false
|
||||
for (qualifier in defaultQualifiers) {
|
||||
for (applicabilityType in qualifier.qualifierApplicabilityTypes) {
|
||||
defaultQualifiersByType[applicabilityType] = qualifier
|
||||
wasUpdate = true
|
||||
}
|
||||
}
|
||||
|
||||
return if (!wasUpdate) defaultTypeQualifiers else JavaTypeQualifiersByElementType(defaultQualifiersByType)
|
||||
}
|
||||
|
||||
private fun LazyJavaResolverContext.extractDefaultNullabilityQualifier(
|
||||
annotationDescriptor: AnnotationDescriptor
|
||||
): JavaDefaultQualifiers? {
|
||||
val typeQualifierResolver = components.annotationTypeQualifierResolver
|
||||
typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor)?.let { return it }
|
||||
|
||||
val (typeQualifier, applicability) =
|
||||
typeQualifierResolver.resolveTypeQualifierDefaultAnnotation(annotationDescriptor)
|
||||
?: return null
|
||||
|
||||
val jsr305State = typeQualifierResolver.resolveJsr305CustomState(annotationDescriptor)
|
||||
?: typeQualifierResolver.resolveJsr305AnnotationState(typeQualifier)
|
||||
|
||||
if (jsr305State.isIgnore) {
|
||||
return null
|
||||
}
|
||||
|
||||
val areImprovementsInStrictMode = components.settings.typeEnhancementImprovementsInStrictMode
|
||||
|
||||
// TODO: if `extractNullability` forces a warning for compatibility, this overrides that. Expected? Probably not.
|
||||
val nullabilityQualifier =
|
||||
components.signatureEnhancement.extractNullability(typeQualifier, areImprovementsInStrictMode, typeParameterBounds = false)
|
||||
?.copy(isForWarningOnly = jsr305State.isWarning) ?: return null
|
||||
|
||||
return JavaDefaultQualifiers(nullabilityQualifier, applicability)
|
||||
}
|
||||
): JavaTypeQualifiersByElementType? =
|
||||
components.annotationTypeQualifierResolver.extractAndMergeDefaultQualifiers(defaultTypeQualifiers, additionalAnnotations)
|
||||
|
||||
fun LazyJavaResolverContext.replaceComponents(
|
||||
components: JavaResolverComponents
|
||||
|
||||
Reference in New Issue
Block a user