xref: /aosp_15_r20/external/ksp/test-utils/testData/api/annotationWithDefaultValues.kt (revision af87fb4bb8e3042070d2a054e912924f599b22b7)
1*af87fb4bSXin Li /*
2*af87fb4bSXin Li  * Copyright 2022 Google LLC
3*af87fb4bSXin Li  * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
4*af87fb4bSXin Li  *
5*af87fb4bSXin Li  * Licensed under the Apache License, Version 2.0 (the "License");
6*af87fb4bSXin Li  * you may not use this file except in compliance with the License.
7*af87fb4bSXin Li  * You may obtain a copy of the License at
8*af87fb4bSXin Li  *
9*af87fb4bSXin Li  * http://www.apache.org/licenses/LICENSE-2.0
10*af87fb4bSXin Li  *
11*af87fb4bSXin Li  * Unless required by applicable law or agreed to in writing, software
12*af87fb4bSXin Li  * distributed under the License is distributed on an "AS IS" BASIS,
13*af87fb4bSXin Li  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*af87fb4bSXin Li  * See the License for the specific language governing permissions and
15*af87fb4bSXin Li  * limitations under the License.
16*af87fb4bSXin Li  */
17*af87fb4bSXin Li 
18*af87fb4bSXin Li // TEST PROCESSOR: AnnotationDefaultValuesProcessor
19*af87fb4bSXin Li // EXPECTED:
20*af87fb4bSXin Li // KotlinAnnotation -> b:default,kClassValue:Array<Array<InnerObj>>,topLevelProp:foo,companionProp:companion
21*af87fb4bSXin Li // JavaAnnotation -> withDefaultValue:OK,nested:@Nested
22*af87fb4bSXin Li // JavaAnnotation2 -> x:x-default,y:y-default,z:z-default
23*af87fb4bSXin Li // KotlinAnnotation2 -> y:y-default,z:z-default,kotlinEnumVal:VALUE_1
24*af87fb4bSXin Li // KotlinAnnotationLib -> b:defaultInLib,kClassValue:OtherKotlinAnnotation,topLevelProp:bar
25*af87fb4bSXin Li // JavaAnnotationWithDefaults -> stringVal:foo,stringArrayVal:[x, y],typeVal:HashMap<*, *>,typeArrayVal:[LinkedHashMap<*, *>],intVal:3,intArrayVal:[1, 3, 5],enumVal:JavaEnum.DEFAULT,enumArrayVal:[JavaEnum.VAL1, JavaEnum.VAL2],localEnumVal:JavaAnnotationWithDefaults.LocalEnum.LOCAL1,otherAnnotationVal:@OtherAnnotation,otherAnnotationArrayVal:[@OtherAnnotation],kotlinAnnotationLibVal:@OtherKotlinAnnotation
26*af87fb4bSXin Li // KotlinAnnotationWithDefaults -> stringVal:foo,stringArrayVal:[x, y],typeVal:HashMap<*, *>,typeArrayVal:[LinkedHashMap<*, *>],intVal:3,intArrayVal:[1, 3, 5],enumVal:JavaEnum.DEFAULT,enumArrayVal:[JavaEnum.VAL1, JavaEnum.VAL2],otherAnnotationVal:@OtherAnnotation,otherAnnotationArrayVal:[@OtherAnnotation],kotlinAnnotationLibVal:@OtherKotlinAnnotation
27*af87fb4bSXin Li // KotlinAnnotation -> b:default,kClassValue:Array<Array<InnerObj>>,topLevelProp:foo,companionProp:companion
28*af87fb4bSXin Li // JavaAnnotation -> withDefaultValue:OK,nested:@Nested
29*af87fb4bSXin Li // JavaAnnotation2 -> x:x-default,y:y-default,z:z-default
30*af87fb4bSXin Li // KotlinAnnotation2 -> y:y-default,z:z-default,kotlinEnumVal:VALUE_1
31*af87fb4bSXin Li // END
32*af87fb4bSXin Li // MODULE: lib
33*af87fb4bSXin Li // FILE: Default.kt
34*af87fb4bSXin Li const val Bar = "bar"
35*af87fb4bSXin Li annotation class KotlinAnnotationLib(val a: String, val b: String = "defaultInLib", val kClassValue: kotlin.reflect.KClass<*> = OtherKotlinAnnotation::class, val topLevelProp:String = Bar)
36*af87fb4bSXin Li 
37*af87fb4bSXin Li annotation class OtherKotlinAnnotation(val b: String = "otherKotlinAnnotationDefault")
38*af87fb4bSXin Li 
39*af87fb4bSXin Li // FILE: JavaEnum.java
40*af87fb4bSXin Li public enum JavaEnum {
41*af87fb4bSXin Li     VAL1,
42*af87fb4bSXin Li     VAL2,
43*af87fb4bSXin Li     DEFAULT
44*af87fb4bSXin Li }
45*af87fb4bSXin Li 
46*af87fb4bSXin Li // FILE: OtherAnnotation.java
47*af87fb4bSXin Li import java.lang.annotation.Retention;
48*af87fb4bSXin Li import java.lang.annotation.RetentionPolicy;
49*af87fb4bSXin Li @Retention(RetentionPolicy.RUNTIME)
50*af87fb4bSXin Li public @interface OtherAnnotation {
51*af87fb4bSXin Li     String value();
52*af87fb4bSXin Li }
53*af87fb4bSXin Li 
54*af87fb4bSXin Li // FILE: JavaAnnotationWithDefaults.java
55*af87fb4bSXin Li import java.util.HashMap;
56*af87fb4bSXin Li import java.util.LinkedHashMap;
57*af87fb4bSXin Li public @interface JavaAnnotationWithDefaults {
58*af87fb4bSXin Li     String stringVal() default "foo";
59*af87fb4bSXin Li     String[] stringArrayVal() default {"x", "y"};
60*af87fb4bSXin Li     Class<?> typeVal() default HashMap.class;
61*af87fb4bSXin Li     Class[] typeArrayVal() default {LinkedHashMap.class};
62*af87fb4bSXin Li     int intVal() default 3;
63*af87fb4bSXin Li     int[] intArrayVal() default {1, 3, 5};
64*af87fb4bSXin Li     JavaEnum enumVal() default JavaEnum.DEFAULT;
65*af87fb4bSXin Li     JavaEnum[] enumArrayVal() default {JavaEnum.VAL1, JavaEnum.VAL2};
66*af87fb4bSXin Li     LocalEnum localEnumVal() default LocalEnum.LOCAL1;
67*af87fb4bSXin Li     OtherAnnotation otherAnnotationVal() default @OtherAnnotation("def");
68*af87fb4bSXin Li     OtherAnnotation[] otherAnnotationArrayVal() default {@OtherAnnotation("v1")};
69*af87fb4bSXin Li     OtherKotlinAnnotation kotlinAnnotationLibVal() default @OtherKotlinAnnotation(b = "JavaAnnotationWithDefaults");
70*af87fb4bSXin Li     enum LocalEnum {
71*af87fb4bSXin Li         LOCAL1,
72*af87fb4bSXin Li         LOCAL2
73*af87fb4bSXin Li     }
74*af87fb4bSXin Li }
75*af87fb4bSXin Li 
76*af87fb4bSXin Li // FILE: KotlinAnnotationWithDefaults.kt
77*af87fb4bSXin Li import kotlin.reflect.KClass
78*af87fb4bSXin Li 
79*af87fb4bSXin Li annotation class KotlinAnnotationWithDefaults(
80*af87fb4bSXin Li     val stringVal: String = "foo",
81*af87fb4bSXin Li     val stringArrayVal: Array<String> = ["x", "y"],
82*af87fb4bSXin Li     val typeVal: KClass<*> = java.util.HashMap::class,
83*af87fb4bSXin Li     val typeArrayVal: Array<KClass<*>> = [java.util.LinkedHashMap::class],
84*af87fb4bSXin Li     val intVal: Int = 3,
85*af87fb4bSXin Li     val intArrayVal: IntArray = [1, 3, 5],
86*af87fb4bSXin Li     val enumVal: JavaEnum = JavaEnum.DEFAULT,
87*af87fb4bSXin Li     val enumArrayVal: Array<JavaEnum> = [JavaEnum.VAL1, JavaEnum.VAL2],
88*af87fb4bSXin Li     val otherAnnotationVal: OtherAnnotation = OtherAnnotation("def"),
89*af87fb4bSXin Li     val otherAnnotationArrayVal: Array<OtherAnnotation> = [OtherAnnotation("v1")],
90*af87fb4bSXin Li     val kotlinAnnotationLibVal: OtherKotlinAnnotation = OtherKotlinAnnotation("1")
91*af87fb4bSXin Li )
92*af87fb4bSXin Li // MODULE: main(lib)
93*af87fb4bSXin Li // FILE: Const.kt
94*af87fb4bSXin Li const val Foo = "foo"
95*af87fb4bSXin Li const val DebugKt = "debugKt"
96*af87fb4bSXin Li 
97*af87fb4bSXin Li class Container {
98*af87fb4bSXin Li     companion object {
99*af87fb4bSXin Li         const val comp = "companion"
100*af87fb4bSXin Li     }
101*af87fb4bSXin Li }
102*af87fb4bSXin Li 
103*af87fb4bSXin Li // FILE: a.kt
104*af87fb4bSXin Li import test.KotlinEnum
105*af87fb4bSXin Li import Container.Companion.comp
106*af87fb4bSXin Li 
107*af87fb4bSXin Li 
108*af87fb4bSXin Li annotation class KotlinAnnotation(val a: String, val b:String = "default", val kClassValue: kotlin.reflect.KClass<*> = Array<Array<InnerObj>>::class, val topLevelProp: String = Foo, val companionProp: String = comp) {
109*af87fb4bSXin Li     object InnerObj
110*af87fb4bSXin Li }
111*af87fb4bSXin Li annotation class KotlinAnnotation2(val x: String, val y:String = "y-default", val z:String = "z-default", val kotlinEnumVal: KotlinEnum = KotlinEnum.VALUE_1)
112*af87fb4bSXin Li 
113*af87fb4bSXin Li @KotlinAnnotation(DebugKt)
114*af87fb4bSXin Li @JavaAnnotation("debug")
115*af87fb4bSXin Li @JavaAnnotation2(y="y-kotlin", x="x-kotlin")
116*af87fb4bSXin Li @KotlinAnnotation2(y="y-kotlin", x="x-kotlin")
117*af87fb4bSXin Li @KotlinAnnotationLib("debugLibKt")
118*af87fb4bSXin Li @JavaAnnotationWithDefaults
119*af87fb4bSXin Li @KotlinAnnotationWithDefaults
120*af87fb4bSXin Li class A
121*af87fb4bSXin Li 
122*af87fb4bSXin Li // FILE: test.kt
123*af87fb4bSXin Li package test
124*af87fb4bSXin Li 
125*af87fb4bSXin Li enum class KotlinEnum {
126*af87fb4bSXin Li     VALUE_1,
127*af87fb4bSXin Li     VALUE2
128*af87fb4bSXin Li }
129*af87fb4bSXin Li 
130*af87fb4bSXin Li // FILE: JavaAnnotation.java
131*af87fb4bSXin Li public @interface JavaAnnotation {
132*af87fb4bSXin Li     String debug();
133*af87fb4bSXin Li     String withDefaultValue()  default "OK";
134*af87fb4bSXin Li     @interface Nested {
135*af87fb4bSXin Li         String nestedX() default "nested";
136*af87fb4bSXin Li     }
137*af87fb4bSXin Li     Nested nested() default @Nested();
138*af87fb4bSXin Li }
139*af87fb4bSXin Li 
140*af87fb4bSXin Li // FILE: JavaAnnotation2.java
141*af87fb4bSXin Li public @interface JavaAnnotation2 {
142*af87fb4bSXin Li     String x() default "x-default";
143*af87fb4bSXin Li     String y() default "y-default";
144*af87fb4bSXin Li     String z() default "z-default";
145*af87fb4bSXin Li }
146*af87fb4bSXin Li 
147*af87fb4bSXin Li // FILE: JavaAnnotated.java
148*af87fb4bSXin Li 
149*af87fb4bSXin Li @KotlinAnnotation(ConstKt.DebugKt)
150*af87fb4bSXin Li @JavaAnnotation("debugJava2")
151*af87fb4bSXin Li @JavaAnnotation2(y="y-java", x="x-java")
152*af87fb4bSXin Li @KotlinAnnotation2(y="y-java", x="x-java")
153*af87fb4bSXin Li public class JavaAnnotated {
154*af87fb4bSXin Li 
155*af87fb4bSXin Li }
156