Refactor: extract AnnotationDescriptor.annotationClass utility
This commit is contained in:
+2
-1
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.resolve.constants.ConstantValue
|
||||
import org.jetbrains.kotlin.resolve.constants.ConstantValueFactory
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass
|
||||
import org.jetbrains.kotlin.serialization.deserialization.findNonGenericClassAcrossDependencies
|
||||
import org.jetbrains.kotlin.types.*
|
||||
@@ -86,7 +87,7 @@ class LazyJavaAnnotationDescriptor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun getAnnotationClass() = getType().constructor.declarationDescriptor as ClassDescriptor
|
||||
private fun getAnnotationClass() = annotationClass!!
|
||||
|
||||
private fun resolveAnnotationArgument(argument: JavaAnnotationArgument?): ConstantValue<*>? {
|
||||
return when (argument) {
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.descriptors.annotations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
|
||||
interface Annotated {
|
||||
val annotations: Annotations
|
||||
@@ -76,8 +76,8 @@ interface Annotations : Iterable<AnnotationDescriptor> {
|
||||
}
|
||||
|
||||
fun checkAnnotationName(annotation: AnnotationDescriptor, fqName: FqName): Boolean {
|
||||
val descriptor = annotation.type.constructor.declarationDescriptor
|
||||
return descriptor is ClassDescriptor && fqName.toUnsafe() == DescriptorUtils.getFqName(descriptor)
|
||||
val descriptor = annotation.annotationClass
|
||||
return descriptor != null && fqName.toUnsafe() == DescriptorUtils.getFqName(descriptor)
|
||||
}
|
||||
|
||||
class FilteredAnnotations(
|
||||
@@ -108,7 +108,7 @@ class FilteredAnnotations(
|
||||
override fun iterator() = delegate.filter { shouldBeReturned(it) }.iterator()
|
||||
|
||||
private fun shouldBeReturned(annotation: AnnotationDescriptor): Boolean {
|
||||
val descriptor = annotation.type.constructor.declarationDescriptor
|
||||
val descriptor = annotation.annotationClass
|
||||
return descriptor != null && DescriptorUtils.getFqName(descriptor).let { fqName ->
|
||||
fqName.isSafe && fqNameFilter(fqName.toSafe())
|
||||
}
|
||||
|
||||
+3
-3
@@ -16,9 +16,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.descriptors.annotations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
|
||||
class AnnotationsImpl : Annotations {
|
||||
private val annotations: List<AnnotationDescriptor>
|
||||
@@ -41,8 +41,8 @@ class AnnotationsImpl : Annotations {
|
||||
override fun isEmpty() = targetedAnnotations.isEmpty()
|
||||
|
||||
override fun findAnnotation(fqName: FqName) = annotations.firstOrNull {
|
||||
val descriptor = it.type.constructor.declarationDescriptor
|
||||
descriptor is ClassDescriptor && fqName.toUnsafe() == DescriptorUtils.getFqName(descriptor)
|
||||
val descriptor = it.annotationClass
|
||||
descriptor != null && fqName.toUnsafe() == DescriptorUtils.getFqName(descriptor)
|
||||
}
|
||||
|
||||
override fun getUseSiteTargetedAnnotations(): List<AnnotationWithTarget> {
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.resolve.constants.AnnotationValue
|
||||
import org.jetbrains.kotlin.resolve.constants.ArrayValue
|
||||
import org.jetbrains.kotlin.resolve.constants.ConstantValue
|
||||
import org.jetbrains.kotlin.resolve.constants.KClassValue
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.hasDefaultValue
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NotFoundClasses
|
||||
import org.jetbrains.kotlin.types.*
|
||||
@@ -396,7 +397,7 @@ internal class DescriptorRendererImpl(
|
||||
|
||||
val sortedAnnotations = annotated.annotations.getAllAnnotations()
|
||||
for ((annotation, target) in sortedAnnotations) {
|
||||
val annotationClass = annotation.type.constructor.declarationDescriptor as ClassDescriptor
|
||||
val annotationClass = annotation.annotationClass!!
|
||||
|
||||
if (!excluded.contains(DescriptorUtils.getFqNameSafe(annotationClass))) {
|
||||
append(renderAnnotation(annotation, target)).append(" ")
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
|
||||
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||
@@ -407,4 +408,7 @@ fun DeclarationDescriptor.isAncestorOf(descriptor: DeclarationDescriptor, strict
|
||||
|
||||
fun DeclarationDescriptor.isCompanionObject(): Boolean = DescriptorUtils.isCompanionObject(this)
|
||||
|
||||
fun ClassDescriptor.isSubclassOf(superclass: ClassDescriptor): Boolean = DescriptorUtils.isSubclass(this, superclass)
|
||||
fun ClassDescriptor.isSubclassOf(superclass: ClassDescriptor): Boolean = DescriptorUtils.isSubclass(this, superclass)
|
||||
|
||||
val AnnotationDescriptor.annotationClass: ClassDescriptor?
|
||||
get() = type.constructor.declarationDescriptor as? ClassDescriptor
|
||||
+3
-2
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
|
||||
class DeserializedAnnotations(
|
||||
@@ -42,8 +43,8 @@ open class DeserializedAnnotationsWithPossibleTargets(
|
||||
override fun findAnnotation(fqName: FqName) = annotations().firstOrNull {
|
||||
annotationWithTarget ->
|
||||
if (annotationWithTarget.target != null) return@firstOrNull false
|
||||
val descriptor = annotationWithTarget.annotation.type.constructor.declarationDescriptor
|
||||
descriptor is ClassDescriptor && fqName.toUnsafe() == DescriptorUtils.getFqName(descriptor)
|
||||
val descriptor = annotationWithTarget.annotation.annotationClass
|
||||
descriptor != null && fqName.toUnsafe() == DescriptorUtils.getFqName(descriptor)
|
||||
}?.annotation
|
||||
|
||||
override fun findExternalAnnotation(fqName: FqName) = null
|
||||
|
||||
Reference in New Issue
Block a user