fixup! K2 AA CodeGen: Set annotation for declarations out of CodeGen targets
diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/compilerFacility/AbstractCompilerFacilityTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/compilerFacility/AbstractCompilerFacilityTest.kt
index 4077fac..3774444 100644
--- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/compilerFacility/AbstractCompilerFacilityTest.kt
+++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/compilerFacility/AbstractCompilerFacilityTest.kt
@@ -41,6 +41,7 @@
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.FqNameUnsafe
import org.jetbrains.kotlin.psi.KtCodeFragment
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
@@ -92,8 +93,8 @@
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
val testFile = mainModule.files.single { it.name == mainFile.name }
- val checkComposableFunctions = mainModule.directives.contains(Directives.CHECK_COMPOSABLE_CALL)
- val irCollector = CollectingIrGenerationExtension(checkComposableFunctions)
+ val annotationToCheckCalls = mainModule.directives[Directives.CHECK_CALLS_WITH_ANNOTATION].singleOrNull()
+ val irCollector = CollectingIrGenerationExtension(annotationToCheckCalls)
val project = mainFile.project
project.extensionArea.getExtensionPoint(IrGenerationExtension.extensionPointName)
@@ -128,9 +129,9 @@
testServices.assertions.assertEqualsToTestDataFileSibling(irCollector.result, extension = ".ir.txt")
}
- if (checkComposableFunctions) {
+ if (annotationToCheckCalls != null) {
testServices.assertions.assertEqualsToTestDataFileSibling(
- irCollector.composableFunctions.joinToString("\n"), extension = ".composable.txt"
+ irCollector.functionsWithAnnotationToCheckCalls.joinToString("\n"), extension = ".check_calls.txt"
)
}
}
@@ -212,8 +213,8 @@
"Attach the 'stdlib-jvm-minimal-for-test' library to simulate duplicate stdlib dependency"
)
- val CHECK_COMPOSABLE_CALL by directive(
- "Check whether all functions of calls and getters of properties with MyComposable annotation are listed in *.composable.txt or not"
+ val CHECK_CALLS_WITH_ANNOTATION by stringDirective(
+ "Check whether all functions of calls and getters of properties with a given annotation are listed in *.check_calls.txt or not"
)
}
}
@@ -248,11 +249,11 @@
}
}
-private class CollectingIrGenerationExtension(private val collectComposableFunctions: Boolean) : IrGenerationExtension {
+private class CollectingIrGenerationExtension(private val annotationToCheckCalls: String?) : IrGenerationExtension {
lateinit var result: String
private set
- val composableFunctions: MutableSet<String> = mutableSetOf()
+ val functionsWithAnnotationToCheckCalls: MutableSet<String> = mutableSetOf()
override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {
assertFalse { ::result.isInitialized }
@@ -266,17 +267,25 @@
result = moduleFragment.dump(dumpOptions)
- if (collectComposableFunctions) {
- moduleFragment.accept(ComposableCallVisitor { composableFunctions.add(it.name.asString()) }, null)
+ annotationToCheckCalls?.let { annotationFqName ->
+ moduleFragment.accept(
+ CheckCallsWithAnnotationVisitor(annotationFqName) { functionsWithAnnotationToCheckCalls.add(it.name.asString()) }, null
+ )
}
}
/**
* This class recursively visits all calls of functions and getters, and if the function or the getter used for a call has
- * `MyComposable` annotation, it runs [handleComposable] for the function or the getter.
+ * an annotation whose FqName is [annotationFqName], it runs [handleFunctionWithAnnotation] for the function or the getter.
*/
- private class ComposableCallVisitor(private val handleComposable: (declaration: IrDeclarationWithName) -> Unit) : IrElementVisitorVoid {
- val MyComposableClassId = ClassId(FqName("org.jetbrains.kotlin.fir.plugin"), FqName("MyComposable"), false)
+ private class CheckCallsWithAnnotationVisitor(
+ private val annotationFqName: String,
+ private val handleFunctionWithAnnotation: (declaration: IrDeclarationWithName) -> Unit,
+ ) : IrElementVisitorVoid {
+ val annotationClassId by lazy {
+ val annotationFqNameUnsafe = FqNameUnsafe(annotationFqName)
+ ClassId(FqName(annotationFqNameUnsafe.parent()), FqName(annotationFqNameUnsafe.shortName().asString()), false)
+ }
override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this)
@@ -285,21 +294,21 @@
override fun visitCall(expression: IrCall) {
@OptIn(UnsafeDuringIrConstructionAPI::class)
val function = expression.symbol.owner
- if (function.containsComposableAnnotation()) {
- handleComposable(function)
+ if (function.containsAnnotationToCheckCalls()) {
+ handleFunctionWithAnnotation(function)
}
}
override fun visitFieldAccess(expression: IrFieldAccessExpression) {
@OptIn(UnsafeDuringIrConstructionAPI::class)
val field = expression.symbol.owner
- if (field.containsComposableAnnotation()) {
- handleComposable(field)
+ if (field.containsAnnotationToCheckCalls()) {
+ handleFunctionWithAnnotation(field)
}
}
- private fun IrAnnotationContainer.containsComposableAnnotation() =
+ private fun IrAnnotationContainer.containsAnnotationToCheckCalls() =
@OptIn(UnsafeDuringIrConstructionAPI::class)
- annotations.any { it.symbol.owner.parentClassId == MyComposableClassId }
+ annotations.any { it.symbol.owner.parentClassId == annotationClassId }
}
}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.composable.txt b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.check_calls.txt
similarity index 100%
rename from analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.composable.txt
rename to analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.check_calls.txt
diff --git a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.kt b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.kt
index fc3f018..421f100 100644
--- a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.kt
+++ b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget.kt
@@ -1,6 +1,6 @@
// WITH_FIR_TEST_COMPILER_PLUGIN
// DUMP_IR
-// CHECK_COMPOSABLE_CALL
+// CHECK_CALLS_WITH_ANNOTATION: org.jetbrains.kotlin.fir.plugin.MyComposable
// MODULE: main
// FILE: main.kt
diff --git a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.composable.txt b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.check_calls.txt
similarity index 100%
rename from analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.composable.txt
rename to analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.check_calls.txt
diff --git a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.kt b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.kt
index 7421146..3cbc1ca 100644
--- a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.kt
+++ b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/annotationForFunctionOutOfCodeGenTarget2.kt
@@ -1,6 +1,6 @@
// WITH_FIR_TEST_COMPILER_PLUGIN
// DUMP_IR
-// CHECK_COMPOSABLE_CALL
+// CHECK_CALLS_WITH_ANNOTATION: org.jetbrains.kotlin.fir.plugin.MyComposable
// MODULE: main
// FILE: main.kt