View | Details | Raw Unified | Return to bug 52468
Collapse All | Expand All

(-)src/main/java/org/apache/bcel/generic/InstructionTargeter.java (-1 / +19 lines)
Lines 29-36 Link Here
29
 */
29
 */
30
public interface InstructionTargeter {
30
public interface InstructionTargeter {
31
31
32
	/**
33
	 * Checks whether this targeter targets this instruction handle.
34
	 *
35
	 * @param ih
36
	 * @return
37
	 */
32
    boolean containsTarget( InstructionHandle ih );
38
    boolean containsTarget( InstructionHandle ih );
33
39
34
40
    /**
41
     * Replaces the target of this targeter from this old handle to the new handle.
42
     * 
43
     * This method will throw an exception if old_ih is not targeted by this object.
44
     *
45
     * @param old_ih
46
     * @param new_ih
47
     */
35
    void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih );
48
    void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih );
49
    
50
    /**
51
     * Removes all targets of this targeter.
52
     */
53
    void removeTargets();
36
}
54
}
(-)src/main/java/org/apache/bcel/generic/CodeExceptionGen.java (-1 / +6 lines)
Lines 103-109 Link Here
103
        this.handler_pc = handler_pc;
103
        this.handler_pc = handler_pc;
104
    }
104
    }
105
105
106
106
    public void removeTargets() {
107
    	setStartPC(null);
108
    	setEndPC(null);
109
    	setHandlerPC(null);
110
    }
111
    
107
    /**
112
    /**
108
     * @param old_ih old target, either start or end
113
     * @param old_ih old target, either start or end
109
     * @param new_ih new target
114
     * @param new_ih new target
(-)src/main/java/org/apache/bcel/generic/Select.java (-1 / +7 lines)
Lines 158-164 Link Here
158
        targets[i] = target;
158
        targets[i] = target;
159
    }
159
    }
160
160
161
161
    public void removeTargets() {
162
        setTarget(null);
163
        for (int i = 0; i < targets.length; i++) {
164
            setTarget(i, null);
165
        }
166
    }
167
    
162
    /**
168
    /**
163
     * @param old_ih old target
169
     * @param old_ih old target
164
     * @param new_ih new target
170
     * @param new_ih new target
(-)src/main/java/org/apache/bcel/generic/BranchInstruction.java (-1 / +4 lines)
Lines 202-208 Link Here
202
        }
202
        }
203
    }
203
    }
204
204
205
205
    public void removeTargets() {
206
        setTarget(null);
207
    }
208
    
206
    /**
209
    /**
207
     * @param old_ih old target
210
     * @param old_ih old target
208
     * @param new_ih new target
211
     * @param new_ih new target
(-)src/main/java/org/apache/bcel/generic/MethodGen.java (-2 / +15 lines)
Lines 21-26 Link Here
21
import java.util.Hashtable;
21
import java.util.Hashtable;
22
import java.util.List;
22
import java.util.List;
23
import java.util.Stack;
23
import java.util.Stack;
24
24
import org.apache.bcel.Constants;
25
import org.apache.bcel.Constants;
25
import org.apache.bcel.classfile.AnnotationEntry;
26
import org.apache.bcel.classfile.AnnotationEntry;
26
import org.apache.bcel.classfile.Annotations;
27
import org.apache.bcel.classfile.Annotations;
Lines 179-184 Link Here
179
                ((m.getAccessFlags() & (Constants.ACC_ABSTRACT | Constants.ACC_NATIVE)) == 0)
180
                ((m.getAccessFlags() & (Constants.ACC_ABSTRACT | Constants.ACC_NATIVE)) == 0)
180
                        ? new InstructionList(m.getCode().getCode())
181
                        ? new InstructionList(m.getCode().getCode())
181
                        : null, cp);
182
                        : null, cp);
183
        // remove dummy variables created with regular constructor
184
        this.removeLocalVariables();
185
        
182
        Attribute[] attributes = m.getAttributes();
186
        Attribute[] attributes = m.getAttributes();
183
        for (int i = 0; i < attributes.length; i++) {
187
        for (int i = 0; i < attributes.length; i++) {
184
            Attribute a = attributes[i];
188
            Attribute a = attributes[i];
Lines 345-350 Link Here
345
     * Remove all local variables.
349
     * Remove all local variables.
346
     */
350
     */
347
    public void removeLocalVariables() {
351
    public void removeLocalVariables() {
352
    	for (LocalVariableGen var : variable_vec)
353
    		var.removeTargets();
348
        variable_vec.clear();
354
        variable_vec.clear();
349
    }
355
    }
350
356
Lines 393-401 Link Here
393
        for (int i = 0; i < size; i++) {
399
        for (int i = 0; i < size; i++) {
394
            if (lg[i].getStart() == null) {
400
            if (lg[i].getStart() == null) {
395
                lg[i].setStart(il.getStart());
401
                lg[i].setStart(il.getStart());
402
            } else {
403
            	lg[i].setStart(il.findHandle(lg[i].getStart().i_position));
396
            }
404
            }
397
            if (lg[i].getEnd() == null) {
405
            if (lg[i].getEnd() == null) {
398
                lg[i].setEnd(il.getEnd());
406
                lg[i].setEnd(il.getEnd());
407
            } else {
408
            	lg[i].setEnd(il.findHandle(lg[i].getEnd().i_position));
399
            }
409
            }
400
        }
410
        }
401
        if (size > 1) {
411
        if (size > 1) {
Lines 404-410 Link Here
404
        return lg;
414
        return lg;
405
    }
415
    }
406
416
407
408
    /**
417
    /**
409
     * @return `LocalVariableTable' attribute of all the local variables of this method.
418
     * @return `LocalVariableTable' attribute of all the local variables of this method.
410
     */
419
     */
Lines 468-474 Link Here
468
        LineNumber[] ln = new LineNumber[size];
477
        LineNumber[] ln = new LineNumber[size];
469
        try {
478
        try {
470
            for (int i = 0; i < size; i++) {
479
            for (int i = 0; i < size; i++) {
471
                ln[i] = line_number_vec.get(i).getLineNumber();
480
            	LineNumberGen lng = line_number_vec.get(i);
481
            	if (! il.contains(lng.getInstruction())) {
482
            		lng.setInstruction(il.findHandle(lng.getInstruction().i_position));
483
            	}
484
                ln[i] = lng.getLineNumber();
472
            }
485
            }
473
        } catch (ArrayIndexOutOfBoundsException e) {
486
        } catch (ArrayIndexOutOfBoundsException e) {
474
        } // Never occurs
487
        } // Never occurs
(-)src/main/java/org/apache/bcel/generic/InstructionList.java (-1 / +1 lines)
Lines 145-151 Link Here
145
    	int[] positions = byte_positions;
145
    	int[] positions = byte_positions;
146
        InstructionHandle ih = start;
146
        InstructionHandle ih = start;
147
        for (int i = 0; i < length; i++) { 
147
        for (int i = 0; i < length; i++) { 
148
            if(positions[i] == pos) {
148
            if(positions[i] >= pos) {
149
                return ih;
149
                return ih;
150
            }
150
            }
151
            ih = ih.next;
151
            ih = ih.next;
(-)src/main/java/org/apache/bcel/generic/LineNumberGen.java (-1 / +4 lines)
Lines 53-59 Link Here
53
        return this.ih == ih;
53
        return this.ih == ih;
54
    }
54
    }
55
55
56
56
    public void removeTargets() {
57
    	setInstruction(null);
58
    }
59
    
57
    /**
60
    /**
58
     * @param old_ih old target
61
     * @param old_ih old target
59
     * @param new_ih new target
62
     * @param new_ih new target
(-)src/main/java/org/apache/bcel/generic/LocalVariableGen.java (-2 / +6 lines)
Lines 81-87 Link Here
81
    public LocalVariable getLocalVariable( ConstantPoolGen cp ) {
81
    public LocalVariable getLocalVariable( ConstantPoolGen cp ) {
82
        int start_pc = start.getPosition();
82
        int start_pc = start.getPosition();
83
        int length = end.getPosition() - start_pc;
83
        int length = end.getPosition() - start_pc;
84
        if (length > 0) {
84
        if (null == end.getNext()) {
85
            length += end.getInstruction().getLength();
85
            length += end.getInstruction().getLength();
86
        }
86
        }
87
        int name_index = cp.addUtf8(name);
87
        int name_index = cp.addUtf8(name);
Lines 142-148 Link Here
142
        this.end = end;
142
        this.end = end;
143
    }
143
    }
144
144
145
145
    public void removeTargets() {
146
    	setStart(null);
147
    	setEnd(null);
148
    }
149
    
146
    /**
150
    /**
147
     * @param old_ih old target, either start or end
151
     * @param old_ih old target, either start or end
148
     * @param new_ih new target
152
     * @param new_ih new target

Return to bug 52468