KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > clirr > core > internal > bcel > BcelJavaType


1 package net.sf.clirr.core.internal.bcel;
2
3 import net.sf.clirr.core.spi.Field;
4 import net.sf.clirr.core.spi.JavaType;
5 import net.sf.clirr.core.spi.Method;
6 import net.sf.clirr.core.spi.Scope;
7
8 import org.apache.bcel.classfile.JavaClass;
9 import org.apache.bcel.generic.ObjectType;
10 import org.apache.bcel.generic.Type;
11 import org.apache.bcel.util.Repository;
12
13 /**
14  *
15  */

16 public final class BcelJavaType implements JavaType
17 {
18     private Type type;
19     private JavaClass clazz;
20     private Repository repository;
21     
22     
23     public BcelJavaType(Type bcelType, Repository repository)
24     {
25         this.type = bcelType;
26         this.repository = repository;
27         this.clazz = findJavaClass(type);
28     }
29
30     public BcelJavaType(JavaClass clazz)
31     {
32         this.type = null; // TODO: how can I convert a JavaClass to the corresponding Type?
33
this.repository = clazz.getRepository();
34         this.clazz = clazz;
35     }
36     
37     public String JavaDoc getName() {
38         if (clazz != null)
39         {
40             return clazz.getClassName();
41         }
42         else
43         {
44             return type.toString();
45         }
46     }
47
48     public JavaType getContainingClass() {
49
50         // TODO: move code from ScopeHelper here
51

52         return null;
53     }
54
55     private JavaClass findJavaClass(Type type) {
56         if (!(type instanceof ObjectType))
57         {
58             return null;
59         }
60         ObjectType ot = (ObjectType) type;
61         return repository.findClass(ot.getClassName());
62     }
63
64     public JavaType[] getSuperClasses() {
65         if (clazz == null)
66         {
67             return new JavaType[0];
68         }
69         final JavaClass[] superClasses = clazz.getSuperClasses();
70         return convertToJavaTypeArray(superClasses);
71     }
72
73     public JavaType[] getAllInterfaces() {
74         if (clazz == null)
75         {
76             return new JavaType[0];
77         }
78         final JavaClass[] interfaces = clazz.getAllInterfaces();
79         return convertToJavaTypeArray(interfaces);
80     }
81
82     public JavaType[] getInnerClasses() {
83         return new JavaType[0];
84     }
85
86     public Method[] getMethods() {
87         if (clazz == null)
88         {
89             return new Method[0];
90         }
91         final org.apache.bcel.classfile.Method[] methods = clazz.getMethods();
92         Method[] ret = new Method[methods.length];
93         for (int i = 0; i < ret.length; i++) {
94             ret[i] = new BcelMethod(clazz, methods[i]);
95         }
96         return ret;
97     }
98
99     public Field[] getFields() {
100         if (clazz == null)
101         {
102             return new Field[0];
103         }
104         final org.apache.bcel.classfile.Field[] fields = clazz.getFields();
105         Field[] ret = new Field[fields.length];
106         for (int i = 0; i < ret.length; i++) {
107             ret[i] = new BcelField(clazz, fields[i]);
108         }
109         return ret;
110     }
111
112     public boolean isPrimitive() {
113         return clazz == null;
114     }
115
116     public boolean isArray() {
117         return false;
118     }
119
120     public boolean isFinal() {
121         if (clazz == null)
122         {
123             return false;
124         }
125         return clazz.isFinal();
126     }
127
128     public boolean isAbstract() {
129         if (clazz == null)
130         {
131             return false;
132         }
133         return clazz.isAbstract();
134     }
135
136     public boolean isInterface() {
137         return clazz.isInterface();
138     }
139
140     public Scope getDeclaredScope() {
141         return BcelScopeHelper.getClassScope(clazz);
142     }
143
144     public Scope getEffectiveScope() {
145          return getDeclaredScope(); // FIXME
146
}
147     
148     public String JavaDoc toString()
149     {
150         return getName();
151     }
152     
153     /**
154      * @param bcelClasses
155      * @return
156      */

157     private JavaType[] convertToJavaTypeArray(final JavaClass[] bcelClasses) {
158         JavaType[] ret = new JavaType[bcelClasses.length];
159         for (int i = 0; i < ret.length; i++) {
160             ret[i] = new BcelJavaType(bcelClasses[i]);
161         }
162         return ret;
163     }
164
165
166 }
167
Popular Tags