Mercurial > hg > graal-compiler
changeset 15146:65efd2eeea1b
Remove AbstractNodeIterable, move its methods to default methods on NodeIterable.
This allows to remove a number of duplicated methods in NodeList
NodeClassIterable is also interface instead of an abstract class.
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Mon Apr 14 16:31:13 2014 +0200 @@ -525,7 +525,7 @@ */ public NodeIterable<Node> getNewNodes(Mark mark) { final int index = mark.getValue(); - return new AbstractNodeIterable<Node>() { + return new NodeIterable<Node>() { @Override public Iterator<Node> iterator() { @@ -540,7 +540,7 @@ * @return an {@link Iterable} providing all the live nodes. */ public NodeIterable<Node> getNodes() { - return new AbstractNodeIterable<Node>() { + return new NodeIterable<Node>() { @Override public Iterator<Node> iterator() { @@ -714,7 +714,7 @@ */ public <T extends Node & IterableNodeType> NodeIterable<T> getNodes(final Class<T> type) { final NodeClass nodeClass = NodeClass.get(type); - return new AbstractNodeIterable<T>() { + return new NodeIterable<T>() { @Override public Iterator<T> iterator() {
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Mon Apr 14 16:31:13 2014 +0200 @@ -228,7 +228,7 @@ } } - class NodeUsageIterable extends AbstractNodeIterable<Node> { + class NodeUsageIterable implements NodeIterable<Node> { public NodeUsageIterator iterator() { return new NodeUsageIterator();
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java Mon Apr 14 16:31:13 2014 +0200 @@ -26,7 +26,7 @@ import com.oracle.graal.graph.iterators.*; -public final class NodeBitMap extends AbstractNodeIterable<Node> { +public final class NodeBitMap implements NodeIterable<Node> { private final boolean autoGrow; private final BitSet bitMap;
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClassIterable.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClassIterable.java Mon Apr 14 16:31:13 2014 +0200 @@ -30,7 +30,7 @@ * The iterator returned by this iterable can be used to access {@link Position Positions} during * iteration using {@link NodeClassIterator#nextPosition()}. */ -public abstract class NodeClassIterable extends AbstractNodeIterable<Node> { +public interface NodeClassIterable extends NodeIterable<Node> { @Override public abstract NodeClassIterator iterator();
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java Mon Apr 14 16:31:13 2014 +0200 @@ -348,42 +348,6 @@ } @Override - public NodeIterable<T> until(final T u) { - return new FilteredNodeIterable<>(this).until(u); - } - - @Override - public NodeIterable<T> until(final Class<? extends T> clazz) { - return new FilteredNodeIterable<>(this).until(clazz); - } - - @Override - @SuppressWarnings("unchecked") - public <F extends T> NodeIterable<F> filter(Class<F> clazz) { - return (NodeIterable<F>) new FilteredNodeIterable<>(this).and(NodePredicates.isA(clazz)); - } - - @Override - public NodeIterable<T> filterInterface(Class<?> iface) { - return new FilteredNodeIterable<>(this).and(NodePredicates.isAInterface(iface)); - } - - @Override - public FilteredNodeIterable<T> filter(NodePredicate predicate) { - return new FilteredNodeIterable<>(this).and(predicate); - } - - @Override - public FilteredNodeIterable<T> nonNull() { - return new FilteredNodeIterable<>(this).and(NodePredicates.isNotNull()); - } - - @Override - public NodeIterable<T> distinct() { - return new FilteredNodeIterable<>(this).distinct(); - } - - @Override public T first() { if (size() > 0) { return get(0);
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/AbstractNodeIterable.java Mon Apr 14 15:21:27 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.graph.iterators; - -import java.util.*; - -import com.oracle.graal.graph.*; - -public abstract class AbstractNodeIterable<T extends Node> implements NodeIterable<T> { - - @Override - public NodeIterable<T> until(final T u) { - return new FilteredNodeIterable<>(this).until(u); - } - - @Override - public NodeIterable<T> until(final Class<? extends T> clazz) { - return new FilteredNodeIterable<>(this).until(clazz); - } - - @Override - @SuppressWarnings("unchecked") - public <F extends T> NodeIterable<F> filter(Class<F> clazz) { - return (NodeIterable<F>) new FilteredNodeIterable<>(this).and(NodePredicates.isA(clazz)); - } - - @Override - public NodeIterable<T> filterInterface(Class<?> iface) { - return new FilteredNodeIterable<>(this).and(NodePredicates.isAInterface(iface)); - } - - @Override - public FilteredNodeIterable<T> filter(NodePredicate predicate) { - return new FilteredNodeIterable<>(this).and(predicate); - } - - @Override - public FilteredNodeIterable<T> nonNull() { - return new FilteredNodeIterable<>(this).and(NodePredicates.isNotNull()); - } - - @Override - public NodeIterable<T> distinct() { - return new FilteredNodeIterable<>(this).distinct(); - } - - @Override - public List<T> snapshot() { - ArrayList<T> list = new ArrayList<>(); - for (T n : this) { - list.add(n); - } - return list; - } - - @Override - public void snapshotTo(Collection<T> to) { - for (T n : this) { - to.add(n); - } - } - - @Override - public T first() { - Iterator<T> iterator = iterator(); - if (iterator.hasNext()) { - return iterator.next(); - } - return null; - } - - @Override - public int count() { - int count = 0; - Iterator<T> iterator = iterator(); - while (iterator.hasNext()) { - iterator.next(); - count++; - } - return count; - } - - @Override - public boolean isEmpty() { - return !iterator().hasNext(); - } - - @Override - public boolean isNotEmpty() { - return iterator().hasNext(); - } - - @Override - public boolean contains(T node) { - return this.filter(NodePredicates.equals(node)).isNotEmpty(); - } -}
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/FilteredNodeIterable.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/FilteredNodeIterable.java Mon Apr 14 16:31:13 2014 +0200 @@ -26,7 +26,7 @@ import com.oracle.graal.graph.*; -public class FilteredNodeIterable<T extends Node> extends AbstractNodeIterable<T> { +public class FilteredNodeIterable<T extends Node> implements NodeIterable<T> { protected final NodeIterable<T> nodeIterable; protected NodePredicate predicate = NodePredicates.alwaysTrue();
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java Mon Apr 14 16:31:13 2014 +0200 @@ -28,32 +28,74 @@ public interface NodeIterable<T extends Node> extends Iterable<T> { - NodeIterable<T> until(T u); + default NodeIterable<T> until(final T u) { + return new FilteredNodeIterable<>(this).until(u); + } + + default NodeIterable<T> until(final Class<? extends T> clazz) { + return new FilteredNodeIterable<>(this).until(clazz); + } - NodeIterable<T> until(Class<? extends T> clazz); + @SuppressWarnings("unchecked") + default <F extends T> NodeIterable<F> filter(Class<F> clazz) { + return (NodeIterable<F>) new FilteredNodeIterable<>(this).and(NodePredicates.isA(clazz)); + } - <F extends T> NodeIterable<F> filter(Class<F> clazz); + default NodeIterable<T> filterInterface(Class<?> iface) { + return new FilteredNodeIterable<>(this).and(NodePredicates.isAInterface(iface)); + } - NodeIterable<T> filterInterface(Class<?> iface); + default FilteredNodeIterable<T> filter(NodePredicate predicate) { + return new FilteredNodeIterable<>(this).and(predicate); + } - FilteredNodeIterable<T> filter(NodePredicate predicate); + default FilteredNodeIterable<T> nonNull() { + return new FilteredNodeIterable<>(this).and(NodePredicates.isNotNull()); + } - FilteredNodeIterable<T> nonNull(); + default NodeIterable<T> distinct() { + return new FilteredNodeIterable<>(this).distinct(); + } - NodeIterable<T> distinct(); + default List<T> snapshot() { + ArrayList<T> list = new ArrayList<>(); + snapshotTo(list); + return list; + } - List<T> snapshot(); - - void snapshotTo(Collection<T> to); + default void snapshotTo(Collection<T> to) { + for (T n : this) { + to.add(n); + } + } - T first(); - - int count(); + default T first() { + Iterator<T> iterator = iterator(); + if (iterator.hasNext()) { + return iterator.next(); + } + return null; + } - boolean isEmpty(); - - boolean isNotEmpty(); + default int count() { + int count = 0; + Iterator<T> iterator = iterator(); + while (iterator.hasNext()) { + iterator.next(); + count++; + } + return count; + } - boolean contains(T node); + default boolean isEmpty() { + return !iterator().hasNext(); + } + default boolean isNotEmpty() { + return iterator().hasNext(); + } + + default boolean contains(T node) { + return this.filter(NodePredicates.equals(node)).isNotEmpty(); + } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Mon Apr 14 16:31:13 2014 +0200 @@ -254,7 +254,7 @@ } public static NodeIterable<BeginNode> toHirBlocks(final Iterable<Block> blocks) { - return new AbstractNodeIterable<BeginNode>() { + return new NodeIterable<BeginNode>() { public Iterator<BeginNode> iterator() { final Iterator<Block> it = blocks.iterator(); @@ -279,7 +279,7 @@ } public static NodeIterable<LoopExitNode> toHirExits(final Iterable<Block> blocks) { - return new AbstractNodeIterable<LoopExitNode>() { + return new NodeIterable<LoopExitNode>() { public Iterator<LoopExitNode> iterator() { final Iterator<Block> it = blocks.iterator(); @@ -341,7 +341,7 @@ * VirtualState nodes contained in the old exit's state may be shared by other * dominated VirtualStates. Those dominated virtual states need to see the * proxy->phi update that are applied below. - * + * * We now update the original fragment's nodes accordingly: */ state.applyToVirtual(new VirtualClosure() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Mon Apr 14 16:31:13 2014 +0200 @@ -130,7 +130,7 @@ } public NodeIterable<FixedNode> getBlockNodes() { - return new AbstractNodeIterable<FixedNode>() { + return new NodeIterable<FixedNode>() { @Override public Iterator<FixedNode> iterator() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/NodeIterators.java Mon Apr 14 15:21:27 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/NodeIterators.java Mon Apr 14 16:31:13 2014 +0200 @@ -30,7 +30,7 @@ public class NodeIterators { public static NodeIterable<FixedNode> dominators(final FixedNode n) { - return new AbstractNodeIterable<FixedNode>() { + return new NodeIterable<FixedNode>() { @Override public Iterator<FixedNode> iterator() {