Frontend: don't resolve default parameters value when not need complete analysis.

This commit is contained in:
Zalim Bashorov
2014-01-27 15:31:36 +04:00
parent d032b5589c
commit bc26c66bc7
3 changed files with 14 additions and 8 deletions
@@ -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<JetParameter> valueParameters = function.getValueParameters();
List<ValueParameterDescriptor> 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) {
@@ -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<ValueParameterDescriptor> 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);
}
}
@@ -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);