comparison src/luan/lib/JavaLib.java @ 102:90b918cbf888

add JavaLib.privateAccess git-svn-id: https://luan-java.googlecode.com/svn/trunk@103 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 18 Jun 2013 02:46:24 +0000
parents 6c827f7275df
children 3c404a296995
comparison
equal deleted inserted replaced
101:8ebcccca13ab 102:90b918cbf888
212 } catch(IllegalAccessException e) { 212 } catch(IllegalAccessException e) {
213 throw new RuntimeException(e); 213 throw new RuntimeException(e);
214 } 214 }
215 } 215 }
216 216
217 public static boolean privateAccess = false;
217 private static Map<Class,Map<String,List<Member>>> memberMap = new HashMap<Class,Map<String,List<Member>>>(); 218 private static Map<Class,Map<String,List<Member>>> memberMap = new HashMap<Class,Map<String,List<Member>>>();
218 219
219 private static synchronized List<Member> getMembers(Class cls,String name) { 220 private static synchronized List<Member> getMembers(Class cls,String name) {
220 Map<String,List<Member>> clsMap = memberMap.get(cls); 221 Map<String,List<Member>> clsMap = memberMap.get(cls);
221 if( clsMap == null ) { 222 if( clsMap == null ) {
234 } catch(NoSuchFieldException e) { 235 } catch(NoSuchFieldException e) {
235 throw new RuntimeException(e); 236 throw new RuntimeException(e);
236 } 237 }
237 List<Member> list = new ArrayList<Member>(); 238 List<Member> list = new ArrayList<Member>();
238 clsMap.put(s,list); 239 clsMap.put(s,list);
239 list = new ArrayList<Member>();
240 clsMap.put(s,list);
241 list.add(field); 240 list.add(field);
242 } 241 }
243 for( Method method : cls.getMethods() ) { 242 for( Method method : cls.getMethods() ) {
244 String s = method.getName(); 243 String s = method.getName();
245 List<Member> list = clsMap.get(s); 244 List<Member> list = clsMap.get(s);
246 if( list == null || !(list.get(0) instanceof Method) ) { 245 if( list == null || !(list.get(0) instanceof Method) ) {
247 list = new ArrayList<Member>(); 246 list = new ArrayList<Member>();
248 clsMap.put(s,list); 247 clsMap.put(s,list);
249 } 248 }
250 list.add(method); 249 list.add(method);
250 }
251 if( privateAccess ) {
252 for( Method method : cls.getDeclaredMethods() ) {
253 String s = method.getName();
254 List<Member> list = clsMap.get(s);
255 if( list == null ) {
256 list = new ArrayList<Member>();
257 clsMap.put(s,list);
258 } else if( !(list.get(0) instanceof Method) )
259 continue;
260 if( !list.contains(method) ) {
261 list.add(method);
262 }
263 }
264 for( Field field : cls.getDeclaredFields() ) {
265 String s = field.getName();
266 List<Member> list = clsMap.get(s);
267 if( list == null ) {
268 list = new ArrayList<Member>();
269 clsMap.put(s,list);
270 list.add(field);
271 }
272 }
251 } 273 }
252 for( List<Member> members : clsMap.values() ) { 274 for( List<Member> members : clsMap.values() ) {
253 for( Member m : members ) { 275 for( Member m : members ) {
254 if( m instanceof AccessibleObject ) 276 if( m instanceof AccessibleObject )
255 ((AccessibleObject)m).setAccessible(true); 277 ((AccessibleObject)m).setAccessible(true);