OLD | NEW |
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 27 matching lines...) Expand all Loading... |
38 import 'package:analyzer/src/task/model.dart'; | 38 import 'package:analyzer/src/task/model.dart'; |
39 import 'package:analyzer/src/task/strong/checker.dart'; | 39 import 'package:analyzer/src/task/strong/checker.dart'; |
40 import 'package:analyzer/src/task/strong_mode.dart'; | 40 import 'package:analyzer/src/task/strong_mode.dart'; |
41 import 'package:analyzer/task/dart.dart'; | 41 import 'package:analyzer/task/dart.dart'; |
42 import 'package:analyzer/task/general.dart'; | 42 import 'package:analyzer/task/general.dart'; |
43 import 'package:analyzer/task/model.dart'; | 43 import 'package:analyzer/task/model.dart'; |
44 | 44 |
45 /** | 45 /** |
46 * The [ResultCachingPolicy] for ASTs. | 46 * The [ResultCachingPolicy] for ASTs. |
47 */ | 47 */ |
48 const ResultCachingPolicy AST_CACHING_POLICY = | 48 const ResultCachingPolicy<CompilationUnit> AST_CACHING_POLICY = |
49 const SimpleResultCachingPolicy(16384, 16384); | 49 const SimpleResultCachingPolicy(16384, 16384); |
50 | 50 |
51 /** | 51 /** |
52 * The [ResultCachingPolicy] for [Element]s. | 52 * The [ResultCachingPolicy] for [Element]s. |
53 */ | 53 */ |
54 const ResultCachingPolicy ELEMENT_CACHING_POLICY = | 54 const ResultCachingPolicy ELEMENT_CACHING_POLICY = |
55 const SimpleResultCachingPolicy(-1, -1); | 55 const SimpleResultCachingPolicy(-1, -1); |
56 | 56 |
57 /** | 57 /** |
58 * The [ResultCachingPolicy] for [TOKEN_STREAM]. | 58 * The [ResultCachingPolicy] for [TOKEN_STREAM]. |
59 */ | 59 */ |
60 const ResultCachingPolicy TOKEN_STREAM_CACHING_POLICY = | 60 const ResultCachingPolicy<Token> TOKEN_STREAM_CACHING_POLICY = |
61 const SimpleResultCachingPolicy(1, 1); | 61 const SimpleResultCachingPolicy(1, 1); |
62 | 62 |
63 /** | 63 /** |
64 * The errors produced while resolving a library directives. | 64 * The errors produced while resolving a library directives. |
65 * | 65 * |
66 * The list will be empty if there were no errors, but will not be `null`. | 66 * The list will be empty if there were no errors, but will not be `null`. |
67 * | 67 * |
68 * The result is only available for [Source]s representing a library. | 68 * The result is only available for [Source]s representing a library. |
69 */ | 69 */ |
70 final ListResultDescriptor<AnalysisError> BUILD_DIRECTIVES_ERRORS = | 70 final ListResultDescriptor<AnalysisError> BUILD_DIRECTIVES_ERRORS = |
(...skipping 1908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1979 // did not cause it to be erased). In summary, task model dependencies | 1979 // did not cause it to be erased). In summary, task model dependencies |
1980 // on the import/export source closure ensure that this method will be | 1980 // on the import/export source closure ensure that this method will be |
1981 // re-run if anything reachable from this target has been invalidated, | 1981 // re-run if anything reachable from this target has been invalidated, |
1982 // and the invalidation code (invalidateLibraryCycles) will ensure that | 1982 // and the invalidation code (invalidateLibraryCycles) will ensure that |
1983 // element model results will be re-used here only if they are still valid. | 1983 // element model results will be re-used here only if they are still valid. |
1984 if (context.analysisOptions.strongMode) { | 1984 if (context.analysisOptions.strongMode) { |
1985 LibraryElement library = getRequiredInput(LIBRARY_ELEMENT_INPUT); | 1985 LibraryElement library = getRequiredInput(LIBRARY_ELEMENT_INPUT); |
1986 List<LibraryElement> component = library.libraryCycle; | 1986 List<LibraryElement> component = library.libraryCycle; |
1987 Set<LibraryElement> filter = new Set<LibraryElement>.from(component); | 1987 Set<LibraryElement> filter = new Set<LibraryElement>.from(component); |
1988 Set<CompilationUnitElement> deps = new Set<CompilationUnitElement>(); | 1988 Set<CompilationUnitElement> deps = new Set<CompilationUnitElement>(); |
1989 void addLibrary(l) { | 1989 void addLibrary(LibraryElement l) { |
1990 if (!filter.contains(l)) { | 1990 if (!filter.contains(l)) { |
1991 deps.addAll(l.units); | 1991 deps.addAll(l.units); |
1992 } | 1992 } |
1993 } | 1993 } |
1994 for (LibraryElement l in component) { | 1994 for (LibraryElement l in component) { |
1995 l.importedLibraries.forEach(addLibrary); | 1995 l.importedLibraries.forEach(addLibrary); |
1996 l.exportedLibraries.forEach(addLibrary); | 1996 l.exportedLibraries.forEach(addLibrary); |
1997 } | 1997 } |
1998 // | 1998 // |
1999 // Record outputs. | 1999 // Record outputs. |
(...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2926 LibrarySpecificUnit unit = target; | 2926 LibrarySpecificUnit unit = target; |
2927 return <String, TaskInput>{ | 2927 return <String, TaskInput>{ |
2928 UNIT_INPUT: RESOLVED_UNIT8.of(unit), | 2928 UNIT_INPUT: RESOLVED_UNIT8.of(unit), |
2929 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), | 2929 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), |
2930 // In strong mode, add additional dependencies to enforce inference | 2930 // In strong mode, add additional dependencies to enforce inference |
2931 // ordering. | 2931 // ordering. |
2932 | 2932 |
2933 // Require that field re-resolution be complete for all units in the | 2933 // Require that field re-resolution be complete for all units in the |
2934 // current library cycle. | 2934 // current library cycle. |
2935 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit).toList( | 2935 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit).toList( |
2936 (CompilationUnitElementImpl unit) => CREATED_RESOLVED_UNIT8 | 2936 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT8.of( |
2937 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))), | 2937 new LibrarySpecificUnit( |
| 2938 (unit as CompilationUnitElementImpl).librarySource, |
| 2939 unit.source))), |
2938 // Require that full inference be complete for all dependencies of the | 2940 // Require that full inference be complete for all dependencies of the |
2939 // current library cycle. | 2941 // current library cycle. |
2940 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( | 2942 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( |
2941 (CompilationUnitElementImpl unit) => CREATED_RESOLVED_UNIT9 | 2943 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT9.of( |
2942 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))) | 2944 new LibrarySpecificUnit( |
| 2945 (unit as CompilationUnitElementImpl).librarySource, |
| 2946 unit.source))) |
2943 }; | 2947 }; |
2944 } | 2948 } |
2945 | 2949 |
2946 /** | 2950 /** |
2947 * Create a [InferInstanceMembersInUnitTask] based on the given [target] in | 2951 * Create a [InferInstanceMembersInUnitTask] based on the given [target] in |
2948 * the given [context]. | 2952 * the given [context]. |
2949 */ | 2953 */ |
2950 static InferInstanceMembersInUnitTask createTask( | 2954 static InferInstanceMembersInUnitTask createTask( |
2951 AnalysisContext context, AnalysisTarget target) { | 2955 AnalysisContext context, AnalysisTarget target) { |
2952 return new InferInstanceMembersInUnitTask(context, target); | 2956 return new InferInstanceMembersInUnitTask(context, target); |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3186 .of(variable) | 3190 .of(variable) |
3187 .toListOf(INFERRED_STATIC_VARIABLE), | 3191 .toListOf(INFERRED_STATIC_VARIABLE), |
3188 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), | 3192 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), |
3189 UNIT_INPUT: RESOLVED_UNIT6.of(unit), | 3193 UNIT_INPUT: RESOLVED_UNIT6.of(unit), |
3190 // In strong mode, add additional dependencies to enforce inference | 3194 // In strong mode, add additional dependencies to enforce inference |
3191 // ordering. | 3195 // ordering. |
3192 | 3196 |
3193 // Require that full inference be complete for all dependencies of the | 3197 // Require that full inference be complete for all dependencies of the |
3194 // current library cycle. | 3198 // current library cycle. |
3195 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( | 3199 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( |
3196 (CompilationUnitElementImpl unit) => CREATED_RESOLVED_UNIT9 | 3200 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT9.of( |
3197 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))) | 3201 new LibrarySpecificUnit( |
| 3202 (unit as CompilationUnitElementImpl).librarySource, |
| 3203 unit.source))) |
3198 }; | 3204 }; |
3199 } | 3205 } |
3200 | 3206 |
3201 /** | 3207 /** |
3202 * Create a [InferStaticVariableTypeTask] based on the given [target] in the | 3208 * Create a [InferStaticVariableTypeTask] based on the given [target] in the |
3203 * given [context]. | 3209 * given [context]. |
3204 */ | 3210 */ |
3205 static InferStaticVariableTypeTask createTask( | 3211 static InferStaticVariableTypeTask createTask( |
3206 AnalysisContext context, AnalysisTarget target) { | 3212 AnalysisContext context, AnalysisTarget target) { |
3207 return new InferStaticVariableTypeTask(context, target); | 3213 return new InferStaticVariableTypeTask(context, target); |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3668 'fullyBuiltLibraryElements': READY_LIBRARY_ELEMENT5.of(unit.library), | 3674 'fullyBuiltLibraryElements': READY_LIBRARY_ELEMENT5.of(unit.library), |
3669 LIBRARY_INPUT: LIBRARY_ELEMENT5.of(unit.library), | 3675 LIBRARY_INPUT: LIBRARY_ELEMENT5.of(unit.library), |
3670 UNIT_INPUT: RESOLVED_UNIT4.of(unit), | 3676 UNIT_INPUT: RESOLVED_UNIT4.of(unit), |
3671 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), | 3677 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), |
3672 // In strong mode, add additional dependencies to enforce inference | 3678 // In strong mode, add additional dependencies to enforce inference |
3673 // ordering. | 3679 // ordering. |
3674 | 3680 |
3675 // Require that full inference be complete for all dependencies of the | 3681 // Require that full inference be complete for all dependencies of the |
3676 // current library cycle. | 3682 // current library cycle. |
3677 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( | 3683 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( |
3678 (CompilationUnitElementImpl unit) => CREATED_RESOLVED_UNIT9 | 3684 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT9.of( |
3679 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))) | 3685 new LibrarySpecificUnit( |
| 3686 (unit as CompilationUnitElementImpl).librarySource, |
| 3687 unit.source))) |
3680 }; | 3688 }; |
3681 } | 3689 } |
3682 | 3690 |
3683 /** | 3691 /** |
3684 * Create a [PartiallyResolveUnitReferencesTask] based on the given [target] | 3692 * Create a [PartiallyResolveUnitReferencesTask] based on the given [target] |
3685 * in the given [context]. | 3693 * in the given [context]. |
3686 */ | 3694 */ |
3687 static PartiallyResolveUnitReferencesTask createTask( | 3695 static PartiallyResolveUnitReferencesTask createTask( |
3688 AnalysisContext context, AnalysisTarget target) { | 3696 AnalysisContext context, AnalysisTarget target) { |
3689 return new PartiallyResolveUnitReferencesTask(context, target); | 3697 return new PartiallyResolveUnitReferencesTask(context, target); |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4391 return <String, TaskInput>{ | 4399 return <String, TaskInput>{ |
4392 UNIT_INPUT: RESOLVED_UNIT7.of(unit), | 4400 UNIT_INPUT: RESOLVED_UNIT7.of(unit), |
4393 LIBRARY_INPUT: LIBRARY_ELEMENT5.of(unit.library), | 4401 LIBRARY_INPUT: LIBRARY_ELEMENT5.of(unit.library), |
4394 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), | 4402 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), |
4395 // In strong mode, add additional dependencies to enforce inference | 4403 // In strong mode, add additional dependencies to enforce inference |
4396 // ordering. | 4404 // ordering. |
4397 | 4405 |
4398 // Require that static variable inference be complete for all units in | 4406 // Require that static variable inference be complete for all units in |
4399 // the current library cycle. | 4407 // the current library cycle. |
4400 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit).toList( | 4408 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit).toList( |
4401 (CompilationUnitElementImpl unit) => CREATED_RESOLVED_UNIT7 | 4409 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT7.of( |
4402 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))), | 4410 new LibrarySpecificUnit( |
| 4411 (unit as CompilationUnitElementImpl).librarySource, |
| 4412 unit.source))), |
4403 // Require that full inference be complete for all dependencies of the | 4413 // Require that full inference be complete for all dependencies of the |
4404 // current library cycle. | 4414 // current library cycle. |
4405 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( | 4415 'orderLibraryCycles': LIBRARY_CYCLE_DEPENDENCIES.of(unit).toList( |
4406 (CompilationUnitElementImpl unit) => CREATED_RESOLVED_UNIT9 | 4416 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT9.of( |
4407 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))) | 4417 new LibrarySpecificUnit( |
| 4418 (unit as CompilationUnitElementImpl).librarySource, |
| 4419 unit.source))) |
4408 }; | 4420 }; |
4409 } | 4421 } |
4410 | 4422 |
4411 /** | 4423 /** |
4412 * Create a [ResolveInstanceFieldsInUnitTask] based on the given [target] in | 4424 * Create a [ResolveInstanceFieldsInUnitTask] based on the given [target] in |
4413 * the given [context]. | 4425 * the given [context]. |
4414 */ | 4426 */ |
4415 static ResolveInstanceFieldsInUnitTask createTask( | 4427 static ResolveInstanceFieldsInUnitTask createTask( |
4416 AnalysisContext context, AnalysisTarget target) { | 4428 AnalysisContext context, AnalysisTarget target) { |
4417 return new ResolveInstanceFieldsInUnitTask(context, target); | 4429 return new ResolveInstanceFieldsInUnitTask(context, target); |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4714 return <String, TaskInput>{ | 4726 return <String, TaskInput>{ |
4715 LIBRARY_INPUT: LIBRARY_ELEMENT7.of(unit.library), | 4727 LIBRARY_INPUT: LIBRARY_ELEMENT7.of(unit.library), |
4716 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), | 4728 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request), |
4717 UNIT_INPUT: RESOLVED_UNIT9.of(unit), | 4729 UNIT_INPUT: RESOLVED_UNIT9.of(unit), |
4718 // In strong mode, add additional dependencies to enforce inference | 4730 // In strong mode, add additional dependencies to enforce inference |
4719 // ordering. | 4731 // ordering. |
4720 | 4732 |
4721 // Require that inference be complete for all units in the | 4733 // Require that inference be complete for all units in the |
4722 // current library cycle. | 4734 // current library cycle. |
4723 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit).toList( | 4735 'orderLibraryCycleTasks': LIBRARY_CYCLE_UNITS.of(unit).toList( |
4724 (CompilationUnitElementImpl unit) => CREATED_RESOLVED_UNIT9 | 4736 (CompilationUnitElement unit) => CREATED_RESOLVED_UNIT9.of( |
4725 .of(new LibrarySpecificUnit(unit.librarySource, unit.source))) | 4737 new LibrarySpecificUnit( |
| 4738 (unit as CompilationUnitElementImpl).librarySource, |
| 4739 unit.source))) |
4726 }; | 4740 }; |
4727 } | 4741 } |
4728 | 4742 |
4729 /** | 4743 /** |
4730 * Create a [ResolveUnitTask] based on the given [target] in | 4744 * Create a [ResolveUnitTask] based on the given [target] in |
4731 * the given [context]. | 4745 * the given [context]. |
4732 */ | 4746 */ |
4733 static ResolveUnitTask createTask( | 4747 static ResolveUnitTask createTask( |
4734 AnalysisContext context, AnalysisTarget target) { | 4748 AnalysisContext context, AnalysisTarget target) { |
4735 return new ResolveUnitTask(context, target); | 4749 return new ResolveUnitTask(context, target); |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5354 | 5368 |
5355 @override | 5369 @override |
5356 bool moveNext() { | 5370 bool moveNext() { |
5357 if (_newSources.isEmpty) { | 5371 if (_newSources.isEmpty) { |
5358 return false; | 5372 return false; |
5359 } | 5373 } |
5360 currentTarget = _newSources.removeLast(); | 5374 currentTarget = _newSources.removeLast(); |
5361 return true; | 5375 return true; |
5362 } | 5376 } |
5363 } | 5377 } |
OLD | NEW |