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