Mercurial Hosting > luan
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 |
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 | 25 import luan.LuanCloner; |
1561 | 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 | 32 Luan.checkSecurity(luan,"java"); |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 357 private static final class AmbiguousJavaFunction extends LuanFunction { |
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 | 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 | 379 @Override protected void completeClone(LuanFunction dc,LuanCloner cloner) { |
380 AmbiguousJavaFunction clone = (AmbiguousJavaFunction)dc; | |
381 clone.fnMap = (Map)cloner.clone(fnMap); | |
382 clone.varArgs = (List)cloner.clone(varArgs); | |
1561 | 383 // no call to super? |
384 } | |
385 | |
386 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException { | |
387 immutabler.makeImmutable(fnMap); | |
388 immutabler.makeImmutable(varArgs); | |
389 super.makeImmutable(immutabler); | |
1335 | 390 } |
391 | |
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 | 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 | 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 | 481 private void JavaLuan() {} // never |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
482 } |