| Index: pkg/analyzer/lib/src/task/dart.dart
|
| diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
|
| index e81545c1e0cc4a8a9a12a2afc93013cdbb1497b1..3ade0ddff4eb2de4b076e01715509c7ff42185ed 100644
|
| --- a/pkg/analyzer/lib/src/task/dart.dart
|
| +++ b/pkg/analyzer/lib/src/task/dart.dart
|
| @@ -72,16 +72,6 @@ final ListResultDescriptor<AnalysisError> BUILD_LIBRARY_ERRORS =
|
| 'BUILD_LIBRARY_ERRORS', AnalysisError.NO_ERRORS);
|
|
|
| /**
|
| - * A list of the [ClassElement]s representing the classes defined in a
|
| - * compilation unit.
|
| - *
|
| - * The result is only available for [LibrarySpecificUnit]s, and only when strong
|
| - * mode is enabled.
|
| - */
|
| -final ListResultDescriptor<ClassElement> CLASSES_IN_UNIT =
|
| - new ListResultDescriptor<ClassElement>('CLASSES_IN_UNIT', null);
|
| -
|
| -/**
|
| * A list of the [ConstantEvaluationTarget]s defined in a unit. This includes
|
| * constants defined at top level, statically inside classes, and local to
|
| * functions, as well as constant constructors, annotations, and default values
|
| @@ -2703,6 +2693,7 @@ class InferStaticVariableTypeTask extends InferStaticVariableTask {
|
| "NodeLocator failed to find a variable's declaration");
|
| }
|
| Expression initializer = declaration.initializer;
|
| + initializer.accept(new ResolutionEraser());
|
| ResolutionContext resolutionContext =
|
| ResolutionContextBuilder.contextFor(initializer, errorListener);
|
| ResolverVisitor visitor = new ResolverVisitor(
|
| @@ -3141,7 +3132,6 @@ class PartiallyResolveUnitReferencesTask extends SourceBasedAnalysisTask {
|
| 'PartiallyResolveUnitReferencesTask',
|
| createTask,
|
| buildInputs, <ResultDescriptor>[
|
| - CLASSES_IN_UNIT,
|
| INFERABLE_STATIC_VARIABLES_IN_UNIT,
|
| PARTIALLY_RESOLVE_REFERENCES_ERRORS,
|
| RESOLVED_UNIT5
|
| @@ -3169,29 +3159,14 @@ class PartiallyResolveUnitReferencesTask extends SourceBasedAnalysisTask {
|
| //
|
| InheritanceManager inheritanceManager =
|
| new InheritanceManager(libraryElement);
|
| - // TODO(brianwilkerson) Improve performance by not resolving anything inside
|
| - // function bodies. Function bodies will be resolved later so this is wasted
|
| - // effort.
|
| - AstVisitor visitor = new ResolverVisitor(
|
| + PartialResolverVisitor visitor = new PartialResolverVisitor(
|
| libraryElement, unitElement.source, typeProvider, errorListener,
|
| inheritanceManager: inheritanceManager);
|
| unit.accept(visitor);
|
| //
|
| - // Prepare targets for inference.
|
| - //
|
| - List<VariableElement> staticVariables = <VariableElement>[];
|
| - List<ClassElement> classes = <ClassElement>[];
|
| - if (context.analysisOptions.strongMode) {
|
| - InferrenceFinder inferrenceFinder = new InferrenceFinder();
|
| - unit.accept(inferrenceFinder);
|
| - staticVariables = inferrenceFinder.staticVariables;
|
| - classes = inferrenceFinder.classes;
|
| - }
|
| - //
|
| // Record outputs.
|
| //
|
| - outputs[CLASSES_IN_UNIT] = classes;
|
| - outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = staticVariables;
|
| + outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = visitor.staticVariables;
|
| outputs[PARTIALLY_RESOLVE_REFERENCES_ERRORS] =
|
| removeDuplicateErrors(errorListener.errors);
|
| outputs[RESOLVED_UNIT5] = unit;
|
| @@ -3438,8 +3413,18 @@ class ResolveFunctionBodiesInUnitTask extends SourceBasedAnalysisTask {
|
| visitor.prepareToResolveMembersInClass(
|
| resolutionContext.enclosingClassDeclaration);
|
| }
|
| - visitor.initForIncrementalResolution();
|
| + Declaration declaration = functionBody.getAncestor((AstNode node) =>
|
| + node is ConstructorDeclaration ||
|
| + node is FunctionDeclaration ||
|
| + node is MethodDeclaration);
|
| + visitor.initForIncrementalResolution(declaration);
|
| functionBody.accept(visitor);
|
| + if (declaration is FunctionDeclaration) {
|
| + // This is in the wrong place. The propagated return type is stored
|
| + // locally in the resolver, not in the declaration (or element). Hence,
|
| + // this needs to happen later.
|
| + declaration.accept(visitor.typeAnalyzer);
|
| + }
|
| }
|
|
|
| /**
|
|
|