diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java index 573316bb174..42e64da1497 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java @@ -37,6 +37,8 @@ import org.jetbrains.org.objectweb.asm.*; import java.lang.annotation.*; import java.util.*; +import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getAnnotationClass; + public abstract class AnnotationCodegen { public static final class JvmFlagAnnotation { @@ -289,7 +291,7 @@ public abstract class AnnotationCodegen { @Nullable private String genAnnotation(@NotNull AnnotationDescriptor annotationDescriptor) { - ClassifierDescriptor classifierDescriptor = annotationDescriptor.getType().getConstructor().getDeclarationDescriptor(); + ClassifierDescriptor classifierDescriptor = getAnnotationClass(annotationDescriptor); assert classifierDescriptor != null : "Annotation descriptor has no class: " + annotationDescriptor; RetentionPolicy rp = getRetentionPolicy(classifierDescriptor); if (rp == RetentionPolicy.SOURCE && !typeMapper.getClassBuilderMode().generateSourceRetentionAnnotations) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/extensions/AnnotationBasedExtension.kt b/compiler/frontend/src/org/jetbrains/kotlin/extensions/AnnotationBasedExtension.kt index 1236a8d9c61..ed1f0990d57 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/extensions/AnnotationBasedExtension.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/extensions/AnnotationBasedExtension.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.psi.KtModifierListOwner +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.types.TypeUtils @@ -44,7 +45,7 @@ interface AnnotationBasedExtension { visitedAnnotations: MutableSet = hashSetOf(), allowMetaAnnotations: Boolean = true ): Boolean { - val annotationType = type.constructor.declarationDescriptor ?: return false + val annotationType = annotationClass ?: return false val annotationFqName = annotationType.fqNameSafe.asString() if (annotationFqName in visitedAnnotations) return false // Prevent infinite recursion if (annotationFqName in getAnnotationFqNames(modifierListOwner)) return true diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt index d11907bc758..fbd947c5061 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAnnotationEntries import org.jetbrains.kotlin.resolve.constants.ArrayValue import org.jetbrains.kotlin.resolve.constants.EnumValue +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.getAnnotationRetention import org.jetbrains.kotlin.resolve.descriptorUtil.isRepeatableAnnotation import org.jetbrains.kotlin.resolve.inline.InlineUtil @@ -135,7 +136,7 @@ class AnnotationChecker(private val additionalCheckers: Iterable { - val classDescriptor = descriptor.type.constructor.declarationDescriptor as? ClassDescriptor ?: return emptySet() + val classDescriptor = descriptor.annotationClass ?: return emptySet() return applicableTargetSet(classDescriptor) ?: KotlinTarget.DEFAULT_TARGET_SET } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt index a759407b37b..52c7d17a492 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceivers +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperClassifiers import org.jetbrains.kotlin.resolve.scopes.LexicalScope @@ -79,10 +80,10 @@ private fun ReceiverValue.extractDslMarkerFqNames(): Set { } private fun Annotations.extractDslMarkerFqNames() = - filter(AnnotationDescriptor::isDslMarker).map { it.type.constructor.declarationDescriptor!!.fqNameSafe } + filter(AnnotationDescriptor::isDslMarker).map { it.annotationClass!!.fqNameSafe } private fun AnnotationDescriptor.isDslMarker(): Boolean { - val classDescriptor = type.constructor.declarationDescriptor as? ClassDescriptor ?: return false + val classDescriptor = annotationClass ?: return false return classDescriptor.annotations.hasAnnotation(DSL_MARKER_FQ_NAME) } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightModifierList.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightModifierList.kt index 41848d25562..3c8d3dff50f 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightModifierList.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightModifierList.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.AnnotationChecker +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.source.getPsi @@ -96,7 +97,7 @@ private fun lightAnnotationsForEntries(lightModifierList: KtLightModifierList<*> return getAnnotationDescriptors(annotatedKtDeclaration, lightModifierListOwner) .mapNotNull { descriptor -> - val fqName = descriptor.type.constructor.declarationDescriptor?.fqNameUnsafe?.asString() ?: return@mapNotNull null + val fqName = descriptor.annotationClass?.fqNameUnsafe?.asString() ?: return@mapNotNull null val entry = descriptor.source.getPsi() as? KtAnnotationEntry ?: return@mapNotNull null Pair(fqName, entry) } @@ -111,6 +112,7 @@ private fun lightAnnotationsForEntries(lightModifierList: KtLightModifierList<*> } } } + private fun getAnnotationDescriptors(declaration: KtDeclaration?, annotatedLightElement: KtLightElement<*, *>): List { val descriptor = declaration?.let { LightClassGenerationSupport.getInstance(it.project).resolveToDescriptor(it) } val annotatedDescriptor = when { @@ -147,4 +149,4 @@ private fun AnnotationWithTarget.matches(annotated: KtLightElement<*, *>): Boole val declarationSiteTargets = AnnotationChecker.applicableTargetSet(annotation) return KotlinTarget.FIELD in declarationSiteTargets && KotlinTarget.PROPERTY !in declarationSiteTargets -} +} \ No newline at end of file diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt index 27e586c8cc1..b8b3b64166d 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt @@ -20,14 +20,14 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationArgumentVisitor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.resolve.constants.* +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.Type import org.jetbrains.kotlin.types.ErrorUtils class AnnotationSerializer(private val stringTable: StringTable) { fun serializeAnnotation(annotation: AnnotationDescriptor): ProtoBuf.Annotation = ProtoBuf.Annotation.newBuilder().apply { - val annotationClass = annotation.type.constructor.declarationDescriptor as? ClassDescriptor - ?: error("Annotation type is not a class: ${annotation.type}") + val annotationClass = annotation.annotationClass ?: error("Annotation type is not a class: ${annotation.type}") if (ErrorUtils.isError(annotationClass)) { error("Unresolved annotation type: ${annotation.type} at ${annotation.source.containingFile}") } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index 44ed508cec4..c492b99c3b4 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -38,6 +38,7 @@ import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.constants.EnumValue +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters @@ -158,7 +159,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { }.forEach { checkDescriptor(it, callable) } callable.annotations.forEach { - val annotationClassDescriptor = it.type.constructor.declarationDescriptor as ClassDescriptor + val annotationClassDescriptor = it.annotationClass!! checkDescriptor(annotationClassDescriptor, callable) Assert.assertEquals( diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt index 6b3e1c547fb..2f4220604a7 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt @@ -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) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt index 179531acfe3..97c1f647eaa 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt @@ -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 { } 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()) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.kt index 5b5265032b9..ee969875c3e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.kt @@ -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 @@ -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 { diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 14371cc109d..ee710a3351a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -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(" ") diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt index 9d3c0653db0..40738cf2e7f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt @@ -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) \ No newline at end of file +fun ClassDescriptor.isSubclassOf(superclass: ClassDescriptor): Boolean = DescriptorUtils.isSubclass(this, superclass) + +val AnnotationDescriptor.annotationClass: ClassDescriptor? + get() = type.constructor.declarationDescriptor as? ClassDescriptor \ No newline at end of file diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedAnnotations.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedAnnotations.kt index da442b3f191..2b20ae6b071 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedAnnotations.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedAnnotations.kt @@ -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 diff --git a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinAnnotatedElementsSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinAnnotatedElementsSearcher.kt index 57c35168e4b..709899fe6f7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinAnnotatedElementsSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinAnnotatedElementsSearcher.kt @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class KotlinAnnotatedElementsSearcher : QueryExecutor { @@ -101,7 +102,7 @@ class KotlinAnnotatedElementsSearcher : QueryExecutor { AnnotationDescriptor descriptor = context.bindingContext().get(BindingContext.ANNOTATION, entry); if (descriptor == null) continue; - ClassifierDescriptor classifierDescriptor = descriptor.getType().getConstructor().getDeclarationDescriptor(); + ClassifierDescriptor classifierDescriptor = getAnnotationClass(descriptor); if (classifierDescriptor == null) continue; KotlinRetention retention = DescriptorUtilsKt.getAnnotationRetention(classifierDescriptor); diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUAnnotation.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUAnnotation.kt index 3006cedcf77..14bab26b0b1 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUAnnotation.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUAnnotation.kt @@ -4,6 +4,7 @@ import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.uast.* @@ -14,7 +15,7 @@ class KotlinUAnnotation( private val resolvedAnnotation by lz { psi.analyze()[BindingContext.ANNOTATION, psi] } override val qualifiedName: String? - get() = resolvedAnnotation?.type?.constructor?.declarationDescriptor?.fqNameSafe?.asString() + get() = resolvedAnnotation?.annotationClass?.fqNameSafe?.asString() override val attributeValues by lz { val context = getUastContext() @@ -28,7 +29,7 @@ class KotlinUAnnotation( } override fun resolve(): PsiClass? { - val descriptor = resolvedAnnotation?.type?.constructor?.declarationDescriptor ?: return null + val descriptor = resolvedAnnotation?.annotationClass ?: return null return descriptor.toSource()?.getMaybeLightElement(this) as? PsiClass }