From: Samuele P. <ped...@us...> - 2000-11-17 12:44:24
|
Update of /cvsroot/jython/jython/Tools/jythonc In directory slayer.i.sourceforge.net:/tmp/cvs-serv2198/jythonc Modified Files: ImportName.py compile.py depend.py jar.py javac.py main.py util.py Added Files: yapm.py Log Message: Loading logic fixes: jythonc-side. For issues involved see the jython-dev list archives. --- NEW FILE --- # see org.python.core.SysPackageManager import sys import os from string import strip from java import io from org.python.core import PathPackageManager class YaPM(PathPackageManager): def __init__(self, registry): self.findAllPackages(registry) def findClass(self, pkg, name): return None def findAllPackages(self,registry): paths = registry.getProperty("python.packages.paths","java.class.path") paths = paths.split(',') # opt if "sun.boot.class.path" in paths: # ??pending strip boot class paths of other jvms? paths.remove("sun.boot.class.path") fakepath = registry.getProperty("python.packages.fakepath", None) for p in paths: e = registry.getProperty(p) if e != None: self.addClassPath(e) if fakepath != None: self.addClassPath(fakepath) def filterByName(self,name,pkg): return 0 def filterByAccess(self,name,acc): return not ((name.find('$') != -1) or (acc & 1 == 0)) def doDir(self, jpkg, instantiate, exclpkgs): basic = self.basicDoDir(jpkg, 0, exclpkgs) ret = [] self.super__doDir(self.searchPath,ret,jpkg,0,exclpkgs) self.super__doDir(sys.path,ret,jpkg,0,exclpkgs) return self.merge(basic,ret) def packageExists(self,pkg,name): return self.super__packageExists(self.searchPath,pkg,name) or self.super__packageExists(sys.path,pkg,name) Index: ImportName.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/ImportName.py,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** ImportName.py 2000/10/13 19:06:57 2.3 --- ImportName.py 2000/11/17 12:44:21 2.4 *************** *** 5,9 **** from org.python.core import PyModule, PyJavaClass, PyClass, \ ! PyJavaPackage, PyBeanEventProperty, PyJavaDirPackage from util import lookup --- 5,9 ---- from org.python.core import PyModule, PyJavaClass, PyClass, \ ! PyJavaPackage, PyBeanEventProperty from util import lookup *************** *** 20,25 **** elif isinstance(mod, PyJavaPackage): return Package(mod) - elif isinstance(mod, PyJavaDirPackage): - return Package(mod) else: return Namespace(mod) --- 20,23 ---- *************** *** 89,92 **** --- 87,91 ---- + from util import reportPublicPlainClasses class Package(Namespace): _classes = {} *************** *** 94,98 **** apply(Namespace.__init__, (self, mod)+args) if isinstance(mod, PyJavaPackage): ! classes = PyJavaPackage._unparsedAll._doget(self.mod) if classes: self._classes[self.name] = classes --- 93,98 ---- apply(Namespace.__init__, (self, mod)+args) if isinstance(mod, PyJavaPackage): ! ## classes = PyJavaPackage._unparsedAll._doget(self.mod) ! classes = reportPublicPlainClasses(self.mod) if classes: self._classes[self.name] = classes Index: compile.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/compile.py,v retrieving revision 2.12 retrieving revision 2.13 diff -C2 -r2.12 -r2.13 *** compile.py 2000/11/10 14:57:45 2.12 --- compile.py 2000/11/17 12:44:21 2.13 *************** *** 99,111 **** ! def makeArrayName(c): ! if c.endswith("[]"): ! return "["+makeArrayName(c[:-2]) ! else: ! if primNames.has_key(c): ! return primNames[c] ! else: ! return "L"+c+";" def getJavaClass(c): if isinstance(c, StringType): --- 99,112 ---- ! ##def makeArrayName(c): ! ## if c.endswith("[]"): ! ## return "["+makeArrayName(c[:-2]) ! ## else: ! ## if primNames.has_key(c): ! ## return primNames[c] ! ## else: ! ## return "L"+c+";" + import util def getJavaClass(c): if isinstance(c, StringType): *************** *** 113,123 **** return primitives[c] if c.endswith("[]"): ! return Class.forName(makeArrayName(c)) try: ! return Class.forName(c) except: return None elif isinstance(c, ImportName.JavaClass): ! return Class.forName(c.name) elif isinstance(c, Class): return c --- 114,125 ---- return primitives[c] if c.endswith("[]"): ! # java1.1 allows only this ! return Class.getClass(reflect.Array.newInstance(getJavaClass(c[:-2]),0)) try: ! return util.findClass(c) #Class.forName(c) except: return None elif isinstance(c, ImportName.JavaClass): ! return c.mod #Class.forName(c.name) elif isinstance(c, Class): return c Index: depend.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/depend.py,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** depend.py 2000/10/13 18:56:36 2.3 --- depend.py 2000/11/17 12:44:21 2.4 *************** *** 101,115 **** from util import lookup, getzip def getFile(name): dot = name.rfind('.') if dot == -1: ! return topFile(name) package = lookup(name[:dot]) ! if hasattr(package, '__file__'): ! return ZipEntry(package.__file__, name) ! elif hasattr(package, '__path__') and len(package.__path__) == 1: ! return DirEntry(package.__path__[0], name) elif isinstance(package, TypeType): # this 'package' is a java class --- 101,120 ---- + from org.python.core import PyJavaPackage from util import lookup, getzip + from util import openResource def getFile(name): dot = name.rfind('.') if dot == -1: ! return PkgEntry(name) ! ## return topFile(name) package = lookup(name[:dot]) ! if isinstance(package, PyJavaPackage): ! return PkgEntry(name) ! ## if hasattr(package, '__file__'): ! ## return ZipEntry(package.__file__, name) ! ## elif hasattr(package, '__path__') and len(package.__path__) == 1: ! ## return DirEntry(package.__path__[0], name) elif isinstance(package, TypeType): # this 'package' is a java class *************** *** 118,150 **** return f ! ! ! class ZipEntry: ! def __init__(self, filename, classname): ! self.filename = filename self.classname = classname def __repr__(self): ! return "ZipEntry(%s, %s)" % (self.filename, self.classname) def getInputStream(self): ! zf = getzip(self.filename) ! zfilename = unfix(self.classname) + '.class' ! entry = zf.getEntry(zfilename) ! return zf.getInputStream(entry) ! class DirEntry: ! def __init__(self, dirname, classname): ! self.dirname = dirname ! self.classname = classname ! ! def __repr__(self): ! return "DirEntry(%s, %s)" % (self.dirname, self.classname) ! ! def getInputStream(self): ! lastname = self.classname.split('.')[-1] ! fullname = os.path.join(self.dirname, lastname+'.class') ! return io.FileInputStream(fullname) --- 123,165 ---- return f ! class PkgEntry: ! def __init__(self, classname): self.classname = classname def __repr__(self): ! return "PkgEntry(%s)" % (self.classname) def getInputStream(self): ! res = unfix(self.classname) + '.class' ! return openResource(res) ! ##class ZipEntry: ! ## def __init__(self, filename, classname): ! ## self.filename = filename ! ## self.classname = classname ! ## ! ## def __repr__(self): ! ## return "ZipEntry(%s, %s)" % (self.filename, self.classname) ! ## ! ## def getInputStream(self): ! ## zf = getzip(self.filename) ! ## zfilename = unfix(self.classname) + '.class' ! ## entry = zf.getEntry(zfilename) ! ## return zf.getInputStream(entry) ! ## ! ## ! ##class DirEntry: ! ## def __init__(self, dirname, classname): ! ## self.dirname = dirname ! ## self.classname = classname ! ## ! ## def __repr__(self): ! ## return "DirEntry(%s, %s)" % (self.dirname, self.classname) ! ## ! ## def getInputStream(self): ! ## lastname = self.classname.split('.')[-1] ! ## fullname = os.path.join(self.dirname, lastname+'.class') ! ## return io.FileInputStream(fullname) Index: jar.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/jar.py,v retrieving revision 2.4 retrieving revision 2.5 diff -C2 -r2.4 -r2.5 *** jar.py 2000/10/13 18:56:00 2.4 --- jar.py 2000/11/17 12:44:21 2.5 *************** *** 7,10 **** --- 7,11 ---- from java.io import * from util import lookup + from util import listAllClasses, openResource DOT = '.' *************** *** 98,149 **** self.zipfile.close() ! # add just one class from a package ! def addOneClass(self, pkgclass): ! parts = pkgclass.split('.') ! package = DOT.join(parts[:-1]) pkg = lookup(package) ! filename = os.path.join(pkg.__path__[0], parts[-1]) + '.class' ! entryname = '/'.join(parts) + '.class' ! self.zipfile.putNextEntry(ZipEntry(entryname)) ! instream = FileInputStream(filename) ! copy(instream, self.zipfile) ! instream.close() ! ! # The next three methods handle packages (typically org.python.core, ...) ! def addPackage(self, package, skiplist=[]): ! pkg = lookup(package) ! if hasattr(pkg, '__file__'): ! return self.addZipPackage(package+'.', pkg.__file__, skiplist) ! elif hasattr(pkg, '__path__') and len(pkg.__path__) == 1: ! return self.addDirectoryPackage(package+'.', ! pkg.__path__[0], skiplist) ! raise ValueError, "can't find package: "+repr(package) ! ! def addZipPackage(self, package, zipfile, skiplist): ! zf = ZipFile(zipfile) ! for entry in zf.entries(): ! filename = entry.name ! if filename[-6:] != '.class': ! continue ! name = filename[:-6].replace(SLASH, DOT) ! ! if name[:len(package)] != package: ! continue ! self.zipfile.putNextEntry(ZipEntry(filename)) ! copy(zf.getInputStream(entry), self.zipfile) ! zf.close() ! ! def addDirectoryPackage(self, package, directory, skiplist): ! for file in os.listdir(directory): ! if file[-6:] != '.class': ! continue ! name = package+file[:-6] if name in skiplist: continue ! entryname = SLASH.join(name.split('.')) + '.class' self.zipfile.putNextEntry(ZipEntry(entryname)) ! instream = FileInputStream(os.path.join(directory, file)) copy(instream, self.zipfile) instream.close() --- 99,165 ---- self.zipfile.close() ! # handle packages (typically org.python.core, ...) ! def addPackage(self, package, skiplist = []): pkg = lookup(package) ! base = package.replace(DOT,SLASH) ! for cl in listAllClasses(pkg): ! name = package+ '.' +cl if name in skiplist: + # print 'skipping',name # ?? dbg continue ! entryname = base +'/' + cl + '.class' self.zipfile.putNextEntry(ZipEntry(entryname)) ! instream = openResource(entryname) copy(instream, self.zipfile) instream.close() + + ## # add just one class from a package + ## def addOneClass(self, pkgclass): + ## parts = pkgclass.split('.') + ## package = DOT.join(parts[:-1]) + ## pkg = lookup(package) + ## filename = os.path.join(pkg.__path__[0], parts[-1]) + '.class' + ## entryname = '/'.join(parts) + '.class' + ## self.zipfile.putNextEntry(ZipEntry(entryname)) + ## instream = FileInputStream(filename) + ## copy(instream, self.zipfile) + ## instream.close() + ## + ## # The next three methods handle packages (typically org.python.core, ...) + ## def addPackage(self, package, skiplist=[]): + ## pkg = lookup(package) + ## if hasattr(pkg, '__file__'): + ## return self.addZipPackage(package+'.', pkg.__file__, skiplist) + ## elif hasattr(pkg, '__path__') and len(pkg.__path__) == 1: + ## return self.addDirectoryPackage(package+'.', + ## pkg.__path__[0], skiplist) + ## raise ValueError, "can't find package: "+repr(package) + ## + ## def addZipPackage(self, package, zipfile, skiplist): + ## zf = ZipFile(zipfile) + ## for entry in zf.entries(): + ## filename = entry.name + ## if filename[-6:] != '.class': + ## continue + ## name = filename[:-6].replace(SLASH, DOT) + ## + ## if name[:len(package)] != package: + ## continue + ## self.zipfile.putNextEntry(ZipEntry(filename)) + ## copy(zf.getInputStream(entry), self.zipfile) + ## zf.close() + ## + ## def addDirectoryPackage(self, package, directory, skiplist): + ## for file in os.listdir(directory): + ## if file[-6:] != '.class': + ## continue + ## name = package+file[:-6] + ## if name in skiplist: + ## continue + ## entryname = SLASH.join(name.split('.')) + '.class' + ## self.zipfile.putNextEntry(ZipEntry(entryname)) + ## instream = FileInputStream(os.path.join(directory, file)) + ## copy(instream, self.zipfile) + ## instream.close() Index: javac.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/javac.py,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -r2.10 -r2.11 *** javac.py 2000/11/10 15:10:12 2.10 --- javac.py 2000/11/17 12:44:21 2.11 *************** *** 33,36 **** --- 33,37 ---- + import sys def compile(files, javac=None, cpathopt="-classpath", cpath=None, options=None, sourcedir=None): *************** *** 55,67 **** options = [] cmd.extend(options) # Classpath: # 1. python.jythonc.classpath property # 2. java.class.path property if cpath is None: ! cpath = sys.registry.getProperty("python.jythonc.classpath") ! if cpath is None: ! cpath = getClasspath() ! if sourcedir: ! cpath = cpath + java.io.File.pathSeparator + sourcedir cmd.extend([cpathopt, cpath]) cmd.extend(files) --- 56,81 ---- options = [] cmd.extend(options) + # new: # Classpath: # 1. python.jythonc.classpath property + # + # 2. java.class.path property + # + + # 3. sourcedir + # + + # 4. sys.path if cpath is None: ! sep = java.io.File.pathSeparator ! cpath = [] ! part = sys.registry.getProperty("python.jythonc.classpath") ! if part != None: ! cpath.extend(part.split(sep)) ! part = getClasspath() ! if part != None: ! cpath.extend(part.split(sep)) ! if sourcedir: ! cpath.append(sourcedir) ! cpath.extend(sys.path) ! cpath = sep.join(cpath) cmd.extend([cpathopt, cpath]) cmd.extend(files) Index: main.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/main.py,v retrieving revision 2.11 retrieving revision 2.12 diff -C2 -r2.11 -r2.12 *** main.py 2000/10/13 18:54:36 2.11 --- main.py 2000/11/17 12:44:21 2.12 *************** *** 168,174 **** def addCore(extraPackages): ! skiplist = ['org.python.core.parser', ! 'org.python.core.BytecodeLoader', ! 'org.python.core.jpython', ] extraPackages.append(('org.python.core', skiplist)) --- 168,173 ---- def addCore(extraPackages): ! skiplist = [ 'org.python.core.parser', ! #'org.python.core.BytecodeLoader', ] extraPackages.append(('org.python.core', skiplist)) Index: util.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/util.py,v retrieving revision 2.1 retrieving revision 2.2 diff -C2 -r2.1 -r2.2 *** util.py 2000/10/13 18:51:30 2.1 --- util.py 2000/11/17 12:44:21 2.2 *************** *** 25,26 **** --- 25,60 ---- zf.close() zipfiles.clear() + + # "tentative" + + import sys + import string + + from org.python.core import imp,Py + + from yapm import YaPM + + def findClass(c): + return Py.findClassEx(c) + + def reportPublicPlainClasses(jpkg): + classes = sys.packageManager.doDir(jpkg,0,1) + classes.remove('__name__') + return string.join(classes,',') + + def openResource(res): + return imp.getSyspathJavaLoader().getResourceAsStream(res) + + _ypm = None + + def listAllClasses(jpkg): + global _ypm + classes = sys.packageManager.doDir(jpkg,0,1) + classes.remove('__name__') + if _ypm is None: + _ypm = YaPM(sys.registry) + pkg2 = _ypm.lookupName(jpkg.__name__) + classes2 = _ypm.doDir(pkg2,0,1) + classes2.remove('__name__') + classes.extend(classes2) + return classes |