FIR: add test with problematic cases

This commit is contained in:
Mikhail Glukhikh
2019-08-29 11:43:06 +03:00
parent 652fd7ee73
commit 271c15114c
3 changed files with 117 additions and 0 deletions
@@ -0,0 +1,34 @@
val sb = StringBuilder()
val o = object : Any() {
val name = "123"
fun test() {
name
}
}
fun test() {
class Local
Local()
}
val Any.bar get() = "456"
val String.bar get() = "987"
val t = "".bar
val p = Pair(0, "")
class Base<T>(val x: T)
class Derived : Base<Int>(10)
val xx = Derived().x + 1
val t = throw AssertionError("")
interface A
interface B
interface C : A
class BC : B, C
fun C.analyze() {}
inline fun <reified T> T.analyze() where T : A, T : B {}
fun testAnalyze() {
BC().analyze()
}
@@ -0,0 +1,78 @@
FILE: problems.kt
public final val sb: <ERROR TYPE REF: Ambiguity: StringBuilder, [java/lang/StringBuilder.StringBuilder, java/lang/StringBuilder.StringBuilder]> = <Ambiguity: StringBuilder, [java/lang/StringBuilder.StringBuilder, java/lang/StringBuilder.StringBuilder]>#()
public get(): <ERROR TYPE REF: Ambiguity: StringBuilder, [java/lang/StringBuilder.StringBuilder, java/lang/StringBuilder.StringBuilder]>
public final val o: R|kotlin/Any| = object : R|kotlin/Any| {
private constructor(): R|kotlin/Any| {
super<R|kotlin/Any|>()
}
public final val name: R|kotlin/String| = String(123)
public get(): R|kotlin/String|
public final fun test(): R|kotlin/Unit| {
<Unresolved name: name>#
}
}
public get(): R|kotlin/Any|
public final fun test(): R|kotlin/Unit| {
local final class Local : R|kotlin/Any| {
public constructor(): R|Local| {
super<R|kotlin/Any|>()
}
}
<Unresolved name: Local>#()
}
public final val R|kotlin/Any|.bar: R|kotlin/String|
public get(): R|kotlin/String| {
^ String(456)
}
public final val R|kotlin/String|.bar: R|kotlin/String|
public get(): R|kotlin/String| {
^ String(987)
}
public final val t: <ERROR TYPE REF: Ambiguity: bar, [/bar, /bar]> = String().<Ambiguity: bar, [/bar, /bar]>#
public get(): <ERROR TYPE REF: Ambiguity: bar, [/bar, /bar]>
public final val p: <ERROR TYPE REF: Inapplicable(INAPPLICABLE): [kotlin/Pair.Pair]> = <Inapplicable(INAPPLICABLE): [kotlin/Pair.Pair]>#(Int(0), String())
public get(): <ERROR TYPE REF: Inapplicable(INAPPLICABLE): [kotlin/Pair.Pair]>
public final class Base<T> : R|kotlin/Any| {
public constructor<T>(x: R|T|): R|Base<T>| {
super<R|kotlin/Any|>()
}
public final val x: R|T| = R|<local>/x|
public get(): R|T|
}
public final class Derived : R|Base<kotlin/Int>| {
public constructor(): R|Derived| {
super<R|Base<kotlin/Int>|>(Int(10))
}
}
public final val xx: <ERROR TYPE REF: Inapplicable(WRONG_RECEIVER): [kotlin/plus, kotlin/plus, kotlin/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/text/plus]> = D|R|/Derived.Derived|()|.R|/Base.x|.<Inapplicable(WRONG_RECEIVER): [kotlin/plus, kotlin/plus, kotlin/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/text/plus]>#(Int(1))
public get(): <ERROR TYPE REF: Inapplicable(WRONG_RECEIVER): [kotlin/plus, kotlin/plus, kotlin/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/sequences/plus, kotlin/text/plus]>
public final val t: R|kotlin/Nothing| = throw <Ambiguity: AssertionError, [java/lang/AssertionError.AssertionError, java/lang/AssertionError.AssertionError]>#(String())
public get(): R|kotlin/Nothing|
public abstract interface A : R|kotlin/Any| {
}
public abstract interface B : R|kotlin/Any| {
}
public abstract interface C : R|A| {
}
public final class BC : R|B|, R|C| {
public constructor(): R|BC| {
super<R|kotlin/Any|>()
}
}
public final fun R|C|.analyze(): R|kotlin/Unit| {
}
public final inline fun <reified T : R|A|, R|B|> R|T|.analyze(): R|kotlin/Unit| {
}
public final fun testAnalyze(): R|kotlin/Unit| {
R|/BC.BC|().<Ambiguity: analyze, [/analyze, /analyze]>#()
}
@@ -94,6 +94,11 @@ public class FirResolveTestCaseWithStdlibGenerated extends AbstractFirResolveTes
runTest("compiler/fir/resolve/testData/resolve/stdlib/multipleImplicitReceivers.kt");
}
@TestMetadata("problems.kt")
public void testProblems() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/problems.kt");
}
@TestMetadata("recursiveBug.kt")
public void testRecursiveBug() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/stdlib/recursiveBug.kt");