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

Unified Diff: pkg/analyzer/lib/src/task/dart.dart

Issue 1131953004: Create a task in the new task model to compute constant dependencies. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/task/dart.dart
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 4b88e7df31b04b55abc226ba834cd80a91e57cc7..a5ec7254c93e6e6e43115b760c2a3796f1310111 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -8,6 +8,7 @@ import 'dart:collection';
import 'dart:math' as math;
import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/constant.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask;
import 'package:analyzer/src/generated/error.dart';
@@ -1640,6 +1641,79 @@ class BuildTypeProviderTask extends SourceBasedAnalysisTask {
}
/**
+ * A task that computes [CONSTANT_DEPENDENCIES] for a constant.
+ */
+class ComputeConstantDependenciesTask extends AnalysisTask {
+ /**
+ * The name of the [RESOLVED_UNIT] input.
+ */
+ 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
+
+ static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+ 'ComputeConstantDependenciesTask', createTask, buildInputs,
+ <ResultDescriptor>[CONSTANT_DEPENDENCIES]);
+
+ ComputeConstantDependenciesTask(
+ InternalAnalysisContext context, AnalysisTarget target)
+ : super(context, target);
+
+ @override
+ String get description {
+ Source source = target.source;
+ String sourceName = source == null ? '<unknown source>' : source.fullName;
+ return '${descriptor.name} for element $target in source $sourceName';
+ }
+
+ @override
+ TaskDescriptor get descriptor => DESCRIPTOR;
+
+ @override
+ void internalPerform() {
+ //
+ // Prepare inputs.
+ //
+ // Note: UNIT_INPUT is not needed. It is merely a bookkeeping dependency
+ // 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.
+ // constant dependencies.
+ //
+ Element element = target;
+ AnalysisContext context = element.context;
+ 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.
+ //
+ // Compute dependencies.
+ //
+ List<Element> dependencies = <Element>[];
+ new ConstantEvaluationEngine(typeProvider, context.declaredVariables)
+ .computeDependencies(element, dependencies.add);
+ //
+ // Record outputs.
+ //
+ outputs[CONSTANT_DEPENDENCIES] = dependencies;
+ }
+
+ /**
+ * Return a map from the names of the inputs of this kind of task to the task
+ * input descriptors describing those inputs for a task with the
+ * given [target].
+ */
+ static Map<String, TaskInput> buildInputs(Element target) {
+ return <String, TaskInput>{
+ UNIT_INPUT: RESOLVED_UNIT
+ .of(new LibrarySpecificUnit(target.library.source, target.source))
+ };
+ }
+
+ /**
+ * Create a [ResolveReferencesTask] based on the given [target] in
+ * the given [context].
+ */
+ static ComputeConstantDependenciesTask createTask(
+ AnalysisContext context, AnalysisTarget target) {
+ return new ComputeConstantDependenciesTask(context, target);
+ }
+}
+
+/**
* A task that computes a list of the libraries containing the target source.
*/
class ContainingLibrariesTask extends SourceBasedAnalysisTask {

Powered by Google App Engine
This is Rietveld 408576698