1 30 package org.objectweb.asm.tree.analysis; 31 32 import org.objectweb.asm.ClassReader; 33 import org.objectweb.asm.ClassWriterComputeMaxsUnitTest; 34 import org.objectweb.asm.MethodVisitor; 35 import org.objectweb.asm.commons.EmptyVisitor; 36 import org.objectweb.asm.tree.MethodNode; 37 38 43 public class AnalyzerUnitTest extends ClassWriterComputeMaxsUnitTest { 44 45 protected boolean isComputeMaxs() { 46 return false; 47 } 48 49 protected void assertMaxs(final int maxStack, final int maxLocals) { 50 mv.visitMaxs(maxStack, maxLocals); 51 mv.visitEnd(); 52 cw.visitEnd(); 53 byte[] b = cw.toByteArray(); 54 ClassReader cr = new ClassReader(b); 55 cr.accept(new EmptyVisitor() { 56 public MethodVisitor visitMethod( 57 final int access, 58 final String name, 59 final String desc, 60 final String signature, 61 final String [] exceptions) 62 { 63 if (name.equals("m")) { 64 return new MethodNode(access, 65 name, 66 desc, 67 signature, 68 exceptions) 69 { 70 public void visitEnd() { 71 Analyzer a = new Analyzer(new BasicInterpreter()); 72 try { 73 Frame[] frames = a.analyze("C", this); 74 int mStack = 0; 75 int mLocals = 0; 76 for (int i = 0; i < frames.length; ++i) { 77 if (frames[i] != null) { 78 mStack = Math.max(mStack, 79 frames[i].getStackSize()); 80 mLocals = Math.max(mLocals, 81 frames[i].getLocals()); 82 } 83 } 84 assertEquals("maxStack", maxStack, mStack); 85 assertEquals("maxLocals", maxLocals, mLocals); 86 } catch (Exception e) { 87 fail(e.getMessage()); 88 } 89 } 90 }; 91 } else { 92 return new EmptyVisitor(); 93 } 94 } 95 }, 0); 96 97 try { 98 TestClassLoader loader = new TestClassLoader(); 99 Class c = loader.defineClass("C", b); 100 c.newInstance(); 101 } catch (Throwable t) { 102 fail(t.getMessage()); 103 } 104 } 105 106 protected void assertGraph(final String graph) { 107 } 108 } 109
| Popular Tags
|