< prev index next >
src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/LDC.java
Print this page
@@ -18,118 +18,140 @@
* limitations under the License.
*/
package com.sun.org.apache.bcel.internal.generic;
-import java.io.*;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.ExceptionConst;
import com.sun.org.apache.bcel.internal.util.ByteSequence;
/**
* LDC - Push item from constant pool.
*
* <PRE>Stack: ... -> ..., item</PRE>
*
- * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
+ * @version $Id: LDC.java 1749603 2016-06-21 20:50:19Z ggregory $
*/
-public class LDC extends CPInstruction
- implements PushInstruction, ExceptionThrower, TypedInstruction {
+public class LDC extends CPInstruction implements PushInstruction, ExceptionThrower {
+
/**
* Empty constructor needed for the Class.newInstance() statement in
* Instruction.readInstruction(). Not to be used otherwise.
*/
- LDC() {}
+ LDC() {
+ }
- public LDC(int index) {
- super(com.sun.org.apache.bcel.internal.Constants.LDC_W, index);
+
+ public LDC(final int index) {
+ super(com.sun.org.apache.bcel.internal.Const.LDC_W, index);
setSize();
}
+
// Adjust to proper size
protected final void setSize() {
- if(index <= com.sun.org.apache.bcel.internal.Constants.MAX_BYTE) { // Fits in one byte?
- opcode = com.sun.org.apache.bcel.internal.Constants.LDC;
- length = 2;
+ if (super.getIndex() <= com.sun.org.apache.bcel.internal.Const.MAX_BYTE) { // Fits in one byte?
+ super.setOpcode(com.sun.org.apache.bcel.internal.Const.LDC);
+ super.setLength(2);
} else {
- opcode = com.sun.org.apache.bcel.internal.Constants.LDC_W;
- length = 3;
+ super.setOpcode(com.sun.org.apache.bcel.internal.Const.LDC_W);
+ super.setLength(3);
}
}
+
/**
* Dump instruction as byte code to stream out.
* @param out Output stream
*/
- public void dump(DataOutputStream out) throws IOException {
- out.writeByte(opcode);
-
- if(length == 2)
- out.writeByte(index);
- else // Applies for LDC_W
- out.writeShort(index);
+ @Override
+ public void dump( final DataOutputStream out ) throws IOException {
+ out.writeByte(super.getOpcode());
+ if (super.getLength() == 2) { // TODO useless check?
+ out.writeByte(super.getIndex());
+ } else {
+ out.writeShort(super.getIndex());
+ }
}
+
/**
* Set the index to constant pool and adjust size.
*/
- public final void setIndex(int index) {
+ @Override
+ public final void setIndex( final int index ) {
super.setIndex(index);
setSize();
}
+
/**
* Read needed data (e.g. index) from file.
*/
- protected void initFromFile(ByteSequence bytes, boolean wide)
- throws IOException
- {
- length = 2;
- index = bytes.readUnsignedByte();
+ @Override
+ protected void initFromFile( final ByteSequence bytes, final boolean wide ) throws IOException {
+ super.setLength(2);
+ super.setIndex(bytes.readUnsignedByte());
}
- public Object getValue(ConstantPoolGen cpg) {
- com.sun.org.apache.bcel.internal.classfile.Constant c = cpg.getConstantPool().getConstant(index);
-
- switch(c.getTag()) {
- case com.sun.org.apache.bcel.internal.Constants.CONSTANT_String:
- int i = ((com.sun.org.apache.bcel.internal.classfile.ConstantString)c).getStringIndex();
- c = cpg.getConstantPool().getConstant(i);
- return ((com.sun.org.apache.bcel.internal.classfile.ConstantUtf8)c).getBytes();
-
- case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Float:
- return Float.valueOf(((com.sun.org.apache.bcel.internal.classfile.ConstantFloat)c).getBytes());
-
- case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Integer:
- return Integer.valueOf(((com.sun.org.apache.bcel.internal.classfile.ConstantInteger)c).getBytes());
+ public Object getValue( final ConstantPoolGen cpg ) {
+ com.sun.org.apache.bcel.internal.classfile.Constant c = cpg.getConstantPool().getConstant(super.getIndex());
+ switch (c.getTag()) {
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_String:
+ final int i = ((com.sun.org.apache.bcel.internal.classfile.ConstantString) c).getStringIndex();
+ c = cpg.getConstantPool().getConstant(i);
+ return ((com.sun.org.apache.bcel.internal.classfile.ConstantUtf8) c).getBytes();
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_Float:
+ return new Float(((com.sun.org.apache.bcel.internal.classfile.ConstantFloat) c).getBytes());
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_Integer:
+ return Integer.valueOf(((com.sun.org.apache.bcel.internal.classfile.ConstantInteger) c).getBytes());
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_Class:
+ final int nameIndex = ((com.sun.org.apache.bcel.internal.classfile.ConstantClass) c).getNameIndex();
+ c = cpg.getConstantPool().getConstant(nameIndex);
+ return new ObjectType(((com.sun.org.apache.bcel.internal.classfile.ConstantUtf8) c).getBytes());
default: // Never reached
- throw new RuntimeException("Unknown or invalid constant type at " + index);
+ throw new RuntimeException("Unknown or invalid constant type at " + super.getIndex());
}
}
- public Type getType(ConstantPoolGen cpg) {
- switch(cpg.getConstantPool().getConstant(index).getTag()) {
- case com.sun.org.apache.bcel.internal.Constants.CONSTANT_String: return Type.STRING;
- case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Float: return Type.FLOAT;
- case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Integer: return Type.INT;
+
+ @Override
+ public Type getType( final ConstantPoolGen cpg ) {
+ switch (cpg.getConstantPool().getConstant(super.getIndex()).getTag()) {
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_String:
+ return Type.STRING;
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_Float:
+ return Type.FLOAT;
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_Integer:
+ return Type.INT;
+ case com.sun.org.apache.bcel.internal.Const.CONSTANT_Class:
+ return Type.CLASS;
default: // Never reached
- throw new RuntimeException("Unknown or invalid constant type at " + index);
+ throw new RuntimeException("Unknown or invalid constant type at " + super.getIndex());
}
}
- public Class[] getExceptions() {
- return com.sun.org.apache.bcel.internal.ExceptionConstants.EXCS_STRING_RESOLUTION;
+
+ @Override
+ public Class<?>[] getExceptions() {
+ return ExceptionConst.createExceptions(ExceptionConst.EXCS.EXCS_STRING_RESOLUTION);
}
+
/**
* Call corresponding visitor method(s). The order is:
* Call visitor methods of implemented interfaces first, then
* call methods according to the class hierarchy in descending order,
* i.e., the most specific visitXXX() call comes last.
*
* @param v Visitor object
*/
- public void accept(Visitor v) {
+ @Override
+ public void accept( final Visitor v ) {
v.visitStackProducer(this);
v.visitPushInstruction(this);
v.visitExceptionThrower(this);
v.visitTypedInstruction(this);
v.visitCPInstruction(this);
< prev index next >