From 79476839c40f7ed276f40d048c3edd6f529df31b Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Fri, 10 Aug 2018 13:51:21 +0300 Subject: [PATCH] Minor: remove unneeded check from contract parsing 'parseContract' is called only from 'ContractParsingServices.checkContractAndRecordIfPresent', and here we already have checked that this call is indeed a contract call. --- .../kotlin/contracts/parsing/ContractParsingServices.kt | 9 +-------- .../contracts/parsing/PsiContractParserDispatcher.kt | 5 ++--- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt index 6fba898c4b5..e4cf8a85d7d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/ContractParsingServices.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.contracts.parsing import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.contracts.description.ContractDescription import org.jetbrains.kotlin.contracts.description.ContractProviderKey import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.diagnostics.Errors @@ -59,18 +58,12 @@ class ContractParsingServices(val languageVersionSettings: LanguageVersionSettin null } - else -> parseContract(expression, trace, ownerDescriptor) + else -> PsiContractParserDispatcher(trace).parseContract(expression, ownerDescriptor) } contractProvider?.setContractDescription(contractDescriptor) } - internal fun isContractDescriptionCall(expression: KtExpression, context: BindingContext): Boolean = - expression.isContractDescriptionCallPsiCheck() && expression.isContractDescriptionCallPreciseCheck(context) - - private fun parseContract(expression: KtExpression?, trace: BindingTrace, ownerDescriptor: FunctionDescriptor): ContractDescription? = - PsiContractParserDispatcher(trace, this).parseContract(expression, ownerDescriptor) - private fun isContractAllowedHere(scope: LexicalScope): Boolean = scope.kind == LexicalScopeKind.CODE_BLOCK && (scope.parent as? LexicalScope)?.kind == LexicalScopeKind.FUNCTION_INNER_SCOPE diff --git a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractParserDispatcher.kt b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractParserDispatcher.kt index 86e6b415ef4..61364e70c31 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractParserDispatcher.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractParserDispatcher.kt @@ -42,7 +42,7 @@ import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getType -internal class PsiContractParserDispatcher(val trace: BindingTrace, val contractParsingServices: ContractParsingServices) { +internal class PsiContractParserDispatcher(val trace: BindingTrace) { private val conditionParser = PsiConditionParser(trace, this) private val constantParser = PsiConstantParser(trace) private val effectsParsers: Map = mapOf( @@ -54,9 +54,8 @@ internal class PsiContractParserDispatcher(val trace: BindingTrace, val contract fun parseContract(expression: KtExpression?, ownerDescriptor: FunctionDescriptor): ContractDescription? { if (expression == null) return null - if (!contractParsingServices.isContractDescriptionCall(expression, trace.bindingContext)) return null - // Must be non-null due to 'isContractDescriptionCall' check, but actually is not, see EA-124365 + // Must be non-null because of checks in 'checkContractAndRecordIfPresent', but actually is not, see EA-124365 val resolvedCall = expression.getResolvedCall(trace.bindingContext) ?: return null val lambda = resolvedCall.firstArgumentAsExpressionOrNull() as? KtLambdaExpression ?: return null