1 // ASM: a very small and fast Java bytecode manipulation framework 2 // Copyright (c) 2000-2011 INRIA, France Telecom 3 // All rights reserved. 4 // 5 // Redistribution and use in source and binary forms, with or without 6 // modification, are permitted provided that the following conditions 7 // are met: 8 // 1. Redistributions of source code must retain the above copyright 9 // notice, this list of conditions and the following disclaimer. 10 // 2. Redistributions in binary form must reproduce the above copyright 11 // notice, this list of conditions and the following disclaimer in the 12 // documentation and/or other materials provided with the distribution. 13 // 3. Neither the name of the copyright holders nor the names of its 14 // contributors may be used to endorse or promote products derived from 15 // this software without specific prior written permission. 16 // 17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27 // THE POSSIBILITY OF SUCH DAMAGE. 28 package org.objectweb.asm.tree.analysis; 29 30 import org.objectweb.asm.tree.AbstractInsnNode; 31 32 /** 33 * An exception thrown if a problem occurs during the analysis of a method. 34 * 35 * @author Bing Ran 36 * @author Eric Bruneton 37 */ 38 public class AnalyzerException extends Exception { 39 40 private static final long serialVersionUID = 3154190448018943333L; 41 42 /** The bytecode instruction where the analysis failed. */ 43 public final transient AbstractInsnNode node; 44 45 /** 46 * Constructs a new {@link AnalyzerException}. 47 * 48 * @param insn the bytecode instruction where the analysis failed. 49 * @param message the reason why the analysis failed. 50 */ AnalyzerException(final AbstractInsnNode insn, final String message)51 public AnalyzerException(final AbstractInsnNode insn, final String message) { 52 super(message); 53 this.node = insn; 54 } 55 56 /** 57 * Constructs a new {@link AnalyzerException}. 58 * 59 * @param insn the bytecode instruction where the analysis failed. 60 * @param message the reason why the analysis failed. 61 * @param cause the cause of the failure. 62 */ AnalyzerException( final AbstractInsnNode insn, final String message, final Throwable cause)63 public AnalyzerException( 64 final AbstractInsnNode insn, final String message, final Throwable cause) { 65 super(message, cause); 66 this.node = insn; 67 } 68 69 /** 70 * Constructs a new {@link AnalyzerException}. 71 * 72 * @param insn the bytecode instruction where the analysis failed. 73 * @param message the reason why the analysis failed. 74 * @param expected an expected value. 75 * @param actual the actual value, different from the expected one. 76 */ AnalyzerException( final AbstractInsnNode insn, final String message, final Object expected, final Value actual)77 public AnalyzerException( 78 final AbstractInsnNode insn, 79 final String message, 80 final Object expected, 81 final Value actual) { 82 super( 83 (message == null ? "Expected " : message + ": expected ") 84 + expected 85 + ", but found " 86 + actual); 87 this.node = insn; 88 } 89 } 90