1 21 package com.db4o.reflect.jdk; 22 23 import com.db4o.reflect.*; 24 25 public class JdkReflector implements Reflector{ 26 27 private final ClassLoader _classLoader; 28 private Reflector _parent; 29 private ReflectArray _array; 30 31 public JdkReflector(ClassLoader classLoader){ 32 _classLoader = classLoader; 33 } 34 35 public ReflectArray array(){ 36 if(_array == null){ 37 _array = new JdkArray(_parent); 38 } 39 return _array; 40 } 41 42 public boolean constructorCallsSupported(){ 43 return true; 44 } 45 46 public Object deepClone(Object obj) { 47 return new JdkReflector(_classLoader); 48 } 49 50 public ReflectClass forClass(Class clazz){ 51 return new JdkClass(_parent, clazz); 52 } 53 54 public ReflectClass forName(String className) { 55 try { 56 Class clazz = _classLoader == null ? Class.forName(className) : _classLoader.loadClass(className); 57 if(clazz == null){ 58 return null; 59 } 60 return new JdkClass(_parent, clazz); 61 } 62 catch(Exception exc) { 63 } 64 return null; 65 } 66 67 public ReflectClass forObject(Object a_object) { 68 if(a_object == null){ 69 return null; 70 } 71 return _parent.forClass(a_object.getClass()); 72 } 73 74 public boolean isCollection(ReflectClass candidate) { 75 return false; 76 } 77 78 public boolean methodCallsSupported(){ 79 return true; 80 } 81 82 public void setParent(Reflector reflector) { 83 _parent = reflector; 84 } 85 86 public static ReflectClass[] toMeta(Reflector reflector, Class [] clazz){ 87 ReflectClass[] claxx = null; 88 if(clazz != null){ 89 claxx = new ReflectClass[clazz.length]; 90 for (int i = 0; i < clazz.length; i++) { 91 if(clazz[i] != null){ 92 claxx[i] = reflector.forClass(clazz[i]); 93 } 94 } 95 } 96 return claxx; 97 } 98 99 static Class [] toNative(ReflectClass[] claxx){ 100 Class [] clazz = null; 101 if(claxx != null){ 102 clazz = new Class [claxx.length]; 103 for (int i = 0; i < claxx.length; i++) { 104 clazz[i] = toNative(claxx[i]); 105 } 106 } 107 return clazz; 108 } 109 110 public static Class toNative(ReflectClass claxx){ 111 if(claxx == null){ 112 return null; 113 } 114 if(claxx instanceof JdkClass){ 115 return ((JdkClass)claxx).getJavaClass(); 116 } 117 ReflectClass d = claxx.getDelegate(); 118 if(d == claxx){ 119 return null; 120 } 121 return toNative(d); 122 } 123 124 } 125 | Popular Tags |