[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