FIR checker: report uninitialized member/extension properties

This commit is contained in:
Jinseong Jeon
2021-02-23 14:33:44 -08:00
committed by Dmitriy Novozhilov
parent e8028e7825
commit e009b71f88
63 changed files with 487 additions and 230 deletions
+8 -8
View File
@@ -1,17 +1,17 @@
// FILE: b.kt
package MyPackage
//properties
val a: Int
<!MUST_BE_INITIALIZED!>val a: Int<!>
val a1: Int = 1
abstract val a2: Int
abstract val a3: Int = 1
var b: Int private set
<!MUST_BE_INITIALIZED!>var b: Int<!> private set
var b1: Int = 0; private set
abstract var b2: Int private set
abstract var b3: Int = 0; private set
var c: Int set(v: Int) { field = v }
<!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int set(v: Int) { field = v }
abstract var c3: Int = 0; set(v: Int) { field = v }
@@ -28,19 +28,19 @@ package MyPackage
abstract fun j() {}
//property accessors
var i: Int abstract get abstract set
<!MUST_BE_INITIALIZED!>var i: Int<!> abstract get abstract set
var i1: Int = 0; abstract get abstract set
var j: Int get() = i; abstract set
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
var j1: Int = 0; get() = i; abstract set
var k: Int abstract set
<!MUST_BE_INITIALIZED!>var k: Int<!> abstract set
var k1: Int = 0; abstract set
var l: Int abstract get abstract set
<!MUST_BE_INITIALIZED!>var l: Int<!> abstract get abstract set
var l1: Int = 0; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
// FILE: c.kt
//creating an instance
@@ -2,17 +2,17 @@ package abstract
abstract class MyAbstractClass() {
//properties
val a: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a: Int<!>
val a1: Int = 1
abstract val a2: Int
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
var b: Int private set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var b: Int<!> private set
var b1: Int = 0; private set
abstract var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
var c: Int set(v: Int) { field = v }
<!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
@@ -29,17 +29,18 @@ abstract class MyAbstractClass() {
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
//property accessors
var i: Int abstract get abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
var i1: Int = 0; abstract get abstract set
var j: Int get() = i; abstract set
var j1: Int get() = i; abstract set
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
<!MUST_BE_INITIALIZED!>var j1: Int<!> get() = i; abstract set
var k: Int abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
var k1: Int = 0; abstract set
var l: Int abstract get abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
var l1: Int = 0; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
}
+8 -8
View File
@@ -2,17 +2,17 @@ package abstract
class MyClass() {
//properties
val a: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a: Int<!>
val a1: Int = 1
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a2: Int
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a3: Int = 1
var b: Int private set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var b: Int<!> private set
var b1: Int = 0; private set
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b2: Int private set
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b3: Int = 0; private set
var c: Int set(v: Int) { field = v }
<!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c2: Int set(v: Int) { field = v }
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c3: Int = 0; set(v: Int) { field = v }
@@ -29,17 +29,17 @@ class MyClass() {
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
//property accessors
var i: Int abstract get abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
var i1: Int = 0; abstract get abstract set
var j: Int get() = i; abstract set
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
var j1: Int = 0; get() = i; abstract set
var k: Int abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
var k1: Int = 0; abstract set
var l: Int abstract get abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
var l1: Int = 0; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
}
+1 -1
View File
@@ -19,7 +19,7 @@ class Foo() : WithPC0, <!SYNTAX!>this<!>() {
}
class WithCPI_Dup(x : Int) {
var x : Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var x : Int<!>
}
class WithCPI(x : Int) {
@@ -1,19 +0,0 @@
// See KT-13997
class Foo {
var bar: Int // Ok
external get
external set
}
class Bar {
val foo: Int // Ok
external get
var baz: Int
external get
var gav: Int
external set
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See KT-13997
class Foo {
@@ -1,29 +0,0 @@
class X {
val x : Int
}
open class Y() {
val x : Int = 2
}
class Y1 {
val x : Int get() = 1
}
class Z : Y() {
}
//KT-650 Prohibit creating class without constructor.
class MyIterable<T> : Iterable<T>
{
override fun iterator(): Iterator<T> = MyIterator()
inner class MyIterator : Iterator<T>
{
override fun hasNext(): Boolean = false
override fun next(): T {
throw UnsupportedOperationException()
}
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
class X {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val x : Int<!>
}
@@ -1,7 +1,7 @@
package bar
@file:foo
val prop
<!MUST_BE_INITIALIZED!>@file:foo
val prop<!>
@file:[bar baz]
fun func() {}
@@ -6,7 +6,7 @@ class My(val v: Int) {
var y: Int
set(arg) { field = arg }
var z: Int
<!MUST_BE_INITIALIZED!>var z: Int<!>
set(arg) { field = arg }
// Ok: initializer available
@@ -4,7 +4,7 @@ abstract class My(val v: Int) {
open var y: Int
open var z: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>open var z: Int<!>
// Ok: initializer available
open var w: Int = v
@@ -159,7 +159,7 @@ class AnonymousInitializers(var a: String, val b: String) {
}
}
val o: String
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val o: String<!>
init {
if (1 < 3) {
o = "a"
@@ -196,7 +196,7 @@ open class Open(a: Int, w: Int) {}
class LocalValsVsProperties(val a: Int, w: Int) : Open(a, w) {
val x : Int
val y : Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
init {
x = 1
val b = x
@@ -279,7 +279,7 @@ fun foo() {
}
class TestObjectExpression() {
val a : Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a : Int<!>
fun foo() {
val a = object {
val x : Int
@@ -306,7 +306,7 @@ class TestObjectExpression() {
object TestObjectDeclaration {
val x : Int
val y : Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
init {
x = 1
}
@@ -83,7 +83,7 @@ class My {
}
}
val top: Int
<!MUST_BE_INITIALIZED!>val top: Int<!>
fun init() {
top = 1
@@ -1,5 +1,5 @@
class A(val next: A? = null) {
val x: String
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val x: String<!>
init {
next?.x = "a"
}
@@ -1,5 +1,5 @@
class Outer {
val outerProp: String
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val outerProp: String<!>
inner class Inner(inner: Inner, outer: Outer) {
val innerProp: String
init {
@@ -4,17 +4,17 @@ package abstract
enum class MyEnum() {
INSTANCE;
//properties
val a: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a: Int<!>
val a1: Int = 1
abstract val a2: Int
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
var b: Int private set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var b: Int<!> private set
var b1: Int = 0; private set
abstract var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
var c: Int set(v: Int) { field = v }
<!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
@@ -31,17 +31,17 @@ enum class MyEnum() {
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
//property accessors
var i: Int abstract get abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var i: Int<!> abstract get abstract set
var i1: Int = 0; abstract get abstract set
var j: Int get() = i; abstract set
<!MUST_BE_INITIALIZED!>var j: Int<!> get() = i; abstract set
var j1: Int = 0; get() = i; abstract set
var k: Int abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
var k1: Int = 0; abstract set
var l: Int abstract get abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var l: Int<!> abstract get abstract set
var l1: Int = 0; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
}
<!MUST_BE_INITIALIZED!>var n: Int<!> abstract get abstract set(v: Int) {}
@@ -37,7 +37,7 @@ fun test() {
val Int.abs : Int
get() = if (this > 0) this else -this;
val <T> T.foo : T
<!EXTENSION_PROPERTY_MUST_HAVE_ACCESSORS_OR_BE_ABSTRACT!>val <T> T.foo : T<!>
fun Int.foo() = this
@@ -1,17 +0,0 @@
package h
class Square() {
var size : Double =
<!UNRESOLVED_REFERENCE!>set<!>(<!UNRESOLVED_REFERENCE!>value<!>) {
<!SYNTAX!>$area<!> <!SYNTAX!>= size * size<!>
}
var area : Double
private set
}
fun main() {
val s = Square()
s.size = 2.0
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package h
class Square() {
@@ -1 +1 @@
val <T : <!UNRESOLVED_REFERENCE!>KClass<T>.something<!>> abc
<!MUST_BE_INITIALIZED!>val <T : <!UNRESOLVED_REFERENCE!>KClass<T>.something<!>> abc<!>
@@ -3,8 +3,8 @@ abstract class Test() {
abstract val x1 : Int get
abstract val x2 : Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
val a : Int
val b : Int get
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a : Int<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val b : Int<!> get
val c = 1
val c1 = 1
@@ -15,7 +15,7 @@ abstract class Test() {
get() { return 1 }
val c4 : Int
get() = 1
val c5 : Int
<!MUST_BE_INITIALIZED!>val c5 : Int<!>
get() = field + 1
abstract var y : Int
@@ -26,19 +26,19 @@ abstract class Test() {
abstract var y5 : Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(x) {}<!> <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
abstract var y6 : Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(x) {}<!>
var v : Int
var v1 : Int get
var v2 : Int get set
var v3 : Int get() = 1; set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v : Int<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v1 : Int<!> get
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v2 : Int<!> get set
<!MUST_BE_INITIALIZED!>var v3 : Int<!> get() = 1; set
var v4 : Int get() = 1; set(x){}
var v5 : Int get() = 1; set(x){field = x}
var v6 : Int get() = field + 1; set(x){}
<!MUST_BE_INITIALIZED!>var v5 : Int<!> get() = 1; set(x){field = x}
<!MUST_BE_INITIALIZED!>var v6 : Int<!> get() = field + 1; set(x){}
abstract val v7 : Int get
abstract var v8 : Int get set
var v9 : Int set
var v10 : Int get
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v9 : Int<!> set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v10 : Int<!> get
abstract val v11 : Int abstract get
abstract var v12 : Int abstract get abstract set
@@ -6,7 +6,7 @@ abstract class A() {
abstract <!REDUNDANT_MODIFIER!>open<!> fun g()
<!INCOMPATIBLE_MODIFIERS!>final<!> <!INCOMPATIBLE_MODIFIERS!>open<!> fun h() {}
open var r: String
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>open var r: String<!>
get
abstract protected set
}
@@ -0,0 +1,69 @@
// !LANGUAGE: +MultiPlatformProjects
// !DIAGNOSTICS: -UNUSED_PARAMETER
// MODULE: m1-common
// FILE: common.kt
import kotlin.reflect.KProperty
fun <T> lazy(initializer: () -> T): Lazy<T> = <!UNRESOLVED_REFERENCE!>TODO<!>()
interface Lazy<out T> {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = <!UNRESOLVED_REFERENCE!>TODO<!>()
}
expect class OuterClass {
class NestedClass {
class DeepNested {
class Another {
fun f(s: String)
val p: Int
val c: Int = <!EXPECTED_PROPERTY_INITIALIZER!>1<!>
val a: Int by <!EXPECTED_DELEGATED_PROPERTY!>lazy { 1 }<!>
}
}
}
inner class InnerClass {
fun f(x: Int)
val p: String
}
companion object
}
expect class OuterClassWithNamedCompanion {
companion object Factory
}
expect object OuterObject {
object NestedObject
}
// MODULE: m2-jvm(m1-common)
// FILE: jvm.kt
actual class OuterClass {
actual class NestedClass {
actual class DeepNested {
actual class Another {
actual fun f(s: String) {}
actual val p: Int = 42
actual val c: Int = 2
actual val a: Int = 3
}
}
}
actual inner class InnerClass {
actual fun f(x: Int) {}
actual val p: String = ""
}
actual companion object
}
actual class OuterClassWithNamedCompanion {
actual companion object Factory
}
actual object OuterObject {
actual object NestedObject
}
@@ -1,7 +1,13 @@
// FIR_IDENTICAL
// !LANGUAGE: +MultiPlatformProjects
// !DIAGNOSTICS: -UNUSED_PARAMETER
// MODULE: m1-common
// FILE: common.kt
import kotlin.reflect.KProperty
fun <T> lazy(initializer: () -> T): Lazy<T> = <!UNRESOLVED_REFERENCE!>TODO<!>()
interface Lazy<out T> {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = <!UNRESOLVED_REFERENCE!>TODO<!>()
}
expect class OuterClass {
class NestedClass {
@@ -9,6 +15,8 @@ expect class OuterClass {
class Another {
fun f(s: String)
val p: Int
val c: Int = <!EXPECTED_PROPERTY_INITIALIZER, EXPECTED_PROPERTY_INITIALIZER{JVM}!>1<!>
val a: Int <!EXPECTED_DELEGATED_PROPERTY, EXPECTED_DELEGATED_PROPERTY{JVM}!>by lazy { 1 }<!>
}
}
}
@@ -38,6 +46,8 @@ actual class OuterClass {
actual class Another {
actual fun f(s: String) {}
actual val p: Int = 42
actual val c: Int = 2
actual val a: Int = 3
}
}
}
@@ -1,6 +1,15 @@
// -- Module: <m1-common> --
package
public fun </*0*/ T> lazy(/*0*/ initializer: () -> T): Lazy<T>
public interface Lazy</*0*/ out T> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open operator fun getValue(/*0*/ thisRef: kotlin.Any?, /*1*/ property: kotlin.reflect.KProperty<*>): T
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final expect class OuterClass {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -31,6 +40,8 @@ public final expect class OuterClass {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final expect class Another {
public expect final val a: kotlin.Int
public expect final val c: kotlin.Int = 1
public expect final val p: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final expect fun f(/*0*/ s: kotlin.String): kotlin.Unit
@@ -68,6 +79,15 @@ public expect object OuterObject {
// -- Module: <m2-jvm> --
package
public fun </*0*/ T> lazy(/*0*/ initializer: () -> T): Lazy<T>
public interface Lazy</*0*/ out T> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open operator fun getValue(/*0*/ thisRef: kotlin.Any?, /*1*/ property: kotlin.reflect.KProperty<*>): T
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final actual class OuterClass {
public constructor OuterClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -104,6 +124,8 @@ public final actual class OuterClass {
public final actual class Another {
public constructor Another()
public actual final val a: kotlin.Int = 3
public actual final val c: kotlin.Int = 2
public actual final val p: kotlin.Int = 42
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final actual fun f(/*0*/ s: kotlin.String): kotlin.Unit
@@ -37,7 +37,7 @@ class MyIllegalClass3() : MyTrait, MyAbstractClass() {
class MyIllegalClass4() : MyTrait, MyAbstractClass() {
fun foo() {}
val pr : Unit
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val pr : Unit<!>
override fun other() {}
override val otherPr : Int = 1
}
@@ -1,25 +0,0 @@
val String.test1: Int
var String.test2: Int
var String.test3: Int; public set
class C {
val String.test1: Int
var String.test2: Int
var String.test3: Int; public set
}
interface I {
val String.test1: Int
var String.test2: Int
var String.test3: Int; public set
}
abstract class A {
val String.test1: Int
var String.test2: Int
var String.test3: Int; public set
abstract val String.testA1: Int
abstract var String.testA2: Int
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
<!EXTENSION_PROPERTY_MUST_HAVE_ACCESSORS_OR_BE_ABSTRACT!>val String.test1: Int<!>
<!EXTENSION_PROPERTY_MUST_HAVE_ACCESSORS_OR_BE_ABSTRACT!>var String.test2: Int<!>
@@ -5,7 +5,7 @@ var x
q checkType { _<Int>() }
}
var noSetter
<!MUST_BE_INITIALIZED!>var noSetter<!>
get() = 1
@@ -1,11 +0,0 @@
var x: Int
fun foo(f: Boolean) {
try {
if (f) {
x = 0
}
}
finally {
fun bar() {}
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
<!MUST_BE_INITIALIZED!>var x: Int<!>
fun foo(f: Boolean) {
try {
@@ -5,7 +5,7 @@ class A(val w: Char) {
val z: Int
val v = -1
val uninitialized: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
val overinitialized: Int
constructor(): this('a') {
@@ -5,7 +5,7 @@ class A {
val z: Int
val v = -1
val uninitialized: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
val overinitialized: Int
constructor() {
@@ -1,5 +1,5 @@
class A0 {
val x: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val x: Int<!>
constructor() {
if (1 == 1) {
return
@@ -12,7 +12,7 @@ class A0 {
}
class A1 {
val x: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val x: Int<!>
constructor() {
if (1 == 1) {
return
@@ -8,7 +8,7 @@ class A(val w: Int) {
val v = -1
val useInitialized = useUnitialized + v + w
val uninitialized: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
constructor(): this(1) {
x + y + v + uninitialized + w
@@ -9,7 +9,11 @@ class A {
val useInitialized = useUnitialized + v
val uninitialized: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
constructor(x: String): this() {
x + y + v + uninitialized
}
constructor() {
x = 1
@@ -30,10 +34,6 @@ class A {
x + y + v + uninitialized
}
constructor(x: String): this() {
x + y + v + uninitialized
}
//anonymous
init {
y
@@ -11,6 +11,10 @@ class A {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
constructor(x: String): this() {
x + y + v + uninitialized
}
constructor() {
x = 1
y = 2
@@ -30,10 +34,6 @@ class A {
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!>
}
constructor(x: String): this() {
x + y + v + uninitialized
}
//anonymous
init {
<!UNINITIALIZED_VARIABLE, UNINITIALIZED_VARIABLE!>y<!>
@@ -3,5 +3,5 @@ expect val bar1 = <!EXPECTED_PROPERTY_INITIALIZER!>42<!>
expect class Baz1
actual fun foo2() = 42
actual val bar2: Int
<!MUST_BE_INITIALIZED!>actual val bar2: Int<!>
actual interface Baz2
@@ -83,7 +83,7 @@ fun unknownRun(block: () -> Unit) = block()
class DefiniteInitializationInInitSection {
val x: Int
val y: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y: Int<!>
init {
myRun { x = 42 }
@@ -60,7 +60,7 @@ fun nestedIndefiniteAssignment() {
}
class InitializationForbiddenInNonInitSection {
val x: Int
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val x: Int<!>
fun setup() {
myRun { x = 42 }