From bc26c66bc78a3db8ee83d31ec0a9852a5d8936f2 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 27 Jan 2014 15:31:36 +0400 Subject: [PATCH] Frontend: don't resolve default parameters value when not need complete analysis. --- .../org/jetbrains/jet/lang/resolve/BodyResolver.java | 12 ++++++++---- .../types/expressions/ExpressionTypingServices.java | 6 ++++-- .../ExpressionTypingVisitorForStatements.java | 4 ++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index b9a05dd5c7c..24e1a8b90db 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -400,7 +400,7 @@ public class BodyResolver { if (unsubstitutedPrimaryConstructor != null) { WritableScope parameterScope = getPrimaryConstructorParametersScope(classDescriptor.getScopeForSupertypeResolution(), unsubstitutedPrimaryConstructor); expressionTypingServices.resolveValueParameters(klass.getPrimaryConstructorParameters(), unsubstitutedPrimaryConstructor.getValueParameters(), - parameterScope, context.getOuterDataFlowInfo(), trace); + parameterScope, context.getOuterDataFlowInfo(), trace, context.completeAnalysisNeeded(klass)); } } } @@ -616,9 +616,12 @@ public class BodyResolver { List valueParameters = function.getValueParameters(); List valueParameterDescriptors = functionDescriptor.getValueParameters(); - expressionTypingServices.resolveValueParameters(valueParameters, valueParameterDescriptors, functionInnerScope, context.getOuterDataFlowInfo(), trace); + boolean needCompleteAnalysis = context.completeAnalysisNeeded(function); - if (!context.completeAnalysisNeeded(function)) return; + expressionTypingServices.resolveValueParameters(valueParameters, valueParameterDescriptors, functionInnerScope, + context.getOuterDataFlowInfo(), trace, needCompleteAnalysis); + + if (!needCompleteAnalysis) return; JetExpression bodyExpression = function.getBodyExpression(); if (bodyExpression != null) { @@ -641,7 +644,8 @@ public class BodyResolver { JetScope scope = getPrimaryConstructorParametersScope(declaringScope, constructorDescriptor); - expressionTypingServices.resolveValueParameters(valueParameters, valueParameterDescriptors, scope, context.getOuterDataFlowInfo(), trace); + expressionTypingServices.resolveValueParameters(valueParameters, valueParameterDescriptors, scope, + context.getOuterDataFlowInfo(), trace, /* needCompleteAnalysis = */ true); } private void resolveAnnotationArguments(@NotNull JetScope scope, @NotNull JetModifierListOwner owner) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java index b26b560b170..c813c8f2e22 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java @@ -36,7 +36,6 @@ import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.context.ContextDependency; import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext; -import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; @@ -372,7 +371,8 @@ public class ExpressionTypingServices { @NotNull List valueParameterDescriptors, @NotNull JetScope declaringScope, @NotNull DataFlowInfo dataFlowInfo, - @NotNull BindingTrace trace + @NotNull BindingTrace trace, + boolean needCompleteAnalysis ) { for (int i = 0; i < valueParameters.size(); i++) { ValueParameterDescriptor valueParameterDescriptor = valueParameterDescriptors.get(i); @@ -380,6 +380,8 @@ public class ExpressionTypingServices { annotationResolver.resolveAnnotationsArguments(declaringScope, jetParameter.getModifierList(), trace); + if (!needCompleteAnalysis) continue; + resolveDefaultValue(declaringScope, valueParameterDescriptor, jetParameter, dataFlowInfo, trace); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java index 82589d82241..532be83ce43 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java @@ -167,8 +167,8 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito JetScope functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(context.scope, functionDescriptor, context.trace); context.expressionTypingServices.checkFunctionReturnType(functionInnerScope, function, functionDescriptor, context.dataFlowInfo, null, context.trace); - context.expressionTypingServices.resolveValueParameters( - function.getValueParameters(), functionDescriptor.getValueParameters(), scope, context.dataFlowInfo, context.trace); + context.expressionTypingServices.resolveValueParameters(function.getValueParameters(), functionDescriptor.getValueParameters(), + scope, context.dataFlowInfo, context.trace, /* needCompleteAnalysis = */ true); ModifiersChecker.create(context.trace).checkModifiersForLocalDeclaration(function); return DataFlowUtils.checkStatementType(function, context, context.dataFlowInfo);