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