diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt index 1f3f11fe647..b412aa09435 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt @@ -18,10 +18,9 @@ package org.jetbrains.kotlin.idea.decompiler.stubBuilder import com.intellij.psi.PsiElement import com.intellij.psi.stubs.StubElement +import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.MODALITY import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.VISIBILITY -import org.jetbrains.kotlin.lexer.JetTokens -import org.jetbrains.kotlin.psi.JetSecondaryConstructor import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes import org.jetbrains.kotlin.psi.stubs.impl.KotlinClassStubImpl import org.jetbrains.kotlin.psi.stubs.impl.KotlinFunctionStubImpl @@ -33,6 +32,7 @@ import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.CallableKind import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.MemberKind import org.jetbrains.kotlin.serialization.ProtoBuf.Modality +import org.jetbrains.kotlin.serialization.deserialization.AnnotatedCallableKind import org.jetbrains.kotlin.serialization.deserialization.NameResolver import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer @@ -101,10 +101,24 @@ private class CallableClsStubBuilder( val relevantModifiers = if (isModalityIrrelevant) listOf(VISIBILITY) else listOf(VISIBILITY, MODALITY) val modifierListStubImpl = createModifierListStubForDeclaration(callableStub, callableProto.getFlags(), relevantModifiers) - val annotationIds = c.components.annotationLoader.loadCallableAnnotations( - protoContainer, callableProto, c.nameResolver, callableProto.annotatedCallableKind - ) - createAnnotationStubs(annotationIds, modifierListStubImpl, needWrappingAnnotationEntries = isPrimaryConstructor) + + fun createAnnotationStubs(kind: AnnotatedCallableKind) { + val annotationIds = c.components.annotationLoader.loadCallableAnnotations(protoContainer, callableProto, c.nameResolver, kind) + val target = if (kind == AnnotatedCallableKind.PROPERTY_FIELD) AnnotationUseSiteTarget.FIELD else null + createAnnotationStubs(annotationIds, + modifierListStubImpl, + needWrappingAnnotationEntries = isPrimaryConstructor, + target = target) + } + + val kind = callableProto.annotatedCallableKind + if (kind == AnnotatedCallableKind.PROPERTY) { + createAnnotationStubs(AnnotatedCallableKind.PROPERTY_SYNTHETIC_FUNCTION) + createAnnotationStubs(AnnotatedCallableKind.PROPERTY_FIELD) + } + else { + createAnnotationStubs(kind) + } } private fun doCreateCallableStub(): StubElement { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt index b66cc21dac1..7babe893efb 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt @@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.stubs.StubElement import com.intellij.util.io.StringRef import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.lexer.JetModifierKeywordToken import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.name.ClassId @@ -173,7 +174,8 @@ fun createModifierListStub( fun createAnnotationStubs( annotationIds: List, parent: KotlinStubBaseImpl<*>, - needWrappingAnnotationEntries: Boolean = false + needWrappingAnnotationEntries: Boolean = false, + target: AnnotationUseSiteTarget? = null ) { if (annotationIds.isEmpty()) return @@ -188,6 +190,9 @@ fun createAnnotationStubs( shortName = annotationClassId.getShortClassName().ref(), hasValueArguments = false ) + if (target != null) { + KotlinAnnotationUseSiteTargetStubImpl(annotationEntryStubImpl, StringRef.fromString(target.name())!!) + } val constructorCallee = KotlinPlaceHolderStubImpl(annotationEntryStubImpl, JetStubElementTypes.CONSTRUCTOR_CALLEE) val typeReference = KotlinPlaceHolderStubImpl(constructorCallee, JetStubElementTypes.TYPE_REFERENCE) createStubForTypeName(annotationClassId, typeReference)