[Test] Add test reproducing incorrect error in K2 about super qualifier

...with type arguments.
Also, add lazy resolve test to check the subsequent changes are correct.

^KT-66150
This commit is contained in:
Roman Efremov
2024-03-12 10:18:44 +01:00
committed by Space Team
parent a38d317824
commit c4f89ab32e
14 changed files with 897 additions and 0 deletions
@@ -0,0 +1,14 @@
// MEMBER_CLASS_FILTER: org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
package one
interface B<T> {
fun f() = true
}
open class A<T>(b: Boolean)
interface D
class C : B<Int> {
inner class Inn<caret>er : A<D>(super<B>.f())
}
@@ -0,0 +1,395 @@
RAW_FIR:
FILE: [ResolvedTo(RAW_FIR)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final? inner [ResolvedTo(RAW_FIR)] class Inner : A<D> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<A<D>>
}
}
}
IMPORTS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final? inner [ResolvedTo(RAW_FIR)] class Inner : A<D> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<A<D>>
}
}
}
COMPILER_REQUIRED_ANNOTATIONS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final? inner [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] class Inner : A<D> {
public? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<A<D>>
}
}
}
COMPANION_GENERATION:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final? inner [ResolvedTo(COMPANION_GENERATION)] class Inner : A<D> {
public? [ResolvedTo(COMPANION_GENERATION)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<A<D>>
}
}
}
SUPER_TYPES:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public final? [ResolvedTo(SUPER_TYPES)] interface B<[ResolvedTo(SUPER_TYPES)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(SUPER_TYPES)] class A<[ResolvedTo(SUPER_TYPES)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(SUPER_TYPES)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(SUPER_TYPES)] class C : R|one/B<kotlin/Int>| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final? inner [ResolvedTo(SUPER_TYPES)] class Inner : R|one/A<one/D>| {
public? [ResolvedTo(SUPER_TYPES)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<A<R|one/D|>>
}
}
}
TYPES:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public final? [ResolvedTo(SUPER_TYPES)] interface B<[ResolvedTo(SUPER_TYPES)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(SUPER_TYPES)] class A<[ResolvedTo(SUPER_TYPES)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(SUPER_TYPES)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(TYPES)] class C : R|one/B<kotlin/Int>| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final? inner [ResolvedTo(TYPES)] class Inner : R|one/A<one/D>| {
public? [ResolvedTo(TYPES)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<R|one/A<one/D>|>
}
}
}
STATUS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final inner [ResolvedTo(STATUS)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<R|one/A<one/D>|>
}
}
}
EXPECT_ACTUAL_MATCHING:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final inner [ResolvedTo(EXPECT_ACTUAL_MATCHING)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(EXPECT_ACTUAL_MATCHING)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<R|one/A<one/D>|>
}
}
}
CONTRACTS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final inner [ResolvedTo(CONTRACTS)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(CONTRACTS)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<R|one/A<one/D>|>
}
}
}
IMPLICIT_TYPES_BODY_RESOLVE:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final inner [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<R|one/A<one/D>|>
}
}
}
CONSTANT_EVALUATION:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final inner [ResolvedTo(CONSTANT_EVALUATION)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(CONSTANT_EVALUATION)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<R|one/A<one/D>|>
}
}
}
ANNOTATION_ARGUMENTS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final inner [ResolvedTo(ANNOTATION_ARGUMENTS)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
LAZY_super<R|one/A<one/D>|>
}
}
}
BODY_RESOLVE:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun f(): R|kotlin/Boolean| {
^f Boolean(true)
}
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(SUPER_TYPES)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final inner [ResolvedTo(ANNOTATION_ARGUMENTS)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
super<R|one/A<one/D>|>(this@R|one/C|.super<R|one/B<kotlin/Int>|>.R|SubstitutionOverride<one/B.f: R|kotlin/Boolean|>|())
}
}
}
FILE RAW TO BODY:
FILE: [ResolvedTo(BODY_RESOLVE)] superQualifierTypeArgsInDelegatedConstructorInnerClass.kt
public abstract [ResolvedTo(BODY_RESOLVE)] interface B<[ResolvedTo(BODY_RESOLVE)] T> : R|kotlin/Any| {
public open [ResolvedTo(BODY_RESOLVE)] fun f(): R|kotlin/Boolean| {
^f Boolean(true)
}
}
public open [ResolvedTo(BODY_RESOLVE)] class A<[ResolvedTo(BODY_RESOLVE)] T> : R|kotlin/Any| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] constructor<[ResolvedTo(BODY_RESOLVE)] T>([ResolvedTo(BODY_RESOLVE)] b: R|kotlin/Boolean|): R|one/A<T>| {
super<R|kotlin/Any|>()
}
}
public abstract [ResolvedTo(BODY_RESOLVE)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(BODY_RESOLVE)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor(): R|one/C| {
super<R|kotlin/Any|>()
}
public final inner [ResolvedTo(BODY_RESOLVE)] class Inner : R|one/A<one/D>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Inner] one/C.constructor(): R|one/C.Inner| {
super<R|one/A<one/D>|>(this@R|one/C|.super<R|one/B<kotlin/Int>|>.R|SubstitutionOverride<one/B.f: R|kotlin/Boolean|>|())
}
}
}
@@ -0,0 +1,15 @@
package one
interface B<T> {
fun f() = true
}
open class A<T>(b: Boolean)
interface D
class C : B<Int> {
fun te<caret>st() {
class LocalClass : A<D>(super<B>.f())
}
}
@@ -0,0 +1,371 @@
RAW_FIR:
FILE: [ResolvedTo(RAW_FIR)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public? final? [ResolvedTo(RAW_FIR)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
IMPORTS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public? final? [ResolvedTo(RAW_FIR)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
COMPILER_REQUIRED_ANNOTATIONS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
COMPANION_GENERATION:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public final? [ResolvedTo(RAW_FIR)] interface B<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(RAW_FIR)] class C : B<Int> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public? final? [ResolvedTo(COMPANION_GENERATION)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
SUPER_TYPES:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public final? [ResolvedTo(SUPER_TYPES)] interface B<[ResolvedTo(SUPER_TYPES)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(SUPER_TYPES)] class C : R|one/B<kotlin/Int>| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public? final? [ResolvedTo(SUPER_TYPES)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
TYPES:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public final? [ResolvedTo(SUPER_TYPES)] interface B<[ResolvedTo(SUPER_TYPES)] T> : R|kotlin/Any| {
public? final? [ResolvedTo(RAW_FIR)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final? [ResolvedTo(TYPES)] class C : R|one/B<kotlin/Int>| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public? final? [ResolvedTo(TYPES)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
STATUS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final [ResolvedTo(STATUS)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
EXPECT_ACTUAL_MATCHING:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun test(): R|kotlin/Unit| { LAZY_BLOCK }
}
CONTRACTS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final [ResolvedTo(CONTRACTS)] fun test(): R|kotlin/Unit| {
local final? [ResolvedTo(RAW_FIR)] class LocalClass : A<D> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|<local>/LocalClass| {
super<A<D>>(super<B>.f#())
}
}
}
}
IMPLICIT_TYPES_BODY_RESOLVE:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun test(): R|kotlin/Unit| {
local final? [ResolvedTo(RAW_FIR)] class LocalClass : A<D> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|<local>/LocalClass| {
super<A<D>>(super<B>.f#())
}
}
}
}
CONSTANT_EVALUATION:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final [ResolvedTo(CONSTANT_EVALUATION)] fun test(): R|kotlin/Unit| {
local final? [ResolvedTo(RAW_FIR)] class LocalClass : A<D> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|<local>/LocalClass| {
super<A<D>>(super<B>.f#())
}
}
}
}
ANNOTATION_ARGUMENTS:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(RAW_FIR)] class A<[ResolvedTo(RAW_FIR)] T> : R|kotlin/Any| {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor<[ResolvedTo(RAW_FIR)] T>([ResolvedTo(RAW_FIR)] b: Boolean): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] fun test(): R|kotlin/Unit| {
local final? [ResolvedTo(RAW_FIR)] class LocalClass : A<D> {
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|<local>/LocalClass| {
super<A<D>>(super<B>.f#())
}
}
}
}
BODY_RESOLVE:
FILE: [ResolvedTo(IMPORTS)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(STATUS)] interface B<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun f(): <implicit> { LAZY_BLOCK }
}
public open [ResolvedTo(STATUS)] class A<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] b: R|kotlin/Boolean|): R|one/A<T>| {
LAZY_super<R|kotlin/Any|>
}
}
public final? [ResolvedTo(RAW_FIR)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(STATUS)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=C] constructor(): R|one/C| {
LAZY_super<<implicit>>
}
public final [ResolvedTo(BODY_RESOLVE)] fun test(): R|kotlin/Unit| {
local final [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|one/A<one/D>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|<local>/LocalClass| {
super<R|one/A<one/D>|>(this@R|one/C|.super<<ERROR TYPE REF: Wrong number of type arguments>>.<Unresolved name: f>#())
}
}
}
}
FILE RAW TO BODY:
FILE: [ResolvedTo(BODY_RESOLVE)] superQualifierTypeArgsInDelegatedConstructorLocalClass.kt
public abstract [ResolvedTo(BODY_RESOLVE)] interface B<[ResolvedTo(BODY_RESOLVE)] T> : R|kotlin/Any| {
public open [ResolvedTo(BODY_RESOLVE)] fun f(): R|kotlin/Boolean| {
^f Boolean(true)
}
}
public open [ResolvedTo(BODY_RESOLVE)] class A<[ResolvedTo(BODY_RESOLVE)] T> : R|kotlin/Any| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] constructor<[ResolvedTo(BODY_RESOLVE)] T>([ResolvedTo(BODY_RESOLVE)] b: R|kotlin/Boolean|): R|one/A<T>| {
super<R|kotlin/Any|>()
}
}
public abstract [ResolvedTo(BODY_RESOLVE)] interface D : R|kotlin/Any| {
}
public final [ResolvedTo(BODY_RESOLVE)] class C : R|one/B<kotlin/Int>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor(): R|one/C| {
super<R|kotlin/Any|>()
}
public final [ResolvedTo(BODY_RESOLVE)] fun test(): R|kotlin/Unit| {
local final [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|one/A<one/D>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|<local>/LocalClass| {
super<R|one/A<one/D>|>(this@R|one/C|.super<<ERROR TYPE REF: Wrong number of type arguments>>.<Unresolved name: f>#())
}
}
}
}
@@ -600,6 +600,18 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst
runTest("analysis/low-level-api-fir/testData/lazyResolve/substitutionFakeOverrideWithImplicitTypeAndReceiver.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorInnerClass.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorInnerClass() {
runTest("analysis/low-level-api-fir/testData/lazyResolve/superQualifierTypeArgsInDelegatedConstructorInnerClass.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorLocalClass.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorLocalClass() {
runTest("analysis/low-level-api-fir/testData/lazyResolve/superQualifierTypeArgsInDelegatedConstructorLocalClass.kt");
}
@Test
@TestMetadata("superTypes.kt")
public void testSuperTypes() {
@@ -600,6 +600,18 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou
runTest("analysis/low-level-api-fir/testData/lazyResolve/substitutionFakeOverrideWithImplicitTypeAndReceiver.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorInnerClass.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorInnerClass() {
runTest("analysis/low-level-api-fir/testData/lazyResolve/superQualifierTypeArgsInDelegatedConstructorInnerClass.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorLocalClass.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorLocalClass() {
runTest("analysis/low-level-api-fir/testData/lazyResolve/superQualifierTypeArgsInDelegatedConstructorLocalClass.kt");
}
@Test
@TestMetadata("superTypes.kt")
public void testSuperTypes() {
@@ -1401,6 +1401,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/StringTemplates.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorCall.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorCall() {
runTest("compiler/testData/diagnostics/tests/superQualifierTypeArgsInDelegatedConstructorCall.kt");
}
@Test
@TestMetadata("SupertypeListChecks.kt")
public void testSupertypeListChecks() {
@@ -1401,6 +1401,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/StringTemplates.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorCall.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorCall() {
runTest("compiler/testData/diagnostics/tests/superQualifierTypeArgsInDelegatedConstructorCall.kt");
}
@Test
@TestMetadata("SupertypeListChecks.kt")
public void testSupertypeListChecks() {
@@ -1401,6 +1401,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/StringTemplates.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorCall.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorCall() {
runTest("compiler/testData/diagnostics/tests/superQualifierTypeArgsInDelegatedConstructorCall.kt");
}
@Test
@TestMetadata("SupertypeListChecks.kt")
public void testSupertypeListChecks() {
@@ -1401,6 +1401,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/StringTemplates.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorCall.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorCall() {
runTest("compiler/testData/diagnostics/tests/superQualifierTypeArgsInDelegatedConstructorCall.kt");
}
@Test
@TestMetadata("SupertypeListChecks.kt")
public void testSupertypeListChecks() {
@@ -0,0 +1,15 @@
interface B<T> {
fun f() = true
}
open class A(b: Boolean)
class C : B<Int> {
inner class Inner : A(super<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>B<!>>.<!UNRESOLVED_REFERENCE!>f<!>())
inner class Inner2 : A(super<B<!TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER!><Int><!>>.f())
fun test() {
class LocalClass : A(super<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>B<!>>.<!UNRESOLVED_REFERENCE!>f<!>())
class LocalClass2 : A(super<B<!TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER!><Int><!>>.f())
}
}
@@ -0,0 +1,15 @@
interface B<T> {
fun f() = true
}
open class A(b: Boolean)
class C : B<Int> {
inner class Inner : A(super<B>.f())
inner class Inner2 : A(super<B<!TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER!><Int><!>>.f())
fun test() {
class LocalClass : A(super<B>.f())
class LocalClass2 : A(super<B<!TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER!><Int><!>>.f())
}
}
@@ -0,0 +1,18 @@
// LL_FIR_DIVERGENCE
// WRONG_NUMBER_OF_TYPE_ARGUMENTS not reported in Inner class because of BodyBuildingMode.LAZY_BODIES
// LL_FIR_DIVERGENCE
interface B<T> {
fun f() = true
}
open class A(b: Boolean)
class C : B<Int> {
inner class Inner : A(super<B>.f())
inner class Inner2 : A(super<B<!TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER!><Int><!>>.f())
fun test() {
class LocalClass : A(super<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>B<!>>.<!UNRESOLVED_REFERENCE!>f<!>())
class LocalClass2 : A(super<B<!TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER!><Int><!>>.f())
}
}
@@ -1401,6 +1401,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/StringTemplates.kt");
}
@Test
@TestMetadata("superQualifierTypeArgsInDelegatedConstructorCall.kt")
public void testSuperQualifierTypeArgsInDelegatedConstructorCall() {
runTest("compiler/testData/diagnostics/tests/superQualifierTypeArgsInDelegatedConstructorCall.kt");
}
@Test
@TestMetadata("SupertypeListChecks.kt")
public void testSupertypeListChecks() {