package net.sourceforge.cobertura.instrument;
import org.objectweb.asm.ClassWriter;
public class CoberturaClassWriter extends ClassWriter {
public CoberturaClassWriter(final int flags) {
super(flags);
}
@Override
protected String getCommonSuperClass(final String type1, final String type2) {
try {
return super.getCommonSuperClass(type1, type2);
} catch (RuntimeException e) {
}
Class<?> c, d;
try {
c = Class.forName(type1.replace('/', '.'), false, ClassLoader
.getSystemClassLoader());
} catch (Exception e) {
try {
c = Class.forName(type1.replace('/', '.'), false,
InstrumentMain.urlClassLoader);
} catch (Exception e1) {
throw new RuntimeException(e1);
}
}
try {
d = Class.forName(type2.replace('/', '.'), false, ClassLoader
.getSystemClassLoader());
} catch (Exception e) {
try {
d = Class.forName(type2.replace('/', '.'), false,
InstrumentMain.urlClassLoader);
} catch (Exception e1) {
throw new RuntimeException(e1);
}
}
if (c.isAssignableFrom(d)) {
return type1;
}
if (d.isAssignableFrom(c)) {
return type2;
}
if (c.isInterface() || d.isInterface()) {
return "java/lang/Object";
} else {
do {
c = c.getSuperclass();
} while (!c.isAssignableFrom(d));
return c.getName().replace('.', '/');
}
}
}