< prev index next >

src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java

Print this page

        

@@ -16,160 +16,171 @@
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.sun.org.apache.bcel.internal.generic;
 
-
-import com.sun.org.apache.bcel.internal.classfile.*;
+import com.sun.org.apache.bcel.internal.classfile.CodeException;
 
 /**
  * This class represents an exception handler, i.e., specifies the  region where
  * a handler is active and an instruction where the actual handling is done.
  * pool as parameters. Opposed to the JVM specification the end of the handled
  * region is set to be inclusive, i.e. all instructions between start and end
  * are protected including the start and end instructions (handles) themselves.
  * The end of the region is automatically mapped to be exclusive when calling
  * getCodeException(), i.e., there is no difference semantically.
  *
- * @author  <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
+ * @version $Id: CodeExceptionGen.java 1749603 2016-06-21 20:50:19Z ggregory $
  * @see     MethodGen
  * @see     CodeException
  * @see     InstructionHandle
  */
-public final class CodeExceptionGen
-  implements InstructionTargeter, Cloneable, java.io.Serializable {
+public final class CodeExceptionGen implements InstructionTargeter, Cloneable {
+
   private InstructionHandle start_pc;
   private InstructionHandle end_pc;
   private InstructionHandle handler_pc;
   private ObjectType        catch_type;
 
   /**
-   * Add an exception handler, i.e., specify region where a handler is active and an
-   * instruction where the actual handling is done.
+     * Add an exception handler, i.e., specify region where a handler is active
+     * and an instruction where the actual handling is done.
    *
    * @param start_pc Start of handled region (inclusive)
    * @param end_pc End of handled region (inclusive)
    * @param handler_pc Where handling is done
    * @param catch_type which exception is handled, null for ANY
    */
-  public CodeExceptionGen(InstructionHandle start_pc, InstructionHandle end_pc,
-                          InstructionHandle handler_pc, ObjectType catch_type) {
+    public CodeExceptionGen(final InstructionHandle start_pc, final InstructionHandle end_pc,
+            final InstructionHandle handler_pc, final ObjectType catch_type) {
     setStartPC(start_pc);
     setEndPC(end_pc);
     setHandlerPC(handler_pc);
     this.catch_type = catch_type;
   }
 
   /**
    * Get CodeException object.<BR>
    *
-   * This relies on that the instruction list has already been dumped
-   * to byte code or or that the `setPositions' methods has been
-   * called for the instruction list.
+     * This relies on that the instruction list has already been dumped to byte
+     * code or or that the `setPositions' methods has been called for the
+     * instruction list.
    *
    * @param cp constant pool
    */
-  public CodeException getCodeException(ConstantPoolGen cp) {
-    return new CodeException(start_pc.getPosition(),
-                             end_pc.getPosition() + end_pc.getInstruction().getLength(),
-                             handler_pc.getPosition(),
-                             (catch_type == null)? 0 : cp.addClass(catch_type));
+    public CodeException getCodeException(final ConstantPoolGen cp) {
+        return new CodeException(start_pc.getPosition(), end_pc.getPosition()
+                + end_pc.getInstruction().getLength(), handler_pc.getPosition(),
+                (catch_type == null) ? 0 : cp.addClass(catch_type));
   }
 
+
   /* Set start of handler
    * @param start_pc Start of handled region (inclusive)
    */
-  public final void setStartPC(InstructionHandle start_pc) {
-    BranchInstruction.notifyTargetChanging(this.start_pc, this);
+    public void setStartPC(final InstructionHandle start_pc) { // TODO could be package-protected?
+        BranchInstruction.notifyTarget(this.start_pc, start_pc, this);
     this.start_pc = start_pc;
-    BranchInstruction.notifyTargetChanged(this.start_pc, this);
   }
 
+
   /* Set end of handler
    * @param end_pc End of handled region (inclusive)
    */
-  public final void setEndPC(InstructionHandle end_pc) {
-    BranchInstruction.notifyTargetChanging(this.end_pc, this);
+    public void setEndPC(final InstructionHandle end_pc) { // TODO could be package-protected?
+        BranchInstruction.notifyTarget(this.end_pc, end_pc, this);
     this.end_pc = end_pc;
-    BranchInstruction.notifyTargetChanged(this.end_pc, this);
   }
 
+
   /* Set handler code
    * @param handler_pc Start of handler
    */
-  public final void setHandlerPC(InstructionHandle handler_pc) {
-    BranchInstruction.notifyTargetChanging(this.handler_pc, this);
+    public void setHandlerPC(final InstructionHandle handler_pc) { // TODO could be package-protected?
+        BranchInstruction.notifyTarget(this.handler_pc, handler_pc, this);
     this.handler_pc = handler_pc;
-    BranchInstruction.notifyTargetChanged(this.handler_pc, this);
   }
 
   /**
    * @param old_ih old target, either start or end
    * @param new_ih new target
    */
   @Override
-  public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) {
+    public void updateTarget(final InstructionHandle old_ih, final InstructionHandle new_ih) {
     boolean targeted = false;
-
-    if(start_pc == old_ih) {
+        if (start_pc == old_ih) {
       targeted = true;
       setStartPC(new_ih);
     }
-
-    if(end_pc == old_ih) {
+        if (end_pc == old_ih) {
       targeted = true;
       setEndPC(new_ih);
     }
-
-    if(handler_pc == old_ih) {
+        if (handler_pc == old_ih) {
       targeted = true;
       setHandlerPC(new_ih);
     }
-
-    if(!targeted)
-      throw new ClassGenException("Not targeting " + old_ih + ", but {" + start_pc + ", " +
-                                  end_pc + ", " + handler_pc + "}");
+        if (!targeted) {
+            throw new ClassGenException("Not targeting " + old_ih + ", but {" + start_pc + ", "
+                    + end_pc + ", " + handler_pc + "}");
+        }
   }
 
   /**
    * @return true, if ih is target of this handler
    */
   @Override
-  public boolean containsTarget(InstructionHandle ih) {
+    public boolean containsTarget(final InstructionHandle ih) {
     return (start_pc == ih) || (end_pc == ih) || (handler_pc == ih);
   }
 
-  /** Sets the type of the Exception to catch. Set 'null' for ANY. */
-  public void              setCatchType(ObjectType catch_type)        { this.catch_type = catch_type; }
-  /** Gets the type of the Exception to catch, 'null' for ANY. */
-  public ObjectType        getCatchType()                             { return catch_type; }
+    /**
+     * Sets the type of the Exception to catch. Set 'null' for ANY.
+     */
+    public void setCatchType(final ObjectType catch_type) {
+        this.catch_type = catch_type;
+    }
+
+    /**
+     * Gets the type of the Exception to catch, 'null' for ANY.
+     */
+    public ObjectType getCatchType() {
+        return catch_type;
+    }
 
-  /** @return start of handled region (inclusive)
+    /**
+     * @return start of handled region (inclusive)
    */
-  public InstructionHandle getStartPC()                               { return start_pc; }
+    public InstructionHandle getStartPC() {
+        return start_pc;
+    }
 
-  /** @return end of handled region (inclusive)
+    /**
+     * @return end of handled region (inclusive)
    */
-  public InstructionHandle getEndPC()                                 { return end_pc; }
+    public InstructionHandle getEndPC() {
+        return end_pc;
+    }
 
-  /** @return start of handler
+    /**
+     * @return start of handler
    */
-  public InstructionHandle getHandlerPC()                             { return handler_pc; }
+    public InstructionHandle getHandlerPC() {
+        return handler_pc;
+    }
 
   @Override
   public String toString() {
     return "CodeExceptionGen(" + start_pc + ", " + end_pc + ", " + handler_pc + ")";
   }
 
   @Override
   public Object clone() {
     try {
       return super.clone();
-    } catch(CloneNotSupportedException e) {
-      System.err.println(e);
-      return null;
+        } catch (final CloneNotSupportedException e) {
+            throw new Error("Clone Not Supported"); // never happens
     }
   }
 }
< prev index next >