1 package ch.ethz.prose.jvmai.jikesrvm.advice_weaver; 2 3 import java.lang.reflect.Field ; 4 5 import ch.ethz.jvmai.FieldJoinPoint; 6 7 import com.ibm.JikesRVM.classloader.*; 8 9 14 public class FieldJoinPointImpl extends CodeJoinPointImpl implements FieldJoinPoint { 15 16 19 public int fieldId; 20 21 24 public Field field; 25 26 29 public Object owner; 30 31 34 public Object value; 35 36 public void init(int id, Object tag, Object this0, Object [] args, int fieldId, Object owner) { 37 init(id, tag, this0, args); 38 this.fieldId = fieldId; 39 field = null; 40 this.owner = owner; 41 value = null; 42 } 43 44 49 public Object getTarget() { 50 return owner; 51 } 52 53 public Field getField() { 54 if (field == null) { 55 VM_Field f = VM_FieldReference.getMemberRef(fieldId).asFieldReference().resolve(); 56 return java.lang.reflect.JikesRVMSupport.createField(f); 57 } 58 59 return field; 60 } 61 62 public Object getValue() { 63 if (value == null) { 64 VM_Field f = VM_FieldReference.getMemberRef(fieldId).asFieldReference().resolve(); 65 VM_TypeReference type = f.getType(); 66 if (type.isReferenceType()) { 67 value = f.getObjectValueUnchecked(owner); 68 } else if (type.isCharType()) { 69 value = new Character (f.getCharValueUnchecked(owner)); 70 } else if (type.isDoubleType()) { 71 value = new Double (f.getDoubleValueUnchecked(owner)); 72 } else if (type.isFloatType()) { 73 value = new Float (f.getFloatValueUnchecked(owner)); 74 } else if (type.isLongType()) { 75 value = new Long (f.getLongValueUnchecked(owner)); 76 } else if (type.isIntType()) { 77 value = new Integer (f.getIntValueUnchecked(owner)); 78 } else if (type.isShortType()) { 79 value = new Short (f.getShortValueUnchecked(owner)); 80 } else if (type.isByteType()) { 81 value = new Byte (f.getByteValueUnchecked(owner)); 82 } else if (type.isBooleanType()) { 83 value = new Boolean (f.getBooleanValueUnchecked(owner)); 84 } else { 85 throw new InternalError ("Huh? Field of unknown primitive type " + type); 86 } 87 } 88 89 return value; 90 } 91 92 } 93 | Popular Tags |