From a529f8510d0f4cf47add520a425e908922922b24 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 15 Dec 2022 11:26:22 +0100 Subject: [PATCH] [LL] ensure FirConstExpression's annotations are not lost (KTIJ-23968) --- ...alAnalysisSourceModuleReferenceResolveTestGenerated.java | 6 ++++++ ...ntAnalysisSourceModuleReferenceResolveTestGenerated.java | 6 ++++++ ...sisLibrarySourceModuleReferenceResolveTestGenerated.java | 6 ++++++ ...alAnalysisSourceModuleReferenceResolveTestGenerated.java | 6 ++++++ ...alAnalysisSourceModuleReferenceResolveTestGenerated.java | 6 ++++++ .../testData/referenceResolve/AnnotationOnCallSite.kt | 3 +++ .../testData/referenceResolve/AnnotationOnCallSite.txt | 2 ++ .../low/level/api/fir/file/structure/FirElementsRecorder.kt | 3 +++ .../annotationApplicationWithArgumentsOnCallSite.kt | 4 ++++ .../annotationApplicationWithArgumentsOnCallSite.txt | 6 ++++++ .../low/level/api/fir/GetOrBuildFirTestGenerated.java | 6 ++++++ 11 files changed, 54 insertions(+) create mode 100644 analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt create mode 100644 analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.txt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.kt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index d18fd9bf07b..beaf35659bd 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -58,6 +58,12 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte runTest("analysis/analysis-api/testData/referenceResolve/AnnotationInsideFunction.kt"); } + @Test + @TestMetadata("AnnotationOnCallSite.kt") + public void testAnnotationOnCallSite() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt"); + } + @Test @TestMetadata("AnnotationOnFile.kt") public void testAnnotationOnFile() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java index dcdaae07d78..9e46198d1a5 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -58,6 +58,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex runTest("analysis/analysis-api/testData/referenceResolve/AnnotationInsideFunction.kt"); } + @Test + @TestMetadata("AnnotationOnCallSite.kt") + public void testAnnotationOnCallSite() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt"); + } + @Test @TestMetadata("AnnotationOnFile.kt") public void testAnnotationOnFile() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java index 730e52d3071..22c1a0da51a 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java @@ -58,6 +58,12 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate runTest("analysis/analysis-api/testData/referenceResolve/AnnotationInsideFunction.kt"); } + @Test + @TestMetadata("AnnotationOnCallSite.kt") + public void testAnnotationOnCallSite() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt"); + } + @Test @TestMetadata("AnnotationOnFile.kt") public void testAnnotationOnFile() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index a8259f9b44e..84ecb68148c 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -58,6 +58,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten runTest("analysis/analysis-api/testData/referenceResolve/AnnotationInsideFunction.kt"); } + @Test + @TestMetadata("AnnotationOnCallSite.kt") + public void testAnnotationOnCallSite() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt"); + } + @Test @TestMetadata("AnnotationOnFile.kt") public void testAnnotationOnFile() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index 438a5c0c164..fdedbc75518 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -58,6 +58,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate runTest("analysis/analysis-api/testData/referenceResolve/AnnotationInsideFunction.kt"); } + @Test + @TestMetadata("AnnotationOnCallSite.kt") + public void testAnnotationOnCallSite() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt"); + } + @Test @TestMetadata("AnnotationOnFile.kt") public void testAnnotationOnFile() throws Exception { diff --git a/analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt b/analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt new file mode 100644 index 00000000000..78be4c00c41 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.kt @@ -0,0 +1,3 @@ +fun x() { + val y = @Suppress("") "" +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.txt b/analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.txt new file mode 100644 index 00000000000..b63dc256cd8 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/AnnotationOnCallSite.txt @@ -0,0 +1,2 @@ +Resolved to: +0: (in kotlin.Suppress) constructor(vararg names: kotlin.String) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt index 4d120f810b7..aa0dd301e09 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FirElementsRecorder.kt @@ -69,6 +69,9 @@ internal open class FirElementsRecorder : FirVisitor visitConstExpression(constExpression: FirConstExpression, data: MutableMap) { cacheElement(constExpression, data) + constExpression.annotations.forEach { + it.accept(this, data) + } // KtPrefixExpression(-, KtConstExpression(n)) is represented as FirConstExpression(-n) with converted constant value. // If one queries FIR for KtConstExpression, we still return FirConstExpression(-n) even though its source is KtPrefixExpression. // Here, we cache FirConstExpression(n) for KtConstExpression(n) to make everything natural and intuitive! diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.kt new file mode 100644 index 00000000000..43940661934 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.kt @@ -0,0 +1,4 @@ +// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtAnnotationEntry +fun x() { + val y = @Suppress("") "" +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.txt new file mode 100644 index 00000000000..8e4d5fb285d --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.txt @@ -0,0 +1,6 @@ +KT element: KtAnnotationEntry +FIR element: FirAnnotationCallImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +@R|kotlin/Suppress|(names = vararg(String())) \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java index 6ff0dd8fa86..6156d5ff0ff 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java @@ -63,6 +63,12 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest { runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArguments.kt"); } + @Test + @TestMetadata("annotationApplicationWithArgumentsOnCallSite.kt") + public void testAnnotationApplicationWithArgumentsOnCallSite() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/annotations/annotationApplicationWithArgumentsOnCallSite.kt"); + } + @Test @TestMetadata("fileAnnotation.kt") public void testFileAnnotation() throws Exception {