[Analysis API] Handle ConeFlexibleType when parsing to KaAnnotationValue
diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
index 381550f..2e0ab2a 100644
--- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
+++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
@@ -149,6 +149,12 @@
   }
 
   @Test
+  @TestMetadata("javaNestedAnnotation.kt")
+  public void testJavaNestedAnnotation() {
+    runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.kt");
+  }
+
+  @Test
   @TestMetadata("javaStaticField.kt")
   public void testJavaStaticField() {
     runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticField.kt");
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt
index defa3da..ae18e26 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt
@@ -183,7 +183,7 @@
             }
 
             is FirGetClassCall -> {
-                val coneType = getTargetType()?.fullyExpandedType(session)
+                val coneType = getTargetType()?.fullyExpandedType(session)?.lowerBoundIfFlexible()
 
                 if (coneType is ConeClassLikeType && coneType !is ConeErrorType) {
                     val classId = coneType.lookupTag.classId
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
index d04c10b..52829ae 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
@@ -149,6 +149,12 @@
   }
 
   @Test
+  @TestMetadata("javaNestedAnnotation.kt")
+  public void testJavaNestedAnnotation() {
+    runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.kt");
+  }
+
+  @Test
   @TestMetadata("javaStaticField.kt")
   public void testJavaStaticField() {
     runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticField.kt");
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
index 713e52a..d84eb5a 100644
--- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java
@@ -149,6 +149,12 @@
   }
 
   @Test
+  @TestMetadata("javaNestedAnnotation.kt")
+  public void testJavaNestedAnnotation() {
+    runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.kt");
+  }
+
+  @Test
   @TestMetadata("javaStaticField.kt")
   public void testJavaStaticField() {
     runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticField.kt");
diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.descriptors.txt
new file mode 100644
index 0000000..b2b717a
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.descriptors.txt
@@ -0,0 +1,30 @@
+KaNamedClassSymbol:
+  annotations: []
+  classId: JavaClass
+  classKind: CLASS
+  companionObject: null
+  compilerVisibility: Unknown
+  contextReceivers: []
+  isActual: false
+  isData: false
+  isExpect: false
+  isExternal: false
+  isFun: false
+  isInline: false
+  isInner: false
+  location: TOP_LEVEL
+  modality: OPEN
+  name: JavaClass
+  origin: JAVA_SOURCE
+  superTypes: [
+    KaUsualClassType:
+      annotations: []
+      typeArguments: []
+      type: kotlin/Any
+  ]
+  typeParameters: []
+  visibility: UNKNOWN
+  getContainingFileSymbol: null
+  getContainingModule: KaSourceModule "Sources of main"
+  annotationApplicableTargets: null
+  deprecationStatus: null
diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.kt b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.kt
new file mode 100644
index 0000000..cc2843a
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.kt
@@ -0,0 +1,14 @@
+// MODULE: main
+// FILE: JavaClass.java
+import java.lang.annotation.*;
+
+@Target(ElementType.TYPE_USE)
+@interface MyAnnotation {
+  Class<?> typeParam();
+}
+class JavaClass extends @MyAnnotation(typeParam = String.class) Object {}
+
+// FILE: main.kt
+fun test() {
+  val x: J<caret>avaClass = TODO()
+}
diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.pretty.txt
new file mode 100644
index 0000000..b74e8e0
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.pretty.txt
@@ -0,0 +1 @@
+open class JavaClass
diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.txt
new file mode 100644
index 0000000..cb70a2f
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaNestedAnnotation.txt
@@ -0,0 +1,33 @@
+KaNamedClassSymbol:
+  annotations: []
+  classId: JavaClass
+  classKind: CLASS
+  companionObject: null
+  compilerVisibility: PackageVisibility
+  contextReceivers: []
+  isActual: false
+  isData: false
+  isExpect: false
+  isExternal: false
+  isFun: false
+  isInline: false
+  isInner: false
+  location: TOP_LEVEL
+  modality: OPEN
+  name: JavaClass
+  origin: JAVA_SOURCE
+  superTypes: [
+    KaUsualClassType:
+      annotations: [
+        MyAnnotation(typeParam = kotlin.String::class)
+          psi: null
+      ]
+      typeArguments: []
+      type: @R|MyAnnotation|(typeParam = <getClass>(<getClass>(R|kotlin/String!|)))  kotlin/Any
+  ]
+  typeParameters: []
+  visibility: PACKAGE_PRIVATE
+  getContainingFileSymbol: null
+  getContainingModule: KaSourceModule "Sources of main"
+  annotationApplicableTargets: null
+  deprecationStatus: null