KT-57135, KT-54804 Take into account annotations' allowed targets. Generate property$annotations methods
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt
index e774866..adabb47 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt
@@ -10,6 +10,7 @@
 import org.jetbrains.kotlin.analysis.api.fir.annotations.mapAnnotationParameters
 import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter
 import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
+import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
 import org.jetbrains.kotlin.fir.FirSession
 import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
 import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
@@ -74,7 +75,7 @@
 ): KtAnnotationApplicationWithArgumentsInfo = KtAnnotationApplicationWithArgumentsInfo(
     classId = toAnnotationClassId(useSiteSession),
     psi = psi as? KtCallElement,
-    useSiteTarget = useSiteTarget,
+    useSiteTarget = effectiveUseSiteTarget,
     arguments = FirAnnotationValueConverter.toNamedConstantValue(
         mapAnnotationParameters(this),
         useSiteSession,
@@ -88,7 +89,11 @@
 ): KtAnnotationApplicationInfo = KtAnnotationApplicationInfo(
     classId = toAnnotationClassId(useSiteSession),
     psi = psi as? KtCallElement,
-    useSiteTarget = useSiteTarget,
+    useSiteTarget = effectiveUseSiteTarget,
     isCallWithArguments = this is FirAnnotationCall && arguments.isNotEmpty(),
     index = index,
 )
+
+
+val FirAnnotation.effectiveUseSiteTarget: AnnotationUseSiteTarget?
+    get() = calculatedUseSiteTarget ?: useSiteTarget
\ No newline at end of file
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt
index 1f1e13f..4592076 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt
@@ -9,6 +9,7 @@
 import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
 import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
 import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
+import org.jetbrains.kotlin.analysis.api.fir.effectiveUseSiteTarget
 import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
 import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo
 import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
@@ -46,7 +47,7 @@
 
     override fun hasAnnotation(classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter): Boolean = withValidityAssertion {
         coneType.customAnnotationsWithLazyResolve(FirResolvePhase.TYPES).any {
-            useSiteTargetFilter.isAllowed(it.useSiteTarget) && it.toAnnotationClassId(useSiteSession) == classId
+            useSiteTargetFilter.isAllowed(it.effectiveUseSiteTarget) && it.toAnnotationClassId(useSiteSession) == classId
         }
     }
 
@@ -55,7 +56,7 @@
         useSiteTargetFilter: AnnotationUseSiteTargetFilter,
     ): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
         coneType.customAnnotationsWithLazyResolve(FirResolvePhase.ANNOTATIONS_ARGUMENTS_MAPPING).mapIndexedNotNull { index, annotation ->
-            if (!useSiteTargetFilter.isAllowed(annotation.useSiteTarget) || annotation.toAnnotationClassId(useSiteSession) != classId) {
+            if (!useSiteTargetFilter.isAllowed(annotation.effectiveUseSiteTarget) || annotation.toAnnotationClassId(useSiteSession) != classId) {
                 return@mapIndexedNotNull null
             }
 
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt
index 04d656c..4b0b98e 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt
@@ -8,6 +8,7 @@
 import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilter
 import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
 import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
+import org.jetbrains.kotlin.analysis.api.fir.effectiveUseSiteTarget
 import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
 import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo
 import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
@@ -56,14 +57,14 @@
             val annotations = annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol)
             for (index in annotations.indices) {
                 val annotation = annotations[index]
-                if (useSiteTargetFilter.isAllowed(annotation.useSiteTarget) && annotation.toAnnotationClassIdSafe(useSiteSession) == classId) {
+                if (useSiteTargetFilter.isAllowed(annotation.effectiveUseSiteTarget) && annotation.toAnnotationClassIdSafe(useSiteSession) == classId) {
                     add(annotation.toKtAnnotationApplication(useSiteSession, index))
                 }
             }
         }
     } else {
         annotationContainer.resolvedAnnotationsWithArguments(firSymbol).mapIndexedNotNull { index, annotation ->
-            if (!useSiteTargetFilter.isAllowed(annotation.useSiteTarget) || annotation.toAnnotationClassId(useSiteSession) != classId) {
+            if (!useSiteTargetFilter.isAllowed(annotation.effectiveUseSiteTarget) || annotation.toAnnotationClassId(useSiteSession) != classId) {
                 return@mapIndexedNotNull null
             }
 
@@ -108,7 +109,7 @@
         val annotations = annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol)
         for (index in annotations.indices) {
             val annotation = annotations[index]
-            if (useSiteTargetFilter.isAllowed(annotation.useSiteTarget) && annotation.toAnnotationClassIdSafe(useSiteSession) == classId) {
+            if (useSiteTargetFilter.isAllowed(annotation.effectiveUseSiteTarget) && annotation.toAnnotationClassIdSafe(useSiteSession) == classId) {
                 return true
             }
         }
@@ -116,7 +117,7 @@
         false
     } else {
         annotationContainer.resolvedAnnotationsWithClassIds(firSymbol).any {
-            useSiteTargetFilter.isAllowed(it.useSiteTarget) && it.toAnnotationClassId(useSiteSession) == classId
+            useSiteTargetFilter.isAllowed(it.effectiveUseSiteTarget) && it.toAnnotationClassId(useSiteSession) == classId
         }
     }
 }
diff --git a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt
index 8c7027e..7537d05 100644
--- a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt
+++ b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt
@@ -17,6 +17,7 @@
 import org.jetbrains.kotlin.asJava.elements.KtLightElement
 import org.jetbrains.kotlin.asJava.elements.KtLightField
 import org.jetbrains.kotlin.asJava.elements.KtLightMethod
+import org.jetbrains.kotlin.asJava.elements.isGetter
 import org.jetbrains.kotlin.asJava.elements.isSetter
 import org.jetbrains.kotlin.load.java.JvmAbi
 import org.jetbrains.kotlin.psi.*
@@ -183,7 +184,10 @@
         specialGetter: PsiMethod?, specialSetter: PsiMethod?
     ): PropertyAccessorsPsiMethods {
 
-        val (setters, getters) = getPsiMethodWrappers(ktDeclaration).partition { it.isSetter }
+        val accessors = getPsiMethodWrappers(ktDeclaration).toList()
+        val getters = accessors.filter { it.isGetter }
+        val setters = accessors.filter { it.isSetter }
+        val annotationsHolder = accessors.singleOrNull { it.name.endsWith("\$annotations") }
 
         val allGetters = listOfNotNull(specialGetter) + getters.filterNot { it == specialGetter }
         val allSetters = listOfNotNull(specialSetter) + setters.filterNot { it == specialSetter }
@@ -192,6 +196,7 @@
         return PropertyAccessorsPsiMethods(
             allGetters.firstOrNull(),
             allSetters.firstOrNull(),
+            annotationsHolder,
             backingField,
             additionalAccessors
         )
@@ -200,15 +205,16 @@
     class PropertyAccessorsPsiMethods(
         val getter: PsiMethod?,
         val setter: PsiMethod?,
+        val annotationsHolder: PsiMethod?,
         val backingField: PsiField?,
-        additionalAccessors: List<PsiMethod>
+        additionalAccessors: List<PsiMethod>,
     ) : Iterable<PsiMethod> {
         private val allMethods: List<PsiMethod>
         val allDeclarations: List<PsiNamedElement>
 
         init {
             allMethods = arrayListOf()
-            arrayOf(getter, setter).filterNotNullTo(allMethods)
+            arrayOf(getter, setter, annotationsHolder).filterNotNullTo(allMethods)
             additionalAccessors.filterIsInstanceTo<PsiMethod, MutableList<PsiMethod>>(allMethods)
 
             allDeclarations = arrayListOf()
diff --git a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/methodIndices.kt b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/methodIndices.kt
index 43a7036..e6c51b8 100644
--- a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/methodIndices.kt
+++ b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/methodIndices.kt
@@ -7,8 +7,9 @@
 
 const val METHOD_INDEX_FOR_GETTER = 1
 const val METHOD_INDEX_FOR_SETTER = 2
-const val METHOD_INDEX_FOR_DEFAULT_CTOR = 3
-const val METHOD_INDEX_FOR_NO_ARG_OVERLOAD_CTOR = 4
-const val METHOD_INDEX_FOR_NON_ORIGIN_METHOD = 5
-const val METHOD_INDEX_FOR_SCRIPT_MAIN = 6
-const val METHOD_INDEX_BASE = 7
\ No newline at end of file
+const val METHOD_INDEX_FOR_ANNOTATIONS = 3
+const val METHOD_INDEX_FOR_DEFAULT_CTOR = 4
+const val METHOD_INDEX_FOR_NO_ARG_OVERLOAD_CTOR = 5
+const val METHOD_INDEX_FOR_NON_ORIGIN_METHOD = 6
+const val METHOD_INDEX_FOR_SCRIPT_MAIN = 7
+const val METHOD_INDEX_BASE = 8
\ No newline at end of file
diff --git a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt
index d8de764..a88060d 100644
--- a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt
+++ b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt
@@ -182,6 +182,7 @@
 }
 
 fun KtLightMethod.isAccessor(getter: Boolean): Boolean {
+    if (name.endsWith("\$annotations")) return false
     val origin = kotlinOrigin as? KtCallableDeclaration ?: return false
     if (origin !is KtProperty && origin !is KtParameter) return false
     val expectedParametersCount = (if (getter) 0 else 1) + (if (origin.receiverTypeReference != null) 1 else 0)
diff --git a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt
index a3befb9..319e12e 100644
--- a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt
+++ b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt
@@ -108,6 +108,10 @@
 
 fun KtParameter.toLightSetter(): PsiMethod? = LightClassUtil.getLightClassPropertyMethods(this).setter
 
+fun KtParameter.toLightAnnotationsHolder(): PsiMethod? = LightClassUtil.getLightClassPropertyMethods(this).annotationsHolder
+
+fun KtProperty.toLightAnnotationsHolder(): PsiMethod? = LightClassUtil.getLightClassPropertyMethods(this).annotationsHolder
+
 fun KtTypeParameter.toPsiTypeParameters(): List<PsiTypeParameter> {
     val paramList = getNonStrictParentOfType<KtTypeParameterList>() ?: return listOf()
 
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/DeprecatedAdditionalAnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/DeprecatedAdditionalAnnotationsProvider.kt
new file mode 100644
index 0000000..71b1650
--- /dev/null
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/DeprecatedAdditionalAnnotationsProvider.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.light.classes.symbol.annotations
+
+import com.intellij.psi.PsiAnnotation
+import com.intellij.psi.PsiDocCommentOwner
+import com.intellij.psi.PsiModifierList
+import org.jetbrains.kotlin.load.java.JvmAnnotationNames
+
+internal object DeprecatedAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
+    override fun addAllAnnotations(
+        currentRawAnnotations: MutableList<in PsiAnnotation>,
+        foundQualifiers: MutableSet<String>,
+        owner: PsiModifierList
+    ) {
+        if ((owner.parent as? PsiDocCommentOwner)?.isDeprecated == true) {
+            addSimpleAnnotationIfMissing(JvmAnnotationNames.DEPRECATED_ANNOTATION.asString(), currentRawAnnotations, foundQualifiers, owner)
+        }
+    }
+
+    override fun isSpecialQualifier(qualifiedName: String): Boolean = false
+
+    override fun findSpecialAnnotation(
+        annotationsBox: GranularAnnotationsBox,
+        qualifiedName: String,
+        owner: PsiModifierList
+    ): PsiAnnotation? = if ((owner.parent as? PsiDocCommentOwner)?.isDeprecated == true)
+        createSimpleAnnotationIfMatches(
+            qualifier = qualifiedName,
+            expectedQualifier = JvmAnnotationNames.DEPRECATED_ANNOTATION.asString(),
+            owner = owner,
+        )
+    else
+        null
+}
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt
index ac8eea2..fecf9f7 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt
@@ -5,10 +5,7 @@
 
 package org.jetbrains.kotlin.light.classes.symbol.classes
 
-import com.intellij.psi.PsiElement
-import com.intellij.psi.PsiManager
-import com.intellij.psi.PsiModifier
-import com.intellij.psi.PsiReferenceList
+import com.intellij.psi.*
 import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
 import org.jetbrains.kotlin.analysis.api.annotations.hasAnnotation
 import org.jetbrains.kotlin.analysis.api.symbols.*
@@ -23,6 +20,7 @@
 import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
 import org.jetbrains.kotlin.analysis.project.structure.getKtModuleOfTypeSafe
 import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
+import org.jetbrains.kotlin.analysis.utils.printer.parentOfType
 import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
 import org.jetbrains.kotlin.asJava.classes.*
 import org.jetbrains.kotlin.asJava.elements.KtLightField
@@ -42,6 +40,7 @@
 import org.jetbrains.kotlin.light.classes.symbol.isConst
 import org.jetbrains.kotlin.light.classes.symbol.isLateInit
 import org.jetbrains.kotlin.light.classes.symbol.mapType
+import org.jetbrains.kotlin.light.classes.symbol.methods.*
 import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightAccessorMethod
 import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightConstructor
 import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightNoArgConstructor
@@ -286,6 +285,26 @@
 
     if (declaration.getter?.hasBody != true && declaration.setter?.hasBody != true && declaration.visibility.isPrivateOrPrivateToThis()) return
 
+    val originalElement = declaration.sourcePsiSafe<KtDeclaration>()
+
+    if (!this@createPropertyAccessors.isAnnotationType && declaration.psi?.parentOfType<KtClassOrObject>() == this.kotlinOrigin) {
+        val lightMemberOrigin = originalElement?.let {
+            LightMemberOriginForDeclaration(
+                originalElement = it,
+                originKind = JvmDeclarationOriginKind.OTHER,
+            )
+        }
+        val method = SymbolLightAnnotationsMethod(
+            ktAnalysisSession = this@KtAnalysisSession,
+            containingPropertySymbol = declaration,
+            lightMemberOrigin = lightMemberOrigin,
+            containingClass = this@createPropertyAccessors
+        )
+        if (method.annotations.size > 1) { // There's always a @java.lang.Deprecated
+            result.add(method)
+        }
+    }
+
     if (declaration.hasJvmFieldAnnotation()) return
     val propertyTypeIsValueClass = declaration.hasTypeForValueClassInSignature()
 
@@ -321,8 +340,6 @@
         return !isHiddenOrSynthetic(siteTarget, useSiteTargetFilterForPropertyAccessor)
     }
 
-    val originalElement = declaration.sourcePsiSafe<KtDeclaration>()
-
     val getter = declaration.getter?.takeIf {
         it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_GETTER)
     }
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAnnotationsMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAnnotationsMethod.kt
new file mode 100644
index 0000000..763bd90
--- /dev/null
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAnnotationsMethod.kt
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.light.classes.symbol.methods
+
+import com.intellij.openapi.util.TextRange
+import com.intellij.psi.*
+import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
+import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
+import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
+import org.jetbrains.kotlin.analysis.api.symbols.sourcePsiSafe
+import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
+import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_FOR_ANNOTATIONS
+import org.jetbrains.kotlin.asJava.classes.lazyPub
+import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
+import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
+import org.jetbrains.kotlin.light.classes.symbol.*
+import org.jetbrains.kotlin.light.classes.symbol.annotations.*
+import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
+import org.jetbrains.kotlin.light.classes.symbol.modifierLists.InitializedModifiersBox
+import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
+import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
+import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameterList
+import org.jetbrains.kotlin.load.java.JvmAbi
+import org.jetbrains.kotlin.psi.KtCallableDeclaration
+import org.jetbrains.kotlin.psi.KtDeclaration
+import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
+
+internal class SymbolLightAnnotationsMethod private constructor(
+    lightMemberOrigin: LightMemberOrigin?,
+    containingClass: SymbolLightClassBase,
+    private val containingPropertyDeclaration: KtCallableDeclaration?,
+    private val containingPropertySymbolPointer: KtSymbolPointer<KtPropertySymbol>,
+) : SymbolLightMethodBase(
+    lightMemberOrigin,
+    containingClass,
+    METHOD_INDEX_FOR_ANNOTATIONS,
+) {
+    internal constructor(
+        ktAnalysisSession: KtAnalysisSession,
+        containingPropertySymbol: KtPropertySymbol,
+        lightMemberOrigin: LightMemberOrigin?,
+        containingClass: SymbolLightClassBase,
+    ) : this(
+        lightMemberOrigin,
+        containingClass,
+        containingPropertyDeclaration = containingPropertySymbol.sourcePsiSafe(),
+        containingPropertySymbolPointer = with(ktAnalysisSession) { containingPropertySymbol.createPointer() },
+    )
+
+    context(KtAnalysisSession)
+    private fun propertySymbol(): KtPropertySymbol {
+        return containingPropertySymbolPointer.restoreSymbolOrThrowIfDisposed()
+    }
+
+    private fun String.abiName(): String {
+        return JvmAbi.getSyntheticMethodNameForAnnotatedProperty(JvmAbi.getterName(this))
+    }
+
+    private val _name: String by lazyPub {
+        analyzeForLightClasses(ktModule) {
+            val symbol = propertySymbol()
+            symbol.getJvmNameFromAnnotation(AnnotationUseSiteTarget.PROPERTY.toOptionalFilter()) ?: run {
+                val defaultName = symbol.name.identifier.let {
+                    if (containingClass.isAnnotationType) it else it.abiName()
+                }
+                symbol.computeJvmMethodName(defaultName, containingClass, AnnotationUseSiteTarget.PROPERTY)
+            }
+        }
+    }
+
+    override fun getName(): String = _name
+
+    override fun isVarArgs(): Boolean = false
+
+    override val kotlinOrigin: KtDeclaration? get() = containingPropertyDeclaration
+
+    private val _modifierList: PsiModifierList by lazyPub {
+        return@lazyPub containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol ->
+            SymbolLightMemberModifierList(
+                containingDeclaration = this@SymbolLightAnnotationsMethod,
+                modifiersBox = InitializedModifiersBox(PsiModifier.PUBLIC, PsiModifier.STATIC),
+                annotationsBox = GranularAnnotationsBox(
+                    annotationsProvider = SymbolAnnotationsProvider(
+                        ktModule = ktModule,
+                        annotatedSymbolPointer = propertySymbol.createPointer(),
+                        annotationUseSiteTargetFilter = AnnotationUseSiteTarget.PROPERTY.toOptionalFilter(),
+                    ),
+                    additionalAnnotationsProvider = DeprecatedAdditionalAnnotationsProvider
+                ),
+            )
+        }
+    }
+
+    override fun getModifierList(): PsiModifierList = _modifierList
+
+    override fun isConstructor(): Boolean = false
+
+    override fun isDeprecated(): Boolean = true
+
+    private val _identifier: PsiIdentifier by lazyPub {
+        KtLightIdentifier(this, containingPropertyDeclaration)
+    }
+
+    override fun getNameIdentifier(): PsiIdentifier = _identifier
+
+    override fun getReturnType(): PsiType = PsiType.VOID
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is SymbolLightAnnotationsMethod) return false
+        return other.ktModule == ktModule && containingPropertyDeclaration == other.containingPropertyDeclaration
+    }
+
+    override fun hashCode(): Int = containingPropertyDeclaration.hashCode()
+
+    private val _typeParameterList: PsiTypeParameterList? by lazyPub {
+        hasTypeParameters().ifTrue {
+            SymbolLightTypeParameterList(
+                owner = this,
+                symbolWithTypeParameterPointer = containingPropertySymbolPointer,
+                ktModule = ktModule,
+                ktDeclaration = containingPropertyDeclaration,
+            )
+        }
+    }
+
+    override fun hasTypeParameters(): Boolean = hasTypeParameters(ktModule, containingPropertyDeclaration, containingPropertySymbolPointer)
+    override fun getTypeParameterList(): PsiTypeParameterList? = _typeParameterList
+    override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
+
+    private val _parametersList by lazyPub {
+        SymbolLightParameterList(
+            parent = this@SymbolLightAnnotationsMethod,
+            callableWithReceiverSymbolPointer = containingPropertySymbolPointer,
+            parameterPopulator = {},
+        )
+    }
+
+    override fun getParameterList(): PsiParameterList = _parametersList
+
+    override fun isValid(): Boolean =
+        super.isValid() && containingPropertySymbolPointer.isValid(ktModule)
+
+    override fun isOverride(): Boolean = false
+
+    override fun getText(): String {
+        return lightMemberOrigin?.auxiliaryOriginalElement?.text ?: super.getText()
+    }
+
+    override fun getTextOffset(): Int {
+        return lightMemberOrigin?.auxiliaryOriginalElement?.textOffset ?: super.getTextOffset()
+    }
+
+    override fun getTextRange(): TextRange {
+        return lightMemberOrigin?.auxiliaryOriginalElement?.textRange ?: super.getTextRange()
+    }
+}
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java
index 7faf340..e0d57f1 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java
@@ -25,6 +25,12 @@
     }
 
     @Test
+    @TestMetadata("allowedTargets.kt")
+    public void testAllowedTargets() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt");
+    }
+
+    @Test
     @TestMetadata("annotationWithSetParamPropertyModifier.kt")
     public void testAnnotationWithSetParamPropertyModifier() throws Exception {
         runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/annotationWithSetParamPropertyModifier.kt");
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java
index 782d0ae..ac8f9e7 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java
@@ -25,6 +25,12 @@
     }
 
     @Test
+    @TestMetadata("allowedTargets.kt")
+    public void testAllowedTargets() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt");
+    }
+
+    @Test
     @TestMetadata("annotationWithSetParamPropertyModifier.kt")
     public void testAnnotationWithSetParamPropertyModifier() throws Exception {
         runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/annotationWithSetParamPropertyModifier.kt");
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java
index 2c9d62a..06f521d 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java
@@ -25,6 +25,12 @@
     }
 
     @Test
+    @TestMetadata("allowedTargets.kt")
+    public void testAllowedTargets() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt");
+    }
+
+    @Test
     @TestMetadata("annotationWithSetParamPropertyModifier.kt")
     public void testAnnotationWithSetParamPropertyModifier() throws Exception {
         runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/annotationWithSetParamPropertyModifier.kt");
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java
index b44d182..6958ec7 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java
@@ -25,6 +25,12 @@
     }
 
     @Test
+    @TestMetadata("allowedTargets.kt")
+    public void testAllowedTargets() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt");
+    }
+
+    @Test
     @TestMetadata("annotationWithSetParamPropertyModifier.kt")
     public void testAnnotationWithSetParamPropertyModifier() throws Exception {
         runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/annotationWithSetParamPropertyModifier.kt");
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java
index 9267866..2ec35a2 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java
@@ -25,6 +25,12 @@
     }
 
     @Test
+    @TestMetadata("allowedTargets.kt")
+    public void testAllowedTargets() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt");
+    }
+
+    @Test
     @TestMetadata("annotationWithSetParamPropertyModifier.kt")
     public void testAnnotationWithSetParamPropertyModifier() throws Exception {
         runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/annotationWithSetParamPropertyModifier.kt");
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java
index f2eaa66..0a1f559 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java
@@ -25,6 +25,12 @@
     }
 
     @Test
+    @TestMetadata("allowedTargets.kt")
+    public void testAllowedTargets() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt");
+    }
+
+    @Test
     @TestMetadata("annotationWithSetParamPropertyModifier.kt")
     public void testAnnotationWithSetParamPropertyModifier() throws Exception {
         runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/annotationWithSetParamPropertyModifier.kt");
diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirRepeatableAnnotationChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirRepeatableAnnotationChecker.kt
index 5679ba8..ebb9322 100644
--- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirRepeatableAnnotationChecker.kt
+++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirRepeatableAnnotationChecker.kt
@@ -52,11 +52,11 @@
             if (annotationClassId.isLocal) continue
             val annotationClass = session.symbolProvider.getClassLikeSymbolByClassId(annotationClassId) ?: continue
 
-            val useSiteTarget = annotation.useSiteTarget
+            val effectiveUseSiteTarget = annotation.calculatedUseSiteTarget ?: annotation.useSiteTarget
             val expandedType = annotation.annotationTypeRef.coneType.fullyExpandedType(context.session)
             val existingTargetsForAnnotation = annotationsMap.getOrPut(expandedType) { arrayListOf() }
-            val duplicateAnnotation = useSiteTarget in existingTargetsForAnnotation ||
-                    existingTargetsForAnnotation.any { (it == null) != (useSiteTarget == null) }
+            val duplicateAnnotation = effectiveUseSiteTarget in existingTargetsForAnnotation ||
+                    existingTargetsForAnnotation.any { (it == null) != (effectiveUseSiteTarget == null) }
 
             if (duplicateAnnotation &&
                 annotationClass.containsRepeatableAnnotation(session) &&
@@ -83,7 +83,7 @@
                 }
             }
 
-            existingTargetsForAnnotation.add(useSiteTarget)
+            existingTargetsForAnnotation.add(effectiveUseSiteTarget)
         }
 
         if (declaration is FirRegularClass) {
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt
index 029c448..9c4f601 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt
@@ -189,7 +189,7 @@
     val annotationsMap = hashMapOf<ConeKotlinType, MutableList<AnnotationUseSiteTarget?>>()
 
     for (annotation in annotations) {
-        val useSiteTarget = annotation.useSiteTarget ?: annotationContainer?.getDefaultUseSiteTarget(annotation, context)
+        val useSiteTarget = annotation.calculatedUseSiteTarget ?: annotation.useSiteTarget ?: annotationContainer?.getDefaultUseSiteTarget(annotation, context)
         val expandedType = annotation.annotationTypeRef.coneType.fullyExpandedType(context.session)
         val existingTargetsForAnnotation = annotationsMap.getOrPut(expandedType) { arrayListOf() }
 
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AnnotationGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AnnotationGenerator.kt
index 59726bb..8b1d16a 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AnnotationGenerator.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AnnotationGenerator.kt
@@ -40,7 +40,7 @@
     }
 
     private fun FirAnnotation.target(applicable: List<AnnotationUseSiteTarget>): AnnotationUseSiteTarget? =
-        useSiteTarget ?: applicable.firstOrNull(useSiteTargetsFromMetaAnnotation(session)::contains)
+        calculatedUseSiteTarget ?: useSiteTarget ?: applicable.firstOrNull(useSiteTargetsFromMetaAnnotation(session)::contains)
 
     companion object {
         private val propertyTargets = listOf(AnnotationUseSiteTarget.PROPERTY, AnnotationUseSiteTarget.FIELD)
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt
index 96e6d55..662f739 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt
@@ -677,6 +677,7 @@
         if (this is FirAnnotationCall) return this
         return buildAnnotationCall {
             useSiteTarget = this@toAnnotationCall.useSiteTarget
+            calculatedUseSiteTarget = this@toAnnotationCall.calculatedUseSiteTarget
             annotationTypeRef = this@toAnnotationCall.annotationTypeRef
             val symbol = annotationTypeRef.coneType.fullyExpandedType(session).toSymbol(session) as? FirRegularClassSymbol ?: return null
             val constructorSymbol = symbol.declarationSymbols.firstIsInstanceOrNull<FirConstructorSymbol>() ?: return null
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt
index 1c82e10..8cd8aea 100644
--- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt
+++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt
@@ -257,4 +257,4 @@
 fun hasLowPriorityAnnotation(annotations: List<FirAnnotation>) = annotations.any {
     val lookupTag = it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag ?: return@any false
     lookupTag.classId == LOW_PRIORITY_IN_OVERLOAD_RESOLUTION_CLASS_ID
-}
+}
\ No newline at end of file
diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt
index 5930611..ecf9b4d 100644
--- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt
+++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt
@@ -143,9 +143,10 @@
                 status = status.copy(),
             )
             annotations += modifiers.annotations.filter {
-                it.useSiteTarget == null || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY ||
-                        it.useSiteTarget == AnnotationUseSiteTarget.FIELD ||
-                        it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD
+                val useSiteTarget = it.calculatedUseSiteTarget ?: it.useSiteTarget
+                useSiteTarget == null || useSiteTarget == AnnotationUseSiteTarget.PROPERTY ||
+                        useSiteTarget == AnnotationUseSiteTarget.FIELD ||
+                        useSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD
             }
             val defaultAccessorSource = propertySource?.fakeElement(KtFakeSourceElementKind.DefaultAccessor)
             getter = FirDefaultPropertyGetter(
diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
index 95eb14b..519b3fa 100644
--- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
+++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
@@ -600,10 +600,11 @@
                 val isFromPrimaryConstructor = valueParameterDeclaration == ValueParameterDeclaration.PRIMARY_CONSTRUCTOR
                 for (annotationEntry in annotationEntries) {
                     annotationEntry.convert<FirAnnotation>().takeIf {
-                        !isFromPrimaryConstructor || it.useSiteTarget == null ||
-                                it.useSiteTarget == CONSTRUCTOR_PARAMETER ||
-                                it.useSiteTarget == RECEIVER ||
-                                it.useSiteTarget == FILE
+                        val useSiteTarget = it.calculatedUseSiteTarget ?: it.useSiteTarget
+                        !isFromPrimaryConstructor || useSiteTarget == null ||
+                                useSiteTarget == CONSTRUCTOR_PARAMETER ||
+                                useSiteTarget == RECEIVER ||
+                                useSiteTarget == FILE
                     }?.let {
                         this.annotations += it
                     }
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt
index 28f8653..f0aba45 100644
--- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt
+++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt
@@ -122,7 +122,7 @@
             if (result.isPrimary) {
                 for (valueParameter in result.valueParameters) {
                     if (valueParameter.correspondingProperty != null) {
-                        valueParameter.removeDuplicateAnnotationsOfPrimaryConstructorElement()
+                        valueParameter.removeIrrelevantAnnotations()
                     }
                 }
             }
@@ -183,7 +183,7 @@
                 unboundCyclesInTypeParametersSupertypes(property)
 
                 if (property.source?.kind == KtFakeSourceElementKind.PropertyFromParameter) {
-                    property.removeDuplicateAnnotationsOfPrimaryConstructorElement()
+                    property.removeIrrelevantAnnotations()
                 }
 
                 property
@@ -398,28 +398,40 @@
     }
 
     /**
-     * In a scenario like
-     *
+     * Filters annotations by target.
+     * For example, in the following snippet the annotation may apply to the constructor value parameter, the property or the underlying field:
      * ```
-     * annotation class Ann
      * class Foo(@Ann val x: String)
      * ```
-     *
-     * both, the primary ctor value parameter and the property `x` will be annotated with `@Ann`. This is due to the fact, that the
-     * annotation needs to be resolved in order to determine its annotation targets. We remove annotations from the wrong target if they
-     * don't explicitly specify the use-site target (in which case they shouldn't have been added to the element in the raw FIR).
-     *
-     * For value parameters, we remove the annotation if the targets don't include [AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER].
-     * For properties, we remove the annotation, if the targets include [AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER].
+     * This ambiguity may be resolved by specifying the use-site explicitly, i.e. `@field:Ann` or by analysing the allowed targets from
+     * the [kotlin.annotation.Target] meta-annotation. In latter case, the method will assign a use-site target to the corresponding
+     * annotation.
      */
-    private fun FirVariable.removeDuplicateAnnotationsOfPrimaryConstructorElement() {
+    private fun FirVariable.removeIrrelevantAnnotations() {
         val isParameter = this is FirValueParameter
-        replaceAnnotations(annotations.filter {
-            it.useSiteTarget != null ||
-                    // equivalent to
-                    // CONSTRUCTOR_PARAMETER in targets && isParameter ||
-                    // CONSTRUCTOR_PARAMETER !in targets && !isParameter
-                    AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER in it.useSiteTargetsFromMetaAnnotation(session) == isParameter
+
+        replaceAnnotations(annotations.filter { annotation ->
+            when (annotation.useSiteTarget) {
+                AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER -> isParameter
+                AnnotationUseSiteTarget.PROPERTY, AnnotationUseSiteTarget.FIELD -> !isParameter
+                else -> {
+                    val allowedTargets = annotation.useSiteTargetsFromMetaAnnotation(session)
+
+                    val effectiveUseSiteTarget = when {
+                        isParameter && AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER in allowedTargets -> AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER
+                        isParameter -> null
+                        this.source?.kind == KtFakeSourceElementKind.PropertyFromParameter && AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER in allowedTargets -> null
+                        AnnotationUseSiteTarget.PROPERTY in allowedTargets -> AnnotationUseSiteTarget.PROPERTY
+                        AnnotationUseSiteTarget.FIELD in allowedTargets -> AnnotationUseSiteTarget.FIELD
+                        else -> AnnotationUseSiteTarget.PROPERTY
+                    }
+
+                    effectiveUseSiteTarget?.let {
+                        annotation.replaceCalculatedUseSiteTarget(it)
+                        true
+                    } ?: false
+                }
+            }
         })
     }
 }
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotation.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotation.kt
index bcc395e..75e21a3 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotation.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotation.kt
@@ -22,6 +22,7 @@
     abstract override val typeRef: FirTypeRef
     abstract override val annotations: List<FirAnnotation>
     abstract val useSiteTarget: AnnotationUseSiteTarget?
+    abstract val calculatedUseSiteTarget: AnnotationUseSiteTarget?
     abstract val annotationTypeRef: FirTypeRef
     abstract val argumentMapping: FirAnnotationArgumentMapping
     abstract val typeArguments: List<FirTypeProjection>
@@ -36,6 +37,8 @@
 
     abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
 
+    abstract fun replaceCalculatedUseSiteTarget(newCalculatedUseSiteTarget: AnnotationUseSiteTarget?)
+
     abstract fun replaceAnnotationTypeRef(newAnnotationTypeRef: FirTypeRef)
 
     abstract fun replaceArgumentMapping(newArgumentMapping: FirAnnotationArgumentMapping)
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt
index e6e6b10..68b1e22 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt
@@ -23,6 +23,7 @@
     abstract override val typeRef: FirTypeRef
     abstract override val annotations: List<FirAnnotation>
     abstract override val useSiteTarget: AnnotationUseSiteTarget?
+    abstract override val calculatedUseSiteTarget: AnnotationUseSiteTarget?
     abstract override val annotationTypeRef: FirTypeRef
     abstract override val typeArguments: List<FirTypeProjection>
     abstract override val argumentList: FirArgumentList
@@ -40,6 +41,8 @@
 
     abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
 
+    abstract override fun replaceCalculatedUseSiteTarget(newCalculatedUseSiteTarget: AnnotationUseSiteTarget?)
+
     abstract override fun replaceAnnotationTypeRef(newAnnotationTypeRef: FirTypeRef)
 
     abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt
index 97910ac..358bd6f 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorAnnotationCall.kt
@@ -25,6 +25,7 @@
     abstract override val typeRef: FirTypeRef
     abstract override val annotations: List<FirAnnotation>
     abstract override val useSiteTarget: AnnotationUseSiteTarget?
+    abstract override val calculatedUseSiteTarget: AnnotationUseSiteTarget?
     abstract override val annotationTypeRef: FirTypeRef
     abstract override val typeArguments: List<FirTypeProjection>
     abstract override val argumentList: FirArgumentList
@@ -43,6 +44,8 @@
 
     abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
 
+    abstract override fun replaceCalculatedUseSiteTarget(newCalculatedUseSiteTarget: AnnotationUseSiteTarget?)
+
     abstract override fun replaceAnnotationTypeRef(newAnnotationTypeRef: FirTypeRef)
 
     abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationBuilder.kt
index b89f146..8eb236ce 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationBuilder.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationBuilder.kt
@@ -30,6 +30,7 @@
 class FirAnnotationBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
     override var source: KtSourceElement? = null
     var useSiteTarget: AnnotationUseSiteTarget? = null
+    var calculatedUseSiteTarget: AnnotationUseSiteTarget? = null
     lateinit var annotationTypeRef: FirTypeRef
     lateinit var argumentMapping: FirAnnotationArgumentMapping
     val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
@@ -38,6 +39,7 @@
         return FirAnnotationImpl(
             source,
             useSiteTarget,
+            calculatedUseSiteTarget,
             annotationTypeRef,
             argumentMapping,
             typeArguments.toMutableOrEmpty(),
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt
index 7b46202..23fc4b7 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAnnotationCallBuilder.kt
@@ -38,6 +38,7 @@
 class FirAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
     override var source: KtSourceElement? = null
     var useSiteTarget: AnnotationUseSiteTarget? = null
+    var calculatedUseSiteTarget: AnnotationUseSiteTarget? = null
     var annotationTypeRef: FirTypeRef = FirImplicitTypeRefImplWithoutSource
     val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
     override var argumentList: FirArgumentList = FirEmptyArgumentList
@@ -49,6 +50,7 @@
         return FirAnnotationCallImpl(
             source,
             useSiteTarget,
+            calculatedUseSiteTarget,
             annotationTypeRef,
             typeArguments.toMutableOrEmpty(),
             argumentList,
@@ -86,6 +88,7 @@
     val copyBuilder = FirAnnotationCallBuilder()
     copyBuilder.source = original.source
     copyBuilder.useSiteTarget = original.useSiteTarget
+    copyBuilder.calculatedUseSiteTarget = original.calculatedUseSiteTarget
     copyBuilder.annotationTypeRef = original.annotationTypeRef
     copyBuilder.typeArguments.addAll(original.typeArguments)
     copyBuilder.argumentList = original.argumentList
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt
index 836eda8..d3daf9b 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorAnnotationCallBuilder.kt
@@ -39,6 +39,7 @@
 class FirErrorAnnotationCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
     override var source: KtSourceElement? = null
     var useSiteTarget: AnnotationUseSiteTarget? = null
+    var calculatedUseSiteTarget: AnnotationUseSiteTarget? = null
     var annotationTypeRef: FirTypeRef = FirImplicitTypeRefImplWithoutSource
     val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
     override var argumentList: FirArgumentList = FirEmptyArgumentList
@@ -50,6 +51,7 @@
         return FirErrorAnnotationCallImpl(
             source,
             useSiteTarget,
+            calculatedUseSiteTarget,
             annotationTypeRef,
             typeArguments.toMutableOrEmpty(),
             argumentList,
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt
index 91b0b9c..afc6dfc 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt
@@ -29,6 +29,7 @@
 internal class FirAnnotationCallImpl(
     override val source: KtSourceElement?,
     override val useSiteTarget: AnnotationUseSiteTarget?,
+    override var calculatedUseSiteTarget: AnnotationUseSiteTarget?,
     override var annotationTypeRef: FirTypeRef,
     override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
     override var argumentList: FirArgumentList,
@@ -77,6 +78,10 @@
 
     override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {}
 
+    override fun replaceCalculatedUseSiteTarget(newCalculatedUseSiteTarget: AnnotationUseSiteTarget?) {
+        calculatedUseSiteTarget = newCalculatedUseSiteTarget
+    }
+
     override fun replaceAnnotationTypeRef(newAnnotationTypeRef: FirTypeRef) {
         annotationTypeRef = newAnnotationTypeRef
     }
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationImpl.kt
index 826d104..45a5eb8 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationImpl.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationImpl.kt
@@ -25,6 +25,7 @@
 internal class FirAnnotationImpl(
     override val source: KtSourceElement?,
     override val useSiteTarget: AnnotationUseSiteTarget?,
+    override var calculatedUseSiteTarget: AnnotationUseSiteTarget?,
     override var annotationTypeRef: FirTypeRef,
     override var argumentMapping: FirAnnotationArgumentMapping,
     override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
@@ -63,6 +64,10 @@
 
     override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {}
 
+    override fun replaceCalculatedUseSiteTarget(newCalculatedUseSiteTarget: AnnotationUseSiteTarget?) {
+        calculatedUseSiteTarget = newCalculatedUseSiteTarget
+    }
+
     override fun replaceAnnotationTypeRef(newAnnotationTypeRef: FirTypeRef) {
         annotationTypeRef = newAnnotationTypeRef
     }
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt
index 9e453c6..33c82db 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorAnnotationCallImpl.kt
@@ -30,6 +30,7 @@
 internal class FirErrorAnnotationCallImpl(
     override val source: KtSourceElement?,
     override val useSiteTarget: AnnotationUseSiteTarget?,
+    override var calculatedUseSiteTarget: AnnotationUseSiteTarget?,
     override var annotationTypeRef: FirTypeRef,
     override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
     override var argumentList: FirArgumentList,
@@ -79,6 +80,10 @@
 
     override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {}
 
+    override fun replaceCalculatedUseSiteTarget(newCalculatedUseSiteTarget: AnnotationUseSiteTarget?) {
+        calculatedUseSiteTarget = newCalculatedUseSiteTarget
+    }
+
     override fun replaceAnnotationTypeRef(newAnnotationTypeRef: FirTypeRef) {
         annotationTypeRef = newAnnotationTypeRef
     }
diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt
index ff7f470..a455709 100644
--- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt
+++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt
@@ -515,6 +515,7 @@
 
         annotation.configure {
             +field("useSiteTarget", annotationUseSiteTargetType, nullable = true)
+            +field("calculatedUseSiteTarget", annotationUseSiteTargetType, nullable = true, withReplace = true)
             +field("annotationTypeRef", typeRef, withReplace = true).withTransform()
             +field("argumentMapping", annotationArgumentMapping, withReplace = true)
             +typeArguments.withTransform()
diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotatedPropertyWithSites.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotatedPropertyWithSites.fir.java
new file mode 100644
index 0000000..dfa565a
--- /dev/null
+++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotatedPropertyWithSites.fir.java
@@ -0,0 +1,27 @@
+public final class Test /* Test*/ {
+  @MyAnnotation5()
+  @org.jetbrains.annotations.NotNull()
+  private java.lang.String bar;
+
+  @MyAnnotation()
+  @org.jetbrains.annotations.NotNull()
+  public final java.lang.String getBar();//  getBar()
+
+  @MyAnnotation2()
+  public final void setBar(@MyAnnotation3() @org.jetbrains.annotations.NotNull() java.lang.String);//  setBar(java.lang.String)
+
+  @MyAnnotation4()
+  @java.lang.Deprecated()
+  public static void getBar$annotations();//  getBar$annotations()
+
+  @org.jetbrains.annotations.NotNull()
+  public final kotlin.Unit getFooP(@MyAnnotation7() int);//  getFooP(int)
+
+  public  Test(@MyAnnotation6() @org.jetbrains.annotations.NotNull() java.lang.String);//  .ctor(java.lang.String)
+
+  public final void fooF(@MyAnnotation7() int);//  fooF(int)
+
+  public final void fooWithNullableReceiver(@MyAnnotation7() @org.jetbrains.annotations.Nullable() java.lang.Integer, long);//  fooWithNullableReceiver(java.lang.Integer, long)
+
+  public final void setFooP(@MyAnnotation7() int, @org.jetbrains.annotations.NotNull() kotlin.Unit);//  setFooP(int, kotlin.Unit)
+}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/CompanionObject.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/CompanionObject.fir.java
new file mode 100644
index 0000000..e7d7f71
--- /dev/null
+++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/CompanionObject.fir.java
@@ -0,0 +1,18 @@
+public final class C /* C*/ {
+  @kotlin.jvm.JvmField()
+  @org.jetbrains.annotations.NotNull()
+  public static final java.lang.String foo;
+
+  @org.jetbrains.annotations.NotNull()
+  public static final C.Companion Companion;
+
+  public  C();//  .ctor()
+
+  public static final class Companion /* C.Companion*/ {
+    @java.lang.Deprecated()
+    @kotlin.jvm.JvmField()
+    public static void getFoo$annotations();//  getFoo$annotations()
+
+    private  Companion();//  .ctor()
+  }
+}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/SimplePublicField.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/SimplePublicField.fir.java
new file mode 100644
index 0000000..f4fea38
--- /dev/null
+++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/SimplePublicField.fir.java
@@ -0,0 +1,11 @@
+public final class C /* C*/ {
+  @kotlin.jvm.JvmField()
+  @org.jetbrains.annotations.NotNull()
+  public final java.lang.String foo;
+
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmField()
+  public static void getFoo$annotations();//  getFoo$annotations()
+
+  public  C();//  .ctor()
+}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/compilationErrors/AnnotationModifiers.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/compilationErrors/AnnotationModifiers.fir.java
index 3f404b6..d5292bc 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByFqName/compilationErrors/AnnotationModifiers.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/compilationErrors/AnnotationModifiers.fir.java
@@ -4,6 +4,11 @@
   @org.jetbrains.annotations.NotNull()
   private transient volatile java.lang.String c = "" /* initializer type: java.lang.String */;
 
+  @java.lang.Deprecated()
+  @kotlin.jvm.Transient()
+  @kotlin.jvm.Volatile()
+  public static void getC$annotations();//  getC$annotations()
+
   @kotlin.jvm.Strictfp()
   @kotlin.jvm.Synchronized()
   public final synchronized strictfp void f();//  f()
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java
index ad803c0..ec0e68f 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java
@@ -25,6 +25,10 @@
 }
 
 public static final class Companion /* KotlinClass.Companion*/ {
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmStatic()
+  public static void getCompanionLateinitStaticVariable$annotations();//  getCompanionLateinitStaticVariable$annotations()
+
   @org.jetbrains.annotations.NotNull()
   public final Custom getCompanionLateinitStaticVariable();//  getCompanionLateinitStaticVariable()
 
@@ -39,6 +43,10 @@
 }
 
 public static final class Companion /* AbstractKotlinClass.Companion*/ {
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmStatic()
+  public static void getCompanionLateinitStaticVariable$annotations();//  getCompanionLateinitStaticVariable$annotations()
+
   @org.jetbrains.annotations.NotNull()
   public final Custom getCompanionLateinitStaticVariable();//  getCompanionLateinitStaticVariable()
 
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.fir.java
new file mode 100644
index 0000000..347b5e0
--- /dev/null
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.fir.java
@@ -0,0 +1,96 @@
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+public abstract @interface AnotherUniversalAnnotation /* AnotherUniversalAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD})
+public abstract @interface FieldAnnotation /* FieldAnnotation*/ {
+}
+
+public final class MyClass /* MyClass*/ {
+  @AnotherUniversalAnnotation()
+  private final int x5;
+
+  @FieldAnnotation()
+  private final int x1;
+
+  @UniversalAnnotation()
+  private final int x6;
+
+  private final int x2;
+
+  private final int x3;
+
+  private final int x4;
+
+  private final int x7;
+
+  @AnotherUniversalAnnotation()
+  @java.lang.Deprecated()
+  public static void getX7$annotations();//  getX7$annotations()
+
+  @PropertyAnnotation()
+  @java.lang.Deprecated()
+  public static void getX1$annotations();//  getX1$annotations()
+
+  @PropertyOrFieldAnnotation()
+  @java.lang.Deprecated()
+  public static void getX2$annotations();//  getX2$annotations()
+
+  @UniversalAnnotation()
+  @java.lang.Deprecated()
+  public static void getX5$annotations();//  getX5$annotations()
+
+  public  MyClass(@AnotherUniversalAnnotation() @ParameterAnnotation() @UniversalAnnotation() int, int, @PropertyOrParameterAnnotation() int, @ParameterOrFieldAnnotation() int, int, @AnotherUniversalAnnotation() int, @UniversalAnnotation() int);//  .ctor(int, int, int, int, int, int, int)
+
+  public final int getX1();//  getX1()
+
+  public final int getX2();//  getX2()
+
+  public final int getX3();//  getX3()
+
+  public final int getX4();//  getX4()
+
+  public final int getX5();//  getX5()
+
+  public final int getX6();//  getX6()
+
+  public final int getX7();//  getX7()
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface ParameterAnnotation /* ParameterAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface ParameterOrFieldAnnotation /* ParameterOrFieldAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY})
+public abstract @interface PropertyAnnotation /* PropertyAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD})
+public abstract @interface PropertyOrFieldAnnotation /* PropertyOrFieldAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface PropertyOrParameterAnnotation /* PropertyOrParameterAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface UniversalAnnotation /* UniversalAnnotation*/ {
+}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.java
new file mode 100644
index 0000000..95244ad
--- /dev/null
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.java
@@ -0,0 +1,80 @@
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+public abstract @interface AnotherUniversalAnnotation /* AnotherUniversalAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD})
+public abstract @interface FieldAnnotation /* FieldAnnotation*/ {
+}
+
+public final class MyClass /* MyClass*/ {
+  @AnotherUniversalAnnotation()
+  private final int x5;
+
+  @FieldAnnotation()
+  private final int x1;
+
+  @UniversalAnnotation()
+  private final int x6;
+
+  private final int x2;
+
+  private final int x3;
+
+  private final int x4;
+
+  private final int x7;
+
+  public  MyClass(@AnotherUniversalAnnotation() @FieldAnnotation() @ParameterAnnotation() @PropertyAnnotation() @UniversalAnnotation() int, @PropertyOrFieldAnnotation() int, @PropertyOrParameterAnnotation() int, @ParameterOrFieldAnnotation() int, int, @AnotherUniversalAnnotation() int, @UniversalAnnotation() int);//  .ctor(int, int, int, int, int, int, int)
+
+  public final int getX1();//  getX1()
+
+  public final int getX2();//  getX2()
+
+  public final int getX3();//  getX3()
+
+  public final int getX4();//  getX4()
+
+  public final int getX5();//  getX5()
+
+  public final int getX6();//  getX6()
+
+  public final int getX7();//  getX7()
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface ParameterAnnotation /* ParameterAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface ParameterOrFieldAnnotation /* ParameterOrFieldAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY})
+public abstract @interface PropertyAnnotation /* PropertyAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD})
+public abstract @interface PropertyOrFieldAnnotation /* PropertyOrFieldAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface PropertyOrParameterAnnotation /* PropertyOrParameterAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface UniversalAnnotation /* UniversalAnnotation*/ {
+}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt
new file mode 100644
index 0000000..9c1081a
--- /dev/null
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.kt
@@ -0,0 +1,33 @@
+@Target(AnnotationTarget.PROPERTY)
+annotation class PropertyAnnotation
+
+@Target(AnnotationTarget.FIELD)
+annotation class FieldAnnotation
+
+@Target(AnnotationTarget.VALUE_PARAMETER)
+annotation class ParameterAnnotation
+
+@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FIELD)
+annotation class PropertyOrFieldAnnotation
+
+@Target(AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER)
+annotation class PropertyOrParameterAnnotation
+
+@Target(AnnotationTarget.FIELD, AnnotationTarget.VALUE_PARAMETER)
+annotation class ParameterOrFieldAnnotation
+
+@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.VALUE_PARAMETER)
+annotation class UniversalAnnotation
+
+annotation class AnotherUniversalAnnotation
+
+
+class MyClass(
+    @PropertyAnnotation @FieldAnnotation @ParameterAnnotation @UniversalAnnotation @AnotherUniversalAnnotation val x1: Int,
+    @PropertyOrFieldAnnotation val x2: Int,
+    @PropertyOrParameterAnnotation val x3: Int,
+    @ParameterOrFieldAnnotation val x4: Int,
+    @property:UniversalAnnotation @field:AnotherUniversalAnnotation val x5: Int,
+    @field:UniversalAnnotation @param:AnotherUniversalAnnotation val x6: Int,
+    @param:UniversalAnnotation @property:AnotherUniversalAnnotation val x7: Int
+)
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.lib.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.lib.java
new file mode 100644
index 0000000..2f69a8a
--- /dev/null
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/allowedTargets.lib.java
@@ -0,0 +1,80 @@
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+public abstract @interface AnotherUniversalAnnotation /* AnotherUniversalAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD})
+public abstract @interface FieldAnnotation /* FieldAnnotation*/ {
+}
+
+public final class MyClass /* MyClass*/ {
+  @AnotherUniversalAnnotation()
+  private final int x5;
+
+  @FieldAnnotation()
+  private final int x1;
+
+  @UniversalAnnotation()
+  private final int x6;
+
+  private final int x2;
+
+  private final int x3;
+
+  private final int x4;
+
+  private final int x7;
+
+  public  MyClass(@AnotherUniversalAnnotation() @ParameterAnnotation() @UniversalAnnotation() int, int, @PropertyOrParameterAnnotation() int, @ParameterOrFieldAnnotation() int, int, @AnotherUniversalAnnotation() int, @UniversalAnnotation() int);//  .ctor(int, int, int, int, int, int, int)
+
+  public final int getX1();//  getX1()
+
+  public final int getX2();//  getX2()
+
+  public final int getX3();//  getX3()
+
+  public final int getX4();//  getX4()
+
+  public final int getX5();//  getX5()
+
+  public final int getX6();//  getX6()
+
+  public final int getX7();//  getX7()
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface ParameterAnnotation /* ParameterAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface ParameterOrFieldAnnotation /* ParameterOrFieldAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY})
+public abstract @interface PropertyAnnotation /* PropertyAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD})
+public abstract @interface PropertyOrFieldAnnotation /* PropertyOrFieldAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface PropertyOrParameterAnnotation /* PropertyOrParameterAnnotation*/ {
+}
+
+@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER})
+@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER})
+public abstract @interface UniversalAnnotation /* UniversalAnnotation*/ {
+}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java
index 7b55c8d..50d32fb 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java
@@ -59,12 +59,64 @@
   public abstract java.lang.String x();//  x()
 }
 
+public final class ClassWithCompanion /* ClassWithCompanion*/ {
+  @Anno()
+  @kotlin.jvm.JvmField()
+  public static final int c = 1 /* initializer type: int */;
+
+  @Anno()
+  @kotlin.jvm.JvmStatic()
+  private static final int b = 1 /* initializer type: int */;
+
+  @Anno()
+  private static final int a = 1 /* initializer type: int */;
+
+  @org.jetbrains.annotations.NotNull()
+  public static final ClassWithCompanion.CompanionObject CompanionObject;
+
+  private static final int d = 1 /* initializer type: int */;
+
+  public  ClassWithCompanion();//  .ctor()
+
+  public static final int getB();//  getB()
+
+  class CompanionObject ...
+}
+
 public static final class Companion /* AnnoWithCompanion.Companion*/ {
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmField()
+  public static void getX$annotations();//  getX$annotations()
+
   private  Companion();//  .ctor()
 
   public final void foo();//  foo()
 }
 
+public static final class CompanionObject /* ClassWithCompanion.CompanionObject*/ {
+  @Anno()
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmField()
+  public static void getC$annotations();//  getC$annotations()
+
+  @Anno()
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmStatic()
+  public static void getB$annotations();//  getB$annotations()
+
+  @Anno()
+  @java.lang.Deprecated()
+  public static void getA$annotations();//  getA$annotations()
+
+  private  CompanionObject();//  .ctor()
+
+  public final int getA();//  getA()
+
+  public final int getB();//  getB()
+
+  public final int getD();//  getD()
+}
+
 public final class CtorAnnotations /* CtorAnnotations*/ {
   @org.jetbrains.annotations.NotNull()
   private final java.lang.String x;
@@ -103,19 +155,35 @@
   private final java.lang.String bar;
 
   @org.jetbrains.annotations.NotNull()
+  private final java.lang.String baz;
+
+  @org.jetbrains.annotations.NotNull()
+  private final java.lang.String prop;
+
+  @org.jetbrains.annotations.NotNull()
   private final java.lang.String quux;
 
   @Ann()
+  @java.lang.Deprecated()
+  public static void getProp$annotations();//  getProp$annotations()
+
+  @Ann()
   @org.jetbrains.annotations.NotNull()
   public final java.lang.String getBar();//  getBar()
 
   @org.jetbrains.annotations.NotNull()
+  public final java.lang.String getBaz();//  getBaz()
+
+  @org.jetbrains.annotations.NotNull()
   public final java.lang.String getFoo();//  getFoo()
 
   @org.jetbrains.annotations.NotNull()
+  public final java.lang.String getProp();//  getProp()
+
+  @org.jetbrains.annotations.NotNull()
   public final java.lang.String getQuux();//  getQuux()
 
-  public  Example(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() java.lang.String, @Ann() @org.jetbrains.annotations.NotNull() java.lang.String);//  .ctor(java.lang.String, java.lang.String, java.lang.String)
+  public  Example(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() java.lang.String, @Ann() @org.jetbrains.annotations.NotNull() java.lang.String, @Ann() @org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() java.lang.String);//  .ctor(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
 }
 
 @Anno()
@@ -127,6 +195,10 @@
   @Anno(p = "f")
   public final void f(@Anno() @org.jetbrains.annotations.NotNull() java.lang.String);//  f(java.lang.String)
 
+  @Anno(p = "p")
+  @java.lang.Deprecated()
+  public static void getProp$annotations();//  getProp$annotations()
+
   @org.jetbrains.annotations.NotNull()
   public final java.lang.String getProp();//  getProp()
 
@@ -167,6 +239,33 @@
   public  MyClass();//  .ctor()
 }
 
+public final class PropertyAnnotations /* PropertyAnnotations*/ {
+  @Anno()
+  private final int a = 1 /* initializer type: int */;
+
+  @Anno()
+  private final int c = 1 /* initializer type: int */;
+
+  private final int b = 1 /* initializer type: int */;
+
+  @Anno()
+  @java.lang.Deprecated()
+  public static void getA$annotations();//  getA$annotations()
+
+  @Anno()
+  @java.lang.Deprecated()
+  public static void getB$annotations();//  getB$annotations()
+
+  @Anno()
+  public final int getC();//  getC()
+
+  public  PropertyAnnotations();//  .ctor()
+
+  public final int getA();//  getA()
+
+  public final int getB();//  getB()
+}
+
 @java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
 public abstract @interface ReplaceWith /* ReplaceWith*/ {
   public abstract java.lang.String expression();//  expression()
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.java
index 5d7c7f0..997f1e4 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.java
@@ -59,12 +59,42 @@
   public abstract java.lang.String x();//  x()
 }
 
+public final class ClassWithCompanion /* ClassWithCompanion*/ {
+  @kotlin.jvm.JvmField()
+  public static final int c;
+
+  @org.jetbrains.annotations.NotNull()
+  public static final ClassWithCompanion.CompanionObject CompanionObject;
+
+  private static final int a;
+
+  private static final int b;
+
+  private static final int d;
+
+  public  ClassWithCompanion();//  .ctor()
+
+  public static final int getB();//  getB()
+
+  class CompanionObject ...
+}
+
 public static final class Companion /* AnnoWithCompanion.Companion*/ {
   private  Companion();//  .ctor()
 
   public final void foo();//  foo()
 }
 
+public static final class CompanionObject /* ClassWithCompanion.CompanionObject*/ {
+  private  CompanionObject();//  .ctor()
+
+  public final int getA();//  getA()
+
+  public final int getB();//  getB()
+
+  public final int getD();//  getD()
+}
+
 public final class CtorAnnotations /* CtorAnnotations*/ {
   @org.jetbrains.annotations.NotNull()
   private final java.lang.String x;
@@ -103,6 +133,12 @@
   private final java.lang.String bar;
 
   @org.jetbrains.annotations.NotNull()
+  private final java.lang.String baz;
+
+  @org.jetbrains.annotations.NotNull()
+  private final java.lang.String prop;
+
+  @org.jetbrains.annotations.NotNull()
   private final java.lang.String quux;
 
   @Ann()
@@ -110,12 +146,18 @@
   public final java.lang.String getBar();//  getBar()
 
   @org.jetbrains.annotations.NotNull()
+  public final java.lang.String getBaz();//  getBaz()
+
+  @org.jetbrains.annotations.NotNull()
   public final java.lang.String getFoo();//  getFoo()
 
   @org.jetbrains.annotations.NotNull()
+  public final java.lang.String getProp();//  getProp()
+
+  @org.jetbrains.annotations.NotNull()
   public final java.lang.String getQuux();//  getQuux()
 
-  public  Example(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() java.lang.String, @Ann() @org.jetbrains.annotations.NotNull() java.lang.String);//  .ctor(java.lang.String, java.lang.String, java.lang.String)
+  public  Example(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() java.lang.String, @Ann() @org.jetbrains.annotations.NotNull() java.lang.String, @Ann() @org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() java.lang.String);//  .ctor(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
 }
 
 @Anno()
@@ -166,6 +208,24 @@
   public  MyClass();//  .ctor()
 }
 
+public final class PropertyAnnotations /* PropertyAnnotations*/ {
+  @Anno()
+  private final int c;
+
+  private final int a;
+
+  private final int b;
+
+  @Anno()
+  public final int getC();//  getC()
+
+  public  PropertyAnnotations();//  .ctor()
+
+  public final int getA();//  getA()
+
+  public final int getB();//  getB()
+}
+
 @java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
 public abstract @interface ReplaceWith /* ReplaceWith*/ {
   public abstract java.lang.String expression();//  expression()
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.kt
index 126ed2b..b72a3e4 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.kt
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.kt
@@ -58,10 +58,42 @@
 
 @Ann(String::class, Int::class) class MyClass
 
-class Example(@field:Ann val foo: String,    // annotate Java field
-              @get:Ann val bar: String,      // annotate Java getter
-              @param:Ann val quux: String)   // annotate Java constructor parameter
+class Example(@field:Ann val foo: String,      // annotate Java field
+              @get:Ann val bar: String,        // annotate Java getter
+              @param:Ann val quux: String,     // annotate Java constructor parameter
+              @Ann val baz: String,            // annotate Java constructor parameter implicitly
+              @property:Ann val prop: String)  // annotate Java property
 
 class CtorAnnotations(@Anno val x: String, @param:Anno val y: String, val z: String)
 
+class PropertyAnnotations {
+    @Anno
+    val a = 1
+
+    @property:Anno
+    val b = 1
+
+    @field:Anno
+    @get:Anno
+    @set:Anno
+    val c = 1 // no getC$annotations
+}
+
+class ClassWithCompanion {
+    companion object CompanionObject {
+        @Anno
+        val a = 1
+
+        @Anno
+        @JvmStatic
+        val b = 1
+
+        @Anno
+        @JvmField
+        val c = 1
+
+        val d = 1
+    }
+}
+
 // COMPILATION_ERRORS
\ No newline at end of file
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmField.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmField.fir.java
index 3489ad7..48e1bf3 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmField.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmField.fir.java
@@ -5,4 +5,12 @@
 
   @kotlin.jvm.JvmField()
   public static int b = 1 /* initializer type: int */;
+
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmField()
+  public static void getA$annotations();//  getA$annotations()
+
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmField()
+  public static void getB$annotations();//  getB$annotations()
 }
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/fieldModifiers.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/fieldModifiers.java
index 5b79873..cc71f00 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/fieldModifiers.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/fieldModifiers.java
@@ -8,6 +8,11 @@
   @kotlin.jvm.Volatile()
   private static transient volatile int implicit = 0 /* initializer type: int */;
 
+  @java.lang.Deprecated()
+  @kotlin.jvm.Transient()
+  @kotlin.jvm.Volatile()
+  public static void getImplicit$annotations();//  getImplicit$annotations()
+
   @org.jetbrains.annotations.NotNull()
   public static final java.lang.String getExplicit();//  getExplicit()
 
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/jvmSynthetic.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/jvmSynthetic.fir.java
index e47de9bb..38a1c6b 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/jvmSynthetic.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/jvmSynthetic.fir.java
@@ -3,6 +3,15 @@
 
   public A f;
 
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmField()
+  @kotlin.jvm.JvmSynthetic()
+  public static void getY$annotations();//  getY$annotations()
+
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmSynthetic()
+  public static void getX$annotations();//  getX$annotations()
+
   public  A();//  .ctor()
 
   public final int getX();//  getX()
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.java
index 95ed4a0..3fe862f 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.java
@@ -78,6 +78,10 @@
 }
 
 public static final class Companion /* C.Companion*/ {
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmStatic()
+  public static void getX$annotations();//  getX$annotations()
+
   @kotlin.jvm.JvmStatic()
   @org.jetbrains.annotations.NotNull()
   public final java.lang.String getC(@org.jetbrains.annotations.NotNull() I);//  getC(I)
@@ -157,6 +161,10 @@
   @org.jetbrains.annotations.NotNull()
   public static final Obj INSTANCE;
 
+  @java.lang.Deprecated()
+  @kotlin.jvm.JvmStatic()
+  public static void getX$annotations();//  getX$annotations()
+
   @java.lang.Override()
   public void run();//  run()
 
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirSerializer.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirSerializer.kt
index 5b86ac1..f78acda 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirSerializer.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirSerializer.kt
@@ -175,7 +175,7 @@
         // inspired by KlibMetadataSerializerExtension.serializeProperty
         declarationFileId(property)?.let { proto.setExtension(KlibMetadataProtoBuf.propertyFile, it) }
         property.nonSourceAnnotations(session).forEach {
-            val extension = when (it.useSiteTarget) {  // Revise this code after KT-54385
+            val extension = when (it.calculatedUseSiteTarget ?: it.useSiteTarget) {  // Revise this code after KT-54385
                 AnnotationUseSiteTarget.FIELD -> KlibMetadataProtoBuf.propertyBackingFieldAnnotation
                 AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD -> KlibMetadataProtoBuf.propertyDelegatedFieldAnnotation
                 else -> KlibMetadataProtoBuf.propertyAnnotation
diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt
index ac71315..20562ae 100644
--- a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt
+++ b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt
@@ -155,7 +155,7 @@
     private fun List<FirAnnotation>.hasIgnoredOnParcel(): Boolean {
         return this.any {
             if (it.annotationTypeRef.coneType.classId !in IGNORED_ON_PARCEL_CLASS_IDS) return@any false
-            val target = it.useSiteTarget
+            val target = it.calculatedUseSiteTarget ?: it.useSiteTarget
             target == null || target == AnnotationUseSiteTarget.PROPERTY || target == AnnotationUseSiteTarget.PROPERTY_GETTER
         }
     }