# HG changeset patch # User Gilles Duboscq # Date 1339589857 -7200 # Node ID 3bc48971a1bf138edff2b9f8727e1a5de5355b42 # Parent 168a00aa1e9ecfb675ff09c6c165ce423ffcd105 Make NodeIterable an interface and create AbstractNodeIterable, Make NodeList extend AbstractList to get a number of method implemeted diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Wed Jun 13 14:17:37 2012 +0200 @@ -295,7 +295,7 @@ */ public NodeIterable getNewNodes(int mark) { final int index = mark; - return new NodeIterable() { + return new AbstractNodeIterable() { @Override public Iterator iterator() { return new NodeIterator(index); @@ -308,7 +308,7 @@ * @return an {@link Iterable} providing all the live nodes. */ public NodeIterable getNodes() { - return new NodeIterable() { + return new AbstractNodeIterable() { @Override public Iterator iterator() { return new NodeIterator(); @@ -385,7 +385,7 @@ */ public NodeIterable getNodes(final Class type) { final Node start = getStartNode(type); - return new NodeIterable() { + return new AbstractNodeIterable() { @Override public Iterator iterator() { return new TypedNodeIterator<>(start); diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java Wed Jun 13 14:17:37 2012 +0200 @@ -28,7 +28,7 @@ -public final class NodeBitMap extends NodeIterable{ +public final class NodeBitMap extends AbstractNodeIterable{ private final boolean autoGrow; private final BitSet bitMap; private final Graph graph; diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeInputsIterable.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeInputsIterable.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeInputsIterable.java Wed Jun 13 14:17:37 2012 +0200 @@ -25,7 +25,7 @@ import com.oracle.graal.graph.NodeClass.NodeClassIterator; import com.oracle.graal.graph.iterators.*; -public abstract class NodeInputsIterable extends NodeIterable { +public abstract class NodeInputsIterable extends AbstractNodeIterable { @Override public abstract NodeClassIterator iterator(); } diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java Wed Jun 13 14:17:37 2012 +0200 @@ -21,21 +21,16 @@ * questions. */ package com.oracle.graal.graph; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; +import java.util.*; import com.oracle.graal.graph.iterators.*; -public abstract class NodeList extends NodeIterable implements List { +public abstract class NodeList extends AbstractList implements NodeIterable { protected static final Node[] EMPTY_NODE_ARRAY = new Node[0]; protected Node[] nodes; private int size; - private int modCount; protected final int initialSize; protected NodeList() { @@ -329,46 +324,6 @@ } @Override - public boolean addAll(int index, Collection< ? extends T> c) { - throw new UnsupportedOperationException("not implemented"); - } - - @Override - public boolean removeAll(Collection< ? > c) { - throw new UnsupportedOperationException("not implemented"); - } - - @Override - public boolean retainAll(Collection< ? > c) { - throw new UnsupportedOperationException("not implemented"); - } - - @Override - public void add(int index, T element) { - throw new UnsupportedOperationException("not implemented"); - } - - @Override - public int lastIndexOf(Object o) { - throw new UnsupportedOperationException("not implemented"); - } - - @Override - public ListIterator listIterator() { - throw new UnsupportedOperationException("not implemented"); - } - - @Override - public ListIterator listIterator(int index) { - throw new UnsupportedOperationException("not implemented"); - } - - @Override - public List subList(int fromIndex, int toIndex) { - throw new UnsupportedOperationException("not implemented"); - } - - @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append('['); @@ -381,4 +336,41 @@ sb.append(']'); return sb.toString(); } + + @Override + public NodeIterable until(final T u) { + return new FilteredNodeIterable<>(this).until(u); + } + @Override + public NodeIterable until(final Class clazz) { + return new FilteredNodeIterable<>(this).until(clazz); + } + @Override + @SuppressWarnings("unchecked") + public NodeIterable filter(Class clazz) { + return (NodeIterable) new FilteredNodeIterable<>(this).and(NodePredicates.isA(clazz)); + } + @Override + public NodeIterable filterInterface(Class iface) { + return new FilteredNodeIterable<>(this).and(NodePredicates.isAInterface(iface)); + } + @Override + public FilteredNodeIterable filter(NodePredicate predicate) { + return new FilteredNodeIterable<>(this).and(predicate); + } + @Override + public FilteredNodeIterable nonNull() { + return new FilteredNodeIterable<>(this).and(NodePredicates.isNotNull()); + } + @Override + public NodeIterable distinct() { + return new FilteredNodeIterable<>(this).distinct(); + } + @Override + public T first() { + if (size() > 0) { + return get(0); + } + return null; + } } diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorsIterable.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorsIterable.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorsIterable.java Wed Jun 13 14:17:37 2012 +0200 @@ -25,7 +25,7 @@ import com.oracle.graal.graph.NodeClass.NodeClassIterator; import com.oracle.graal.graph.iterators.*; -public abstract class NodeSuccessorsIterable extends NodeIterable { +public abstract class NodeSuccessorsIterable extends AbstractNodeIterable { @Override public abstract NodeClassIterator iterator(); } diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeUsagesList.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeUsagesList.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeUsagesList.java Wed Jun 13 14:17:37 2012 +0200 @@ -26,7 +26,7 @@ import com.oracle.graal.graph.iterators.*; -public final class NodeUsagesList extends NodeIterable { +public final class NodeUsagesList extends AbstractNodeIterable { protected static final Node[] EMPTY_NODE_ARRAY = new Node[0]; diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/FilteredNodeIterable.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/FilteredNodeIterable.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/FilteredNodeIterable.java Wed Jun 13 14:17:37 2012 +0200 @@ -26,7 +26,7 @@ import com.oracle.graal.graph.*; -public class FilteredNodeIterable extends NodeIterable { +public class FilteredNodeIterable extends AbstractNodeIterable { private final NodeIterable nodeIterable; private NodePredicate predicate = NodePredicates.alwaysTrue(); private NodePredicate until = NodePredicates.isNull(); diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java Wed Jun 13 14:17:37 2012 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -26,59 +26,32 @@ import com.oracle.graal.graph.*; -public abstract class NodeIterable implements Iterable { - public NodeIterable until(final T u) { - return new FilteredNodeIterable<>(this).until(u); - } - public NodeIterable until(final Class clazz) { - return new FilteredNodeIterable<>(this).until(clazz); - } - @SuppressWarnings("unchecked") - public NodeIterable filter(Class clazz) { - return (NodeIterable) new FilteredNodeIterable<>(this).and(NodePredicates.isA(clazz)); - } - public NodeIterable filterInterface(Class iface) { - return new FilteredNodeIterable<>(this).and(NodePredicates.isAInterface(iface)); - } - public FilteredNodeIterable filter(NodePredicate predicate) { - return new FilteredNodeIterable<>(this).and(predicate); - } - public FilteredNodeIterable nonNull() { - return new FilteredNodeIterable<>(this).and(NodePredicates.isNotNull()); - } - public NodeIterable distinct() { - return new FilteredNodeIterable<>(this).distinct(); - } - public List snapshot() { - ArrayList list = new ArrayList<>(); - for (T n : this) { - list.add(n); - } - return list; - } - public T first() { - Iterator iterator = iterator(); - if (iterator.hasNext()) { - return iterator.next(); - } - return null; - } - public int count() { - int count = 0; - Iterator iterator = iterator(); - while (iterator.hasNext()) { - iterator.next(); - count++; - } - return count; - } - public boolean isEmpty() { - return !iterator().hasNext(); - } - public boolean isNotEmpty() { - return iterator().hasNext(); - } - public boolean contains(T node) { - return this.filter(NodePredicates.equals(node)).isNotEmpty(); - } +public interface NodeIterable extends Iterable { + + NodeIterable until(T u); + + NodeIterable until(Class< ? extends T> clazz); + + NodeIterable filter(Class clazz); + + NodeIterable filterInterface(Class< ? > iface); + + FilteredNodeIterable filter(NodePredicate predicate); + + FilteredNodeIterable nonNull(); + + NodeIterable distinct(); + + List snapshot(); + + T first(); + + int count(); + + boolean isEmpty(); + + boolean isNotEmpty(); + + boolean contains(T node); + } diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Wed Jun 13 14:17:37 2012 +0200 @@ -30,7 +30,6 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; -import com.oracle.graal.graph.*; import com.oracle.graal.graph.Node.Verbosity; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.PhiNode.PhiType; diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Wed Jun 13 14:17:37 2012 +0200 @@ -143,7 +143,7 @@ } public NodeIterable getBlockNodes() { - return new NodeIterable() { + return new AbstractNodeIterable() { @Override public Iterator iterator() { return new BlockNodeIterator(BeginNode.this); diff -r 168a00aa1e9e -r 3bc48971a1bf graal/com.oracle.graal.nodes/src/com/oracle/graal/util/NodeIterators.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/util/NodeIterators.java Wed Jun 13 13:41:02 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/util/NodeIterators.java Wed Jun 13 14:17:37 2012 +0200 @@ -30,7 +30,7 @@ public class NodeIterators { public static NodeIterable dominators(final FixedNode n) { - return new NodeIterable() { + return new AbstractNodeIterable() { @Override public Iterator iterator() { return new NodeIterator(){