From 372a234a17b8e018886f405984ac4eed14252149 Mon Sep 17 00:00:00 2001 From: Kuan-Ying Chou Date: Thu, 11 Apr 2024 13:17:15 +0100 Subject: [PATCH] Test nested type annotations --- .../testData/annotationValue/java.kt | 13 +++++++++++++ .../ksp/processor/AnnotationArgumentProcessor.kt | 7 +++++++ test-utils/testData/api/annotationValue_java.kt | 13 +++++++++++++ 3 files changed, 33 insertions(+) diff --git a/kotlin-analysis-api/testData/annotationValue/java.kt b/kotlin-analysis-api/testData/annotationValue/java.kt index 323b3d92a6..7df6d37ad1 100644 --- a/kotlin-analysis-api/testData/annotationValue/java.kt +++ b/kotlin-analysis-api/testData/annotationValue/java.kt @@ -31,6 +31,19 @@ // 31 // [warning1, warning 2] // END +// FILE: Test.java +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; +@Target({ElementType.TYPE, ElementType.TYPE_USE}) +@interface A { + int i(); +} +@Target({ElementType.TYPE, ElementType.TYPE_USE}) +@interface B { + A a(); +} +interface Parent {} +class Sub implements @B(a = @A(i = 42)) Parent {} // FILE: a.kt enum class RGB { diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AnnotationArgumentProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AnnotationArgumentProcessor.kt index 68e263c641..4c2903c8b1 100644 --- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AnnotationArgumentProcessor.kt +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AnnotationArgumentProcessor.kt @@ -20,6 +20,7 @@ package com.google.devtools.ksp.processor import com.google.devtools.ksp.getClassDeclarationByName import com.google.devtools.ksp.processing.Resolver import com.google.devtools.ksp.symbol.KSAnnotated +import com.google.devtools.ksp.symbol.KSAnnotation import com.google.devtools.ksp.symbol.KSType import com.google.devtools.ksp.symbol.KSValueArgument import com.google.devtools.ksp.symbol.KSVisitorVoid @@ -29,6 +30,12 @@ class AnnotationArgumentProcessor : AbstractTestProcessor() { val visitor = ArgumentVisitor() override fun process(resolver: Resolver): List { + resolver.getClassDeclarationByName("Sub")!!.let { cls -> + cls.superTypes.single().annotations.single().let { typeAnnotation -> + val a = typeAnnotation.arguments.single().value as KSAnnotation + println(a.arguments) + } + } resolver.getSymbolsWithAnnotation("Bar", true).forEach { it.annotations.forEach { it.arguments.forEach { it.accept(visitor, Unit) } } } diff --git a/test-utils/testData/api/annotationValue_java.kt b/test-utils/testData/api/annotationValue_java.kt index 448ea5e0ec..f0bbff8dfa 100644 --- a/test-utils/testData/api/annotationValue_java.kt +++ b/test-utils/testData/api/annotationValue_java.kt @@ -31,6 +31,19 @@ // 31 // [warning1, warning 2] // END +// FILE: Test.java +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; +@Target({ElementType.TYPE, ElementType.TYPE_USE}) +@interface A { + int i(); +} +@Target({ElementType.TYPE, ElementType.TYPE_USE}) +@interface B { + A a(); +} +interface Parent {} +class Sub implements @B(a = @A(i = 42)) Parent {} // FILE: a.kt enum class RGB {