annotate src/luan/modules/JavaLuan.java @ 1561:e1a13e707bf3

start immutable
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 05 Nov 2020 20:24:09 -0700
parents 8d95711f6615
children b89212fd04b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
167
4c0131c2b650 merge luan/lib into modules
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 163
diff changeset
1 package luan.modules;
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
3 import java.lang.reflect.Array;
50
272b6f1d7dac fix java accessibility
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
4 import java.lang.reflect.AccessibleObject;
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
5 import java.lang.reflect.Member;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
6 import java.lang.reflect.Field;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import java.lang.reflect.Method;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8 import java.lang.reflect.Constructor;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9 import java.lang.reflect.Modifier;
61
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
10 import java.lang.reflect.InvocationHandler;
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
11 import java.lang.reflect.Proxy;
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
12 import java.util.Map;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13 import java.util.HashMap;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14 import java.util.List;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15 import java.util.ArrayList;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
16 import java.util.Iterator;
55
9381b23ea9e1 various fixes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 51
diff changeset
17 import java.util.Collections;
157
1de3e4a6e82d remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 142
diff changeset
18 import java.util.Arrays;
1120
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
19 import java.util.Comparator;
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
20 import luan.Luan;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
21 import luan.LuanTable;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
22 import luan.LuanException;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
23 import luan.LuanFunction;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
24 import luan.LuanJavaFunction;
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
25 import luan.LuanCloner;
1561
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
26 import luan.LuanImmutabler;
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
27
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
28
168
ebe9db183eb7 rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 167
diff changeset
29 public final class JavaLuan {
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
30
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
31 public static void java(Luan luan) throws LuanException {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
32 Luan.checkSecurity(luan,"java");
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
33 luan.peek().javaOk = true;
300
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 299
diff changeset
34 }
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 299
diff changeset
35
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
36 private static void checkJava(Luan luan) throws LuanException {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
37 if( !luan.peek().javaOk )
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 645
diff changeset
38 throw new LuanException("Java isn't allowed");
300
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 299
diff changeset
39 }
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 299
diff changeset
40
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
41 public static Object __index(Luan luan,Object obj,Object key) throws LuanException {
421
b31d614343e8 add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
42 checkJava(luan);
511
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
43 Class cls;
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
44 if( obj instanceof Static ) {
511
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
45 Static st = (Static)obj;
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
46 cls = st.cls;
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
47 if( key instanceof String ) {
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
48 String name = (String)key;
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
49 if( "class".equals(name) ) {
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
50 return cls;
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
51 } else if( "new".equals(name) ) {
437
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
52 Constructor[] constructors = cls.getConstructors();
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
53 if( constructors.length > 0 ) {
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
54 if( constructors.length==1 ) {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
55 return new LuanJavaFunction(luan,constructors[0],null);
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
56 } else {
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
57 List<LuanJavaFunction> fns = new ArrayList<LuanJavaFunction>();
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
58 for( Constructor constructor : constructors ) {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
59 fns.add(new LuanJavaFunction(luan,constructor,null));
197
4c96cb73dd93 fix metatable cloning
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 196
diff changeset
60 }
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
61 return new AmbiguousJavaFunction(fns);
197
4c96cb73dd93 fix metatable cloning
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 196
diff changeset
62 }
4c96cb73dd93 fix metatable cloning
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 196
diff changeset
63 }
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
64 /*
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
65 } else if( "assert".equals(name) ) {
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
66 return new LuanJavaFunction(assertClass,new AssertClass(cls));
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
67 */
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
68 } else if( "luan_proxy".equals(name) ) {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
69 return new LuanJavaFunction(luan,luan_proxyMethod,st);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
70 } else {
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
71 List<Member> members = getStaticMembers(cls,name);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
72 if( !members.isEmpty() ) {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
73 return member(luan,null,members);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
74 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
75 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
76 }
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
77 } else {
511
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
78 cls = obj.getClass();
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
79 if( cls.isArray() ) {
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
80 if( "length".equals(key) ) {
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
81 return Array.getLength(obj);
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
82 }
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
83 Integer i = Luan.asInteger(key);
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
84 if( i != null ) {
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
85 return Array.get(obj,i);
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
86 }
578
60c549d43988 remove LuanState.exception()
Franklin Schmidt <fschmidt@gmail.com>
parents: 576
diff changeset
87 // throw new LuanException(luan,"invalid member '"+key+"' for java array: "+obj);
510
2da0bcb979b5 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
88 } else if( key instanceof String ) {
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
89 String name = (String)key;
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
90 if( "instanceof".equals(name) ) {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
91 return new LuanJavaFunction(luan,instanceOf,new InstanceOf(obj));
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
92 } else {
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
93 List<Member> members = getMembers(cls,name);
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
94 if( !members.isEmpty() ) {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
95 return member(luan,obj,members);
509
e3b0846dc2ef throw exception for invalid indexes of string, binary, or java
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
96 }
208
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
97 }
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
98 }
5ba136769034 remove MetatableGetter and use a generic metatable instead
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
99 }
297
899253043270 remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 277
diff changeset
100 //System.out.println("invalid member '"+key+"' for java object: "+obj);
687
fc08c3b42010 add theme_to_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 683
diff changeset
101 throw new LuanException( "invalid index '"+key+"' for java "+cls );
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
102 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
103
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
104 private static Object member(Luan luan,Object obj,List<Member> members) throws LuanException {
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
105 try {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
106 if( members.size()==1 ) {
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
107 Member member = members.get(0);
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
108 if( member instanceof Static ) {
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
109 return member;
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
110 } else if( member instanceof Field ) {
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
111 Field field = (Field)member;
157
1de3e4a6e82d remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 142
diff changeset
112 Object rtn = field.get(obj);
1de3e4a6e82d remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 142
diff changeset
113 return rtn instanceof Object[] ? Arrays.asList((Object[])rtn) : rtn;
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
114 } else {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
115 Method method = (Method)member;
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
116 return new LuanJavaFunction(luan,method,obj);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
117 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
118 } else {
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
119 List<LuanJavaFunction> fns = new ArrayList<LuanJavaFunction>();
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
120 for( Member member : members ) {
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
121 Method method = (Method)member;
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
122 fns.add(new LuanJavaFunction(luan,method,obj));
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
123 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
124 return new AmbiguousJavaFunction(fns);
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
125 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
126 } catch(IllegalAccessException e) {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
127 throw new RuntimeException(e);
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
128 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
129 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
130
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
131 public static void __new_index(Luan luan,Object obj,Object key,Object value) throws LuanException {
421
b31d614343e8 add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
132 checkJava(luan);
511
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
133 Class cls;
60
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
134 if( obj instanceof Static ) {
511
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
135 Static st = (Static)obj;
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
136 cls = st.cls;
60
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
137 if( key instanceof String ) {
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
138 String name = (String)key;
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
139 List<Member> members = getStaticMembers(cls,name);
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
140 if( !members.isEmpty() ) {
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
141 if( members.size() != 1 )
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
142 throw new RuntimeException("not field '"+name+"' of "+obj);
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
143 setMember(obj,members,value);
421
b31d614343e8 add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
144 return;
60
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
145 }
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
146 }
578
60c549d43988 remove LuanState.exception()
Franklin Schmidt <fschmidt@gmail.com>
parents: 576
diff changeset
147 // throw new LuanException(luan,"invalid member '"+key+"' for: "+obj);
511
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
148 } else {
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
149 cls = obj.getClass();
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
150 if( cls.isArray() ) {
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
151 Integer i = Luan.asInteger(key);
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
152 if( i != null ) {
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
153 Array.set(obj,i,value);
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
154 return;
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
155 }
578
60c549d43988 remove LuanState.exception()
Franklin Schmidt <fschmidt@gmail.com>
parents: 576
diff changeset
156 // throw new LuanException(luan,"invalid member '"+key+"' for java array: "+obj);
511
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
157 } else if( key instanceof String ) {
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
158 String name = (String)key;
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
159 List<Member> members = getMembers(cls,name);
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
160 if( !members.isEmpty() ) {
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
161 if( members.size() != 1 )
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
162 throw new RuntimeException("not field '"+name+"' of "+obj);
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
163 setMember(obj,members,value);
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
164 return;
e3fb9768dbb3 better error messages
Franklin Schmidt <fschmidt@gmail.com>
parents: 510
diff changeset
165 }
60
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
166 }
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
167 }
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 645
diff changeset
168 throw new LuanException( "invalid index for java "+cls );
60
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
169 }
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
170
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
171 private static void setMember(Object obj,List<Member> members,Object value) {
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
172 Field field = (Field)members.get(0);
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
173 try {
100
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
174 try {
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
175 field.set(obj,value);
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
176 } catch(IllegalArgumentException e) {
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
177 Class cls = field.getType();
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
178 if( value instanceof Number ) {
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
179 Number n = (Number)value;
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
180 if( cls.equals(Integer.TYPE) || cls.equals(Integer.class) ) {
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
181 int r = n.intValue();
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
182 if( r==n.doubleValue() ) {
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
183 field.setInt(obj,r);
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
184 return;
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
185 }
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
186 }
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
187 }
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
188 throw e;
6c827f7275df fix JavaLib.setMember() for int conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 90
diff changeset
189 }
60
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
190 } catch(IllegalAccessException e) {
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
191 throw new RuntimeException(e);
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
192 }
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
193 }
a68ccb7aaa9c implement setting java field values
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 58
diff changeset
194
102
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
195 public static boolean privateAccess = false;
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
196 private static Map<Class,Map<String,List<Member>>> memberMap = new HashMap<Class,Map<String,List<Member>>>();
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
197
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
198 private static List<Member> getMembers(Class cls,String name) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
199 Map<String,List<Member>> clsMap;
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
200 synchronized(memberMap) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
201 clsMap = memberMap.get(cls);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
202 if( clsMap == null ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
203 clsMap = new HashMap<String,List<Member>>();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
204 for( Class c : cls.getClasses() ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
205 String s = c.getSimpleName();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
206 List<Member> list = new ArrayList<Member>();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
207 clsMap.put(s,list);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
208 list.add(new Static(c));
58
d6c454b7f58c make concat work with any type;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 56
diff changeset
209 }
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
210 for( Field field : cls.getFields() ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
211 String s = field.getName();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
212 try {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
213 if( !cls.getField(s).equals(field) )
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
214 continue; // not accessible
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
215 } catch(NoSuchFieldException e) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
216 throw new RuntimeException(e);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
217 }
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
218 List<Member> list = new ArrayList<Member>();
71
5a93129995e1 handle conflicting java member names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 64
diff changeset
219 clsMap.put(s,list);
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
220 list.add(field);
71
5a93129995e1 handle conflicting java member names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 64
diff changeset
221 }
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
222 for( Method method : cls.getMethods() ) {
102
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
223 String s = method.getName();
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
224 List<Member> list = clsMap.get(s);
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
225 if( list == null || !(list.get(0) instanceof Method) ) {
102
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
226 list = new ArrayList<Member>();
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
227 clsMap.put(s,list);
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
228 }
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
229 list.add(method);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
230 }
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
231 if( privateAccess ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
232 for( Method method : cls.getDeclaredMethods() ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
233 String s = method.getName();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
234 List<Member> list = clsMap.get(s);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
235 if( list == null ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
236 list = new ArrayList<Member>();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
237 clsMap.put(s,list);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
238 } else if( !(list.get(0) instanceof Method) )
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
239 continue;
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
240 if( !list.contains(method) ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
241 list.add(method);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
242 }
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
243 }
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
244 for( Field field : cls.getDeclaredFields() ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
245 String s = field.getName();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
246 List<Member> list = clsMap.get(s);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
247 if( list == null ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
248 list = new ArrayList<Member>();
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
249 clsMap.put(s,list);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
250 list.add(field);
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
251 }
102
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
252 }
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
253 }
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
254 for( List<Member> members : clsMap.values() ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
255 for( Member m : members ) {
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
256 if( m instanceof AccessibleObject )
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
257 ((AccessibleObject)m).setAccessible(true);
102
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
258 }
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
259 }
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
260 memberMap.put(cls,clsMap);
102
90b918cbf888 add JavaLib.privateAccess
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 100
diff changeset
261 }
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
262 }
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
263 List<Member> rtn = clsMap.get(name);
55
9381b23ea9e1 various fixes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 51
diff changeset
264 if( rtn==null )
9381b23ea9e1 various fixes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 51
diff changeset
265 rtn = Collections.emptyList();
9381b23ea9e1 various fixes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 51
diff changeset
266 return rtn;
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
267 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
268
778
305ffb00ebc1 improve synchronization in JavaLuan
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
269 private static List<Member> getStaticMembers(Class cls,String name) {
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
270 List<Member> staticMembers = new ArrayList<Member>();
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
271 for( Member m : getMembers(cls,name) ) {
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
272 if( Modifier.isStatic(m.getModifiers()) )
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
273 staticMembers.add(m);
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
274 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
275 return staticMembers;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
276 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
277
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
278 static final class Static implements Member {
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
279 final Class cls;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
280
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
281 Static(Class cls) {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
282 this.cls = cls;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
283 }
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
284
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
285 @Override public String toString() {
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
286 return cls.toString();
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
287 }
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
288
437
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
289 @Override public Class getDeclaringClass() {
56
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
290 return cls.getDeclaringClass();
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
291 }
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
292
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
293 @Override public String getName() {
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
294 return cls.getName();
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
295 }
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
296
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
297 @Override public int getModifiers() {
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
298 return cls.getModifiers();
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
299 }
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
300
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
301 @Override public boolean isSynthetic() {
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
302 return cls.isSynthetic();
c84274b18f0c various
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 55
diff changeset
303 }
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
304
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
305 public Object luan_proxy(final LuanTable t) throws LuanException {
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
306 return Proxy.newProxyInstance(
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
307 cls.getClassLoader(),
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
308 new Class[]{cls},
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
309 new InvocationHandler() {
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
310 public Object invoke(Object proxy,Method method, Object[] args)
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
311 throws Throwable
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
312 {
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
313 if( args==null )
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
314 args = new Object[0];
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
315 String name = method.getName();
1267
9fa8b8389578 add LuanTable.luan;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1134
diff changeset
316 Object fnObj = t.get(name);
502
d3183a330ff5 improve the __index metamethod to work with any type;
Franklin Schmidt <fschmidt@gmail.com>
parents: 455
diff changeset
317 if( fnObj == null )
d3183a330ff5 improve the __index metamethod to work with any type;
Franklin Schmidt <fschmidt@gmail.com>
parents: 455
diff changeset
318 throw new NullPointerException("luan_proxy couldn't find method '"+name+"'");
647
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 646
diff changeset
319 LuanFunction fn = Luan.checkFunction(fnObj);
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
320 return Luan.first(fn.call(args));
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
321 }
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
322 }
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
323 );
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
324 }
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
325 }
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
326 private static final Method luan_proxyMethod;
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
327 static {
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
328 try {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
329 luan_proxyMethod = Static.class.getMethod("luan_proxy",LuanTable.class);
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
330 luan_proxyMethod.setAccessible(true);
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
331 } catch(NoSuchMethodException e) {
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
332 throw new RuntimeException(e);
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
333 }
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
334 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
335
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
336 public static Static load(Luan luan,String name) throws LuanException {
300
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 299
diff changeset
337 checkJava(luan);
51
28dfd91a816c various small issues
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 50
diff changeset
338 Class cls;
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
339 try {
51
28dfd91a816c various small issues
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 50
diff changeset
340 cls = Class.forName(name);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
341 } catch(ClassNotFoundException e) {
51
28dfd91a816c various small issues
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 50
diff changeset
342 try {
28dfd91a816c various small issues
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 50
diff changeset
343 cls = Thread.currentThread().getContextClassLoader().loadClass(name);
28dfd91a816c various small issues
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 50
diff changeset
344 } catch(ClassNotFoundException e2) {
108
3c404a296995 make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 102
diff changeset
345 return null;
51
28dfd91a816c various small issues
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 50
diff changeset
346 }
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
347 }
51
28dfd91a816c various small issues
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 50
diff changeset
348 return new Static(cls);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
349 }
300
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 299
diff changeset
350
1120
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
351 private static final Comparator<LuanJavaFunction> varArgsSorter = new Comparator<LuanJavaFunction>() {
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
352 public int compare(LuanJavaFunction fn1,LuanJavaFunction fn2) {
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
353 return fn2.getParameterCount() - fn1.getParameterCount();
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
354 }
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
355 };
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
356
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
357 private static final class AmbiguousJavaFunction extends LuanFunction {
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
358 private Map<Integer,List<LuanJavaFunction>> fnMap = new HashMap<Integer,List<LuanJavaFunction>>();
1120
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
359 private List<LuanJavaFunction> varArgs = new ArrayList<LuanJavaFunction>();
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
360
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
361 AmbiguousJavaFunction(List<LuanJavaFunction> fns) {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
362 super(true);
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 46
diff changeset
363 for( LuanJavaFunction fn : fns ) {
1120
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
364 if( fn.isVarArgs() ) {
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
365 varArgs.add(fn);
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
366 } else {
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
367 Integer n = fn.getParameterCount();
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
368 List<LuanJavaFunction> list = fnMap.get(n);
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
369 if( list==null ) {
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
370 list = new ArrayList<LuanJavaFunction>();
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
371 fnMap.put(n,list);
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
372 }
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
373 list.add(fn);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
374 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
375 }
1120
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
376 Collections.sort(varArgs,varArgsSorter);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
377 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
378
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
379 @Override protected void completeClone(LuanFunction dc,LuanCloner cloner) {
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
380 AmbiguousJavaFunction clone = (AmbiguousJavaFunction)dc;
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
381 clone.fnMap = (Map)cloner.clone(fnMap);
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
382 clone.varArgs = (List)cloner.clone(varArgs);
1561
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
383 // no call to super?
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
384 }
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
385
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
386 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException {
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
387 immutabler.makeImmutable(fnMap);
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
388 immutabler.makeImmutable(varArgs);
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
389 super.makeImmutable(immutabler);
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
390 }
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
391
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
392 @Override public Object call(Object[] args) throws LuanException {
1120
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
393 List<LuanJavaFunction> list = fnMap.get(args.length);
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
394 if( list != null ) {
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
395 for( LuanJavaFunction fn : list ) {
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
396 try {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
397 return fn.rawCall(args);
1120
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
398 } catch(IllegalArgumentException e) {}
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
399 }
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
400 }
e8fc6712b468 luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 795
diff changeset
401 for( LuanJavaFunction fn : varArgs ) {
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
402 try {
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
403 return fn.rawCall(args);
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
404 } catch(IllegalArgumentException e) {}
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
405 }
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 645
diff changeset
406 throw new LuanException("no method matched args: "+Arrays.asList(args));
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
407 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
408 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
409
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
410 private static class InstanceOf {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
411 private final Object obj;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
412
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
413 InstanceOf(Object obj) {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
414 this.obj = obj;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
415 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
416
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
417 public boolean instanceOf(Static st) {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
418 return st.cls.isInstance(obj);
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
419 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
420 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
421 private static final Method instanceOf;
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
422 static {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
423 try {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
424 instanceOf = InstanceOf.class.getMethod("instanceOf",Static.class);
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
425 instanceOf.setAccessible(true);
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
426 } catch(NoSuchMethodException e) {
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
427 throw new RuntimeException(e);
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
428 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
429 }
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
430
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
431 /*
64
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
432 private static class AssertClass {
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
433 private final Class cls;
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
434
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
435 AssertClass(Class cls) {
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
436 this.cls = cls;
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
437 }
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
438
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
439 public Object assertClass(Luan luan,Object v) throws LuanException {
64
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
440 if( !cls.isInstance(v) ) {
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
441 String got = v.getClass().getSimpleName();
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
442 String expected = cls.getSimpleName();
578
60c549d43988 remove LuanState.exception()
Franklin Schmidt <fschmidt@gmail.com>
parents: 576
diff changeset
443 throw new LuanException(luan,"bad argument #1 ("+expected+" expected, got "+got+")");
64
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
444 }
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
445 return v;
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
446 }
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
447 }
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
448 private static final Method assertClass;
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
449 static {
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
450 try {
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
451 assertClass = AssertClass.class.getMethod("assertClass",Luan.class,Object.class);
64
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
452 assertClass.setAccessible(true);
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
453 } catch(NoSuchMethodException e) {
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
454 throw new RuntimeException(e);
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
455 }
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
456 }
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
457
177cfdc2bdb3 add type assertions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 63
diff changeset
458
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
459 public static Object proxy(final Luan luan,Static st,final LuanTable t,final Object base) throws LuanException {
61
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
460 return Proxy.newProxyInstance(
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
461 st.cls.getClassLoader(),
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
462 new Class[]{st.cls},
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
463 new InvocationHandler() {
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
464 public Object invoke(Object proxy,Method method, Object[] args)
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
465 throws Throwable
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
466 {
63
ebe578282363 minor fix
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 62
diff changeset
467 if( args==null )
ebe578282363 minor fix
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 62
diff changeset
468 args = new Object[0];
61
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
469 String name = method.getName();
62
7c05f53ef6cb improve java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 61
diff changeset
470 Object fnObj = t.get(name);
7c05f53ef6cb improve java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 61
diff changeset
471 if( fnObj==null && base!=null )
7c05f53ef6cb improve java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 61
diff changeset
472 return method.invoke(base,args);
130
0594c132888b cleanup
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 124
diff changeset
473 LuanFunction fn = luan.checkFunction(fnObj);
0594c132888b cleanup
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 124
diff changeset
474 return Luan.first(luan.call(fn,name,args));
61
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
475 }
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
476 }
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
477 );
183d470be7e8 add java.proxy
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 60
diff changeset
478 }
304
03e9cda4748d add JavaLuan.Static.luan_proxy()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 301
diff changeset
479 */
301
a6bf8ff720f8 add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 300
diff changeset
480
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
481 private void JavaLuan() {} // never
37
8a57ebfdfd78 add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
482 }