KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ch > ethz > prose > jvmai > jikesrvm > advice_weaver > FieldJoinPointImpl


1 package ch.ethz.prose.jvmai.jikesrvm.advice_weaver;
2
3 import java.lang.reflect.Field JavaDoc;
4
5 import ch.ethz.jvmai.FieldJoinPoint;
6
7 import com.ibm.JikesRVM.classloader.*;
8
9 /**
10  * Concrete implementation of a CodeJoinPoint for the Jikes RVM.
11  *
12  * @author Johann Gyger
13  */

14 public class FieldJoinPointImpl extends CodeJoinPointImpl implements FieldJoinPoint {
15
16   /**
17    * Field identifier to which this join point belongs.
18    */

19   public int fieldId;
20
21   /**
22    * Field to which this join point belongs.
23    */

24   public Field JavaDoc field;
25   
26   /**
27    * Owner of `field'.
28    */

29   public Object JavaDoc owner;
30   
31   /**
32    * Field value for `owner';
33    */

34   public Object JavaDoc value;
35
36   public void init(int id, Object JavaDoc tag, Object JavaDoc this0, Object JavaDoc[] args, int fieldId, Object JavaDoc owner) {
37     init(id, tag, this0, args);
38     this.fieldId = fieldId;
39     field = null;
40     this.owner = owner;
41     value = null;
42   }
43
44   /**
45    * The target of a field join point differs from the target of a code join
46    * point: It is actually the owner of the field. See
47    * {@link com.ibm.JikesRVM.VM_JVMAI#getFieldTarget()}for more information.
48    */

49   public Object JavaDoc getTarget() {
50     return owner;
51   }
52
53   public Field JavaDoc 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 JavaDoc 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 JavaDoc(f.getCharValueUnchecked(owner));
70       } else if (type.isDoubleType()) {
71         value = new Double JavaDoc(f.getDoubleValueUnchecked(owner));
72       } else if (type.isFloatType()) {
73         value = new Float JavaDoc(f.getFloatValueUnchecked(owner));
74       } else if (type.isLongType()) {
75         value = new Long JavaDoc(f.getLongValueUnchecked(owner));
76       } else if (type.isIntType()) {
77         value = new Integer JavaDoc(f.getIntValueUnchecked(owner));
78       } else if (type.isShortType()) {
79         value = new Short JavaDoc(f.getShortValueUnchecked(owner));
80       } else if (type.isByteType()) {
81         value = new Byte JavaDoc(f.getByteValueUnchecked(owner));
82       } else if (type.isBooleanType()) {
83         value = new Boolean JavaDoc(f.getBooleanValueUnchecked(owner));
84       } else {
85         throw new InternalError JavaDoc("Huh? Field of unknown primitive type " + type);
86       }
87     }
88
89     return value;
90   }
91
92 }
93
Popular Tags