• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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