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);