[FIR] Support diagnostic QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE

This commit is contained in:
Nick
2020-04-20 01:46:29 +03:00
committed by Dmitriy Novozhilov
parent 7a928dfed2
commit 96238cbe1f
14 changed files with 222 additions and 62 deletions
@@ -0,0 +1,34 @@
interface IBase<T> {
fun foo() {}
fun bar() {}
}
typealias AliasedIBase1 = IBase<String>
typealias AliasedIBase = AliasedIBase1
interface IDerived<T> : IBase<T> {
override fun foo() {}
fun qux() {}
}
class Test : IDerived<String>, IBase<String> {
fun test() {
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>IBase<!>>.foo()
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>IBase<!>>.bar()
super<IDerived>.foo()
super<IDerived>.bar()
super<IDerived>.qux()
}
}
class Test2 : IDerived<String>, AliasedIBase {
fun test() {
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>IBase<!>>.foo()
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>IBase<!>>.bar()
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>AliasedIBase<!>>.foo()
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>AliasedIBase<!>>.bar()
super<IDerived>.foo()
super<IDerived>.bar()
super<IDerived>.qux()
}
}
@@ -0,0 +1,49 @@
FILE: qualifiedSupertypeExtendedByOtherSupertype.kt
public abstract interface IBase<T> : R|kotlin/Any| {
public open fun foo(): R|kotlin/Unit| {
}
public open fun bar(): R|kotlin/Unit| {
}
}
public final typealias AliasedIBase1 = R|IBase<kotlin/String>|
public final typealias AliasedIBase = R|AliasedIBase1|
public abstract interface IDerived<T> : R|IBase<T>| {
public open override fun foo(): R|kotlin/Unit| {
}
public open fun qux(): R|kotlin/Unit| {
}
}
public final class Test : R|IDerived<kotlin/String>|, R|IBase<kotlin/String>| {
public constructor(): R|Test| {
super<R|kotlin/Any|>()
}
public final fun test(): R|kotlin/Unit| {
super<R|IBase|>.R|/IBase.foo|()
super<R|IBase|>.R|/IBase.bar|()
super<R|IDerived|>.R|/IDerived.foo|()
super<R|IDerived|>.R|/IBase.bar|()
super<R|IDerived|>.R|/IDerived.qux|()
}
}
public final class Test2 : R|IDerived<kotlin/String>|, R|AliasedIBase| {
public constructor(): R|Test2| {
super<R|kotlin/Any|>()
}
public final fun test(): R|kotlin/Unit| {
super<R|IBase|>.R|/IBase.foo|()
super<R|IBase|>.R|/IBase.bar|()
super<R|AliasedIBase|>.R|/IBase.foo|()
super<R|AliasedIBase|>.R|/IBase.bar|()
super<R|IDerived|>.R|/IDerived.foo|()
super<R|IDerived|>.R|/IBase.bar|()
super<R|IDerived|>.R|/IDerived.qux|()
}
}