1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
// Copyright 2000 Samuele Pedroni
package jxxload_help;
import org.python.core.PyJavaClass;
public class DiscardHelp extends Object {
private DiscardHelp() {
}
private static boolean check(Class c,ClassLoader loader,java.util.Vector interfaces) {
try {
Class s = c;
do {
if (s.getClassLoader() == loader) return true;
s = s.getSuperclass();
} while (s != null);
for(java.util.Enumeration enum=interfaces.elements(); enum.hasMoreElements();) {
Class intf = (Class)enum.nextElement();
if (intf.isAssignableFrom(c)) return true;
}
} catch(SecurityException e) {
}
return false;
}
// clearly not thread safe
public static void discard(ClassLoader loader,java.util.Vector interfaces) {
org.python.core.InternalTables tbl = PyJavaClass.getInternalTables();
tbl._beginCanonical();
PyJavaClass jc;
while ((jc = (PyJavaClass)tbl._next()) != null ) {
Class c = (Class)jc.__tojava__(Class.class);
if(check(c,loader,interfaces)) tbl._flushCurrent();
}
tbl._beginOverAdapterClasses();
Class c;
while ((c = (Class)tbl._next()) != null) {
if(interfaces.contains(c)) tbl._flushCurrent();
}
tbl._beginOverAdapters();
while ((c = (Class)tbl._next()) != null) {
if(interfaces.contains(c)) tbl._flushCurrent();
}
}
}
|