KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > aspectwerkz > reflect > impl > java > JavaFieldInfo


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.reflect.impl.java;
9
10 import org.codehaus.aspectwerkz.annotation.Annotations;
11 import org.codehaus.aspectwerkz.reflect.ClassInfo;
12 import org.codehaus.aspectwerkz.reflect.FieldInfo;
13 import org.codehaus.aspectwerkz.reflect.ReflectHelper;
14
15 import java.lang.reflect.Field JavaDoc;
16 import java.util.List JavaDoc;
17
18 /**
19  * Implementation of the FieldInfo interface for java.lang.reflect.*.
20  *
21  * @author <a HREF="mailto:jboner@codehaus.org">Jonas Bonér </a>
22  */

23 public class JavaFieldInfo extends JavaMemberInfo implements FieldInfo {
24     /**
25      * The field type.
26      */

27     private ClassInfo m_type = null;
28
29     /**
30      * The signature of the field.
31      */

32     private String JavaDoc m_signature;
33
34     /**
35      * Creates a new field java instance.
36      *
37      * @param field
38      * @param declaringType
39      */

40     JavaFieldInfo(final Field JavaDoc field, final JavaClassInfo declaringType) {
41         super(field, declaringType);
42         m_signature = ReflectHelper.getFieldSignature(field);
43     }
44
45     /**
46      * Returns the field info for the field specified.
47      *
48      * @param field the field
49      * @return the field info
50      */

51     public static FieldInfo getFieldInfo(final Field JavaDoc field) {
52         Class JavaDoc declaringClass = field.getDeclaringClass();
53         JavaClassInfoRepository repository = JavaClassInfoRepository.getRepository(declaringClass.getClassLoader());
54         ClassInfo classInfo = repository.getClassInfo(declaringClass.getName());
55         if (classInfo == null) {
56             classInfo = JavaClassInfo.getClassInfo(declaringClass);
57         }
58         return classInfo.getField(ReflectHelper.calculateHash(field));
59     }
60
61     /**
62      * Returns the signature for the element.
63      *
64      * @return the signature for the element
65      */

66     public String JavaDoc getSignature() {
67         return m_signature;
68     }
69
70     /**
71      * Returns the annotations.
72      *
73      * @return the annotations
74      */

75     public List JavaDoc getAnnotations() {
76         if (m_annotations == null) {
77             m_annotations = Annotations.getAnnotationInfos((Field JavaDoc) m_member);
78         }
79         return m_annotations;
80     }
81
82     /**
83      * Returns the type.
84      *
85      * @return the type
86      */

87     public ClassInfo getType() {
88         if (m_type == null) {
89             Class JavaDoc type = ((Field JavaDoc) m_member).getType();
90             if (m_classInfoRepository.hasClassInfo(type.getName())) {
91                 m_type = m_classInfoRepository.getClassInfo(type.getName());
92             } else {
93                 m_type = JavaClassInfo.getClassInfo(type);
94                 m_classInfoRepository.addClassInfo(m_type);
95             }
96         }
97         return m_type;
98     }
99
100     public boolean equals(Object JavaDoc o) {
101         if (this == o) {
102             return true;
103         }
104         if (!(o instanceof FieldInfo)) {
105             return false;
106         }
107         FieldInfo fieldInfo = (FieldInfo) o;
108         if (!m_declaringType.getName().equals(fieldInfo.getDeclaringType().getName())) {
109             return false;
110         }
111         if (!m_member.getName().equals(fieldInfo.getName())) {
112             return false;
113         }
114         ClassInfo fieldType = fieldInfo.getType();
115         if (!m_type.getName().equals(fieldType.getName())) {
116             return false;
117         }
118         return true;
119     }
120
121     public int hashCode() {
122         int result = 29;
123         if (m_type == null) {
124             getType();
125         }
126         result = (29 * result) + m_declaringType.getName().hashCode();
127         result = (29 * result) + m_member.getName().hashCode();
128         result = (29 * result) + getType().getName().hashCode();
129         return result;
130     }
131 }
Popular Tags