OSDN Git Service

Add user-friendly constructors to StdField
[android-x86/dalvik.git] / dexgen / src / com / android / dexgen / rop / StdField.java
index 3084dcc..9adcc30 100644 (file)
@@ -18,6 +18,7 @@ package com.android.dexgen.rop;
 
 import com.android.dexgen.rop.cst.CstNat;
 import com.android.dexgen.rop.cst.CstType;
+import com.android.dexgen.rop.cst.CstUtf8;
 import com.android.dexgen.rop.cst.TypedConstant;
 
 /**
@@ -38,6 +39,34 @@ public final class StdField extends StdMember implements Field {
         super(definingClass, accessFlags, nat, attributes);
     }
 
+    /**
+     * Constructs an instance having Java field as its pattern.
+     *
+     * @param field {@code non-null;} pattern for dex field
+     */
+    public StdField(java.lang.reflect.Field field) {
+        this(CstType.intern(field.getDeclaringClass()),
+                field.getModifiers(),
+                new CstNat(new CstUtf8(field.getName()),
+                        CstType.intern(field.getType()).getDescriptor()),
+                new StdAttributeList(0));
+    }
+
+    /**
+     * Constructs an instance taking field description as user-friendly arguments.
+     *
+     * @param declaringClass {@code non-null;} the class field belongs to
+     * @param type {@code non-null;} type of the field
+     * @param name {@code non-null;} name of the field
+     * @param modifiers access flags of the field
+     */
+    public StdField(Class definingClass, Class type, String name, int modifiers) {
+        this(CstType.intern(definingClass),
+                modifiers,
+                new CstNat(new CstUtf8(name), CstType.intern(type).getDescriptor()),
+                new StdAttributeList(0));
+    }
+
     /** {@inheritDoc} */
     public TypedConstant getConstantValue() {
         AttributeList attribs = getAttributes();
@@ -50,4 +79,4 @@ public final class StdField extends StdMember implements Field {
 
         return cval.getConstantValue();
     }
-}
+}
\ No newline at end of file