Don't try parsing contract-like function not from kotlin package
Returning `null` from `doCheckContract` functions means that we have failed to parse contract function and should report an error, but if the called function isn't true contract, we shouldn't evaluate that code at all. #KT-27758 Fixed
This commit is contained in:
committed by
Dmitry Savvinov
parent
d82ca9ccd0
commit
bae3ff5211
+42
@@ -0,0 +1,42 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
package my
|
||||
|
||||
// Accepts block, can't be distinguished from kotlin.contract without resolve
|
||||
fun contract(block: () -> Unit) {}
|
||||
|
||||
// Accepts int, potentially can be distinguished from kotlin.contract by PSI,
|
||||
// but as of Kotlin 1.3.0, we don't do that
|
||||
fun contract(i: Int) {}
|
||||
|
||||
fun doStuff() {}
|
||||
|
||||
class SomeClass {
|
||||
|
||||
fun contract() {}
|
||||
|
||||
fun callMemberContractWithThis() {
|
||||
this.contract()
|
||||
}
|
||||
|
||||
fun callMemberContractWithoutThis() {
|
||||
contract()
|
||||
}
|
||||
|
||||
fun callTopLevelSamePsiInMember() {
|
||||
contract { }
|
||||
}
|
||||
}
|
||||
|
||||
fun callTopLevelSamePsi() {
|
||||
contract { }
|
||||
}
|
||||
|
||||
fun callTopLevelDifferentPsi() {
|
||||
contract(42)
|
||||
}
|
||||
|
||||
fun callTopLevelSamePsiNotFirstStatement() {
|
||||
doStuff()
|
||||
contract { }
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package
|
||||
|
||||
package my {
|
||||
public fun callTopLevelDifferentPsi(): kotlin.Unit
|
||||
public fun callTopLevelSamePsi(): kotlin.Unit
|
||||
public fun callTopLevelSamePsiNotFirstStatement(): kotlin.Unit
|
||||
public fun contract(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public fun contract(/*0*/ i: kotlin.Int): kotlin.Unit
|
||||
public fun doStuff(): kotlin.Unit
|
||||
|
||||
public final class SomeClass {
|
||||
public constructor SomeClass()
|
||||
public final fun callMemberContractWithThis(): kotlin.Unit
|
||||
public final fun callMemberContractWithoutThis(): kotlin.Unit
|
||||
public final fun callTopLevelSamePsiInMember(): kotlin.Unit
|
||||
public final fun contract(): 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user