refactored functionality out of FieldGen into Type.Class.Field
[org.ibex.classgen.git] / src / org / ibex / classgen / FieldGen.java
index 1e7373d..7f5242c 100644 (file)
@@ -4,59 +4,51 @@ import java.io.*;
 
 /** Class representing a field in a generated classfile
     @see ClassFile#addField */
 
 /** 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) {
     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(" ");
-        sb.append(name);
+        sb.append(getField().getName());
         if(attrs.contains("ConstantValue"))
             sb.append(" = \"").append(attrs.get("ConstantValue")).append("\"");
         sb.append(";");
         return sb;
     }
     
         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) {
    }
     
     /** 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) {
         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 {
         
         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);
     }
 }
         attrs.dump(o,cp);
     }
 }