Add default implementation for Annotations.findAnnotation

This commit is contained in:
Alexander Udalov
2017-07-19 15:00:33 +03:00
parent def3f73fdd
commit 5128b8a409
6 changed files with 3 additions and 17 deletions
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotated
import org.jetbrains.kotlin.descriptors.annotations.AnnotatedImpl
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.name.FqName
interface WrappedAnnotated : Annotated {
val originalAnnotated: Annotated
@@ -34,8 +33,6 @@ class AnnotatedWithOnlyTargetedAnnotations(original: Annotated) : Annotated {
private class UseSiteTargetedAnnotations(private val additionalAnnotations: Annotations) : Annotations {
override fun isEmpty() = true
override fun findAnnotation(fqName: FqName) = null
override fun getUseSiteTargetedAnnotations() = getAdditionalTargetedAnnotations()
override fun getAllAnnotations() = getAdditionalTargetedAnnotations()
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.resolve.AnnotationResolver
@@ -64,8 +63,6 @@ class LazyAnnotations(
AnnotationWithTarget(descriptor, target)
}
override fun findAnnotation(fqName: FqName): AnnotationDescriptor? = firstOrNull { it.fqName == fqName }
override fun getUseSiteTargetedAnnotations(): List<AnnotationWithTarget> {
return annotationEntries
.mapNotNull {
@@ -26,9 +26,9 @@ interface Annotations : Iterable<AnnotationDescriptor> {
fun isEmpty(): Boolean
fun findAnnotation(fqName: FqName): AnnotationDescriptor?
fun findAnnotation(fqName: FqName): AnnotationDescriptor? = firstOrNull { it.fqName == fqName }
fun hasAnnotation(fqName: FqName) = findAnnotation(fqName) != null
fun hasAnnotation(fqName: FqName): Boolean = findAnnotation(fqName) != null
fun findExternalAnnotation(fqName: FqName): AnnotationDescriptor? = null
@@ -16,8 +16,6 @@
package org.jetbrains.kotlin.descriptors.annotations
import org.jetbrains.kotlin.name.FqName
class AnnotationsImpl : Annotations {
private val annotations: List<AnnotationDescriptor>
private val targetedAnnotations: List<AnnotationWithTarget>
@@ -38,8 +36,6 @@ class AnnotationsImpl : Annotations {
override fun isEmpty() = targetedAnnotations.isEmpty()
override fun findAnnotation(fqName: FqName) = annotations.firstOrNull { it.fqName == fqName }
override fun getUseSiteTargetedAnnotations(): List<AnnotationWithTarget> {
return targetedAnnotations
.filter { it.target != null }
@@ -58,14 +58,12 @@ fun TypeParameterDescriptor.hasOnlyInputTypesAnnotation(): Boolean = annotations
fun getExactInAnnotations(): Annotations = AnnotationsWithOnly(EXACT_ANNOTATION_FQ_NAME)
private class AnnotationsWithOnly(val presentAnnotation: FqName): Annotations {
override fun iterator(): Iterator<AnnotationDescriptor> = listOf<AnnotationDescriptor>().iterator()
override fun iterator(): Iterator<AnnotationDescriptor> = emptyList<AnnotationDescriptor>().iterator()
override fun isEmpty(): Boolean = false
override fun hasAnnotation(fqName: FqName): Boolean = fqName == this.presentAnnotation
override fun findAnnotation(fqName: FqName): AnnotationDescriptor? = null
override fun getUseSiteTargetedAnnotations(): List<AnnotationWithTarget> = emptyList()
override fun getAllAnnotations(): List<AnnotationWithTarget> = emptyList()
@@ -31,8 +31,6 @@ open class DeserializedAnnotations(
override fun isEmpty(): Boolean = annotations.isEmpty()
override fun findAnnotation(fqName: FqName) = annotations.firstOrNull { it.fqName == fqName }
override fun getUseSiteTargetedAnnotations(): List<AnnotationWithTarget> = emptyList()
override fun getAllAnnotations(): List<AnnotationWithTarget> = annotations.map { AnnotationWithTarget(it, null) }