Mercurial Hosting > luan
comparison src/luan/lib/JavaLib.java @ 130:0594c132888b
cleanup
git-svn-id: https://luan-java.googlecode.com/svn/trunk@131 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 10 Jun 2014 02:43:40 +0000 |
parents | f537ff5e511d |
children | 3119326260ea |
comparison
equal
deleted
inserted
replaced
129:486a0641bca4 | 130:0594c132888b |
---|---|
112 if( !members.isEmpty() ) { | 112 if( !members.isEmpty() ) { |
113 return member(null,members); | 113 return member(null,members); |
114 } | 114 } |
115 } | 115 } |
116 } | 116 } |
117 throw luan.JAVA.exception("invalid member '"+key+"' for: "+obj); | 117 throw luan.exception("invalid member '"+key+"' for: "+obj); |
118 } | 118 } |
119 Class cls = obj.getClass(); | 119 Class cls = obj.getClass(); |
120 if( cls.isArray() ) { | 120 if( cls.isArray() ) { |
121 if( "length".equals(key) ) { | 121 if( "length".equals(key) ) { |
122 return Array.getLength(obj); | 122 return Array.getLength(obj); |
123 } | 123 } |
124 Integer i = Luan.asInteger(key); | 124 Integer i = Luan.asInteger(key); |
125 if( i != null ) { | 125 if( i != null ) { |
126 return Array.get(obj,i); | 126 return Array.get(obj,i); |
127 } | 127 } |
128 throw luan.JAVA.exception("invalid member '"+key+"' for java array: "+obj); | 128 throw luan.exception("invalid member '"+key+"' for java array: "+obj); |
129 } | 129 } |
130 if( key instanceof String ) { | 130 if( key instanceof String ) { |
131 String name = (String)key; | 131 String name = (String)key; |
132 if( "instanceof".equals(name) ) { | 132 if( "instanceof".equals(name) ) { |
133 return new LuanJavaFunction(instanceOf,new InstanceOf(obj)); | 133 return new LuanJavaFunction(instanceOf,new InstanceOf(obj)); |
136 if( !members.isEmpty() ) { | 136 if( !members.isEmpty() ) { |
137 return member(obj,members); | 137 return member(obj,members); |
138 } | 138 } |
139 } | 139 } |
140 } | 140 } |
141 // throw luan.JAVA.exception("invalid member '"+key+"' for java object: "+obj); | 141 // throw luan.exception("invalid member '"+key+"' for java object: "+obj); |
142 return null; | 142 return null; |
143 } | 143 } |
144 | 144 |
145 private static Object member(Object obj,List<Member> members) throws LuanException { | 145 private static Object member(Object obj,List<Member> members) throws LuanException { |
146 try { | 146 try { |
180 throw new RuntimeException("not field '"+name+"' of "+obj); | 180 throw new RuntimeException("not field '"+name+"' of "+obj); |
181 setMember(obj,members,value); | 181 setMember(obj,members,value); |
182 return; | 182 return; |
183 } | 183 } |
184 } | 184 } |
185 throw luan.JAVA.exception("invalid member '"+key+"' for: "+obj); | 185 throw luan.exception("invalid member '"+key+"' for: "+obj); |
186 } | 186 } |
187 Class cls = obj.getClass(); | 187 Class cls = obj.getClass(); |
188 if( cls.isArray() ) { | 188 if( cls.isArray() ) { |
189 Integer i = Luan.asInteger(key); | 189 Integer i = Luan.asInteger(key); |
190 if( i != null ) { | 190 if( i != null ) { |
191 Array.set(obj,i,value); | 191 Array.set(obj,i,value); |
192 return; | 192 return; |
193 } | 193 } |
194 throw luan.JAVA.exception("invalid member '"+key+"' for java array: "+obj); | 194 throw luan.exception("invalid member '"+key+"' for java array: "+obj); |
195 } | 195 } |
196 if( key instanceof String ) { | 196 if( key instanceof String ) { |
197 String name = (String)key; | 197 String name = (String)key; |
198 List<Member> members = getMembers(cls,name); | 198 List<Member> members = getMembers(cls,name); |
199 if( !members.isEmpty() ) { | 199 if( !members.isEmpty() ) { |
201 throw new RuntimeException("not field '"+name+"' of "+obj); | 201 throw new RuntimeException("not field '"+name+"' of "+obj); |
202 setMember(obj,members,value); | 202 setMember(obj,members,value); |
203 return; | 203 return; |
204 } | 204 } |
205 } | 205 } |
206 throw luan.JAVA.exception("invalid member '"+key+"' for java object: "+obj); | 206 throw luan.exception("invalid member '"+key+"' for java object: "+obj); |
207 } | 207 } |
208 | 208 |
209 private static void setMember(Object obj,List<Member> members,Object value) { | 209 private static void setMember(Object obj,List<Member> members,Object value) { |
210 Field field = (Field)members.get(0); | 210 Field field = (Field)members.get(0); |
211 try { | 211 try { |
375 for( LuanJavaFunction fn : fnMap.get(args.length) ) { | 375 for( LuanJavaFunction fn : fnMap.get(args.length) ) { |
376 try { | 376 try { |
377 return fn.rawCall(luan,args); | 377 return fn.rawCall(luan,args); |
378 } catch(IllegalArgumentException e) {} | 378 } catch(IllegalArgumentException e) {} |
379 } | 379 } |
380 throw luan.JAVA.exception("no method matched args"); | 380 throw luan.exception("no method matched args"); |
381 } | 381 } |
382 } | 382 } |
383 | 383 |
384 private static class InstanceOf { | 384 private static class InstanceOf { |
385 private final Object obj; | 385 private final Object obj; |
412 | 412 |
413 public Object assertClass(LuanState luan,Object v) throws LuanException { | 413 public Object assertClass(LuanState luan,Object v) throws LuanException { |
414 if( !cls.isInstance(v) ) { | 414 if( !cls.isInstance(v) ) { |
415 String got = v.getClass().getSimpleName(); | 415 String got = v.getClass().getSimpleName(); |
416 String expected = cls.getSimpleName(); | 416 String expected = cls.getSimpleName(); |
417 throw luan.JAVA.exception("bad argument #1 ("+expected+" expected, got "+got+")"); | 417 throw luan.exception("bad argument #1 ("+expected+" expected, got "+got+")"); |
418 } | 418 } |
419 return v; | 419 return v; |
420 } | 420 } |
421 } | 421 } |
422 private static final Method assertClass; | 422 private static final Method assertClass; |
442 args = new Object[0]; | 442 args = new Object[0]; |
443 String name = method.getName(); | 443 String name = method.getName(); |
444 Object fnObj = t.get(name); | 444 Object fnObj = t.get(name); |
445 if( fnObj==null && base!=null ) | 445 if( fnObj==null && base!=null ) |
446 return method.invoke(base,args); | 446 return method.invoke(base,args); |
447 LuanFunction fn = luan.JAVA.checkFunction(fnObj); | 447 LuanFunction fn = luan.checkFunction(fnObj); |
448 return Luan.first(luan.JAVA.call(fn,name,args)); | 448 return Luan.first(luan.call(fn,name,args)); |
449 } | 449 } |
450 } | 450 } |
451 ); | 451 ); |
452 } | 452 } |
453 } | 453 } |