FIR: Fix ambiguity between current Companion and one from supertypes

Companion as qualifier should be found at static scope not a member one
This commit is contained in:
Denis Zharkov
2020-11-06 17:41:50 +03:00
parent 96352b9c8c
commit a5545b96cb
21 changed files with 114 additions and 216 deletions
@@ -9,7 +9,7 @@
* ISSUES: KT-39129
*/
fun case1() {
C1.<!INAPPLICABLE_CANDIDATE!>V<!>()
C1.<!UNRESOLVED_REFERENCE!>V<!>()
C1.Companion.<!DEBUG_INFO_CALL("fqName: C1.Companion.V.V; typeCall: function")!>V()<!>
@@ -1,151 +0,0 @@
// !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
// SKIP_TXT
// FILE: TestCase.kt
// TESTCASE NUMBER: 1
package testsCase1
open class A {
operator fun invoke() = print("invoke")
}
enum class Super_2 {
V1, V2;
companion object values : A() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase1.A.invoke; typeCall: variable&invoke")!>values()<!>
}
enum class NestedWithCompanion {
V1;
companion object values : A() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase1.A.invoke; typeCall: variable&invoke")!>values()<!>
}
}
enum class Nested {
V1;
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase1.Super_2.Nested.values; typeCall: function")!>values()<!>
}
}
}
// FILE: TestCase.kt
// TESTCASE NUMBER: 2
package testsCase2
open class A {
operator fun invoke(value: String) = print("invoke $value")
}
enum class Super_2 {
V1, V2;
companion object valueOf : A() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase2.A.invoke; typeCall: variable&invoke")!>valueOf("")<!>
}
enum class NestedWithCompanion {
V1;
companion object valueOf : A() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase2.A.invoke; typeCall: variable&invoke")!>valueOf("")<!>
}
}
enum class Nested {
V1;
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase2.Super_2.Nested.valueOf; typeCall: function")!>valueOf("")<!>
}
}
}
// FILE: TestCase.kt
// TESTCASE NUMBER: 3
package testsCase3
open class A {
operator fun invoke() = print("invoke")
}
enum class Super_2 {
V1, V2;
object values : A() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase3.A.invoke; typeCall: variable&invoke")!>values()<!>
}
enum class NestedWithCompanion {
V1;
object values : A() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase3.A.invoke; typeCall: variable&invoke")!>values()<!>
}
}
enum class Nested {
V1;
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase3.Super_2.Nested.values; typeCall: function")!>values()<!>
}
}
}
// FILE: TestCase.kt
// TESTCASE NUMBER: 4
package testsCase4
open class A {
operator fun invoke(value: String) = print("invoke $value")
}
open class B {
operator fun invoke(value: String) = print("invoke $value")
}
enum class Super_2 {
V1, V2;
object valueOf : A() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase4.A.invoke; typeCall: variable&invoke")!>valueOf("")<!>
}
enum class NestedWithCompanion {
V1;
object valueOf : B() {}
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase4.B.invoke; typeCall: variable&invoke")!>valueOf("")<!>
}
}
enum class Nested {
V1;
private fun case() {
<!DEBUG_INFO_CALL("fqName: testsCase4.Super_2.Nested.valueOf; typeCall: function")!>valueOf("")<!>
}
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
// SKIP_TXT