Allow use contract function by FQN. #KT-29772 fixed
This commit is contained in:
@@ -308,7 +308,12 @@ fun KtNamedFunction.isContractPresentPsiCheck(): Boolean {
|
||||
}
|
||||
|
||||
fun KtExpression.isContractDescriptionCallPsiCheck(): Boolean =
|
||||
this is KtCallExpression && calleeExpression?.text == "contract"
|
||||
(this is KtCallExpression && calleeExpression?.text == "contract") || (this is KtQualifiedExpression && isContractDescriptionCallPsiCheck())
|
||||
|
||||
fun KtQualifiedExpression.isContractDescriptionCallPsiCheck(): Boolean {
|
||||
val expression = selectorExpression ?: return false
|
||||
return receiverExpression.text == "kotlin.contracts" && expression.isContractDescriptionCallPsiCheck()
|
||||
}
|
||||
|
||||
|
||||
// ----------- Other -----------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseReturnsEffect
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
|
||||
import kotlin.contracts.InvocationKind
|
||||
|
||||
inline fun foo(block: () -> Unit) {
|
||||
kotlin.contracts.contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
block()
|
||||
}
|
||||
|
||||
fun main() {
|
||||
val x: Int
|
||||
foo {
|
||||
x = 42
|
||||
}
|
||||
println(x)
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public inline fun foo(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
public fun main(): kotlin.Unit
|
||||
+5
@@ -1137,6 +1137,11 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/callUsualContractFunction.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("fqnContractFunction.kt")
|
||||
public void testFqnContractFunction() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/fqnContractFunction.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("rewriteAtSliceFunctor.kt")
|
||||
public void testRewriteAtSliceFunctor() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/rewriteAtSliceFunctor.kt");
|
||||
|
||||
compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java
Generated
+5
@@ -1137,6 +1137,11 @@ public class DiagnosticsTestWithStdLibUsingJavacGenerated extends AbstractDiagno
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/callUsualContractFunction.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("fqnContractFunction.kt")
|
||||
public void testFqnContractFunction() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/fqnContractFunction.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("rewriteAtSliceFunctor.kt")
|
||||
public void testRewriteAtSliceFunctor() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/rewriteAtSliceFunctor.kt");
|
||||
|
||||
Reference in New Issue
Block a user