From: Finn B. <bc...@us...> - 2001-02-16 18:09:34
|
Update of /cvsroot/jython/jython/org/python/core In directory usw-pr-cvs1:/tmp/cvs-serv27387 Modified Files: PyJavaClass.java Log Message: Fix bug #132462. Only use methods in public interfaces. Index: PyJavaClass.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyJavaClass.java,v retrieving revision 2.32 retrieving revision 2.33 diff -C2 -r2.32 -r2.33 *** PyJavaClass.java 2001/02/02 09:28:36 2.32 --- PyJavaClass.java 2001/02/16 18:10:19 2.33 *************** *** 163,167 **** if (__bases__ != null) return; ! Class interfaces[] = c.getInterfaces(); int nInterfaces = interfaces.length; int nBases = 0; --- 163,167 ---- if (__bases__ != null) return; ! Class interfaces[] = getAccessibleInterfaces(c); int nInterfaces = interfaces.length; int nBases = 0; *************** *** 206,209 **** --- 206,231 ---- proxyClass = c; __name__ = c.getName(); + } + + /** + * Return the list of all accessible interfaces for a class. This will + * only the public interfaces. Since we can't set accessibility on + * interfaces, the Options.respectJavaAccessibility is not honored. + */ + private static Class[] getAccessibleInterfaces(Class c) { + // can't modify accessibility of interfaces in Java2 + // thus get only public interfaces + Class[] in = c.getInterfaces(); + java.util.Vector v=new java.util.Vector(); + for (int i = 0; i < in.length; i++) { + if (!Modifier.isPublic(in[i].getModifiers())) + continue; + v.addElement(in[i]); + } + if (v.size() == in.length) + return in; + Class[] ret = new Class[v.size()]; + v.copyInto(ret); + return ret; } |