Mercurial Hosting > luan
comparison core/src/luan/modules/JavaLuan.java @ 421:b31d614343e8
add Io.LuanString.text_writer();
improve java related errors;
fix to_string;
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 01 May 2015 15:13:14 -0600 |
parents | d55e873e1f0d |
children | 23a93c118042 |
comparison
equal
deleted
inserted
replaced
420:e9d4d5854e54 | 421:b31d614343e8 |
---|---|
50 // return PackageLuan.loaded(luan).get("luan:Java") != null; | 50 // return PackageLuan.loaded(luan).get("luan:Java") != null; |
51 return true; | 51 return true; |
52 } | 52 } |
53 | 53 |
54 public static Object __index(LuanState luan,Object obj,Object key) throws LuanException { | 54 public static Object __index(LuanState luan,Object obj,Object key) throws LuanException { |
55 if( !luan.currentEnvironment().hasJava() ) | 55 checkJava(luan); |
56 return null; | |
57 if( obj instanceof Static ) { | 56 if( obj instanceof Static ) { |
58 if( key instanceof String ) { | 57 if( key instanceof String ) { |
59 String name = (String)key; | 58 String name = (String)key; |
60 Static st = (Static)obj; | 59 Static st = (Static)obj; |
61 Class cls = st.cls; | 60 Class cls = st.cls; |
141 } catch(IllegalAccessException e) { | 140 } catch(IllegalAccessException e) { |
142 throw new RuntimeException(e); | 141 throw new RuntimeException(e); |
143 } | 142 } |
144 } | 143 } |
145 | 144 |
146 public static boolean __newindex(LuanState luan,Object obj,Object key,Object value) throws LuanException { | 145 public static void __newindex(LuanState luan,Object obj,Object key,Object value) throws LuanException { |
147 if( !luan.currentEnvironment().hasJava() ) | 146 checkJava(luan); |
148 return false; | |
149 if( obj instanceof Static ) { | 147 if( obj instanceof Static ) { |
150 if( key instanceof String ) { | 148 if( key instanceof String ) { |
151 String name = (String)key; | 149 String name = (String)key; |
152 Static st = (Static)obj; | 150 Static st = (Static)obj; |
153 Class cls = st.cls; | 151 Class cls = st.cls; |
154 List<Member> members = getStaticMembers(cls,name); | 152 List<Member> members = getStaticMembers(cls,name); |
155 if( !members.isEmpty() ) { | 153 if( !members.isEmpty() ) { |
156 if( members.size() != 1 ) | 154 if( members.size() != 1 ) |
157 throw new RuntimeException("not field '"+name+"' of "+obj); | 155 throw new RuntimeException("not field '"+name+"' of "+obj); |
158 setMember(obj,members,value); | 156 setMember(obj,members,value); |
159 return true; | 157 return; |
160 } | 158 } |
161 } | 159 } |
162 throw luan.exception("invalid member '"+key+"' for: "+obj); | 160 throw luan.exception("invalid member '"+key+"' for: "+obj); |
163 } | 161 } |
164 Class cls = obj.getClass(); | 162 Class cls = obj.getClass(); |
165 if( cls.isArray() ) { | 163 if( cls.isArray() ) { |
166 Integer i = Luan.asInteger(key); | 164 Integer i = Luan.asInteger(key); |
167 if( i != null ) { | 165 if( i != null ) { |
168 Array.set(obj,i,value); | 166 Array.set(obj,i,value); |
169 return true; | 167 return; |
170 } | 168 } |
171 throw luan.exception("invalid member '"+key+"' for java array: "+obj); | 169 throw luan.exception("invalid member '"+key+"' for java array: "+obj); |
172 } | 170 } |
173 if( key instanceof String ) { | 171 if( key instanceof String ) { |
174 String name = (String)key; | 172 String name = (String)key; |
175 List<Member> members = getMembers(cls,name); | 173 List<Member> members = getMembers(cls,name); |
176 if( !members.isEmpty() ) { | 174 if( !members.isEmpty() ) { |
177 if( members.size() != 1 ) | 175 if( members.size() != 1 ) |
178 throw new RuntimeException("not field '"+name+"' of "+obj); | 176 throw new RuntimeException("not field '"+name+"' of "+obj); |
179 setMember(obj,members,value); | 177 setMember(obj,members,value); |
180 return true; | 178 return; |
181 } | 179 } |
182 } | 180 } |
183 throw luan.exception("invalid member '"+key+"' for java object: "+obj); | 181 throw luan.exception("invalid member '"+key+"' for java object: "+obj); |
184 } | 182 } |
185 | 183 |