OSDN Git Service

Add user-friendly constructors to StdField
authorPiotr Gurgul <pgurgul@google.com>
Thu, 23 Sep 2010 18:30:14 +0000 (11:30 -0700)
committerPiotr Gurgul <pgurgul@google.com>
Thu, 23 Sep 2010 22:25:34 +0000 (15:25 -0700)
This is to simplify programmatic use of StdField to create dex fields
dynamically without knowledge of the dex internal format.

Change-Id: Ib11980509e0336d1e0253b6d480240d6832b73dd

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