Reformat: context (Java resolve)

This commit is contained in:
Mikhail Glukhikh
2019-02-19 12:36:42 +03:00
parent 6740cdabac
commit 8ac34e1a0f
@@ -45,35 +45,35 @@ import org.jetbrains.kotlin.storage.StorageManager
import java.util.* import java.util.*
class JavaResolverComponents( class JavaResolverComponents(
val storageManager: StorageManager, val storageManager: StorageManager,
val finder: JavaClassFinder, val finder: JavaClassFinder,
val kotlinClassFinder: KotlinClassFinder, val kotlinClassFinder: KotlinClassFinder,
val deserializedDescriptorResolver: DeserializedDescriptorResolver, val deserializedDescriptorResolver: DeserializedDescriptorResolver,
val signaturePropagator: SignaturePropagator, val signaturePropagator: SignaturePropagator,
val errorReporter: ErrorReporter, val errorReporter: ErrorReporter,
val javaResolverCache: JavaResolverCache, val javaResolverCache: JavaResolverCache,
val javaPropertyInitializerEvaluator: JavaPropertyInitializerEvaluator, val javaPropertyInitializerEvaluator: JavaPropertyInitializerEvaluator,
val samConversionResolver: SamConversionResolver, val samConversionResolver: SamConversionResolver,
val sourceElementFactory: JavaSourceElementFactory, val sourceElementFactory: JavaSourceElementFactory,
val moduleClassResolver: ModuleClassResolver, val moduleClassResolver: ModuleClassResolver,
val packagePartProvider: PackagePartProvider, val packagePartProvider: PackagePartProvider,
val supertypeLoopChecker: SupertypeLoopChecker, val supertypeLoopChecker: SupertypeLoopChecker,
val lookupTracker: LookupTracker, val lookupTracker: LookupTracker,
val module: ModuleDescriptor, val module: ModuleDescriptor,
val reflectionTypes: ReflectionTypes, val reflectionTypes: ReflectionTypes,
val annotationTypeQualifierResolver: AnnotationTypeQualifierResolver, val annotationTypeQualifierResolver: AnnotationTypeQualifierResolver,
val signatureEnhancement: SignatureEnhancement, val signatureEnhancement: SignatureEnhancement,
val javaClassesTracker: JavaClassesTracker, val javaClassesTracker: JavaClassesTracker,
val settings: JavaResolverSettings val settings: JavaResolverSettings
) { ) {
fun replace( fun replace(
javaResolverCache: JavaResolverCache = this.javaResolverCache javaResolverCache: JavaResolverCache = this.javaResolverCache
) = JavaResolverComponents( ) = JavaResolverComponents(
storageManager, finder, kotlinClassFinder, deserializedDescriptorResolver, storageManager, finder, kotlinClassFinder, deserializedDescriptorResolver,
signaturePropagator, errorReporter, javaResolverCache, signaturePropagator, errorReporter, javaResolverCache,
javaPropertyInitializerEvaluator, samConversionResolver, sourceElementFactory, javaPropertyInitializerEvaluator, samConversionResolver, sourceElementFactory,
moduleClassResolver, packagePartProvider, supertypeLoopChecker, lookupTracker, module, reflectionTypes, moduleClassResolver, packagePartProvider, supertypeLoopChecker, lookupTracker, module, reflectionTypes,
annotationTypeQualifierResolver, signatureEnhancement, javaClassesTracker, settings annotationTypeQualifierResolver, signatureEnhancement, javaClassesTracker, settings
) )
} }
@@ -95,31 +95,27 @@ interface JavaResolverSettings {
private typealias QualifierByApplicabilityType = EnumMap<AnnotationTypeQualifierResolver.QualifierApplicabilityType, NullabilityQualifierWithMigrationStatus?> private typealias QualifierByApplicabilityType = EnumMap<AnnotationTypeQualifierResolver.QualifierApplicabilityType, NullabilityQualifierWithMigrationStatus?>
class JavaTypeQualifiersByElementType( class JavaTypeQualifiersByElementType(internal val nullabilityQualifiers: QualifierByApplicabilityType) {
internal val nullabilityQualifiers: QualifierByApplicabilityType operator fun get(applicabilityType: AnnotationTypeQualifierResolver.QualifierApplicabilityType?): JavaTypeQualifiers? {
) {
operator fun get(
applicabilityType: AnnotationTypeQualifierResolver.QualifierApplicabilityType?
): JavaTypeQualifiers? {
val nullabilityQualifierWithMigrationStatus = nullabilityQualifiers[applicabilityType] ?: return null val nullabilityQualifierWithMigrationStatus = nullabilityQualifiers[applicabilityType] ?: return null
return JavaTypeQualifiers( return JavaTypeQualifiers(
nullabilityQualifierWithMigrationStatus.qualifier, null, nullabilityQualifierWithMigrationStatus.qualifier, null,
isNotNullTypeParameter = false, isNotNullTypeParameter = false,
isNullabilityQualifierForWarning = nullabilityQualifierWithMigrationStatus.isForWarningOnly isNullabilityQualifierForWarning = nullabilityQualifierWithMigrationStatus.isForWarningOnly
) )
} }
} }
class LazyJavaResolverContext internal constructor( class LazyJavaResolverContext internal constructor(
val components: JavaResolverComponents, val components: JavaResolverComponents,
val typeParameterResolver: TypeParameterResolver, val typeParameterResolver: TypeParameterResolver,
internal val delegateForDefaultTypeQualifiers: Lazy<JavaTypeQualifiersByElementType?> internal val delegateForDefaultTypeQualifiers: Lazy<JavaTypeQualifiersByElementType?>
) { ) {
constructor( constructor(
components: JavaResolverComponents, components: JavaResolverComponents,
typeParameterResolver: TypeParameterResolver, typeParameterResolver: TypeParameterResolver,
typeQualifiersComputation: () -> JavaTypeQualifiersByElementType? typeQualifiersComputation: () -> JavaTypeQualifiersByElementType?
) : this(components, typeParameterResolver, lazy(LazyThreadSafetyMode.NONE, typeQualifiersComputation)) ) : this(components, typeParameterResolver, lazy(LazyThreadSafetyMode.NONE, typeQualifiersComputation))
val defaultTypeQualifiers: JavaTypeQualifiersByElementType? by delegateForDefaultTypeQualifiers val defaultTypeQualifiers: JavaTypeQualifiersByElementType? by delegateForDefaultTypeQualifiers
@@ -133,21 +129,21 @@ class LazyJavaResolverContext internal constructor(
} }
fun LazyJavaResolverContext.child( fun LazyJavaResolverContext.child(
typeParameterResolver: TypeParameterResolver typeParameterResolver: TypeParameterResolver
) = LazyJavaResolverContext(components, typeParameterResolver, delegateForDefaultTypeQualifiers) ) = LazyJavaResolverContext(components, typeParameterResolver, delegateForDefaultTypeQualifiers)
fun LazyJavaResolverContext.computeNewDefaultTypeQualifiers( fun LazyJavaResolverContext.computeNewDefaultTypeQualifiers(
additionalAnnotations: Annotations additionalAnnotations: Annotations
): JavaTypeQualifiersByElementType? { ): JavaTypeQualifiersByElementType? {
if (components.annotationTypeQualifierResolver.disabled) return defaultTypeQualifiers if (components.annotationTypeQualifierResolver.disabled) return defaultTypeQualifiers
val nullabilityQualifiersWithApplicability = val nullabilityQualifiersWithApplicability =
additionalAnnotations.mapNotNull(this::extractDefaultNullabilityQualifier) additionalAnnotations.mapNotNull(this::extractDefaultNullabilityQualifier)
if (nullabilityQualifiersWithApplicability.isEmpty()) return defaultTypeQualifiers if (nullabilityQualifiersWithApplicability.isEmpty()) return defaultTypeQualifiers
val nullabilityQualifiersByType = val nullabilityQualifiersByType =
defaultTypeQualifiers?.nullabilityQualifiers?.let(::QualifierByApplicabilityType) defaultTypeQualifiers?.nullabilityQualifiers?.let(::QualifierByApplicabilityType)
?: QualifierByApplicabilityType(AnnotationTypeQualifierResolver.QualifierApplicabilityType::class.java) ?: QualifierByApplicabilityType(AnnotationTypeQualifierResolver.QualifierApplicabilityType::class.java)
var wasUpdate = false var wasUpdate = false
@@ -162,74 +158,74 @@ fun LazyJavaResolverContext.computeNewDefaultTypeQualifiers(
} }
private fun LazyJavaResolverContext.extractDefaultNullabilityQualifier( private fun LazyJavaResolverContext.extractDefaultNullabilityQualifier(
annotationDescriptor: AnnotationDescriptor annotationDescriptor: AnnotationDescriptor
): NullabilityQualifierWithApplicability? { ): NullabilityQualifierWithApplicability? {
val typeQualifierResolver = components.annotationTypeQualifierResolver val typeQualifierResolver = components.annotationTypeQualifierResolver
typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor)?.let { return it } typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor)?.let { return it }
val (typeQualifier, applicability) = val (typeQualifier, applicability) =
typeQualifierResolver.resolveTypeQualifierDefaultAnnotation(annotationDescriptor) typeQualifierResolver.resolveTypeQualifierDefaultAnnotation(annotationDescriptor)
?: return null ?: return null
val jsr305State = typeQualifierResolver.resolveJsr305CustomState(annotationDescriptor) val jsr305State = typeQualifierResolver.resolveJsr305CustomState(annotationDescriptor)
?: typeQualifierResolver.resolveJsr305AnnotationState(typeQualifier) ?: typeQualifierResolver.resolveJsr305AnnotationState(typeQualifier)
if (jsr305State.isIgnore) { if (jsr305State.isIgnore) {
return null return null
} }
val nullabilityQualifier = val nullabilityQualifier =
components components
.signatureEnhancement .signatureEnhancement
.extractNullability(typeQualifier) .extractNullability(typeQualifier)
?.copy(isForWarningOnly = jsr305State.isWarning) ?.copy(isForWarningOnly = jsr305State.isWarning)
?: return null ?: return null
return NullabilityQualifierWithApplicability(nullabilityQualifier, applicability) return NullabilityQualifierWithApplicability(nullabilityQualifier, applicability)
} }
data class NullabilityQualifierWithApplicability( data class NullabilityQualifierWithApplicability(
val nullabilityQualifier: NullabilityQualifierWithMigrationStatus, val nullabilityQualifier: NullabilityQualifierWithMigrationStatus,
val qualifierApplicabilityTypes: Collection<AnnotationTypeQualifierResolver.QualifierApplicabilityType> val qualifierApplicabilityTypes: Collection<AnnotationTypeQualifierResolver.QualifierApplicabilityType>
) )
fun LazyJavaResolverContext.replaceComponents( fun LazyJavaResolverContext.replaceComponents(
components: JavaResolverComponents components: JavaResolverComponents
) = LazyJavaResolverContext(components, typeParameterResolver, delegateForDefaultTypeQualifiers) ) = LazyJavaResolverContext(components, typeParameterResolver, delegateForDefaultTypeQualifiers)
private fun LazyJavaResolverContext.child( private fun LazyJavaResolverContext.child(
containingDeclaration: DeclarationDescriptor, containingDeclaration: DeclarationDescriptor,
typeParameterOwner: JavaTypeParameterListOwner?, typeParameterOwner: JavaTypeParameterListOwner?,
typeParametersIndexOffset: Int = 0, typeParametersIndexOffset: Int = 0,
delegateForTypeQualifiers: Lazy<JavaTypeQualifiersByElementType?> delegateForTypeQualifiers: Lazy<JavaTypeQualifiersByElementType?>
) = LazyJavaResolverContext( ) = LazyJavaResolverContext(
components, components,
typeParameterOwner?.let { LazyJavaTypeParameterResolver(this, containingDeclaration, it, typeParametersIndexOffset) } typeParameterOwner?.let { LazyJavaTypeParameterResolver(this, containingDeclaration, it, typeParametersIndexOffset) }
?: typeParameterResolver, ?: typeParameterResolver,
delegateForTypeQualifiers delegateForTypeQualifiers
) )
fun LazyJavaResolverContext.childForMethod( fun LazyJavaResolverContext.childForMethod(
containingDeclaration: DeclarationDescriptor, containingDeclaration: DeclarationDescriptor,
typeParameterOwner: JavaTypeParameterListOwner, typeParameterOwner: JavaTypeParameterListOwner,
typeParametersIndexOffset: Int = 0 typeParametersIndexOffset: Int = 0
) = child(containingDeclaration, typeParameterOwner, typeParametersIndexOffset, delegateForDefaultTypeQualifiers) ) = child(containingDeclaration, typeParameterOwner, typeParametersIndexOffset, delegateForDefaultTypeQualifiers)
fun LazyJavaResolverContext.childForClassOrPackage( fun LazyJavaResolverContext.childForClassOrPackage(
containingDeclaration: ClassOrPackageFragmentDescriptor, containingDeclaration: ClassOrPackageFragmentDescriptor,
typeParameterOwner: JavaTypeParameterListOwner? = null, typeParameterOwner: JavaTypeParameterListOwner? = null,
typeParametersIndexOffset: Int = 0 typeParametersIndexOffset: Int = 0
) = child( ) = child(
containingDeclaration, typeParameterOwner, typeParametersIndexOffset, containingDeclaration, typeParameterOwner, typeParametersIndexOffset,
lazy(LazyThreadSafetyMode.NONE) { computeNewDefaultTypeQualifiers(containingDeclaration.annotations) } lazy(LazyThreadSafetyMode.NONE) { computeNewDefaultTypeQualifiers(containingDeclaration.annotations) }
) )
fun LazyJavaResolverContext.copyWithNewDefaultTypeQualifiers( fun LazyJavaResolverContext.copyWithNewDefaultTypeQualifiers(
additionalAnnotations: Annotations additionalAnnotations: Annotations
) = if (additionalAnnotations.isEmpty()) ) = when {
this additionalAnnotations.isEmpty() -> this
else else -> LazyJavaResolverContext(
LazyJavaResolverContext( components, typeParameterResolver,
components, typeParameterResolver, lazy(LazyThreadSafetyMode.NONE) { computeNewDefaultTypeQualifiers(additionalAnnotations) }
lazy(LazyThreadSafetyMode.NONE) { computeNewDefaultTypeQualifiers(additionalAnnotations) } )
) }