Index: src/org/python/core/PyJavaClass.java =================================================================== --- src/org/python/core/PyJavaClass.java (revision 5365) +++ src/org/python/core/PyJavaClass.java (working copy) @@ -839,7 +839,7 @@ private PyObject findInnerClass(String name) { Class p = getProxyClass(); - Class innerClass = Py.relFindClass(p, p.getName()+"$"+name); + Class innerClass = Py.relFindClass(p, name); if (innerClass == null) return null; PyObject jinner = Py.java2py(innerClass); // xxx lookup(innerClass); Index: src/org/python/core/Py.java =================================================================== --- src/org/python/core/Py.java (revision 5365) +++ src/org/python/core/Py.java (working copy) @@ -761,22 +761,31 @@ return true; } - public static Class relFindClass(Class home, String name) { + + /** + * Finds an inner class referenceable from the parent class, + * based on the relative class name. + * + * @param parent The containing class + * @param relName The simple/declared classname of the inner class + * @return + */ + public static Class relFindClass(Class parent, String relName) { try { - ClassLoader loader = home.getClassLoader(); - if (loader != null) { - return loader.loadClass(name); - } else { - return Class.forName(name); + Class[] inners = parent.getClasses(); + for (Class c : inners) { + if (c.getSimpleName().equals(relName)) + return c; } - } catch (ClassNotFoundException exc) { return null; - } catch (Throwable t) { + } + catch (Throwable t) { throw Py.JavaError(t); } } private static boolean secEnv = false; + public static Class findClass(String name) { try { ClassLoader classLoader = Py.getSystemState().getClassLoader();