DelegationSpecifier resolve depends on expected type (supertype)

This commit is contained in:
Svetlana Isakova
2014-07-19 20:32:37 +04:00
parent e7c285e0e0
commit 8f6f8331ac
10 changed files with 78 additions and 46 deletions
@@ -0,0 +1,38 @@
package override
trait T {
fun foo()
val v : Int
}
open class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>Br<!>(t : T) : T {
}
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>Br3<!>(t : T) : Br(t) {
}
open class Br1(t : T) : T by t {
}
class Br2(t : T) : Br1(t) {
}
trait G<T> {
fun foo(t : T) : T
}
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>GC<!>() : G<Int> {
}
open class GC1(g : G<Int>) : G<Int> by g {
}
open class GC2(g : G<Int>) : GC1(g) {
}
@@ -0,0 +1,25 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
trait A<T> {
fun foo(): Int
}
class AImpl<T>: A<T> {
override fun foo() = 42
}
class B : A<Int> by AImpl()
fun <T> bar(): A<T> = AImpl()
class C : A<Int> by bar()
fun <T> baz(f: (T) -> T): A<T> = AImpl()
class D : A<Int> by baz({ it + 1 })
fun <T> boo(t: T): A<T> = AImpl()
class E : A<Int> by <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>boo<!>("")
class F : A<Int> by <!TYPE_MISMATCH!>AImpl<String>()<!>
@@ -0,0 +1,15 @@
open class Foo() {
}
class Barrr() : <!DELEGATION_NOT_TO_TRAIT!>Foo<!> by Foo() {}
trait T {}
class Br(t : T) : T by t {}
<!OPEN_MODIFIER_IN_ENUM!>open<!> enum class EN() {
A
}
class Test2(e : EN) : <!DELEGATION_NOT_TO_TRAIT!>EN<!> by e {}
@@ -0,0 +1,3 @@
class TestIface(r : Runnable) : Runnable by r {}
class TestObject(o : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>Object<!>) : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN, DELEGATION_NOT_TO_TRAIT!>Object<!> by o {}
@@ -0,0 +1,18 @@
// !DIAGNOSTICS: -CONFLICTING_JVM_DECLARATIONS
trait One {
public fun foo(): Any?
}
trait Two {
public fun foo(): String?
}
trait Three {
public fun foo(): String
}
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test123<!>(val v1: One, val v2: Two, val v3: Three) : One by v1, Two by v2, Three by v3 { }
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test132<!>(val v1: One, val v2: Two, val v3: Three) : One by v1, Three by v3, Two by v2 { }
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test312<!>(val v1: One, val v2: Two, val v3: Three) : Three by v3, One by v1, Two by v2 { }
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test321<!>(val v1: One, val v2: Two, val v3: Three) : Three by v3, Two by v2, One by v1 { }
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test231<!>(val v1: One, val v2: Two, val v3: Three) : Two by v2, Three by v3, One by v1 { }
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test213<!>(val v1: One, val v2: Two, val v3: Three) : Two by v2, One by v1, Three by v3 { }
@@ -0,0 +1,12 @@
trait A {
fun foo() {}
}
open class B(a: A) : A by a
class C(a: A): B(a), A {
}
fun b(c: C) {
c.foo();
}
@@ -0,0 +1,19 @@
// !DIAGNOSTICS: -CONFLICTING_JVM_DECLARATIONS
trait One {
public open fun foo() : Int
private fun boo() = 10
}
trait Two {
public open fun foo() : Int
}
trait OneImpl : One {
public override fun foo() = 1
}
trait TwoImpl : Two {
public override fun foo() = 2
}
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test1<!>() : TwoImpl, OneImpl {}
class Test2(a : One) : One by a, Two {}
class <!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>Test3<!>(a : One, b : Two) : Two by b, One by a {}
@@ -0,0 +1,10 @@
trait A {
fun foo() {}
}
trait B : A {}
class C(b : B) : B by b {
}