FIR: check assignments and references to members in constructors
I.e. emit VAL_REASSIGNMENT on repeated assignments to `this.something`, UNINITIALIZED_VARIABLE on reads of it before any assignment if there is no initializer, and CAPTURED_MEMBER_VAL_INITIALIZATION on assignments inside non-called-in-place functions and named classes. ^KT-55528 Fixed
This commit is contained in:
Vendored
+1
-1
@@ -11,7 +11,7 @@ class A(val w: Char) {
|
||||
constructor(): this('a') {
|
||||
y = 1
|
||||
|
||||
overinitialized = 2
|
||||
<!VAL_REASSIGNMENT!>overinitialized<!> = 2
|
||||
uninitialized = 3
|
||||
}
|
||||
|
||||
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
class A {
|
||||
val x: Int
|
||||
var y: Int
|
||||
val z: Int
|
||||
val v = -1
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
|
||||
val overinitialized: Int
|
||||
|
||||
constructor() {
|
||||
x = 1
|
||||
y = 2
|
||||
|
||||
overinitialized = 3
|
||||
uninitialized = 4
|
||||
}
|
||||
|
||||
constructor(a: Int): super() {
|
||||
x = 5
|
||||
y = 6
|
||||
}
|
||||
|
||||
constructor(x: String): this() {
|
||||
y = 7
|
||||
uninitialized = 8
|
||||
}
|
||||
|
||||
//anonymous
|
||||
init {
|
||||
z = 9
|
||||
overinitialized = 10
|
||||
}
|
||||
|
||||
// anonymous
|
||||
init {
|
||||
y = 12
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
class A {
|
||||
val x: Int
|
||||
|
||||
Vendored
+7
-7
@@ -1,8 +1,8 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
class A(val w: Int) {
|
||||
val x: Int
|
||||
val useUnitialized = x +
|
||||
y +
|
||||
val useUnitialized = <!UNINITIALIZED_VARIABLE!>x<!> +
|
||||
<!UNINITIALIZED_VARIABLE!>y<!> +
|
||||
v
|
||||
var y: Int
|
||||
val v = -1
|
||||
@@ -11,20 +11,20 @@ class A(val w: Int) {
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
|
||||
|
||||
constructor(): this(1) {
|
||||
x + y + v + uninitialized + w
|
||||
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
|
||||
}
|
||||
|
||||
// anonymous
|
||||
init {
|
||||
x + y + v + uninitialized + w
|
||||
<!UNINITIALIZED_VARIABLE!>x<!> + <!UNINITIALIZED_VARIABLE!>y<!> + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
|
||||
x = 1
|
||||
x + y + v + uninitialized + w
|
||||
x + <!UNINITIALIZED_VARIABLE!>y<!> + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
|
||||
}
|
||||
|
||||
// anonymous
|
||||
init {
|
||||
x + y + v + uninitialized + w
|
||||
x + <!UNINITIALIZED_VARIABLE!>y<!> + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
|
||||
y = 7
|
||||
x + y + v + uninitialized + w
|
||||
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+6
-6
@@ -1,8 +1,8 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
class A {
|
||||
val x: Int
|
||||
val useUnitialized = x + // reported on each secondary constructor
|
||||
y +
|
||||
val useUnitialized = <!UNINITIALIZED_VARIABLE!>x<!> + // reported on each secondary constructor
|
||||
<!UNINITIALIZED_VARIABLE!>y<!> +
|
||||
v
|
||||
var y: Int
|
||||
val v = -1
|
||||
@@ -19,7 +19,7 @@ class A {
|
||||
x = 1
|
||||
y = 2
|
||||
|
||||
x + y + v + uninitialized
|
||||
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!>
|
||||
|
||||
uninitialized = 3
|
||||
|
||||
@@ -27,16 +27,16 @@ class A {
|
||||
}
|
||||
|
||||
constructor(a: Int): super() {
|
||||
x + y + v + uninitialized
|
||||
<!UNINITIALIZED_VARIABLE!>x<!> + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!>
|
||||
x = 4
|
||||
y = 5
|
||||
|
||||
x + y + v + uninitialized
|
||||
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!>
|
||||
}
|
||||
|
||||
//anonymous
|
||||
init {
|
||||
y
|
||||
<!UNINITIALIZED_VARIABLE!>y<!>
|
||||
}
|
||||
|
||||
// anonymous
|
||||
|
||||
Reference in New Issue
Block a user