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

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

Issue 1412273004: Ensure that RESOLVED_UNITx ready once for every library. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « pkg/analyzer/lib/src/plugin/engine_plugin.dart ('k') | pkg/analyzer/lib/src/task/driver.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 * 340 *
341 * The list will be empty if there were no errors, but will not be `null`. 341 * The list will be empty if there were no errors, but will not be `null`.
342 * 342 *
343 * The result is only available for [Source]s representing a compilation unit. 343 * The result is only available for [Source]s representing a compilation unit.
344 */ 344 */
345 final ListResultDescriptor<AnalysisError> PARSE_ERRORS = 345 final ListResultDescriptor<AnalysisError> PARSE_ERRORS =
346 new ListResultDescriptor<AnalysisError>( 346 new ListResultDescriptor<AnalysisError>(
347 'PARSE_ERRORS', AnalysisError.NO_ERRORS); 347 'PARSE_ERRORS', AnalysisError.NO_ERRORS);
348 348
349 /** 349 /**
350 * The flag specifying that [RESOLVED_UNIT] is ready for a library.
351 *
352 * The result is only available for [Source]s representing a library.
353 */
354 final ResultDescriptor<bool> READY_RESOLVED_UNIT =
355 new ResultDescriptor<bool>('READY_RESOLVED_UNIT', false);
356
357 /**
358 * The flag specifying that [RESOLVED_UNIT10] is ready for a library.
359 *
360 * The result is only available for [Source]s representing a library.
361 */
362 final ResultDescriptor<bool> READY_RESOLVED_UNIT10 =
363 new ResultDescriptor<bool>('READY_RESOLVED_UNIT10', false);
364
365 /**
366 * The flag specifying that [RESOLVED_UNIT9] is ready for a library.
367 *
368 * The result is only available for [Source]s representing a library.
369 */
370 final ResultDescriptor<bool> READY_RESOLVED_UNIT9 =
371 new ResultDescriptor<bool>('READY_RESOLVED_UNIT9', false);
372
373 /**
350 * The names (resolved and not) referenced by a unit. 374 * The names (resolved and not) referenced by a unit.
351 * 375 *
352 * The result is only available for [Source]s representing a compilation unit. 376 * The result is only available for [Source]s representing a compilation unit.
353 */ 377 */
354 final ResultDescriptor<ReferencedNames> REFERENCED_NAMES = 378 final ResultDescriptor<ReferencedNames> REFERENCED_NAMES =
355 new ResultDescriptor<ReferencedNames>('REFERENCED_NAMES', null); 379 new ResultDescriptor<ReferencedNames>('REFERENCED_NAMES', null);
356 380
357 /** 381 /**
358 * The errors produced while resolving type names. 382 * The errors produced while resolving type names.
359 * 383 *
(...skipping 3154 matching lines...) Expand 10 before | Expand all | Expand 10 after
3514 void _addPublicNames(CompilationUnitElement compilationUnit) { 3538 void _addPublicNames(CompilationUnitElement compilationUnit) {
3515 compilationUnit.accessors.forEach(_addIfPublic); 3539 compilationUnit.accessors.forEach(_addIfPublic);
3516 compilationUnit.enums.forEach(_addIfPublic); 3540 compilationUnit.enums.forEach(_addIfPublic);
3517 compilationUnit.functions.forEach(_addIfPublic); 3541 compilationUnit.functions.forEach(_addIfPublic);
3518 compilationUnit.functionTypeAliases.forEach(_addIfPublic); 3542 compilationUnit.functionTypeAliases.forEach(_addIfPublic);
3519 compilationUnit.types.forEach(_addIfPublic); 3543 compilationUnit.types.forEach(_addIfPublic);
3520 } 3544 }
3521 } 3545 }
3522 3546
3523 /** 3547 /**
3548 * A task that ensures that [RESOLVED_UNIT10] is ready for every unit of the
3549 * target library source and its import/export closure.
3550 */
3551 class ReadyResolvedUnit10Task extends SourceBasedAnalysisTask {
3552 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3553 'ReadyResolvedUnit10Task',
3554 createTask,
3555 buildInputs,
3556 <ResultDescriptor>[READY_RESOLVED_UNIT10]);
3557
3558 ReadyResolvedUnit10Task(
3559 InternalAnalysisContext context, AnalysisTarget target)
3560 : super(context, target);
3561
3562 @override
3563 TaskDescriptor get descriptor => DESCRIPTOR;
3564
3565 @override
3566 bool get handlesDependencyCycles => true;
3567
3568 @override
3569 void internalPerform() {
3570 outputs[READY_RESOLVED_UNIT10] = true;
3571 }
3572
3573 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3574 Source source = target;
3575 return <String, TaskInput>{
3576 'thisLibraryUnitsReady':
3577 LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT10),
3578 'directlyImportedLibrariesReady':
3579 IMPORTED_LIBRARIES.of(source).toListOf(READY_RESOLVED_UNIT10),
3580 'directlyExportedLibrariesReady':
3581 EXPORTED_LIBRARIES.of(source).toListOf(READY_RESOLVED_UNIT10),
3582 };
3583 }
3584
3585 static ReadyResolvedUnit10Task createTask(
3586 AnalysisContext context, AnalysisTarget target) {
3587 return new ReadyResolvedUnit10Task(context, target);
3588 }
3589 }
3590
3591 /**
3592 * A task that ensures that [RESOLVED_UNIT9] is ready for every unit of the
3593 * target library source and its import/export closure.
3594 */
3595 class ReadyResolvedUnit9Task extends SourceBasedAnalysisTask {
3596 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3597 'ReadyResolvedUnit9Task',
3598 createTask,
3599 buildInputs,
3600 <ResultDescriptor>[READY_RESOLVED_UNIT9]);
3601
3602 ReadyResolvedUnit9Task(InternalAnalysisContext context, AnalysisTarget target)
3603 : super(context, target);
3604
3605 @override
3606 TaskDescriptor get descriptor => DESCRIPTOR;
3607
3608 @override
3609 bool get handlesDependencyCycles => true;
3610
3611 @override
3612 void internalPerform() {
3613 outputs[READY_RESOLVED_UNIT9] = true;
3614 }
3615
3616 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3617 Source source = target;
3618 return <String, TaskInput>{
3619 'thisLibraryUnitsReady':
3620 LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT9),
3621 'directlyImportedLibrariesReady':
3622 IMPORTED_LIBRARIES.of(source).toListOf(READY_RESOLVED_UNIT9),
3623 'directlyExportedLibrariesReady':
3624 EXPORTED_LIBRARIES.of(source).toListOf(READY_RESOLVED_UNIT9),
3625 };
3626 }
3627
3628 static ReadyResolvedUnit9Task createTask(
3629 AnalysisContext context, AnalysisTarget target) {
3630 return new ReadyResolvedUnit9Task(context, target);
3631 }
3632 }
3633
3634 /**
3635 * A task that ensures that [RESOLVED_UNIT] is ready for every unit of the
3636 * target library source and its import/export closure.
3637 */
3638 class ReadyResolvedUnitTask extends SourceBasedAnalysisTask {
3639 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3640 'ReadyResolvedUnitTask',
3641 createTask,
3642 buildInputs,
3643 <ResultDescriptor>[READY_RESOLVED_UNIT]);
3644
3645 ReadyResolvedUnitTask(InternalAnalysisContext context, AnalysisTarget target)
3646 : super(context, target);
3647
3648 @override
3649 TaskDescriptor get descriptor => DESCRIPTOR;
3650
3651 @override
3652 bool get handlesDependencyCycles => true;
3653
3654 @override
3655 void internalPerform() {
3656 outputs[READY_RESOLVED_UNIT] = true;
3657 }
3658
3659 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3660 Source source = target;
3661 return <String, TaskInput>{
3662 'thisLibraryUnitsReady':
3663 LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT),
3664 'directlyImportedLibrariesReady':
3665 IMPORTED_LIBRARIES.of(source).toListOf(READY_RESOLVED_UNIT),
3666 'directlyExportedLibrariesReady':
3667 EXPORTED_LIBRARIES.of(source).toListOf(READY_RESOLVED_UNIT),
3668 };
3669 }
3670
3671 static ReadyResolvedUnitTask createTask(
3672 AnalysisContext context, AnalysisTarget target) {
3673 return new ReadyResolvedUnitTask(context, target);
3674 }
3675 }
3676
3677 /**
3524 * Information about a library - which names it uses, which names it defines 3678 * Information about a library - which names it uses, which names it defines
3525 * with their externally visible dependencies. 3679 * with their externally visible dependencies.
3526 */ 3680 */
3527 class ReferencedNames { 3681 class ReferencedNames {
3528 final Set<String> names = new Set<String>(); 3682 final Set<String> names = new Set<String>();
3529 final Map<String, Set<String>> userToDependsOn = <String, Set<String>>{}; 3683 final Map<String, Set<String>> userToDependsOn = <String, Set<String>>{};
3530 3684
3531 /** 3685 /**
3532 * Updates [delta] by adding names that are changed in this library. 3686 * Updates [delta] by adding names that are changed in this library.
3533 */ 3687 */
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
3728 * Create a [ResolveInstanceFieldsInUnitTask] based on the given [target] in 3882 * Create a [ResolveInstanceFieldsInUnitTask] based on the given [target] in
3729 * the given [context]. 3883 * the given [context].
3730 */ 3884 */
3731 static ResolveInstanceFieldsInUnitTask createTask( 3885 static ResolveInstanceFieldsInUnitTask createTask(
3732 AnalysisContext context, AnalysisTarget target) { 3886 AnalysisContext context, AnalysisTarget target) {
3733 return new ResolveInstanceFieldsInUnitTask(context, target); 3887 return new ResolveInstanceFieldsInUnitTask(context, target);
3734 } 3888 }
3735 } 3889 }
3736 3890
3737 /** 3891 /**
3738 * A task that finishes resolution by requesting [RESOLVED_UNIT_NO_CONSTANTS] fo r every 3892 * A task that finishes resolution by requesting [RESOLVED_UNIT9] for every
3739 * unit in the libraries closure and produces [LIBRARY_ELEMENT]. 3893 * unit in the libraries closure and produces [LIBRARY_ELEMENT].
3740 */ 3894 */
3741 class ResolveLibraryReferencesTask extends SourceBasedAnalysisTask { 3895 class ResolveLibraryReferencesTask extends SourceBasedAnalysisTask {
3742 /** 3896 /**
3743 * The name of the [LIBRARY_ELEMENT5] input. 3897 * The name of the [LIBRARY_ELEMENT5] input.
3744 */ 3898 */
3745 static const String LIBRARY_INPUT = 'LIBRARY_INPUT'; 3899 static const String LIBRARY_INPUT = 'LIBRARY_INPUT';
3746 3900
3747 /** 3901 /**
3748 * The name of the list of [RESOLVED_UNIT9] input. 3902 * The name of the list of [RESOLVED_UNIT9] input.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3787 /** 3941 /**
3788 * Return a map from the names of the inputs of this kind of task to the task 3942 * Return a map from the names of the inputs of this kind of task to the task
3789 * input descriptors describing those inputs for a task with the 3943 * input descriptors describing those inputs for a task with the
3790 * given [target]. 3944 * given [target].
3791 */ 3945 */
3792 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 3946 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
3793 Source source = target; 3947 Source source = target;
3794 return <String, TaskInput>{ 3948 return <String, TaskInput>{
3795 LIBRARY_INPUT: LIBRARY_ELEMENT5.of(source), 3949 LIBRARY_INPUT: LIBRARY_ELEMENT5.of(source),
3796 UNITS_INPUT: LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT9), 3950 UNITS_INPUT: LIBRARY_SPECIFIC_UNITS.of(source).toListOf(RESOLVED_UNIT9),
3797 'resolvedUnits': IMPORT_EXPORT_SOURCE_CLOSURE 3951 'thisLibraryClosureIsReady': READY_RESOLVED_UNIT9.of(source),
3798 .of(source)
3799 .toFlattenListOf(LIBRARY_SPECIFIC_UNITS)
3800 .toListOf(RESOLVED_UNIT9),
3801 }; 3952 };
3802 } 3953 }
3803 3954
3804 /** 3955 /**
3805 * Create a [ResolveLibraryReferencesTask] based on the given [target] in 3956 * Create a [ResolveLibraryReferencesTask] based on the given [target] in
3806 * the given [context]. 3957 * the given [context].
3807 */ 3958 */
3808 static ResolveLibraryReferencesTask createTask( 3959 static ResolveLibraryReferencesTask createTask(
3809 AnalysisContext context, AnalysisTarget target) { 3960 AnalysisContext context, AnalysisTarget target) {
3810 return new ResolveLibraryReferencesTask(context, target); 3961 return new ResolveLibraryReferencesTask(context, target);
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
4313 } 4464 }
4314 4465
4315 /** 4466 /**
4316 * Return a map from the names of the inputs of this kind of task to the task 4467 * Return a map from the names of the inputs of this kind of task to the task
4317 * input descriptors describing those inputs for a task with the 4468 * input descriptors describing those inputs for a task with the
4318 * given [target]. 4469 * given [target].
4319 */ 4470 */
4320 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 4471 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4321 LibrarySpecificUnit unit = target; 4472 LibrarySpecificUnit unit = target;
4322 return <String, TaskInput>{ 4473 return <String, TaskInput>{
4323 'resolvedUnits': IMPORT_EXPORT_SOURCE_CLOSURE
4324 .of(unit.library)
4325 .toFlattenListOf(LIBRARY_SPECIFIC_UNITS)
4326 .toListOf(RESOLVED_UNIT10),
4327 UNIT_INPUT: RESOLVED_UNIT10.of(unit), 4474 UNIT_INPUT: RESOLVED_UNIT10.of(unit),
4328 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request) 4475 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request),
4476 'thisLibraryClosureIsReady': READY_RESOLVED_UNIT10.of(unit.library),
4329 }; 4477 };
4330 } 4478 }
4331 4479
4332 /** 4480 /**
4333 * Create a [StrongModeVerifyUnitTask] based on the given [target] in 4481 * Create a [StrongModeVerifyUnitTask] based on the given [target] in
4334 * the given [context]. 4482 * the given [context].
4335 */ 4483 */
4336 static StrongModeVerifyUnitTask createTask( 4484 static StrongModeVerifyUnitTask createTask(
4337 AnalysisContext context, AnalysisTarget target) { 4485 AnalysisContext context, AnalysisTarget target) {
4338 return new StrongModeVerifyUnitTask(context, target); 4486 return new StrongModeVerifyUnitTask(context, target);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
4443 } 4591 }
4444 4592
4445 /** 4593 /**
4446 * Return a map from the names of the inputs of this kind of task to the task 4594 * Return a map from the names of the inputs of this kind of task to the task
4447 * input descriptors describing those inputs for a task with the 4595 * input descriptors describing those inputs for a task with the
4448 * given [target]. 4596 * given [target].
4449 */ 4597 */
4450 static Map<String, TaskInput> buildInputs(AnalysisTarget target) { 4598 static Map<String, TaskInput> buildInputs(AnalysisTarget target) {
4451 LibrarySpecificUnit unit = target; 4599 LibrarySpecificUnit unit = target;
4452 return <String, TaskInput>{ 4600 return <String, TaskInput>{
4453 'resolvedUnits': IMPORT_EXPORT_SOURCE_CLOSURE 4601 'thisLibraryClosureIsReady': READY_RESOLVED_UNIT.of(unit.library),
4454 .of(unit.library)
4455 .toFlattenListOf(LIBRARY_SPECIFIC_UNITS)
4456 .toListOf(RESOLVED_UNIT),
4457 UNIT_INPUT: RESOLVED_UNIT.of(unit), 4602 UNIT_INPUT: RESOLVED_UNIT.of(unit),
4458 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request) 4603 TYPE_PROVIDER_INPUT: TYPE_PROVIDER.of(AnalysisContextTarget.request)
4459 }; 4604 };
4460 } 4605 }
4461 4606
4462 /** 4607 /**
4463 * Create a [VerifyUnitTask] based on the given [target] in 4608 * Create a [VerifyUnitTask] based on the given [target] in
4464 * the given [context]. 4609 * the given [context].
4465 */ 4610 */
4466 static VerifyUnitTask createTask( 4611 static VerifyUnitTask createTask(
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
4592 4737
4593 @override 4738 @override
4594 bool moveNext() { 4739 bool moveNext() {
4595 if (_newSources.isEmpty) { 4740 if (_newSources.isEmpty) {
4596 return false; 4741 return false;
4597 } 4742 }
4598 currentTarget = _newSources.removeLast(); 4743 currentTarget = _newSources.removeLast();
4599 return true; 4744 return true;
4600 } 4745 }
4601 } 4746 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/plugin/engine_plugin.dart ('k') | pkg/analyzer/lib/src/task/driver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698