X-Git-Url: http://git.megacz.com/?p=org.ibex.classgen.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FFieldGen.java;h=7f5242c87f08c6637ee0f31793c3aa8ed19e7c2f;hp=1e7373d468a11ef1e72ff2edb4d77b197081686b;hb=e70f9a95d3058a30dc93d8d45078ece8bb7a7dc6;hpb=12d5044d6e0c5c421a77dc436b0c8dd1e73cdeb4;ds=sidebyside diff --git a/src/org/ibex/classgen/FieldGen.java b/src/org/ibex/classgen/FieldGen.java index 1e7373d..7f5242c 100644 --- a/src/org/ibex/classgen/FieldGen.java +++ b/src/org/ibex/classgen/FieldGen.java @@ -4,59 +4,51 @@ import java.io.*; /** Class representing a field in a generated classfile @see ClassFile#addField */ -public class FieldGen implements CGConst { - private final String name; - private final Type type; - private final int flags; +public class FieldGen extends Type.Class.Field.Body { private final ClassFile.AttrGen attrs; StringBuffer debugToString(StringBuffer sb) { - sb.append(ClassFile.flagsToString(flags,false)); - sb.append(type.debugToString()); + sb.append(ClassFile.flagsToString(flags, false)); + sb.append(getField().getType().debugToString()); sb.append(" "); - sb.append(name); + sb.append(getField().getName()); if(attrs.contains("ConstantValue")) sb.append(" = \"").append(attrs.get("ConstantValue")).append("\""); sb.append(";"); return sb; } - FieldGen(DataInput in, ConstantPool cp) throws IOException { - flags = in.readShort(); - if((flags & ~VALID_FIELD_FLAGS) != 0) - throw new ClassFile.ClassReadExn("invalid flags"); - name = cp.getUtf8KeyByIndex(in.readShort()); - type = Type.fromDescriptor(cp.getUtf8KeyByIndex(in.readShort())); - attrs = new ClassFile.AttrGen(in,cp); + FieldGen(ClassFile cf, DataInput in, ConstantPool cp) throws IOException { + this(in.readShort(), + cf.getType().field(cp.getUtf8KeyByIndex(in.readShort()), + Type.fromDescriptor(cp.getUtf8KeyByIndex(in.readShort())))); } - FieldGen(ClassFile owner, String name, Type type, int flags) { - if((flags & ~VALID_FIELD_FLAGS) != 0) - throw new IllegalArgumentException("invalid flags"); - this.name = name; - this.type = type; - this.flags = flags; - this.attrs = new ClassFile.AttrGen(); + private FieldGen(int flags, Type.Class.Field field) { this(field, flags); } + FieldGen(Type.Class.Field field, int flags) { this(field, flags, new ClassFile.AttrGen()); } + FieldGen(Type.Class.Field field, int flags, ClassFile.AttrGen attrs) { + field.super(flags); + this.attrs = attrs; } /** Sets the ContantValue attribute for this field. @param val The value to set this field to. Must be an Integer, Long, Float, Double, or String */ public void setConstantValue(Object val) { - if((flags & STATIC) == 0) throw new IllegalStateException("field does not have the STATIC bit set"); + if (!isStatic()) throw new IllegalStateException("field does not have the STATIC bit set"); attrs.put("ConstantValue",val); } void finish(ConstantPool cp) { - cp.addUtf8(name); - cp.addUtf8(type.getDescriptor()); + cp.addUtf8(getField().getName()); + cp.addUtf8(getField().getType().getDescriptor()); attrs.finish(cp); } void dump(DataOutput o, ConstantPool cp) throws IOException { - o.writeShort(flags); - o.writeShort(cp.getUtf8Index(name)); - o.writeShort(cp.getUtf8Index(type.getDescriptor())); + o.writeShort(getFlags()); + o.writeShort(cp.getUtf8Index(getField().getName())); + o.writeShort(cp.getUtf8Index(getField().getType().getDescriptor())); attrs.dump(o,cp); } }