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