Mercurial Hosting > luan
comparison core/src/luan/modules/JavaLuan.java @ 297:899253043270
remove PackageLuan.load_lib()
git-svn-id: https://luan-java.googlecode.com/svn/trunk@298 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 16 Dec 2014 03:26:43 +0000 |
parents | 8ac3eaf8ecd9 |
children | a74559240b4f |
comparison
equal
deleted
inserted
replaced
296:7ea6dfdf81ba | 297:899253043270 |
---|---|
25 import luan.LuanElement; | 25 import luan.LuanElement; |
26 | 26 |
27 | 27 |
28 public final class JavaLuan { | 28 public final class JavaLuan { |
29 | 29 |
30 public static final LuanFunction LOADER = new LuanFunction() { | |
31 @Override public Object call(LuanState luan,Object[] args) throws LuanException { | |
32 LuanTable module = Luan.newTable(); | |
33 try { | |
34 module.put( "class", new LuanJavaFunction(JavaLuan.class.getMethod("getClass",LuanState.class,String.class),null) ); | |
35 add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class ); | |
36 } catch(NoSuchMethodException e) { | |
37 throw new RuntimeException(e); | |
38 } | |
39 return module; | |
40 } | |
41 }; | |
42 | |
43 private static boolean isLoaded(LuanState luan) { | 30 private static boolean isLoaded(LuanState luan) { |
44 return PackageLuan.loaded(luan).get("luan:Java") != null; | 31 // return PackageLuan.loaded(luan).get("luan:Java") != null; |
32 return true; | |
45 } | 33 } |
46 | 34 |
47 static LuanFunction javaLoader(LuanState luan,String modName) throws LuanException { | 35 static LuanFunction javaLoader(LuanState luan,String modName) throws LuanException { |
48 if( !isLoaded(luan) ) | 36 if( !isLoaded(luan) ) |
49 return null; | 37 return null; |
54 @Override public Object call(LuanState luan,Object[] args) { | 42 @Override public Object call(LuanState luan,Object[] args) { |
55 return s; | 43 return s; |
56 } | 44 } |
57 }; | 45 }; |
58 return loader; | 46 return loader; |
59 } | |
60 | |
61 private static void add(LuanTable t,String method,Class<?>... parameterTypes) { | |
62 try { | |
63 t.put( method, new LuanJavaFunction(JavaLuan.class.getMethod(method,parameterTypes),null) ); | |
64 } catch(NoSuchMethodException e) { | |
65 throw new RuntimeException(e); | |
66 } | |
67 } | 47 } |
68 | 48 |
69 public static Object __index(LuanState luan,Object obj,Object key) throws LuanException { | 49 public static Object __index(LuanState luan,Object obj,Object key) throws LuanException { |
70 if( obj instanceof Static ) { | 50 if( obj instanceof Static ) { |
71 if( key instanceof String ) { | 51 if( key instanceof String ) { |
121 return member(obj,members); | 101 return member(obj,members); |
122 } | 102 } |
123 } | 103 } |
124 } | 104 } |
125 // throw luan.exception("invalid member '"+key+"' for java object: "+obj); | 105 // throw luan.exception("invalid member '"+key+"' for java object: "+obj); |
106 //System.out.println("invalid member '"+key+"' for java object: "+obj); | |
126 return null; | 107 return null; |
127 } | 108 } |
128 | 109 |
129 private static Object member(Object obj,List<Member> members) throws LuanException { | 110 private static Object member(Object obj,List<Member> members) throws LuanException { |
130 try { | 111 try { |
136 Field field = (Field)member; | 117 Field field = (Field)member; |
137 Object rtn = field.get(obj); | 118 Object rtn = field.get(obj); |
138 return rtn instanceof Object[] ? Arrays.asList((Object[])rtn) : rtn; | 119 return rtn instanceof Object[] ? Arrays.asList((Object[])rtn) : rtn; |
139 } else { | 120 } else { |
140 Method method = (Method)member; | 121 Method method = (Method)member; |
141 return new LuanJavaFunction(method,obj,true); | 122 return new LuanJavaFunction(method,obj); |
142 } | 123 } |
143 } else { | 124 } else { |
144 List<LuanJavaFunction> fns = new ArrayList<LuanJavaFunction>(); | 125 List<LuanJavaFunction> fns = new ArrayList<LuanJavaFunction>(); |
145 for( Member member : members ) { | 126 for( Member member : members ) { |
146 Method method = (Method)member; | 127 Method method = (Method)member; |
147 fns.add(new LuanJavaFunction(method,obj,true)); | 128 fns.add(new LuanJavaFunction(method,obj)); |
148 } | 129 } |
149 return new AmbiguousJavaFunction(fns); | 130 return new AmbiguousJavaFunction(fns); |
150 } | 131 } |
151 } catch(IllegalAccessException e) { | 132 } catch(IllegalAccessException e) { |
152 throw new RuntimeException(e); | 133 throw new RuntimeException(e); |