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 }