[SLC] Take into account declaration-side annotation targets
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/symbolAnnotationsUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/symbolAnnotationsUtils.kt
index 7cdcb95..329aa97 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/symbolAnnotationsUtils.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/symbolAnnotationsUtils.kt
@@ -32,6 +32,7 @@
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.name.StandardClassIds
 import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
+import java.lang.IllegalArgumentException
 import java.lang.annotation.ElementType
 
 internal fun KtAnnotatedSymbol.hasJvmSyntheticAnnotation(
@@ -99,12 +100,26 @@
     SymbolLightSimpleAnnotation(it.name, parent)
 }
 
+
 context(KtAnalysisSession)
 internal fun KtAnnotatedSymbol.computeAnnotations(
     modifierList: PsiModifierList,
     nullability: NullabilityType,
     annotationUseSiteTarget: AnnotationUseSiteTarget?,
     includeAnnotationsWithoutSite: Boolean = true,
+): List<PsiAnnotation> = computeAnnotations(
+    modifierList,
+    nullability
+) {
+    val siteTarget = it.useSiteTarget
+    includeAnnotationsWithoutSite && siteTarget == null || siteTarget == annotationUseSiteTarget
+}
+
+context(KtAnalysisSession)
+internal fun KtAnnotatedSymbol.computeAnnotations(
+    modifierList: PsiModifierList,
+    nullability: NullabilityType,
+    filter: (KtAnnotationApplication) -> Boolean
 ): List<PsiAnnotation> {
     val parent = modifierList.parent
     val nullabilityAnnotation = nullability.computeNullabilityAnnotation(modifierList)
@@ -121,9 +136,7 @@
     val foundAnnotations = hashSetOf<String>()
     for (annotation in annotations) {
         annotation.classId?.asFqNameString()?.let(foundAnnotations::add)
-
-        val siteTarget = annotation.useSiteTarget
-        if (includeAnnotationsWithoutSite && siteTarget == null || siteTarget == annotationUseSiteTarget) {
+        if (filter(annotation)) {
             result.add(SymbolLightAnnotationForAnnotationCall(annotation, modifierList))
         }
     }
@@ -322,3 +335,26 @@
 
     annoApp.arguments.forEach { handleAnnotationValue(it.expression) }
 }
+
+context(KtAnalysisSession)
+val KtAnnotationApplication.allowedTargets: Set<AnnotationTarget>?
+    get() {
+        val annotationClass = classId?.let(::getClassOrObjectSymbolByClassId) ?: return null
+        val targetAnnotation =
+            annotationClass.annotations.firstOrNull { it.classId?.asFqNameString() == "kotlin.annotation.Target" } ?: return null
+        val argument = targetAnnotation.arguments.firstOrNull { it.name.identifier == "allowedTargets" } ?: return null
+        return (argument.expression as? KtArrayAnnotationValue)
+            ?.values
+            ?.mapNotNull { it as? KtEnumEntryAnnotationValue }
+            ?.filter { it.callableId?.classId?.asFqNameString() == AnnotationTarget::class.qualifiedName }
+            ?.mapNotNull {
+                it.callableId?.callableName?.identifier?.let { name ->
+                    try {
+                        AnnotationTarget.valueOf(name)
+                    } catch (_: IllegalArgumentException) {
+                        null
+                    }
+                }
+            }
+            ?.toSet()
+    }
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt
index b4730ef..d6c506b 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt
@@ -19,6 +19,7 @@
 import org.jetbrains.kotlin.asJava.classes.lazyPub
 import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
 import org.jetbrains.kotlin.light.classes.symbol.*
+import org.jetbrains.kotlin.light.classes.symbol.annotations.allowedTargets
 import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
 import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
 import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
@@ -157,9 +158,17 @@
 
                 propertySymbol.computeAnnotations(
                     modifierList = modifierList,
-                    nullability = nullability,
-                    annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD,
-                )
+                    nullability = nullability
+                ){
+                    val targets = it.allowedTargets
+
+                    if (targets != null) {
+                        if (AnnotationTarget.FIELD !in targets) return@computeAnnotations false
+                        if (it.useSiteTarget == null && AnnotationTarget.PROPERTY !in targets) return@computeAnnotations true
+                    }
+
+                    return@computeAnnotations it.useSiteTarget == AnnotationUseSiteTarget.FIELD
+                }
             }
         }
     }
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameter.kt
index 3a8c093..1321eb5 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameter.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameter.kt
@@ -7,10 +7,12 @@
 
 import com.intellij.psi.PsiModifierList
 import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
+import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
 import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
 import org.jetbrains.kotlin.asJava.classes.lazyPub
 import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
 import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
+import org.jetbrains.kotlin.light.classes.symbol.annotations.allowedTargets
 import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
 import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
 import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
@@ -40,9 +42,15 @@
                 parameterSymbol.computeAnnotations(
                     modifierList = modifierList,
                     nullability = nullability,
-                    annotationUseSiteTarget = annotationSite,
-                    includeAnnotationsWithoutSite = true,
-                )
+                ) {
+                    val targets = it.allowedTargets
+
+                    if (targets != null) {
+                        if (AnnotationTarget.VALUE_PARAMETER !in targets) return@computeAnnotations false
+                    }
+
+                    return@computeAnnotations it.useSiteTarget == null || it.useSiteTarget == annotationSite
+                }
             }
         }
     }
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java
deleted file mode 100644
index ad803c0..0000000
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java
+++ /dev/null
@@ -1,92 +0,0 @@
-public abstract class AbstractKotlinClass /* AbstractKotlinClass*/ {
-  @kotlin.jvm.JvmStatic()
-  public static Custom companionLateinitStaticVariable;
-
-  @org.jetbrains.annotations.NotNull()
-  public static final AbstractKotlinClass.Companion Companion;
-
-  public Custom classLateinitVariable;
-
-  public static Custom companionLateinitVariable;
-
-  @org.jetbrains.annotations.NotNull()
-  public final Custom getClassLateinitVariable();//  getClassLateinitVariable()
-
-  @org.jetbrains.annotations.NotNull()
-  public static final Custom getCompanionLateinitStaticVariable();//  getCompanionLateinitStaticVariable()
-
-  public  AbstractKotlinClass();//  .ctor()
-
-  public final void setClassLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);//  setClassLateinitVariable(Custom)
-
-  public static final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);//  setCompanionLateinitStaticVariable(Custom)
-
-  class Companion ...
-}
-
-public static final class Companion /* KotlinClass.Companion*/ {
-  @org.jetbrains.annotations.NotNull()
-  public final Custom getCompanionLateinitStaticVariable();//  getCompanionLateinitStaticVariable()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Custom getCompanionLateinitVariable();//  getCompanionLateinitVariable()
-
-  private  Companion();//  .ctor()
-
-  public final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);//  setCompanionLateinitStaticVariable(Custom)
-
-  public final void setCompanionLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);//  setCompanionLateinitVariable(Custom)
-}
-
-public static final class Companion /* AbstractKotlinClass.Companion*/ {
-  @org.jetbrains.annotations.NotNull()
-  public final Custom getCompanionLateinitStaticVariable();//  getCompanionLateinitStaticVariable()
-
-  @org.jetbrains.annotations.NotNull()
-  public final Custom getCompanionLateinitVariable();//  getCompanionLateinitVariable()
-
-  private  Companion();//  .ctor()
-
-  public final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);//  setCompanionLateinitStaticVariable(Custom)
-
-  public final void setCompanionLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);//  setCompanionLateinitVariable(Custom)
-}
-
-public final class Custom /* Custom*/ {
-  public  Custom();//  .ctor()
-}
-
-public final class KotlinClass /* KotlinClass*/ {
-  @kotlin.jvm.JvmStatic()
-  public static Custom companionLateinitStaticVariable;
-
-  @org.jetbrains.annotations.NotNull()
-  public static final KotlinClass.Companion Companion;
-
-  public Custom classLateinitVariable;
-
-  public static Custom companionLateinitVariable;
-
-  @org.jetbrains.annotations.NotNull()
-  public final Custom getClassLateinitVariable();//  getClassLateinitVariable()
-
-  @org.jetbrains.annotations.NotNull()
-  public static final Custom getCompanionLateinitStaticVariable();//  getCompanionLateinitStaticVariable()
-
-  public  KotlinClass();//  .ctor()
-
-  public final void setClassLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);//  setClassLateinitVariable(Custom)
-
-  public static final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);//  setCompanionLateinitStaticVariable(Custom)
-
-  class Companion ...
-}
-
-public final class LateinitPropertiesKt /* LateinitPropertiesKt*/ {
-  public static Custom topLevelLateinit;
-
-  @org.jetbrains.annotations.NotNull()
-  public static final Custom getTopLevelLateinit();//  getTopLevelLateinit()
-
-  public static final void setTopLevelLateinit(@org.jetbrains.annotations.NotNull() Custom);//  setTopLevelLateinit(Custom)
-}
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java
index bd1fc5c..83dcaa3 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java
@@ -66,7 +66,6 @@
 }
 
 public final class CtorAnnotations /* CtorAnnotations*/ {
-  @Anno()
   @org.jetbrains.annotations.NotNull()
   private final java.lang.String x;
 
@@ -121,7 +120,6 @@
 
 @Anno()
 public final class F /* F*/ implements java.lang.Runnable {
-  @Anno(p = "p")
   @org.jetbrains.annotations.NotNull()
   private java.lang.String prop = "x" /* initializer type: java.lang.String */;
 
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.fir.java
index c6cbdb8..4e5a748 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.fir.java
@@ -1,8 +1,4 @@
 public final class C /* C*/ {
-  @kotlin.jvm.JvmStatic()
-  @org.jetbrains.annotations.NotNull()
-  private static java.lang.String x = "" /* initializer type: java.lang.String */;
-
   @org.jetbrains.annotations.NotNull()
   private static java.lang.String c1;
 
@@ -10,6 +6,9 @@
   private static java.lang.String c;
 
   @org.jetbrains.annotations.NotNull()
+  private static java.lang.String x = "" /* initializer type: java.lang.String */;
+
+  @org.jetbrains.annotations.NotNull()
   public static final C.Companion Companion;
 
   @org.jetbrains.annotations.NotNull()
@@ -146,7 +145,6 @@
 }
 
 public final class Obj /* Obj*/ implements java.lang.Runnable {
-  @kotlin.jvm.JvmStatic()
   @org.jetbrains.annotations.NotNull()
   private static java.lang.String x = "" /* initializer type: java.lang.String */;