Prepare type enhancement for codeanalysis annotations

- Rename NullabilityQualifierWithApplicability -> JavaDefaultQualifiers
- Use JavaDefaultQualifiers instead of JavaTypeQualifiers for default qualifiers

This change is intended to make code more clear and to allow add some additional
parameters specific for default qualifiers needed for codeanalysis annotations
This commit is contained in:
Denis Zharkov
2019-08-09 15:13:51 +03:00
committed by Victor Petukhov
parent e27501497b
commit fa2578c795
9 changed files with 77 additions and 60 deletions
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType
import org.jetbrains.kotlin.load.java.JavaDefaultQualifiers
import org.jetbrains.kotlin.load.java.MUTABLE_ANNOTATIONS import org.jetbrains.kotlin.load.java.MUTABLE_ANNOTATIONS
import org.jetbrains.kotlin.load.java.READ_ONLY_ANNOTATIONS import org.jetbrains.kotlin.load.java.READ_ONLY_ANNOTATIONS
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
@@ -180,7 +181,7 @@ internal class EnhancementSignatureParts(
private fun FirTypeRef?.extractQualifiersFromAnnotations( private fun FirTypeRef?.extractQualifiersFromAnnotations(
isHeadTypeConstructor: Boolean, isHeadTypeConstructor: Boolean,
defaultQualifiersForType: JavaTypeQualifiers?, defaultQualifiersForType: JavaDefaultQualifiers?,
jsr305State: Jsr305State jsr305State: Jsr305State
): JavaTypeQualifiers { ): JavaTypeQualifiers {
val composedAnnotation = val composedAnnotation =
@@ -204,10 +205,10 @@ internal class EnhancementSignatureParts(
defaultQualifiersForType defaultQualifiersForType
val nullabilityInfo = composedAnnotation.extractNullability(typeQualifierResolver, jsr305State) val nullabilityInfo = composedAnnotation.extractNullability(typeQualifierResolver, jsr305State)
?: defaultTypeQualifier?.nullability?.let { nullability -> ?: defaultTypeQualifier?.nullabilityQualifier?.let { nullability ->
NullabilityQualifierWithMigrationStatus( NullabilityQualifierWithMigrationStatus(
nullability, nullability.qualifier,
defaultTypeQualifier.isNullabilityQualifierForWarning nullability.isForWarningOnly
) )
} }
@@ -233,7 +234,7 @@ internal class EnhancementSignatureParts(
private fun FirTypeRef?.computeQualifiersForOverride( private fun FirTypeRef?.computeQualifiersForOverride(
session: FirSession, session: FirSession,
fromSupertypes: Collection<FirTypeRef>, fromSupertypes: Collection<FirTypeRef>,
defaultQualifiersForType: JavaTypeQualifiers?, defaultQualifiersForType: JavaDefaultQualifiers?,
isHeadTypeConstructor: Boolean, isHeadTypeConstructor: Boolean,
jsr305State: Jsr305State jsr305State: Jsr305State
): JavaTypeQualifiers { ): JavaTypeQualifiers {
@@ -63,15 +63,17 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession, privat
return resolveTypeQualifierNickname(annotationClass) return resolveTypeQualifierNickname(annotationClass)
} }
fun resolveQualifierBuiltInDefaultAnnotation(annotationCall: FirAnnotationCall): NullabilityQualifierWithApplicability? { fun resolveQualifierBuiltInDefaultAnnotation(annotationCall: FirAnnotationCall): JavaDefaultQualifiers? {
if (jsr305State.disabled) { if (jsr305State.disabled) {
return null return null
} }
val annotationClassId = annotationCall.classId val annotationClassId = annotationCall.classId
return BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATION_IDS[annotationClassId]?.let { (qualifier, applicability) -> return BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATION_IDS[annotationClassId]?.let { qualifierForDefaultingAnnotation ->
val state = resolveJsr305ReportLevel(annotationCall).takeIf { it != ReportLevel.IGNORE } ?: return null val state = resolveJsr305ReportLevel(annotationCall).takeIf { it != ReportLevel.IGNORE } ?: return null
return NullabilityQualifierWithApplicability(qualifier.copy(isForWarningOnly = state.isWarning), applicability) return qualifierForDefaultingAnnotation.copy(
nullabilityQualifier = qualifierForDefaultingAnnotation.nullabilityQualifier.copy(isForWarningOnly = state.isWarning)
)
} }
} }
@@ -26,7 +26,7 @@ fun extractDefaultNullabilityQualifier(
typeQualifierResolver: FirAnnotationTypeQualifierResolver, typeQualifierResolver: FirAnnotationTypeQualifierResolver,
jsr305State: Jsr305State, jsr305State: Jsr305State,
annotationCall: FirAnnotationCall annotationCall: FirAnnotationCall
): NullabilityQualifierWithApplicability? { ): JavaDefaultQualifiers? {
typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationCall)?.let { return it } typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationCall)?.let { return it }
val (typeQualifier, applicability) = val (typeQualifier, applicability) =
@@ -45,7 +45,7 @@ fun extractDefaultNullabilityQualifier(
typeQualifierResolver, jsr305State typeQualifierResolver, jsr305State
)?.copy(isForWarningOnly = jsr305ReportLevel.isWarning) ?: return null )?.copy(isForWarningOnly = jsr305ReportLevel.isWarning) ?: return null
return NullabilityQualifierWithApplicability(nullabilityQualifier, applicability) return JavaDefaultQualifiers(nullabilityQualifier, applicability)
} }
fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers( fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
@@ -55,7 +55,7 @@ fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
): JavaTypeQualifiersByElementType? { ): JavaTypeQualifiersByElementType? {
if (typeQualifierResolver.disabled) return defaultTypeQualifiers if (typeQualifierResolver.disabled) return defaultTypeQualifiers
val nullabilityQualifiersWithApplicability = val defaultQualifiers =
additionalAnnotations.mapNotNull { annotationCall -> additionalAnnotations.mapNotNull { annotationCall ->
extractDefaultNullabilityQualifier( extractDefaultNullabilityQualifier(
typeQualifierResolver, typeQualifierResolver,
@@ -64,21 +64,21 @@ fun FirJavaEnhancementContext.computeNewDefaultTypeQualifiers(
) )
} }
if (nullabilityQualifiersWithApplicability.isEmpty()) return defaultTypeQualifiers if (defaultQualifiers.isEmpty()) return defaultTypeQualifiers
val nullabilityQualifiersByType = val defaultQualifiersByType =
defaultTypeQualifiers?.nullabilityQualifiers?.let(::QualifierByApplicabilityType) defaultTypeQualifiers?.defaultQualifiers?.let(::QualifierByApplicabilityType)
?: QualifierByApplicabilityType(AnnotationQualifierApplicabilityType::class.java) ?: QualifierByApplicabilityType(AnnotationQualifierApplicabilityType::class.java)
var wasUpdate = false var wasUpdate = false
for ((nullability, applicableTo) in nullabilityQualifiersWithApplicability) { for (qualifier in defaultQualifiers) {
for (applicabilityType in applicableTo) { for (applicabilityType in qualifier.qualifierApplicabilityTypes) {
nullabilityQualifiersByType[applicabilityType] = nullability defaultQualifiersByType[applicabilityType] = qualifier
wasUpdate = true wasUpdate = true
} }
} }
return if (!wasUpdate) defaultTypeQualifiers else JavaTypeQualifiersByElementType(nullabilityQualifiersByType) return if (!wasUpdate) defaultTypeQualifiers else JavaTypeQualifiersByElementType(defaultQualifiersByType)
} }
fun FirJavaEnhancementContext.copyWithNewDefaultTypeQualifiers( fun FirJavaEnhancementContext.copyWithNewDefaultTypeQualifiers(
@@ -13,6 +13,14 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
@@ -25,6 +33,7 @@ import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
import org.jetbrains.kotlin.load.java.JavaDefaultQualifiers
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_NULL_FQ_NAME import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_NULL_FQ_NAME
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_VALUE_FQ_NAME import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_VALUE_FQ_NAME
import org.jetbrains.kotlin.load.java.descriptors.AnnotationDefaultValue import org.jetbrains.kotlin.load.java.descriptors.AnnotationDefaultValue
@@ -243,7 +252,7 @@ private fun ConeClassifierLookupTag.enhanceMutability(
internal data class TypeAndDefaultQualifiers( internal data class TypeAndDefaultQualifiers(
val type: FirTypeRef?, // null denotes '*' here val type: FirTypeRef?, // null denotes '*' here
val defaultQualifiers: JavaTypeQualifiers? val defaultQualifiers: JavaDefaultQualifiers?
) )
internal fun FirTypeRef.typeArguments(): List<FirTypeProjection> = internal fun FirTypeRef.typeArguments(): List<FirTypeProjection> =
@@ -9,6 +9,11 @@ import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifier
import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifierWithMigrationStatus import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifierWithMigrationStatus
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
data class JavaDefaultQualifiers(
val nullabilityQualifier: NullabilityQualifierWithMigrationStatus,
val qualifierApplicabilityTypes: Collection<AnnotationQualifierApplicabilityType>
)
val TYPE_QUALIFIER_NICKNAME_FQNAME = FqName("javax.annotation.meta.TypeQualifierNickname") val TYPE_QUALIFIER_NICKNAME_FQNAME = FqName("javax.annotation.meta.TypeQualifierNickname")
val TYPE_QUALIFIER_FQNAME = FqName("javax.annotation.meta.TypeQualifier") val TYPE_QUALIFIER_FQNAME = FqName("javax.annotation.meta.TypeQualifier")
val TYPE_QUALIFIER_DEFAULT_FQNAME = FqName("javax.annotation.meta.TypeQualifierDefault") val TYPE_QUALIFIER_DEFAULT_FQNAME = FqName("javax.annotation.meta.TypeQualifierDefault")
@@ -24,25 +29,25 @@ val DEFAULT_JSPECIFY_APPLICABILITY = listOf(
val BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATIONS = mapOf( val BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATIONS = mapOf(
FqName("javax.annotation.ParametersAreNullableByDefault") to FqName("javax.annotation.ParametersAreNullableByDefault") to
NullabilityQualifierWithApplicability( JavaDefaultQualifiers(
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE), NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE),
listOf(AnnotationQualifierApplicabilityType.VALUE_PARAMETER) listOf(AnnotationQualifierApplicabilityType.VALUE_PARAMETER)
), ),
FqName("javax.annotation.ParametersAreNonnullByDefault") to FqName("javax.annotation.ParametersAreNonnullByDefault") to
NullabilityQualifierWithApplicability( JavaDefaultQualifiers(
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL), NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL),
listOf(AnnotationQualifierApplicabilityType.VALUE_PARAMETER) listOf(AnnotationQualifierApplicabilityType.VALUE_PARAMETER)
), ),
JSPECIFY_DEFAULT_NULLABLE to NullabilityQualifierWithApplicability( JSPECIFY_DEFAULT_NULLABLE to JavaDefaultQualifiers(
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE), NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NULLABLE),
DEFAULT_JSPECIFY_APPLICABILITY DEFAULT_JSPECIFY_APPLICABILITY
), ),
JSPECIFY_DEFAULT_NOT_NULL to NullabilityQualifierWithApplicability( JSPECIFY_DEFAULT_NOT_NULL to JavaDefaultQualifiers(
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL), NullabilityQualifierWithMigrationStatus(NullabilityQualifier.NOT_NULL),
DEFAULT_JSPECIFY_APPLICABILITY DEFAULT_JSPECIFY_APPLICABILITY
), ),
JSPECIFY_DEFAULT_NULLNESS_UNKNOWN to NullabilityQualifierWithApplicability( JSPECIFY_DEFAULT_NULLNESS_UNKNOWN to JavaDefaultQualifiers(
NullabilityQualifierWithMigrationStatus(NullabilityQualifier.FORCE_FLEXIBILITY), NullabilityQualifierWithMigrationStatus(NullabilityQualifier.FORCE_FLEXIBILITY),
DEFAULT_JSPECIFY_APPLICABILITY DEFAULT_JSPECIFY_APPLICABILITY
) )
@@ -5,20 +5,15 @@
package org.jetbrains.kotlin.load.java package org.jetbrains.kotlin.load.java
import org.jetbrains.kotlin.load.java.typeEnhancement.JavaTypeQualifiers
import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifierWithMigrationStatus
import java.util.* import java.util.*
typealias QualifierByApplicabilityType = EnumMap<AnnotationQualifierApplicabilityType, NullabilityQualifierWithMigrationStatus?> typealias QualifierByApplicabilityType =
EnumMap<AnnotationQualifierApplicabilityType, JavaDefaultQualifiers?>
class JavaTypeQualifiersByElementType(val nullabilityQualifiers: QualifierByApplicabilityType) { class JavaTypeQualifiersByElementType(val defaultQualifiers: QualifierByApplicabilityType) {
operator fun get(applicabilityType: AnnotationQualifierApplicabilityType?): JavaTypeQualifiers? { operator fun get(
val nullabilityQualifierWithMigrationStatus = nullabilityQualifiers[applicabilityType] ?: return null applicabilityType: AnnotationQualifierApplicabilityType?
): JavaDefaultQualifiers? {
return JavaTypeQualifiers( return defaultQualifiers[applicabilityType]
nullabilityQualifierWithMigrationStatus.qualifier, null,
isNotNullTypeParameter = false,
isNullabilityQualifierForWarning = nullabilityQualifierWithMigrationStatus.isForWarningOnly
)
} }
} }
@@ -78,14 +78,16 @@ class AnnotationTypeQualifierResolver(storageManager: StorageManager, private va
return resolveTypeQualifierNickname(annotationClass) return resolveTypeQualifierNickname(annotationClass)
} }
fun resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor: AnnotationDescriptor): NullabilityQualifierWithApplicability? { fun resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor: AnnotationDescriptor): JavaDefaultQualifiers? {
if (jsr305State.disabled) { if (jsr305State.disabled) {
return null return null
} }
return BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATIONS[annotationDescriptor.fqName]?.let { (qualifier, applicability) -> return BUILT_IN_TYPE_QUALIFIER_DEFAULT_ANNOTATIONS[annotationDescriptor.fqName]?.let { qualifierForDefaultingAnnotation ->
val state = resolveJsr305AnnotationState(annotationDescriptor).takeIf { it != ReportLevel.IGNORE } ?: return null val state = resolveJsr305AnnotationState(annotationDescriptor).takeIf { it != ReportLevel.IGNORE } ?: return null
return NullabilityQualifierWithApplicability(qualifier.copy(isForWarningOnly = state.isWarning), applicability) return qualifierForDefaultingAnnotation.copy(
nullabilityQualifier = qualifierForDefaultingAnnotation.nullabilityQualifier.copy(isForWarningOnly = state.isWarning)
)
} }
} }
@@ -31,6 +31,8 @@ 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.JavaTypeResolver
import org.jetbrains.kotlin.load.java.sources.JavaSourceElementFactory import org.jetbrains.kotlin.load.java.sources.JavaSourceElementFactory
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameterListOwner import org.jetbrains.kotlin.load.java.structure.JavaTypeParameterListOwner
import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifier
import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifierWithMigrationStatus
import org.jetbrains.kotlin.load.java.typeEnhancement.SignatureEnhancement import org.jetbrains.kotlin.load.java.typeEnhancement.SignatureEnhancement
import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
@@ -39,6 +41,7 @@ import org.jetbrains.kotlin.resolve.sam.SamConversionResolver
import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker
import java.util.*
class JavaResolverComponents( class JavaResolverComponents(
val storageManager: StorageManager, val storageManager: StorageManager,
@@ -129,29 +132,29 @@ fun LazyJavaResolverContext.computeNewDefaultTypeQualifiers(
): JavaTypeQualifiersByElementType? { ): JavaTypeQualifiersByElementType? {
if (components.annotationTypeQualifierResolver.disabled) return defaultTypeQualifiers if (components.annotationTypeQualifierResolver.disabled) return defaultTypeQualifiers
val nullabilityQualifiersWithApplicability = val defaultQualifiers =
additionalAnnotations.mapNotNull(this::extractDefaultNullabilityQualifier) additionalAnnotations.mapNotNull(this::extractDefaultNullabilityQualifier)
if (nullabilityQualifiersWithApplicability.isEmpty()) return defaultTypeQualifiers if (defaultQualifiers.isEmpty()) return defaultTypeQualifiers
val nullabilityQualifiersByType = val defaultQualifiersByType =
defaultTypeQualifiers?.nullabilityQualifiers?.let(::QualifierByApplicabilityType) defaultTypeQualifiers?.defaultQualifiers?.let(::QualifierByApplicabilityType)
?: QualifierByApplicabilityType(AnnotationQualifierApplicabilityType::class.java) ?: QualifierByApplicabilityType(AnnotationQualifierApplicabilityType::class.java)
var wasUpdate = false var wasUpdate = false
for ((nullability, applicableTo) in nullabilityQualifiersWithApplicability) { for (qualifier in defaultQualifiers) {
for (applicabilityType in applicableTo) { for (applicabilityType in qualifier.qualifierApplicabilityTypes) {
nullabilityQualifiersByType[applicabilityType] = nullability defaultQualifiersByType[applicabilityType] = qualifier
wasUpdate = true wasUpdate = true
} }
} }
return if (!wasUpdate) defaultTypeQualifiers else JavaTypeQualifiersByElementType(nullabilityQualifiersByType) return if (!wasUpdate) defaultTypeQualifiers else JavaTypeQualifiersByElementType(defaultQualifiersByType)
} }
private fun LazyJavaResolverContext.extractDefaultNullabilityQualifier( private fun LazyJavaResolverContext.extractDefaultNullabilityQualifier(
annotationDescriptor: AnnotationDescriptor annotationDescriptor: AnnotationDescriptor
): NullabilityQualifierWithApplicability? { ): JavaDefaultQualifiers? {
val typeQualifierResolver = components.annotationTypeQualifierResolver val typeQualifierResolver = components.annotationTypeQualifierResolver
typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor)?.let { return it } typeQualifierResolver.resolveQualifierBuiltInDefaultAnnotation(annotationDescriptor)?.let { return it }
@@ -173,7 +176,7 @@ private fun LazyJavaResolverContext.extractDefaultNullabilityQualifier(
?.copy(isForWarningOnly = jsr305State.isWarning) ?.copy(isForWarningOnly = jsr305State.isWarning)
?: return null ?: return null
return NullabilityQualifierWithApplicability(nullabilityQualifier, applicability) return JavaDefaultQualifiers(nullabilityQualifier, applicability)
} }
fun LazyJavaResolverContext.replaceComponents( fun LazyJavaResolverContext.replaceComponents(
@@ -236,7 +236,7 @@ class SignatureEnhancement(
return bounds.map { bound -> return bounds.map { bound ->
SignatureParts( SignatureParts(
typeParameter, bound, emptyList(), false, context, typeParameter, bound, emptyList(), false, context,
AnnotationTypeQualifierResolver.QualifierApplicabilityType.TYPE_PARAMETER_BOUNDS, AnnotationQualifierApplicabilityType.TYPE_PARAMETER_BOUNDS,
typeParameterBounds = true typeParameterBounds = true
).enhance().type ).enhance().type
} }
@@ -258,7 +258,7 @@ class SignatureEnhancement(
private val fromOverridden: Collection<KotlinType>, private val fromOverridden: Collection<KotlinType>,
private val isCovariant: Boolean, private val isCovariant: Boolean,
private val containerContext: LazyJavaResolverContext, private val containerContext: LazyJavaResolverContext,
private val containerApplicabilityType: AnnotationTypeQualifierResolver.QualifierApplicabilityType, private val containerApplicabilityType: AnnotationQualifierApplicabilityType,
private val typeParameterBounds: Boolean = false private val typeParameterBounds: Boolean = false
) { ) {
@@ -311,7 +311,7 @@ class SignatureEnhancement(
private fun KotlinType.extractQualifiersFromAnnotations( private fun KotlinType.extractQualifiersFromAnnotations(
isHeadTypeConstructor: Boolean, isHeadTypeConstructor: Boolean,
defaultQualifiersForType: JavaTypeQualifiers? defaultQualifiersForType: JavaDefaultQualifiers?
): JavaTypeQualifiers { ): JavaTypeQualifiers {
val composedAnnotation = val composedAnnotation =
if (isHeadTypeConstructor && typeContainer != null) if (isHeadTypeConstructor && typeContainer != null)
@@ -332,10 +332,10 @@ class SignatureEnhancement(
val nullabilityInfo = val nullabilityInfo =
composedAnnotation.extractNullability() composedAnnotation.extractNullability()
?: defaultTypeQualifier?.nullability?.let { ?: defaultTypeQualifier?.nullabilityQualifier?.let { nullabilityQualifierWithMigrationStatus ->
NullabilityQualifierWithMigrationStatus( NullabilityQualifierWithMigrationStatus(
defaultTypeQualifier.nullability!!, nullabilityQualifierWithMigrationStatus.qualifier,
defaultTypeQualifier.isNullabilityQualifierForWarning nullabilityQualifierWithMigrationStatus.isForWarningOnly
) )
} }
@@ -397,9 +397,9 @@ class SignatureEnhancement(
c.defaultTypeQualifiers c.defaultTypeQualifiers
?.get( ?.get(
if (typeParameterBounds) if (typeParameterBounds)
AnnotationTypeQualifierResolver.QualifierApplicabilityType.TYPE_PARAMETER_BOUNDS AnnotationQualifierApplicabilityType.TYPE_PARAMETER_BOUNDS
else else
AnnotationTypeQualifierResolver.QualifierApplicabilityType.TYPE_USE AnnotationQualifierApplicabilityType.TYPE_USE
) )
) )
) )
@@ -420,7 +420,7 @@ class SignatureEnhancement(
private fun KotlinType.computeQualifiersForOverride( private fun KotlinType.computeQualifiersForOverride(
fromSupertypes: Collection<KotlinType>, fromSupertypes: Collection<KotlinType>,
defaultQualifiersForType: JavaTypeQualifiers?, defaultQualifiersForType: JavaDefaultQualifiers?,
isHeadTypeConstructor: Boolean isHeadTypeConstructor: Boolean
): JavaTypeQualifiers { ): JavaTypeQualifiers {
val superQualifiers = fromSupertypes.map { it.extractQualifiers() } val superQualifiers = fromSupertypes.map { it.extractQualifiers() }
@@ -514,5 +514,5 @@ class SignatureEnhancement(
private data class TypeAndDefaultQualifiers( private data class TypeAndDefaultQualifiers(
val type: KotlinType, val type: KotlinType,
val defaultQualifiers: JavaTypeQualifiers? val defaultQualifiers: JavaDefaultQualifiers?
) )