Allow declaring contracts on suspend functions. KT-27468 Fixed

This commit is contained in:
Dmitriy Novozhilov
2019-02-28 12:11:30 +03:00
parent 84da8b6279
commit 4a7420d77d
5 changed files with 15 additions and 15 deletions
@@ -119,8 +119,6 @@ class ContractParsingServices(val languageVersionSettings: LanguageVersionSettin
if (functionDescriptor?.isOperator == true) collector.contractNotAllowed("Contracts are not allowed for operator functions")
if (functionDescriptor?.isSuspend == true) collector.contractNotAllowed("Contracts are not allowed for suspend functions")
if (functionDescriptor?.isOverridable == true) collector.contractNotAllowed("Contracts are not allowed for open functions")
}
@@ -24,7 +24,7 @@ open class Class {
}
suspend fun suspendMember(x: Boolean) {
<!CONTRACT_NOT_ALLOWED, CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (x) }
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (x) }
}
}
@@ -39,7 +39,7 @@ inline fun inlineTopLevel(x: Boolean) {
}
suspend fun suspendTopLevel(x: Boolean) {
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (x) }
contract { returns() implies (x) }
}
// Top-level operator
@@ -73,7 +73,7 @@ fun test() {
}
suspend fun suspendlocalDeclaration(x: Boolean) {
<!CONTRACT_NOT_ALLOWED, CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (x) }
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (x) }
}
val localAnonymousFunction = fun (x: Boolean) {
@@ -7,6 +7,8 @@ public inline fun inlineTopLevel(/*0*/ x: kotlin.Boolean): kotlin.Unit
Returns(WILDCARD) -> x
public suspend fun suspendTopLevel(/*0*/ x: kotlin.Boolean): kotlin.Unit
Returns(WILDCARD) -> x
public fun test(): kotlin.Unit
public fun topLevel(/*0*/ x: kotlin.Boolean): kotlin.Unit
Returns(WILDCARD) -> x
@@ -1174,16 +1174,16 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/callInContractDescription.kt");
}
@TestMetadata("contractCallSites.kt")
public void testContractCallSites() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/contractCallSites.kt");
}
@TestMetadata("emptyContract.kt")
public void testEmptyContract() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/emptyContract.kt");
}
@TestMetadata("illegalCallSites.kt")
public void testIllegalCallSites() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/illegalCallSites.kt");
}
@TestMetadata("illegalConstructionInContractBlock.kt")
public void testIllegalConstructionInContractBlock() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/illegalConstructionInContractBlock.kt");
@@ -1174,16 +1174,16 @@ public class DiagnosticsTestWithStdLibUsingJavacGenerated extends AbstractDiagno
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/callInContractDescription.kt");
}
@TestMetadata("contractCallSites.kt")
public void testContractCallSites() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/contractCallSites.kt");
}
@TestMetadata("emptyContract.kt")
public void testEmptyContract() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/emptyContract.kt");
}
@TestMetadata("illegalCallSites.kt")
public void testIllegalCallSites() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/illegalCallSites.kt");
}
@TestMetadata("illegalConstructionInContractBlock.kt")
public void testIllegalConstructionInContractBlock() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/dsl/errors/illegalConstructionInContractBlock.kt");