annotate src/luan/modules/JavaLuan.java @ 1353:8d95711f6615

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