Initial commit from SVN.
This commit is contained in:
111
Class File Services/src/com/de22/javabytecode/Constant.java
Normal file
111
Class File Services/src/com/de22/javabytecode/Constant.java
Normal file
@@ -0,0 +1,111 @@
|
||||
package com.de22.javabytecode;
|
||||
|
||||
import java.io.IOException;
|
||||
import com.common.debug.*;
|
||||
import com.de22.javabytecode.constant.*;
|
||||
|
||||
/**
|
||||
* Copyright Wynne Crisman 1999,2006<p>
|
||||
*/
|
||||
public abstract class Constant extends Component {
|
||||
public static final byte CONSTANT_UTF8 = 0x01;
|
||||
public static final byte CONSTANT_INTEGER = 0x03;
|
||||
public static final byte CONSTANT_FLOAT = 0x04;
|
||||
public static final byte CONSTANT_LONG = 0x05;
|
||||
public static final byte CONSTANT_DOUBLE = 0x06;
|
||||
public static final byte CONSTANT_CLASS = 0x07;
|
||||
public static final byte CONSTANT_STRING = 0x08;
|
||||
public static final byte CONSTANT_FIELD_REF = 0x09;
|
||||
public static final byte CONSTANT_METHOD_REF = 0x0A;
|
||||
public static final byte CONSTANT_INTERFACE_METHOD_REF = 0x0B;
|
||||
public static final byte CONSTANT_NAME_AND_TYPE = 0x0C;
|
||||
/**
|
||||
* Constant constructor.
|
||||
*/
|
||||
public Constant(Type type) {
|
||||
super(type);
|
||||
}//Constant()//
|
||||
/**
|
||||
* Gets this constant's identifying constant.
|
||||
* @return The constant value that identifies this constant object type.
|
||||
*/
|
||||
public abstract byte getTag();
|
||||
/**
|
||||
* Gets a display string that shows the resulting value of the constant in a viewer friendly way.
|
||||
* @return The viewer friendly constant result.
|
||||
*/
|
||||
public abstract String getPrettyValue();
|
||||
/**
|
||||
* Determines whether the constant takes double the constant entries in the class bytes.
|
||||
* @return Whether the constant is a double size constant.
|
||||
*/
|
||||
public boolean isDoubleSize() {
|
||||
return false;
|
||||
}//isDoubleSize()//
|
||||
/**
|
||||
* Reads a constant from the given stream.
|
||||
* @param type The type object that the constant will belong to.
|
||||
* @param in The input stream to read the constant from.
|
||||
*/
|
||||
protected static Constant readConstant(Type type, java.io.ObjectInput in) throws java.io.IOException, ClassNotFoundException {
|
||||
Constant constant = null;
|
||||
short tag = in.readByte();
|
||||
|
||||
switch(tag) {
|
||||
case CONSTANT_CLASS:
|
||||
constant = new ConstantType(type);
|
||||
break;
|
||||
case CONSTANT_DOUBLE:
|
||||
constant = new ConstantDouble(type);
|
||||
break;
|
||||
case CONSTANT_FIELD_REF:
|
||||
constant = new ConstantFieldRef(type);
|
||||
break;
|
||||
case CONSTANT_FLOAT:
|
||||
constant = new ConstantFloat(type);
|
||||
break;
|
||||
case CONSTANT_INTEGER:
|
||||
constant = new ConstantInteger(type);
|
||||
break;
|
||||
case CONSTANT_INTERFACE_METHOD_REF:
|
||||
constant = new ConstantInterfaceMethodRef(type);
|
||||
break;
|
||||
case CONSTANT_LONG:
|
||||
constant = new ConstantLong(type);
|
||||
break;
|
||||
case CONSTANT_METHOD_REF:
|
||||
constant = new ConstantMethodRef(type);
|
||||
break;
|
||||
case CONSTANT_NAME_AND_TYPE:
|
||||
constant = new ConstantNameAndType(type);
|
||||
break;
|
||||
case CONSTANT_STRING:
|
||||
constant = new ConstantString(type);
|
||||
break;
|
||||
case CONSTANT_UTF8:
|
||||
constant = new ConstantUtf8(type);
|
||||
break;
|
||||
default:
|
||||
Debug.halt();
|
||||
break;
|
||||
}//switch//
|
||||
|
||||
constant.readExternal(in);
|
||||
|
||||
return constant;
|
||||
}//readConstant()//
|
||||
/**
|
||||
* Reads this object from the given stream.
|
||||
* @param in The input stream to read this object from.
|
||||
*/
|
||||
public void readExternal(java.io.ObjectInput in) throws IOException, ClassNotFoundException {
|
||||
//The tag will be read by the readConstant(Type, ObjectInput) method.//
|
||||
}//readExternal()//
|
||||
/**
|
||||
* Writes this object to the given stream.
|
||||
* @param out The output stream to write this object to.
|
||||
*/
|
||||
public void writeExternal(java.io.ObjectOutput out) throws IOException {
|
||||
out.writeByte(getTag());
|
||||
}//writeExternal()//
|
||||
}//Constant//
|
||||
Reference in New Issue
Block a user