Mapping of JavaDoc deprecated to Kotlin Deprecated + a pair of tests
This commit is contained in:
+9
-5
@@ -48,8 +48,7 @@ public object JavaAnnotationMapper {
|
||||
public fun mapOrResolveJavaAnnotation(annotation: JavaAnnotation, c: LazyJavaResolverContext): AnnotationDescriptor? =
|
||||
when (annotation.classId) {
|
||||
ClassId.topLevel(javaTargetFqName) -> JavaTargetAnnotationDescriptor(annotation, c)
|
||||
ClassId.topLevel(javaDeprecatedFqName) -> JavaDeprecatedAnnotationDescriptor(annotation, c)
|
||||
ClassId.topLevel(javaRetentionFqName) -> null
|
||||
ClassId.topLevel(javaRetentionFqName), ClassId.topLevel(javaDeprecatedFqName) -> null
|
||||
else -> c.resolveAnnotation(annotation)
|
||||
}
|
||||
|
||||
@@ -70,6 +69,12 @@ public object JavaAnnotationMapper {
|
||||
null
|
||||
}
|
||||
}
|
||||
if (kotlinName == KotlinBuiltIns.FQ_NAMES.deprecated) {
|
||||
val javaAnnotation = annotationOwner.findAnnotation(javaDeprecatedFqName)
|
||||
if (javaAnnotation != null || annotationOwner.isDeprecatedInJavaDoc) {
|
||||
return JavaDeprecatedAnnotationDescriptor(javaAnnotation, c)
|
||||
}
|
||||
}
|
||||
return kotlinToJavaNameMap[kotlinName]?.let {
|
||||
annotationOwner.findAnnotation(it)?.let {
|
||||
mapOrResolveJavaAnnotation(it, c)
|
||||
@@ -79,8 +84,7 @@ public object JavaAnnotationMapper {
|
||||
|
||||
// kotlin.annotation.annotation is treated separately
|
||||
private val kotlinToJavaNameMap: Map<FqName, FqName> =
|
||||
mapOf(KotlinBuiltIns.FQ_NAMES.target to javaTargetFqName,
|
||||
KotlinBuiltIns.FQ_NAMES.deprecated to javaDeprecatedFqName)
|
||||
mapOf(KotlinBuiltIns.FQ_NAMES.target to javaTargetFqName)
|
||||
|
||||
public val javaToKotlinNameMap: Map<FqName, FqName> =
|
||||
mapOf(javaTargetFqName to KotlinBuiltIns.FQ_NAMES.target,
|
||||
@@ -108,7 +112,7 @@ abstract class AbstractJavaAnnotationDescriptor(
|
||||
}
|
||||
|
||||
class JavaDeprecatedAnnotationDescriptor(
|
||||
annotation: JavaAnnotation,
|
||||
annotation: JavaAnnotation?,
|
||||
c: LazyJavaResolverContext
|
||||
): AbstractJavaAnnotationDescriptor(c, annotation, c.module.builtIns.deprecatedAnnotation) {
|
||||
|
||||
|
||||
+2
-3
@@ -19,11 +19,9 @@ package org.jetbrains.kotlin.load.java.lazy
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.load.java.components.JavaAnnotationMapper
|
||||
import org.jetbrains.kotlin.load.java.lazy.descriptors.resolveAnnotation
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaAnnotation
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaAnnotationOwner
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
|
||||
class LazyJavaAnnotations(
|
||||
private val c: LazyJavaResolverContext,
|
||||
@@ -42,7 +40,8 @@ class LazyJavaAnnotations(
|
||||
|
||||
override fun iterator() =
|
||||
(annotationOwner.annotations.asSequence().map(annotationDescriptors)
|
||||
+ JavaAnnotationMapper.findMappedJavaAnnotation(KotlinBuiltIns.FQ_NAMES.annotation, annotationOwner, c)).filterNotNull().iterator()
|
||||
+ JavaAnnotationMapper.findMappedJavaAnnotation(KotlinBuiltIns.FQ_NAMES.annotation, annotationOwner, c)
|
||||
+ JavaAnnotationMapper.findMappedJavaAnnotation(KotlinBuiltIns.FQ_NAMES.deprecated, annotationOwner, c)).filterNotNull().iterator()
|
||||
|
||||
override fun isEmpty() = !iterator().hasNext()
|
||||
}
|
||||
|
||||
+2
@@ -28,4 +28,6 @@ public interface JavaAnnotationOwner extends JavaElement {
|
||||
|
||||
@Nullable
|
||||
JavaAnnotation findAnnotation(@NotNull FqName fqName);
|
||||
|
||||
boolean isDeprecatedInJavaDoc();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user