package javassist.bytecode;
import java.util.zip.*;
import java.util.Enumeration;
import java.util.List;
import java.io.*;
public class CodeAnalyzerTest {
public static void main(String[] args) throws Exception {
ZipFile zfile = new ZipFile(args[0]);
Enumeration e = zfile.entries();
while (e.hasMoreElements()) {
ZipEntry zip = (ZipEntry)e.nextElement();
if (zip.getName().endsWith(".class"))
test(zfile.getInputStream(zip));
}
}
static void test(InputStream is) throws Exception {
is = new BufferedInputStream(is);
ClassFile cf = new ClassFile(new DataInputStream(is));
is.close();
List list = cf.getMethods();
int n = list.size();
for (int i = 0; i < n; ++i) {
MethodInfo minfo = (MethodInfo)list.get(i);
CodeAttribute ca = minfo.getCodeAttribute();
if (ca != null) {
try {
int max = ca.getMaxStack();
int newMax = ca.computeMaxStack();
if (max != newMax)
System.out.println(max + " -> " + newMax +
" for " + minfo.getName() + " (" +
minfo.getDescriptor() + ") in " +
cf.getName());
}
catch (BadBytecode e) {
System.out.println(e.getMessage() +
" for " + minfo.getName() + " (" +
minfo.getDescriptor() + ") in " +
cf.getName());
}
}
}
}
}