Frontend: don't resolve default parameters value when not need complete analysis.
This commit is contained in:
@@ -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) {
|
||||
|
||||
+4
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user