From d0318f1026e4a269173825864621a0587d9a5c9a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 19 Nov 2021 18:39:26 +0100 Subject: [PATCH] Analysis API: add test for file annotations --- ...ctAnalysisApiFE10AnnotationsOnFilesTest.kt | 12 +++++++ ...actAnalysisApiFirAnnotationsOnFilesTest.kt | 12 +++++++ ...ApiFirAnnotationsOnFilesTestGenerated.java | 32 +++++++++++++++++++ ...nalysisApiAnnotationsOnDeclarationsTest.kt | 8 ++--- ...stractAnalysisApiAnnotationsOnFilesTest.kt | 27 ++++++++++++++++ .../annotations/TestAnnotationRenderer.kt | 20 ++++++++++++ .../AbstractTypeParameterTypeTest.kt | 2 -- .../annotations/annotationsOnFiles/onFile.kt | 1 + .../annotations/annotationsOnFiles/onFile.txt | 4 +++ .../tests/analysis/api/analysisApi.kt | 12 ++++++- 10 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/annotations/AbstractAnalysisApiFE10AnnotationsOnFilesTest.kt create mode 100644 analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AbstractAnalysisApiFirAnnotationsOnFilesTest.kt create mode 100644 analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AnalysisApiFirAnnotationsOnFilesTestGenerated.java create mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnFilesTest.kt create mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/TestAnnotationRenderer.kt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.kt create mode 100644 analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.txt diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/annotations/AbstractAnalysisApiFE10AnnotationsOnFilesTest.kt b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/annotations/AbstractAnalysisApiFE10AnnotationsOnFilesTest.kt new file mode 100644 index 00000000000..89966a34066 --- /dev/null +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/annotations/AbstractAnalysisApiFE10AnnotationsOnFilesTest.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2021 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.analysis.api.descriptors.test.annotations; + +import org.jetbrains.kotlin.analysis.api.descriptors.test.KtFe10FrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.annotations.AbstractAnalysisApiAnnotationsOnFilesTest + +abstract class AbstractAnalysisApiFE10AnnotationsOnFilesTest : + AbstractAnalysisApiAnnotationsOnFilesTest(KtFe10FrontendApiTestConfiguratorService) \ No newline at end of file diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AbstractAnalysisApiFirAnnotationsOnFilesTest.kt b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AbstractAnalysisApiFirAnnotationsOnFilesTest.kt new file mode 100644 index 00000000000..afc4dbb6c49 --- /dev/null +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AbstractAnalysisApiFirAnnotationsOnFilesTest.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2021 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.analysis.api.fir.annotations + +import org.jetbrains.kotlin.analysis.api.fir.FirFrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.annotations.AbstractAnalysisApiAnnotationsOnFilesTest + +abstract class AbstractAnalysisApiFirAnnotationsOnFilesTest : + AbstractAnalysisApiAnnotationsOnFilesTest(FirFrontendApiTestConfiguratorService) \ No newline at end of file diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AnalysisApiFirAnnotationsOnFilesTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AnalysisApiFirAnnotationsOnFilesTestGenerated.java new file mode 100644 index 00000000000..097e1565dc8 --- /dev/null +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/annotations/AnalysisApiFirAnnotationsOnFilesTestGenerated.java @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2021 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.analysis.api.fir.annotations; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/analysis-api/testData/annotations/annotationsOnFiles") +@TestDataPath("$PROJECT_ROOT") +public class AnalysisApiFirAnnotationsOnFilesTestGenerated extends AbstractAnalysisApiFirAnnotationsOnFilesTest { + @Test + public void testAllFilesPresentInAnnotationsOnFiles() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/annotations/annotationsOnFiles"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("onFile.kt") + public void testOnFile() throws Exception { + runTest("analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.kt"); + } +} diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnDeclarationsTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnDeclarationsTest.kt index 6724934ad9d..edab314a46c 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnDeclarationsTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnDeclarationsTest.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.annotations import org.jetbrains.kotlin.analysis.api.annotations.annotations import org.jetbrains.kotlin.analysis.api.impl.barebone.test.FrontendApiTestConfiguratorService import org.jetbrains.kotlin.analysis.api.impl.barebone.test.expressionMarkerProvider +import org.jetbrains.kotlin.analysis.api.impl.base.test.annotations.TestAnnotationRenderer import org.jetbrains.kotlin.analysis.api.impl.base.test.indented import org.jetbrains.kotlin.analysis.api.impl.base.test.test.framework.AbstractHLApiSingleFileTest import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer @@ -27,14 +28,9 @@ abstract class AbstractAnalysisApiAnnotationsOnDeclarationsTest( .getElementOfTypAtCaret(ktFile) val actual = analyseForTest(ktFile) { val declarationSymbol = ktDeclaration.getSymbol() as KtAnnotatedSymbol - val annotations = declarationSymbol.annotations buildString { appendLine("KtDeclaration: ${ktDeclaration::class.simpleName} ${ktDeclaration.name}") - appendLine("annotations: [") - for (annotation in annotations) { - appendLine(DebugSymbolRenderer.renderAnnotationApplication(annotation).indented(indent = 2)) - } - appendLine("]") + append(TestAnnotationRenderer.renderAnnotations(declarationSymbol.annotationsList)) } } diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnFilesTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnFilesTest.kt new file mode 100644 index 00000000000..b2047db02ea --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/AbstractAnalysisApiAnnotationsOnFilesTest.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2021 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.analysis.api.impl.base.test.annotations + +import org.jetbrains.kotlin.analysis.api.impl.barebone.test.FrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.test.framework.AbstractHLApiSingleFileTest +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions + +abstract class AbstractAnalysisApiAnnotationsOnFilesTest( + configurator: FrontendApiTestConfiguratorService +) : AbstractHLApiSingleFileTest(configurator) { + override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) { + val actual = analyseForTest(ktFile) { + val fileSymbol = ktFile.getFileSymbol() + TestAnnotationRenderer.renderAnnotations(fileSymbol.annotationsList) + } + + testServices.assertions.assertEqualsToTestDataFileSibling(actual) + } +} + diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/TestAnnotationRenderer.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/TestAnnotationRenderer.kt new file mode 100644 index 00000000000..42e8b9dc367 --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/annotations/TestAnnotationRenderer.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2021 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.analysis.api.impl.base.test.annotations + +import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList +import org.jetbrains.kotlin.analysis.api.impl.base.test.indented +import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer + +object TestAnnotationRenderer { + fun renderAnnotations(annotations: KtAnnotationsList) = buildString { + appendLine("annotations: [") + for (annotation in annotations.annotations) { + appendLine(DebugSymbolRenderer.renderAnnotationApplication(annotation).indented(indent = 2)) + } + appendLine("]") + } +} \ No newline at end of file diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/typeCreator/AbstractTypeParameterTypeTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/typeCreator/AbstractTypeParameterTypeTest.kt index 72a2b059020..ea2274d8cb1 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/typeCreator/AbstractTypeParameterTypeTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/typeCreator/AbstractTypeParameterTypeTest.kt @@ -19,8 +19,6 @@ abstract class AbstractTypeParameterTypeTest( configurator: FrontendApiTestConfiguratorService ) : AbstractHLApiSingleFileTest(configurator) { override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) { - super.doTestByFileStructure(ktFile, module, testServices) - val expressionAtCaret = testServices.expressionMarkerProvider.getElementOfTypAtCaret(ktFile) as KtTypeParameter val actual = analyseForTest(expressionAtCaret) { diff --git a/analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.kt b/analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.kt new file mode 100644 index 00000000000..8c0cff017e7 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.kt @@ -0,0 +1 @@ +@file:Suppress("SUPRESSED") \ No newline at end of file diff --git a/analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.txt b/analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.txt new file mode 100644 index 00000000000..a11b5740766 --- /dev/null +++ b/analysis/analysis-api/testData/annotations/annotationsOnFiles/onFile.txt @@ -0,0 +1,4 @@ +annotations: [ + kotlin/Suppress(names = ["SUPRESSED"]) + psi: KtAnnotationEntry +] diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt index af4d92d4830..9772eb94c7b 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.generators.tests.analysis.api +import org.jetbrains.kotlin.analysis.api.descriptors.test.annotations.AbstractAnalysisApiFE10AnnotationsOnFilesTest import org.jetbrains.kotlin.analysis.api.descriptors.test.annotations.AbstractAnalysisApiFe10AnnotationsOnDeclarationsTest import org.jetbrains.kotlin.analysis.api.descriptors.test.annotations.AbstractAnalysisApiFe10AnnotationsOnTypesTest import org.jetbrains.kotlin.analysis.api.descriptors.test.components.callResolver.AbstractKtFe10ResolveCallTest @@ -23,6 +24,7 @@ import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10 import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByReferenceTest import org.jetbrains.kotlin.analysis.api.fir.AbstractFirReferenceResolveTest import org.jetbrains.kotlin.analysis.api.fir.annotations.AbstractAnalysisApiFirAnnotationsOnDeclarationsTest +import org.jetbrains.kotlin.analysis.api.fir.annotations.AbstractAnalysisApiFirAnnotationsOnFilesTest import org.jetbrains.kotlin.analysis.api.fir.annotations.AbstractAnalysisApiFirAnnotationsOnTypesTest import org.jetbrains.kotlin.analysis.api.fir.components.callResolver.AbstractFirResolveCallTest import org.jetbrains.kotlin.analysis.api.fir.components.compileTimeConstantProvider.AbstractFirCompileTimeConstantEvaluatorTest @@ -117,10 +119,18 @@ private fun TestGroupSuite.generateAnalysisApiNonComponentsTests() { test( fir = AbstractAnalysisApiFirAnnotationsOnDeclarationsTest::class, - fe10 = AbstractAnalysisApiFe10AnnotationsOnDeclarationsTest::class + fe10 = AbstractAnalysisApiFe10AnnotationsOnDeclarationsTest::class, ) { model("annotationsOnDeclaration") } + + test( + fir = AbstractAnalysisApiFirAnnotationsOnFilesTest::class, + fe10 = null // TODO "fails with Rewrite at slice ANNOTATION key" + /*AbstractAnalysisApiFE10AnnotationsOnFilesTest*/ + ) { + model("annotationsOnFiles") + } } }