X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FFieldGen.java;h=330849b096c0fbd6f31457a1f2eba5aa337a4b0d;hb=c8ebc16b29f334a8fe3908bd2d2c678b2c184d03;hp=39e91c0b04cc9152180f86894ec2283087fba5fb;hpb=bc9112573cba51be5e7d285ccd3e496be4278c63;p=org.ibex.classgen.git diff --git a/src/org/ibex/classgen/FieldGen.java b/src/org/ibex/classgen/FieldGen.java index 39e91c0..330849b 100644 --- a/src/org/ibex/classgen/FieldGen.java +++ b/src/org/ibex/classgen/FieldGen.java @@ -2,27 +2,44 @@ package org.ibex.classgen; import java.io.*; +/** Class representing a field in a generated classfile + @see ClassGen#addField */ public class FieldGen implements CGConst { private final CPGen cp; private final String name; private final Type type; private final int flags; - private final AttrGen attrs; + private final ClassGen.AttrGen attrs; - FieldGen(ClassGen owner, String name,Type type, int flags) { + private Object constantValue; + + FieldGen(DataInput in) { throw new Error("Brian is lame"); } + FieldGen(ClassGen owner, String name, Type type, int flags) { if((flags & ~(ACC_PUBLIC|ACC_PRIVATE|ACC_PROTECTED|ACC_VOLATILE|ACC_TRANSIENT|ACC_STATIC|ACC_FINAL)) != 0) throw new IllegalArgumentException("invalid flags"); this.cp = owner.cp; this.name = name; this.type = type; this.flags = flags; - this.attrs = new AttrGen(cp); + this.attrs = new ClassGen.AttrGen(cp); cp.addUtf8(name); cp.addUtf8(type.getDescriptor()); } - public void dump(DataOutput o) throws IOException { + /** 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 & ACC_STATIC) == 0) throw new IllegalStateException("field does not have the ACC_STATIC bit set"); + constantValue = val; + } + + void finish() { + if(constantValue != null && !attrs.contains("ConstantValue")) + attrs.add("ConstantValue", cp.add(constantValue)); + } + + void dump(DataOutput o) throws IOException { o.writeShort(flags); o.writeShort(cp.getUtf8Index(name)); o.writeShort(cp.getUtf8Index(type.getDescriptor()));