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:
committed by
Ilya Gorbunov
parent
e29de37ac4
commit
79476839c4
+1
-8
@@ -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
|
||||
|
||||
|
||||
+2
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user