Use NewQualifiedExpressionResolver for resolve types

This commit is contained in:
Stanislav Erokhin
2015-09-13 02:01:03 +03:00
parent 8efbf4fc32
commit 69cb3f818d
18 changed files with 701 additions and 351 deletions
@@ -30,6 +30,12 @@ fun test(b: B) {
val b_2: B = a.B()
b_2.m1()
val b_3: B = B()
b_3.m1()
val b_4: B = a.B()
b_4.m1()
}
@@ -56,6 +62,9 @@ fun test(b: B) {
val b_: B = B()
b_.m1()
val b_2 = B()
b_2.m1()
}
// FILE: top_d.kt
@@ -66,4 +75,7 @@ fun test2(b: B) {
val b_: B = B()
b_.m1()
val b_2 = B()
b_2.m1()
}
@@ -31,6 +31,12 @@ fun test(b: B) {
val b_2: B = a.B()
b_2.m2()
val b_3 = B()
b_3.m2()
val b_4 = a.B()
b_4.m2()
}
@@ -60,4 +66,10 @@ fun test(b: B) {
val b_2 = B()
b_2.m2()
val b_3 = B()
b_3.m2()
val b_4 = <!UNRESOLVED_REFERENCE!>a<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>B<!>()
<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b_4<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>m2<!>()
}
@@ -40,6 +40,9 @@ fun test(a_b: b) {
val a_bc: b.c = b.c()
a_bc.a_bc()
val a_bc2 = b.c()
a_bc2.a_bc()
a_fun()
}
@@ -49,6 +52,9 @@ fun test2(ab_c: c) {
val ab_cd: c.d = c.d()
ab_cd.ab_cd()
val ab_cd2 = c.d()
ab_cd2.ab_cd()
ab_fun()
}
@@ -64,6 +70,9 @@ fun test(a_b: b) {
val a_bc: b.c = b.c()
a_bc.a_bc()
val a_bc2 = b.c()
a_bc2.a_bc()
a_fun()
}
@@ -73,6 +82,9 @@ fun test2(ab_c: c) {
val ab_cd: c.d = c.d()
ab_cd.ab_cd()
val ab_cd2 = c.d()
ab_cd2.ab_cd()
ab_fun()
}
@@ -91,6 +103,9 @@ fun test(a_b: b) {
val a_bc: b.c = b.c()
a_bc.a_bc()
val a_bc2 = b.c()
a_bc2.a_bc()
a_fun()
}
@@ -100,6 +115,9 @@ fun test2(ab_c: c) {
val ab_cd: c.d = c.d()
ab_cd.ab_cd()
val ab_cd2 = c.d()
ab_cd2.ab_cd()
ab_fun()
}
@@ -115,6 +133,9 @@ fun test(a_b: b) {
val a_bc: b.c = b.c()
a_bc.a_bc()
val a_bc2 = b.c()
a_bc2.a_bc()
a_fun()
}
@@ -124,5 +145,8 @@ fun test2(ab_c: c) {
val ab_cd: c.d = c.d()
ab_cd.ab_cd()
val ab_cd2 = c.d()
ab_cd2.ab_cd()
ab_fun()
}
@@ -43,7 +43,10 @@ fun test2(_a: a) {
_a._a()
val _ab: a.b = a.b()
_ab.<!UNRESOLVED_REFERENCE!>_ab<!>() // todo
_ab._ab()
val _ab2 = a.b()
_ab2.<!UNRESOLVED_REFERENCE!>_ab<!>() // todo
_fun()
}
@@ -56,7 +59,10 @@ fun test3(_a: a) {
_a._a()
val _ab: a.b = a.b()
_ab.<!UNRESOLVED_REFERENCE!>_ab<!>() // todo
_ab._ab()
val _ab2 = a.b()
_ab2.<!UNRESOLVED_REFERENCE!>_ab<!>() // todo
_fun()
}
@@ -25,10 +25,14 @@ fun test(ab_c: c) {
val ab_c2: a.b.c = a.b.c()
ab_c2.ab_c()
val ab_c3 = a.b.c()
ab_c3.ab_c()
}
fun test2(a_bc: a.b<Int>.c) {
a_bc.<!UNRESOLVED_REFERENCE!>a_bc<!>() // todo
a_bc.ab_c() // todo
}
@@ -58,10 +62,14 @@ import a.b
fun test(a_b: b) {
a_b.a_b()
val a_b2: a.b = a.b()
a_b2.a_b()
val _ab: a.b = a.b()
_ab._ab()
val _ab2 = a.b()
_ab2.<!UNRESOLVED_REFERENCE!>_ab<!>() // todo
}
fun test2(_ab: a<Int>.b) {
_ab.<!UNRESOLVED_REFERENCE!>_ab<!>() // todo
_ab._ab()
_ab.<!UNRESOLVED_REFERENCE!>a_b<!>()
}
@@ -0,0 +1,88 @@
// MODULE: m1
// FILE: a.kt
package a.b
class c {
fun ab_c() {}
}
// MODULE: m2
// FILE: b.kt
package a
fun a_fun() {}
class b {
fun a_b() {}
class c {
fun a_bc() {}
}
}
// MODULE: m3(m1, m2)
// FILE: c.kt
fun test(a_b: a.b) {
a_b.a_b()
val ab_c: a.b.c = a.b.c()
ab_c.ab_c()
ab_c.<!UNRESOLVED_REFERENCE!>a_bc<!>()
val ab_c2 = a.b.c()
ab_c2.ab_c()
ab_c2.<!UNRESOLVED_REFERENCE!>a_bc<!>()
}
fun test2(ab_c: a.b.c) {
ab_c.ab_c()
}
//---- Changed dependence order
// MODULE: _m1
// FILE: _a.kt
package a.b
fun ab_fun() {}
class c {
fun ab_c() {}
class d {
fun ab_cd() {}
}
}
// MODULE: _m2
// FILE: _b.kt
package a
fun a_fun() {}
class b {
fun a_b() {}
class c {
fun a_bc() {}
}
}
// MODULE: _m3(_m1, _m2)
// FILE: _c.kt
fun test(a_b: a.b) {
a_b.a_b()
val ab_c: a.b.c = a.b.c()
ab_c.ab_c()
ab_c.<!UNRESOLVED_REFERENCE!>a_bc<!>()
val ab_c2 = a.b.c()
ab_c2.ab_c()
ab_c2.<!UNRESOLVED_REFERENCE!>a_bc<!>()
}
fun test2(ab_c: a.b.c) {
ab_c.ab_c()
}
@@ -0,0 +1,136 @@
// -- Module: <_m1> --
package
package a {
package a.b {
public fun ab_fun(): kotlin.Unit
public final class c {
public constructor c()
public final fun ab_c(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class d {
public constructor d()
public final fun ab_cd(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
}
}
// -- Module: <_m2> --
package
package a {
public fun a_fun(): kotlin.Unit
public final class b {
public constructor b()
public final fun a_b(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class c {
public constructor c()
public final fun a_bc(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
}
// -- Module: <_m3> --
package
public fun test(/*0*/ a_b: a.b): kotlin.Unit
public fun test2(/*0*/ ab_c: a.b.c): kotlin.Unit
package a {
public fun a_fun(): kotlin.Unit
public final class b {
// -- Module: <_m2> --
}
package a.b {
public fun ab_fun(): kotlin.Unit
public final class c {
// -- Module: <_m1> --
}
}
}
// -- Module: <m1> --
package
package a {
package a.b {
public final class c {
public constructor c()
public final fun ab_c(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
}
// -- Module: <m2> --
package
package a {
public fun a_fun(): kotlin.Unit
public final class b {
public constructor b()
public final fun a_b(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class c {
public constructor c()
public final fun a_bc(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
}
// -- Module: <m3> --
package
public fun test(/*0*/ a_b: a.b): kotlin.Unit
public fun test2(/*0*/ ab_c: a.b.c): kotlin.Unit
package a {
public fun a_fun(): kotlin.Unit
public final class b {
// -- Module: <m2> --
}
package a.b {
public final class c {
// -- Module: <m1> --
}
}
}
@@ -0,0 +1,44 @@
// MODULE: m1
// FILE: a.kt
package a
class b {
fun a_b() {}
}
// MODULE: m2
// FILE: b.kt
class a {
class b {
fun _ab() {}
}
}
// MODULE: m3(m1, m2)
// FILE: c1.kt
package some
fun test(a_b: a.b) {
a_b.a_b()
val a_b2 = a.b()
a_b2.a_b()
}
// FILE: c2.kt
package a
fun test(a_b: a.b) {
a_b.a_b()
val a_b2 = a.b()
a_b2.a_b()
}
// FILE: c3.kt
fun test(_ab: a.b) {
_ab._ab()
val _ab2 = a.b()
_ab2.<!UNRESOLVED_REFERENCE!>_ab<!>() // todo
}
@@ -0,0 +1,56 @@
// -- Module: <m1> --
package
package a {
public final class b {
public constructor b()
public final fun a_b(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
// -- Module: <m2> --
package
public final class a {
public constructor a()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class b {
public constructor b()
public final fun _ab(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
// -- Module: <m3> --
package
public fun test(/*0*/ _ab: a.b): kotlin.Unit
public final class a {
// -- Module: <m2> --
}
package a {
public fun test(/*0*/ a_b: a.b): kotlin.Unit
public final class b {
// -- Module: <m1> --
}
}
package some {
public fun test(/*0*/ a_b: a.b): kotlin.Unit
}
@@ -0,0 +1,31 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -UNREACHABLE_CODE
class A {
class B {
class C
}
}
fun test(a: A.<!SYNTAX!><!>): A.<!SYNTAX!><!> {
val aa: A. <!SYNTAX!>=<!><!SYNTAX!><!> null!!
}
fun test1(a: A.B.<!SYNTAX!><!>): A.B.<!SYNTAX!><!> {
val aa: A.B. <!SYNTAX!>=<!><!SYNTAX!><!> null!!
}
fun test2(a: A.<!UNRESOLVED_REFERENCE!>e<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>C<!>): A.<!UNRESOLVED_REFERENCE!>e<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>C<!> {
val aa: A.<!UNRESOLVED_REFERENCE!>e<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>C<!> = null!!
}
fun test3(a: <!UNRESOLVED_REFERENCE!>a<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>A<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>C<!>): <!UNRESOLVED_REFERENCE!>a<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>A<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>C<!> {
val aa: <!UNRESOLVED_REFERENCE!>a<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>A<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>C<!> = null!!
}
fun test4(a: A.B.<!UNRESOLVED_REFERENCE!>ee<!>): A.B.<!UNRESOLVED_REFERENCE!>ee<!> {
val aa: A.B.<!UNRESOLVED_REFERENCE!>ee<!> = null!!
}
fun test5(a: A.<!UNRESOLVED_REFERENCE!>ee<!>): A.<!UNRESOLVED_REFERENCE!>ee<!> {
val aa: A.<!UNRESOLVED_REFERENCE!>ee<!> = null!!
}
@@ -0,0 +1,29 @@
package
public fun test(/*0*/ a: [ERROR : A.]): [ERROR : A.]
public fun test1(/*0*/ a: [ERROR : A.B.]): [ERROR : A.B.]
public fun test2(/*0*/ a: [ERROR : A.e.C]): [ERROR : A.e.C]
public fun test3(/*0*/ a: [ERROR : a.A.C]): [ERROR : a.A.C]
public fun test4(/*0*/ a: [ERROR : A.B.ee]): [ERROR : A.B.ee]
public fun test5(/*0*/ a: [ERROR : A.ee]): [ERROR : A.ee]
public final class A {
public constructor A()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class B {
public constructor B()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class C {
public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
}
@@ -0,0 +1,58 @@
// MODULE: m1
// FILE: a.kt
package a
class b {
fun a_b() {}
}
// MODULE: m2
// FILE: b.kt
package some
class a {
class b {
fun some_ab() {}
}
}
// MODULE: m3(m1, m2)
// FILE: c1.kt
package other
class a {}
fun test(a_: a.<!UNRESOLVED_REFERENCE!>b<!>) {
<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>a_<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>a_b<!>()
val a_2 = a.b()
a_2.a_b() // todo: must be unresolved
a_2.<!UNRESOLVED_REFERENCE!>some_ab<!>()
a_2.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>a_()<!>
}
// FILE: c2.kt
package other2
class a {
class b {
fun other2_ab() {}
}
}
fun test(_ab: a.b) {
_ab.other2_ab()
val _ab2 = a.b()
_ab2.<!UNRESOLVED_REFERENCE!>other2_ab<!>() // todo
}
// FILE: c3.kt
package some
fun test(_ab: a.b) {
_ab.some_ab()
val _ab2 = a.b()
_ab2.<!UNRESOLVED_REFERENCE!>some_ab<!>() // todo
}
@@ -0,0 +1,84 @@
// -- Module: <m1> --
package
package a {
public final class b {
public constructor b()
public final fun a_b(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
// -- Module: <m2> --
package
package some {
public final class a {
public constructor a()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class b {
public constructor b()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final fun some_ab(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
}
// -- Module: <m3> --
package
package a {
public final class b {
// -- Module: <m1> --
}
}
package other {
public fun test(/*0*/ a_: [ERROR : a.b]): kotlin.Unit
public final class a {
public constructor a()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
package other2 {
public fun test(/*0*/ _ab: other2.a.b): kotlin.Unit
public final class a {
public constructor a()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class b {
public constructor b()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final fun other2_ab(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
}
package some {
public fun test(/*0*/ _ab: some.a.b): kotlin.Unit
public final class a {
// -- Module: <m2> --
}
}