package org.pitest.coverage.codeassist; import java.io.BufferedInputStream; import java.io.IOException; import java.lang.instrument.IllegalClassFormatException; import java.net.URL; /** * User: dima Date: Feb 8, 2009 Time: 4:26:15 PM */ public class ClassUtils { private ClassUtils() { } public static byte[] classAsBytes(final Class<?> clazz) throws ClassNotFoundException { return classAsBytes(clazz.getName()); } public static byte[] classAsBytes(final String className) throws ClassNotFoundException { try { final URL resource = ClassUtils.class.getClassLoader().getResource( convertClassNameToFileName(className)); final BufferedInputStream stream = new BufferedInputStream( resource.openStream()); final byte[] result = new byte[resource.openConnection() .getContentLength()]; int i; int counter = 0; while ((i = stream.read()) != -1) { result[counter] = (byte) i; counter++; } stream.close(); return result; } catch (final IOException e) { throw new ClassNotFoundException("", e); } } private static String convertClassNameToFileName(final String className) { return className.replace(".", "/") + ".class"; } public static Class<?> createClass(final byte[] bytes) throws IllegalClassFormatException { return new MyClassLoader().createClass(bytes); } private static final class MyClassLoader extends ClassLoader { public Class<?> createClass(final byte[] bytes) throws IllegalClassFormatException { return defineClass(null, bytes, 0, bytes.length); } } }