jaxp/src/com/sun/org/apache/bcel/internal/generic/Select.java

Print this page

        

@@ -95,12 +95,13 @@
   Select(short opcode, int[] match, InstructionHandle[] targets,
          InstructionHandle target) {
     super(opcode, target);
 
     this.targets = targets;
-    for(int i=0; i < targets.length; i++)
-      notifyTarget(null, targets[i], this);
+    for(int i=0; i < targets.length; i++) {
+      BranchInstruction.notifyTargetChanged(targets[i], this);
+    }
 
     this.match = match;
 
     if((match_length = match.length) != targets.length)
       throw new ClassGenException("Match and target array have not the same length");

@@ -119,10 +120,11 @@
    *
    * @param offset additional offset caused by preceding (variable length) instructions
    * @param max_offset the maximum offset that may be caused by these instructions
    * @return additional offset caused by possible change of this instruction's length
    */
+  @Override
   protected int updatePosition(int offset, int max_offset) {
     position += offset; // Additional offset caused by preceding SWITCHs, GOTOs, etc.
 
     short old_length = length;
 

@@ -136,10 +138,11 @@
 
   /**
    * Dump instruction as byte code to stream out.
    * @param out Output stream
    */
+  @Override
   public void dump(DataOutputStream out) throws IOException {
     out.writeByte(opcode);
 
     for(int i=0; i < padding; i++) // Padding bytes
       out.writeByte(0);

@@ -149,10 +152,11 @@
   }
 
   /**
    * Read needed data (e.g. index) from file.
    */
+  @Override
   protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException
   {
     padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad bytes
 
     for(int i=0; i < padding; i++) {

@@ -164,21 +168,23 @@
   }
 
   /**
    * @return mnemonic for instruction
    */
+  @Override
   public String toString(boolean verbose) {
-    StringBuffer buf = new StringBuffer(super.toString(verbose));
+    final StringBuilder buf = new StringBuilder(super.toString(verbose));
 
     if(verbose) {
       for(int i=0; i < match_length; i++) {
         String s = "null";
 
         if(targets[i] != null)
           s = targets[i].getInstruction().toString();
 
-        buf.append("(" + match[i] + ", " + s + " = {" + indices[i] + "})");
+          buf.append("(").append(match[i]).append(", ")
+             .append(s).append(" = {").append(indices[i]).append("})");
       }
     }
     else
       buf.append(" ...");
 

@@ -186,19 +192,21 @@
   }
 
   /**
    * Set branch target for `i'th case
    */
-  public void setTarget(int i, InstructionHandle target) {
-    notifyTarget(targets[i], target, this);
+  public final void setTarget(int i, InstructionHandle target) {
+    notifyTargetChanging(targets[i], this);
     targets[i] = target;
+    notifyTargetChanged(targets[i], this);
   }
 
   /**
    * @param old_ih old target
    * @param new_ih new target
    */
+  @Override
   public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) {
     boolean targeted = false;
 
     if(target == old_ih) {
       targeted = true;

@@ -217,10 +225,11 @@
   }
 
   /**
    * @return true, if ih is target of this instruction
    */
+  @Override
   public boolean containsTarget(InstructionHandle ih) {
     if(target == ih)
       return true;
 
     for(int i=0; i < targets.length; i++)

@@ -231,10 +240,11 @@
   }
 
   /**
    * Inform targets that they're not targeted anymore.
    */
+  @Override
   void dispose() {
     super.dispose();
 
     for(int i=0; i < targets.length; i++)
       targets[i].removeTargeter(this);