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