From 4bd73e4ccda738dc3a0a62fa606aea64de6e89d1 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 19 Dec 2023 14:39:31 +0100 Subject: [PATCH] [Analysis API] add diagnostic test for compiler annotation with argument from another module ^KT-63547 --- ...ModuleCollectDiagnosticsTestGenerated.java | 6 ++++ ...ModuleCollectDiagnosticsTestGenerated.java | 6 ++++ .../AbstractCollectDiagnosticsTest.kt | 14 ++++++-- ...ModuleCollectDiagnosticsTestGenerated.java | 6 ++++ ...hEnumFromDuplicatedLibrary.descriptors.txt | 7 ++++ ...annotationWithEnumFromDuplicatedLibrary.kt | 35 +++++++++++++++++++ ...nnotationWithEnumFromDuplicatedLibrary.txt | 4 +++ 7 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.descriptors.txt create mode 100644 analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.kt create mode 100644 analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index 3e51ef75829..87e4d286e4a 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -46,6 +46,12 @@ public class Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated ex KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationWithEnumFromDuplicatedLibrary.kt") + public void testAnnotationWithEnumFromDuplicatedLibrary() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.kt"); + } + @Test @TestMetadata("declarationErrors.kt") public void testDeclarationErrors() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index c4c8b9d82b3..9e63e322fd4 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -46,6 +46,12 @@ public class FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated ext KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationWithEnumFromDuplicatedLibrary.kt") + public void testAnnotationWithEnumFromDuplicatedLibrary() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.kt"); + } + @Test @TestMetadata("declarationErrors.kt") public void testDeclarationErrors() throws Exception { diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/diagnosticProvider/AbstractCollectDiagnosticsTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/diagnosticProvider/AbstractCollectDiagnosticsTest.kt index 99aab56ef65..8a24d648836 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/diagnosticProvider/AbstractCollectDiagnosticsTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/diagnosticProvider/AbstractCollectDiagnosticsTest.kt @@ -9,7 +9,8 @@ import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticCheckerFilter import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnosticWithPsi -import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest +import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnRangeInPsiFile import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils.offsetToLineAndColumn import org.jetbrains.kotlin.psi.KtElement @@ -17,12 +18,19 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtTreeVisitorVoid import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.assertions import kotlin.test.assertEquals -abstract class AbstractCollectDiagnosticsTest : AbstractAnalysisApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) { +abstract class AbstractCollectDiagnosticsTest : AbstractAnalysisApiBasedTest() { + override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) { + val lastModule = moduleStructure.modules.last() + val firstKtFileFile = testServices.ktModuleProvider.getModuleFiles(lastModule).firstNotNullOf { it as? KtFile } + doTestByFileStructure(firstKtFileFile, lastModule, testServices) + } + + open fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) { fun TextRange.asLineColumnRange(): String { return getLineAndColumnRangeInPsiFile(ktFile, this).toString() } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index 1a18bb5faea..5f299748861 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -46,6 +46,12 @@ public class FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenera KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationWithEnumFromDuplicatedLibrary.kt") + public void testAnnotationWithEnumFromDuplicatedLibrary() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.kt"); + } + @Test @TestMetadata("declarationErrors.kt") public void testDeclarationErrors() throws Exception { diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.descriptors.txt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.descriptors.txt new file mode 100644 index 00000000000..d73ecf0277b --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.descriptors.txt @@ -0,0 +1,7 @@ +Diagnostics from elements: + for PSI element of type KtConstructorCalleeExpression at (34,2-12) + NO_VALUE_FOR_PARAMETER text ranges: [(115,125)] + PSI: KtConstructorCalleeExpression at (34,2-12) + for PSI element of type KtNameReferenceExpression at (32,8-10) + UNRESOLVED_REFERENCE text ranges: [(94,96)] + PSI: KtNameReferenceExpression at (32,8-10) diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.kt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.kt new file mode 100644 index 00000000000..ee48b0be638 --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.kt @@ -0,0 +1,35 @@ +// ALLOW_KOTLIN_PACKAGE +// DISABLE_SEALED_INHERITOR_CALCULATOR +// MODULE: lib1 +// FILE: anno.kt +package kotlin.annotation + +public enum class AnnotationTarget { + CLASS; +} + +// MODULE: dep(lib1) +// FILE: annotation.kt +package my.pack + +import kotlin.annotation.AnnotationTarget + +@Target(AnnotationTarget.CLASS) +annotation class Deprecated + +// MODULE: lib2 +// FILE: anno.kt +package kotlin.annotation + +public enum class AnnotationTarget { + CLASS; +} + +// MODULE: main(lib2, dep) +// FILE: usage.kt +package usage + +import my.pack.Deprecated + +@Deprecated +class Usage \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.txt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.txt new file mode 100644 index 00000000000..53e48e6d260 --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/annotationWithEnumFromDuplicatedLibrary.txt @@ -0,0 +1,4 @@ +Diagnostics from elements: + for PSI element of type KtAnnotationEntry at (34,1-12) + WRONG_ANNOTATION_TARGET text ranges: [(114,125)] + PSI: KtAnnotationEntry at (34,1-12)