From: Samuele P. <ped...@us...> - 2001-01-15 04:50:46
|
Update of /cvsroot/jython/jython/Lib In directory usw-pr-cvs1:/tmp/cvs-serv21981 Added Files: jreload.py Log Message: experimental java classes reload support (0.1). --- NEW FILE --- # java classes reload support (experimental) # Copyright 2000 Samuele Pedroni # ?? doc pending __version__ = "0.1" import sys from org.python.core import imp,PyJavaPackage,PyJavaClass import jxxload_help class _Unload: def __init__(self,ls): self.ls = ls self.loader = ls._mgr.loader def do_unload(self,pkg): for n in pkg.__dict__.keys(): e = pkg.__dict__[n] if isinstance(e,PyJavaClass): if PyJavaClass.isLazy(e): continue if e.classLoader is self.loader: del pkg.__dict__[n] elif isinstance(e,PyJavaPackage): self.do_unload(e) def __call__(self): if self.loader: self.do_unload(self.ls._top) loader = self.loader jxxload_help.DiscardHelp.discard(loader,loader.interfaces) if self.ls._mgr.loader is self.loader: self.ls._mgr.resetLoader() self.loader = None class LoadSet: # ?? for the moment from import * and dir do not work for LoadSet, but work for # contained pkgs # need java impl as PyObject def __init__(self,name,path): mgr = jxxload_help.PackageManager(path,imp.getSyspathJavaLoader()) self._name = name self._mgr = mgr self._top = mgr.topLevelPackage def __getattr__(self,name): if name == 'unload': return _Unload(self) else: return getattr(self._top,name) def __repr__(self): return "<java load-set %s>" % self._name def makeLoadSet(name,path): if sys.modules.has_key('name'): return sys.modules[name] sys.modules[name] = ls = LoadSet(name,path) return ls _reload = reload def _do_reload(mgr,pkg): pkg_name = pkg.__name__ for n in pkg.__dict__.keys(): e = pkg.__dict__[n] if isinstance(e,PyJavaClass): if PyJavaClass.isLazy(e): continue del pkg.__dict__[n] try : c = mgr.findClass(pkg_name,n); if c: pkg.__dict__[n] = c except: pass elif isinstance(e,PyJavaPackage): _do_reload(mgr,e) def reload(ls): if isinstance(ls,LoadSet): ls._mgr.resetLoader() _do_reload(ls._mgr,ls._top) else: return _reload(ls) |