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'; |
| 11 import 'package:analyzer/src/generated/constant.dart'; | |
| 11 import 'package:analyzer/src/generated/element.dart'; | 12 import 'package:analyzer/src/generated/element.dart'; |
| 12 import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask; | 13 import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask; |
| 13 import 'package:analyzer/src/generated/error.dart'; | 14 import 'package:analyzer/src/generated/error.dart'; |
| 14 import 'package:analyzer/src/generated/error_verifier.dart'; | 15 import 'package:analyzer/src/generated/error_verifier.dart'; |
| 15 import 'package:analyzer/src/generated/java_engine.dart'; | 16 import 'package:analyzer/src/generated/java_engine.dart'; |
| 16 import 'package:analyzer/src/generated/parser.dart'; | 17 import 'package:analyzer/src/generated/parser.dart'; |
| 17 import 'package:analyzer/src/generated/resolver.dart'; | 18 import 'package:analyzer/src/generated/resolver.dart'; |
| 18 import 'package:analyzer/src/generated/scanner.dart'; | 19 import 'package:analyzer/src/generated/scanner.dart'; |
| 19 import 'package:analyzer/src/generated/sdk.dart'; | 20 import 'package:analyzer/src/generated/sdk.dart'; |
| 20 import 'package:analyzer/src/generated/source.dart'; | 21 import 'package:analyzer/src/generated/source.dart'; |
| (...skipping 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1633 /** | 1634 /** |
| 1634 * Create a [BuildTypeProviderTask] based on the given [context]. | 1635 * Create a [BuildTypeProviderTask] based on the given [context]. |
| 1635 */ | 1636 */ |
| 1636 static BuildTypeProviderTask createTask( | 1637 static BuildTypeProviderTask createTask( |
| 1637 AnalysisContext context, AnalysisContextTarget target) { | 1638 AnalysisContext context, AnalysisContextTarget target) { |
| 1638 return new BuildTypeProviderTask(context, target); | 1639 return new BuildTypeProviderTask(context, target); |
| 1639 } | 1640 } |
| 1640 } | 1641 } |
| 1641 | 1642 |
| 1642 /** | 1643 /** |
| 1644 * A task that computes [CONSTANT_DEPENDENCIES] for a constant. | |
| 1645 */ | |
| 1646 class ComputeConstantDependenciesTask extends AnalysisTask { | |
| 1647 /** | |
| 1648 * The name of the [RESOLVED_UNIT] input. | |
| 1649 */ | |
| 1650 static const String UNIT_INPUT = 'UNIT_INPUT'; | |
|
Brian Wilkerson
2015/05/07 22:46:59
Perhaps "RESOLVED_UNIT_INPUT" to be consistent?
Paul Berry
2015/05/08 00:24:35
Personally I don't see much benefit in the longer
| |
| 1651 | |
| 1652 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( | |
| 1653 'ComputeConstantDependenciesTask', createTask, buildInputs, | |
| 1654 <ResultDescriptor>[CONSTANT_DEPENDENCIES]); | |
| 1655 | |
| 1656 ComputeConstantDependenciesTask( | |
| 1657 InternalAnalysisContext context, AnalysisTarget target) | |
| 1658 : super(context, target); | |
| 1659 | |
| 1660 @override | |
| 1661 String get description { | |
| 1662 Source source = target.source; | |
| 1663 String sourceName = source == null ? '<unknown source>' : source.fullName; | |
| 1664 return '${descriptor.name} for element $target in source $sourceName'; | |
| 1665 } | |
| 1666 | |
| 1667 @override | |
| 1668 TaskDescriptor get descriptor => DESCRIPTOR; | |
| 1669 | |
| 1670 @override | |
| 1671 void internalPerform() { | |
| 1672 // | |
| 1673 // Prepare inputs. | |
| 1674 // | |
| 1675 // Note: UNIT_INPUT is not needed. It is merely a bookkeeping dependency | |
| 1676 // to ensure that resolution has occurred before we attempto to determine | |
|
Brian Wilkerson
2015/05/07 22:46:59
"attempto" --> "attempt to"
scheglov
2015/05/07 22:52:09
attempto -> attempt
Paul Berry
2015/05/08 00:24:35
Done.
| |
| 1677 // constant dependencies. | |
| 1678 // | |
| 1679 Element element = target; | |
| 1680 AnalysisContext context = element.context; | |
| 1681 TypeProvider typeProvider = context.typeProvider; | |
|
Brian Wilkerson
2015/05/07 22:46:59
I believe that you want to have a TYPE_PROVIDER in
Paul Berry
2015/05/08 00:24:35
Hmm, I believe you are right, since some analysis
scheglov
2015/05/08 03:53:00
I don't think we want to request all information w
Brian Wilkerson
2015/05/08 14:11:29
But not doing so could (although I admit the proba
scheglov
2015/05/08 15:14:36
No, there isn't.
Just consistency.
| |
| 1682 // | |
| 1683 // Compute dependencies. | |
| 1684 // | |
| 1685 List<Element> dependencies = <Element>[]; | |
| 1686 new ConstantEvaluationEngine(typeProvider, context.declaredVariables) | |
| 1687 .computeDependencies(element, dependencies.add); | |
| 1688 // | |
| 1689 // Record outputs. | |
| 1690 // | |
| 1691 outputs[CONSTANT_DEPENDENCIES] = dependencies; | |
| 1692 } | |
| 1693 | |
| 1694 /** | |
| 1695 * Return a map from the names of the inputs of this kind of task to the task | |
| 1696 * input descriptors describing those inputs for a task with the | |
| 1697 * given [target]. | |
| 1698 */ | |
| 1699 static Map<String, TaskInput> buildInputs(Element target) { | |
| 1700 return <String, TaskInput>{ | |
| 1701 UNIT_INPUT: RESOLVED_UNIT | |
| 1702 .of(new LibrarySpecificUnit(target.library.source, target.source)) | |
| 1703 }; | |
| 1704 } | |
| 1705 | |
| 1706 /** | |
| 1707 * Create a [ResolveReferencesTask] based on the given [target] in | |
| 1708 * the given [context]. | |
| 1709 */ | |
| 1710 static ComputeConstantDependenciesTask createTask( | |
| 1711 AnalysisContext context, AnalysisTarget target) { | |
| 1712 return new ComputeConstantDependenciesTask(context, target); | |
| 1713 } | |
| 1714 } | |
| 1715 | |
| 1716 /** | |
| 1643 * A task that computes a list of the libraries containing the target source. | 1717 * A task that computes a list of the libraries containing the target source. |
| 1644 */ | 1718 */ |
| 1645 class ContainingLibrariesTask extends SourceBasedAnalysisTask { | 1719 class ContainingLibrariesTask extends SourceBasedAnalysisTask { |
| 1646 /** | 1720 /** |
| 1647 * The task descriptor describing this kind of task. | 1721 * The task descriptor describing this kind of task. |
| 1648 */ | 1722 */ |
| 1649 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( | 1723 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( |
| 1650 'ContainingLibrariesTask', createTask, buildInputs, | 1724 'ContainingLibrariesTask', createTask, buildInputs, |
| 1651 <ResultDescriptor>[CONTAINING_LIBRARIES]); | 1725 <ResultDescriptor>[CONTAINING_LIBRARIES]); |
| 1652 | 1726 |
| (...skipping 1329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2982 @override | 3056 @override |
| 2983 bool moveNext() { | 3057 bool moveNext() { |
| 2984 if (_newSources.isEmpty) { | 3058 if (_newSources.isEmpty) { |
| 2985 return false; | 3059 return false; |
| 2986 } | 3060 } |
| 2987 currentTarget = _newSources.first; | 3061 currentTarget = _newSources.first; |
| 2988 _newSources.remove(currentTarget); | 3062 _newSources.remove(currentTarget); |
| 2989 return true; | 3063 return true; |
| 2990 } | 3064 } |
| 2991 } | 3065 } |
| OLD | NEW |