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;
}
|