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