FIR: Adjust testData for spec tests: controversial infix calls
^KT-37374 Please, take a look at these tests
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: overload-resolution, building-the-overload-candidate-set-ocs, infix-function-call
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Not null Smartcast doesn't work in case of property infix call
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-36786
|
||||
*/
|
||||
|
||||
class C() {
|
||||
infix operator fun invoke(i: Int) { } //(1)
|
||||
}
|
||||
|
||||
class B(val memberValCNull: C? = null) {
|
||||
infix fun bar(i: Int) {}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case1() {
|
||||
val b: B = B()
|
||||
// b memberValCNull 1 //nok (UNSAFE_INFIX_CALL)
|
||||
// b.memberValCNull.invoke(1) //nok (UNSAFE_CALL)
|
||||
|
||||
if (b.memberValCNull != null) {
|
||||
b memberValCNull 1 //nok (UNSAFE_INFIX_CALL) !!!!
|
||||
b.memberValCNull.invoke(2) //ok
|
||||
b.memberValCNull(3) //nok (UNSAFE_CALL) !!!
|
||||
}
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: overload-resolution, building-the-overload-candidate-set-ocs, infix-function-call
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: is-check Smartcast doesn't work in case of property infix call
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-36786
|
||||
*/
|
||||
|
||||
class B(val memberVal: Any)
|
||||
class C() {
|
||||
infix operator fun invoke(i: Int) { } //(1)
|
||||
}
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case1() {
|
||||
val b: B = B(C())
|
||||
b <!UNRESOLVED_REFERENCE!>memberVal<!> 1 //nok UNRESOLVED_REFERENCE
|
||||
b.memberVal.<!UNRESOLVED_REFERENCE!>invoke<!>(2) //nok UNRESOLVED_REFERENCE
|
||||
b.<!UNRESOLVED_REFERENCE!>memberVal<!>(1) //nok FUNCTION_EXPECTED
|
||||
|
||||
if (b.memberVal is C) {
|
||||
|
||||
b memberVal 1 //nok UNRESOLVED_REFERENCE !!!!
|
||||
b.memberVal.invoke(1) //ok
|
||||
|
||||
b.memberVal(1) //nok FUNCTION_EXPECTED !!!
|
||||
(b.memberVal)(1) //ok
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: overload-resolution, building-the-overload-candidate-set-ocs, infix-function-call
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: "Unsafe" cast doesn't work in case of property infix call
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-36786
|
||||
*/
|
||||
|
||||
class B(val memberVal: Any)
|
||||
class C() {
|
||||
infix operator fun invoke(i: Int) { } //(1)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case1() {
|
||||
val b: B = B(C())
|
||||
b <!UNRESOLVED_REFERENCE!>memberVal<!> 1 //nok UNRESOLVED_REFERENCE
|
||||
b.memberVal.<!UNRESOLVED_REFERENCE!>invoke<!>(2) //nok UNRESOLVED_REFERENCE
|
||||
b.<!UNRESOLVED_REFERENCE!>memberVal<!>(1) //nok FUNCTION_EXPECTED
|
||||
|
||||
b.memberVal as C
|
||||
|
||||
b memberVal 1 //nok UNRESOLVED_REFERENCE !!!!
|
||||
b.memberVal.invoke(1) //ok
|
||||
|
||||
b.memberVal(1) //nok FUNCTION_EXPECTED !!!
|
||||
(b.memberVal)(1) //ok
|
||||
|
||||
}
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: overload-resolution, building-the-overload-candidate-set-ocs, infix-function-call
|
||||
* NUMBER: 4
|
||||
* DESCRIPTION: Local extension infix extension callables
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-36786
|
||||
*/
|
||||
|
||||
|
||||
// TESTCASE NUMBER: 1, 2
|
||||
// FILE: infixLib.kt
|
||||
package libPackage
|
||||
|
||||
class C() {
|
||||
infix operator fun invoke(i: Int) {}
|
||||
}
|
||||
|
||||
class B() {
|
||||
val barC: C = TODO()
|
||||
val B.barC: C
|
||||
get() = TODO()
|
||||
|
||||
infix fun fooC(i: Int) = {}
|
||||
infix fun B.fooC(i: Int) =
|
||||
{}
|
||||
}
|
||||
|
||||
infix fun B.fooC(i: Int) = {}
|
||||
val B.barC: C
|
||||
get() = TODO()
|
||||
|
||||
|
||||
// FILE: TestCase1.kt
|
||||
/*
|
||||
* TESTCASE NUMBER: 1
|
||||
* NOTE: should be resolved to member properties, others should be shadowed by member function
|
||||
*/
|
||||
package testPackInfix
|
||||
import libPackage.C
|
||||
import libPackage.B
|
||||
import libPackage.*
|
||||
|
||||
|
||||
fun case1() {
|
||||
class Case() {
|
||||
val B.barC: C
|
||||
get() = TODO()
|
||||
|
||||
fun case() {
|
||||
val b = B()
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.B.fooC; typeCall: infix function")!>b fooC 3<!>
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.C.invoke; typeCall: variable&invoke")!>b barC 3<!>
|
||||
}
|
||||
}
|
||||
|
||||
fun case() {
|
||||
val b = B()
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.B.fooC; typeCall: infix function")!>b fooC 3<!>
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.C.invoke; typeCall: variable&invoke")!>b barC 3<!>
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: TestCase2.kt
|
||||
/*
|
||||
* TESTCASE NUMBER: 2
|
||||
* NOTE: should be resolved to member properties, others should be shadowed by member property with invoke or by member function
|
||||
*/
|
||||
package testPackInfix
|
||||
import libPackage.C
|
||||
import libPackage.B
|
||||
import libPackage.*
|
||||
import libPackage.fooC
|
||||
import libPackage.barC
|
||||
|
||||
/*should be shadowed by member function*/
|
||||
infix fun B.fooC(i: Int) = {}
|
||||
/*should be shadowed by member property with invoke*/
|
||||
infix fun B.barC(i: Int) = {}
|
||||
/*should be shadowed by member property*/
|
||||
val B.barC: C
|
||||
get() = TODO()
|
||||
|
||||
fun case2() {
|
||||
class Case() {
|
||||
/*should be shadowed by member property*/
|
||||
val B.barC: C
|
||||
get() = TODO()
|
||||
/*should be shadowed by member property with invoke*/
|
||||
infix fun B.barC(i: Int) = {}
|
||||
/*should be shadowed by member function*/
|
||||
infix fun B.fooC(i: Int) = {}
|
||||
fun case() {
|
||||
val b = B()
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.B.fooC; typeCall: infix function")!>b fooC 3<!>
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.C.invoke; typeCall: variable&invoke")!>b barC 3<!>
|
||||
}
|
||||
}
|
||||
|
||||
fun case() {
|
||||
val b = B()
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.B.fooC; typeCall: infix function")!>b fooC 3<!>
|
||||
<!DEBUG_INFO_CALL("fqName: libPackage.C.invoke; typeCall: variable&invoke")!>b barC 3<!>
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user