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.
This commit is contained in:
Dmitry Savvinov
2018-08-10 13:51:21 +03:00
committed by Ilya Gorbunov
parent e29de37ac4
commit 79476839c4
2 changed files with 3 additions and 11 deletions
@@ -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
@@ -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<Name, PsiEffectParser> = 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