FIR: rename type parameter: Annotation -> TAnnotation
This commit is contained in:
+22
-22
@@ -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
|
||||||
|
|||||||
+5
-5
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user