Use original descriptor when mapping fake override

Otherwise wrong CONFLICTING_INHERITED_JVM_DECLARATIONS were reported

 #KT-10691 Fixed
This commit is contained in:
Denis Zharkov
2016-02-18 17:59:42 +03:00
parent 582b1c5e66
commit 4c88e2a0bc
11 changed files with 200 additions and 11 deletions
@@ -0,0 +1,15 @@
public open class A<T> {
fun foo(x: T) = "O"
fun foo(x: A<T>) = "K"
}
// Shoudt not be reported CONFLICTING_INHERITED_JVM_DECLARATIONS
class B : A<A<String>>()
fun box(): String {
val x: A<String> = A()
val y: A<A<String>> = A()
val b = B()
return b.foo(x) + b.foo(y)
}
@@ -0,0 +1,35 @@
public open class A<T> {
fun foo(x: T) = "O"
fun foo(x: A<T>) = "K"
}
interface C<E> {
fun foo(x: E): String
fun foo(x: A<E>): String
}
interface D {
fun foo(x: A<A<String>>): String
}
// Shoudt not be reported CONFLICTING_INHERITED_JVM_DECLARATIONS
class B : A<A<String>>(), C<A<String>>, D
fun box(): String {
val x: A<String> = A()
val y: A<A<String>> = A()
val b = B()
val bResult = b.foo(x) + b.foo(y)
if (bResult != "OK") return "fail 1: $bResult"
val c: C<A<String>> = B()
val cResult = c.foo(x) + c.foo(y)
if (cResult != "OK") return "fail 2: $cResult"
val d: D = B()
if (d.foo(y) != "K") return "fail 3"
return "OK"
}