[FIR] Disallow qualified access to uninitialized fields in delegate
When using a field as the delegate for a super-interface of an object, make sure uninitialized fields are not allowed. Specifically, disallow access to these fields when referenced via object qualifier. ^KT-56489 Fixed
This commit is contained in:
+4
-8
@@ -1,5 +1,6 @@
|
||||
// See KT-15566
|
||||
// WITH_STDLIB
|
||||
// NI_EXPECTED_FILE
|
||||
// ISSUE: KT-15566, KT-56489
|
||||
|
||||
import DefaultHttpClient.client
|
||||
|
||||
@@ -9,7 +10,7 @@ class HttpClientImpl : HttpClient
|
||||
|
||||
// Below we should have initialization error for both (!) delegates
|
||||
|
||||
object DefaultHttpClient : HttpClient by client {
|
||||
object DefaultHttpClient : HttpClient by <!UNINITIALIZED_VARIABLE!>client<!> {
|
||||
val client = HttpClientImpl()
|
||||
}
|
||||
|
||||
@@ -22,15 +23,10 @@ object DefaultHttpClientWithFun : HttpClient by fClient() {
|
||||
|
||||
private fun fClient() = HttpClientImpl()
|
||||
|
||||
private fun <T> lazy(init: () -> T): kotlin.<!UNRESOLVED_REFERENCE!>Lazy<!><T> {
|
||||
init()
|
||||
null!!
|
||||
}
|
||||
|
||||
object DefaultHttpClientWithBy : HttpClient by client {
|
||||
val client by lazy { HttpClientImpl() }
|
||||
}
|
||||
|
||||
object DefaultFqHttpClient : HttpClient by DefaultFqHttpClient.client {
|
||||
object DefaultFqHttpClient : HttpClient by <!UNINITIALIZED_VARIABLE!>DefaultFqHttpClient.client<!> {
|
||||
val client = HttpClientImpl()
|
||||
}
|
||||
|
||||
+3
-7
@@ -1,5 +1,6 @@
|
||||
// See KT-15566
|
||||
// WITH_STDLIB
|
||||
// NI_EXPECTED_FILE
|
||||
// ISSUE: KT-15566, KT-56489
|
||||
|
||||
import DefaultHttpClient.client
|
||||
|
||||
@@ -22,15 +23,10 @@ object DefaultHttpClientWithFun : HttpClient by fClient() {
|
||||
|
||||
private fun fClient() = HttpClientImpl()
|
||||
|
||||
private fun <T> lazy(init: () -> T): kotlin.<!UNRESOLVED_REFERENCE!>Lazy<!><T> {
|
||||
init()
|
||||
null!!
|
||||
}
|
||||
|
||||
object DefaultHttpClientWithBy : HttpClient by client {
|
||||
val client by lazy { HttpClientImpl() }
|
||||
}
|
||||
|
||||
object DefaultFqHttpClient : HttpClient by DefaultFqHttpClient.<!UNINITIALIZED_VARIABLE!>client<!> {
|
||||
val client = HttpClientImpl()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
package
|
||||
|
||||
private fun fClient(): HttpClientImpl
|
||||
private fun </*0*/ T> lazy(/*0*/ init: () -> T): [Error type: Unresolved type for kotlin.Lazy<T>]<T>
|
||||
|
||||
public object DefaultFqHttpClient : HttpClient {
|
||||
private constructor DefaultFqHttpClient()
|
||||
@@ -21,7 +20,7 @@ public object DefaultHttpClient : HttpClient {
|
||||
|
||||
public object DefaultHttpClientWithBy : HttpClient {
|
||||
private constructor DefaultHttpClientWithBy()
|
||||
public final val client: [Error type: Error delegation type for lazy { HttpClientImpl() }]
|
||||
public final val client: HttpClientImpl
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
Reference in New Issue
Block a user