Mapping of JavaDoc deprecated to Kotlin Deprecated + a pair of tests

This commit is contained in:
Mikhail Glukhikh
2015-08-04 14:39:53 +03:00
parent 7d02b45558
commit 45cc3c025f
17 changed files with 118 additions and 8 deletions
@@ -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) {
@@ -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()
}
@@ -28,4 +28,6 @@ public interface JavaAnnotationOwner extends JavaElement {
@Nullable
JavaAnnotation findAnnotation(@NotNull FqName fqName);
boolean isDeprecatedInJavaDoc();
}