summaryrefslogtreecommitdiff
path: root/plugins/kotlin/analysis-api-providers-ide-impl/test/org/jetbrains/kotlin/idea/fir/analysis/providers/AbstractKotlinIdeAnnotationsResolverTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kotlin/analysis-api-providers-ide-impl/test/org/jetbrains/kotlin/idea/fir/analysis/providers/AbstractKotlinIdeAnnotationsResolverTest.kt')
-rw-r--r--plugins/kotlin/analysis-api-providers-ide-impl/test/org/jetbrains/kotlin/idea/fir/analysis/providers/AbstractKotlinIdeAnnotationsResolverTest.kt57
1 files changed, 57 insertions, 0 deletions
diff --git a/plugins/kotlin/analysis-api-providers-ide-impl/test/org/jetbrains/kotlin/idea/fir/analysis/providers/AbstractKotlinIdeAnnotationsResolverTest.kt b/plugins/kotlin/analysis-api-providers-ide-impl/test/org/jetbrains/kotlin/idea/fir/analysis/providers/AbstractKotlinIdeAnnotationsResolverTest.kt
new file mode 100644
index 000000000000..e247ae9e3125
--- /dev/null
+++ b/plugins/kotlin/analysis-api-providers-ide-impl/test/org/jetbrains/kotlin/idea/fir/analysis/providers/AbstractKotlinIdeAnnotationsResolverTest.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2010-2022 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.idea.fir.analysis.providers
+
+import com.intellij.openapi.components.service
+import com.intellij.psi.search.GlobalSearchScope
+import com.intellij.psi.util.parentOfType
+import org.jetbrains.kotlin.analysis.providers.KotlinAnnotationsResolver
+import org.jetbrains.kotlin.analysis.providers.KotlinAnnotationsResolverFactory
+import org.jetbrains.kotlin.idea.test.InTextDirectivesUtils
+import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
+import org.jetbrains.kotlin.psi.KtAnnotated
+import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
+import java.io.File
+
+abstract class AbstractKotlinIdeAnnotationsResolverTest : KotlinLightCodeInsightFixtureTestCase() {
+ private val expectedAnnotationsDirective: String = "// ANNOTATION:"
+
+ private val annotationsResolver: KotlinAnnotationsResolver
+ get() = project.service<KotlinAnnotationsResolverFactory>().createAnnotationResolver(GlobalSearchScope.projectScope(project))
+
+ fun doTest(path: String) {
+ val mainTestFile = File(path)
+ val allTestFiles = listOf(mainTestFile) + resolveDependencyFiles(mainTestFile)
+
+ myFixture.configureByFiles(*allTestFiles.toTypedArray())
+
+ val annotatedElement = myFixture.elementAtCaret.parentOfType<KtAnnotated>(withSelf = true)
+ ?: error("Expected KtAnnotation element at the caret: ${myFixture.elementAtCaret.getElementTextWithContext()}")
+
+ val actualAnnotations = annotationsResolver.annotationsOnDeclaration(annotatedElement).sortedBy { it.toString() }
+ val expectedAnnotations = InTextDirectivesUtils.findListWithPrefixes(
+ myFixture.editor.document.text,
+ expectedAnnotationsDirective
+ ).filter { it.isNotEmpty() }
+
+ assertEquals(
+ "Expected annotations not found on the element under the caret:",
+ expectedAnnotations,
+ actualAnnotations.map { it.toString() }
+ )
+ }
+
+ private fun resolveDependencyFiles(mainFile: File): List<File> {
+ val dependencySuffixes = listOf(".dependency.kt", ".dependency1.kt", ".dependency2.kt")
+
+ return dependencySuffixes
+ .map { suffix -> mainFile.resolveSiblingWithDifferentExtension(suffix) }
+ .filter { it.exists() }
+ }
+
+ private fun File.resolveSiblingWithDifferentExtension(newExtension: String): File =
+ resolveSibling("$nameWithoutExtension$newExtension")
+}
+