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 =
|
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 -----------------------------------------------------------------------------------------------------------------------
|
// ----------- 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");
|
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")
|
@TestMetadata("rewriteAtSliceFunctor.kt")
|
||||||
public void testRewriteAtSliceFunctor() throws Exception {
|
public void testRewriteAtSliceFunctor() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/rewriteAtSliceFunctor.kt");
|
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");
|
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")
|
@TestMetadata("rewriteAtSliceFunctor.kt")
|
||||||
public void testRewriteAtSliceFunctor() throws Exception {
|
public void testRewriteAtSliceFunctor() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/rewriteAtSliceFunctor.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/rewriteAtSliceFunctor.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user