/* * Copyright 2021 Google LLC * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // WITH_RUNTIME // TEST PROCESSOR: BackingFieldProcessor // EXPECTED: // lib.BaseClass.abstractProp_willBeBacked: false // lib.BaseClass.abstractProp_wontBeBacked: false // lib.BaseClass.lateinit_var_1: true // lib.BaseClass.lateinit_var_2: true // lib.BaseClass.notOverriddenAbstractProp: true // lib.BaseClass.overriddenBaseProp_willBeBacked: true // lib.BaseClass.overriddenBaseProp_wontBeBacked: true // lib.ChildClass.abstractProp_willBeBacked: true // lib.ChildClass.abstractProp_wontBeBacked: false // lib.ChildClass.interfaceProp_willBeBacked: true // lib.ChildClass.interfaceProp_wontBeBacked: false // lib.ChildClass.lateinit_var_1: false // lib.ChildClass.lateinit_var_2: true // lib.ChildClass.lateinit_var_3: true // lib.ChildClass.overriddenBaseProp_willBeBacked: true // lib.ChildClass.overriddenBaseProp_wontBeBacked: false // lib.ConstructorSetProp.propSetInConstructor: true // lib.DataClass.value_Param: true // lib.DataClass.variable_Param: true // lib.JavaClass.javaField: true // lib.JavaClass.javaFieldWithAccessors: true // lib.MyInterface.interfaceProp_willBeBacked: false // lib.MyInterface.interfaceProp_wontBeBacked: false // lib.MyInterface.lateinit_var_3: false // lib.NormalClass.Companion.companionVar: true // lib.NormalClass.Companion.companion_noBackingVal: false // lib.NormalClass.Companion.companion_noBackingVar: false // lib.NormalClass.Companion.companion_withBackingAndGetter: true // lib.NormalClass.Companion.staticVar: true // lib.NormalClass.Companion.static_noBackingVal: false // lib.NormalClass.Companion.static_noBackingVar: false // lib.NormalClass.Companion.static_withBackingAndGetter: true // lib.NormalClass.jvmField_withBacking: true // lib.NormalClass.lateinit_var: true // lib.NormalClass.value: true // lib.NormalClass.value_Param: true // lib.NormalClass.value_noBacking: false // lib.NormalClass.value_withBacking: true // lib.NormalClass.variable: true // lib.NormalClass.variable_Param: true // lib.NormalClass.variable_noBacking: false // lib.NormalClass.variable_withBacking: true // lib.lateinit_var: true // lib.value: true // lib.value_noBacking: false // lib.value_withBacking: true // lib.variable: true // lib.variable_noBacking: false // lib.variable_withBacking: true // main.BaseClass.abstractProp_willBeBacked: false // main.BaseClass.abstractProp_wontBeBacked: false // main.BaseClass.lateinit_var_1: true // main.BaseClass.lateinit_var_2: true // main.BaseClass.notOverriddenAbstractProp: true // main.BaseClass.overriddenBaseProp_willBeBacked: true // main.BaseClass.overriddenBaseProp_wontBeBacked: true // main.ChildClass.abstractProp_willBeBacked: true // main.ChildClass.abstractProp_wontBeBacked: false // main.ChildClass.interfaceProp_willBeBacked: true // main.ChildClass.interfaceProp_wontBeBacked: false // main.ChildClass.lateinit_var_1: false // main.ChildClass.lateinit_var_2: true // main.ChildClass.lateinit_var_3: true // main.ChildClass.overriddenBaseProp_willBeBacked: true // main.ChildClass.overriddenBaseProp_wontBeBacked: false // main.ConstructorSetProp.propSetInConstructor: true // main.DataClass.value_Param: true // main.DataClass.variable_Param: true // main.JavaClass.javaField: true // main.JavaClass.javaFieldWithAccessors: true // main.MyInterface.interfaceProp_willBeBacked: false // main.MyInterface.interfaceProp_wontBeBacked: false // main.MyInterface.lateinit_var_3: false // main.NormalClass.Companion.companionVar: true // main.NormalClass.Companion.companion_noBackingVal: false // main.NormalClass.Companion.companion_noBackingVar: false // main.NormalClass.Companion.companion_withBackingAndGetter: true // main.NormalClass.Companion.staticVar: true // main.NormalClass.Companion.static_noBackingVal: false // main.NormalClass.Companion.static_noBackingVar: false // main.NormalClass.Companion.static_withBackingAndGetter: true // main.NormalClass.lateinit_var: true // main.NormalClass.value: true // main.NormalClass.value_Param: true // main.NormalClass.value_noBacking: false // main.NormalClass.value_withBacking: true // main.NormalClass.variable: true // main.NormalClass.variable_Param: true // main.NormalClass.variable_noBacking: false // main.NormalClass.variable_withBacking: true // main.lateinit_var: true // main.value: true // main.value_noBacking: false // main.value_withBacking: true // main.variable: true // main.variable_noBacking: false // main.variable_withBacking: true // END // MODULE: lib // FILE: lib.kt package lib val value: String = "" var variable: String = "" val value_noBacking: String get() = "aa" var variable_noBacking: String get() = "aa" set(value) {} val value_withBacking: String = "" get() = field var variable_withBacking: String? = null get() = field lateinit var lateinit_var: String data class DataClass( val value_Param: String, var variable_Param: String ) class NormalClass( val value_Param: String, var variable_Param: String, normalParam: String ) { val value: String = "" var variable: String = "" val value_noBacking: String get() = "aa" var variable_noBacking: String get() = "aa" set(value) {} val value_withBacking: String = "" get() = field var variable_withBacking: String? = null get() = field val jvmField_withBacking: String = "" lateinit var lateinit_var: String companion object { @JvmStatic var staticVar: String = "" @JvmStatic val static_withBackingAndGetter: String = "" get() = field @JvmStatic val static_noBackingVal: String get() = "" @JvmStatic var static_noBackingVar: String get() = "" set(value) {} var companionVar: String = "" val companion_withBackingAndGetter: String = "" get() = field @JvmStatic val companion_noBackingVal: String get() = "" @JvmStatic var companion_noBackingVar: String get() = "" set(value) {} } } abstract class BaseClass { open val overriddenBaseProp_willBeBacked: String = "" open val overriddenBaseProp_wontBeBacked: String = "" open val notOverriddenAbstractProp: String = "" abstract val abstractProp_willBeBacked: String abstract val abstractProp_wontBeBacked: String open lateinit var lateinit_var_1: String open lateinit var lateinit_var_2: String } interface MyInterface { val interfaceProp_willBeBacked: String val interfaceProp_wontBeBacked: String var lateinit_var_3: String } class ChildClass: BaseClass(), MyInterface { override val overriddenBaseProp_willBeBacked: String = "" override val overriddenBaseProp_wontBeBacked: String get() = "" override val abstractProp_willBeBacked: String = "" override val abstractProp_wontBeBacked: String get() = "" override val interfaceProp_willBeBacked: String = "" override val interfaceProp_wontBeBacked: String get() = "" override var lateinit_var_1: String get() = "" set(v: String) = Unit override var lateinit_var_2: String = "" override lateinit var lateinit_var_3: String } class ConstructorSetProp { private val propSetInConstructor: Boolean constructor(propSetInConstructor: Boolean) { this.propSetInConstructor = propSetInConstructor } } // FILE: lib/JavaClass.java package lib; public class JavaClass { private String javaField; private String javaFieldWithAccessors; public String getJavaFieldWithAccessors() { return ""; } public void setJavaFieldWithAccessors(String value ) {} public String getJavaAccessorWithoutField() { return ""; } public void setJavaAccessorWithoutField(String value ) {} } // MODULE: main(lib) // FILE: main.kt package main val value: String = "" var variable: String = "" val value_noBacking: String get() = "aa" var variable_noBacking: String get() = "aa" set(value) {} val value_withBacking: String = "" get() = field var variable_withBacking: String? = null get() = field lateinit var lateinit_var: String data class DataClass( val value_Param: String, var variable_Param: String ) class NormalClass( val value_Param: String, var variable_Param: String, normalParam: String ) { val value: String = "" var variable: String = "" val value_noBacking: String get() = "aa" var variable_noBacking: String get() = "aa" set(value) {} val value_withBacking: String = "" get() = field var variable_withBacking: String? = null get() = field lateinit var lateinit_var: String companion object { @JvmStatic var staticVar: String = "" @JvmStatic val static_withBackingAndGetter: String = "" get() = field @JvmStatic val static_noBackingVal: String get() = "" @JvmStatic var static_noBackingVar: String get() = "" set(value) {} var companionVar: String = "" val companion_withBackingAndGetter: String = "" get() = field @JvmStatic val companion_noBackingVal: String get() = "" @JvmStatic var companion_noBackingVar: String get() = "" set(value) {} } } abstract class BaseClass { open val overriddenBaseProp_willBeBacked: String = "" open val overriddenBaseProp_wontBeBacked: String = "" open val notOverriddenAbstractProp: String = "" abstract val abstractProp_willBeBacked: String abstract val abstractProp_wontBeBacked: String open lateinit var lateinit_var_1: String open lateinit var lateinit_var_2: String } interface MyInterface { val interfaceProp_willBeBacked: String val interfaceProp_wontBeBacked: String var lateinit_var_3: String } class ChildClass: BaseClass(), MyInterface { override val overriddenBaseProp_willBeBacked: String = "" override val overriddenBaseProp_wontBeBacked: String get() = "" override val abstractProp_willBeBacked: String = "" override val abstractProp_wontBeBacked: String get() = "" override val interfaceProp_willBeBacked: String = "" override val interfaceProp_wontBeBacked: String get() = "" override var lateinit_var_1: String get() = "" set(v: String) = Unit override var lateinit_var_2: String = "" override lateinit var lateinit_var_3: String } class ConstructorSetProp { private val propSetInConstructor: Boolean constructor(propSetInConstructor: Boolean) { this.propSetInConstructor = propSetInConstructor } } // FILE: main/JavaClass.java package main; public class JavaClass { private String javaField; private String javaFieldWithAccessors; public String getJavaFieldWithAccessors() { return ""; } public void setJavaFieldWithAccessors(String value ) {} public String getJavaAccessorWithoutField() { return ""; } public void setJavaAccessorWithoutField(String value ) {} }