[FIR TEST] Add test on qualifier resolve priority (corner case)

This commit is contained in:
Mikhail Glukhikh
2020-02-13 12:57:27 +03:00
parent abfe566255
commit 2a55560f3b
4 changed files with 101 additions and 1 deletions
@@ -29,6 +29,6 @@ class E {
}
fun main() {
E.f() // Resolves to (2)
E.f() // Resolves to (2) in old FE (to (1) in FIR with object implicit invoke support)
E.f.invoke() // Resolves to (1)
}
@@ -0,0 +1,27 @@
class AHolder(val a: Int)
class F {
object foo { // (1)
val a: Int = 42
}
companion object { // (2)
val foo: AHolder = AHolder(52)
}
}
class FF {
object foo {} // (1)
companion object { // (2)
val foo: AHolder = AHolder(52)
}
}
fun main() {
F.foo.a // (1) everywhere
F.foo // (2) in old FE, (1) in FIR
// Why companion?
with(F.foo) {
a // (2) in old FE, (1) in FIR
}
FF.foo.<!UNRESOLVED_REFERENCE!>a<!> // (1) everywhere
// Why not companion
}
@@ -0,0 +1,68 @@
FILE: qualifierPriority.kt
public final class AHolder : R|kotlin/Any| {
public constructor(a: R|kotlin/Int|): R|AHolder| {
super<R|kotlin/Any|>()
}
public final val a: R|kotlin/Int| = R|<local>/a|
public get(): R|kotlin/Int|
}
public final class F : R|kotlin/Any| {
public constructor(): R|F| {
super<R|kotlin/Any|>()
}
public final object foo : R|kotlin/Any| {
private constructor(): R|F.foo| {
super<R|kotlin/Any|>()
}
public final val a: R|kotlin/Int| = Int(42)
public get(): R|kotlin/Int|
}
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|F.Companion| {
super<R|kotlin/Any|>()
}
public final val foo: R|AHolder| = R|/AHolder.AHolder|(Int(52))
public get(): R|AHolder|
}
}
public final class FF : R|kotlin/Any| {
public constructor(): R|FF| {
super<R|kotlin/Any|>()
}
public final object foo : R|kotlin/Any| {
private constructor(): R|FF.foo| {
super<R|kotlin/Any|>()
}
}
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|FF.Companion| {
super<R|kotlin/Any|>()
}
public final val foo: R|AHolder| = R|/AHolder.AHolder|(Int(52))
public get(): R|AHolder|
}
}
public final fun main(): R|kotlin/Unit| {
Q|F.foo|.R|/F.foo.a|
Q|F.foo|
R|kotlin/with|<R|F.foo|, R|kotlin/Int|>(Q|F.foo|, <L> = with@fun R|F.foo|.<anonymous>(): R|kotlin/Int| <kind=EXACTLY_ONCE> {
^ this@R|special/anonymous|.R|/F.foo.a|
}
)
Q|FF.foo|.<Unresolved name: a>#
}
@@ -685,6 +685,11 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic
runTest("compiler/fir/resolve/testData/resolveWithStdlib/problems/KJKComplexHierarchyNestedLoop.kt");
}
@TestMetadata("qualifierPriority.kt")
public void testQualifierPriority() throws Exception {
runTest("compiler/fir/resolve/testData/resolveWithStdlib/problems/qualifierPriority.kt");
}
@TestMetadata("weakHashMap.kt")
public void testWeakHashMap() throws Exception {
runTest("compiler/fir/resolve/testData/resolveWithStdlib/problems/weakHashMap.kt");