[FE] Prohibit missed MUST_BE_INITIALIZED when there is no primary constructor

^KT-58472 Fixed
Review: https://jetbrains.team/p/kt/reviews/9967
This commit is contained in:
Nikita Bobko
2023-05-05 17:53:25 +02:00
parent ac40010501
commit de8c3826c2
41 changed files with 934 additions and 60 deletions
@@ -0,0 +1,11 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo {
<!MUST_BE_INITIALIZED!>var x: String<!>
set(value) {}
init {
x = ""
}
}
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Base(x: Int)
class Foo : Base {
constructor() : super(1)
<!MUST_BE_INITIALIZED!>var x: String<!>
set(value) {}
init {
x = ""
}
}
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Base(x: Int)
class Foo : Base {
constructor() : super(1)
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
set(value) {}
init {
x = ""
}
}
@@ -0,0 +1,11 @@
// FIR_IDENTICAL
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo {
<!MUST_BE_INITIALIZED!>var x: String<!>
set(value) {}
constructor() {
x = ""
}
}
@@ -0,0 +1,11 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo {
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
set(value) {}
constructor() {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo {
constructor()
<!MUST_BE_INITIALIZED!>var x: String<!>
set(value) {}
init {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo {
constructor()
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
set(value) {}
init {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, +ProhibitOpenValDeferredInitialization
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Foo {
constructor()
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT!>open val x: String<!>
init {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, +ProhibitOpenValDeferredInitialization
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Foo {
constructor()
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open val x: String<!>
init {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, -ProhibitOpenValDeferredInitialization
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Foo {
constructor()
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open val x: String<!>
init {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, -ProhibitOpenValDeferredInitialization
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Foo {
constructor()
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open val x: String<!>
init {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Foo {
constructor()
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT!>open var x: String<!>
init {
x = ""
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
open class Foo {
constructor()
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open var x: String<!>
init {
x = ""
}
}
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
class Foo {
<!MUST_BE_INITIALIZED!>var foo: Int<!>
set(value) {}
constructor() {
if (1 != 1) {
foo = 1
}
}
}
@@ -0,0 +1,12 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
class Foo {
<!MUST_BE_INITIALIZED!>var foo: Int<!>
set(value) {}
constructor(x: Int) {}
constructor() {
foo = 1
}
}
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo {
constructor()
constructor(x: Int)
<!MUST_BE_INITIALIZED!>var x: String<!>
set(value) {}
init {
x = ""
}
}
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo {
constructor()
constructor(x: Int)
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
set(value) {}
init {
x = ""
}
}
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
class Foo() {
constructor(x: Int) : this()
<!MUST_BE_INITIALIZED!>var x: String<!>
set(value) {}
init {
x = ""
}
}