package net.sourceforge.retroweaver.runtime.java.lang;
import net.sourceforge.retroweaver.harmony.runtime.java.util.Iterator;
import net.sourceforge.retroweaver.harmony.runtime.java.util.Collection;
/**
* Replacements for methods added to java.lang.Iterable in Java 1.5, used
* for targets of the "foreach" statement.
*/
public final class Iterable_ {
private Iterable_() {
// private constructor
}
/**
* Returns an iterator for <code>iterable</code>.
*
* @param iterable the object to get the Iterator from
* @return an Iterator.
* @throws UnsupportedOperationException if an iterator method can not be found.
* @throws NullPointerException if <code>iterable</code> is null.
*/
public static Iterator iterator(final Object iterable) {
if (iterable == null) {
throw new NullPointerException(); // NOPMD by xlv
}
if (iterable instanceof Collection) {
// core jdk classes implementing Iterable: they are not weaved but,
// at least in 1.5, they all implement Collection and as its iterator
// method exits in pre 1.5 jdks, a valid Iterator can be returned.
return ((Collection) iterable).iterator();
}
if (iterable instanceof net.sourceforge.retroweaver.runtime.java.lang.Iterable) {
// weaved classes inheriting from Iterable
return ((net.sourceforge.retroweaver.runtime.java.lang.Iterable) iterable).iterator();
}
throw new RuntimeException("iterator call on " + iterable.getClass());
}
}