Files
kotlin-fork/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingProjection.fir.txt
T
Roman Golyshev 9b9c51bc8d [FIR] Fix dispatch receivers on inner classes' constructors
1. Inner class constructor should have its outer class as a dispatch
receiver, since it is necessary for the call. Before it was null
2. Substituted inner class constructor should have its original dispatch
 receiver type with the proper substitution. Before it was set to the
 class itself (since the class was usually passed as a new dispatch
 receiver)

Also, modify FIR renderer, so it properly renders the dispatch receiver
of the constructors
2021-10-05 12:17:08 +00:00

182 lines
11 KiB
Plaintext
Vendored

FILE: conflictingProjection.kt
public final class None<T> : R|kotlin/Any| {
public constructor<T>(): R|None<T>| {
super<R|kotlin/Any|>()
}
}
public final class In<in T> : R|kotlin/Any| {
public constructor<in T>(): R|In<T>| {
super<R|kotlin/Any|>()
}
}
public final class Out<out T> : R|kotlin/Any| {
public constructor<out T>(): R|Out<T>| {
super<R|kotlin/Any|>()
}
}
public final fun a1(value: R|None<kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a2(value: R|None<in kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a3(value: R|None<out kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a4(value: R|In<kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a5(value: R|In<in kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a6(value: R|In<out kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a7(value: R|Out<kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a8(value: R|Out<in kotlin/Int>|): R|kotlin/Unit| {
}
public final fun a9(value: R|Out<out kotlin/Int>|): R|kotlin/Unit| {
}
public final typealias A1<K> = R|None<K>|
public final typealias A2<K> = R|None<in K>|
public final typealias A3<K> = R|None<out K>|
public final typealias A4<in K> = R|None<K>|
public final typealias A5<in K> = R|None<in K>|
public final typealias A6<in K> = R|None<out K>|
public final typealias A7<out K> = R|None<K>|
public final typealias A8<out K> = R|None<in K>|
public final typealias A9<out K> = R|None<out K>|
public final typealias A10<K> = R|In<K>|
public final typealias A11<K> = R|In<in K>|
public final typealias A12<K> = R|In<out K>|
public final typealias A13<in K> = R|In<K>|
public final typealias A14<in K> = R|In<in K>|
public final typealias A15<in K> = R|In<out K>|
public final typealias A16<out K> = R|In<K>|
public final typealias A17<out K> = R|In<in K>|
public final typealias A18<out K> = R|In<out K>|
public final typealias A19<K> = R|Out<K>|
public final typealias A20<K> = R|Out<in K>|
public final typealias A21<K> = R|Out<out K>|
public final typealias A22<in K> = R|Out<K>|
public final typealias A23<in K> = R|Out<in K>|
public final typealias A24<in K> = R|Out<out K>|
public final typealias A25<out K> = R|Out<K>|
public final typealias A26<out K> = R|Out<in K>|
public final typealias A27<out K> = R|Out<out K>|
public final class Outer<T> : R|kotlin/Any| {
public constructor<T>(): R|Outer<T>| {
super<R|kotlin/Any|>()
}
public final inner class Intermediate<K, T> : R|kotlin/Any| {
public Outer<T>.constructor<K>(): R|Outer.Intermediate<K, T>| {
super<R|kotlin/Any|>()
}
public final inner class Inner<G, K, T> : R|kotlin/Any| {
public Outer.Intermediate<K, T>.constructor<G>(): R|Outer.Intermediate.Inner<G, K, T>| {
super<R|kotlin/Any|>()
}
}
}
}
public final fun test1(): R|Outer.Intermediate.Inner<kotlin/Char, kotlin/String, kotlin/Int>| {
^test1 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test2(): R|Outer.Intermediate.Inner<kotlin/Char, kotlin/String, in kotlin/Int>| {
^test2 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test3(): R|Outer.Intermediate.Inner<kotlin/Char, kotlin/String, out kotlin/Int>| {
^test3 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test4(): R|Outer.Intermediate.Inner<kotlin/Char, in kotlin/String, kotlin/Int>| {
^test4 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test5(): R|Outer.Intermediate.Inner<kotlin/Char, out kotlin/String, kotlin/Int>| {
^test5 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test6(): R|Outer.Intermediate.Inner<in kotlin/Char, kotlin/String, kotlin/Int>| {
^test6 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test7(): R|Outer.Intermediate.Inner<out kotlin/Char, kotlin/String, kotlin/Int>| {
^test7 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test8(): R|Outer.Intermediate.Inner<kotlin/Char, out kotlin/String, in kotlin/Int>| {
^test8 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final fun test9(): R|Outer.Intermediate.Inner<out kotlin/Char, in kotlin/String, kotlin/Int>| {
^test9 R|/Outer.Outer|<R|kotlin/Int|>().R|SubstitutionOverride</Outer.Intermediate.Intermediate>|<R|kotlin/String|>().R|SubstitutionOverride</Outer.Intermediate.Inner.Inner>|<R|kotlin/Char|>()
}
public final class InOuter<in T> : R|kotlin/Any| {
public constructor<in T>(): R|InOuter<T>| {
super<R|kotlin/Any|>()
}
public final inner class OutIntermediate<out K, in T> : R|kotlin/Any| {
public InOuter<T>.constructor<out K>(): R|InOuter.OutIntermediate<K, T>| {
super<R|kotlin/Any|>()
}
public final inner class InInner<in G, out K, in T> : R|kotlin/Any| {
public InOuter.OutIntermediate<K, T>.constructor<in G>(): R|InOuter.OutIntermediate.InInner<G, K, T>| {
super<R|kotlin/Any|>()
}
}
}
}
public final fun test10(): R|InOuter.OutIntermediate.InInner<kotlin/Char, kotlin/String, kotlin/Int>| {
^test10 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().R|SubstitutionOverride</InOuter.OutIntermediate.InInner.InInner>|<R|kotlin/Char|>()
}
public final fun test11(): R|InOuter.OutIntermediate.InInner<kotlin/Char, kotlin/String, in kotlin/Int>| {
^test11 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().R|SubstitutionOverride</InOuter.OutIntermediate.InInner.InInner>|<R|kotlin/Char|>()
}
public final fun test12(): R|InOuter.OutIntermediate.InInner<kotlin/Char, kotlin/String, out kotlin/Int>| {
^test12 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().R|SubstitutionOverride</InOuter.OutIntermediate.InInner.InInner>|<R|kotlin/Char|>()
}
public final fun test13(): R|InOuter.OutIntermediate.InInner<kotlin/Char, in kotlin/String, kotlin/Int>| {
^test13 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().R|SubstitutionOverride</InOuter.OutIntermediate.InInner.InInner>|<R|kotlin/Char|>()
}
public final fun test14(): R|InOuter.OutIntermediate.InInner<kotlin/Char, out kotlin/String, kotlin/Int>| {
^test14 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().R|SubstitutionOverride</InOuter.OutIntermediate.InInner.InInner>|<R|kotlin/Char|>()
}
public final fun test15(): R|InOuter.OutIntermediate.InInner<in kotlin/Char, kotlin/String, kotlin/Int>| {
^test15 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().R|SubstitutionOverride</InOuter.OutIntermediate.InInner.InInner>|<R|kotlin/Char|>()
}
public final fun test16(): R|InOuter.OutIntermediate.InInner<out kotlin/Char, kotlin/String, kotlin/Int>| {
^test16 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().<CS errors: /InOuter.OutIntermediate.InInner.InInner>#<R|ERROR CLASS: Cannot infer argument for type parameter G|>()
}
public final fun test17(): R|InOuter.OutIntermediate.InInner<kotlin/Char, out kotlin/String, in kotlin/Int>| {
^test17 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().R|SubstitutionOverride</InOuter.OutIntermediate.InInner.InInner>|<R|kotlin/Char|>()
}
public final fun test18(): R|InOuter.OutIntermediate.InInner<out kotlin/Char, in kotlin/String, kotlin/Int>| {
^test18 R|/InOuter.InOuter|<R|kotlin/Int|>().R|SubstitutionOverride</InOuter.OutIntermediate.OutIntermediate>|<R|kotlin/String|>().<CS errors: /InOuter.OutIntermediate.InInner.InInner>#<R|ERROR CLASS: Cannot infer argument for type parameter G|>()
}
public final class TwoParametersOuter<T, in T1> : R|kotlin/Any| {
public constructor<T, in T1>(): R|TwoParametersOuter<T, T1>| {
super<R|kotlin/Any|>()
}
public final inner class TwoParametersIntermediate<out K, K1, T, in T1> : R|kotlin/Any| {
public TwoParametersOuter<T, T1>.constructor<out K, K1>(): R|TwoParametersOuter.TwoParametersIntermediate<K, K1, T, T1>| {
super<R|kotlin/Any|>()
}
public final inner class InInner<in G, G1, out K, K1, T, in T1> : R|kotlin/Any| {
public TwoParametersOuter.TwoParametersIntermediate<K, K1, T, T1>.constructor<in G, G1>(): R|TwoParametersOuter.TwoParametersIntermediate.InInner<G, G1, K, K1, T, T1>| {
super<R|kotlin/Any|>()
}
}
}
}
public final fun test19(): R|TwoParametersOuter.TwoParametersIntermediate.InInner<kotlin/Char, kotlin/Char, in kotlin/String, kotlin/Int, kotlin/Int, out kotlin/String>?| {
^test19 Null(null)
}