JVM_IR KT-42020 special IdSignature for some fake override members

This commit is contained in:
Dmitry Petrov
2020-12-14 11:53:13 +03:00
parent 12cfba9ca9
commit b0f6461fa9
22 changed files with 1487 additions and 20 deletions
@@ -0,0 +1,172 @@
open class Base<T : Any?> {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
fun foo(x: T) {
}
fun foo(y: String) {
}
val T.bar: Int
get(): Int {
return 1
}
val String.bar: Int
get(): Int {
return 2
}
}
open class Derived : Base<String> {
constructor() /* primary */ {
super/*Base*/<String>()
/* <init>() */
}
}
class Derived2 : Derived {
constructor() /* primary */ {
super/*Derived*/()
/* <init>() */
}
}
fun test(b: Base<String>, d: Derived, d2: Derived2) {
b.foo(x = "")
b.foo(y = "")
d.foo(x = "")
d.foo(y = "")
d2.foo(x = "")
d2.foo(y = "")
}
open class BaseXY<X : Any?, Y : Any?> {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
fun foo(x: X, y: String) {
}
fun foo(x: String, y: Y) {
}
}
class DerivedXY : BaseXY<String, String> {
constructor() /* primary */ {
super/*BaseXY*/<String, String>()
/* <init>() */
}
}
fun outerFun() {
local open class LocalBase<T : Any?> {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
fun foo(x: T) {
}
fun foo(y: String) {
}
val T.bar: Int
get(): Int {
return 1
}
val String.bar: Int
get(): Int {
return 2
}
}
local open class LocalDerived : LocalBase<String> {
constructor() /* primary */ {
super/*LocalBase*/<String>()
/* <init>() */
}
}
local class LocalDerived2 : LocalDerived {
constructor() /* primary */ {
super/*LocalDerived*/()
/* <init>() */
}
}
local fun test(b: LocalBase<String>, d: LocalDerived, d2: LocalDerived2) {
b.foo(x = "")
b.foo(y = "")
d.foo(x = "")
d.foo(y = "")
d2.foo(x = "")
d2.foo(y = "")
}
}
open class Outer<T : Any?> {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
open inner class Inner {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
fun foo(x: T) {
}
fun foo(y: String) {
}
}
}
class OuterDerived : Outer<String> {
constructor() /* primary */ {
super/*Outer*/<String>()
/* <init>() */
}
inner class InnerDerived : Inner<String> {
constructor() /* primary */ {
<this>.super/*Inner*/()
/* <init>() */
}
}
}