aboutsummaryrefslogtreecommitdiff
path: root/test-utils/src/main/kotlin/com/google/devtools/ksp/processor
diff options
context:
space:
mode:
authorJiaxiang Chen <jiaxiang@google.com>2022-09-09 12:00:31 -0700
committerJiaxiang Chen <roaringacw@gmail.com>2022-09-13 12:59:19 -0700
commit35a12d6148ddd3ffb42b4d6ae0a99395485bde62 (patch)
tree434c40d06e4ed91a3b38717aa83b0d27c9034f93 /test-utils/src/main/kotlin/com/google/devtools/ksp/processor
parent58c6c8388bfd15536c40e80e52f21c2e2976e298 (diff)
downloadksp-35a12d6148ddd3ffb42b4d6ae0a99395485bde62.tar.gz
manually look up in scope when annotation argument type is nested annotation.
* fixes #989
Diffstat (limited to 'test-utils/src/main/kotlin/com/google/devtools/ksp/processor')
-rw-r--r--test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetAnnotationByTypeProcessor.kt36
-rw-r--r--test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetByNameProcessor.kt12
2 files changed, 48 insertions, 0 deletions
diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetAnnotationByTypeProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetAnnotationByTypeProcessor.kt
new file mode 100644
index 00000000..8615cdb8
--- /dev/null
+++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetAnnotationByTypeProcessor.kt
@@ -0,0 +1,36 @@
+package com.google.devtools.ksp.processor
+
+import com.google.devtools.ksp.KspExperimental
+import com.google.devtools.ksp.getAnnotationsByType
+import com.google.devtools.ksp.processing.Resolver
+import com.google.devtools.ksp.symbol.KSAnnotated
+import com.google.devtools.ksp.symbol.KSClassDeclaration
+
+annotation class KotlinAnnotationWithInnerDefaults(
+ val innerAnnotationVal: InnerAnnotation = InnerAnnotation(innerAnnotationDefault = 7)
+) {
+ annotation class InnerAnnotation(
+ val innerAnnotationDefault: Int,
+ val moreInnerAnnotation: MoreInnerAnnotation = MoreInnerAnnotation("OK")
+ ) {
+ annotation class MoreInnerAnnotation(val moreInnerAnnotationDefault: String)
+ }
+}
+
+class GetAnnotationByTypeProcessor : AbstractTestProcessor() {
+ val results = mutableListOf<String>()
+ private val annotationKClass = KotlinAnnotationWithInnerDefaults::class
+
+ override fun toResult(): List<String> {
+ return results
+ }
+
+ @OptIn(KspExperimental::class)
+ override fun process(resolver: Resolver): List<KSAnnotated> {
+ val decl = resolver.getAllFiles().single().declarations
+ .single { it.simpleName.asString() == "A" } as KSClassDeclaration
+ val anno = decl.getAnnotationsByType(annotationKClass).first()
+ results.add(anno.innerAnnotationVal.toString())
+ return emptyList()
+ }
+}
diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetByNameProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetByNameProcessor.kt
index bc406df2..c7e49eec 100644
--- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetByNameProcessor.kt
+++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetByNameProcessor.kt
@@ -1,5 +1,6 @@
package com.google.devtools.ksp.processor
+import com.google.devtools.ksp.getClassDeclarationByName
import com.google.devtools.ksp.getFunctionDeclarationsByName
import com.google.devtools.ksp.getPropertyDeclarationByName
import com.google.devtools.ksp.processing.Resolver
@@ -13,6 +14,12 @@ class GetByNameProcessor : AbstractTestProcessor() {
}
override fun process(resolver: Resolver): List<KSAnnotated> {
+ val classNames = listOf(
+ "lib1.Foo",
+ "lib1.Foo.FooNested",
+ "source.FooInSource",
+ "source.FooInSource.FooInSourceNested"
+ )
val funNames = listOf(
"lib1.Foo.lib1MemberFun",
"lib1.lib1TopFun",
@@ -28,6 +35,11 @@ class GetByNameProcessor : AbstractTestProcessor() {
"source.FooInSource.sourceMemberProp",
"source.propInSource",
)
+ for (className in classNames) {
+ if (resolver.getClassDeclarationByName(className) == null) {
+ results.add("failed to get $className")
+ }
+ }
for (funName in funNames) {
if (resolver.getFunctionDeclarationsByName(funName, true).none()) {
results.add("failed to get $funName")