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.AnalysisFlag
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.contracts.description.ContractDescription
|
|
||||||
import org.jetbrains.kotlin.contracts.description.ContractProviderKey
|
import org.jetbrains.kotlin.contracts.description.ContractProviderKey
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
@@ -59,18 +58,12 @@ class ContractParsingServices(val languageVersionSettings: LanguageVersionSettin
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> parseContract(expression, trace, ownerDescriptor)
|
else -> PsiContractParserDispatcher(trace).parseContract(expression, ownerDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
contractProvider?.setContractDescription(contractDescriptor)
|
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 =
|
private fun isContractAllowedHere(scope: LexicalScope): Boolean =
|
||||||
scope.kind == LexicalScopeKind.CODE_BLOCK && (scope.parent as? LexicalScope)?.kind == LexicalScopeKind.FUNCTION_INNER_SCOPE
|
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.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
|
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 conditionParser = PsiConditionParser(trace, this)
|
||||||
private val constantParser = PsiConstantParser(trace)
|
private val constantParser = PsiConstantParser(trace)
|
||||||
private val effectsParsers: Map<Name, PsiEffectParser> = mapOf(
|
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? {
|
fun parseContract(expression: KtExpression?, ownerDescriptor: FunctionDescriptor): ContractDescription? {
|
||||||
if (expression == null) return null
|
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 resolvedCall = expression.getResolvedCall(trace.bindingContext) ?: return null
|
||||||
|
|
||||||
val lambda = resolvedCall.firstArgumentAsExpressionOrNull() as? KtLambdaExpression ?: return null
|
val lambda = resolvedCall.firstArgumentAsExpressionOrNull() as? KtLambdaExpression ?: return null
|
||||||
|
|||||||
Reference in New Issue
Block a user