diff options
author | Brian Vosburgh | 2013-02-07 23:25:34 +0000 |
---|---|---|
committer | Brian Vosburgh | 2013-02-11 22:16:10 +0000 |
commit | c3766a4031446101b96cf94874d0bdfb8e3da7b8 (patch) | |
tree | cecedf17508fb3c85aba0e14b04129f8dc9766e7 | |
parent | 7e4c28eaf7626efaf3157d5a485b7c9c8b5d9e70 (diff) | |
download | webtools.dali-c3766a4031446101b96cf94874d0bdfb8e3da7b8.tar.gz webtools.dali-c3766a4031446101b96cf94874d0bdfb8e3da7b8.tar.xz webtools.dali-c3766a4031446101b96cf94874d0bdfb8e3da7b8.zip |
change TreeIterable and GraphIterable to take a Transformer that returns
an Iterable (instead of an Iterator)
9 files changed, 92 insertions, 38 deletions
diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceType.java index 61b34e21f3..45f21f6bd8 100644 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceType.java +++ b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceType.java @@ -336,17 +336,17 @@ final class SourceType } public Iterable<JavaResourceType> getAllTypes() { - return IterableTools.treeIterable(this, TYPES_TRANSFORMER); + return ObjectTools.tree(this, TYPES_TRANSFORMER); } - private static final Transformer<JavaResourceType, Iterator<? extends JavaResourceType>> TYPES_TRANSFORMER = new TypesTransformer(); + private static final Transformer<JavaResourceType, Iterable<? extends JavaResourceType>> TYPES_TRANSFORMER = new TypesTransformer(); /* CU private */ static class TypesTransformer - extends TransformerAdapter<JavaResourceType, Iterator<? extends JavaResourceType>> + extends TransformerAdapter<JavaResourceType, Iterable<? extends JavaResourceType>> { @Override - public Iterator<? extends JavaResourceType> transform(JavaResourceType type) { - return type.getTypes().iterator(); + public Iterable<? extends JavaResourceType> transform(JavaResourceType type) { + return type.getTypes(); } } diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/ObjectTools.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/ObjectTools.java index 82c63f58ba..d50f3e3f25 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/ObjectTools.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/ObjectTools.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2012 Oracle. All rights reserved. + * Copyright (c) 2009, 2013 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -12,7 +12,6 @@ package org.eclipse.jpt.common.utility.internal; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Iterator; import org.eclipse.jpt.common.utility.internal.collection.RepeatingElementList; import org.eclipse.jpt.common.utility.internal.iterable.ChainIterable; import org.eclipse.jpt.common.utility.internal.iterable.GraphIterable; @@ -107,7 +106,7 @@ public final class ObjectTools { * by its children etc. as determined by the specified transformer. * @see GraphIterable */ - public static <E> GraphIterable<E> graph(E object, Transformer<? super E, ? extends Iterator<? extends E>> transformer) { + public static <E> GraphIterable<E> graph(E object, Transformer<? super E, ? extends Iterable<? extends E>> transformer) { return IterableTools.graphIterable(object, transformer); } @@ -125,7 +124,7 @@ public final class ObjectTools { * with the specified object as its root and transformer. * @see TreeIterable */ - public static <E> TreeIterable<E> tree(E object, Transformer<? super E, ? extends Iterator<? extends E>> transformer) { + public static <E> TreeIterable<E> tree(E object, Transformer<? super E, ? extends Iterable<? extends E>> transformer) { return IterableTools.treeIterable(object, transformer); } diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/GraphIterable.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/GraphIterable.java index aca3efecf9..d40483cb62 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/GraphIterable.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/GraphIterable.java @@ -12,6 +12,7 @@ package org.eclipse.jpt.common.utility.internal.iterable; import java.util.Iterator; import org.eclipse.jpt.common.utility.internal.collection.ListTools; import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools; +import org.eclipse.jpt.common.utility.internal.transformer.TransformerTools; import org.eclipse.jpt.common.utility.transformer.Transformer; /** @@ -56,13 +57,13 @@ public class GraphIterable<E> * Construct an iterable containing the nodes of a graph * with the specified roots and transformer. */ - public GraphIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterator<? extends E>> transformer) { + public GraphIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterable<? extends E>> transformer) { super(); if ((roots == null) || (transformer == null)) { throw new NullPointerException(); } this.roots = roots; - this.transformer = transformer; + this.transformer = TransformerTools.iterableTransformerWrapper(transformer); } public Iterator<E> iterator() { diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/IterableTools.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/IterableTools.java index 9f287479e7..66b41b4814 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/IterableTools.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/IterableTools.java @@ -700,7 +700,7 @@ public final class IterableTools { * by its children etc. as determined by the specified transformer.
* @see GraphIterable
*/
- public static <E> GraphIterable<E> graphIterable(E root, Transformer<? super E, ? extends Iterator<? extends E>> transformer) {
+ public static <E> GraphIterable<E> graphIterable(E root, Transformer<? super E, ? extends Iterable<? extends E>> transformer) {
return graphIterable(singletonIterable(root), transformer);
}
@@ -709,7 +709,7 @@ public final class IterableTools { * by their children etc. as determined by the specified transformer.
* @see GraphIterable
*/
- public static <E> GraphIterable<E> graphIterable(E[] roots, Transformer<? super E, ? extends Iterator<? extends E>> transformer) {
+ public static <E> GraphIterable<E> graphIterable(E[] roots, Transformer<? super E, ? extends Iterable<? extends E>> transformer) {
return graphIterable(Arrays.asList(roots), transformer);
}
@@ -718,7 +718,7 @@ public final class IterableTools { * by their children etc. as determined by the specified transformer.
* @see GraphIterable
*/
- public static <E> GraphIterable<E> graphIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterator<? extends E>> transformer) {
+ public static <E> GraphIterable<E> graphIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterable<? extends E>> transformer) {
return new GraphIterable<E>(roots, transformer);
}
@@ -859,7 +859,7 @@ public final class IterableTools { * with the specified root and transformer.
* @see TreeIterable
*/
- public static <E> TreeIterable<E> treeIterable(E root, Transformer<? super E, ? extends Iterator<? extends E>> transformer) {
+ public static <E> TreeIterable<E> treeIterable(E root, Transformer<? super E, ? extends Iterable<? extends E>> transformer) {
return treeIterable(singletonIterable(root), transformer);
}
@@ -868,7 +868,7 @@ public final class IterableTools { * with the specified roots and transformer.
* @see TreeIterable
*/
- public static <E> TreeIterable<E> treeIterable(E[] roots, Transformer<? super E, ? extends Iterator<? extends E>> transformer) {
+ public static <E> TreeIterable<E> treeIterable(E[] roots, Transformer<? super E, ? extends Iterable<? extends E>> transformer) {
return treeIterable(iterable(roots), transformer);
}
@@ -877,7 +877,7 @@ public final class IterableTools { * with the specified roots and transformer.
* @see TreeIterable
*/
- public static <E> TreeIterable<E> treeIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterator<? extends E>> transformer) {
+ public static <E> TreeIterable<E> treeIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterable<? extends E>> transformer) {
return new TreeIterable<E>(roots, transformer);
}
diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/TreeIterable.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/TreeIterable.java index c4a380b34a..f0ca4d9b44 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/TreeIterable.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterable/TreeIterable.java @@ -12,6 +12,7 @@ package org.eclipse.jpt.common.utility.internal.iterable; import java.util.Iterator; import org.eclipse.jpt.common.utility.internal.collection.ListTools; import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools; +import org.eclipse.jpt.common.utility.internal.transformer.TransformerTools; import org.eclipse.jpt.common.utility.transformer.Transformer; /** @@ -42,13 +43,13 @@ public class TreeIterable<E> * Construct an iterable containing the nodes of a tree with the specified roots * and midwife. */ - public TreeIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterator<? extends E>> transformer) { + public TreeIterable(Iterable<? extends E> roots, Transformer<? super E, ? extends Iterable<? extends E>> transformer) { super(); if ((roots == null) || (transformer == null)) { throw new NullPointerException(); } this.roots = roots; - this.transformer = transformer; + this.transformer = TransformerTools.iterableTransformerWrapper(transformer); } public Iterator<E> iterator() { diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/transformer/IterableTransformerWrapper.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/transformer/IterableTransformerWrapper.java new file mode 100644 index 0000000000..257ba69961 --- /dev/null +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/transformer/IterableTransformerWrapper.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2013 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.common.utility.internal.transformer; + +import java.util.Iterator; +import org.eclipse.jpt.common.utility.internal.ObjectTools; +import org.eclipse.jpt.common.utility.transformer.Transformer; + +/** + * Wrap a transformer that converts an input object into an <em>iterable</em> + * of objects of the same type as the input object, converting that transformer + * into one that converts the same object into an <em>iterator</em> + * of objects of the same type as the input object. + * + * @param <I> input: the type of the object passed to the transformer; also the + * type of object returned by the output iterator + */ +public class IterableTransformerWrapper<I> + implements Transformer<I, Iterator<? extends I>> +{ + protected final Transformer<? super I, ? extends Iterable<? extends I>> transformer; + + + public IterableTransformerWrapper(Transformer<? super I, ? extends Iterable<? extends I>> transformer) { + super(); + this.transformer = transformer; + } + + public Iterator<? extends I> transform(I input) { + return this.transformer.transform(input).iterator(); + } + + @Override + public String toString() { + return ObjectTools.toString(this, this.transformer); + } +} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/transformer/TransformerTools.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/transformer/TransformerTools.java index 774267969f..00ec6c5c29 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/transformer/TransformerTools.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/transformer/TransformerTools.java @@ -48,6 +48,18 @@ public final class TransformerTools { } /** + * Wrap the specified transformer converting it + * into one that converts the same input object into an <em>iterator</em> + * of objects of the same type as the input object. + * + * @param <I> input: the type of the object passed to the transformer; also the + * type of object returned by the output iterator + */ + public static <I> IterableTransformerWrapper<I> iterableTransformerWrapper(Transformer<? super I, ? extends Iterable<? extends I>> transformer) { + return new IterableTransformerWrapper<I>(transformer); + } + + /** * Return a transformer that simply casts the specified transformer's return type. * @see LateralTransformerWrapper */ diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/GraphIterableTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/GraphIterableTests.java index e8d2666285..1828f08378 100644 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/GraphIterableTests.java +++ b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/GraphIterableTests.java @@ -11,7 +11,6 @@ package org.eclipse.jpt.common.utility.tests.internal.iterable; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import junit.framework.TestCase; import org.eclipse.jpt.common.utility.internal.collection.ListTools; import org.eclipse.jpt.common.utility.internal.iterable.IterableTools; @@ -62,7 +61,7 @@ public class GraphIterableTests public void testMissingMisterRogers() { boolean exCaught = false; try { - for (GraphNode gn : IterableTools.graphIterable(this.buildGraphRoot(), Transformer.Disabled.<GraphNode, Iterator<? extends GraphNode>>instance())) { + for (GraphNode gn : IterableTools.graphIterable(this.buildGraphRoot(), Transformer.Disabled.<GraphNode, Iterable<? extends GraphNode>>instance())) { assertTrue(this.nodes.contains(gn)); } fail(); @@ -72,10 +71,10 @@ public class GraphIterableTests assertTrue(exCaught); } - private Transformer<GraphNode, Iterator<? extends GraphNode>> buildTransformer() { - return new Transformer<GraphNode, Iterator<? extends GraphNode>>() { - public Iterator<GraphNode> transform(GraphNode node) { - return node.neighbors(); + private Transformer<GraphNode, Iterable<? extends GraphNode>> buildTransformer() { + return new Transformer<GraphNode, Iterable<? extends GraphNode>>() { + public Iterable<GraphNode> transform(GraphNode node) { + return node.getNeighbors(); } }; } @@ -121,8 +120,8 @@ public class GraphIterableTests this.neighbors = ListTools.list(neighbors); } - public Iterator<GraphNode> neighbors() { - return this.neighbors.iterator(); + public Iterable<GraphNode> getNeighbors() { + return this.neighbors; } public int neighborsSize() { diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/TreeIterableTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/TreeIterableTests.java index e4708a2b2e..e9a875a0a3 100644 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/TreeIterableTests.java +++ b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/iterable/TreeIterableTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2011 Oracle. All rights reserved. + * Copyright (c) 2009, 2013 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -11,10 +11,8 @@ package org.eclipse.jpt.common.utility.tests.internal.iterable; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; - import junit.framework.TestCase; - +import org.eclipse.jpt.common.utility.internal.ObjectTools; import org.eclipse.jpt.common.utility.internal.iterable.IterableTools; import org.eclipse.jpt.common.utility.tests.internal.TestTools; import org.eclipse.jpt.common.utility.transformer.Transformer; @@ -35,7 +33,7 @@ public class TreeIterableTests extends TestCase { } public void testIterator1() { - for (TreeNode tn : IterableTools.treeIterable(this.buildTree(), this.buildTransformer())) { + for (TreeNode tn : ObjectTools.tree(this.buildTree(), this.buildTransformer())) { assertTrue(this.nodes.contains(tn)); } } @@ -50,10 +48,10 @@ public class TreeIterableTests extends TestCase { assertNotNull(IterableTools.treeIterable(this.buildTree(), this.buildTransformer()).toString()); } - private Transformer<TreeNode, Iterator<? extends TreeNode>> buildTransformer() { - return new Transformer<TreeNode, Iterator<? extends TreeNode>>() { - public Iterator<? extends TreeNode> transform(TreeNode next) { - return next.children(); + private Transformer<TreeNode, Iterable<? extends TreeNode>> buildTransformer() { + return new Transformer<TreeNode, Iterable<? extends TreeNode>>() { + public Iterable<? extends TreeNode> transform(TreeNode next) { + return next.getChildren(); } }; } @@ -102,8 +100,8 @@ public class TreeIterableTests extends TestCase { this.children.add(child); } - public Iterator<TreeNode> children() { - return this.children.iterator(); + public Iterable<TreeNode> getChildren() { + return this.children; } public int childrenSize() { |