package net.sourceforge.retroweaver.runtime.java.io;
import java.lang.reflect.Method;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
/**
* Replacements for methods added to java.io.Closeable in Java 1.5, used
* for targets of the "foreach" statement.
*/
public final class Closeable_ {
private Closeable_() {
// private constructor
}
public static void close(final Object o) throws IOException {
if (o == null) {
throw new NullPointerException(); // NOPMD by xlv
}
/* check for common java.io.* ancestors */
if (o instanceof InputStream) {
((InputStream) o).close();
} else if (o instanceof OutputStream) {
((OutputStream) o).close();
} else if (o instanceof Reader) {
((Reader) o).close();
} else if (o instanceof Writer) {
((Writer) o).close();
} else if (o instanceof net.sourceforge.retroweaver.runtime.java.io.Closeable) {
// weaved classes inheriting from Closeable
((net.sourceforge.retroweaver.runtime.java.io.Closeable) o).close();
} else {
// use reflection to try to get the close method if it was present pre 1.5
throw new RuntimeException("close() call on " + o.getClass());
}
}
}