FIR: rename type parameter: Annotation -> TAnnotation

This commit is contained in:
pyos
2021-09-02 19:38:25 +02:00
committed by teamcityserver
parent c522543e44
commit 476513fe96
2 changed files with 27 additions and 27 deletions
@@ -13,25 +13,25 @@ import org.jetbrains.kotlin.load.java.typeEnhancement.NullabilityQualifierWithMi
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
private typealias TypeQualifierWithApplicability<Annotation> = Pair<Annotation, Set<AnnotationQualifierApplicabilityType>> private typealias TypeQualifierWithApplicability<TAnnotation> = Pair<TAnnotation, Set<AnnotationQualifierApplicabilityType>>
abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>( abstract class AbstractAnnotationTypeQualifierResolver<TAnnotation : Any>(
private val javaTypeEnhancementState: JavaTypeEnhancementState private val javaTypeEnhancementState: JavaTypeEnhancementState
) { ) {
protected abstract val Annotation.annotations: Iterable<Annotation> protected abstract val TAnnotation.annotations: Iterable<TAnnotation>
protected abstract val Annotation.key: Any // TODO: figure out if keying `resolvedNicknames` by `fqName` is safe protected abstract val TAnnotation.key: Any // TODO: figure out if keying `resolvedNicknames` by `fqName` is safe
protected abstract val Annotation.fqName: FqName? protected abstract val TAnnotation.fqName: FqName?
protected abstract fun Annotation.enumArguments(onlyValue: Boolean): Iterable<String> protected abstract fun TAnnotation.enumArguments(onlyValue: Boolean): Iterable<String>
private fun Annotation.findAnnotation(fqName: FqName): Annotation? = private fun TAnnotation.findAnnotation(fqName: FqName): TAnnotation? =
annotations.find { it.fqName == fqName } annotations.find { it.fqName == fqName }
private fun Annotation.hasAnnotation(fqName: FqName): Boolean = private fun TAnnotation.hasAnnotation(fqName: FqName): Boolean =
annotations.any { it.fqName == fqName } annotations.any { it.fqName == fqName }
private val resolvedNicknames = ConcurrentHashMap<Any, Annotation>() private val resolvedNicknames = ConcurrentHashMap<Any, TAnnotation>()
fun resolveTypeQualifierAnnotation(annotation: Annotation): Annotation? { fun resolveTypeQualifierAnnotation(annotation: TAnnotation): TAnnotation? {
if (javaTypeEnhancementState.jsr305.isDisabled) return null if (javaTypeEnhancementState.jsr305.isDisabled) return null
if (annotation.fqName in BUILT_IN_TYPE_QUALIFIER_FQ_NAMES || annotation.hasAnnotation(TYPE_QUALIFIER_FQNAME)) if (annotation.fqName in BUILT_IN_TYPE_QUALIFIER_FQ_NAMES || annotation.hasAnnotation(TYPE_QUALIFIER_FQNAME))
return annotation return annotation
@@ -44,7 +44,7 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
} }
} }
private fun resolveQualifierBuiltInDefaultAnnotation(annotation: Annotation): JavaDefaultQualifiers? { private fun resolveQualifierBuiltInDefaultAnnotation(annotation: TAnnotation): JavaDefaultQualifiers? {
if (javaTypeEnhancementState.disabledDefaultAnnotations) { if (javaTypeEnhancementState.disabledDefaultAnnotations) {
return null return null
} }
@@ -57,7 +57,7 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
} }
} }
private fun resolveDefaultAnnotationState(annotation: Annotation): ReportLevel { private fun resolveDefaultAnnotationState(annotation: TAnnotation): ReportLevel {
val annotationFqname = annotation.fqName val annotationFqname = annotation.fqName
if (annotationFqname != null && annotationFqname in JSPECIFY_DEFAULT_ANNOTATIONS) { if (annotationFqname != null && annotationFqname in JSPECIFY_DEFAULT_ANNOTATIONS) {
return javaTypeEnhancementState.getReportLevelForAnnotation(annotationFqname) return javaTypeEnhancementState.getReportLevelForAnnotation(annotationFqname)
@@ -73,7 +73,7 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
else else
this this
private fun resolveTypeQualifierDefaultAnnotation(annotation: Annotation): TypeQualifierWithApplicability<Annotation>? { private fun resolveTypeQualifierDefaultAnnotation(annotation: TAnnotation): TypeQualifierWithApplicability<TAnnotation>? {
if (javaTypeEnhancementState.jsr305.isDisabled) return null if (javaTypeEnhancementState.jsr305.isDisabled) return null
val typeQualifierDefault = annotation.findAnnotation(TYPE_QUALIFIER_DEFAULT_FQNAME) ?: return null val typeQualifierDefault = annotation.findAnnotation(TYPE_QUALIFIER_DEFAULT_FQNAME) ?: return null
val typeQualifier = annotation.annotations.firstOrNull { resolveTypeQualifierAnnotation(it) != null } ?: return null val typeQualifier = annotation.annotations.firstOrNull { resolveTypeQualifierAnnotation(it) != null } ?: return null
@@ -82,18 +82,18 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
return TypeQualifierWithApplicability(typeQualifier, applicability.allIfTypeUse()) return TypeQualifierWithApplicability(typeQualifier, applicability.allIfTypeUse())
} }
fun isTypeUseAnnotation(annotation: Annotation): Boolean { fun isTypeUseAnnotation(annotation: TAnnotation): Boolean {
// Expect that Java's Target was mapped to Kotlin's Target. // Expect that Java's Target was mapped to Kotlin's Target.
val target = annotation.findAnnotation(StandardNames.FqNames.target) ?: return false val target = annotation.findAnnotation(StandardNames.FqNames.target) ?: return false
return target.enumArguments(onlyValue = false).any { it == KotlinTarget.TYPE.name } return target.enumArguments(onlyValue = false).any { it == KotlinTarget.TYPE.name }
} }
private fun resolveJsr305AnnotationState(annotation: Annotation): ReportLevel { private fun resolveJsr305AnnotationState(annotation: TAnnotation): ReportLevel {
resolveJsr305CustomState(annotation)?.let { return it } resolveJsr305CustomState(annotation)?.let { return it }
return javaTypeEnhancementState.jsr305.globalLevel return javaTypeEnhancementState.jsr305.globalLevel
} }
private fun resolveJsr305CustomState(annotation: Annotation): ReportLevel? { private fun resolveJsr305CustomState(annotation: TAnnotation): ReportLevel? {
javaTypeEnhancementState.jsr305.userDefinedLevelForSpecificAnnotation[annotation.fqName]?.let { return it } javaTypeEnhancementState.jsr305.userDefinedLevelForSpecificAnnotation[annotation.fqName]?.let { return it }
val enumValue = annotation.findAnnotation(MIGRATION_ANNOTATION_FQNAME)?.enumArguments(onlyValue = false)?.firstOrNull() val enumValue = annotation.findAnnotation(MIGRATION_ANNOTATION_FQNAME)?.enumArguments(onlyValue = false)?.firstOrNull()
?: return null ?: return null
@@ -106,7 +106,7 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
} }
private fun extractNullability( private fun extractNullability(
annotation: Annotation, forceWarning: Annotation.() -> Boolean annotation: TAnnotation, forceWarning: TAnnotation.() -> Boolean
): NullabilityQualifierWithMigrationStatus? { ): NullabilityQualifierWithMigrationStatus? {
knownNullability(annotation, annotation.forceWarning())?.let { return it } knownNullability(annotation, annotation.forceWarning())?.let { return it }
@@ -119,11 +119,11 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
} }
fun extractNullability( fun extractNullability(
annotations: Iterable<Annotation>, forceWarning: Annotation.() -> Boolean = { false } annotations: Iterable<TAnnotation>, forceWarning: TAnnotation.() -> Boolean = { false }
): NullabilityQualifierWithMigrationStatus? = ): NullabilityQualifierWithMigrationStatus? =
annotations.firstNotNullOfOrNull { extractNullability(it, forceWarning) } annotations.firstNotNullOfOrNull { extractNullability(it, forceWarning) }
fun extractMutability(annotations: Iterable<Annotation>): MutabilityQualifier? { fun extractMutability(annotations: Iterable<TAnnotation>): MutabilityQualifier? {
return annotations.fold(null as MutabilityQualifier?) { found, annotation -> return annotations.fold(null as MutabilityQualifier?) { found, annotation ->
when (annotation.fqName) { when (annotation.fqName) {
in READ_ONLY_ANNOTATIONS -> MutabilityQualifier.READ_ONLY in READ_ONLY_ANNOTATIONS -> MutabilityQualifier.READ_ONLY
@@ -133,7 +133,7 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
} }
} }
private fun extractDefaultQualifiers(annotation: Annotation): JavaDefaultQualifiers? { private fun extractDefaultQualifiers(annotation: TAnnotation): JavaDefaultQualifiers? {
resolveQualifierBuiltInDefaultAnnotation(annotation)?.let { return it } resolveQualifierBuiltInDefaultAnnotation(annotation)?.let { return it }
val (typeQualifier, applicability) = resolveTypeQualifierDefaultAnnotation(annotation) val (typeQualifier, applicability) = resolveTypeQualifierDefaultAnnotation(annotation)
@@ -147,7 +147,7 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
} }
fun extractAndMergeDefaultQualifiers( fun extractAndMergeDefaultQualifiers(
oldQualifiers: JavaTypeQualifiersByElementType?, annotations: Iterable<Annotation> oldQualifiers: JavaTypeQualifiersByElementType?, annotations: Iterable<TAnnotation>
): JavaTypeQualifiersByElementType? { ): JavaTypeQualifiersByElementType? {
if (javaTypeEnhancementState.disabledDefaultAnnotations) return oldQualifiers if (javaTypeEnhancementState.disabledDefaultAnnotations) return oldQualifiers
@@ -169,7 +169,7 @@ abstract class AbstractAnnotationTypeQualifierResolver<Annotation : Any>(
return if (!wasUpdate) oldQualifiers else JavaTypeQualifiersByElementType(defaultQualifiersByType) return if (!wasUpdate) oldQualifiers else JavaTypeQualifiersByElementType(defaultQualifiersByType)
} }
private fun knownNullability(annotation: Annotation, forceWarning: Boolean): NullabilityQualifierWithMigrationStatus? { private fun knownNullability(annotation: TAnnotation, forceWarning: Boolean): NullabilityQualifierWithMigrationStatus? {
val fqName = annotation.fqName ?: return null val fqName = annotation.fqName ?: return null
val reportLevel = javaTypeEnhancementState.getReportLevelForAnnotation(fqName) val reportLevel = javaTypeEnhancementState.getReportLevelForAnnotation(fqName)
if (reportLevel.isIgnore) return null if (reportLevel.isIgnore) return null
@@ -15,11 +15,11 @@ import org.jetbrains.kotlin.types.model.TypeParameterMarker
import org.jetbrains.kotlin.types.model.TypeSystemContext import org.jetbrains.kotlin.types.model.TypeSystemContext
import org.jetbrains.kotlin.types.model.TypeVariance import org.jetbrains.kotlin.types.model.TypeVariance
abstract class AbstractSignatureParts<Annotation : Any> { abstract class AbstractSignatureParts<TAnnotation : Any> {
// TODO: some of this might be better off as parameters // TODO: some of this might be better off as parameters
abstract val annotationTypeQualifierResolver: AbstractAnnotationTypeQualifierResolver<Annotation> abstract val annotationTypeQualifierResolver: AbstractAnnotationTypeQualifierResolver<TAnnotation>
abstract val enableImprovementsInStrictMode: Boolean abstract val enableImprovementsInStrictMode: Boolean
abstract val containerAnnotations: Iterable<Annotation> abstract val containerAnnotations: Iterable<TAnnotation>
abstract val containerApplicabilityType: AnnotationQualifierApplicabilityType abstract val containerApplicabilityType: AnnotationQualifierApplicabilityType
abstract val containerDefaultTypeQualifiers: JavaTypeQualifiersByElementType? abstract val containerDefaultTypeQualifiers: JavaTypeQualifiersByElementType?
abstract val containerIsVarargParameter: Boolean abstract val containerIsVarargParameter: Boolean
@@ -30,9 +30,9 @@ abstract class AbstractSignatureParts<Annotation : Any> {
open val forceOnlyHeadTypeConstructor: Boolean open val forceOnlyHeadTypeConstructor: Boolean
get() = false get() = false
abstract val Annotation.forceWarning: Boolean abstract val TAnnotation.forceWarning: Boolean
abstract val KotlinTypeMarker.annotations: Iterable<Annotation> abstract val KotlinTypeMarker.annotations: Iterable<TAnnotation>
abstract val KotlinTypeMarker.enhancedForWarnings: KotlinTypeMarker? abstract val KotlinTypeMarker.enhancedForWarnings: KotlinTypeMarker?
abstract val KotlinTypeMarker.fqNameUnsafe: FqNameUnsafe? abstract val KotlinTypeMarker.fqNameUnsafe: FqNameUnsafe?
abstract fun KotlinTypeMarker.isEqual(other: KotlinTypeMarker): Boolean abstract fun KotlinTypeMarker.isEqual(other: KotlinTypeMarker): Boolean