Mercurial Hosting > luan
comparison src/luan/lib/JavaLib.java @ 71:5a93129995e1
handle conflicting java member names
git-svn-id: https://luan-java.googlecode.com/svn/trunk@72 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Sat, 02 Feb 2013 18:14:44 +0000 |
parents | 177cfdc2bdb3 |
children | f86e4f77ef32 |
comparison
equal
deleted
inserted
replaced
70:59431bb8d0bf | 71:5a93129995e1 |
---|---|
120 throw new LuanException(luan,LuanElement.JAVA,"invalid member '"+key+"' for java object: "+obj); | 120 throw new LuanException(luan,LuanElement.JAVA,"invalid member '"+key+"' for java object: "+obj); |
121 } | 121 } |
122 | 122 |
123 private static Object member(Object obj,List<Member> members) throws LuanException { | 123 private static Object member(Object obj,List<Member> members) throws LuanException { |
124 try { | 124 try { |
125 for( Member m : members ) { | |
126 if( m instanceof AccessibleObject ) | |
127 ((AccessibleObject)m).setAccessible(true); | |
128 } | |
129 if( members.size()==1 ) { | 125 if( members.size()==1 ) { |
130 Member member = members.get(0); | 126 Member member = members.get(0); |
131 if( member instanceof Static ) { | 127 if( member instanceof Static ) { |
132 return member; | 128 return member; |
133 } else if( member instanceof Field ) { | 129 } else if( member instanceof Field ) { |
201 | 197 |
202 private static synchronized List<Member> getMembers(Class cls,String name) { | 198 private static synchronized List<Member> getMembers(Class cls,String name) { |
203 Map<String,List<Member>> clsMap = memberMap.get(cls); | 199 Map<String,List<Member>> clsMap = memberMap.get(cls); |
204 if( clsMap == null ) { | 200 if( clsMap == null ) { |
205 clsMap = new HashMap<String,List<Member>>(); | 201 clsMap = new HashMap<String,List<Member>>(); |
206 for( Method method : cls.getMethods() ) { | |
207 String s = method.getName(); | |
208 List<Member> list = clsMap.get(s); | |
209 if( list == null ) { | |
210 list = new ArrayList<Member>(); | |
211 clsMap.put(s,list); | |
212 } | |
213 list.add(method); | |
214 } | |
215 for( Class c : cls.getClasses() ) { | 202 for( Class c : cls.getClasses() ) { |
216 String s = c.getSimpleName(); | 203 String s = c.getSimpleName(); |
217 List<Member> list = clsMap.get(s); | 204 List<Member> list = new ArrayList<Member>(); |
218 if( list == null ) { | 205 clsMap.put(s,list); |
219 list = new ArrayList<Member>(); | |
220 clsMap.put(s,list); | |
221 } | |
222 list.add(new Static(c)); | 206 list.add(new Static(c)); |
223 } | 207 } |
224 for( Field field : cls.getFields() ) { | 208 for( Field field : cls.getFields() ) { |
225 String s = field.getName(); | 209 String s = field.getName(); |
226 try { | 210 try { |
227 if( !cls.getField(s).equals(field) ) | 211 if( !cls.getField(s).equals(field) ) |
228 continue; // not accessible | 212 continue; // not accessible |
229 } catch(NoSuchFieldException e) { | 213 } catch(NoSuchFieldException e) { |
230 throw new RuntimeException(e); | 214 throw new RuntimeException(e); |
231 } | 215 } |
232 List<Member> list = clsMap.get(s); | 216 List<Member> list = new ArrayList<Member>(); |
233 if( list != null ) | 217 clsMap.put(s,list); |
234 throw new RuntimeException("can't add field '"+s+"' to "+cls+" because these are already defined: "+list); | |
235 list = new ArrayList<Member>(); | 218 list = new ArrayList<Member>(); |
236 clsMap.put(s,list); | 219 clsMap.put(s,list); |
237 list.add(field); | 220 list.add(field); |
221 } | |
222 for( Method method : cls.getMethods() ) { | |
223 String s = method.getName(); | |
224 List<Member> list = clsMap.get(s); | |
225 if( list == null || !(list.get(0) instanceof Method) ) { | |
226 list = new ArrayList<Member>(); | |
227 clsMap.put(s,list); | |
228 } | |
229 list.add(method); | |
230 } | |
231 for( List<Member> members : clsMap.values() ) { | |
232 for( Member m : members ) { | |
233 if( m instanceof AccessibleObject ) | |
234 ((AccessibleObject)m).setAccessible(true); | |
235 } | |
238 } | 236 } |
239 memberMap.put(cls,clsMap); | 237 memberMap.put(cls,clsMap); |
240 } | 238 } |
241 List<Member> rtn = clsMap.get(name); | 239 List<Member> rtn = clsMap.get(name); |
242 if( rtn==null ) | 240 if( rtn==null ) |