From d6017420decc5bffcaf19adbec9cfe9ed9008464 Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Fri, 11 Dec 2020 17:29:12 +0300 Subject: [PATCH] Mark freshly supported annotations to use that mark for reporting corresponding warnings --- .../load/java/structure/impl/JavaAnnotationImpl.java | 5 +++++ .../java/structure/impl/classFiles/BinaryJavaClass.kt | 8 ++++---- .../jetbrains/kotlin/load/java/structure/javaElements.kt | 4 ++-- .../kotlin/load/java/components/JavaAnnotationMapper.kt | 8 ++++++-- .../java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt | 5 ++++- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java index 49598467704..0ca7930677e 100644 --- a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java +++ b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/JavaAnnotationImpl.java @@ -94,4 +94,9 @@ public class JavaAnnotationImpl extends JavaElementImpl implement ExternalAnnotationsManager externalAnnotationManager = ExternalAnnotationsManager.getInstance(psi.getProject()); return externalAnnotationManager.isExternalAnnotation(psi); } + + @Override + public boolean isFreshlySupportedTypeUseAnnotation() { + return false; + } } diff --git a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt index 35b9f415a26..f525228146c 100644 --- a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt +++ b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt @@ -96,13 +96,13 @@ class BinaryJavaClass( val baseType: JavaType = if (typeReference.superTypeIndex == -1) superclass!! else interfaces[typeReference.superTypeIndex] val targetType = BinaryJavaAnnotation.computeTargetType(baseType, translatedPath) - return BinaryJavaAnnotation.addAnnotation(targetType as JavaPlainType, descriptor, context, signatureParser) + return BinaryJavaAnnotation.addAnnotation(targetType as JavaPlainType, descriptor, context, signatureParser, true) } TypeReference.CLASS_TYPE_PARAMETER_BOUND -> { val baseType = computeTypeParameterBound(typeParameters, typeReference) val targetType = BinaryJavaAnnotation.computeTargetType(baseType, translatedPath) - return BinaryJavaAnnotation.addAnnotation(targetType as JavaPlainType, descriptor, context, signatureParser) + return BinaryJavaAnnotation.addAnnotation(targetType as JavaPlainType, descriptor, context, signatureParser, true) } } } @@ -110,11 +110,11 @@ class BinaryJavaClass( return when (typeReference.sort) { TypeReference.CLASS_TYPE_PARAMETER -> BinaryJavaAnnotation.addAnnotation( - typeParameters[typeReference.typeParameterIndex] as BinaryJavaTypeParameter, descriptor, context, signatureParser + typeParameters[typeReference.typeParameterIndex] as BinaryJavaTypeParameter, descriptor, context, signatureParser, true ) TypeReference.CLASS_TYPE_PARAMETER_BOUND -> BinaryJavaAnnotation.addAnnotation( - computeTypeParameterBound(typeParameters, typeReference) as JavaPlainType, descriptor, context, signatureParser + computeTypeParameterBound(typeParameters, typeReference) as JavaPlainType, descriptor, context, signatureParser, true ) else -> null } diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/structure/javaElements.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/structure/javaElements.kt index 59ad273fb98..10fe0bc09bb 100644 --- a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/structure/javaElements.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/structure/javaElements.kt @@ -48,8 +48,8 @@ interface JavaTypeParameterListOwner : JavaElement { interface JavaAnnotation : JavaElement { val arguments: Collection val classId: ClassId? - val isIdeExternalAnnotation: Boolean - get() = false + val isIdeExternalAnnotation: Boolean get() = false + val isFreshlySupportedTypeUseAnnotation: Boolean get() = false fun resolve(): JavaClass? } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt index 442aa6f1ee8..64f86419be9 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt @@ -45,14 +45,18 @@ object JavaAnnotationMapper { internal val TARGET_ANNOTATION_ALLOWED_TARGETS = Name.identifier("allowedTargets") internal val RETENTION_ANNOTATION_VALUE = Name.identifier("value") - fun mapOrResolveJavaAnnotation(annotation: JavaAnnotation, c: LazyJavaResolverContext): AnnotationDescriptor? = + fun mapOrResolveJavaAnnotation( + annotation: JavaAnnotation, + c: LazyJavaResolverContext, + isFreshlySupportedAnnotation: Boolean = false + ): AnnotationDescriptor? = when (annotation.classId) { ClassId.topLevel(TARGET_ANNOTATION) -> JavaTargetAnnotationDescriptor(annotation, c) ClassId.topLevel(RETENTION_ANNOTATION) -> JavaRetentionAnnotationDescriptor(annotation, c) ClassId.topLevel(REPEATABLE_ANNOTATION) -> JavaAnnotationDescriptor(c, annotation, StandardNames.FqNames.repeatable) ClassId.topLevel(DOCUMENTED_ANNOTATION) -> JavaAnnotationDescriptor(c, annotation, StandardNames.FqNames.mustBeDocumented) ClassId.topLevel(DEPRECATED_ANNOTATION) -> null - else -> LazyJavaAnnotationDescriptor(c, annotation) + else -> LazyJavaAnnotationDescriptor(c, annotation, isFreshlySupportedAnnotation) } fun findMappedJavaAnnotation( diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt index dd0edcfd178..f37c80ddd3b 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt @@ -39,7 +39,8 @@ import org.jetbrains.kotlin.types.isError class LazyJavaAnnotationDescriptor( private val c: LazyJavaResolverContext, - private val javaAnnotation: JavaAnnotation + private val javaAnnotation: JavaAnnotation, + isFreshlySupportedAnnotation: Boolean = false ) : AnnotationDescriptor, PossiblyExternalAnnotationDescriptor { override val fqName by c.storageManager.createNullableLazyValue { javaAnnotation.classId?.asSingleFqName() @@ -115,4 +116,6 @@ class LazyJavaAnnotationDescriptor( ) override val isIdeExternalAnnotation: Boolean = javaAnnotation.isIdeExternalAnnotation + + val isFreshlySupportedTypeUseAnnotation: Boolean = javaAnnotation.isFreshlySupportedTypeUseAnnotation || isFreshlySupportedAnnotation }