1 <html> 2 <!-- 3 * ASM: a very small and fast Java bytecode manipulation framework 4 * Copyright (c) 2000-2005 INRIA, France Telecom 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the copyright holders nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 29 * THE POSSIBILITY OF SUCH DAMAGE. 30 --> 31 <body> 32 33 <p> 34 Provides a framework for static code analysis based on the asm.tree package. 35 </p> 36 37 <p> 38 Basic usage: 39 </p> 40 41 <pre> 42 ClassReader cr = new ClassReader(bytecode); 43 ClassNode cn = new ClassNode(); 44 cr.accept(cn, ClassReader.SKIP_DEBUG); 45 46 List methods = cn.methods; 47 for (int i = 0; i < methods.size(); ++i) { 48 MethodNode method = (MethodNode) methods.get(i); 49 if (method.instructions.size() > 0) { 50 Analyzer a = new Analyzer(new BasicInterpreter()); 51 a.analyze(cn.name, method); 52 Frame[] frames = a.getFrames(); 53 // Elements of the frames arrray now contains info for each instruction 54 // from the analyzed method. BasicInterpreter creates BasicValue, that 55 // is using simplified type system that distinguishes the UNINITIALZED, 56 // INT, FLOAT, LONG, DOUBLE, REFERENCE and RETURNADDRESS types. 57 ... 58 } 59 } 60 </pre> 61 62 <p> 63 @since ASM 1.4.3 64 </p> 65 66 </body> 67 </html> 68