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 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; this.repository = clazz.getRepository(); 34 this.clazz = clazz; 35 } 36 37 public String 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 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(); } 147 148 public String toString() 149 { 150 return getName(); 151 } 152 153 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 |