FIR: prioritize visible imported classes during type resolution

and produce an error on ambiguity.
This commit is contained in:
pyos
2021-02-10 16:45:35 +01:00
committed by Mikhail Glukhikh
parent 291ed4a38a
commit 2dc0404751
25 changed files with 160 additions and 198 deletions
@@ -1,17 +0,0 @@
// FILE: a.kt
package a
class X
// FILE: b.kt
package b
class X
// FILE: c.kt
package c
import a.*
import b.*
class Y : X
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: a.kt
package a
@@ -14,4 +14,4 @@ package c
import a.X
import b.X
class Y : X
class Y : <!UNRESOLVED_REFERENCE!>X<!>
@@ -1,12 +0,0 @@
// FILE: File.kt
package pack
public open class InetAddressImpl
// FILE: Main.kt
package a
import java.net.* // should not import java.net.InetAddressImpl because it's package local
import pack.*
class X : <!UNRESOLVED_REFERENCE!>InetAddressImpl<!>() // should resolve to our pack.InetAddressImpl
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: File.kt
package pack
@@ -17,8 +17,8 @@ class D {
import a.A.B
import a.D.B
fun test(b: B) {
B()
fun test(b: <!UNRESOLVED_REFERENCE!>B<!>) {
<!UNRESOLVED_REFERENCE!>B<!>()
}
// FILE: d.kt
@@ -26,6 +26,6 @@ import a.A.*
import a.D.*
// todo ambiguvity here
fun test2(b: B) {
B()
fun test2(b: <!UNRESOLVED_REFERENCE!>B<!>) {
<!UNRESOLVED_REFERENCE!>B<!>()
}
@@ -1,17 +0,0 @@
// FILE: File1.kt
package pack1
private class SomeClass
// FILE: File2.kt
package pack2
public open class SomeClass
// FILE: Main.kt
package a
import pack1.*
import pack2.*
class X : <!EXPOSED_SUPER_CLASS, HIDDEN!>SomeClass<!>()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: File1.kt
package pack1
@@ -1,21 +0,0 @@
// FILE: File1.kt
package pack1
public class SomeClass {
private class N
public open class PublicNested
}
// FILE: File2.kt
package pack2
public open class N
// FILE: Main.kt
package a
import pack1.SomeClass.*
import pack2.*
class X : <!EXPOSED_SUPER_CLASS, HIDDEN!>N<!>()
class Y : PublicNested()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: File1.kt
package pack1
@@ -24,4 +24,4 @@ package c
import a.*
import b.*
fun test(): x = d().x()
fun test(): <!UNRESOLVED_REFERENCE!>x<!> = d().x()
@@ -22,8 +22,8 @@ class A {
import p1.*
import p2.*
fun test(a: A) {
a.m1()
fun test(a: <!UNRESOLVED_REFERENCE!>A<!>) {
a.<!UNRESOLVED_REFERENCE!>m1<!>()
a.<!UNRESOLVED_REFERENCE!>m2<!>()
}
@@ -39,8 +39,8 @@ import p1.*
import p2.*
import p3.*
fun test(a: A) {
a.v1
fun test(a: <!UNRESOLVED_REFERENCE!>A<!>) {
a.<!UNRESOLVED_REFERENCE!>v1<!>
a.<!UNRESOLVED_REFERENCE!>v2<!>
a.<!UNRESOLVED_REFERENCE!>v3<!>
}
@@ -23,8 +23,8 @@ class A {
import p1.*
import p2.*
fun test(a: A) {
a.m1()
fun test(a: <!UNRESOLVED_REFERENCE!>A<!>) {
a.<!UNRESOLVED_REFERENCE!>m1<!>()
a.<!UNRESOLVED_REFERENCE!>m2<!>()
}
@@ -40,8 +40,8 @@ import p1.*
import p2.*
import p3.*
fun test(a: A) {
a.v1
fun test(a: <!UNRESOLVED_REFERENCE!>A<!>) {
a.<!UNRESOLVED_REFERENCE!>v1<!>
a.<!UNRESOLVED_REFERENCE!>v2<!>
a.<!UNRESOLVED_REFERENCE!>v3<!>
}
@@ -29,6 +29,6 @@ fun test() {
<!AMBIGUITY!>Cls<!>()
take(<!AMBIGUITY!>Cls<!>())
Cls2()
take(Cls2())
<!UNRESOLVED_REFERENCE!>Cls2<!>()
take(<!UNRESOLVED_REFERENCE!>Cls2<!>())
}