Allow access to Java inner classes using lua field syntax.
This commit is contained in:
@@ -54,6 +54,7 @@ class JavaClass extends JavaInstance implements CoerceJavaToLua.Coercion {
|
||||
|
||||
Map fields;
|
||||
Map methods;
|
||||
Map innerclasses;
|
||||
|
||||
static JavaClass forClass(Class c) {
|
||||
JavaClass j = (JavaClass) classes.get(c);
|
||||
@@ -78,7 +79,7 @@ class JavaClass extends JavaInstance implements CoerceJavaToLua.Coercion {
|
||||
for ( int i=0; i<f.length; i++ ) {
|
||||
Field fi = f[i];
|
||||
if ( Modifier.isPublic(fi.getModifiers()) ) {
|
||||
m.put( LuaValue.valueOf(fi.getName()), fi );
|
||||
m.put(LuaValue.valueOf(fi.getName()), fi);
|
||||
try {
|
||||
if (!fi.isAccessible())
|
||||
fi.setAccessible(true);
|
||||
@@ -130,6 +131,21 @@ class JavaClass extends JavaInstance implements CoerceJavaToLua.Coercion {
|
||||
}
|
||||
return (LuaValue) methods.get(key);
|
||||
}
|
||||
|
||||
Class getInnerClass(LuaValue key) {
|
||||
if ( innerclasses == null ) {
|
||||
Map m = new HashMap();
|
||||
Class[] c = ((Class)m_instance).getClasses();
|
||||
for ( int i=0; i<c.length; i++ ) {
|
||||
Class ci = c[i];
|
||||
String name = ci.getName();
|
||||
String stub = name.substring(Math.max(name.lastIndexOf('$'), name.lastIndexOf('.'))+1);
|
||||
m.put(LuaValue.valueOf(stub), ci);
|
||||
}
|
||||
innerclasses = m;
|
||||
}
|
||||
return (Class) innerclasses.get(key);
|
||||
}
|
||||
|
||||
public LuaValue getConstructor() {
|
||||
return getMethod(NEW);
|
||||
|
||||
@@ -59,6 +59,9 @@ class JavaInstance extends LuaUserdata {
|
||||
LuaValue m = jclass.getMethod(key);
|
||||
if ( m != null )
|
||||
return m;
|
||||
Class c = jclass.getInnerClass(key);
|
||||
if ( c != null )
|
||||
return JavaClass.forClass(c);
|
||||
return super.get(key);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user