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