View Javadoc

    1   /***************************************************************************************
    2    * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved.                 *
    3    * http://aspectwerkz.codehaus.org                                                    *
    4    * ---------------------------------------------------------------------------------- *
    5    * The software in this package is published under the terms of the LGPL license      *
    6    * a copy of which has been included with this distribution in the license.txt file.  *
    7    **************************************************************************************/
    8   package org.codehaus.aspectwerkz.joinpoint.impl;
    9
    10  import org.codehaus.aspectwerkz.joinpoint.FieldRtti;
    11  import org.codehaus.aspectwerkz.joinpoint.Rtti;
    12
    13  import java.lang.ref.WeakReference;
    14  import java.lang.reflect.Field;
    15
    16  /***
    17   * Implementation for the field signature.
    18   *
    19   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
    20   */
    21  public class FieldRttiImpl implements FieldRtti {
    22      private final FieldSignatureImpl m_signature;
    23
    24      private WeakReference m_thisRef;
    25
    26      private WeakReference m_targetRef;
    27
    28      private Object m_fieldValue;
    29
    30      /***
    31       * Creates a new field RTTI.
    32       *
    33       * @param signature
    34       * @param thisInstance
    35       * @param targetInstance
    36       */
    37      public FieldRttiImpl(final FieldSignatureImpl signature, final Object thisInstance, final Object targetInstance) {
    38          m_signature = signature;
    39          m_thisRef = new WeakReference(thisInstance);
    40          m_targetRef = new WeakReference(targetInstance);
    41      }
    42
    43      /***
    44       * Clones the RTTI instance.
    45       *
    46       * @param thisInstance
    47       * @param targetInstance
    48       * @return
    49       */
    50      public Rtti cloneFor(final Object thisInstance, final Object targetInstance) {
    51          return new FieldRttiImpl(m_signature, thisInstance, targetInstance);
    52      }
    53
    54      /***
    55       * Returns the target instance.
    56       *
    57       * @return the target instance
    58       */
    59      public Object getTarget() {
    60          return m_targetRef.get();
    61      }
    62
    63      /***
    64       * Returns the instance currently executing.
    65       *
    66       * @return the instance currently executing
    67       */
    68      public Object getThis() {
    69          return m_thisRef.get();
    70      }
    71
    72      /***
    73       * Returns the declaring class.
    74       *
    75       * @return the declaring class
    76       */
    77      public Class getDeclaringType() {
    78          return m_signature.getDeclaringType();
    79      }
    80
    81      /***
    82       * Returns the modifiers for the signature. <p/>Could be used like this:
    83       * <p/>
    84       * <pre>
    85       * boolean isPublic = java.lang.reflect.Modifier.isPublic(signature.getModifiers());
    86       * </pre>
    87       *
    88       * @return the mofifiers
    89       */
    90      public int getModifiers() {
    91          return m_signature.getModifiers();
    92      }
    93
    94      /***
    95       * Returns the name (f.e. name of method of field).
    96       *
    97       * @return the name
    98       */
    99      public String getName() {
    100         return m_signature.getName();
    101     }
    102
    103     /***
    104      * Returns the field.
    105      *
    106      * @return the field
    107      */
    108     public Field getField() {
    109         return m_signature.getField();
    110     }
    111
    112     /***
    113      * Returns the field type.
    114      *
    115      * @return the field type
    116      */
    117     public Class getFieldType() {
    118         return m_signature.getFieldType();
    119     }
    120
    121     /***
    122      * Returns the value of the field.
    123      *
    124      * @return the value of the field
    125      */
    126     public Object getFieldValue() {
    127         return m_fieldValue;
    128     }
    129
    130     /***
    131      * Sets the value of the field.
    132      *
    133      * @param fieldValue the value of the field
    134      */
    135     public void setFieldValue(final Object fieldValue) {
    136         m_fieldValue = fieldValue;
    137     }
    138
    139     /***
    140      * Returns a string representation of the signature.
    141      *
    142      * @return a string representation
    143      * @TODO: implement toString to something meaningful
    144      */
    145     public String toString() {
    146         return super.toString();
    147     }
    148
    149     /***
    150      * TODO: Needed for stupid JIT compiler. Remove for 2.0.
    151      *
    152      * @return
    153      */
    154     public Object[] getParameterValues() {
    155         return new Object[]{m_fieldValue};
    156     }
    157 }