[FIR] Add diagnostic INAPPLICABLE_LATEINIT_MODIFIER + some builtin types
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
$TESTDATA_DIR$/inapplicableLateinitModifier.kt
|
||||
-Xuse-fir
|
||||
-d
|
||||
$TEMP_DIR$
|
||||
@@ -0,0 +1,24 @@
|
||||
object Delegate {
|
||||
operator fun getValue(instance: Any?, property: Any) : String = ""
|
||||
operator fun setValue(instance: Any?, property: Any, value: String) {}
|
||||
}
|
||||
|
||||
lateinit var kest by Delegate
|
||||
|
||||
class A {
|
||||
lateinit val fest = "10"
|
||||
lateinit var mest: String
|
||||
lateinit var xest: String?
|
||||
lateinit var nest: Int
|
||||
lateinit val dest: String
|
||||
get() = "KEKER"
|
||||
}
|
||||
|
||||
class B<T> {
|
||||
lateinit var best: T
|
||||
}
|
||||
|
||||
fun rest() {
|
||||
lateinit var a: A
|
||||
lateinit var b: B<String> = B()
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:6:1: error: 'lateinit' modifier is not allowed on properties of primitive types
|
||||
lateinit var test: Int
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:7:1: error: 'lateinit' modifier is not allowed on delegated properties
|
||||
lateinit var kest by Delegate
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:12:5: error: 'lateinit' modifier is allowed only on mutable properties
|
||||
lateinit val fest = "10"
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:12:5: error: 'lateinit' modifier is not allowed on properties with initializer
|
||||
lateinit val fest = "10"
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:14:5: error: 'lateinit' modifier is not allowed on properties of nullable types
|
||||
lateinit var xest: String?
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:15:5: error: 'lateinit' modifier is not allowed on properties of primitive types
|
||||
lateinit var nest: Int
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:16:5: error: 'lateinit' modifier is not allowed on properties of primitive types
|
||||
lateinit var west: Char
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:17:5: error: 'lateinit' modifier is not allowed on properties of primitive types
|
||||
lateinit var qest: Boolean
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:18:5: error: 'lateinit' modifier is not allowed on properties of primitive types
|
||||
lateinit var aest: Short
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:19:5: error: 'lateinit' modifier is not allowed on properties of primitive types
|
||||
lateinit var hest: Byte
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:20:5: error: 'lateinit' modifier is not allowed on properties of primitive types
|
||||
lateinit var jest: Long
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:21:5: error: 'lateinit' modifier is allowed only on mutable properties
|
||||
lateinit val dest: String
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:21:5: error: 'lateinit' modifier is not allowed on properties with a custom getter or setter
|
||||
lateinit val dest: String
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:26:5: error: 'lateinit' modifier is not allowed on properties of a type with nullable upper bound
|
||||
lateinit var best: T
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:31:5: error: 'lateinit' modifier is not allowed on properties of nullable types
|
||||
lateinit var vest: K?
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:35:5: error: 'lateinit' modifier is not allowed on local variables of primitive types
|
||||
lateinit var i: Int
|
||||
^
|
||||
compiler/testData/cli/jvm/inapplicableLateinitModifier.kt:37:5: error: 'lateinit' modifier is not allowed on local variables with initializer
|
||||
lateinit var b: B<String> = B()
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
Vendored
+1
-1
@@ -9,7 +9,7 @@ fun test() {
|
||||
val <T : __UNRESOLVED__> a1 = ""
|
||||
val <T : String> a2 = 0
|
||||
const val <T> a3 = 0
|
||||
lateinit val <T> a4 = 0
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val <T> a4 = 0<!>
|
||||
val <T> a5 by Delegate<Int>()
|
||||
val <T> a6 by <!INAPPLICABLE_CANDIDATE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -9,7 +9,7 @@ fun test() {
|
||||
val <T : __UNRESOLVED__> a1 = ""
|
||||
val <T : String> a2 = 0
|
||||
const val <T> a3 = 0
|
||||
lateinit val <T> a4 = 0
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val <T> a4 = 0<!>
|
||||
val <T> a5 by Delegate<Int>()
|
||||
val <T> a6 by <!INAPPLICABLE_CANDIDATE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
|
||||
}
|
||||
|
||||
+5
-5
@@ -10,9 +10,9 @@ object Delegate {
|
||||
|
||||
|
||||
fun test() {
|
||||
lateinit val test0: Any
|
||||
lateinit var test1: Int
|
||||
lateinit var test2: Any?
|
||||
lateinit var test3: String = ""
|
||||
lateinit var test4 by Delegate
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val test0: Any<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var test1: Int<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var test2: Any?<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var test3: String = ""<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var test4 by Delegate<!>
|
||||
}
|
||||
|
||||
+16
-16
@@ -8,12 +8,12 @@ class CustomDelegate {
|
||||
|
||||
public abstract class A<T: Any, V: String?>(lateinit var p2: String) {
|
||||
|
||||
public lateinit val a: String
|
||||
lateinit val b: T
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>public lateinit val a: String<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val b: T<!>
|
||||
private lateinit var c: CharSequence
|
||||
|
||||
lateinit val d: String
|
||||
get
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val d: String
|
||||
get<!>
|
||||
|
||||
public lateinit var e: String
|
||||
get
|
||||
@@ -23,22 +23,22 @@ public abstract class A<T: Any, V: String?>(lateinit var p2: String) {
|
||||
lateinit var a: String
|
||||
}
|
||||
|
||||
lateinit var e1: V
|
||||
lateinit var e2: String?
|
||||
lateinit var e3: Int
|
||||
lateinit var e4: Int?
|
||||
lateinit var e5 = "A"
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e1: V<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e2: String?<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e3: Int<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e4: Int?<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e5 = "A"<!>
|
||||
|
||||
// With initializer, primitive
|
||||
lateinit var e6 = 3
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e6 = 3<!>
|
||||
|
||||
lateinit var e7 by CustomDelegate()
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e7 by CustomDelegate()<!>
|
||||
|
||||
lateinit var e8: String
|
||||
get() = "A"
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e8: String
|
||||
get() = "A"<!>
|
||||
|
||||
lateinit var e9: String
|
||||
set(v) { field = v }
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e9: String
|
||||
set(v) { field = v }<!>
|
||||
|
||||
abstract lateinit var e10: String
|
||||
|
||||
@@ -47,7 +47,7 @@ public abstract class A<T: Any, V: String?>(lateinit var p2: String) {
|
||||
lateinit var String.e12: String
|
||||
}
|
||||
|
||||
lateinit val topLevel: String
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val topLevel: String<!>
|
||||
lateinit var topLevelMutable: String
|
||||
|
||||
public interface Intf {
|
||||
|
||||
+16
-16
@@ -8,12 +8,12 @@ class CustomDelegate {
|
||||
|
||||
public abstract class A<T: Any, V: String?>(lateinit var p2: String) {
|
||||
|
||||
public lateinit val a: String
|
||||
lateinit val b: T
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>public lateinit val a: String<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val b: T<!>
|
||||
private lateinit var c: CharSequence
|
||||
|
||||
lateinit val d: String
|
||||
get
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val d: String
|
||||
get<!>
|
||||
|
||||
public lateinit var e: String
|
||||
get
|
||||
@@ -23,22 +23,22 @@ public abstract class A<T: Any, V: String?>(lateinit var p2: String) {
|
||||
lateinit var a: String
|
||||
}
|
||||
|
||||
lateinit var e1: V
|
||||
lateinit var e2: String?
|
||||
lateinit var e3: Int
|
||||
lateinit var e4: Int?
|
||||
lateinit var e5 = "A"
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e1: V<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e2: String?<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e3: Int<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e4: Int?<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e5 = "A"<!>
|
||||
|
||||
// With initializer, primitive
|
||||
lateinit var e6 = 3
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e6 = 3<!>
|
||||
|
||||
lateinit var e7 by CustomDelegate()
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e7 by CustomDelegate()<!>
|
||||
|
||||
lateinit var e8: String
|
||||
get() = "A"
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e8: String
|
||||
get() = "A"<!>
|
||||
|
||||
lateinit var e9: String
|
||||
set(v) { field = v }
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var e9: String
|
||||
set(v) { field = v }<!>
|
||||
|
||||
abstract lateinit var e10: String
|
||||
|
||||
@@ -47,7 +47,7 @@ public abstract class A<T: Any, V: String?>(lateinit var p2: String) {
|
||||
lateinit var String.e12: String
|
||||
}
|
||||
|
||||
lateinit val topLevel: String
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val topLevel: String<!>
|
||||
lateinit var topLevelMutable: String
|
||||
|
||||
public interface Intf {
|
||||
|
||||
@@ -7,8 +7,8 @@ object Delegate {
|
||||
|
||||
lateinit var testOk: String
|
||||
|
||||
lateinit val testErr0: Any
|
||||
lateinit var testErr1: Int
|
||||
lateinit var testErr2: Any?
|
||||
lateinit var testErr3: String = ""
|
||||
lateinit var testErr4 by Delegate
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit val testErr0: Any<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var testErr1: Int<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var testErr2: Any?<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var testErr3: String = ""<!>
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit var testErr4 by Delegate<!>
|
||||
|
||||
Reference in New Issue
Block a user