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'; |
11 import 'package:analyzer/src/generated/element.dart'; | 11 import 'package:analyzer/src/generated/element.dart'; |
12 import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask; | 12 import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask; |
13 import 'package:analyzer/src/generated/error.dart'; | 13 import 'package:analyzer/src/generated/error.dart'; |
14 import 'package:analyzer/src/generated/error_verifier.dart'; | 14 import 'package:analyzer/src/generated/error_verifier.dart'; |
15 import 'package:analyzer/src/generated/java_engine.dart'; | 15 import 'package:analyzer/src/generated/java_engine.dart'; |
16 import 'package:analyzer/src/generated/parser.dart'; | 16 import 'package:analyzer/src/generated/parser.dart'; |
17 import 'package:analyzer/src/generated/resolver.dart'; | 17 import 'package:analyzer/src/generated/resolver.dart'; |
18 import 'package:analyzer/src/generated/scanner.dart'; | 18 import 'package:analyzer/src/generated/scanner.dart'; |
19 import 'package:analyzer/src/generated/sdk.dart'; | 19 import 'package:analyzer/src/generated/sdk.dart'; |
20 import 'package:analyzer/src/generated/source.dart'; | 20 import 'package:analyzer/src/generated/source.dart'; |
21 import 'package:analyzer/src/task/general.dart'; | 21 import 'package:analyzer/src/task/general.dart'; |
22 import 'package:analyzer/src/task/incremental_element_builder.dart'; | 22 import 'package:analyzer/src/task/incremental_element_builder.dart'; |
| 23 import 'package:analyzer/src/task/model.dart'; |
23 import 'package:analyzer/task/dart.dart'; | 24 import 'package:analyzer/task/dart.dart'; |
24 import 'package:analyzer/task/general.dart'; | 25 import 'package:analyzer/task/general.dart'; |
25 import 'package:analyzer/task/model.dart'; | 26 import 'package:analyzer/task/model.dart'; |
26 | 27 |
27 /** | 28 /** |
| 29 * The [ResultCachingPolicy] for ASTs. |
| 30 */ |
| 31 const ResultCachingPolicy AST_CACHING_POLICY = |
| 32 const SimpleResultCachingPolicy(256, 64); |
| 33 |
| 34 /** |
28 * The errors produced while resolving a library directives. | 35 * The errors produced while resolving a library directives. |
29 * | 36 * |
30 * 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`. |
31 * | 38 * |
32 * The result is only available for targets representing a Dart library. | 39 * The result is only available for targets representing a Dart library. |
33 */ | 40 */ |
34 final ResultDescriptor<List<AnalysisError>> BUILD_DIRECTIVES_ERRORS = | 41 final ResultDescriptor<List<AnalysisError>> BUILD_DIRECTIVES_ERRORS = |
35 new ResultDescriptor<List<AnalysisError>>( | 42 new ResultDescriptor<List<AnalysisError>>( |
36 'BUILD_DIRECTIVES_ERRORS', AnalysisError.NO_ERRORS, | 43 'BUILD_DIRECTIVES_ERRORS', AnalysisError.NO_ERRORS, |
37 contributesTo: DART_ERRORS); | 44 contributesTo: DART_ERRORS); |
(...skipping 19 matching lines...) Expand all Loading... |
57 */ | 64 */ |
58 final ResultDescriptor<List<AnalysisError>> BUILD_LIBRARY_ERRORS = | 65 final ResultDescriptor<List<AnalysisError>> BUILD_LIBRARY_ERRORS = |
59 new ResultDescriptor<List<AnalysisError>>( | 66 new ResultDescriptor<List<AnalysisError>>( |
60 'BUILD_LIBRARY_ERRORS', AnalysisError.NO_ERRORS, | 67 'BUILD_LIBRARY_ERRORS', AnalysisError.NO_ERRORS, |
61 contributesTo: DART_ERRORS); | 68 contributesTo: DART_ERRORS); |
62 | 69 |
63 /** | 70 /** |
64 * The [ClassElement]s of a [LibrarySpecificUnit]. | 71 * The [ClassElement]s of a [LibrarySpecificUnit]. |
65 */ | 72 */ |
66 final ListResultDescriptor<ClassElement> CLASS_ELEMENTS = | 73 final ListResultDescriptor<ClassElement> CLASS_ELEMENTS = |
67 new ListResultDescriptor<ClassElement>('CLASS_ELEMENTS', null); | 74 new ListResultDescriptor<ClassElement>('CLASS_ELEMENTS', null, |
| 75 cachingPolicy: ELEMENT_CACHING_POLICY); |
68 | 76 |
69 /** | 77 /** |
70 * The element model associated with a single compilation unit. | 78 * The element model associated with a single compilation unit. |
71 * | 79 * |
72 * The result is only available for targets representing a Dart compilation unit
. | 80 * The result is only available for targets representing a Dart compilation unit
. |
73 */ | 81 */ |
74 final ResultDescriptor<CompilationUnitElement> COMPILATION_UNIT_ELEMENT = | 82 final ResultDescriptor<CompilationUnitElement> COMPILATION_UNIT_ELEMENT = |
75 new ResultDescriptor<CompilationUnitElement>( | 83 new ResultDescriptor<CompilationUnitElement>( |
76 'COMPILATION_UNIT_ELEMENT', null); | 84 'COMPILATION_UNIT_ELEMENT', null, |
| 85 cachingPolicy: ELEMENT_CACHING_POLICY); |
77 | 86 |
78 /** | 87 /** |
79 * The [ConstructorElement]s of a [ClassElement]. | 88 * The [ConstructorElement]s of a [ClassElement]. |
80 */ | 89 */ |
81 final ResultDescriptor<List<ConstructorElement>> CONSTRUCTORS = | 90 final ResultDescriptor<List<ConstructorElement>> CONSTRUCTORS = |
82 new ResultDescriptor<List<ConstructorElement>>('CONSTRUCTORS', null); | 91 new ResultDescriptor<List<ConstructorElement>>('CONSTRUCTORS', null); |
83 | 92 |
84 /** | 93 /** |
85 * The errors produced while building a [ClassElement] constructors. | 94 * The errors produced while building a [ClassElement] constructors. |
86 * | 95 * |
87 * The list will be empty if there were no errors, but will not be `null`. | 96 * The list will be empty if there were no errors, but will not be `null`. |
88 * | 97 * |
89 * The result is only available for targets representing a [ClassElement]. | 98 * The result is only available for targets representing a [ClassElement]. |
90 */ | 99 */ |
91 final ResultDescriptor<List<AnalysisError>> CONSTRUCTORS_ERRORS = | 100 final ResultDescriptor<List<AnalysisError>> CONSTRUCTORS_ERRORS = |
92 new ResultDescriptor<List<AnalysisError>>( | 101 new ResultDescriptor<List<AnalysisError>>( |
93 'CONSTRUCTORS_ERRORS', AnalysisError.NO_ERRORS); | 102 'CONSTRUCTORS_ERRORS', AnalysisError.NO_ERRORS); |
94 | 103 |
95 /** | 104 /** |
| 105 * The [ResultCachingPolicy] for [Element]s. |
| 106 */ |
| 107 const ResultCachingPolicy ELEMENT_CACHING_POLICY = |
| 108 const SimpleResultCachingPolicy(-1, -1); |
| 109 |
| 110 /** |
96 * The sources representing the export closure of a library. | 111 * The sources representing the export closure of a library. |
97 * The [Source]s include only library sources, not their units. | 112 * The [Source]s include only library sources, not their units. |
98 * | 113 * |
99 * The result is only available for targets representing a Dart library. | 114 * The result is only available for targets representing a Dart library. |
100 */ | 115 */ |
101 final ListResultDescriptor<Source> EXPORT_SOURCE_CLOSURE = | 116 final ListResultDescriptor<Source> EXPORT_SOURCE_CLOSURE = |
102 new ListResultDescriptor<Source>('EXPORT_SOURCE_CLOSURE', null); | 117 new ListResultDescriptor<Source>('EXPORT_SOURCE_CLOSURE', null); |
103 | 118 |
104 /** | 119 /** |
105 * The errors produced while generating hints a compilation unit. | 120 * The errors produced while generating hints a compilation unit. |
(...skipping 17 matching lines...) Expand all Loading... |
123 | 138 |
124 /** | 139 /** |
125 * The partial [LibraryElement] associated with a library. | 140 * The partial [LibraryElement] associated with a library. |
126 * | 141 * |
127 * The [LibraryElement] and its [CompilationUnitElement]s are attached to each | 142 * The [LibraryElement] and its [CompilationUnitElement]s are attached to each |
128 * other. Directives 'library', 'part' and 'part of' are resolved. | 143 * other. Directives 'library', 'part' and 'part of' are resolved. |
129 * | 144 * |
130 * The result is only available for targets representing a Dart library. | 145 * The result is only available for targets representing a Dart library. |
131 */ | 146 */ |
132 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT1 = | 147 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT1 = |
133 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT1', null); | 148 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT1', null, |
| 149 cachingPolicy: ELEMENT_CACHING_POLICY); |
134 | 150 |
135 /** | 151 /** |
136 * The partial [LibraryElement] associated with a library. | 152 * The partial [LibraryElement] associated with a library. |
137 * | 153 * |
138 * In addition to [LIBRARY_ELEMENT1] [LibraryElement.imports] and | 154 * In addition to [LIBRARY_ELEMENT1] [LibraryElement.imports] and |
139 * [LibraryElement.exports] are set. | 155 * [LibraryElement.exports] are set. |
140 * | 156 * |
141 * The result is only available for targets representing a Dart library. | 157 * The result is only available for targets representing a Dart library. |
142 */ | 158 */ |
143 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT2 = | 159 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT2 = |
144 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT2', null); | 160 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT2', null, |
| 161 cachingPolicy: ELEMENT_CACHING_POLICY); |
145 | 162 |
146 /** | 163 /** |
147 * The partial [LibraryElement] associated with a library. | 164 * The partial [LibraryElement] associated with a library. |
148 * | 165 * |
149 * In addition to [LIBRARY_ELEMENT2] the [LibraryElement.publicNamespace] is set
. | 166 * In addition to [LIBRARY_ELEMENT2] the [LibraryElement.publicNamespace] is set
. |
150 * | 167 * |
151 * The result is only available for targets representing a Dart library. | 168 * The result is only available for targets representing a Dart library. |
152 */ | 169 */ |
153 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT3 = | 170 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT3 = |
154 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT3', null); | 171 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT3', null, |
| 172 cachingPolicy: ELEMENT_CACHING_POLICY); |
155 | 173 |
156 /** | 174 /** |
157 * The partial [LibraryElement] associated with a library. | 175 * The partial [LibraryElement] associated with a library. |
158 * | 176 * |
159 * In addition to [LIBRARY_ELEMENT3] the [LibraryElement.entryPoint] is set, | 177 * In addition to [LIBRARY_ELEMENT3] the [LibraryElement.entryPoint] is set, |
160 * if the library does not declare one already and one of the exported | 178 * if the library does not declare one already and one of the exported |
161 * libraries exports one. | 179 * libraries exports one. |
162 * | 180 * |
163 * Also [LibraryElement.exportNamespace] is set. | 181 * Also [LibraryElement.exportNamespace] is set. |
164 * | 182 * |
165 * The result is only available for targets representing a Dart library. | 183 * The result is only available for targets representing a Dart library. |
166 */ | 184 */ |
167 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT4 = | 185 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT4 = |
168 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT4', null); | 186 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT4', null, |
| 187 cachingPolicy: ELEMENT_CACHING_POLICY); |
169 | 188 |
170 /** | 189 /** |
171 * The partial [LibraryElement] associated with a library. | 190 * The partial [LibraryElement] associated with a library. |
172 * | 191 * |
173 * [LIBRARY_ELEMENT4] plus [RESOLVED_UNIT4] for every unit. | 192 * [LIBRARY_ELEMENT4] plus [RESOLVED_UNIT4] for every unit. |
174 * | 193 * |
175 * The result is only available for targets representing a Dart library. | 194 * The result is only available for targets representing a Dart library. |
176 */ | 195 */ |
177 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT5 = | 196 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT5 = |
178 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT5', null); | 197 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT5', null, |
| 198 cachingPolicy: ELEMENT_CACHING_POLICY); |
179 | 199 |
180 /** | 200 /** |
181 * The errors produced while parsing a compilation unit. | 201 * The errors produced while parsing a compilation unit. |
182 * | 202 * |
183 * The list will be empty if there were no errors, but will not be `null`. | 203 * The list will be empty if there were no errors, but will not be `null`. |
184 * | 204 * |
185 * The result is only available for targets representing a Dart compilation unit
. | 205 * The result is only available for targets representing a Dart compilation unit
. |
186 */ | 206 */ |
187 final ResultDescriptor<List<AnalysisError>> PARSE_ERRORS = | 207 final ResultDescriptor<List<AnalysisError>> PARSE_ERRORS = |
188 new ResultDescriptor<List<AnalysisError>>( | 208 new ResultDescriptor<List<AnalysisError>>( |
(...skipping 24 matching lines...) Expand all Loading... |
213 contributesTo: DART_ERRORS); | 233 contributesTo: DART_ERRORS); |
214 | 234 |
215 /** | 235 /** |
216 * The partially resolved [CompilationUnit] associated with a unit. | 236 * The partially resolved [CompilationUnit] associated with a unit. |
217 * | 237 * |
218 * All declarations bound to the element defined by the declaration. | 238 * All declarations bound to the element defined by the declaration. |
219 * | 239 * |
220 * The result is only available for targets representing a unit. | 240 * The result is only available for targets representing a unit. |
221 */ | 241 */ |
222 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT1 = | 242 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT1 = |
223 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null); | 243 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null, |
| 244 cachingPolicy: AST_CACHING_POLICY); |
224 | 245 |
225 /** | 246 /** |
226 * The partially resolved [CompilationUnit] associated with a unit. | 247 * The partially resolved [CompilationUnit] associated with a unit. |
227 * | 248 * |
228 * All the enum member elements are built. | 249 * All the enum member elements are built. |
229 * | 250 * |
230 * The result is only available for targets representing a unit. | 251 * The result is only available for targets representing a unit. |
231 */ | 252 */ |
232 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT2 = | 253 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT2 = |
233 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT2', null); | 254 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT2', null, |
| 255 cachingPolicy: AST_CACHING_POLICY); |
234 | 256 |
235 /** | 257 /** |
236 * The partially resolved [CompilationUnit] associated with a unit. | 258 * The partially resolved [CompilationUnit] associated with a unit. |
237 * | 259 * |
238 * All the function type aliases are resolved. | 260 * All the function type aliases are resolved. |
239 * | 261 * |
240 * The result is only available for targets representing a unit. | 262 * The result is only available for targets representing a unit. |
241 */ | 263 */ |
242 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT3 = | 264 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT3 = |
243 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT3', null); | 265 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT3', null, |
| 266 cachingPolicy: AST_CACHING_POLICY); |
244 | 267 |
245 /** | 268 /** |
246 * The partially resolved [CompilationUnit] associated with a unit. | 269 * The partially resolved [CompilationUnit] associated with a unit. |
247 * | 270 * |
248 * [RESOLVED_UNIT3] with resolved type names. | 271 * [RESOLVED_UNIT3] with resolved type names. |
249 * | 272 * |
250 * The result is only available for targets representing a unit. | 273 * The result is only available for targets representing a unit. |
251 */ | 274 */ |
252 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT4 = | 275 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT4 = |
253 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT4', null); | 276 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT4', null, |
| 277 cachingPolicy: AST_CACHING_POLICY); |
254 | 278 |
255 /** | 279 /** |
256 * The partially resolved [CompilationUnit] associated with a unit. | 280 * The partially resolved [CompilationUnit] associated with a unit. |
257 * | 281 * |
258 * [RESOLVED_UNIT4] plus resolved local variables and formal parameters. | 282 * [RESOLVED_UNIT4] plus resolved local variables and formal parameters. |
259 * | 283 * |
260 * The result is only available for targets representing a unit. | 284 * The result is only available for targets representing a unit. |
261 */ | 285 */ |
262 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT5 = | 286 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT5 = |
263 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT5', null); | 287 new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT5', null, |
| 288 cachingPolicy: AST_CACHING_POLICY); |
264 | 289 |
265 /** | 290 /** |
266 * The errors produced while scanning a compilation unit. | 291 * The errors produced while scanning a compilation unit. |
267 * | 292 * |
268 * The list will be empty if there were no errors, but will not be `null`. | 293 * The list will be empty if there were no errors, but will not be `null`. |
269 * | 294 * |
270 * The result is only available for targets representing a Dart compilation unit
. | 295 * The result is only available for targets representing a Dart compilation unit
. |
271 */ | 296 */ |
272 final ResultDescriptor<List<AnalysisError>> SCAN_ERRORS = | 297 final ResultDescriptor<List<AnalysisError>> SCAN_ERRORS = |
273 new ResultDescriptor<List<AnalysisError>>( | 298 new ResultDescriptor<List<AnalysisError>>( |
274 'SCAN_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS); | 299 'SCAN_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS); |
275 | 300 |
276 /** | 301 /** |
| 302 * The [ResultCachingPolicy] for [TOKEN_STREAM]. |
| 303 */ |
| 304 const ResultCachingPolicy TOKEN_STREAM_CACHING_POLICY = |
| 305 const SimpleResultCachingPolicy(1, 1); |
| 306 |
| 307 /** |
277 * The [TypeProvider] of the context. | 308 * The [TypeProvider] of the context. |
278 */ | 309 */ |
279 final ResultDescriptor<TypeProvider> TYPE_PROVIDER = | 310 final ResultDescriptor<TypeProvider> TYPE_PROVIDER = |
280 new ResultDescriptor<TypeProvider>('TYPE_PROVIDER', null); | 311 new ResultDescriptor<TypeProvider>('TYPE_PROVIDER', null); |
281 | 312 |
282 /** | 313 /** |
283 * The [UsedImportedElements] of a [LibrarySpecificUnit]. | 314 * The [UsedImportedElements] of a [LibrarySpecificUnit]. |
284 */ | 315 */ |
285 final ResultDescriptor<UsedImportedElements> USED_IMPORTED_ELEMENTS = | 316 final ResultDescriptor<UsedImportedElements> USED_IMPORTED_ELEMENTS = |
286 new ResultDescriptor<UsedImportedElements>('USED_IMPORTED_ELEMENTS', null); | 317 new ResultDescriptor<UsedImportedElements>('USED_IMPORTED_ELEMENTS', null, |
| 318 cachingPolicy: ELEMENT_CACHING_POLICY); |
287 | 319 |
288 /** | 320 /** |
289 * The [UsedLocalElements] of a [LibrarySpecificUnit]. | 321 * The [UsedLocalElements] of a [LibrarySpecificUnit]. |
290 */ | 322 */ |
291 final ResultDescriptor<UsedLocalElements> USED_LOCAL_ELEMENTS = | 323 final ResultDescriptor<UsedLocalElements> USED_LOCAL_ELEMENTS = |
292 new ResultDescriptor<UsedLocalElements>('USED_LOCAL_ELEMENTS', null); | 324 new ResultDescriptor<UsedLocalElements>('USED_LOCAL_ELEMENTS', null, |
| 325 cachingPolicy: ELEMENT_CACHING_POLICY); |
293 | 326 |
294 /** | 327 /** |
295 * The errors produced while verifying a compilation unit. | 328 * The errors produced while verifying a compilation unit. |
296 * | 329 * |
297 * The list will be empty if there were no errors, but will not be `null`. | 330 * The list will be empty if there were no errors, but will not be `null`. |
298 * | 331 * |
299 * The result is only available for targets representing a Dart compilation unit
. | 332 * The result is only available for targets representing a Dart compilation unit
. |
300 */ | 333 */ |
301 final ResultDescriptor<List<AnalysisError>> VERIFY_ERRORS = | 334 final ResultDescriptor<List<AnalysisError>> VERIFY_ERRORS = |
302 new ResultDescriptor<List<AnalysisError>>( | 335 new ResultDescriptor<List<AnalysisError>>( |
(...skipping 2403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2706 @override | 2739 @override |
2707 bool moveNext() { | 2740 bool moveNext() { |
2708 if (_newSources.isEmpty) { | 2741 if (_newSources.isEmpty) { |
2709 return false; | 2742 return false; |
2710 } | 2743 } |
2711 currentTarget = _newSources.first; | 2744 currentTarget = _newSources.first; |
2712 _newSources.remove(currentTarget); | 2745 _newSources.remove(currentTarget); |
2713 return true; | 2746 return true; |
2714 } | 2747 } |
2715 } | 2748 } |
OLD | NEW |