[NI] Don't resolve delegates twice

#KT-31219 Fixed
#KT-31679 Fixed
#KT-32249 Fixed
This commit is contained in:
Dmitriy Novozhilov
2019-12-23 12:49:46 +03:00
parent 0c01499d98
commit e83941a98e
38 changed files with 378 additions and 72 deletions
@@ -0,0 +1,17 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ISSUE: KT-31219
import kotlin.reflect.KProperty
interface Intf
interface GenericIntf<T>
class Foo {
private val generic1 by lazy {
abstract class LocalIntf : GenericIntf<CharSequence>
object : LocalIntf() {}
}
}
@@ -0,0 +1,17 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ISSUE: KT-31219
import kotlin.reflect.KProperty
interface Intf
interface GenericIntf<T>
class Foo {
private val generic1 by lazy {
abstract class LocalIntf : GenericIntf<CharSequence>
object : LocalIntf() {}
}
}
@@ -0,0 +1,21 @@
package
public final class Foo {
public constructor Foo()
private final val generic1: Foo.generic1.<anonymous>.<no name provided>
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
}
public interface GenericIntf</*0*/ T> {
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
}
public interface Intf {
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
}
@@ -0,0 +1,20 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ISSUE: KT-31679
import kotlin.reflect.KProperty
class MyDelegate<T>(p: () -> T) {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = TODO()
}
private val privateObj by MyDelegate {
object {
val x = 42
}
}
fun test() {
privateObj.<!UNRESOLVED_REFERENCE!>x<!>
}
@@ -0,0 +1,20 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ISSUE: KT-31679
import kotlin.reflect.KProperty
class MyDelegate<T>(p: () -> T) {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = TODO()
}
private val privateObj by MyDelegate {
object {
val x = 42
}
}
fun test() {
privateObj.x
}
@@ -0,0 +1,12 @@
package
private val privateObj: privateObj.<anonymous>.<no name provided>
public fun test(): kotlin.Unit
public final class MyDelegate</*0*/ T> {
public constructor MyDelegate</*0*/ T>(/*0*/ p: () -> T)
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final 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
}
@@ -0,0 +1,18 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ISSUE: KT-32249
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
class Wrapper<T>(val name: String, val defaultValue: T)
private fun <T> wrapper(defaultValue: T) = object : ReadOnlyProperty<Any, Wrapper<T>> {
override fun getValue(thisRef: Any, property: KProperty<*>): Wrapper<T> = null!!
}
object Foo {
val x by wrapper(true)
val y: Wrapper<Boolean> by wrapper(true)
}
@@ -0,0 +1,18 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ISSUE: KT-32249
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
class Wrapper<T>(val name: String, val defaultValue: T)
private fun <T> wrapper(defaultValue: T) = object : ReadOnlyProperty<Any, Wrapper<T>> {
override fun getValue(thisRef: Any, property: KProperty<*>): Wrapper<T> = null!!
}
object Foo {
val x by wrapper(true)
val y: Wrapper<Boolean> by wrapper(true)
}
@@ -0,0 +1,21 @@
package
private fun </*0*/ T> wrapper(/*0*/ defaultValue: T): wrapper.<no name provided><T>
public object Foo {
private constructor Foo()
public final val x: Wrapper<kotlin.Boolean>
public final val y: Wrapper<kotlin.Boolean>
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
}
public final class Wrapper</*0*/ T> {
public constructor Wrapper</*0*/ T>(/*0*/ name: kotlin.String, /*1*/ defaultValue: T)
public final val defaultValue: T
public final val name: kotlin.String
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
}