Chromium Code Reviews| 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 import 'dart:math' as math; | 8 import 'dart:math' as math; |
| 9 | 9 |
| 10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 33 | 33 |
| 34 /** | 34 /** |
| 35 * The errors produced while resolving a library directives. | 35 * The errors produced while resolving a library directives. |
| 36 * | 36 * |
| 37 * The list will be empty if there were no errors, but will not be `null`. | 37 * The list will be empty if there were no errors, but will not be `null`. |
| 38 * | 38 * |
| 39 * The result is only available for targets representing a Dart library. | 39 * The result is only available for targets representing a Dart library. |
| 40 */ | 40 */ |
| 41 final ResultDescriptor<List<AnalysisError>> BUILD_DIRECTIVES_ERRORS = | 41 final ResultDescriptor<List<AnalysisError>> BUILD_DIRECTIVES_ERRORS = |
| 42 new ResultDescriptor<List<AnalysisError>>( | 42 new ResultDescriptor<List<AnalysisError>>( |
| 43 'BUILD_DIRECTIVES_ERRORS', AnalysisError.NO_ERRORS, | 43 'BUILD_DIRECTIVES_ERRORS', AnalysisError.NO_ERRORS); |
| 44 contributesTo: DART_ERRORS); | |
| 45 | 44 |
| 46 /** | 45 /** |
| 47 * The errors produced while building function type aliases. | 46 * The errors produced while building function type aliases. |
| 48 * | 47 * |
| 49 * The list will be empty if there were no errors, but will not be `null`. | 48 * The list will be empty if there were no errors, but will not be `null`. |
| 50 * | 49 * |
| 51 * The result is only available for targets representing a Dart library. | 50 * The result is only available for targets representing a Dart library. |
| 52 */ | 51 */ |
| 53 final ResultDescriptor<List<AnalysisError>> BUILD_FUNCTION_TYPE_ALIASES_ERRORS = | 52 final ResultDescriptor<List<AnalysisError>> BUILD_FUNCTION_TYPE_ALIASES_ERRORS = |
| 54 new ResultDescriptor<List<AnalysisError>>( | 53 new ResultDescriptor<List<AnalysisError>>( |
| 55 'BUILD_FUNCTION_TYPE_ALIASES_ERRORS', AnalysisError.NO_ERRORS, | 54 'BUILD_FUNCTION_TYPE_ALIASES_ERRORS', AnalysisError.NO_ERRORS); |
| 56 contributesTo: DART_ERRORS); | |
| 57 | 55 |
| 58 /** | 56 /** |
| 59 * The errors produced while building a library element. | 57 * The errors produced while building a library element. |
| 60 * | 58 * |
| 61 * The list will be empty if there were no errors, but will not be `null`. | 59 * The list will be empty if there were no errors, but will not be `null`. |
| 62 * | 60 * |
| 63 * The result is only available for targets representing a Dart library. | 61 * The result is only available for targets representing a Dart library. |
| 64 */ | 62 */ |
| 65 final ResultDescriptor<List<AnalysisError>> BUILD_LIBRARY_ERRORS = | 63 final ResultDescriptor<List<AnalysisError>> BUILD_LIBRARY_ERRORS = |
| 66 new ResultDescriptor<List<AnalysisError>>( | 64 new ResultDescriptor<List<AnalysisError>>( |
| 67 'BUILD_LIBRARY_ERRORS', AnalysisError.NO_ERRORS, | 65 'BUILD_LIBRARY_ERRORS', AnalysisError.NO_ERRORS); |
| 68 contributesTo: DART_ERRORS); | |
| 69 | 66 |
| 70 /** | 67 /** |
| 71 * The [ClassElement]s of a [LibrarySpecificUnit]. | 68 * The [ClassElement]s of a [LibrarySpecificUnit]. |
| 72 */ | 69 */ |
| 73 final ListResultDescriptor<ClassElement> CLASS_ELEMENTS = | 70 final ListResultDescriptor<ClassElement> CLASS_ELEMENTS = |
| 74 new ListResultDescriptor<ClassElement>('CLASS_ELEMENTS', null, | 71 new ListResultDescriptor<ClassElement>('CLASS_ELEMENTS', null, |
| 75 cachingPolicy: ELEMENT_CACHING_POLICY); | 72 cachingPolicy: ELEMENT_CACHING_POLICY); |
| 76 | 73 |
| 77 /** | 74 /** |
| 78 * The element model associated with a single compilation unit. | 75 * The element model associated with a single compilation unit. |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 95 * | 92 * |
| 96 * The list will be empty if there were no errors, but will not be `null`. | 93 * The list will be empty if there were no errors, but will not be `null`. |
| 97 * | 94 * |
| 98 * The result is only available for targets representing a [ClassElement]. | 95 * The result is only available for targets representing a [ClassElement]. |
| 99 */ | 96 */ |
| 100 final ResultDescriptor<List<AnalysisError>> CONSTRUCTORS_ERRORS = | 97 final ResultDescriptor<List<AnalysisError>> CONSTRUCTORS_ERRORS = |
| 101 new ResultDescriptor<List<AnalysisError>>( | 98 new ResultDescriptor<List<AnalysisError>>( |
| 102 'CONSTRUCTORS_ERRORS', AnalysisError.NO_ERRORS); | 99 'CONSTRUCTORS_ERRORS', AnalysisError.NO_ERRORS); |
| 103 | 100 |
| 104 /** | 101 /** |
| 102 * The sources representing the libraries that include a given source as a part. | |
| 103 * | |
| 104 * The result is only available for targets representing a compilation unit. | |
| 105 */ | |
| 106 final ListResultDescriptor<Source> CONTAINING_LIBRARIES = | |
| 107 new ListResultDescriptor<Source>('CONTAINING_LIBRARIES', Source.EMPTY_LIST); | |
| 108 | |
| 109 /** | |
| 105 * The [ResultCachingPolicy] for [Element]s. | 110 * The [ResultCachingPolicy] for [Element]s. |
| 106 */ | 111 */ |
| 107 const ResultCachingPolicy ELEMENT_CACHING_POLICY = | 112 const ResultCachingPolicy ELEMENT_CACHING_POLICY = |
| 108 const SimpleResultCachingPolicy(-1, -1); | 113 const SimpleResultCachingPolicy(-1, -1); |
| 109 | 114 |
| 110 /** | 115 /** |
| 111 * The sources representing the export closure of a library. | 116 * The sources representing the export closure of a library. |
| 112 * The [Source]s include only library sources, not their units. | 117 * The [Source]s include only library sources, not their units. |
| 113 * | 118 * |
| 114 * The result is only available for targets representing a Dart library. | 119 * The result is only available for targets representing a Dart library. |
| 115 */ | 120 */ |
| 116 final ListResultDescriptor<Source> EXPORT_SOURCE_CLOSURE = | 121 final ListResultDescriptor<Source> EXPORT_SOURCE_CLOSURE = |
| 117 new ListResultDescriptor<Source>('EXPORT_SOURCE_CLOSURE', null); | 122 new ListResultDescriptor<Source>('EXPORT_SOURCE_CLOSURE', null); |
| 118 | 123 |
| 119 /** | 124 /** |
| 120 * The errors produced while generating hints a compilation unit. | 125 * The errors produced while generating hints a compilation unit. |
| 121 * | 126 * |
| 122 * The list will be empty if there were no errors, but will not be `null`. | 127 * The list will be empty if there were no errors, but will not be `null`. |
| 123 * | 128 * |
| 124 * The result is only available for targets representing a Dart compilation unit . | 129 * The result is only available for targets representing a Dart compilation unit . |
| 125 */ | 130 */ |
| 126 final ResultDescriptor<List<AnalysisError>> HINTS = | 131 final ResultDescriptor<List<AnalysisError>> HINTS = |
| 127 new ResultDescriptor<List<AnalysisError>>( | 132 new ResultDescriptor<List<AnalysisError>>( |
| 128 'HINT_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS); | 133 'HINT_ERRORS', AnalysisError.NO_ERRORS); |
| 129 | 134 |
| 130 /** | 135 /** |
| 131 * The sources representing the import closure of a library. | 136 * The sources representing the import closure of a library. |
| 132 * The [Source]s include only library sources, not their units. | 137 * The [Source]s include only library sources, not their units. |
| 133 * | 138 * |
| 134 * The result is only available for targets representing a Dart library. | 139 * The result is only available for targets representing a Dart library. |
| 135 */ | 140 */ |
| 136 final ListResultDescriptor<Source> IMPORT_SOURCE_CLOSURE = | 141 final ListResultDescriptor<Source> IMPORT_SOURCE_CLOSURE = |
| 137 new ListResultDescriptor<Source>('IMPORT_SOURCE_CLOSURE', null); | 142 new ListResultDescriptor<Source>('IMPORT_SOURCE_CLOSURE', null); |
| 138 | 143 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 * | 196 * |
| 192 * [LIBRARY_ELEMENT4] plus [RESOLVED_UNIT4] for every unit. | 197 * [LIBRARY_ELEMENT4] plus [RESOLVED_UNIT4] for every unit. |
| 193 * | 198 * |
| 194 * The result is only available for targets representing a Dart library. | 199 * The result is only available for targets representing a Dart library. |
| 195 */ | 200 */ |
| 196 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT5 = | 201 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT5 = |
| 197 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT5', null, | 202 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT5', null, |
| 198 cachingPolicy: ELEMENT_CACHING_POLICY); | 203 cachingPolicy: ELEMENT_CACHING_POLICY); |
| 199 | 204 |
| 200 /** | 205 /** |
| 206 * The analysis errors associated with a compilation unit in a specific library. | |
| 207 * | |
| 208 * The result is only available for targets representing a Dart compilation unit | |
| 209 * in a specific library. | |
| 210 */ | |
| 211 final ResultDescriptor<List<AnalysisError>> LIBRARY_UNIT_ERRORS = | |
| 212 new ResultDescriptor<List<AnalysisError>>( | |
| 213 'LIBRARY_UNIT_ERRORS', AnalysisError.NO_ERRORS); | |
| 214 | |
| 215 /** | |
| 201 * The errors produced while parsing a compilation unit. | 216 * The errors produced while parsing a compilation unit. |
| 202 * | 217 * |
| 203 * The list will be empty if there were no errors, but will not be `null`. | 218 * The list will be empty if there were no errors, but will not be `null`. |
| 204 * | 219 * |
| 205 * The result is only available for targets representing a Dart compilation unit . | 220 * The result is only available for targets representing a Dart compilation unit . |
| 206 */ | 221 */ |
| 207 final ResultDescriptor<List<AnalysisError>> PARSE_ERRORS = | 222 final ResultDescriptor<List<AnalysisError>> PARSE_ERRORS = |
| 208 new ResultDescriptor<List<AnalysisError>>( | 223 new ResultDescriptor<List<AnalysisError>>( |
| 209 'PARSE_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS); | 224 'PARSE_ERRORS', AnalysisError.NO_ERRORS); |
| 210 | 225 |
| 211 /** | 226 /** |
| 212 * The errors produced while resolving references. | 227 * The errors produced while resolving references. |
| 213 * | 228 * |
| 214 * The list will be empty if there were no errors, but will not be `null`. | 229 * The list will be empty if there were no errors, but will not be `null`. |
| 215 * | 230 * |
| 216 * The result is only available for targets representing a unit. | 231 * The result is only available for targets representing a unit. |
| 217 */ | 232 */ |
| 218 final ResultDescriptor<List<AnalysisError>> RESOLVE_REFERENCES_ERRORS = | 233 final ResultDescriptor<List<AnalysisError>> RESOLVE_REFERENCES_ERRORS = |
| 219 new ResultDescriptor<List<AnalysisError>>( | 234 new ResultDescriptor<List<AnalysisError>>( |
| 220 'RESOLVE_REFERENCES_ERRORS', AnalysisError.NO_ERRORS, | 235 'RESOLVE_REFERENCES_ERRORS', AnalysisError.NO_ERRORS); |
| 221 contributesTo: DART_ERRORS); | |
| 222 | 236 |
| 223 /** | 237 /** |
| 224 * The errors produced while resolving type names. | 238 * The errors produced while resolving type names. |
| 225 * | 239 * |
| 226 * The list will be empty if there were no errors, but will not be `null`. | 240 * The list will be empty if there were no errors, but will not be `null`. |
| 227 * | 241 * |
| 228 * The result is only available for targets representing a Dart library. | 242 * The result is only available for targets representing a Dart library. |
| 229 */ | 243 */ |
| 230 final ResultDescriptor<List<AnalysisError>> RESOLVE_TYPE_NAMES_ERRORS = | 244 final ResultDescriptor<List<AnalysisError>> RESOLVE_TYPE_NAMES_ERRORS = |
| 231 new ResultDescriptor<List<AnalysisError>>( | 245 new ResultDescriptor<List<AnalysisError>>( |
| 232 'RESOLVE_TYPE_NAMES_ERRORS', AnalysisError.NO_ERRORS, | 246 'RESOLVE_TYPE_NAMES_ERRORS', AnalysisError.NO_ERRORS); |
| 233 contributesTo: DART_ERRORS); | |
| 234 | 247 |
| 235 /** | 248 /** |
| 236 * The partially resolved [CompilationUnit] associated with a unit. | 249 * The partially resolved [CompilationUnit] associated with a unit. |
| 237 * | 250 * |
| 238 * All declarations bound to the element defined by the declaration. | 251 * All declarations bound to the element defined by the declaration. |
| 239 * | 252 * |
| 240 * The result is only available for targets representing a unit. | 253 * The result is only available for targets representing a unit. |
| 241 */ | 254 */ |
| 242 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT1 = | 255 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT1 = |
| 243 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null, | 256 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 289 | 302 |
| 290 /** | 303 /** |
| 291 * The errors produced while scanning a compilation unit. | 304 * The errors produced while scanning a compilation unit. |
| 292 * | 305 * |
| 293 * The list will be empty if there were no errors, but will not be `null`. | 306 * The list will be empty if there were no errors, but will not be `null`. |
| 294 * | 307 * |
| 295 * The result is only available for targets representing a Dart compilation unit . | 308 * The result is only available for targets representing a Dart compilation unit . |
| 296 */ | 309 */ |
| 297 final ResultDescriptor<List<AnalysisError>> SCAN_ERRORS = | 310 final ResultDescriptor<List<AnalysisError>> SCAN_ERRORS = |
| 298 new ResultDescriptor<List<AnalysisError>>( | 311 new ResultDescriptor<List<AnalysisError>>( |
| 299 'SCAN_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS); | 312 'SCAN_ERRORS', AnalysisError.NO_ERRORS); |
| 300 | 313 |
| 301 /** | 314 /** |
| 302 * The [ResultCachingPolicy] for [TOKEN_STREAM]. | 315 * The [ResultCachingPolicy] for [TOKEN_STREAM]. |
| 303 */ | 316 */ |
| 304 const ResultCachingPolicy TOKEN_STREAM_CACHING_POLICY = | 317 const ResultCachingPolicy TOKEN_STREAM_CACHING_POLICY = |
| 305 const SimpleResultCachingPolicy(1, 1); | 318 const SimpleResultCachingPolicy(1, 1); |
| 306 | 319 |
| 307 /** | 320 /** |
| 308 * The [TypeProvider] of the context. | 321 * The [TypeProvider] of the context. |
| 309 */ | 322 */ |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 326 | 339 |
| 327 /** | 340 /** |
| 328 * The errors produced while verifying a compilation unit. | 341 * The errors produced while verifying a compilation unit. |
| 329 * | 342 * |
| 330 * The list will be empty if there were no errors, but will not be `null`. | 343 * The list will be empty if there were no errors, but will not be `null`. |
| 331 * | 344 * |
| 332 * The result is only available for targets representing a Dart compilation unit . | 345 * The result is only available for targets representing a Dart compilation unit . |
| 333 */ | 346 */ |
| 334 final ResultDescriptor<List<AnalysisError>> VERIFY_ERRORS = | 347 final ResultDescriptor<List<AnalysisError>> VERIFY_ERRORS = |
| 335 new ResultDescriptor<List<AnalysisError>>( | 348 new ResultDescriptor<List<AnalysisError>>( |
| 336 'VERIFY_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS); | 349 'VERIFY_ERRORS', AnalysisError.NO_ERRORS); |
| 337 | 350 |
| 338 /** | 351 /** |
| 339 * A task that builds implicit constructors for a [ClassElement], or keeps | 352 * A task that builds implicit constructors for a [ClassElement], or keeps |
| 340 * the existing explicit constructors if the class has them. | 353 * the existing explicit constructors if the class has them. |
| 341 */ | 354 */ |
| 342 class BuildClassConstructorsTask extends SourceBasedAnalysisTask { | 355 class BuildClassConstructorsTask extends SourceBasedAnalysisTask { |
| 343 /** | 356 /** |
| 344 * The name of the [CONSTRUCTORS] input for the superclass. | 357 * The name of the [CONSTRUCTORS] input for the superclass. |
| 345 */ | 358 */ |
| 346 static const String SUPER_CONSTRUCTORS = 'SUPER_CONSTRUCTORS'; | 359 static const String SUPER_CONSTRUCTORS = 'SUPER_CONSTRUCTORS'; |
| (...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1620 /** | 1633 /** |
| 1621 * Create a [BuildTypeProviderTask] based on the given [context]. | 1634 * Create a [BuildTypeProviderTask] based on the given [context]. |
| 1622 */ | 1635 */ |
| 1623 static BuildTypeProviderTask createTask( | 1636 static BuildTypeProviderTask createTask( |
| 1624 AnalysisContext context, AnalysisContextTarget target) { | 1637 AnalysisContext context, AnalysisContextTarget target) { |
| 1625 return new BuildTypeProviderTask(context, target); | 1638 return new BuildTypeProviderTask(context, target); |
| 1626 } | 1639 } |
| 1627 } | 1640 } |
| 1628 | 1641 |
| 1629 /** | 1642 /** |
| 1643 * A task that merges all of the errors for a single source into a single list | |
| 1644 * of errors. | |
|
scheglov
2015/05/07 18:11:38
It seems that the comment should be updated.
Brian Wilkerson
2015/05/07 18:30:08
Done
| |
| 1645 */ | |
| 1646 class ContainingLibrariesTask extends SourceBasedAnalysisTask { | |
| 1647 /** | |
| 1648 * The task descriptor describing this kind of task. | |
| 1649 */ | |
| 1650 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( | |
| 1651 'ContainingLibrariesTask', createTask, buildInputs, | |
| 1652 <ResultDescriptor>[CONTAINING_LIBRARIES]); | |
| 1653 | |
| 1654 ContainingLibrariesTask( | |
| 1655 InternalAnalysisContext context, AnalysisTarget target) | |
| 1656 : super(context, target); | |
| 1657 | |
| 1658 @override | |
| 1659 TaskDescriptor get descriptor => DESCRIPTOR; | |
| 1660 | |
| 1661 @override | |
| 1662 void internalPerform() { | |
| 1663 Source source = getRequiredSource(); | |
| 1664 outputs[CONTAINING_LIBRARIES] = context.getLibrariesContaining(source); | |
| 1665 } | |
| 1666 | |
| 1667 /** | |
| 1668 * Return a map from the names of the inputs of this kind of task to the task | |
| 1669 * input descriptors describing those inputs for a task with the | |
| 1670 * given [target]. | |
| 1671 */ | |
| 1672 static Map<String, TaskInput> buildInputs(Source target) { | |
| 1673 return <String, TaskInput>{}; | |
| 1674 } | |
| 1675 | |
| 1676 /** | |
| 1677 * Create a [ContainingLibrariesTask] based on the given [target] in the given | |
| 1678 * [context]. | |
| 1679 */ | |
| 1680 static ContainingLibrariesTask createTask( | |
| 1681 AnalysisContext context, AnalysisTarget target) { | |
| 1682 return new ContainingLibrariesTask(context, target); | |
| 1683 } | |
| 1684 } | |
| 1685 | |
| 1686 /** | |
| 1687 * A task that merges all of the errors for a single source into a single list | |
| 1688 * of errors. | |
| 1689 */ | |
| 1690 class DartErrorsTask extends SourceBasedAnalysisTask { | |
| 1691 /** | |
| 1692 * The name of the [BUILD_DIRECTIVES_ERRORS] input. | |
| 1693 */ | |
| 1694 static const String BUILD_DIRECTIVES_ERRORS_INPUT = 'BUILD_DIRECTIVES_ERRORS'; | |
| 1695 | |
| 1696 /** | |
| 1697 * The name of the [BUILD_LIBRARY_ERRORS] input. | |
| 1698 */ | |
| 1699 static const String BUILD_LIBRARY_ERRORS_INPUT = 'BUILD_LIBRARY_ERRORS'; | |
| 1700 | |
| 1701 /** | |
| 1702 * The name of the [LIBRARY_UNIT_ERRORS] input. | |
| 1703 */ | |
| 1704 static const String LIBRARY_UNIT_ERRORS_INPUT = 'LIBRARY_UNIT_ERRORS'; | |
| 1705 | |
| 1706 /** | |
| 1707 * The name of the [PARSE_ERRORS] input. | |
| 1708 */ | |
| 1709 static const String PARSE_ERRORS_INPUT = 'PARSE_ERRORS'; | |
| 1710 | |
| 1711 /** | |
| 1712 * The name of the [SCAN_ERRORS] input. | |
| 1713 */ | |
| 1714 static const String SCAN_ERRORS_INPUT = 'SCAN_ERRORS'; | |
| 1715 | |
| 1716 /** | |
| 1717 * The task descriptor describing this kind of task. | |
| 1718 */ | |
| 1719 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('DartErrorsTask', | |
| 1720 createTask, buildInputs, <ResultDescriptor>[DART_ERRORS]); | |
| 1721 | |
| 1722 DartErrorsTask(InternalAnalysisContext context, AnalysisTarget target) | |
| 1723 : super(context, target); | |
| 1724 | |
| 1725 @override | |
| 1726 TaskDescriptor get descriptor => DESCRIPTOR; | |
| 1727 | |
| 1728 @override | |
| 1729 void internalPerform() { | |
| 1730 // | |
| 1731 // Prepare inputs. | |
| 1732 // | |
| 1733 List<List<AnalysisError>> errorLists = <List<AnalysisError>>[]; | |
| 1734 errorLists.add(getRequiredInput(BUILD_DIRECTIVES_ERRORS_INPUT)); | |
| 1735 errorLists.add(getRequiredInput(BUILD_LIBRARY_ERRORS_INPUT)); | |
| 1736 errorLists.add(getRequiredInput(PARSE_ERRORS_INPUT)); | |
| 1737 errorLists.add(getRequiredInput(SCAN_ERRORS_INPUT)); | |
| 1738 Map unitErrors = getRequiredInput(LIBRARY_UNIT_ERRORS_INPUT); | |
|
scheglov
2015/05/07 18:11:38
Type arguments?
Brian Wilkerson
2015/05/07 18:30:08
Done
| |
| 1739 for (List<AnalysisError> errors in unitErrors.values) { | |
| 1740 errorLists.add(errors); | |
| 1741 } | |
| 1742 // | |
| 1743 // Record outputs. | |
| 1744 // | |
| 1745 outputs[DART_ERRORS] = AnalysisError.mergeLists(errorLists); | |
| 1746 } | |
| 1747 | |
| 1748 /** | |
| 1749 * Return a map from the names of the inputs of this kind of task to the task | |
| 1750 * input descriptors describing those inputs for a task with the | |
| 1751 * given [target]. | |
| 1752 */ | |
| 1753 static Map<String, TaskInput> buildInputs(Source target) { | |
| 1754 return <String, TaskInput>{ | |
| 1755 BUILD_DIRECTIVES_ERRORS_INPUT: BUILD_DIRECTIVES_ERRORS.of(target), | |
| 1756 BUILD_LIBRARY_ERRORS_INPUT: BUILD_LIBRARY_ERRORS.of(target), | |
| 1757 PARSE_ERRORS_INPUT: PARSE_ERRORS.of(target), | |
| 1758 SCAN_ERRORS_INPUT: SCAN_ERRORS.of(target), | |
| 1759 LIBRARY_UNIT_ERRORS_INPUT: CONTAINING_LIBRARIES | |
| 1760 .of(target) | |
| 1761 .toMap((Source library) { | |
| 1762 LibrarySpecificUnit unit = new LibrarySpecificUnit(library, target); | |
| 1763 return LIBRARY_UNIT_ERRORS.of(unit); | |
| 1764 }) | |
| 1765 }; | |
| 1766 } | |
| 1767 | |
| 1768 /** | |
| 1769 * Create a [DartErrorsTask] based on the given [target] in the given | |
| 1770 * [context]. | |
| 1771 */ | |
| 1772 static DartErrorsTask createTask( | |
| 1773 AnalysisContext context, AnalysisTarget target) { | |
| 1774 return new DartErrorsTask(context, target); | |
| 1775 } | |
| 1776 } | |
| 1777 | |
| 1778 /** | |
| 1630 * The helper for building the export [Namespace] of a [LibraryElement]. | 1779 * The helper for building the export [Namespace] of a [LibraryElement]. |
| 1631 */ | 1780 */ |
| 1632 class ExportNamespaceBuilder { | 1781 class ExportNamespaceBuilder { |
| 1633 /** | 1782 /** |
| 1634 * Build the export [Namespace] of the given [LibraryElement]. | 1783 * Build the export [Namespace] of the given [LibraryElement]. |
| 1635 */ | 1784 */ |
| 1636 Namespace build(LibraryElement library) { | 1785 Namespace build(LibraryElement library) { |
| 1637 return new Namespace( | 1786 return new Namespace( |
| 1638 _createExportMapping(library, new HashSet<LibraryElement>())); | 1787 _createExportMapping(library, new HashSet<LibraryElement>())); |
| 1639 } | 1788 } |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1847 } | 1996 } |
| 1848 } | 1997 } |
| 1849 | 1998 |
| 1850 /** | 1999 /** |
| 1851 * A task that generates [HINTS] for a unit. | 2000 * A task that generates [HINTS] for a unit. |
| 1852 */ | 2001 */ |
| 1853 class GenerateHintsTask extends SourceBasedAnalysisTask { | 2002 class GenerateHintsTask extends SourceBasedAnalysisTask { |
| 1854 /** | 2003 /** |
| 1855 * The name of the [RESOLVED_UNIT] input. | 2004 * The name of the [RESOLVED_UNIT] input. |
| 1856 */ | 2005 */ |
| 1857 static const String UNIT_INPUT = 'UNIT_INPUT'; | 2006 static const String RESOLVED_UNIT_INPUT = 'RESOLVED_UNIT'; |
| 1858 | 2007 |
| 1859 /** | 2008 /** |
| 1860 * The name of a list of [USED_LOCAL_ELEMENTS] for each library unit input. | 2009 * The name of a list of [USED_LOCAL_ELEMENTS] for each library unit input. |
| 1861 */ | 2010 */ |
| 1862 static const String USED_LOCAL_ELEMENTS_INPUT = 'USED_LOCAL_ELEMENTS'; | 2011 static const String USED_LOCAL_ELEMENTS_INPUT = 'USED_LOCAL_ELEMENTS'; |
| 1863 | 2012 |
| 1864 /** | 2013 /** |
| 1865 * The name of a list of [USED_IMPORTED_ELEMENTS] for each library unit input. | 2014 * The name of a list of [USED_IMPORTED_ELEMENTS] for each library unit input. |
| 1866 */ | 2015 */ |
| 1867 static const String USED_IMPORTED_ELEMENTS_INPUT = 'USED_IMPORTED_ELEMENTS'; | 2016 static const String USED_IMPORTED_ELEMENTS_INPUT = 'USED_IMPORTED_ELEMENTS'; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 1879 TaskDescriptor get descriptor => DESCRIPTOR; | 2028 TaskDescriptor get descriptor => DESCRIPTOR; |
| 1880 | 2029 |
| 1881 @override | 2030 @override |
| 1882 void internalPerform() { | 2031 void internalPerform() { |
| 1883 RecordingErrorListener errorListener = new RecordingErrorListener(); | 2032 RecordingErrorListener errorListener = new RecordingErrorListener(); |
| 1884 Source source = getRequiredSource(); | 2033 Source source = getRequiredSource(); |
| 1885 ErrorReporter errorReporter = new ErrorReporter(errorListener, source); | 2034 ErrorReporter errorReporter = new ErrorReporter(errorListener, source); |
| 1886 // | 2035 // |
| 1887 // Prepare inputs. | 2036 // Prepare inputs. |
| 1888 // | 2037 // |
| 1889 CompilationUnit unit = getRequiredInput(UNIT_INPUT); | 2038 CompilationUnit unit = getRequiredInput(RESOLVED_UNIT_INPUT); |
| 1890 List<UsedImportedElements> usedImportedElementsList = | 2039 List<UsedImportedElements> usedImportedElementsList = |
| 1891 getRequiredInput(USED_IMPORTED_ELEMENTS_INPUT); | 2040 getRequiredInput(USED_IMPORTED_ELEMENTS_INPUT); |
| 1892 List<UsedLocalElements> usedLocalElementsList = | 2041 List<UsedLocalElements> usedLocalElementsList = |
| 1893 getRequiredInput(USED_LOCAL_ELEMENTS_INPUT); | 2042 getRequiredInput(USED_LOCAL_ELEMENTS_INPUT); |
| 1894 CompilationUnitElement unitElement = unit.element; | 2043 CompilationUnitElement unitElement = unit.element; |
| 1895 LibraryElement libraryElement = unitElement.library; | 2044 LibraryElement libraryElement = unitElement.library; |
| 1896 // | 2045 // |
| 1897 // Generate errors. | 2046 // Generate errors. |
| 1898 // | 2047 // |
| 1899 unit.accept(new DeadCodeVerifier(errorReporter)); | 2048 unit.accept(new DeadCodeVerifier(errorReporter)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1932 } | 2081 } |
| 1933 | 2082 |
| 1934 /** | 2083 /** |
| 1935 * Return a map from the names of the inputs of this kind of task to the task | 2084 * Return a map from the names of the inputs of this kind of task to the task |
| 1936 * input descriptors describing those inputs for a task with the | 2085 * input descriptors describing those inputs for a task with the |
| 1937 * given [target]. | 2086 * given [target]. |
| 1938 */ | 2087 */ |
| 1939 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) { | 2088 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) { |
| 1940 Source libSource = target.library; | 2089 Source libSource = target.library; |
| 1941 return <String, TaskInput>{ | 2090 return <String, TaskInput>{ |
| 1942 UNIT_INPUT: RESOLVED_UNIT.of(target), | 2091 RESOLVED_UNIT_INPUT: RESOLVED_UNIT.of(target), |
| 1943 USED_LOCAL_ELEMENTS_INPUT: UNITS.of(libSource).toList((unit) { | 2092 USED_LOCAL_ELEMENTS_INPUT: UNITS.of(libSource).toList((unit) { |
| 1944 LibrarySpecificUnit target = new LibrarySpecificUnit(libSource, unit); | 2093 LibrarySpecificUnit target = new LibrarySpecificUnit(libSource, unit); |
| 1945 return USED_LOCAL_ELEMENTS.of(target); | 2094 return USED_LOCAL_ELEMENTS.of(target); |
| 1946 }), | 2095 }), |
| 1947 USED_IMPORTED_ELEMENTS_INPUT: UNITS.of(libSource).toList((unit) { | 2096 USED_IMPORTED_ELEMENTS_INPUT: UNITS.of(libSource).toList((unit) { |
| 1948 LibrarySpecificUnit target = new LibrarySpecificUnit(libSource, unit); | 2097 LibrarySpecificUnit target = new LibrarySpecificUnit(libSource, unit); |
| 1949 return USED_IMPORTED_ELEMENTS.of(target); | 2098 return USED_IMPORTED_ELEMENTS.of(target); |
| 1950 }) | 2099 }) |
| 1951 }; | 2100 }; |
| 1952 } | 2101 } |
| 1953 | 2102 |
| 1954 /** | 2103 /** |
| 1955 * Create a [GenerateHintsTask] based on the given [target] in | 2104 * Create a [GenerateHintsTask] based on the given [target] in |
| 1956 * the given [context]. | 2105 * the given [context]. |
| 1957 */ | 2106 */ |
| 1958 static GenerateHintsTask createTask( | 2107 static GenerateHintsTask createTask( |
| 1959 AnalysisContext context, AnalysisTarget target) { | 2108 AnalysisContext context, AnalysisTarget target) { |
| 1960 return new GenerateHintsTask(context, target); | 2109 return new GenerateHintsTask(context, target); |
| 1961 } | 2110 } |
| 1962 } | 2111 } |
| 1963 | 2112 |
| 1964 /** | 2113 /** |
| 2114 * A task that merges all of the errors for a single source into a single list | |
| 2115 * of errors. | |
| 2116 */ | |
| 2117 class LibraryUnitErrorsTask extends SourceBasedAnalysisTask { | |
| 2118 /** | |
| 2119 * The name of the [BUILD_FUNCTION_TYPE_ALIASES_ERRORS] input. | |
| 2120 */ | |
| 2121 static const String BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT = | |
| 2122 'BUILD_FUNCTION_TYPE_ALIASES_ERRORS'; | |
| 2123 | |
| 2124 /** | |
| 2125 * The name of the [HINTS] input. | |
| 2126 */ | |
| 2127 static const String HINTS_INPUT = 'HINTS'; | |
| 2128 | |
| 2129 /** | |
| 2130 * The name of the [RESOLVE_REFERENCES_ERRORS] input. | |
| 2131 */ | |
| 2132 static const String RESOLVE_REFERENCES_ERRORS_INPUT = | |
| 2133 'RESOLVE_REFERENCES_ERRORS'; | |
| 2134 | |
| 2135 /** | |
| 2136 * The name of the [RESOLVE_TYPE_NAMES_ERRORS] input. | |
| 2137 */ | |
| 2138 static const String RESOLVE_TYPE_NAMES_ERRORS_INPUT = | |
| 2139 'RESOLVE_TYPE_NAMES_ERRORS'; | |
| 2140 | |
| 2141 /** | |
| 2142 * The name of the [VERIFY_ERRORS] input. | |
| 2143 */ | |
| 2144 static const String VERIFY_ERRORS_INPUT = 'VERIFY_ERRORS'; | |
| 2145 | |
| 2146 /** | |
| 2147 * The task descriptor describing this kind of task. | |
| 2148 */ | |
| 2149 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( | |
| 2150 'LibraryUnitErrorsTask', createTask, buildInputs, | |
| 2151 <ResultDescriptor>[LIBRARY_UNIT_ERRORS]); | |
| 2152 | |
| 2153 LibraryUnitErrorsTask(InternalAnalysisContext context, AnalysisTarget target) | |
| 2154 : super(context, target); | |
| 2155 | |
| 2156 @override | |
| 2157 TaskDescriptor get descriptor => DESCRIPTOR; | |
| 2158 | |
| 2159 @override | |
| 2160 void internalPerform() { | |
| 2161 // | |
| 2162 // Prepare inputs. | |
| 2163 // | |
| 2164 List<List<AnalysisError>> errorLists = <List<AnalysisError>>[]; | |
| 2165 errorLists.add(getRequiredInput(BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT)); | |
| 2166 errorLists.add(getRequiredInput(HINTS_INPUT)); | |
| 2167 errorLists.add(getRequiredInput(RESOLVE_REFERENCES_ERRORS_INPUT)); | |
| 2168 errorLists.add(getRequiredInput(RESOLVE_TYPE_NAMES_ERRORS_INPUT)); | |
| 2169 errorLists.add(getRequiredInput(VERIFY_ERRORS_INPUT)); | |
| 2170 // | |
| 2171 // Record outputs. | |
| 2172 // | |
| 2173 outputs[LIBRARY_UNIT_ERRORS] = AnalysisError.mergeLists(errorLists); | |
| 2174 } | |
| 2175 | |
| 2176 /** | |
| 2177 * Return a map from the names of the inputs of this kind of task to the task | |
| 2178 * input descriptors describing those inputs for a task with the | |
| 2179 * given [unit]. | |
| 2180 */ | |
| 2181 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit unit) { | |
| 2182 return <String, TaskInput>{ | |
| 2183 BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT: | |
| 2184 BUILD_FUNCTION_TYPE_ALIASES_ERRORS.of(unit), | |
| 2185 HINTS_INPUT: HINTS.of(unit), | |
| 2186 RESOLVE_REFERENCES_ERRORS_INPUT: RESOLVE_REFERENCES_ERRORS.of(unit), | |
| 2187 RESOLVE_TYPE_NAMES_ERRORS_INPUT: RESOLVE_TYPE_NAMES_ERRORS.of(unit), | |
| 2188 VERIFY_ERRORS_INPUT: VERIFY_ERRORS.of(unit) | |
| 2189 }; | |
| 2190 } | |
| 2191 | |
| 2192 /** | |
| 2193 * Create a [LibraryUnitErrorsTask] based on the given [target] in the given | |
| 2194 * [context]. | |
| 2195 */ | |
| 2196 static LibraryUnitErrorsTask createTask( | |
| 2197 AnalysisContext context, AnalysisTarget target) { | |
| 2198 return new LibraryUnitErrorsTask(context, target); | |
| 2199 } | |
| 2200 } | |
| 2201 | |
| 2202 /** | |
| 1965 * The memento for [ParseDartTask]. | 2203 * The memento for [ParseDartTask]. |
| 1966 */ | 2204 */ |
| 1967 class ParseDartMemento { | 2205 class ParseDartMemento { |
| 1968 final Token inputTokenStream; | 2206 final Token inputTokenStream; |
| 1969 final List<Source> explicitlyImportedLibraries; | 2207 final List<Source> explicitlyImportedLibraries; |
| 1970 final List<Source> exportedLibraries; | 2208 final List<Source> exportedLibraries; |
| 1971 final List<Source> importedLibraries; | 2209 final List<Source> importedLibraries; |
| 1972 final List<Source> includedParts; | 2210 final List<Source> includedParts; |
| 1973 final List<AnalysisError> parseErrors; | 2211 final List<AnalysisError> parseErrors; |
| 1974 final CompilationUnit parsedUnit; | 2212 final CompilationUnit parsedUnit; |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2285 | 2523 |
| 2286 /** | 2524 /** |
| 2287 * The name of the [RESOLVED_UNIT5] input. | 2525 * The name of the [RESOLVED_UNIT5] input. |
| 2288 */ | 2526 */ |
| 2289 static const String UNIT_INPUT = 'UNIT_INPUT'; | 2527 static const String UNIT_INPUT = 'UNIT_INPUT'; |
| 2290 | 2528 |
| 2291 /** | 2529 /** |
| 2292 * The task descriptor describing this kind of task. | 2530 * The task descriptor describing this kind of task. |
| 2293 */ | 2531 */ |
| 2294 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( | 2532 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( |
| 2295 'ResolveReferencesTask', createTask, buildInputs, | 2533 'ResolveReferencesTask', createTask, buildInputs, <ResultDescriptor>[ |
| 2296 <ResultDescriptor>[RESOLVED_UNIT]); | 2534 RESOLVE_REFERENCES_ERRORS, |
| 2535 RESOLVED_UNIT | |
| 2536 ]); | |
| 2297 | 2537 |
| 2298 ResolveReferencesTask(InternalAnalysisContext context, AnalysisTarget target) | 2538 ResolveReferencesTask(InternalAnalysisContext context, AnalysisTarget target) |
| 2299 : super(context, target); | 2539 : super(context, target); |
| 2300 | 2540 |
| 2301 @override | 2541 @override |
| 2302 TaskDescriptor get descriptor => DESCRIPTOR; | 2542 TaskDescriptor get descriptor => DESCRIPTOR; |
| 2303 | 2543 |
| 2304 @override | 2544 @override |
| 2305 void internalPerform() { | 2545 void internalPerform() { |
| 2306 RecordingErrorListener errorListener = new RecordingErrorListener(); | 2546 RecordingErrorListener errorListener = new RecordingErrorListener(); |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2739 @override | 2979 @override |
| 2740 bool moveNext() { | 2980 bool moveNext() { |
| 2741 if (_newSources.isEmpty) { | 2981 if (_newSources.isEmpty) { |
| 2742 return false; | 2982 return false; |
| 2743 } | 2983 } |
| 2744 currentTarget = _newSources.first; | 2984 currentTarget = _newSources.first; |
| 2745 _newSources.remove(currentTarget); | 2985 _newSources.remove(currentTarget); |
| 2746 return true; | 2986 return true; |
| 2747 } | 2987 } |
| 2748 } | 2988 } |
| OLD | NEW |