comparison src/luan/lib/JavaLib.java @ 58:d6c454b7f58c

make concat work with any type; improve JavaLib.getMembers(); git-svn-id: https://luan-java.googlecode.com/svn/trunk@59 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Mon, 07 Jan 2013 00:18:35 +0000
parents c84274b18f0c
children a68ccb7aaa9c
comparison
equal deleted inserted replaced
57:19ca9c4c6c7f 58:d6c454b7f58c
148 148
149 private static synchronized List<Member> getMembers(Class cls,String name) { 149 private static synchronized List<Member> getMembers(Class cls,String name) {
150 Map<String,List<Member>> clsMap = memberMap.get(cls); 150 Map<String,List<Member>> clsMap = memberMap.get(cls);
151 if( clsMap == null ) { 151 if( clsMap == null ) {
152 clsMap = new HashMap<String,List<Member>>(); 152 clsMap = new HashMap<String,List<Member>>();
153 for( Method method : cls.getMethods() ) {
154 String s = method.getName();
155 List<Member> list = clsMap.get(s);
156 if( list == null ) {
157 list = new ArrayList<Member>();
158 clsMap.put(s,list);
159 }
160 list.add(method);
161 }
153 for( Class c : cls.getClasses() ) { 162 for( Class c : cls.getClasses() ) {
154 String s = c.getSimpleName(); 163 String s = c.getSimpleName();
155 List<Member> list = clsMap.get(s); 164 List<Member> list = clsMap.get(s);
156 if( list == null ) { 165 if( list == null ) {
157 list = new ArrayList<Member>(); 166 list = new ArrayList<Member>();
159 } 168 }
160 list.add(new Static(c)); 169 list.add(new Static(c));
161 } 170 }
162 for( Field field : cls.getFields() ) { 171 for( Field field : cls.getFields() ) {
163 String s = field.getName(); 172 String s = field.getName();
173 try {
174 if( !cls.getField(s).equals(field) )
175 continue; // not accessible
176 } catch(NoSuchFieldException e) {
177 throw new RuntimeException(e);
178 }
164 List<Member> list = clsMap.get(s); 179 List<Member> list = clsMap.get(s);
165 if( list == null ) { 180 if( list != null )
166 list = new ArrayList<Member>(); 181 throw new RuntimeException("can't add field '"+s+"' to "+cls+" because these are already defined: "+list);
167 clsMap.put(s,list); 182 list = new ArrayList<Member>();
168 } 183 clsMap.put(s,list);
169 list.add(field); 184 list.add(field);
170 }
171 for( Method method : cls.getMethods() ) {
172 String s = method.getName();
173 List<Member> list = clsMap.get(s);
174 if( list == null ) {
175 list = new ArrayList<Member>();
176 clsMap.put(s,list);
177 }
178 list.add(method);
179 } 185 }
180 memberMap.put(cls,clsMap); 186 memberMap.put(cls,clsMap);
181 } 187 }
182 List<Member> rtn = clsMap.get(name); 188 List<Member> rtn = clsMap.get(name);
183 if( rtn==null ) 189 if( rtn==null )