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/src/context/cache.dart'; | 9 import 'package:analyzer/src/context/cache.dart'; |
10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
301 * | 301 * |
302 * [LIBRARY_ELEMENT6] for the library and its import/export closure. | 302 * [LIBRARY_ELEMENT6] for the library and its import/export closure. |
303 * | 303 * |
304 * The result is only available for [Source]s representing a library. | 304 * The result is only available for [Source]s representing a library. |
305 */ | 305 */ |
306 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT7 = | 306 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT7 = |
307 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT7', null, | 307 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT7', null, |
308 cachingPolicy: ELEMENT_CACHING_POLICY); | 308 cachingPolicy: ELEMENT_CACHING_POLICY); |
309 | 309 |
310 /** | 310 /** |
311 * The partial [LibraryElement] associated with a library. | |
312 * | |
313 * The same as a [LIBRARY_ELEMENT7]. | |
Paul Berry
2015/11/30 20:44:35
Next time I'm in the office I'd like to better und
Brian Wilkerson
2015/11/30 21:35:39
Good question. I was assuming that there was a dis
| |
314 * | |
315 * The result is only available for [Source]s representing a library. | |
316 */ | |
317 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT8 = | |
318 new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT8', null, | |
319 cachingPolicy: ELEMENT_CACHING_POLICY); | |
320 | |
321 /** | |
311 * The flag specifying whether all analysis errors are computed in a specific | 322 * The flag specifying whether all analysis errors are computed in a specific |
312 * library. | 323 * library. |
313 * | 324 * |
314 * The result is only available for [Source]s representing a library. | 325 * The result is only available for [Source]s representing a library. |
315 */ | 326 */ |
316 final ResultDescriptor<bool> LIBRARY_ERRORS_READY = | 327 final ResultDescriptor<bool> LIBRARY_ERRORS_READY = |
317 new ResultDescriptor<bool>('LIBRARY_ERRORS_READY', false); | 328 new ResultDescriptor<bool>('LIBRARY_ERRORS_READY', false); |
318 | 329 |
319 /** | 330 /** |
320 * The [LibrarySpecificUnit]s that a library consists of. | 331 * The [LibrarySpecificUnit]s that a library consists of. |
(...skipping 2089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2410 } | 2421 } |
2411 | 2422 |
2412 /** | 2423 /** |
2413 * Return a map from the names of the inputs of this kind of task to the task | 2424 * Return a map from the names of the inputs of this kind of task to the task |
2414 * input descriptors describing those inputs for a task with the | 2425 * input descriptors describing those inputs for a task with the |
2415 * given [target]. | 2426 * given [target]. |
2416 */ | 2427 */ |
2417 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { | 2428 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { |
2418 LibrarySpecificUnit unit = target; | 2429 LibrarySpecificUnit unit = target; |
2419 return <String, TaskInput>{ | 2430 return <String, TaskInput>{ |
2420 'libraryElement': LIBRARY_ELEMENT.of(unit.library), | 2431 'libraryElement': LIBRARY_ELEMENT8.of(unit.library), |
2421 UNIT_INPUT: RESOLVED_UNIT10.of(unit), | 2432 UNIT_INPUT: RESOLVED_UNIT10.of(unit), |
2422 CONSTANT_VALUES: | 2433 CONSTANT_VALUES: |
2423 COMPILATION_UNIT_CONSTANTS.of(unit).toListOf(CONSTANT_VALUE) | 2434 COMPILATION_UNIT_CONSTANTS.of(unit).toListOf(CONSTANT_VALUE) |
2424 }; | 2435 }; |
2425 } | 2436 } |
2426 | 2437 |
2427 /** | 2438 /** |
2428 * Create an [EvaluateUnitConstantsTask] based on the given [target] in | 2439 * Create an [EvaluateUnitConstantsTask] based on the given [target] in |
2429 * the given [context]. | 2440 * the given [context]. |
2430 */ | 2441 */ |
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3220 } | 3231 } |
3221 | 3232 |
3222 /** | 3233 /** |
3223 * Return a map from the names of the inputs of this kind of task to the task | 3234 * Return a map from the names of the inputs of this kind of task to the task |
3224 * input descriptors describing those inputs for a task with the | 3235 * input descriptors describing those inputs for a task with the |
3225 * given [target]. | 3236 * given [target]. |
3226 */ | 3237 */ |
3227 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { | 3238 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { |
3228 Source source = target; | 3239 Source source = target; |
3229 return <String, TaskInput>{ | 3240 return <String, TaskInput>{ |
3230 'allErrors': UNITS.of(source).toListOf(DART_ERRORS) | 3241 'allErrors': UNITS.of(source).toListOf(DART_ERRORS), |
3242 'libraryElement': LIBRARY_ELEMENT.of(source) | |
3231 }; | 3243 }; |
3232 } | 3244 } |
3233 | 3245 |
3234 /** | 3246 /** |
3235 * Create a [LibraryErrorsReadyTask] based on the given [target] in the given | 3247 * Create a [LibraryErrorsReadyTask] based on the given [target] in the given |
3236 * [context]. | 3248 * [context]. |
3237 */ | 3249 */ |
3238 static LibraryErrorsReadyTask createTask( | 3250 static LibraryErrorsReadyTask createTask( |
3239 AnalysisContext context, AnalysisTarget target) { | 3251 AnalysisContext context, AnalysisTarget target) { |
3240 return new LibraryErrorsReadyTask(context, target); | 3252 return new LibraryErrorsReadyTask(context, target); |
(...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4451 * the given [context]. | 4463 * the given [context]. |
4452 */ | 4464 */ |
4453 static ResolveInstanceFieldsInUnitTask createTask( | 4465 static ResolveInstanceFieldsInUnitTask createTask( |
4454 AnalysisContext context, AnalysisTarget target) { | 4466 AnalysisContext context, AnalysisTarget target) { |
4455 return new ResolveInstanceFieldsInUnitTask(context, target); | 4467 return new ResolveInstanceFieldsInUnitTask(context, target); |
4456 } | 4468 } |
4457 } | 4469 } |
4458 | 4470 |
4459 /** | 4471 /** |
4460 * A task that finishes resolution by requesting [RESOLVED_UNIT10] for every | 4472 * A task that finishes resolution by requesting [RESOLVED_UNIT10] for every |
4461 * unit in the libraries closure and produces [LIBRARY_ELEMENT]. | 4473 * unit in the libraries closure and produces [LIBRARY_ELEMENT8]. |
4462 */ | 4474 */ |
4463 class ResolveLibraryReferencesTask extends SourceBasedAnalysisTask { | 4475 class ResolveLibraryReferencesTask extends SourceBasedAnalysisTask { |
4464 /** | 4476 /** |
4465 * The name of the [LIBRARY_ELEMENT5] input. | 4477 * The name of the [LIBRARY_ELEMENT7] input. |
4466 */ | 4478 */ |
4467 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; | 4479 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; |
4468 | 4480 |
4469 /** | 4481 /** |
4470 * The name of the list of [RESOLVED_UNIT10] input. | 4482 * The name of the list of [RESOLVED_UNIT10] input. |
4471 */ | 4483 */ |
4472 static const String UNITS_INPUT = 'UNITS_INPUT'; | 4484 static const String UNITS_INPUT = 'UNITS_INPUT'; |
4473 | 4485 |
4474 /** | 4486 /** |
4475 * The task descriptor describing this kind of task. | 4487 * The task descriptor describing this kind of task. |
4476 */ | 4488 */ |
4477 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( | 4489 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( |
4478 'ResolveLibraryReferencesTask', | 4490 'ResolveLibraryReferencesTask', |
4479 createTask, | 4491 createTask, |
4480 buildInputs, | 4492 buildInputs, |
4481 <ResultDescriptor>[LIBRARY_ELEMENT, REFERENCED_NAMES]); | 4493 <ResultDescriptor>[LIBRARY_ELEMENT8, REFERENCED_NAMES]); |
4482 | 4494 |
4483 ResolveLibraryReferencesTask( | 4495 ResolveLibraryReferencesTask( |
4484 InternalAnalysisContext context, AnalysisTarget target) | 4496 InternalAnalysisContext context, AnalysisTarget target) |
4485 : super(context, target); | 4497 : super(context, target); |
4486 | 4498 |
4487 @override | 4499 @override |
4488 TaskDescriptor get descriptor => DESCRIPTOR; | 4500 TaskDescriptor get descriptor => DESCRIPTOR; |
4489 | 4501 |
4490 @override | 4502 @override |
4491 void internalPerform() { | 4503 void internalPerform() { |
4492 // | 4504 // |
4493 // Prepare inputs. | 4505 // Prepare inputs. |
4494 // | 4506 // |
4495 LibraryElement library = getRequiredInput(LIBRARY_INPUT); | 4507 LibraryElement library = getRequiredInput(LIBRARY_INPUT); |
4496 List<CompilationUnit> units = getRequiredInput(UNITS_INPUT); | 4508 List<CompilationUnit> units = getRequiredInput(UNITS_INPUT); |
4497 // Compute referenced names. | 4509 // Compute referenced names. |
4498 ReferencedNames referencedNames = new ReferencedNames(); | 4510 ReferencedNames referencedNames = new ReferencedNames(); |
4499 for (CompilationUnit unit in units) { | 4511 for (CompilationUnit unit in units) { |
4500 new ReferencedNamesBuilder(referencedNames).build(unit); | 4512 new ReferencedNamesBuilder(referencedNames).build(unit); |
4501 } | 4513 } |
4502 // | 4514 // |
4503 // Record outputs. | 4515 // Record outputs. |
4504 // | 4516 // |
4505 outputs[LIBRARY_ELEMENT] = library; | 4517 outputs[LIBRARY_ELEMENT8] = library; |
4506 outputs[REFERENCED_NAMES] = referencedNames; | 4518 outputs[REFERENCED_NAMES] = referencedNames; |
4507 } | 4519 } |
4508 | 4520 |
4509 /** | 4521 /** |
4510 * Return a map from the names of the inputs of this kind of task to the task | 4522 * Return a map from the names of the inputs of this kind of task to the task |
4511 * input descriptors describing those inputs for a task with the | 4523 * input descriptors describing those inputs for a task with the |
4512 * given [target]. | 4524 * given [target]. |
4513 */ | 4525 */ |
4514 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { | 4526 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { |
4515 Source source = target; | 4527 Source source = target; |
4516 return <String, TaskInput>{ | 4528 return <String, TaskInput>{ |
4517 LIBRARY_INPUT: LIBRARY_ELEMENT5.of(source), | 4529 LIBRARY_INPUT: LIBRARY_ELEMENT7.of(source), |
4518 UNITS_INPUT: LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT10), | 4530 UNITS_INPUT: LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT10), |
4519 'thisLibraryClosureIsReady': READY_RESOLVED_UNIT10.of(source), | 4531 'thisLibraryClosureIsReady': READY_RESOLVED_UNIT10.of(source), |
4520 }; | 4532 }; |
4521 } | 4533 } |
4522 | 4534 |
4523 /** | 4535 /** |
4524 * Create a [ResolveLibraryReferencesTask] based on the given [target] in | 4536 * Create a [ResolveLibraryReferencesTask] based on the given [target] in |
4525 * the given [context]. | 4537 * the given [context]. |
4526 */ | 4538 */ |
4527 static ResolveLibraryReferencesTask createTask( | 4539 static ResolveLibraryReferencesTask createTask( |
4528 AnalysisContext context, AnalysisTarget target) { | 4540 AnalysisContext context, AnalysisTarget target) { |
4529 return new ResolveLibraryReferencesTask(context, target); | 4541 return new ResolveLibraryReferencesTask(context, target); |
4530 } | 4542 } |
4531 } | 4543 } |
4532 | 4544 |
4533 /** | 4545 /** |
4546 * A task that finishes resolution by requesting [RESOLVED_UNIT11] for every | |
4547 * unit in the libraries closure and produces [LIBRARY_ELEMENT]. | |
4548 */ | |
4549 class ResolveLibraryTask extends SourceBasedAnalysisTask { | |
4550 /** | |
4551 * The name of the [LIBRARY_ELEMENT8] input. | |
4552 */ | |
4553 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; | |
4554 | |
4555 /** | |
4556 * The name of the list of [RESOLVED_UNIT11] input. | |
4557 */ | |
4558 static const String UNITS_INPUT = 'UNITS_INPUT'; | |
4559 | |
4560 /** | |
4561 * The task descriptor describing this kind of task. | |
4562 */ | |
4563 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( | |
4564 'ResolveLibraryTask', | |
4565 createTask, | |
4566 buildInputs, | |
4567 <ResultDescriptor>[LIBRARY_ELEMENT]); | |
4568 | |
4569 ResolveLibraryTask(InternalAnalysisContext context, AnalysisTarget target) | |
4570 : super(context, target); | |
4571 | |
4572 @override | |
4573 TaskDescriptor get descriptor => DESCRIPTOR; | |
4574 | |
4575 @override | |
4576 void internalPerform() { | |
4577 // | |
4578 // Prepare inputs. | |
4579 // | |
4580 LibraryElement library = getRequiredInput(LIBRARY_INPUT); | |
4581 // | |
4582 // Record outputs. | |
4583 // | |
4584 outputs[LIBRARY_ELEMENT] = library; | |
4585 } | |
4586 | |
4587 /** | |
4588 * Return a map from the names of the inputs of this kind of task to the task | |
4589 * input descriptors describing those inputs for a task with the | |
4590 * given [target]. | |
4591 */ | |
4592 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { | |
4593 Source source = target; | |
4594 return <String, TaskInput>{ | |
4595 LIBRARY_INPUT: LIBRARY_ELEMENT8.of(source), | |
4596 'thisLibraryClosureIsReady': READY_RESOLVED_UNIT.of(source), | |
4597 }; | |
4598 } | |
4599 | |
4600 /** | |
4601 * Create a [ResolveLibraryTask] based on the given [target] in the given | |
4602 * [context]. | |
4603 */ | |
4604 static ResolveLibraryTask createTask( | |
4605 AnalysisContext context, AnalysisTarget target) { | |
4606 return new ResolveLibraryTask(context, target); | |
4607 } | |
4608 } | |
4609 | |
4610 /** | |
4534 * An artificial task that does nothing except to force type names resolution | 4611 * An artificial task that does nothing except to force type names resolution |
4535 * for the defining and part units of a library. | 4612 * for the defining and part units of a library. |
4536 */ | 4613 */ |
4537 class ResolveLibraryTypeNamesTask extends SourceBasedAnalysisTask { | 4614 class ResolveLibraryTypeNamesTask extends SourceBasedAnalysisTask { |
4538 /** | 4615 /** |
4539 * The name of the [LIBRARY_ELEMENT4] input. | 4616 * The name of the [LIBRARY_ELEMENT4] input. |
4540 */ | 4617 */ |
4541 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; | 4618 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; |
4542 | 4619 |
4543 /** | 4620 /** |
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5282 | 5359 |
5283 @override | 5360 @override |
5284 bool moveNext() { | 5361 bool moveNext() { |
5285 if (_newSources.isEmpty) { | 5362 if (_newSources.isEmpty) { |
5286 return false; | 5363 return false; |
5287 } | 5364 } |
5288 currentTarget = _newSources.removeLast(); | 5365 currentTarget = _newSources.removeLast(); |
5289 return true; | 5366 return true; |
5290 } | 5367 } |
5291 } | 5368 } |
OLD | NEW |