From 9490d1bb1ca107ba1b598bb693be9c8bd7b91f1e Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 21 Oct 2016 12:38:43 +0300 Subject: [PATCH] Reused code of analyzeInContext --- .../jetbrains/kotlin/idea/analysis/AnalyzerUtil.kt | 11 ++++++----- .../kotlin/idea/replacement/ReplacementBuilder.kt | 10 ++-------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/analysis/AnalyzerUtil.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/analysis/AnalyzerUtil.kt index 8b79122f033..c5cc0673799 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/analysis/AnalyzerUtil.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/analysis/AnalyzerUtil.kt @@ -38,11 +38,11 @@ import org.jetbrains.kotlin.types.expressions.PreliminaryDeclarationVisitor dataFlowInfo: DataFlowInfo = DataFlowInfo.EMPTY, expectedType: KotlinType = TypeUtils.NO_EXPECTED_TYPE, isStatement: Boolean = false, - contextDependency: ContextDependency = ContextDependency.INDEPENDENT + contextDependency: ContextDependency = ContextDependency.INDEPENDENT, + expressionTypingServices: ExpressionTypingServices = contextExpression.getResolutionFacade().frontendService() ): KotlinTypeInfo { PreliminaryDeclarationVisitor.createForExpression(this, trace) - return contextExpression.getResolutionFacade().frontendService() - .getTypeInfo(scope, this, expectedType, dataFlowInfo, trace, isStatement, contextExpression, contextDependency) + return expressionTypingServices.getTypeInfo(scope, this, expectedType, dataFlowInfo, trace, isStatement, contextExpression, contextDependency) } @JvmOverloads fun KtExpression.analyzeInContext( @@ -52,9 +52,10 @@ import org.jetbrains.kotlin.types.expressions.PreliminaryDeclarationVisitor dataFlowInfo: DataFlowInfo = DataFlowInfo.EMPTY, expectedType: KotlinType = TypeUtils.NO_EXPECTED_TYPE, isStatement: Boolean = false, - contextDependency: ContextDependency = ContextDependency.INDEPENDENT + contextDependency: ContextDependency = ContextDependency.INDEPENDENT, + expressionTypingServices: ExpressionTypingServices = contextExpression.getResolutionFacade().frontendService() ): BindingContext { - computeTypeInfoInContext(scope, contextExpression, trace, dataFlowInfo, expectedType, isStatement, contextDependency) + computeTypeInfoInContext(scope, contextExpression, trace, dataFlowInfo, expectedType, isStatement, contextDependency, expressionTypingServices) return trace.bindingContext } diff --git a/idea/idea-replacement-engine/src/org/jetbrains/kotlin/idea/replacement/ReplacementBuilder.kt b/idea/idea-replacement-engine/src/org/jetbrains/kotlin/idea/replacement/ReplacementBuilder.kt index 0eb02387675..e8db0e34c64 100644 --- a/idea/idea-replacement-engine/src/org/jetbrains/kotlin/idea/replacement/ReplacementBuilder.kt +++ b/idea/idea-replacement-engine/src/org/jetbrains/kotlin/idea/replacement/ReplacementBuilder.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.replacement import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.idea.analysis.analyzeInContext import org.jetbrains.kotlin.idea.core.asExpression import org.jetbrains.kotlin.idea.core.copied import org.jetbrains.kotlin.idea.core.replaced @@ -32,17 +33,13 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver -import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices -import org.jetbrains.kotlin.types.expressions.PreliminaryDeclarationVisitor import java.util.* class ReplacementBuilder( @@ -128,7 +125,6 @@ class ReplacementBuilder( //TODO: there can be expected type and maybe something else private fun analyzeInContext(expression: KtExpression, scope: LexicalScope): BindingContext { val module = scope.ownerDescriptor.module - val traceContext = BindingTraceContext() val frontendService = if (module.builtIns.builtInsModule == module) { // TODO: doubtful place, do we require this module or not? Built-ins module doesn't have some necessary components... resolutionFacade.getFrontendService(ExpressionTypingServices::class.java) @@ -136,8 +132,6 @@ class ReplacementBuilder( else { resolutionFacade.getFrontendService(module, ExpressionTypingServices::class.java) } - PreliminaryDeclarationVisitor.createForExpression(expression, traceContext) - frontendService.getTypeInfo(scope, expression, TypeUtils.NO_EXPECTED_TYPE, DataFlowInfo.EMPTY, traceContext, false) - return traceContext.bindingContext + return expression.analyzeInContext(scope, expressionTypingServices = frontendService) } } \ No newline at end of file