xref: /aosp_15_r20/external/ksp/test-utils/testData/api/backingFields.kt (revision af87fb4bb8e3042070d2a054e912924f599b22b7)
1 /*
2  * Copyright 2021 Google LLC
3  * Copyright 2010-2020 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 // WITH_RUNTIME
19 // TEST PROCESSOR: BackingFieldProcessor
20 // EXPECTED:
21 // lib.BaseClass.abstractProp_willBeBacked: false
22 // lib.BaseClass.abstractProp_wontBeBacked: false
23 // lib.BaseClass.lateinit_var_1: true
24 // lib.BaseClass.lateinit_var_2: true
25 // lib.BaseClass.notOverriddenAbstractProp: true
26 // lib.BaseClass.overriddenBaseProp_willBeBacked: true
27 // lib.BaseClass.overriddenBaseProp_wontBeBacked: true
28 // lib.ChildClass.abstractProp_willBeBacked: true
29 // lib.ChildClass.abstractProp_wontBeBacked: false
30 // lib.ChildClass.interfaceProp_willBeBacked: true
31 // lib.ChildClass.interfaceProp_wontBeBacked: false
32 // lib.ChildClass.lateinit_var_1: false
33 // lib.ChildClass.lateinit_var_2: true
34 // lib.ChildClass.lateinit_var_3: true
35 // lib.ChildClass.overriddenBaseProp_willBeBacked: true
36 // lib.ChildClass.overriddenBaseProp_wontBeBacked: false
37 // lib.ConstructorSetProp.propSetInConstructor: true
38 // lib.DataClass.value_Param: true
39 // lib.DataClass.variable_Param: true
40 // lib.JavaClass.javaField: true
41 // lib.JavaClass.javaFieldWithAccessors: true
42 // lib.MyInterface.interfaceProp_willBeBacked: false
43 // lib.MyInterface.interfaceProp_wontBeBacked: false
44 // lib.MyInterface.lateinit_var_3: false
45 // lib.NormalClass.Companion.companionVar: true
46 // lib.NormalClass.Companion.companion_noBackingVal: false
47 // lib.NormalClass.Companion.companion_noBackingVar: false
48 // lib.NormalClass.Companion.companion_withBackingAndGetter: true
49 // lib.NormalClass.Companion.staticVar: true
50 // lib.NormalClass.Companion.static_noBackingVal: false
51 // lib.NormalClass.Companion.static_noBackingVar: false
52 // lib.NormalClass.Companion.static_withBackingAndGetter: true
53 // lib.NormalClass.jvmField_withBacking: true
54 // lib.NormalClass.lateinit_var: true
55 // lib.NormalClass.value: true
56 // lib.NormalClass.value_Param: true
57 // lib.NormalClass.value_noBacking: false
58 // lib.NormalClass.value_withBacking: true
59 // lib.NormalClass.variable: true
60 // lib.NormalClass.variable_Param: true
61 // lib.NormalClass.variable_noBacking: false
62 // lib.NormalClass.variable_withBacking: true
63 // lib.lateinit_var: true
64 // lib.value: true
65 // lib.value_noBacking: false
66 // lib.value_withBacking: true
67 // lib.variable: true
68 // lib.variable_noBacking: false
69 // lib.variable_withBacking: true
70 // main.BaseClass.abstractProp_willBeBacked: false
71 // main.BaseClass.abstractProp_wontBeBacked: false
72 // main.BaseClass.lateinit_var_1: true
73 // main.BaseClass.lateinit_var_2: true
74 // main.BaseClass.notOverriddenAbstractProp: true
75 // main.BaseClass.overriddenBaseProp_willBeBacked: true
76 // main.BaseClass.overriddenBaseProp_wontBeBacked: true
77 // main.ChildClass.abstractProp_willBeBacked: true
78 // main.ChildClass.abstractProp_wontBeBacked: false
79 // main.ChildClass.interfaceProp_willBeBacked: true
80 // main.ChildClass.interfaceProp_wontBeBacked: false
81 // main.ChildClass.lateinit_var_1: false
82 // main.ChildClass.lateinit_var_2: true
83 // main.ChildClass.lateinit_var_3: true
84 // main.ChildClass.overriddenBaseProp_willBeBacked: true
85 // main.ChildClass.overriddenBaseProp_wontBeBacked: false
86 // main.ConstructorSetProp.propSetInConstructor: true
87 // main.DataClass.value_Param: true
88 // main.DataClass.variable_Param: true
89 // main.JavaClass.javaField: true
90 // main.JavaClass.javaFieldWithAccessors: true
91 // main.MyInterface.interfaceProp_willBeBacked: false
92 // main.MyInterface.interfaceProp_wontBeBacked: false
93 // main.MyInterface.lateinit_var_3: false
94 // main.NormalClass.Companion.companionVar: true
95 // main.NormalClass.Companion.companion_noBackingVal: false
96 // main.NormalClass.Companion.companion_noBackingVar: false
97 // main.NormalClass.Companion.companion_withBackingAndGetter: true
98 // main.NormalClass.Companion.staticVar: true
99 // main.NormalClass.Companion.static_noBackingVal: false
100 // main.NormalClass.Companion.static_noBackingVar: false
101 // main.NormalClass.Companion.static_withBackingAndGetter: true
102 // main.NormalClass.lateinit_var: true
103 // main.NormalClass.value: true
104 // main.NormalClass.value_Param: true
105 // main.NormalClass.value_noBacking: false
106 // main.NormalClass.value_withBacking: true
107 // main.NormalClass.variable: true
108 // main.NormalClass.variable_Param: true
109 // main.NormalClass.variable_noBacking: false
110 // main.NormalClass.variable_withBacking: true
111 // main.lateinit_var: true
112 // main.value: true
113 // main.value_noBacking: false
114 // main.value_withBacking: true
115 // main.variable: true
116 // main.variable_noBacking: false
117 // main.variable_withBacking: true
118 // END
119 
120 // MODULE: lib
121 // FILE: lib.kt
122 package lib
123 
124 val value: String = ""
125 var variable: String = ""
126 val value_noBacking: String
127     get() = "aa"
128 var variable_noBacking: String
129     get() = "aa"
130     set(value) {}
131 val value_withBacking: String = ""
132     get() = field
133 var variable_withBacking: String? = null
134     get() = field
135 lateinit var lateinit_var: String
136 
137 data class DataClass(
138     val value_Param: String,
139     var variable_Param: String
140 )
141 
142 class NormalClass(
143     val value_Param: String,
144     var variable_Param: String,
145     normalParam: String
146 ) {
147     val value: String = ""
148     var variable: String = ""
149     val value_noBacking: String
150         get() = "aa"
151     var variable_noBacking: String
152         get() = "aa"
153         set(value) {}
154     val value_withBacking: String = ""
155         get() = field
156     var variable_withBacking: String? = null
157         get() = field
158     val jvmField_withBacking: String = ""
159     lateinit var lateinit_var: String
160 
161     companion object {
162         @JvmStatic
163         var staticVar: String = ""
164         @JvmStatic
165         val static_withBackingAndGetter: String = ""
166             get() = field
167         @JvmStatic
168         val static_noBackingVal: String
169             get() = ""
170         @JvmStatic
171         var static_noBackingVar: String
172             get() = ""
173             set(value) {}
174         var companionVar: String = ""
175         val companion_withBackingAndGetter: String = ""
176             get() = field
177         @JvmStatic
178         val companion_noBackingVal: String
179             get() = ""
180         @JvmStatic
181         var companion_noBackingVar: String
182             get() = ""
183             set(value) {}
184     }
185 }
186 
187 abstract class BaseClass {
188     open val overriddenBaseProp_willBeBacked: String = ""
189     open val overriddenBaseProp_wontBeBacked: String = ""
190     open val notOverriddenAbstractProp: String = ""
191     abstract val abstractProp_willBeBacked: String
192     abstract val abstractProp_wontBeBacked: String
193     open lateinit var lateinit_var_1: String
194     open lateinit var lateinit_var_2: String
195 }
196 
197 interface MyInterface {
198     val interfaceProp_willBeBacked: String
199     val interfaceProp_wontBeBacked: String
200     var lateinit_var_3: String
201 }
202 
203 class ChildClass: BaseClass(), MyInterface {
204     override val overriddenBaseProp_willBeBacked: String = ""
205     override val overriddenBaseProp_wontBeBacked: String
206         get() = ""
207     override val abstractProp_willBeBacked: String = ""
208     override val abstractProp_wontBeBacked: String
209         get() = ""
210     override val interfaceProp_willBeBacked: String = ""
211     override val interfaceProp_wontBeBacked: String
212         get() = ""
213     override var lateinit_var_1: String
214         get() = ""
215         set(v: String) = Unit
216     override var lateinit_var_2: String = ""
217     override lateinit var lateinit_var_3: String
218 }
219 
220 class ConstructorSetProp {
221     private val propSetInConstructor: Boolean
222     constructor(propSetInConstructor: Boolean) {
223         this.propSetInConstructor = propSetInConstructor
224     }
225 }
226 
227 // FILE: lib/JavaClass.java
228 package lib;
229 public class JavaClass {
230     private String javaField;
231     private String javaFieldWithAccessors;
232 
233     public String getJavaFieldWithAccessors()
<lambda>null234     { return ""; }
235     public void setJavaFieldWithAccessors(String value )
<lambda>null236     {}
237 
238     public String getJavaAccessorWithoutField()
<lambda>null239     { return ""; }
240     public void setJavaAccessorWithoutField(String value )
<lambda>null241     {}
242 }
243 
244 // MODULE: main(lib)
245 // FILE: main.kt
246 package main
247 val value: String = ""
248 var variable: String = ""
249 val value_noBacking: String
250     get() = "aa"
251 var variable_noBacking: String
252     get() = "aa"
253     set(value) {}
254 val value_withBacking: String = ""
255     get() = field
256 var variable_withBacking: String? = null
257     get() = field
258 lateinit var lateinit_var: String
259 
260 data class DataClass(
261     val value_Param: String,
262     var variable_Param: String
263 )
264 
265 class NormalClass(
266     val value_Param: String,
267     var variable_Param: String,
268     normalParam: String
269 ) {
270     val value: String = ""
271     var variable: String = ""
272     val value_noBacking: String
273         get() = "aa"
274     var variable_noBacking: String
275         get() = "aa"
276         set(value) {}
277     val value_withBacking: String = ""
278         get() = field
279     var variable_withBacking: String? = null
280         get() = field
281     lateinit var lateinit_var: String
282 
283     companion object {
284         @JvmStatic
285         var staticVar: String = ""
286         @JvmStatic
287         val static_withBackingAndGetter: String = ""
288             get() = field
289         @JvmStatic
290         val static_noBackingVal: String
291             get() = ""
292         @JvmStatic
293         var static_noBackingVar: String
294             get() = ""
295             set(value) {}
296         var companionVar: String = ""
297         val companion_withBackingAndGetter: String = ""
298             get() = field
299         @JvmStatic
300         val companion_noBackingVal: String
301             get() = ""
302         @JvmStatic
303         var companion_noBackingVar: String
304             get() = ""
305             set(value) {}
306     }
307 }
308 
309 abstract class BaseClass {
310     open val overriddenBaseProp_willBeBacked: String = ""
311     open val overriddenBaseProp_wontBeBacked: String = ""
312     open val notOverriddenAbstractProp: String = ""
313     abstract val abstractProp_willBeBacked: String
314     abstract val abstractProp_wontBeBacked: String
315     open lateinit var lateinit_var_1: String
316     open lateinit var lateinit_var_2: String
317 }
318 
319 interface MyInterface {
320     val interfaceProp_willBeBacked: String
321     val interfaceProp_wontBeBacked: String
322     var lateinit_var_3: String
323 }
324 
325 class ChildClass: BaseClass(), MyInterface {
326     override val overriddenBaseProp_willBeBacked: String = ""
327     override val overriddenBaseProp_wontBeBacked: String
328         get() = ""
329     override val abstractProp_willBeBacked: String = ""
330     override val abstractProp_wontBeBacked: String
331         get() = ""
332     override val interfaceProp_willBeBacked: String = ""
333     override val interfaceProp_wontBeBacked: String
334         get() = ""
335     override var lateinit_var_1: String
336         get() = ""
337         set(v: String) = Unit
338     override var lateinit_var_2: String = ""
339     override lateinit var lateinit_var_3: String
340 }
341 
342 class ConstructorSetProp {
343     private val propSetInConstructor: Boolean
344     constructor(propSetInConstructor: Boolean) {
345         this.propSetInConstructor = propSetInConstructor
346     }
347 }
348 
349 // FILE: main/JavaClass.java
350 package main;
351 public class JavaClass {
352     private String javaField;
353     private String javaFieldWithAccessors;
354 
355     public String getJavaFieldWithAccessors()
<lambda>null356     { return ""; }
357     public void setJavaFieldWithAccessors(String value )
<lambda>null358     {}
359 
360     public String getJavaAccessorWithoutField()
<lambda>null361     { return ""; }
362     public void setJavaAccessorWithoutField(String value )
<lambda>null363     {}
364 }
365