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

Unified Diff: packages/analyzer/lib/src/task/inputs.dart

Issue 2990843002: Removed fixed dependencies (Closed)
Patch Set: Created 3 years, 5 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: packages/analyzer/lib/src/task/inputs.dart
diff --git a/packages/analyzer/lib/src/task/inputs.dart b/packages/analyzer/lib/src/task/inputs.dart
index 468f3139f7eabba5232cca35971220a9e9ec4e20..14d127c3fe302ea0f64de41cae2f777780f9b8b2 100644
--- a/packages/analyzer/lib/src/task/inputs.dart
+++ b/packages/analyzer/lib/src/task/inputs.dart
@@ -39,7 +39,7 @@ class ConstantTaskInput<V> extends TaskInputImpl<V> {
* A [TaskInputBuilder] used to build an input based on a [ConstantTaskInput].
*/
class ConstantTaskInputBuilder<V> implements TaskInputBuilder<V> {
- final ConstantTaskInput input;
+ final ConstantTaskInput<V> input;
ConstantTaskInputBuilder(this.input);
@@ -88,25 +88,88 @@ class ListTaskInputImpl<E> extends SimpleTaskInput<List<E>>
* A mixin-ready implementation of [ListTaskInput].
*/
abstract class ListTaskInputMixin<E> implements ListTaskInput<E> {
- ListTaskInput /*<V>*/ toList(UnaryFunction<E, dynamic /*<V>*/ > mapper) {
- return new ListToListTaskInput<E, dynamic /*V*/ >(this, mapper);
+ @override
+ ListTaskInput/*<V>*/ toFlattenListOf/*<V>*/(
+ ListResultDescriptor/*<V>*/ subListResult) {
+ return new ListToFlattenListTaskInput<E, dynamic/*=V*/ >(
+ this,
+ (E element) =>
+ subListResult.of(element as AnalysisTarget) as TaskInput/*<V>*/);
+ }
+
+ ListTaskInput/*<V>*/ toList/*<V>*/(UnaryFunction<E, dynamic/*=V*/ > mapper) {
+ return new ListToListTaskInput<E, dynamic/*=V*/ >(this, mapper);
}
- ListTaskInput /*<V>*/ toListOf(ResultDescriptor /*<V>*/ valueResult) {
- return (this as ListTaskInputImpl<AnalysisTarget>).toList(valueResult.of);
+ ListTaskInput/*<V>*/ toListOf/*<V>*/(ResultDescriptor/*<V>*/ valueResult) {
+ return (this as ListTaskInput<AnalysisTarget>).toList(valueResult.of);
}
- MapTaskInput<E, dynamic /*V*/ > toMap(
- UnaryFunction<E, dynamic /*<V>*/ > mapper) {
- return new ListToMapTaskInput<E, dynamic /*V*/ >(this, mapper);
+ MapTaskInput<E, dynamic/*=V*/ > toMap/*<V>*/(
+ UnaryFunction<E, dynamic/*=V*/ > mapper) {
+ return new ListToMapTaskInput<E, dynamic/*=V*/ >(this, mapper);
}
- MapTaskInput<AnalysisTarget, dynamic /*V*/ > toMapOf(
- ResultDescriptor /*<V>*/ valueResult) {
+ MapTaskInput<AnalysisTarget, dynamic/*=V*/ > toMapOf/*<V>*/(
+ ResultDescriptor/*<V>*/ valueResult) {
return (this as ListTaskInputImpl<AnalysisTarget>).toMap(valueResult.of);
}
}
+/**
+ * An input to an [AnalysisTask] that is computed by the following steps. First
+ * another (base) task input is used to compute a [List]-valued result. An input
+ * generator function is then used to map each element of that list to a task
+ * input. Finally, each of the task inputs are used to access analysis results,
+ * and the list of the analysis results is used as the input to the task.
+ */
+class ListToFlattenListTaskInput<B, E>
+ extends _ListToCollectionTaskInput<B, E, List<E>>
+ with ListTaskInputMixin<E>
+ implements ListTaskInput<E> {
+ /**
+ * Initialize a result accessor to use the given [baseAccessor] to access a
+ * list of values that can be passed to the given [generateTaskInputs] to
+ * generate a list of task inputs that can be used to access the elements of
+ * the input being accessed.
+ */
+ ListToFlattenListTaskInput(TaskInput<List<B>> baseAccessor,
+ GenerateTaskInputs<B, E> generateTaskInputs)
+ : super(baseAccessor, generateTaskInputs);
+
+ @override
+ TaskInputBuilder<List<E>> createBuilder() =>
+ new ListToFlattenListTaskInputBuilder<B, E>(this);
+}
+
+/**
+ * A [TaskInputBuilder] used to build an input based on a [ListToFlattenListTaskInput].
+ */
+class ListToFlattenListTaskInputBuilder<B, E>
+ extends _ListToCollectionTaskInputBuilder<B, E, List<E>> {
+ /**
+ * The list of values being built.
+ */
+ List<E> _resultValue;
+
+ /**
+ * Initialize a newly created task input builder that computes the result
+ * specified by the given [input].
+ */
+ ListToFlattenListTaskInputBuilder(ListToFlattenListTaskInput<B, E> input)
+ : super(input);
+
+ @override
+ void _addResultElement(B baseElement, E resultElement) {
+ _resultValue.addAll(resultElement as Iterable<E>);
+ }
+
+ @override
+ void _initResultValue() {
+ _resultValue = <E>[];
+ }
+}
+
/**
* An input to an [AnalysisTask] that is computed by the following steps. First
* another (base) task input is used to compute a [List]-valued result. An input
@@ -216,11 +279,10 @@ class ListToMapTaskInputBuilder<B, E>
* A mixin-ready implementation of [MapTaskInput].
*/
abstract class MapTaskInputMixin<K, V> implements MapTaskInput<K, V> {
- TaskInput<List /*<E>*/ > toFlattenList(
- BinaryFunction<K, dynamic /*element of V*/, dynamic /*<E>*/ > mapper) {
+ TaskInput<List/*<E>*/ > toFlattenList/*<E>*/(
+ BinaryFunction<K, dynamic /*element of V*/, dynamic/*=E*/ > mapper) {
return new MapToFlattenListTaskInput<K, dynamic /*element of V*/,
- dynamic /*E*/ >(
- this as MapTaskInput<K, List /*<element of V>*/ >, mapper);
+ dynamic/*=E*/ >(this as MapTaskInput<K, List /*element of V*/ >, mapper);
}
}
@@ -310,7 +372,7 @@ class MapToFlattenListTaskInputBuilder<K, V, E>
if (currentBuilder.moveNext()) {
return true;
}
- baseMap = currentBuilder.inputValue;
+ baseMap = currentBuilder.inputValue as dynamic/*=Map<K, List<V>>*/;
if (baseMap == null) {
// No base map could be computed due to a circular dependency. Use an
// empty map so that no further results will be computed.
@@ -326,7 +388,7 @@ class MapToFlattenListTaskInputBuilder<K, V, E>
return true;
}
// Add the result value for the current Map key/value.
- E resultValue = currentBuilder.inputValue;
+ E resultValue = currentBuilder.inputValue as dynamic/*=E*/;
if (resultValue != null) {
inputValue.add(resultValue);
}
@@ -358,6 +420,8 @@ class MapToFlattenListTaskInputBuilder<K, V, E>
class ObjectToListTaskInput<E> extends TaskInputImpl<List<E>>
with ListTaskInputMixin<E>
implements ListTaskInput<E> {
+ // TODO(brianwilkerson) Add another type parameter to this class that can be
+ // used as the type of the keys of [mapper].
/**
* The input used to compute the value to be mapped.
*/
@@ -370,7 +434,7 @@ class ObjectToListTaskInput<E> extends TaskInputImpl<List<E>>
/**
* Initialize a newly created task input that computes the input by accessing
- * the given [result] associated with the given [target].
+ * the given [baseInput] associated with the given [mapper].
*/
ObjectToListTaskInput(this.baseInput, this.mapper);
@@ -379,16 +443,25 @@ class ObjectToListTaskInput<E> extends TaskInputImpl<List<E>>
new ObjectToListTaskInputBuilder<E>(this);
@override
- ListTaskInput /*<V>*/ toListOf(ResultDescriptor /*<V>*/ valueResult) {
- return new ListToListTaskInput<E, dynamic /*V*/ >(
- this, valueResult.of as dynamic);
+ ListTaskInput/*<V>*/ toFlattenListOf/*<V>*/(
+ ListResultDescriptor/*<V>*/ subListResult) {
+ return new ListToFlattenListTaskInput<E, dynamic/*=V*/ >(
+ this,
+ (E element) =>
+ subListResult.of(element as AnalysisTarget) as TaskInput/*<V>*/);
+ }
+
+ @override
+ ListTaskInput/*<V>*/ toListOf/*<V>*/(ResultDescriptor/*<V>*/ valueResult) {
+ return new ListToListTaskInput<E, dynamic/*=V*/ >(
+ this, (E element) => valueResult.of(element as AnalysisTarget));
}
@override
- MapTaskInput<AnalysisTarget, dynamic /*V*/ > toMapOf(
- ResultDescriptor /*<V>*/ valueResult) {
- return new ListToMapTaskInput<AnalysisTarget, dynamic /*V*/ >(
- this as dynamic, valueResult.of);
+ MapTaskInput<AnalysisTarget, dynamic/*=V*/ > toMapOf/*<V>*/(
+ ResultDescriptor/*<V>*/ valueResult) {
+ return new ListToMapTaskInput<AnalysisTarget, dynamic/*=V*/ >(
+ this as dynamic/*=TaskInput<List<AnalysisTarget>>*/, valueResult.of);
}
}
@@ -626,8 +699,9 @@ class SimpleTaskInputBuilder<V> implements TaskInputBuilder<V> {
abstract class TaskInputImpl<V> implements TaskInput<V> {
@override
- ListTaskInput /*<E>*/ mappedToList(List /*<E>*/ mapper(V value)) {
- return new ObjectToListTaskInput(this, mapper);
+ ListTaskInput/*<E>*/ mappedToList/*<E>*/(List/*<E>*/ mapper(V value)) {
+ return new ObjectToListTaskInput(
+ this, (Object element) => mapper(element as V));
}
}
@@ -898,7 +972,7 @@ abstract class _ListToCollectionTaskInputBuilder<B, E, C>
if (_resultValue == null) {
// We have finished computing the list of values from which the results
// will be derived.
- _baseList = currentBuilder.inputValue;
+ _baseList = currentBuilder.inputValue as dynamic/*=List<B>*/;
if (_baseList == null) {
// No base list could be computed due to a circular dependency. Use an
// empty list so that no further results will be computed.
@@ -909,7 +983,8 @@ abstract class _ListToCollectionTaskInputBuilder<B, E, C>
} else {
// We have finished computing one of the elements in the result list.
if (currentBuilder.inputValue != null) {
- _addResultElement(_baseListElement, currentBuilder.inputValue);
+ _addResultElement(
+ _baseListElement, currentBuilder.inputValue as dynamic/*=E*/);
}
_baseListIndex++;
}
« no previous file with comments | « packages/analyzer/lib/src/task/incremental_element_builder.dart ('k') | packages/analyzer/lib/src/task/manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698