FIR checker: report uninitialized member/extension properties
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
e8028e7825
commit
e009b71f88
+8
-8
@@ -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) {}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
Vendored
+4
-4
@@ -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
|
||||
}
|
||||
|
||||
+1
-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"
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -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
|
||||
|
||||
|
||||
-17
@@ -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
@@ -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<!>
|
||||
|
||||
+11
-11
@@ -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
|
||||
}
|
||||
|
||||
+69
@@ -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
|
||||
}
|
||||
+11
-1
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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
|
||||
}
|
||||
|
||||
compiler/testData/diagnostics/tests/properties/extensionPropertyMustHaveAccessorsOrBeAbstract.fir.kt
Vendored
-25
@@ -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
|
||||
}
|
||||
Vendored
+1
@@ -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<!>
|
||||
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
Vendored
+1
-1
@@ -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') {
|
||||
|
||||
+1
-1
@@ -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() {
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
Vendored
+1
-1
@@ -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
|
||||
|
||||
Vendored
+5
-5
@@ -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
|
||||
|
||||
+4
-4
@@ -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<!>
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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 }
|
||||
|
||||
+1
-1
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user