Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: pkg/analyzer/lib/src/task/dart.dart

Issue 2288223003: Don't perform final fields and top-level variables type propagation. (Closed)
Patch Set: Rewrite 'reuse' tests using 'inferredTypeSlot'. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.src.task.dart; 5 library analyzer.src.task.dart;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/token.dart'; 10 import 'package:analyzer/dart/ast/token.dart';
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 /** 239 /**
240 * The flag specifying that [RESOLVED_UNIT12] has been been computed for this 240 * The flag specifying that [RESOLVED_UNIT12] has been been computed for this
241 * compilation unit (without requiring that the AST for it still be in cache). 241 * compilation unit (without requiring that the AST for it still be in cache).
242 * 242 *
243 * The result is only available for [LibrarySpecificUnit]s. 243 * The result is only available for [LibrarySpecificUnit]s.
244 */ 244 */
245 final ResultDescriptor<bool> CREATED_RESOLVED_UNIT12 = 245 final ResultDescriptor<bool> CREATED_RESOLVED_UNIT12 =
246 new ResultDescriptor<bool>('CREATED_RESOLVED_UNIT12', false); 246 new ResultDescriptor<bool>('CREATED_RESOLVED_UNIT12', false);
247 247
248 /** 248 /**
249 * The flag specifying that [RESOLVED_UNIT13] has been been computed for this
250 * compilation unit (without requiring that the AST for it still be in cache).
251 *
252 * The result is only available for [LibrarySpecificUnit]s.
253 */
254 final ResultDescriptor<bool> CREATED_RESOLVED_UNIT13 =
255 new ResultDescriptor<bool>('CREATED_RESOLVED_UNIT13', false);
256
257 /**
258 * The flag specifying that [RESOLVED_UNIT2] has been been computed for this 249 * The flag specifying that [RESOLVED_UNIT2] has been been computed for this
259 * compilation unit (without requiring that the AST for it still be in cache). 250 * compilation unit (without requiring that the AST for it still be in cache).
260 * 251 *
261 * The result is only available for [LibrarySpecificUnit]s. 252 * The result is only available for [LibrarySpecificUnit]s.
262 */ 253 */
263 final ResultDescriptor<bool> CREATED_RESOLVED_UNIT2 = 254 final ResultDescriptor<bool> CREATED_RESOLVED_UNIT2 =
264 new ResultDescriptor<bool>('CREATED_RESOLVED_UNIT2', false); 255 new ResultDescriptor<bool>('CREATED_RESOLVED_UNIT2', false);
265 256
266 /** 257 /**
267 * The flag specifying that [RESOLVED_UNIT3] has been been computed for this 258 * The flag specifying that [RESOLVED_UNIT3] has been been computed for this
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 * 510 *
520 * The result is only available for [Source]s representing a library. 511 * The result is only available for [Source]s representing a library.
521 */ 512 */
522 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT6 = 513 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT6 =
523 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT6', null, 514 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT6', null,
524 cachingPolicy: ELEMENT_CACHING_POLICY); 515 cachingPolicy: ELEMENT_CACHING_POLICY);
525 516
526 /** 517 /**
527 * The partial [LibraryElement] associated with a library. 518 * The partial [LibraryElement] associated with a library.
528 * 519 *
529 * [LIBRARY_ELEMENT6] plus propagated types for propagable variables. 520 * [LIBRARY_ELEMENT6] plus [RESOLVED_UNIT7] for all library units.
530 * 521 *
531 * The result is only available for [Source]s representing a library. 522 * The result is only available for [Source]s representing a library.
532 */ 523 */
533 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT7 = 524 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT7 =
534 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT7', null, 525 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT7', null,
535 cachingPolicy: ELEMENT_CACHING_POLICY); 526 cachingPolicy: ELEMENT_CACHING_POLICY);
536 527
537 /** 528 /**
538 * The partial [LibraryElement] associated with a library. 529 * The partial [LibraryElement] associated with a library.
539 * 530 *
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 /** 619 /**
629 * The list of [PendingError]s for a compilation unit. 620 * The list of [PendingError]s for a compilation unit.
630 * 621 *
631 * The result is only available for [LibrarySpecificUnit]s. 622 * The result is only available for [LibrarySpecificUnit]s.
632 */ 623 */
633 final ListResultDescriptor<PendingError> PENDING_ERRORS = 624 final ListResultDescriptor<PendingError> PENDING_ERRORS =
634 new ListResultDescriptor<PendingError>( 625 new ListResultDescriptor<PendingError>(
635 'PENDING_ERRORS', const <PendingError>[]); 626 'PENDING_ERRORS', const <PendingError>[]);
636 627
637 /** 628 /**
638 * A list of the [VariableElement]s whose type should be known to propagate
639 * the type of another variable (the target).
640 *
641 * The result is only available for [VariableElement]s.
642 */
643 final ListResultDescriptor<VariableElement> PROPAGABLE_VARIABLE_DEPENDENCIES =
644 new ListResultDescriptor<VariableElement>(
645 'PROPAGABLE_VARIABLE_DEPENDENCIES', null);
646
647 /**
648 * A list of the [VariableElement]s defined in a unit whose type might be
649 * propagated. This includes variables defined at the library level as well as
650 * static and instance members inside classes.
651 *
652 * The result is only available for [LibrarySpecificUnit]s.
653 */
654 final ListResultDescriptor<VariableElement> PROPAGABLE_VARIABLES_IN_UNIT =
655 new ListResultDescriptor<VariableElement>(
656 'PROPAGABLE_VARIABLES_IN_UNIT', null);
657
658 /**
659 * An propagable variable ([VariableElement]) whose type has been propagated.
660 *
661 * The result is only available for [VariableElement]s.
662 */
663 final ResultDescriptor<VariableElement> PROPAGATED_VARIABLE =
664 new ResultDescriptor<VariableElement>('PROPAGATED_VARIABLE', null,
665 cachingPolicy: ELEMENT_CACHING_POLICY);
666
667 /**
668 * The flag specifying that [LIBRARY_ELEMENT2] is ready for a library and its 629 * The flag specifying that [LIBRARY_ELEMENT2] is ready for a library and its
669 * import/export closure. 630 * import/export closure.
670 * 631 *
671 * The result is only available for [Source]s representing a library. 632 * The result is only available for [Source]s representing a library.
672 */ 633 */
673 final ResultDescriptor<bool> READY_LIBRARY_ELEMENT2 = 634 final ResultDescriptor<bool> READY_LIBRARY_ELEMENT2 =
674 new ResultDescriptor<bool>('READY_LIBRARY_ELEMENT2', false); 635 new ResultDescriptor<bool>('READY_LIBRARY_ELEMENT2', false);
675 636
676 /** 637 /**
677 * The flag specifying that [LIBRARY_ELEMENT6] is ready for a library and its 638 * The flag specifying that [LIBRARY_ELEMENT6] is ready for a library and its
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 * at all declaration sites have been bound to the element defined by the 730 * at all declaration sites have been bound to the element defined by the
770 * declaration, except for the constants defined in an 'enum' declaration. 731 * declaration, except for the constants defined in an 'enum' declaration.
771 * 732 *
772 * The result is only available for [LibrarySpecificUnit]s. 733 * The result is only available for [LibrarySpecificUnit]s.
773 */ 734 */
774 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT1 = 735 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT1 =
775 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null, 736 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null,
776 cachingPolicy: AST_REUSABLE_CACHING_POLICY); 737 cachingPolicy: AST_REUSABLE_CACHING_POLICY);
777 738
778 /** 739 /**
779 * The partially resolved [CompilationUnit] associated with a compilation unit. 740 * The resolved [CompilationUnit] associated with a compilation unit in which
780 * 741 * the types of class members have been inferred in addition to everything that
781 * In addition to what is true of a [RESOLVED_UNIT9], tasks that use this value 742 * is true of a [RESOLVED_UNIT9].
782 * as an input can assume that the initializers of instance variables have been
783 * re-resolved.
784 * 743 *
785 * The result is only available for [LibrarySpecificUnit]s. 744 * The result is only available for [LibrarySpecificUnit]s.
786 */ 745 */
787 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT10 = 746 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT10 =
788 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT10', null, 747 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT10', null,
789 cachingPolicy: AST_CACHING_POLICY); 748 cachingPolicy: AST_CACHING_POLICY);
790 749
791 /** 750 /**
792 * The resolved [CompilationUnit] associated with a compilation unit in which 751 * The resolved [CompilationUnit] associated with a compilation unit, with
793 * the types of class members have been inferred in addition to everything that 752 * constants not yet resolved.
794 * is true of a [RESOLVED_UNIT10].
795 * 753 *
796 * The result is only available for [LibrarySpecificUnit]s. 754 * The result is only available for [LibrarySpecificUnit]s.
797 */ 755 */
798 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT11 = 756 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT11 =
799 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT11', null, 757 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT11', null,
800 cachingPolicy: AST_CACHING_POLICY); 758 cachingPolicy: AST_CACHING_POLICY);
801 759
802 /** 760 /**
803 * The resolved [CompilationUnit] associated with a compilation unit, with 761 * The resolved [CompilationUnit] associated with a compilation unit, with
804 * constants not yet resolved. 762 * constants resolved.
805 * 763 *
806 * The result is only available for [LibrarySpecificUnit]s. 764 * The result is only available for [LibrarySpecificUnit]s.
807 */ 765 */
808 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT12 = 766 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT12 =
809 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT12', null, 767 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT12', null,
810 cachingPolicy: AST_CACHING_POLICY); 768 cachingPolicy: AST_CACHING_POLICY);
811 769
812 /** 770 /**
813 * The resolved [CompilationUnit] associated with a compilation unit, with
814 * constants resolved.
815 *
816 * The result is only available for [LibrarySpecificUnit]s.
817 */
818 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT13 =
819 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT13', null,
820 cachingPolicy: AST_CACHING_POLICY);
821
822 /**
823 * The partially resolved [CompilationUnit] associated with a compilation unit. 771 * The partially resolved [CompilationUnit] associated with a compilation unit.
824 * 772 *
825 * In addition to what is true of a [RESOLVED_UNIT1], tasks that use this value 773 * In addition to what is true of a [RESOLVED_UNIT1], tasks that use this value
826 * as an input can assume that its directives have been resolved. 774 * as an input can assume that its directives have been resolved.
827 * 775 *
828 * The result is only available for [LibrarySpecificUnit]s. 776 * The result is only available for [LibrarySpecificUnit]s.
829 */ 777 */
830 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT2 = 778 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT2 =
831 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT2', null, 779 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT2', null,
832 cachingPolicy: AST_CACHING_POLICY); 780 cachingPolicy: AST_CACHING_POLICY);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 * The result is only available for [LibrarySpecificUnit]s. 843 * The result is only available for [LibrarySpecificUnit]s.
896 */ 844 */
897 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT7 = 845 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT7 =
898 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT7', null, 846 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT7', null,
899 cachingPolicy: AST_CACHING_POLICY); 847 cachingPolicy: AST_CACHING_POLICY);
900 848
901 /** 849 /**
902 * The partially resolved [CompilationUnit] associated with a compilation unit. 850 * The partially resolved [CompilationUnit] associated with a compilation unit.
903 * 851 *
904 * In addition to what is true of a [RESOLVED_UNIT7], tasks that use this value 852 * In addition to what is true of a [RESOLVED_UNIT7], tasks that use this value
905 * as an input can assume that the types of final variables have been 853 * as an input can assume that the types of static variables have been inferred.
906 * propagated.
907 * 854 *
908 * The result is only available for [LibrarySpecificUnit]s. 855 * The result is only available for [LibrarySpecificUnit]s.
909 */ 856 */
910 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT8 = 857 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT8 =
911 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT8', null, 858 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT8', null,
912 cachingPolicy: AST_CACHING_POLICY); 859 cachingPolicy: AST_CACHING_POLICY);
913 860
914 /** 861 /**
915 * The partially resolved [CompilationUnit] associated with a compilation unit. 862 * The partially resolved [CompilationUnit] associated with a compilation unit.
916 * 863 *
917 * In addition to what is true of a [RESOLVED_UNIT8], tasks that use this value 864 * In addition to what is true of a [RESOLVED_UNIT8], tasks that use this value
918 * as an input can assume that the types of static variables have been inferred. 865 * as an input can assume that the initializers of instance variables have been
866 * re-resolved.
919 * 867 *
920 * The result is only available for [LibrarySpecificUnit]s. 868 * The result is only available for [LibrarySpecificUnit]s.
921 */ 869 */
922 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT9 = 870 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT9 =
923 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT9', null, 871 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT9', null,
924 cachingPolicy: AST_CACHING_POLICY); 872 cachingPolicy: AST_CACHING_POLICY);
925 873
926 /** 874 /**
927 * List of all `RESOLVED_UNITx` results. 875 * List of all `RESOLVED_UNITx` results.
928 */ 876 */
929 final List<ResultDescriptor<CompilationUnit>> RESOLVED_UNIT_RESULTS = 877 final List<ResultDescriptor<CompilationUnit>> RESOLVED_UNIT_RESULTS =
930 <ResultDescriptor<CompilationUnit>>[ 878 <ResultDescriptor<CompilationUnit>>[
931 RESOLVED_UNIT1, 879 RESOLVED_UNIT1,
932 RESOLVED_UNIT2, 880 RESOLVED_UNIT2,
933 RESOLVED_UNIT3, 881 RESOLVED_UNIT3,
934 RESOLVED_UNIT4, 882 RESOLVED_UNIT4,
935 RESOLVED_UNIT5, 883 RESOLVED_UNIT5,
936 RESOLVED_UNIT6, 884 RESOLVED_UNIT6,
937 RESOLVED_UNIT7, 885 RESOLVED_UNIT7,
938 RESOLVED_UNIT8, 886 RESOLVED_UNIT8,
939 RESOLVED_UNIT9, 887 RESOLVED_UNIT9,
940 RESOLVED_UNIT10, 888 RESOLVED_UNIT10,
941 RESOLVED_UNIT11, 889 RESOLVED_UNIT11,
942 RESOLVED_UNIT12, 890 RESOLVED_UNIT12,
943 RESOLVED_UNIT13,
944 RESOLVED_UNIT 891 RESOLVED_UNIT
945 ]; 892 ];
946 893
947 /** 894 /**
948 * The errors produced while scanning a compilation unit. 895 * The errors produced while scanning a compilation unit.
949 * 896 *
950 * The list will be empty if there were no errors, but will not be `null`. 897 * The list will be empty if there were no errors, but will not be `null`.
951 * 898 *
952 * The result is only available for [Source]s representing a compilation unit. 899 * The result is only available for [Source]s representing a compilation unit.
953 */ 900 */
(...skipping 1342 matching lines...) Expand 10 before | Expand all | Expand 10 after
2296 * Create a [ComputeLibraryCycleTask] based on the 2243 * Create a [ComputeLibraryCycleTask] based on the
2297 * given [target] in the given [context]. 2244 * given [target] in the given [context].
2298 */ 2245 */
2299 static ComputeLibraryCycleTask createTask( 2246 static ComputeLibraryCycleTask createTask(
2300 AnalysisContext context, AnalysisTarget target) { 2247 AnalysisContext context, AnalysisTarget target) {
2301 return new ComputeLibraryCycleTask(context, target); 2248 return new ComputeLibraryCycleTask(context, target);
2302 } 2249 }
2303 } 2250 }
2304 2251
2305 /** 2252 /**
2306 * A task that computes the [PROPAGABLE_VARIABLE_DEPENDENCIES] for a variable.
2307 */
2308 class ComputePropagableVariableDependenciesTask
2309 extends InferStaticVariableTask {
2310 /**
2311 * The name of the [RESOLVED_UNIT7] input.
2312 */
2313 static const String UNIT_INPUT = 'UNIT_INPUT';
2314
2315 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
2316 'ComputePropagableVariableDependenciesTask',
2317 createTask,
2318 buildInputs,
2319 <ResultDescriptor>[PROPAGABLE_VARIABLE_DEPENDENCIES]);
2320
2321 ComputePropagableVariableDependenciesTask(
2322 InternalAnalysisContext context, VariableElement variable)
2323 : super(context, variable);
2324
2325 @override
2326 TaskDescriptor get descriptor => DESCRIPTOR;
2327
2328 @override
2329 void internalPerform() {
2330 //
2331 // Prepare inputs.
2332 //
2333 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
2334 //
2335 // Compute dependencies.
2336 //
2337 VariableDeclaration declaration = getDeclaration(unit);
2338 VariableGatherer gatherer = new VariableGatherer(_isPropagable);
2339 declaration.initializer.accept(gatherer);
2340 //
2341 // Record outputs.
2342 //
2343 outputs[PROPAGABLE_VARIABLE_DEPENDENCIES] = gatherer.results.toList();
2344 }
2345
2346 /**
2347 * Return `true` if the given [variable] is a variable whose type can be
2348 * propagated.
2349 */
2350 bool _isPropagable(VariableElement variable) =>
2351 variable is PropertyInducingElement &&
2352 (variable.isConst || variable.isFinal) &&
2353 variable.hasImplicitType &&
2354 variable.initializer != null;
2355
2356 /**
2357 * Return a map from the names of the inputs of this kind of task to the task
2358 * input descriptors describing those inputs for a task with the
2359 * given [target].
2360 */
2361 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
2362 if (target is VariableElement) {
2363 CompilationUnitElementImpl unit = target
2364 .getAncestor((Element element) => element is CompilationUnitElement);
2365 return <String, TaskInput>{
2366 UNIT_INPUT: RESOLVED_UNIT7
2367 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))
2368 };
2369 }
2370 throw new AnalysisException(
2371 'Cannot build inputs for a ${target.runtimeType}');
2372 }
2373
2374 /**
2375 * Create a [ComputePropagableVariableDependenciesTask] based on the
2376 * given [target] in the given [context].
2377 */
2378 static ComputePropagableVariableDependenciesTask createTask(
2379 AnalysisContext context, AnalysisTarget target) {
2380 return new ComputePropagableVariableDependenciesTask(context, target);
2381 }
2382 }
2383
2384 /**
2385 * A task that builds [REQUIRED_CONSTANTS] for a unit. 2253 * A task that builds [REQUIRED_CONSTANTS] for a unit.
2386 */ 2254 */
2387 class ComputeRequiredConstantsTask extends SourceBasedAnalysisTask { 2255 class ComputeRequiredConstantsTask extends SourceBasedAnalysisTask {
2388 /** 2256 /**
2389 * The name of the [RESOLVED_UNIT] input. 2257 * The name of the [RESOLVED_UNIT] input.
2390 */ 2258 */
2391 static const String UNIT_INPUT = 'UNIT_INPUT'; 2259 static const String UNIT_INPUT = 'UNIT_INPUT';
2392 2260
2393 /** 2261 /**
2394 * The task descriptor describing this kind of task. 2262 * The task descriptor describing this kind of task.
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
2999 // Ignores can be on the line or just preceding the error. 2867 // Ignores can be on the line or just preceding the error.
3000 return ignoreInfo.ignoredAt(errorCode, errorLine) || 2868 return ignoreInfo.ignoredAt(errorCode, errorLine) ||
3001 ignoreInfo.ignoredAt(errorCode, errorLine - 1); 2869 ignoreInfo.ignoredAt(errorCode, errorLine - 1);
3002 } 2870 }
3003 2871
3004 return errors.where((AnalysisError e) => !isIgnored(e)).toList(); 2872 return errors.where((AnalysisError e) => !isIgnored(e)).toList();
3005 } 2873 }
3006 } 2874 }
3007 2875
3008 /** 2876 /**
3009 * A task that builds [RESOLVED_UNIT13] for a unit. 2877 * A task that builds [RESOLVED_UNIT12] for a unit.
3010 */ 2878 */
3011 class EvaluateUnitConstantsTask extends SourceBasedAnalysisTask { 2879 class EvaluateUnitConstantsTask extends SourceBasedAnalysisTask {
3012 /** 2880 /**
3013 * The name of the [RESOLVED_UNIT12] input. 2881 * The name of the [RESOLVED_UNIT11] input.
3014 */ 2882 */
3015 static const String UNIT_INPUT = 'UNIT_INPUT'; 2883 static const String UNIT_INPUT = 'UNIT_INPUT';
3016 2884
3017 /** 2885 /**
3018 * The name of the [CONSTANT_VALUE] input. 2886 * The name of the [CONSTANT_VALUE] input.
3019 */ 2887 */
3020 static const String CONSTANT_VALUES = 'CONSTANT_VALUES'; 2888 static const String CONSTANT_VALUES = 'CONSTANT_VALUES';
3021 2889
3022 /** 2890 /**
3023 * The task descriptor describing this kind of task. 2891 * The task descriptor describing this kind of task.
3024 */ 2892 */
3025 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 2893 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3026 'EvaluateUnitConstantsTask', 2894 'EvaluateUnitConstantsTask',
3027 createTask, 2895 createTask,
3028 buildInputs, 2896 buildInputs,
3029 <ResultDescriptor>[CREATED_RESOLVED_UNIT13, RESOLVED_UNIT13]); 2897 <ResultDescriptor>[CREATED_RESOLVED_UNIT12, RESOLVED_UNIT12]);
3030 2898
3031 EvaluateUnitConstantsTask(AnalysisContext context, LibrarySpecificUnit target) 2899 EvaluateUnitConstantsTask(AnalysisContext context, LibrarySpecificUnit target)
3032 : super(context, target); 2900 : super(context, target);
3033 2901
3034 @override 2902 @override
3035 TaskDescriptor get descriptor => DESCRIPTOR; 2903 TaskDescriptor get descriptor => DESCRIPTOR;
3036 2904
3037 @override 2905 @override
3038 void internalPerform() { 2906 void internalPerform() {
3039 // No actual work needs to be performed; the task manager will ensure that 2907 // No actual work needs to be performed; the task manager will ensure that
3040 // all constants are evaluated before this method is called. 2908 // all constants are evaluated before this method is called.
3041 CompilationUnit unit = getRequiredInput(UNIT_INPUT); 2909 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
3042 outputs[RESOLVED_UNIT13] = unit; 2910 outputs[RESOLVED_UNIT12] = unit;
3043 outputs[CREATED_RESOLVED_UNIT13] = true; 2911 outputs[CREATED_RESOLVED_UNIT12] = true;
3044 } 2912 }
3045 2913
3046 /** 2914 /**
3047 * Return a map from the names of the inputs of this kind of task to the task 2915 * Return a map from the names of the inputs of this kind of task to the task
3048 * input descriptors describing those inputs for a task with the 2916 * input descriptors describing those inputs for a task with the
3049 * given [target]. 2917 * given [target].
3050 */ 2918 */
3051 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 2919 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3052 LibrarySpecificUnit unit = target; 2920 LibrarySpecificUnit unit = target;
3053 return <String, TaskInput>{ 2921 return <String, TaskInput>{
3054 'libraryElement': LIBRARY_ELEMENT9.of(unit.library), 2922 'libraryElement': LIBRARY_ELEMENT9.of(unit.library),
3055 UNIT_INPUT: RESOLVED_UNIT12.of(unit), 2923 UNIT_INPUT: RESOLVED_UNIT11.of(unit),
3056 CONSTANT_VALUES: 2924 CONSTANT_VALUES:
3057 COMPILATION_UNIT_CONSTANTS.of(unit).toListOf(CONSTANT_VALUE), 2925 COMPILATION_UNIT_CONSTANTS.of(unit).toListOf(CONSTANT_VALUE),
3058 'constantExpressionsDependencies': 2926 'constantExpressionsDependencies':
3059 CONSTANT_EXPRESSIONS_DEPENDENCIES.of(unit).toListOf(CONSTANT_VALUE) 2927 CONSTANT_EXPRESSIONS_DEPENDENCIES.of(unit).toListOf(CONSTANT_VALUE)
3060 }; 2928 };
3061 } 2929 }
3062 2930
3063 /** 2931 /**
3064 * Create an [EvaluateUnitConstantsTask] based on the given [target] in 2932 * Create an [EvaluateUnitConstantsTask] based on the given [target] in
3065 * the given [context]. 2933 * the given [context].
3066 */ 2934 */
3067 static EvaluateUnitConstantsTask createTask( 2935 static EvaluateUnitConstantsTask createTask(
3068 AnalysisContext context, AnalysisTarget target) { 2936 AnalysisContext context, AnalysisTarget target) {
3069 return new EvaluateUnitConstantsTask(context, target); 2937 return new EvaluateUnitConstantsTask(context, target);
3070 } 2938 }
3071 } 2939 }
3072 2940
3073 /** 2941 /**
3074 * A task that builds [USED_IMPORTED_ELEMENTS] for a unit. 2942 * A task that builds [USED_IMPORTED_ELEMENTS] for a unit.
3075 */ 2943 */
3076 class GatherUsedImportedElementsTask extends SourceBasedAnalysisTask { 2944 class GatherUsedImportedElementsTask extends SourceBasedAnalysisTask {
3077 /** 2945 /**
3078 * The name of the [RESOLVED_UNIT12] input. 2946 * The name of the [RESOLVED_UNIT11] input.
3079 */ 2947 */
3080 static const String UNIT_INPUT = 'UNIT_INPUT'; 2948 static const String UNIT_INPUT = 'UNIT_INPUT';
3081 2949
3082 /** 2950 /**
3083 * The task descriptor describing this kind of task. 2951 * The task descriptor describing this kind of task.
3084 */ 2952 */
3085 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 2953 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3086 'GatherUsedImportedElementsTask', 2954 'GatherUsedImportedElementsTask',
3087 createTask, 2955 createTask,
3088 buildInputs, 2956 buildInputs,
(...skipping 23 matching lines...) Expand all
3112 outputs[USED_IMPORTED_ELEMENTS] = visitor.usedElements; 2980 outputs[USED_IMPORTED_ELEMENTS] = visitor.usedElements;
3113 } 2981 }
3114 2982
3115 /** 2983 /**
3116 * Return a map from the names of the inputs of this kind of task to the task 2984 * Return a map from the names of the inputs of this kind of task to the task
3117 * input descriptors describing those inputs for a task with the 2985 * input descriptors describing those inputs for a task with the
3118 * given [target]. 2986 * given [target].
3119 */ 2987 */
3120 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 2988 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3121 LibrarySpecificUnit unit = target; 2989 LibrarySpecificUnit unit = target;
3122 return <String, TaskInput>{UNIT_INPUT: RESOLVED_UNIT12.of(unit)}; 2990 return <String, TaskInput>{UNIT_INPUT: RESOLVED_UNIT11.of(unit)};
3123 } 2991 }
3124 2992
3125 /** 2993 /**
3126 * Create a [GatherUsedImportedElementsTask] based on the given [target] in 2994 * Create a [GatherUsedImportedElementsTask] based on the given [target] in
3127 * the given [context]. 2995 * the given [context].
3128 */ 2996 */
3129 static GatherUsedImportedElementsTask createTask( 2997 static GatherUsedImportedElementsTask createTask(
3130 AnalysisContext context, AnalysisTarget target) { 2998 AnalysisContext context, AnalysisTarget target) {
3131 return new GatherUsedImportedElementsTask(context, target); 2999 return new GatherUsedImportedElementsTask(context, target);
3132 } 3000 }
3133 } 3001 }
3134 3002
3135 /** 3003 /**
3136 * A task that builds [USED_LOCAL_ELEMENTS] for a unit. 3004 * A task that builds [USED_LOCAL_ELEMENTS] for a unit.
3137 */ 3005 */
3138 class GatherUsedLocalElementsTask extends SourceBasedAnalysisTask { 3006 class GatherUsedLocalElementsTask extends SourceBasedAnalysisTask {
3139 /** 3007 /**
3140 * The name of the [RESOLVED_UNIT12] input. 3008 * The name of the [RESOLVED_UNIT11] input.
3141 */ 3009 */
3142 static const String UNIT_INPUT = 'UNIT_INPUT'; 3010 static const String UNIT_INPUT = 'UNIT_INPUT';
3143 3011
3144 /** 3012 /**
3145 * The task descriptor describing this kind of task. 3013 * The task descriptor describing this kind of task.
3146 */ 3014 */
3147 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 3015 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3148 'GatherUsedLocalElementsTask', 3016 'GatherUsedLocalElementsTask',
3149 createTask, 3017 createTask,
3150 buildInputs, 3018 buildInputs,
(...skipping 23 matching lines...) Expand all
3174 outputs[USED_LOCAL_ELEMENTS] = visitor.usedElements; 3042 outputs[USED_LOCAL_ELEMENTS] = visitor.usedElements;
3175 } 3043 }
3176 3044
3177 /** 3045 /**
3178 * Return a map from the names of the inputs of this kind of task to the task 3046 * Return a map from the names of the inputs of this kind of task to the task
3179 * input descriptors describing those inputs for a task with the 3047 * input descriptors describing those inputs for a task with the
3180 * given [target]. 3048 * given [target].
3181 */ 3049 */
3182 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 3050 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3183 LibrarySpecificUnit unit = target; 3051 LibrarySpecificUnit unit = target;
3184 return <String, TaskInput>{UNIT_INPUT: RESOLVED_UNIT12.of(unit)}; 3052 return <String, TaskInput>{UNIT_INPUT: RESOLVED_UNIT11.of(unit)};
3185 } 3053 }
3186 3054
3187 /** 3055 /**
3188 * Create a [GatherUsedLocalElementsTask] based on the given [target] in 3056 * Create a [GatherUsedLocalElementsTask] based on the given [target] in
3189 * the given [context]. 3057 * the given [context].
3190 */ 3058 */
3191 static GatherUsedLocalElementsTask createTask( 3059 static GatherUsedLocalElementsTask createTask(
3192 AnalysisContext context, AnalysisTarget target) { 3060 AnalysisContext context, AnalysisTarget target) {
3193 return new GatherUsedLocalElementsTask(context, target); 3061 return new GatherUsedLocalElementsTask(context, target);
3194 } 3062 }
3195 } 3063 }
3196 3064
3197 /** 3065 /**
3198 * A task that generates [HINTS] for a unit. 3066 * A task that generates [HINTS] for a unit.
3199 */ 3067 */
3200 class GenerateHintsTask extends SourceBasedAnalysisTask { 3068 class GenerateHintsTask extends SourceBasedAnalysisTask {
3201 /** 3069 /**
3202 * The name of the [RESOLVED_UNIT12] input. 3070 * The name of the [RESOLVED_UNIT11] input.
3203 */ 3071 */
3204 static const String RESOLVED_UNIT_INPUT = 'RESOLVED_UNIT'; 3072 static const String RESOLVED_UNIT_INPUT = 'RESOLVED_UNIT';
3205 3073
3206 /** 3074 /**
3207 * The name of a list of [USED_LOCAL_ELEMENTS] for each library unit input. 3075 * The name of a list of [USED_LOCAL_ELEMENTS] for each library unit input.
3208 */ 3076 */
3209 static const String USED_LOCAL_ELEMENTS_INPUT = 'USED_LOCAL_ELEMENTS'; 3077 static const String USED_LOCAL_ELEMENTS_INPUT = 'USED_LOCAL_ELEMENTS';
3210 3078
3211 /** 3079 /**
3212 * The name of a list of [USED_IMPORTED_ELEMENTS] for each library unit input. 3080 * The name of a list of [USED_IMPORTED_ELEMENTS] for each library unit input.
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
3490 * A task that ensures that all of the inferable instance members in a 3358 * A task that ensures that all of the inferable instance members in a
3491 * compilation unit have had their type inferred. 3359 * compilation unit have had their type inferred.
3492 */ 3360 */
3493 class InferInstanceMembersInUnitTask extends SourceBasedAnalysisTask { 3361 class InferInstanceMembersInUnitTask extends SourceBasedAnalysisTask {
3494 /** 3362 /**
3495 * The name of the [TYPE_PROVIDER] input. 3363 * The name of the [TYPE_PROVIDER] input.
3496 */ 3364 */
3497 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT'; 3365 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT';
3498 3366
3499 /** 3367 /**
3500 * The name of the input whose value is the [RESOLVED_UNIT9] for the 3368 * The name of the input whose value is the [RESOLVED_UNIT8] for the
3501 * compilation unit. 3369 * compilation unit.
3502 */ 3370 */
3503 static const String UNIT_INPUT = 'UNIT_INPUT'; 3371 static const String UNIT_INPUT = 'UNIT_INPUT';
3504 3372
3505 /** 3373 /**
3506 * The task descriptor describing this kind of task. 3374 * The task descriptor describing this kind of task.
3507 */ 3375 */
3508 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 3376 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3509 'InferInstanceMembersInUnitTask', 3377 'InferInstanceMembersInUnitTask',
3510 createTask, 3378 createTask,
3511 buildInputs, 3379 buildInputs,
3512 <ResultDescriptor>[CREATED_RESOLVED_UNIT11, RESOLVED_UNIT11]); 3380 <ResultDescriptor>[CREATED_RESOLVED_UNIT10, RESOLVED_UNIT10]);
3513 3381
3514 /** 3382 /**
3515 * Initialize a newly created task to build a library element for the given 3383 * Initialize a newly created task to build a library element for the given
3516 * [unit] in the given [context]. 3384 * [unit] in the given [context].
3517 */ 3385 */
3518 InferInstanceMembersInUnitTask( 3386 InferInstanceMembersInUnitTask(
3519 InternalAnalysisContext context, LibrarySpecificUnit unit) 3387 InternalAnalysisContext context, LibrarySpecificUnit unit)
3520 : super(context, unit); 3388 : super(context, unit);
3521 3389
3522 @override 3390 @override
(...skipping 11 matching lines...) Expand all
3534 // 3402 //
3535 if (context.analysisOptions.strongMode) { 3403 if (context.analysisOptions.strongMode) {
3536 InstanceMemberInferrer inferrer = new InstanceMemberInferrer( 3404 InstanceMemberInferrer inferrer = new InstanceMemberInferrer(
3537 typeProvider, new InheritanceManager(unit.element.library), 3405 typeProvider, new InheritanceManager(unit.element.library),
3538 typeSystem: context.typeSystem); 3406 typeSystem: context.typeSystem);
3539 inferrer.inferCompilationUnit(unit.element); 3407 inferrer.inferCompilationUnit(unit.element);
3540 } 3408 }
3541 // 3409 //
3542 // Record outputs. 3410 // Record outputs.
3543 // 3411 //
3544 outputs[RESOLVED_UNIT11] = unit; 3412 outputs[RESOLVED_UNIT10] = unit;
3545 outputs[CREATED_RESOLVED_UNIT11] = true; 3413 outputs[CREATED_RESOLVED_UNIT10] = true;
3546 } 3414 }
3547 3415
3548 /** 3416 /**
3549 * Return a map from the names of the inputs of this kind of task to the task 3417 * Return a map from the names of the inputs of this kind of task to the task
3550 * input descriptors describing those inputs for a task with the given 3418 * input descriptors describing those inputs for a task with the given
3551 * [libSource]. 3419 * [libSource].
3552 */ 3420 */
3553 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 3421 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3554 LibrarySpecificUnit unit = target; 3422 LibrarySpecificUnit unit = target;
3555 return <String, TaskInput>{ 3423 return <String, TaskInput>{
3556 UNIT_INPUT: RESOLVED_UNIT10.of(unit), 3424 UNIT_INPUT: RESOLVED_UNIT9.of(unit),
3557 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), 3425 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
3558 // In strong mode, add additional dependencies to enforce inference 3426 // In strong mode, add additional dependencies to enforce inference
3559 // ordering. 3427 // ordering.
3560 3428
3561 // Require that field re-resolution be complete for all units in the 3429 // Require that field re-resolution be complete for all units in the
3562 // current library cycle. 3430 // current library cycle.
3563 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit.library).toList( 3431 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit.library).toList(
3564 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT10.of( 3432 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT9.of(
3565 new LibrarySpecificUnit( 3433 new LibrarySpecificUnit(
3566 (unit as CompilationUnitElementImpl).librarySource, 3434 (unit as CompilationUnitElementImpl).librarySource,
3567 unit.source))), 3435 unit.source))),
3568 // Require that full inference be complete for all dependencies of the 3436 // Require that full inference be complete for all dependencies of the
3569 // current library cycle. 3437 // current library cycle.
3570 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList( 3438 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList(
3571 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT11.of( 3439 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT10.of(
3572 new LibrarySpecificUnit( 3440 new LibrarySpecificUnit(
3573 (unit as CompilationUnitElementImpl).librarySource, 3441 (unit as CompilationUnitElementImpl).librarySource,
3574 unit.source))) 3442 unit.source)))
3575 }; 3443 };
3576 } 3444 }
3577 3445
3578 /** 3446 /**
3579 * Create a [InferInstanceMembersInUnitTask] based on the given [target] in 3447 * Create a [InferInstanceMembersInUnitTask] based on the given [target] in
3580 * the given [context]. 3448 * the given [context].
3581 */ 3449 */
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
3665 */ 3533 */
3666 static const String ERRORS_LIST_INPUT = 'INFERRED_VARIABLES_INPUT'; 3534 static const String ERRORS_LIST_INPUT = 'INFERRED_VARIABLES_INPUT';
3667 3535
3668 /** 3536 /**
3669 * The task descriptor describing this kind of task. 3537 * The task descriptor describing this kind of task.
3670 */ 3538 */
3671 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 3539 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3672 'InferStaticVariableTypesInUnitTask', 3540 'InferStaticVariableTypesInUnitTask',
3673 createTask, 3541 createTask,
3674 buildInputs, <ResultDescriptor>[ 3542 buildInputs, <ResultDescriptor>[
3675 CREATED_RESOLVED_UNIT9, 3543 CREATED_RESOLVED_UNIT8,
3676 RESOLVED_UNIT9, 3544 RESOLVED_UNIT8,
3677 STATIC_VARIABLE_RESOLUTION_ERRORS_IN_UNIT 3545 STATIC_VARIABLE_RESOLUTION_ERRORS_IN_UNIT
3678 ]); 3546 ]);
3679 3547
3680 /** 3548 /**
3681 * Initialize a newly created task to build a library element for the given 3549 * Initialize a newly created task to build a library element for the given
3682 * [unit] in the given [context]. 3550 * [unit] in the given [context].
3683 */ 3551 */
3684 InferStaticVariableTypesInUnitTask( 3552 InferStaticVariableTypesInUnitTask(
3685 InternalAnalysisContext context, LibrarySpecificUnit unit) 3553 InternalAnalysisContext context, LibrarySpecificUnit unit)
3686 : super(context, unit); 3554 : super(context, unit);
3687 3555
3688 @override 3556 @override
3689 TaskDescriptor get descriptor => DESCRIPTOR; 3557 TaskDescriptor get descriptor => DESCRIPTOR;
3690 3558
3691 @override 3559 @override
3692 void internalPerform() { 3560 void internalPerform() {
3693 // 3561 //
3694 // Prepare inputs. 3562 // Prepare inputs.
3695 // 3563 //
3696 CompilationUnit unit = getRequiredInput(UNIT_INPUT); 3564 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
3697 List<List<AnalysisError>> errorLists = getRequiredInput(ERRORS_LIST_INPUT); 3565 List<List<AnalysisError>> errorLists = getRequiredInput(ERRORS_LIST_INPUT);
3698 // 3566 //
3699 // Record outputs. There is no additional work to be done at this time 3567 // Record outputs. There is no additional work to be done at this time
3700 // because the work has implicitly been done by virtue of the task model 3568 // because the work has implicitly been done by virtue of the task model
3701 // preparing all of the inputs. 3569 // preparing all of the inputs.
3702 // 3570 //
3703 outputs[RESOLVED_UNIT9] = unit; 3571 outputs[RESOLVED_UNIT8] = unit;
3704 outputs[CREATED_RESOLVED_UNIT9] = true; 3572 outputs[CREATED_RESOLVED_UNIT8] = true;
3705 outputs[STATIC_VARIABLE_RESOLUTION_ERRORS_IN_UNIT] = 3573 outputs[STATIC_VARIABLE_RESOLUTION_ERRORS_IN_UNIT] =
3706 AnalysisError.mergeLists(errorLists); 3574 AnalysisError.mergeLists(errorLists);
3707 } 3575 }
3708 3576
3709 /** 3577 /**
3710 * Return a map from the names of the inputs of this kind of task to the task 3578 * Return a map from the names of the inputs of this kind of task to the task
3711 * input descriptors describing those inputs for a task with the given 3579 * input descriptors describing those inputs for a task with the given
3712 * [libSource]. 3580 * [libSource].
3713 */ 3581 */
3714 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 3582 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3715 LibrarySpecificUnit unit = target; 3583 LibrarySpecificUnit unit = target;
3716 return <String, TaskInput>{ 3584 return <String, TaskInput>{
3717 'inferredTypes': INFERABLE_STATIC_VARIABLES_IN_UNIT 3585 'inferredTypes': INFERABLE_STATIC_VARIABLES_IN_UNIT
3718 .of(unit) 3586 .of(unit)
3719 .toListOf(INFERRED_STATIC_VARIABLE), 3587 .toListOf(INFERRED_STATIC_VARIABLE),
3720 ERRORS_LIST_INPUT: INFERABLE_STATIC_VARIABLES_IN_UNIT 3588 ERRORS_LIST_INPUT: INFERABLE_STATIC_VARIABLES_IN_UNIT
3721 .of(unit) 3589 .of(unit)
3722 .toListOf(STATIC_VARIABLE_RESOLUTION_ERRORS), 3590 .toListOf(STATIC_VARIABLE_RESOLUTION_ERRORS),
3723 UNIT_INPUT: RESOLVED_UNIT8.of(unit) 3591 UNIT_INPUT: RESOLVED_UNIT7.of(unit)
3724 }; 3592 };
3725 } 3593 }
3726 3594
3727 /** 3595 /**
3728 * Create a [InferStaticVariableTypesInUnitTask] based on the given [target] 3596 * Create a [InferStaticVariableTypesInUnitTask] based on the given [target]
3729 * in the given [context]. 3597 * in the given [context].
3730 */ 3598 */
3731 static InferStaticVariableTypesInUnitTask createTask( 3599 static InferStaticVariableTypesInUnitTask createTask(
3732 AnalysisContext context, AnalysisTarget target) { 3600 AnalysisContext context, AnalysisTarget target) {
3733 return new InferStaticVariableTypesInUnitTask(context, target); 3601 return new InferStaticVariableTypesInUnitTask(context, target);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
3841 */ 3709 */
3842 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 3710 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3843 VariableElement variable = target; 3711 VariableElement variable = target;
3844 LibrarySpecificUnit unit = 3712 LibrarySpecificUnit unit =
3845 new LibrarySpecificUnit(variable.library.source, variable.source); 3713 new LibrarySpecificUnit(variable.library.source, variable.source);
3846 return <String, TaskInput>{ 3714 return <String, TaskInput>{
3847 DEPENDENCIES_INPUT: INFERABLE_STATIC_VARIABLE_DEPENDENCIES 3715 DEPENDENCIES_INPUT: INFERABLE_STATIC_VARIABLE_DEPENDENCIES
3848 .of(variable) 3716 .of(variable)
3849 .toListOf(INFERRED_STATIC_VARIABLE), 3717 .toListOf(INFERRED_STATIC_VARIABLE),
3850 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), 3718 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
3851 UNIT_INPUT: RESOLVED_UNIT8.of(unit), 3719 UNIT_INPUT: RESOLVED_UNIT7.of(unit),
3852 // In strong mode, add additional dependencies to enforce inference 3720 // In strong mode, add additional dependencies to enforce inference
3853 // ordering. 3721 // ordering.
3854 3722
3855 // Require that full inference be complete for all dependencies of the 3723 // Require that full inference be complete for all dependencies of the
3856 // current library cycle. 3724 // current library cycle.
3857 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList( 3725 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList(
3858 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT11.of( 3726 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT10.of(
3859 new LibrarySpecificUnit( 3727 new LibrarySpecificUnit(
3860 (unit as CompilationUnitElementImpl).librarySource, 3728 (unit as CompilationUnitElementImpl).librarySource,
3861 unit.source))) 3729 unit.source)))
3862 }; 3730 };
3863 } 3731 }
3864 3732
3865 /** 3733 /**
3866 * Create a [InferStaticVariableTypeTask] based on the given [target] in the 3734 * Create a [InferStaticVariableTypeTask] based on the given [target] in the
3867 * given [context]. 3735 * given [context].
3868 */ 3736 */
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
4308 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT'; 4176 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT';
4309 4177
4310 /** 4178 /**
4311 * The task descriptor describing this kind of task. 4179 * The task descriptor describing this kind of task.
4312 */ 4180 */
4313 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 4181 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4314 'PartiallyResolveUnitReferencesTask', 4182 'PartiallyResolveUnitReferencesTask',
4315 createTask, 4183 createTask,
4316 buildInputs, <ResultDescriptor>[ 4184 buildInputs, <ResultDescriptor>[
4317 INFERABLE_STATIC_VARIABLES_IN_UNIT, 4185 INFERABLE_STATIC_VARIABLES_IN_UNIT,
4318 PROPAGABLE_VARIABLES_IN_UNIT,
4319 CREATED_RESOLVED_UNIT7, 4186 CREATED_RESOLVED_UNIT7,
4320 RESOLVED_UNIT7 4187 RESOLVED_UNIT7
4321 ]); 4188 ]);
4322 4189
4323 PartiallyResolveUnitReferencesTask( 4190 PartiallyResolveUnitReferencesTask(
4324 InternalAnalysisContext context, AnalysisTarget target) 4191 InternalAnalysisContext context, AnalysisTarget target)
4325 : super(context, target); 4192 : super(context, target);
4326 4193
4327 @override 4194 @override
4328 TaskDescriptor get descriptor => DESCRIPTOR; 4195 TaskDescriptor get descriptor => DESCRIPTOR;
(...skipping 14 matching lines...) Expand all
4343 unitElement.source, typeProvider, AnalysisErrorListener.NULL_LISTENER); 4210 unitElement.source, typeProvider, AnalysisErrorListener.NULL_LISTENER);
4344 unit.accept(visitor); 4211 unit.accept(visitor);
4345 // 4212 //
4346 // Record outputs. 4213 // Record outputs.
4347 // 4214 //
4348 if (context.analysisOptions.strongMode) { 4215 if (context.analysisOptions.strongMode) {
4349 outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = visitor.staticVariables; 4216 outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = visitor.staticVariables;
4350 } else { 4217 } else {
4351 outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = VariableElement.EMPTY_LIST; 4218 outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = VariableElement.EMPTY_LIST;
4352 } 4219 }
4353 outputs[PROPAGABLE_VARIABLES_IN_UNIT] = visitor.propagableVariables;
4354 outputs[RESOLVED_UNIT7] = unit; 4220 outputs[RESOLVED_UNIT7] = unit;
4355 outputs[CREATED_RESOLVED_UNIT7] = true; 4221 outputs[CREATED_RESOLVED_UNIT7] = true;
4356 } 4222 }
4357 4223
4358 /** 4224 /**
4359 * Return a map from the names of the inputs of this kind of task to the task 4225 * Return a map from the names of the inputs of this kind of task to the task
4360 * input descriptors describing those inputs for a task with the 4226 * input descriptors describing those inputs for a task with the
4361 * given [target]. 4227 * given [target].
4362 */ 4228 */
4363 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 4229 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4364 LibrarySpecificUnit unit = target; 4230 LibrarySpecificUnit unit = target;
4365 return <String, TaskInput>{ 4231 return <String, TaskInput>{
4366 'fullyBuiltLibraryElements': READY_LIBRARY_ELEMENT6.of(unit.library), 4232 'fullyBuiltLibraryElements': READY_LIBRARY_ELEMENT6.of(unit.library),
4367 LIBRARY_INPUT: LIBRARY_ELEMENT6.of(unit.library), 4233 LIBRARY_INPUT: LIBRARY_ELEMENT6.of(unit.library),
4368 UNIT_INPUT: RESOLVED_UNIT6.of(unit), 4234 UNIT_INPUT: RESOLVED_UNIT6.of(unit),
4369 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), 4235 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
4370 // In strong mode, add additional dependencies to enforce inference 4236 // In strong mode, add additional dependencies to enforce inference
4371 // ordering. 4237 // ordering.
4372 4238
4373 // Require that full inference be complete for all dependencies of the 4239 // Require that full inference be complete for all dependencies of the
4374 // current library cycle. 4240 // current library cycle.
4375 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList( 4241 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList(
4376 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT11.of( 4242 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT10.of(
4377 new LibrarySpecificUnit( 4243 new LibrarySpecificUnit(
4378 (unit as CompilationUnitElementImpl).librarySource, 4244 (unit as CompilationUnitElementImpl).librarySource,
4379 unit.source))) 4245 unit.source)))
4380 }; 4246 };
4381 } 4247 }
4382 4248
4383 /** 4249 /**
4384 * Create a [PartiallyResolveUnitReferencesTask] based on the given [target] 4250 * Create a [PartiallyResolveUnitReferencesTask] based on the given [target]
4385 * in the given [context]. 4251 * in the given [context].
4386 */ 4252 */
4387 static PartiallyResolveUnitReferencesTask createTask( 4253 static PartiallyResolveUnitReferencesTask createTask(
4388 AnalysisContext context, AnalysisTarget target) { 4254 AnalysisContext context, AnalysisTarget target) {
4389 return new PartiallyResolveUnitReferencesTask(context, target); 4255 return new PartiallyResolveUnitReferencesTask(context, target);
4390 } 4256 }
4391 } 4257 }
4392 4258
4393 /** 4259 /**
4394 * An artificial task that does nothing except to force propagated types for
4395 * all propagable variables in the import/export closure a library.
4396 */
4397 class PropagateVariableTypesInLibraryClosureTask
4398 extends SourceBasedAnalysisTask {
4399 /**
4400 * The name of the [LIBRARY_ELEMENT7] input.
4401 */
4402 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
4403
4404 /**
4405 * The task descriptor describing this kind of task.
4406 */
4407 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4408 'PropagateVariableTypesInLibraryClosureTask',
4409 createTask,
4410 buildInputs,
4411 <ResultDescriptor>[LIBRARY_ELEMENT8]);
4412
4413 PropagateVariableTypesInLibraryClosureTask(
4414 InternalAnalysisContext context, AnalysisTarget target)
4415 : super(context, target);
4416
4417 @override
4418 TaskDescriptor get descriptor => DESCRIPTOR;
4419
4420 @override
4421 void internalPerform() {
4422 LibraryElement library = getRequiredInput(LIBRARY_INPUT);
4423 outputs[LIBRARY_ELEMENT8] = library;
4424 }
4425
4426 /**
4427 * Return a map from the names of the inputs of this kind of task to the task
4428 * input descriptors describing those inputs for a task with the
4429 * given [target].
4430 */
4431 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4432 Source source = target;
4433 return <String, TaskInput>{
4434 'readyForClosure': READY_LIBRARY_ELEMENT7.of(source),
4435 LIBRARY_INPUT: LIBRARY_ELEMENT7.of(source),
4436 };
4437 }
4438
4439 /**
4440 * Create a [PropagateVariableTypesInLibraryClosureTask] based on the given
4441 * [target] in the given [context].
4442 */
4443 static PropagateVariableTypesInLibraryClosureTask createTask(
4444 AnalysisContext context, AnalysisTarget target) {
4445 return new PropagateVariableTypesInLibraryClosureTask(context, target);
4446 }
4447 }
4448
4449 /**
4450 * An artificial task that does nothing except to force propagated types for
4451 * all propagable variables in the defining and part units of a library.
4452 */
4453 class PropagateVariableTypesInLibraryTask extends SourceBasedAnalysisTask {
4454 /**
4455 * The name of the [LIBRARY_ELEMENT6] input.
4456 */
4457 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
4458
4459 /**
4460 * The task descriptor describing this kind of task.
4461 */
4462 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4463 'PropagateVariableTypesInLibraryTask',
4464 createTask,
4465 buildInputs,
4466 <ResultDescriptor>[LIBRARY_ELEMENT7]);
4467
4468 PropagateVariableTypesInLibraryTask(
4469 InternalAnalysisContext context, AnalysisTarget target)
4470 : super(context, target);
4471
4472 @override
4473 TaskDescriptor get descriptor => DESCRIPTOR;
4474
4475 @override
4476 void internalPerform() {
4477 LibraryElement library = getRequiredInput(LIBRARY_INPUT);
4478 outputs[LIBRARY_ELEMENT7] = library;
4479 }
4480
4481 /**
4482 * Return a map from the names of the inputs of this kind of task to the task
4483 * input descriptors describing those inputs for a task with the
4484 * given [target].
4485 */
4486 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4487 Source source = target;
4488 return <String, TaskInput>{
4489 'propagatedVariableTypesInUnits':
4490 LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT8),
4491 LIBRARY_INPUT: LIBRARY_ELEMENT6.of(source),
4492 };
4493 }
4494
4495 /**
4496 * Create a [PropagateVariableTypesInLibraryTask] based on the given [target]
4497 * in the given [context].
4498 */
4499 static PropagateVariableTypesInLibraryTask createTask(
4500 AnalysisContext context, AnalysisTarget target) {
4501 return new PropagateVariableTypesInLibraryTask(context, target);
4502 }
4503 }
4504
4505 /**
4506 * A task that ensures that all of the propagable variables in a compilation
4507 * unit have had their type propagated.
4508 */
4509 class PropagateVariableTypesInUnitTask extends SourceBasedAnalysisTask {
4510 /**
4511 * The name of the input whose value is the [RESOLVED_UNIT7] for the
4512 * compilation unit.
4513 */
4514 static const String UNIT_INPUT = 'UNIT_INPUT';
4515
4516 /**
4517 * The task descriptor describing this kind of task.
4518 */
4519 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4520 'PropagateVariableTypesInUnitTask',
4521 createTask,
4522 buildInputs,
4523 <ResultDescriptor>[CREATED_RESOLVED_UNIT8, RESOLVED_UNIT8]);
4524
4525 PropagateVariableTypesInUnitTask(
4526 InternalAnalysisContext context, LibrarySpecificUnit unit)
4527 : super(context, unit);
4528
4529 @override
4530 TaskDescriptor get descriptor => DESCRIPTOR;
4531
4532 @override
4533 void internalPerform() {
4534 //
4535 // Prepare inputs.
4536 //
4537 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
4538 //
4539 // Record outputs. There is no additional work to be done at this time
4540 // because the work has implicitly been done by virtue of the task model
4541 // preparing all of the inputs.
4542 //
4543 outputs[RESOLVED_UNIT8] = unit;
4544 outputs[CREATED_RESOLVED_UNIT8] = true;
4545 }
4546
4547 /**
4548 * Return a map from the names of the inputs of this kind of task to the task
4549 * input descriptors describing those inputs for a task with the given
4550 * [target].
4551 */
4552 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4553 LibrarySpecificUnit unit = target;
4554 return <String, TaskInput>{
4555 'variables':
4556 PROPAGABLE_VARIABLES_IN_UNIT.of(unit).toListOf(PROPAGATED_VARIABLE),
4557 UNIT_INPUT: RESOLVED_UNIT7.of(unit)
4558 };
4559 }
4560
4561 /**
4562 * Create a [PropagateVariableTypesInUnitTask] based on the given [target]
4563 * in the given [context].
4564 */
4565 static PropagateVariableTypesInUnitTask createTask(
4566 AnalysisContext context, AnalysisTarget target) {
4567 return new PropagateVariableTypesInUnitTask(context, target);
4568 }
4569 }
4570
4571 /**
4572 * A task that computes the propagated type of an propagable variable and
4573 * stores it in the element model.
4574 */
4575 class PropagateVariableTypeTask extends InferStaticVariableTask {
4576 /**
4577 * The name of the [TYPE_PROVIDER] input.
4578 */
4579 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT';
4580
4581 /**
4582 * The name of the [RESOLVED_UNIT7] input.
4583 */
4584 static const String UNIT_INPUT = 'UNIT_INPUT';
4585
4586 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4587 'PropagateVariableTypeTask',
4588 createTask,
4589 buildInputs,
4590 <ResultDescriptor>[PROPAGATED_VARIABLE]);
4591
4592 PropagateVariableTypeTask(
4593 InternalAnalysisContext context, VariableElement variable)
4594 : super(context, variable);
4595
4596 @override
4597 TaskDescriptor get descriptor => DESCRIPTOR;
4598
4599 @override
4600 bool get handlesDependencyCycles => true;
4601
4602 @override
4603 void internalPerform() {
4604 //
4605 // Prepare inputs.
4606 //
4607 PropertyInducingElementImpl variable = target;
4608 TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT);
4609 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
4610
4611 // If we're not in a dependency cycle, and we have no type annotation,
4612 // re-resolve the right hand side and do propagation.
4613 if (dependencyCycle == null && variable.hasImplicitType) {
4614 VariableDeclaration declaration = getDeclaration(unit);
4615 //
4616 // Re-resolve the variable's initializer with the propagated types of
4617 // other variables.
4618 //
4619 Expression initializer = declaration.initializer;
4620 ResolutionContext resolutionContext = ResolutionContextBuilder.contextFor(
4621 initializer, AnalysisErrorListener.NULL_LISTENER);
4622 ResolverVisitor visitor = new ResolverVisitor(variable.library,
4623 variable.source, typeProvider, AnalysisErrorListener.NULL_LISTENER,
4624 nameScope: resolutionContext.scope);
4625 if (resolutionContext.enclosingClassDeclaration != null) {
4626 visitor.prepareToResolveMembersInClass(
4627 resolutionContext.enclosingClassDeclaration);
4628 }
4629 visitor.initForIncrementalResolution();
4630 initializer.accept(visitor);
4631 //
4632 // Record the type of the variable.
4633 //
4634 DartType newType = initializer.bestType;
4635 if (newType != null && !newType.isBottom && !newType.isDynamic) {
4636 variable.propagatedType = newType;
4637 }
4638 }
4639 //
4640 // Record outputs.
4641 //
4642 outputs[PROPAGATED_VARIABLE] = variable;
4643 }
4644
4645 /**
4646 * Return a map from the names of the inputs of this kind of task to the task
4647 * input descriptors describing those inputs for a task with the given
4648 * [target].
4649 */
4650 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4651 VariableElement variable = target;
4652 if (variable.library == null) {
4653 StringBuffer buffer = new StringBuffer();
4654 buffer.write(
4655 'PropagateVariableTypeTask building inputs for a variable with no libr ary. Variable name = "');
4656 buffer.write(variable.name);
4657 buffer.write('". Path = ');
4658 (variable as ElementImpl).appendPathTo(buffer);
4659 throw new AnalysisException(buffer.toString());
4660 }
4661 LibrarySpecificUnit unit =
4662 new LibrarySpecificUnit(variable.library.source, variable.source);
4663 return <String, TaskInput>{
4664 'dependencies': PROPAGABLE_VARIABLE_DEPENDENCIES
4665 .of(variable)
4666 .toListOf(PROPAGATED_VARIABLE),
4667 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
4668 UNIT_INPUT: RESOLVED_UNIT7.of(unit),
4669 };
4670 }
4671
4672 /**
4673 * Create a [PropagateVariableTypeTask] based on the given [target] in the
4674 * given [context].
4675 */
4676 static PropagateVariableTypeTask createTask(
4677 AnalysisContext context, AnalysisTarget target) {
4678 return new PropagateVariableTypeTask(context, target);
4679 }
4680 }
4681
4682 /**
4683 * A task that ensures that [LIBRARY_ELEMENT2] is ready for the target library 4260 * A task that ensures that [LIBRARY_ELEMENT2] is ready for the target library
4684 * source and its import/export closure. 4261 * source and its import/export closure.
4685 */ 4262 */
4686 class ReadyLibraryElement2Task extends SourceBasedAnalysisTask { 4263 class ReadyLibraryElement2Task extends SourceBasedAnalysisTask {
4687 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 4264 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4688 'ReadyLibraryElement2Task', 4265 'ReadyLibraryElement2Task',
4689 createTask, 4266 createTask,
4690 buildInputs, 4267 buildInputs,
4691 <ResultDescriptor>[READY_LIBRARY_ELEMENT2]); 4268 <ResultDescriptor>[READY_LIBRARY_ELEMENT2]);
4692 4269
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
4762 static ReadyLibraryElement5Task createTask( 4339 static ReadyLibraryElement5Task createTask(
4763 AnalysisContext context, AnalysisTarget target) { 4340 AnalysisContext context, AnalysisTarget target) {
4764 return new ReadyLibraryElement5Task(context, target); 4341 return new ReadyLibraryElement5Task(context, target);
4765 } 4342 }
4766 } 4343 }
4767 4344
4768 /** 4345 /**
4769 * A task that ensures that [LIBRARY_ELEMENT7] is ready for the target library 4346 * A task that ensures that [LIBRARY_ELEMENT7] is ready for the target library
4770 * source and its import/export closure. 4347 * source and its import/export closure.
4771 */ 4348 */
4772 class ReadyLibraryElement6Task extends SourceBasedAnalysisTask { 4349 class ReadyLibraryElement7Task extends SourceBasedAnalysisTask {
4773 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 4350 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4774 'ReadyLibraryElement6Task', 4351 'ReadyLibraryElement7Task',
4775 createTask, 4352 createTask,
4776 buildInputs, 4353 buildInputs,
4777 <ResultDescriptor>[READY_LIBRARY_ELEMENT7]); 4354 <ResultDescriptor>[READY_LIBRARY_ELEMENT7]);
4778 4355
4779 ReadyLibraryElement6Task( 4356 ReadyLibraryElement7Task(
4780 InternalAnalysisContext context, AnalysisTarget target) 4357 InternalAnalysisContext context, AnalysisTarget target)
4781 : super(context, target); 4358 : super(context, target);
4782 4359
4783 @override 4360 @override
4784 TaskDescriptor get descriptor => DESCRIPTOR; 4361 TaskDescriptor get descriptor => DESCRIPTOR;
4785 4362
4786 @override 4363 @override
4787 bool get handlesDependencyCycles => true; 4364 bool get handlesDependencyCycles => true;
4788 4365
4789 @override 4366 @override
4790 void internalPerform() { 4367 void internalPerform() {
4791 outputs[READY_LIBRARY_ELEMENT7] = true; 4368 outputs[READY_LIBRARY_ELEMENT7] = true;
4792 } 4369 }
4793 4370
4794 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 4371 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4795 Source source = target; 4372 Source source = target;
4796 return <String, TaskInput>{ 4373 return <String, TaskInput>{
4797 'thisLibraryElementReady': LIBRARY_ELEMENT7.of(source), 4374 'thisLibraryElementReady': LIBRARY_ELEMENT7.of(source),
4798 'directlyImportedLibrariesReady': 4375 'directlyImportedLibrariesReady':
4799 IMPORTED_LIBRARIES.of(source).toListOf(READY_LIBRARY_ELEMENT7), 4376 IMPORTED_LIBRARIES.of(source).toListOf(READY_LIBRARY_ELEMENT7),
4800 'directlyExportedLibrariesReady': 4377 'directlyExportedLibrariesReady':
4801 EXPORTED_LIBRARIES.of(source).toListOf(READY_LIBRARY_ELEMENT7), 4378 EXPORTED_LIBRARIES.of(source).toListOf(READY_LIBRARY_ELEMENT7),
4802 }; 4379 };
4803 } 4380 }
4804 4381
4805 static ReadyLibraryElement6Task createTask( 4382 static ReadyLibraryElement7Task createTask(
4806 AnalysisContext context, AnalysisTarget target) { 4383 AnalysisContext context, AnalysisTarget target) {
4807 return new ReadyLibraryElement6Task(context, target); 4384 return new ReadyLibraryElement7Task(context, target);
4808 } 4385 }
4809 } 4386 }
4810 4387
4811 /** 4388 /**
4812 * A task that ensures that [RESOLVED_UNIT] is ready for every unit of the 4389 * A task that ensures that [RESOLVED_UNIT] is ready for every unit of the
4813 * target library source and its import/export closure. 4390 * target library source and its import/export closure.
4814 */ 4391 */
4815 class ReadyResolvedUnitTask extends SourceBasedAnalysisTask { 4392 class ReadyResolvedUnitTask extends SourceBasedAnalysisTask {
4816 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 4393 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4817 'ReadyResolvedUnitTask', 4394 'ReadyResolvedUnitTask',
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
5286 CompilationUnitElementImpl unit = target 4863 CompilationUnitElementImpl unit = target
5287 .getAncestor((Element element) => element is CompilationUnitElement); 4864 .getAncestor((Element element) => element is CompilationUnitElement);
5288 librarySource = unit.librarySource; 4865 librarySource = unit.librarySource;
5289 } else if (target is ElementAnnotationImpl) { 4866 } else if (target is ElementAnnotationImpl) {
5290 librarySource = target.librarySource; 4867 librarySource = target.librarySource;
5291 } else { 4868 } else {
5292 throw new AnalysisException( 4869 throw new AnalysisException(
5293 'Cannot build inputs for a ${target.runtimeType}'); 4870 'Cannot build inputs for a ${target.runtimeType}');
5294 } 4871 }
5295 return <String, TaskInput>{ 4872 return <String, TaskInput>{
5296 'createdResolvedUnit': CREATED_RESOLVED_UNIT12 4873 'createdResolvedUnit': CREATED_RESOLVED_UNIT11
5297 .of(new LibrarySpecificUnit(librarySource, target.source)) 4874 .of(new LibrarySpecificUnit(librarySource, target.source))
5298 }; 4875 };
5299 } 4876 }
5300 4877
5301 /** 4878 /**
5302 * Create a [ResolveConstantExpressionTask] based on the given [target] in 4879 * Create a [ResolveConstantExpressionTask] based on the given [target] in
5303 * the given [context]. 4880 * the given [context].
5304 */ 4881 */
5305 static ResolveConstantExpressionTask createTask( 4882 static ResolveConstantExpressionTask createTask(
5306 AnalysisContext context, AnalysisTarget target) { 4883 AnalysisContext context, AnalysisTarget target) {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
5376 * Create a [ResolveDirectiveElementsTask] based on the given [target] in 4953 * Create a [ResolveDirectiveElementsTask] based on the given [target] in
5377 * the given [context]. 4954 * the given [context].
5378 */ 4955 */
5379 static ResolveDirectiveElementsTask createTask( 4956 static ResolveDirectiveElementsTask createTask(
5380 AnalysisContext context, AnalysisTarget target) { 4957 AnalysisContext context, AnalysisTarget target) {
5381 return new ResolveDirectiveElementsTask(context, target); 4958 return new ResolveDirectiveElementsTask(context, target);
5382 } 4959 }
5383 } 4960 }
5384 4961
5385 /** 4962 /**
4963 * An artificial task that does nothing except to force [LIBRARY_ELEMENT7] for
4964 * the target library and its import/export closure.
4965 */
4966 class ResolvedUnit7InLibraryClosureTask extends SourceBasedAnalysisTask {
4967 /**
4968 * The name of the [LIBRARY_ELEMENT7] input.
4969 */
4970 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
4971
4972 /**
4973 * The task descriptor describing this kind of task.
4974 */
4975 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
4976 'ResolvedUnit7InLibraryClosureTask',
4977 createTask,
4978 buildInputs,
4979 <ResultDescriptor>[LIBRARY_ELEMENT8]);
4980
4981 ResolvedUnit7InLibraryClosureTask(
4982 InternalAnalysisContext context, AnalysisTarget target)
4983 : super(context, target);
4984
4985 @override
4986 TaskDescriptor get descriptor => DESCRIPTOR;
4987
4988 @override
4989 void internalPerform() {
4990 LibraryElement library = getRequiredInput(LIBRARY_INPUT);
4991 outputs[LIBRARY_ELEMENT8] = library;
4992 }
4993
4994 /**
4995 * Return a map from the names of the inputs of this kind of task to the task
4996 * input descriptors describing those inputs for a task with the
4997 * given [target].
4998 */
4999 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
5000 Source source = target;
5001 return <String, TaskInput>{
5002 'readyForClosure': READY_LIBRARY_ELEMENT7.of(source),
5003 LIBRARY_INPUT: LIBRARY_ELEMENT7.of(source),
5004 };
5005 }
5006
5007 /**
5008 * Create a [ResolvedUnit7InLibraryClosureTask] based on the given
5009 * [target] in the given [context].
5010 */
5011 static ResolvedUnit7InLibraryClosureTask createTask(
5012 AnalysisContext context, AnalysisTarget target) {
5013 return new ResolvedUnit7InLibraryClosureTask(context, target);
5014 }
5015 }
5016
5017 /**
5018 * An artificial task that does nothing except to force [LIBRARY_ELEMENT6] and
5019 * [RESOLVED_UNIT7] in the defining and part units of a library.
5020 */
5021 class ResolvedUnit7InLibraryTask extends SourceBasedAnalysisTask {
5022 /**
5023 * The name of the [LIBRARY_ELEMENT6] input.
5024 */
5025 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
5026
5027 /**
5028 * The task descriptor describing this kind of task.
5029 */
5030 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
5031 'ResolvedUnit7InLibraryTask',
5032 createTask,
5033 buildInputs,
5034 <ResultDescriptor>[LIBRARY_ELEMENT7]);
5035
5036 ResolvedUnit7InLibraryTask(
5037 InternalAnalysisContext context, AnalysisTarget target)
5038 : super(context, target);
5039
5040 @override
5041 TaskDescriptor get descriptor => DESCRIPTOR;
5042
5043 @override
5044 void internalPerform() {
5045 LibraryElement library = getRequiredInput(LIBRARY_INPUT);
5046 outputs[LIBRARY_ELEMENT7] = library;
5047 }
5048
5049 /**
5050 * Return a map from the names of the inputs of this kind of task to the task
5051 * input descriptors describing those inputs for a task with the
5052 * given [target].
5053 */
5054 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
5055 Source source = target;
5056 return <String, TaskInput>{
5057 'resolvedUnits':
5058 LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT7),
5059 LIBRARY_INPUT: LIBRARY_ELEMENT6.of(source),
5060 };
5061 }
5062
5063 /**
5064 * Create a [ResolvedUnit7InLibraryTask] based on the given [target]
5065 * in the given [context].
5066 */
5067 static ResolvedUnit7InLibraryTask createTask(
5068 AnalysisContext context, AnalysisTarget target) {
5069 return new ResolvedUnit7InLibraryTask(context, target);
5070 }
5071 }
5072
5073 /**
5386 * A task that ensures that all of the inferable instance members in a 5074 * A task that ensures that all of the inferable instance members in a
5387 * compilation unit have had their right hand sides re-resolved 5075 * compilation unit have had their right hand sides re-resolved
5388 */ 5076 */
5389 class ResolveInstanceFieldsInUnitTask extends SourceBasedAnalysisTask { 5077 class ResolveInstanceFieldsInUnitTask extends SourceBasedAnalysisTask {
5390 /** 5078 /**
5391 * The name of the [LIBRARY_ELEMENT6] input. 5079 * The name of the [LIBRARY_ELEMENT6] input.
5392 */ 5080 */
5393 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; 5081 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
5394 5082
5395 /** 5083 /**
5396 * The name of the [TYPE_PROVIDER] input. 5084 * The name of the [TYPE_PROVIDER] input.
5397 */ 5085 */
5398 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT'; 5086 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT';
5399 5087
5400 /** 5088 /**
5401 * The name of the input whose value is the [RESOLVED_UNIT9] for the 5089 * The name of the input whose value is the [RESOLVED_UNIT8] for the
5402 * compilation unit. 5090 * compilation unit.
5403 */ 5091 */
5404 static const String UNIT_INPUT = 'UNIT_INPUT'; 5092 static const String UNIT_INPUT = 'UNIT_INPUT';
5405 5093
5406 /** 5094 /**
5407 * The task descriptor describing this kind of task. 5095 * The task descriptor describing this kind of task.
5408 */ 5096 */
5409 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 5097 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
5410 'ResolveInstanceFieldsInUnitTask', 5098 'ResolveInstanceFieldsInUnitTask',
5411 createTask, 5099 createTask,
5412 buildInputs, 5100 buildInputs,
5413 <ResultDescriptor>[CREATED_RESOLVED_UNIT10, RESOLVED_UNIT10]); 5101 <ResultDescriptor>[CREATED_RESOLVED_UNIT9, RESOLVED_UNIT9]);
5414 5102
5415 /** 5103 /**
5416 * Initialize a newly created task to build a library element for the given 5104 * Initialize a newly created task to build a library element for the given
5417 * [unit] in the given [context]. 5105 * [unit] in the given [context].
5418 */ 5106 */
5419 ResolveInstanceFieldsInUnitTask( 5107 ResolveInstanceFieldsInUnitTask(
5420 InternalAnalysisContext context, LibrarySpecificUnit unit) 5108 InternalAnalysisContext context, LibrarySpecificUnit unit)
5421 : super(context, unit); 5109 : super(context, unit);
5422 5110
5423 @override 5111 @override
(...skipping 16 matching lines...) Expand all
5440 InstanceFieldResolverVisitor visitor = new InstanceFieldResolverVisitor( 5128 InstanceFieldResolverVisitor visitor = new InstanceFieldResolverVisitor(
5441 libraryElement, 5129 libraryElement,
5442 unitElement.source, 5130 unitElement.source,
5443 typeProvider, 5131 typeProvider,
5444 AnalysisErrorListener.NULL_LISTENER); 5132 AnalysisErrorListener.NULL_LISTENER);
5445 visitor.resolveCompilationUnit(unit); 5133 visitor.resolveCompilationUnit(unit);
5446 } 5134 }
5447 // 5135 //
5448 // Record outputs. 5136 // Record outputs.
5449 // 5137 //
5450 outputs[RESOLVED_UNIT10] = unit; 5138 outputs[RESOLVED_UNIT9] = unit;
5451 outputs[CREATED_RESOLVED_UNIT10] = true; 5139 outputs[CREATED_RESOLVED_UNIT9] = true;
5452 } 5140 }
5453 5141
5454 /** 5142 /**
5455 * Return a map from the names of the inputs of this kind of task to the task 5143 * Return a map from the names of the inputs of this kind of task to the task
5456 * input descriptors describing those inputs for a task with the given 5144 * input descriptors describing those inputs for a task with the given
5457 * [libSource]. 5145 * [libSource].
5458 */ 5146 */
5459 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 5147 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
5460 LibrarySpecificUnit unit = target; 5148 LibrarySpecificUnit unit = target;
5461 return <String, TaskInput>{ 5149 return <String, TaskInput>{
5462 UNIT_INPUT: RESOLVED_UNIT9.of(unit), 5150 UNIT_INPUT: RESOLVED_UNIT8.of(unit),
5463 LIBRARY_INPUT: LIBRARY_ELEMENT6.of(unit.library), 5151 LIBRARY_INPUT: LIBRARY_ELEMENT6.of(unit.library),
5464 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), 5152 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
5465 // In strong mode, add additional dependencies to enforce inference 5153 // In strong mode, add additional dependencies to enforce inference
5466 // ordering. 5154 // ordering.
5467 5155
5468 // Require that static variable inference be complete for all units in 5156 // Require that static variable inference be complete for all units in
5469 // the current library cycle. 5157 // the current library cycle.
5470 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit.library).toList( 5158 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit.library).toList(
5471 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT9.of( 5159 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT8.of(
5472 new LibrarySpecificUnit( 5160 new LibrarySpecificUnit(
5473 (unit as CompilationUnitElementImpl).librarySource, 5161 (unit as CompilationUnitElementImpl).librarySource,
5474 unit.source))), 5162 unit.source))),
5475 // Require that full inference be complete for all dependencies of the 5163 // Require that full inference be complete for all dependencies of the
5476 // current library cycle. 5164 // current library cycle.
5477 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList( 5165 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit.library).toList(
5478 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT11.of( 5166 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT10.of(
5479 new LibrarySpecificUnit( 5167 new LibrarySpecificUnit(
5480 (unit as CompilationUnitElementImpl).librarySource, 5168 (unit as CompilationUnitElementImpl).librarySource,
5481 unit.source))) 5169 unit.source)))
5482 }; 5170 };
5483 } 5171 }
5484 5172
5485 /** 5173 /**
5486 * Create a [ResolveInstanceFieldsInUnitTask] based on the given [target] in 5174 * Create a [ResolveInstanceFieldsInUnitTask] based on the given [target] in
5487 * the given [context]. 5175 * the given [context].
5488 */ 5176 */
5489 static ResolveInstanceFieldsInUnitTask createTask( 5177 static ResolveInstanceFieldsInUnitTask createTask(
5490 AnalysisContext context, AnalysisTarget target) { 5178 AnalysisContext context, AnalysisTarget target) {
5491 return new ResolveInstanceFieldsInUnitTask(context, target); 5179 return new ResolveInstanceFieldsInUnitTask(context, target);
5492 } 5180 }
5493 } 5181 }
5494 5182
5495 /** 5183 /**
5496 * A task that finishes resolution by requesting [RESOLVED_UNIT12] for every 5184 * A task that finishes resolution by requesting [RESOLVED_UNIT11] for every
5497 * unit in the libraries closure and produces [LIBRARY_ELEMENT9]. 5185 * unit in the libraries closure and produces [LIBRARY_ELEMENT9].
5498 */ 5186 */
5499 class ResolveLibraryReferencesTask extends SourceBasedAnalysisTask { 5187 class ResolveLibraryReferencesTask extends SourceBasedAnalysisTask {
5500 /** 5188 /**
5501 * The name of the [LIBRARY_ELEMENT8] input. 5189 * The name of the [LIBRARY_ELEMENT8] input.
5502 */ 5190 */
5503 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; 5191 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
5504 5192
5505 /** 5193 /**
5506 * The task descriptor describing this kind of task. 5194 * The task descriptor describing this kind of task.
(...skipping 20 matching lines...) Expand all
5527 /** 5215 /**
5528 * Return a map from the names of the inputs of this kind of task to the task 5216 * Return a map from the names of the inputs of this kind of task to the task
5529 * input descriptors describing those inputs for a task with the 5217 * input descriptors describing those inputs for a task with the
5530 * given [target]. 5218 * given [target].
5531 */ 5219 */
5532 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 5220 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
5533 Source source = target; 5221 Source source = target;
5534 return <String, TaskInput>{ 5222 return <String, TaskInput>{
5535 LIBRARY_INPUT: LIBRARY_ELEMENT8.of(source), 5223 LIBRARY_INPUT: LIBRARY_ELEMENT8.of(source),
5536 'resolvedUnits': 5224 'resolvedUnits':
5537 LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT12), 5225 LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT11),
5538 }; 5226 };
5539 } 5227 }
5540 5228
5541 /** 5229 /**
5542 * Create a [ResolveLibraryReferencesTask] based on the given [target] in 5230 * Create a [ResolveLibraryReferencesTask] based on the given [target] in
5543 * the given [context]. 5231 * the given [context].
5544 */ 5232 */
5545 static ResolveLibraryReferencesTask createTask( 5233 static ResolveLibraryReferencesTask createTask(
5546 AnalysisContext context, AnalysisTarget target) { 5234 AnalysisContext context, AnalysisTarget target) {
5547 return new ResolveLibraryReferencesTask(context, target); 5235 return new ResolveLibraryReferencesTask(context, target);
5548 } 5236 }
5549 } 5237 }
5550 5238
5551 /** 5239 /**
5552 * A task that finishes resolution by requesting [RESOLVED_UNIT13] for every 5240 * A task that finishes resolution by requesting [RESOLVED_UNIT12] for every
5553 * unit in the libraries closure and produces [LIBRARY_ELEMENT]. 5241 * unit in the libraries closure and produces [LIBRARY_ELEMENT].
5554 */ 5242 */
5555 class ResolveLibraryTask extends SourceBasedAnalysisTask { 5243 class ResolveLibraryTask extends SourceBasedAnalysisTask {
5556 /** 5244 /**
5557 * The name of the [LIBRARY_ELEMENT9] input. 5245 * The name of the [LIBRARY_ELEMENT9] input.
5558 */ 5246 */
5559 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; 5247 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
5560 5248
5561 /** 5249 /**
5562 * The name of the list of [RESOLVED_UNIT13] input. 5250 * The name of the list of [RESOLVED_UNIT12] input.
5563 */ 5251 */
5564 static const String UNITS_INPUT = 'UNITS_INPUT'; 5252 static const String UNITS_INPUT = 'UNITS_INPUT';
5565 5253
5566 /** 5254 /**
5567 * The task descriptor describing this kind of task. 5255 * The task descriptor describing this kind of task.
5568 */ 5256 */
5569 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 5257 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
5570 'ResolveLibraryTask', 5258 'ResolveLibraryTask',
5571 createTask, 5259 createTask,
5572 buildInputs, 5260 buildInputs,
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
5852 * The name of the input whose value is the defining [LIBRARY_ELEMENT8]. 5540 * The name of the input whose value is the defining [LIBRARY_ELEMENT8].
5853 */ 5541 */
5854 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; 5542 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
5855 5543
5856 /** 5544 /**
5857 * The name of the [TYPE_PROVIDER] input. 5545 * The name of the [TYPE_PROVIDER] input.
5858 */ 5546 */
5859 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT'; 5547 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT';
5860 5548
5861 /** 5549 /**
5862 * The name of the [RESOLVED_UNIT11] input. 5550 * The name of the [RESOLVED_UNIT10] input.
5863 */ 5551 */
5864 static const String UNIT_INPUT = 'UNIT_INPUT'; 5552 static const String UNIT_INPUT = 'UNIT_INPUT';
5865 5553
5866 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 5554 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
5867 'ResolveUnitTask', createTask, buildInputs, <ResultDescriptor>[ 5555 'ResolveUnitTask', createTask, buildInputs, <ResultDescriptor>[
5868 CONSTANT_EXPRESSIONS_DEPENDENCIES, 5556 CONSTANT_EXPRESSIONS_DEPENDENCIES,
5869 RESOLVE_UNIT_ERRORS, 5557 RESOLVE_UNIT_ERRORS,
5870 CREATED_RESOLVED_UNIT12, 5558 CREATED_RESOLVED_UNIT11,
5871 RESOLVED_UNIT12 5559 RESOLVED_UNIT11
5872 ]); 5560 ]);
5873 5561
5874 ResolveUnitTask( 5562 ResolveUnitTask(
5875 InternalAnalysisContext context, LibrarySpecificUnit compilationUnit) 5563 InternalAnalysisContext context, LibrarySpecificUnit compilationUnit)
5876 : super(context, compilationUnit); 5564 : super(context, compilationUnit);
5877 5565
5878 @override 5566 @override
5879 TaskDescriptor get descriptor => DESCRIPTOR; 5567 TaskDescriptor get descriptor => DESCRIPTOR;
5880 5568
5881 @override 5569 @override
(...skipping 25 matching lines...) Expand all
5907 } 5595 }
5908 // 5596 //
5909 // Record outputs. 5597 // Record outputs.
5910 // 5598 //
5911 // TODO(brianwilkerson) This task modifies the element model (by copying the 5599 // TODO(brianwilkerson) This task modifies the element model (by copying the
5912 // AST's for constructor initializers into it) but does not produce an 5600 // AST's for constructor initializers into it) but does not produce an
5913 // updated version of the element model. 5601 // updated version of the element model.
5914 // 5602 //
5915 outputs[CONSTANT_EXPRESSIONS_DEPENDENCIES] = constExprDependencies; 5603 outputs[CONSTANT_EXPRESSIONS_DEPENDENCIES] = constExprDependencies;
5916 outputs[RESOLVE_UNIT_ERRORS] = getTargetSourceErrors(errorListener, target); 5604 outputs[RESOLVE_UNIT_ERRORS] = getTargetSourceErrors(errorListener, target);
5917 outputs[RESOLVED_UNIT12] = unit; 5605 outputs[RESOLVED_UNIT11] = unit;
5918 outputs[CREATED_RESOLVED_UNIT12] = true; 5606 outputs[CREATED_RESOLVED_UNIT11] = true;
5919 } 5607 }
5920 5608
5921 /** 5609 /**
5922 * Return a map from the names of the inputs of this kind of task to the task 5610 * Return a map from the names of the inputs of this kind of task to the task
5923 * input descriptors describing those inputs for a task with the given 5611 * input descriptors describing those inputs for a task with the given
5924 * [target]. 5612 * [target].
5925 */ 5613 */
5926 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 5614 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
5927 LibrarySpecificUnit unit = target; 5615 LibrarySpecificUnit unit = target;
5928 return <String, TaskInput>{ 5616 return <String, TaskInput>{
5929 LIBRARY_INPUT: LIBRARY_ELEMENT8.of(unit.library), 5617 LIBRARY_INPUT: LIBRARY_ELEMENT8.of(unit.library),
5930 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), 5618 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
5931 UNIT_INPUT: RESOLVED_UNIT11.of(unit), 5619 UNIT_INPUT: RESOLVED_UNIT10.of(unit),
5932 // In strong mode, add additional dependencies to enforce inference 5620 // In strong mode, add additional dependencies to enforce inference
5933 // ordering. 5621 // ordering.
5934 5622
5935 // Require that inference be complete for all units in the 5623 // Require that inference be complete for all units in the
5936 // current library cycle. 5624 // current library cycle.
5937 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit.library).toList( 5625 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit.library).toList(
5938 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT11.of( 5626 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT10.of(
5939 new LibrarySpecificUnit( 5627 new LibrarySpecificUnit(
5940 (unit as CompilationUnitElementImpl).librarySource, 5628 (unit as CompilationUnitElementImpl).librarySource,
5941 unit.source))) 5629 unit.source)))
5942 }; 5630 };
5943 } 5631 }
5944 5632
5945 /** 5633 /**
5946 * Create a [ResolveUnitTask] based on the given [target] in 5634 * Create a [ResolveUnitTask] based on the given [target] in
5947 * the given [context]. 5635 * the given [context].
5948 */ 5636 */
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
6283 return TaskSuitability.NONE; 5971 return TaskSuitability.NONE;
6284 } 5972 }
6285 } 5973 }
6286 5974
6287 /** 5975 /**
6288 * A task that builds [STRONG_MODE_ERRORS] for a unit. Also builds 5976 * A task that builds [STRONG_MODE_ERRORS] for a unit. Also builds
6289 * [RESOLVED_UNIT] for a unit. 5977 * [RESOLVED_UNIT] for a unit.
6290 */ 5978 */
6291 class StrongModeVerifyUnitTask extends SourceBasedAnalysisTask { 5979 class StrongModeVerifyUnitTask extends SourceBasedAnalysisTask {
6292 /** 5980 /**
6293 * The name of the [RESOLVED_UNIT13] input. 5981 * The name of the [RESOLVED_UNIT12] input.
6294 */ 5982 */
6295 static const String UNIT_INPUT = 'UNIT_INPUT'; 5983 static const String UNIT_INPUT = 'UNIT_INPUT';
6296 5984
6297 /** 5985 /**
6298 * The name of the [TYPE_PROVIDER] input. 5986 * The name of the [TYPE_PROVIDER] input.
6299 */ 5987 */
6300 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT'; 5988 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT';
6301 5989
6302 /** 5990 /**
6303 * The task descriptor describing this kind of task. 5991 * The task descriptor describing this kind of task.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
6344 } 6032 }
6345 6033
6346 /** 6034 /**
6347 * Return a map from the names of the inputs of this kind of task to the task 6035 * Return a map from the names of the inputs of this kind of task to the task
6348 * input descriptors describing those inputs for a task with the 6036 * input descriptors describing those inputs for a task with the
6349 * given [target]. 6037 * given [target].
6350 */ 6038 */
6351 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 6039 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
6352 LibrarySpecificUnit unit = target; 6040 LibrarySpecificUnit unit = target;
6353 return <String, TaskInput>{ 6041 return <String, TaskInput>{
6354 UNIT_INPUT: RESOLVED_UNIT13.of(unit), 6042 UNIT_INPUT: RESOLVED_UNIT12.of(unit),
6355 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), 6043 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
6356 }; 6044 };
6357 } 6045 }
6358 6046
6359 /** 6047 /**
6360 * Create a [StrongModeVerifyUnitTask] based on the given [target] in 6048 * Create a [StrongModeVerifyUnitTask] based on the given [target] in
6361 * the given [context]. 6049 * the given [context].
6362 */ 6050 */
6363 static StrongModeVerifyUnitTask createTask( 6051 static StrongModeVerifyUnitTask createTask(
6364 AnalysisContext context, AnalysisTarget target) { 6052 AnalysisContext context, AnalysisTarget target) {
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
6671 6359
6672 @override 6360 @override
6673 bool moveNext() { 6361 bool moveNext() {
6674 if (_newSources.isEmpty) { 6362 if (_newSources.isEmpty) {
6675 return false; 6363 return false;
6676 } 6364 }
6677 currentTarget = _newSources.removeLast(); 6365 currentTarget = _newSources.removeLast();
6678 return true; 6366 return true;
6679 } 6367 }
6680 } 6368 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/package_bundle_reader.dart ('k') | pkg/analyzer/test/generated/incremental_resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698