From: <fwi...@us...> - 2009-01-25 20:13:33
|
Revision: 5977 http://jython.svn.sourceforge.net/jython/?rev=5977&view=rev Author: fwierzbicki Date: 2009-01-25 20:13:29 +0000 (Sun, 25 Jan 2009) Log Message: ----------- Extract a general purpose "python free" interface for PackagManager and add the python specific methods to PyPackageManager (which extends PackageManager). Modified Paths: -------------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/SyspathJavaLoader.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java Added Paths: ----------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java Removed Paths: ------------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-25 12:19:58 UTC (rev 5976) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-25 20:13:29 UTC (rev 5977) @@ -3,7 +3,7 @@ package org.python.core; -import org.python.core.packagecache.PackageManager; +import org.python.core.packagecache.PyPackageManager; import java.util.StringTokenizer; @@ -26,7 +26,7 @@ /** (Control) package manager whose hierarchy contains this java pkg. */ - public PackageManager __mgr__; + public PyPackageManager __mgr__; public PyJavaPackage(String name) { this(name, null, null); @@ -36,12 +36,12 @@ this(name, null, jarfile); } - public PyJavaPackage(String name,PackageManager mgr) { + public PyJavaPackage(String name,PyPackageManager mgr) { this(name, mgr, null); } - public PyJavaPackage(String name,PackageManager mgr,String jarfile) { + public PyJavaPackage(String name,PyPackageManager mgr,String jarfile) { __file__ = jarfile; __name__ = name; @@ -113,7 +113,7 @@ /** * Used for 'from xyz import *', dynamically dir pkg filling up __dict__. It uses - * {@link PackageManager#doDir} implementation furnished by the control package manager with + * {@link PyPackageManager#doDir} implementation furnished by the control package manager with * instantiate true. The package manager should load classes with {@link #addClass} in the * package. * @@ -151,8 +151,8 @@ public void __setattr__(String attr, PyObject value) { if (attr == "__mgr__") { - PackageManager newMgr = Py.tojava(value, - PackageManager.class); + PyPackageManager newMgr = Py.tojava(value, + PyPackageManager.class); if (newMgr == null) { throw Py.TypeError("cannot set java package __mgr__ to None"); } Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java 2009-01-25 12:19:58 UTC (rev 5976) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java 2009-01-25 20:13:29 UTC (rev 5977) @@ -21,7 +21,7 @@ import org.python.Version; import org.python.core.adapter.ClassicPyObjectAdapter; import org.python.core.adapter.ExtensiblePyObjectAdapter; -import org.python.core.packagecache.PackageManager; +import org.python.core.packagecache.PyPackageManager; import org.python.core.packagecache.SysPackageManager; import org.python.modules.Setup; import org.python.modules.zipimport.zipimporter; @@ -80,7 +80,7 @@ private static Map<String,String> builtinNames; public static PyTuple builtin_module_names = null; - public static PackageManager packageManager; + public static PyPackageManager packageManager; private static File cachedir; private static PyList defaultPath; Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/SyspathJavaLoader.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/SyspathJavaLoader.java 2009-01-25 12:19:58 UTC (rev 5976) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/SyspathJavaLoader.java 2009-01-25 20:13:29 UTC (rev 5977) @@ -82,7 +82,7 @@ } try { - // this has the side affect of adding the jar to the PackageManager during the + // this has the side affect of adding the jar to the PyPackageManager during the // initialization of the SyspathArchive path = new SyspathArchive(sys.getPath(path.toString())); } catch (Exception e) { Deleted: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java 2009-01-25 12:19:58 UTC (rev 5976) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java 2009-01-25 20:13:29 UTC (rev 5977) @@ -1,72 +0,0 @@ -// Copyright (c) Corporation for National Research Initiatives -// Copyright 2000 Samuele Pedroni - -package org.python.core.packagecache; - -import org.python.core.Py; -import org.python.core.PyJavaPackage; -import org.python.core.PyList; -import org.python.core.PyObject; -import org.python.core.PyStringMap; - -import java.io.EOFException; - -public interface PackageManager { - - Class findClass(String pkg, String name, String reason); - - Class findClass(String pkg, String name); - - void notifyPackageImport(String pkg, String name); - - boolean packageExists(String pkg, String name); - - /** - * Reports the specified package content names. Should be overriden. Used by - * {@link PyJavaPackage#__dir__} and {@link PyJavaPackage#fillDir}. - * - * @return resulting list of names (PyList of PyString) - * @param jpkg queried package - * @param instantiate if true then instatiate reported names in package dict - * @param exclpkgs exclude packages (just when instantiate is false) - */ - PyList doDir(PyJavaPackage jpkg, boolean instantiate, boolean exclpkgs); - - /** - * Append a directory to the list of directories searched for java packages - * and java classes. - * - * @param dir A directory. - */ - void addDirectory(java.io.File dir); - - /** - * Append a directory to the list of directories searched for java packages - * and java classes. - * - * @param dir A directory name. - */ - void addJarDir(String dir, boolean cache); - - /** - * Append a jar file to the list of locations searched for java packages and - * java classes. - * - * @param jarfile A directory name. - */ - void addJar(String jarfile, boolean cache); - - PyObject lookupName(String name); - - /** - * Creates package/updates statically known classes info. Uses - * {@link PyJavaPackage#addPackage(java.lang.String, java.lang.String) }, - * {@link PyJavaPackage#addPlaceholders}. - * - * @param name package name - * @param classes comma-separated string - * @param jarfile involved jarfile; can be null - * @return created/updated package - */ - PyJavaPackage makeJavaPackage(String name, String classes, String jarfile); -} Added: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java (rev 0) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java 2009-01-25 20:13:29 UTC (rev 5977) @@ -0,0 +1,37 @@ +package org.python.core.packagecache; + +public interface PackageManager { + + Class findClass(String pkg, String name, String reason); + + Class findClass(String pkg, String name); + + void notifyPackageImport(String pkg, String name); + + boolean packageExists(String pkg, String name); + + /** + * Append a directory to the list of directories searched for java packages + * and java classes. + * + * @param dir A directory. + */ + void addDirectory(java.io.File dir); + + /** + * Append a directory to the list of directories searched for java packages + * and java classes. + * + * @param dir A directory name. + */ + void addJarDir(String dir, boolean cache); + + /** + * Append a jar file to the list of locations searched for java packages and + * java classes. + * + * @param jarfile A directory name. + */ + void addJar(String jarfile, boolean cache); + +} Copied: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java (from rev 5960, trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java) =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java (rev 0) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java 2009-01-25 20:13:29 UTC (rev 5977) @@ -0,0 +1,37 @@ +// Copyright (c) Corporation for National Research Initiatives +// Copyright 2000 Samuele Pedroni + +package org.python.core.packagecache; + +import org.python.core.PyJavaPackage; +import org.python.core.PyList; +import org.python.core.PyObject; + +public interface PyPackageManager extends PackageManager { + + /** + * Reports the specified package content names. Should be overriden. Used by + * {@link PyJavaPackage#__dir__} and {@link PyJavaPackage#fillDir}. + * + * @return resulting list of names (PyList of PyString) + * @param jpkg queried package + * @param instantiate if true then instatiate reported names in package dict + * @param exclpkgs exclude packages (just when instantiate is false) + */ + PyList doDir(PyJavaPackage jpkg, boolean instantiate, boolean exclpkgs); + + //XXX + PyObject lookupName(String name); + + /** + * Creates package/updates statically known classes info. Uses + * {@link PyJavaPackage#addPackage(java.lang.String, java.lang.String) }, + * {@link PyJavaPackage#addPlaceholders}. + * + * @param name package name + * @param classes comma-separated string + * @param jarfile involved jarfile; can be null + * @return created/updated package + */ + PyJavaPackage makeJavaPackage(String name, String classes, String jarfile); +} Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-25 12:19:58 UTC (rev 5976) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-25 20:13:29 UTC (rev 5977) @@ -41,7 +41,7 @@ /** * System package manager. Used by org.python.core.PySystemState. */ -public class SysPackageManager implements PackageManager { +public class SysPackageManager implements PyPackageManager { /* from old PackageManager */ private PyList searchPath; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-01-27 04:54:36
|
Revision: 5990 http://jython.svn.sourceforge.net/jython/?rev=5990&view=rev Author: fwierzbicki Date: 2009-01-27 04:54:32 +0000 (Tue, 27 Jan 2009) Log Message: ----------- BasePackageManager now completely untethered from Py internals. Modified Paths: -------------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java 2009-01-27 02:26:20 UTC (rev 5989) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java 2009-01-27 04:54:32 UTC (rev 5990) @@ -1023,7 +1023,7 @@ } public static PyJavaPackage add_package(String n, String contents) { - return packageManager.makeJavaPackage(n, contents, null); + return (PyJavaPackage)packageManager.makeJavaPackage(n, contents, null); } /** Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java 2009-01-27 02:26:20 UTC (rev 5989) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java 2009-01-27 04:54:32 UTC (rev 5990) @@ -18,6 +18,8 @@ import java.net.URL; import java.net.URLConnection; import java.security.AccessControlException; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -26,52 +28,30 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import org.python.core.Options; -import org.python.core.Py; -import org.python.core.PyJavaPackage; -import org.python.core.PyList; -import org.python.core.PyObject; -import org.python.core.PyString; -import org.python.core.PyStringMap; -import org.python.core.PySystemState; -import org.python.core.imp; -import org.python.core.util.RelativeFile; -import org.python.util.Generic; - /** * Base package manager. */ public abstract class BasePackageManager { /* from old PackageManager */ - protected PyList searchPath; - protected PyJavaPackage topLevelPackage; + protected List searchPath; protected boolean indexModified; + protected boolean respectJavaAccessibility; protected Map<String,JarXEntry> jarfiles; // for default cache (local fs based) impl protected File cachedir; - protected void message(String msg) { - Py.writeMessage("*sys-package-mgr*", msg); + public BasePackageManager(boolean respectJavaAccessibility) { + this.respectJavaAccessibility = respectJavaAccessibility; } - protected void warning(String warn) { - Py.writeWarning("*sys-package-mgr*", warn); - } - - protected void comment(String msg) { - Py.writeComment("*sys-package-mgr*", msg); - } - - protected void debug(String msg) { - Py.writeDebug("*sys-package-mgr*", msg); - } - public abstract Object makeJavaPackage(String name, String classes, String jarfile); + public abstract Class findClass(String pkg, String name, String reason); + public void addJar(String jarfile, boolean cache) { addJarToPackages(new File(jarfile), cache); if (cache) { @@ -146,231 +126,40 @@ if (pkg != null && pkg.length() > 0) { name = pkg + '.' + name; } - Py.writeComment("import", "'" + name + "' as java package"); + comment("import " + "'" + name + "' as java package"); } public Class findClass(String pkg, String name) { Class c = findClass(pkg, name, "java class"); if (c != null) { - Py.writeComment("import", "'" + name + "' as java class"); + comment("import " + "'" + name + "' as java class"); } return c; } - public Class findClass(String pkg, String name, String reason) { - if (pkg != null && pkg.length() > 0) { - name = pkg + '.' + name; - } - return Py.findClassEx(name, reason); - } - /** - * Dynamically check if pkg.name exists as java pkg in the controlled - * hierarchy. Should be overriden. - * - * @param pkg parent pkg name - * @param name candidate name - * @return true if pkg exists - */ - public boolean packageExists(String pkg, String name) { - if (packageExists(this.getSearchPath(), pkg, name)) { - return true; - } - - PySystemState system = Py.getSystemState(); - - if (system.getClassLoader() == null - && packageExists(Py.getSystemState().path, pkg, name)) { - return true; - } - - return false; - } - - - /** - * Helper for {@link #packageExists(java.lang.String,java.lang.String)}. - * Scans for package pkg.name the directories in path. - */ - protected boolean packageExists(PyList path, String pkg, String name) { - String child = pkg.replace('.', File.separatorChar) + File.separator - + name; - - for (int i = 0; i < path.__len__(); i++) { - String dir = path.pyget(i).__str__().toString(); - - File f = new RelativeFile(dir, child); - if (f.isDirectory() && imp.caseok(f, name)) { - /* - * Figure out if we have a directory a mixture of python and - * java or just an empty directory (which means Java) or a - * directory with only Python source (which means Python). - */ - PackageExistsFileFilter m = new PackageExistsFileFilter(); - f.listFiles(m); - boolean exists = m.packageExists(); - if (exists) { - Py.writeComment("import", "java package as '" - + f.getAbsolutePath() + "'"); - } - return exists; - } - } - return false; - } - - /** * @return the searchPath */ - public PyList getSearchPath() { + public List getSearchPath() { return searchPath; } /** * @param searchPath the searchPath to set */ - public void setSearchPath(PyList searchPath) { + public void setSearchPath(List searchPath) { this.searchPath = searchPath; } /** - * @return the topLevelPackage - */ - public PyJavaPackage getTopLevelPackage() { - return topLevelPackage; - } - - /** - * @param topLevelPackage the topLevelPackage to set - */ - public void setTopLevelPackage(PyJavaPackage topLevelPackage) { - this.topLevelPackage = topLevelPackage; - } - - class PackageExistsFileFilter implements FilenameFilter { - private boolean java; - - private boolean python; - - public boolean accept(File dir, String name) { - if(name.endsWith(".py") || name.endsWith("$py.class") || name.endsWith("$_PyInner.class")) { - python = true; - }else if (name.endsWith(".class")) { - java = true; - } - return false; - } - - public boolean packageExists() { - if (this.python && !this.java) { - return false; - } - return true; - } - } - - /** - * Helper for {@link #doDir(PyJavaPackage,boolean,boolean)}. Scans for - * package jpkg content over the directories in path. Add to ret the founded - * classes/pkgs. Filter out classes using {@link #filterByName},{@link #filterByAccess}. - */ - protected void doDir(PyList path, PyList ret, PyJavaPackage jpkg, - boolean instantiate, boolean exclpkgs) { - String child = jpkg.__name__.replace('.', File.separatorChar); - - for (int i = 0; i < path.__len__(); i++) { - String dir = path.pyget(i).__str__().toString(); - if (dir.length() == 0) { - dir = null; - } - - File childFile = new File(dir, child); - - String[] list = childFile.list(); - if (list == null) { - continue; - } - - doList: for (int j = 0; j < list.length; j++) { - String jname = list[j]; - - File cand = new File(childFile, jname); - - int jlen = jname.length(); - - boolean pkgCand = false; - - if (cand.isDirectory()) { - if (!instantiate && exclpkgs) { - continue; - } - pkgCand = true; - } else { - if (!jname.endsWith(".class")) { - continue; - } - jlen -= 6; - } - - jname = jname.substring(0, jlen); - PyString name = new PyString(jname); - - if (filterByName(jname, pkgCand)) { - continue; - } - - // for opt maybe we should some hash-set for ret - if (jpkg.__dict__.has_key(name) || jpkg.clsSet.has_key(name) - || ret.__contains__(name)) { - continue; - } - - if (!Character.isJavaIdentifierStart(jname.charAt(0))) { - continue; - } - - for (int k = 1; k < jlen; k++) { - if (!Character.isJavaIdentifierPart(jname.charAt(k))) { - continue doList; - } - } - - if (!pkgCand) { - try { - int acc = checkAccess(new BufferedInputStream( - new FileInputStream(cand))); - if ((acc == -1) || filterByAccess(jname, acc)) { - continue; - } - } catch (IOException e) { - continue; - } - } - - if (instantiate) { - if (pkgCand) { - jpkg.addPackage(jname); - } else { - jpkg.addClass(jname, Py.findClass(jpkg.__name__ + "." + jname)); - } - } - - ret.append(name); - - } - } - - } - - /** * Add directory dir (if exists) to {@link #searchPath}. */ public void addDirectory(File dir) { try { if (dir.getPath().length() == 0) { - this.getSearchPath().append(Py.EmptyString); + this.getSearchPath().add(""); } else { - this.getSearchPath().append(new PyString(dir.getCanonicalPath())); + this.getSearchPath().add(dir.getCanonicalPath()); } } catch (IOException e) { warning("skipping bad directory, '" + dir + "'"); @@ -392,10 +181,10 @@ * true if path refers to a jar. */ public void addClassPath(String path) { - PyList paths = new PyString(path).split(java.io.File.pathSeparator); + String[] paths = path.split(java.io.File.pathSeparator); - for (int i = 0; i < paths.__len__(); i++) { - String entry = paths.pyget(i).toString(); + for (int i = 0; i < paths.length; i++) { + String entry = paths[i].toString(); if (entry.endsWith(".jar") || entry.endsWith(".zip")) { addJarToPackages(new File(entry), true); } else { @@ -481,7 +270,7 @@ List<String>[] vec = zipPackages.get(packageName); if (vec == null) { - vec = new List[] { Generic.list(), Generic.list() }; + vec = new List[] { new ArrayList(), new ArrayList() }; zipPackages.put(packageName, vec); } int access = checkAccess(zip); @@ -494,7 +283,7 @@ // Extract all of the packages in a single jarfile private Map<String, String> getZipPackages(InputStream jarin) throws IOException { - Map<String, List<String>[]> zipPackages = Generic.map(); + Map<String, List<String>[]> zipPackages = new HashMap<String, List<String>[]>(); ZipInputStream zip = new ZipInputStream(jarin); @@ -505,7 +294,7 @@ } // Turn each vector into a comma-separated String - Map<String, String> transformed = Generic.map(); + Map<String, String> transformed = new HashMap<String, String>(); for (String key : zipPackages.keySet()) { List<String>[] vec = zipPackages.get(key); String classes = listToString(vec[0]); @@ -673,7 +462,7 @@ String classes = entry.getValue(); int idx = classes.indexOf('@'); - if (idx >= 0 && Options.respectJavaAccessibility) { + if (idx >= 0 && respectJavaAccessibility) { classes = classes.substring(0, idx); } @@ -699,7 +488,7 @@ deleteCacheFile(cachefile); return null; } - Map<String, String> packs = Generic.map(); + Map<String, String> packs = new HashMap<String, String>(); try { while (true) { String packageName = istream.readUTF(); @@ -744,7 +533,7 @@ */ protected void initCache() { this.indexModified = false; - this.jarfiles = Generic.map(); + this.jarfiles = new HashMap<String,JarXEntry>(); try { DataInputStream istream = inOpenIndex(); @@ -997,4 +786,20 @@ return istream.readShort(); } + //Do nothing by default. + protected void message(String msg) { + } + + //Do nothing by default. + protected void warning(String warn) { + } + + //Do nothing by default. + protected void comment(String msg) { + } + + //Do nothing by default. + protected void debug(String msg) { + } + } Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-27 02:26:20 UTC (rev 5989) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-27 04:54:32 UTC (rev 5990) @@ -43,7 +43,10 @@ */ public class SysPackageManager extends BasePackageManager implements PyPackageManager{ + protected PyJavaPackage topLevelPackage; + public SysPackageManager(File cachedir, Properties registry) { + super(Options.respectJavaAccessibility); /* from PathPackageManager constructor */ this.searchPath = new PyList(); @@ -57,6 +60,175 @@ } } + /** + * @return the topLevelPackage + */ + public PyJavaPackage getTopLevelPackage() { + return topLevelPackage; + } + + /** + * @param topLevelPackage the topLevelPackage to set + */ + public void setTopLevelPackage(PyJavaPackage topLevelPackage) { + this.topLevelPackage = topLevelPackage; + } + + public Class findClass(String pkg, String name, String reason) { + if (pkg != null && pkg.length() > 0) { + name = pkg + '.' + name; + } + return Py.findClassEx(name, reason); + } + + /** + * Dynamically check if pkg.name exists as java pkg in the controlled + * hierarchy. Should be overriden. + * + * @param pkg parent pkg name + * @param name candidate name + * @return true if pkg exists + */ + public boolean packageExists(String pkg, String name) { + if (packageExists(this.getSearchPath(), pkg, name)) { + return true; + } + + PySystemState system = Py.getSystemState(); + + if (system.getClassLoader() == null + && packageExists(Py.getSystemState().path, pkg, name)) { + return true; + } + + return false; + } + + /** + * Helper for {@link #packageExists(java.lang.String,java.lang.String)}. + * Scans for package pkg.name the directories in path. + */ + protected boolean packageExists(List path, String pkg, String name) { + String child = pkg.replace('.', File.separatorChar) + File.separator + + name; + + for (int i = 0; i < path.size(); i++) { + String dir = path.get(i).toString(); + + File f = new RelativeFile(dir, child); + if (f.isDirectory() && imp.caseok(f, name)) { + /* + * Figure out if we have a directory a mixture of python and + * java or just an empty directory (which means Java) or a + * directory with only Python source (which means Python). + */ + PackageExistsFileFilter m = new PackageExistsFileFilter(); + f.listFiles(m); + boolean exists = m.packageExists(); + if (exists) { + Py.writeComment("import", "java package as '" + + f.getAbsolutePath() + "'"); + } + return exists; + } + } + return false; + } + + + /** + * Helper for {@link #doDir(PyJavaPackage,boolean,boolean)}. Scans for + * package jpkg content over the directories in path. Add to ret the founded + * classes/pkgs. Filter out classes using {@link #filterByName},{@link #filterByAccess}. + */ + protected void doDir(List path, PyList ret, PyJavaPackage jpkg, + boolean instantiate, boolean exclpkgs) { + String child = jpkg.__name__.replace('.', File.separatorChar); + + for (int i = 0; i < path.size(); i++) { + String dir = path.get(i).toString(); + if (dir.length() == 0) { + dir = null; + } + + File childFile = new File(dir, child); + + String[] list = childFile.list(); + if (list == null) { + continue; + } + + doList: for (int j = 0; j < list.length; j++) { + String jname = list[j]; + + File cand = new File(childFile, jname); + + int jlen = jname.length(); + + boolean pkgCand = false; + + if (cand.isDirectory()) { + if (!instantiate && exclpkgs) { + continue; + } + pkgCand = true; + } else { + if (!jname.endsWith(".class")) { + continue; + } + jlen -= 6; + } + + jname = jname.substring(0, jlen); + PyString name = new PyString(jname); + + if (filterByName(jname, pkgCand)) { + continue; + } + + // for opt maybe we should some hash-set for ret + if (jpkg.__dict__.has_key(name) || jpkg.clsSet.has_key(name) + || ret.__contains__(name)) { + continue; + } + + if (!Character.isJavaIdentifierStart(jname.charAt(0))) { + continue; + } + + for (int k = 1; k < jlen; k++) { + if (!Character.isJavaIdentifierPart(jname.charAt(k))) { + continue doList; + } + } + + if (!pkgCand) { + try { + int acc = checkAccess(new BufferedInputStream( + new FileInputStream(cand))); + if ((acc == -1) || filterByAccess(jname, acc)) { + continue; + } + } catch (IOException e) { + continue; + } + } + + if (instantiate) { + if (pkgCand) { + jpkg.addPackage(jname); + } else { + jpkg.addClass(jname, Py.findClass(jpkg.__name__ + "." + jname)); + } + } + + ret.append(name); + + } + } + + } + public PyList doDir(PyJavaPackage jpkg, boolean instantiate, boolean exclpkgs) { PyList basic = basicDoDir(jpkg, instantiate, exclpkgs); @@ -166,4 +338,42 @@ return p; } + protected void message(String msg) { + Py.writeMessage("*sys-package-mgr*", msg); + } + + protected void warning(String warn) { + Py.writeWarning("*sys-package-mgr*", warn); + } + + protected void comment(String msg) { + Py.writeComment("*sys-package-mgr*", msg); + } + + protected void debug(String msg) { + Py.writeDebug("*sys-package-mgr*", msg); + } + + class PackageExistsFileFilter implements FilenameFilter { + private boolean java; + + private boolean python; + + public boolean accept(File dir, String name) { + if(name.endsWith(".py") || name.endsWith("$py.class") || name.endsWith("$_PyInner.class")) { + python = true; + }else if (name.endsWith(".class")) { + java = true; + } + return false; + } + + public boolean packageExists() { + if (this.python && !this.java) { + return false; + } + return true; + } + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-01-28 17:42:11
|
Revision: 5994 http://jython.svn.sourceforge.net/jython/?rev=5994&view=rev Author: fwierzbicki Date: 2009-01-28 17:42:03 +0000 (Wed, 28 Jan 2009) Log Message: ----------- Removed more Python-specific code while still keeping a working package cache. Modified Paths: -------------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java Added Paths: ----------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/JavaPackage.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java Removed Paths: ------------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-28 16:26:16 UTC (rev 5993) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-28 17:42:03 UTC (rev 5994) @@ -3,7 +3,8 @@ package org.python.core; -import org.python.core.packagecache.PyPackageManager; +import org.python.core.packagecache.PackageManager; +import org.python.core.packagecache.JavaPackage; import java.util.StringTokenizer; @@ -11,7 +12,7 @@ * A representation of java package. */ -public class PyJavaPackage extends PyObject { +public class PyJavaPackage extends PyObject implements JavaPackage{ public String __name__; @@ -26,7 +27,7 @@ /** (Control) package manager whose hierarchy contains this java pkg. */ - public PyPackageManager __mgr__; + public PackageManager __mgr__; public PyJavaPackage(String name) { this(name, null, null); @@ -36,12 +37,11 @@ this(name, null, jarfile); } - public PyJavaPackage(String name,PyPackageManager mgr) { + public PyJavaPackage(String name,PackageManager mgr) { this(name, mgr, null); } - - public PyJavaPackage(String name,PyPackageManager mgr,String jarfile) { + public PyJavaPackage(String name,PackageManager mgr,String jarfile) { __file__ = jarfile; __name__ = name; @@ -56,11 +56,11 @@ __dict__.__setitem__("__name__", new PyString(__name__)); } - public PyJavaPackage addPackage(String name) { + public JavaPackage addPackage(String name) { return addPackage(name, null); } - public PyJavaPackage addPackage(String name, String jarfile) { + public JavaPackage addPackage(String name, String jarfile) { int dot = name.indexOf('.'); String firstName=name; String lastName=null; @@ -85,7 +85,7 @@ else return p; } - public PyObject addClass(String name, Class<?> c) { + public Object addClass(String name, Class<?> c) { PyObject ret = Py.java2py(c); __dict__.__setitem__(name.intern(), ret); return ret; @@ -113,7 +113,7 @@ /** * Used for 'from xyz import *', dynamically dir pkg filling up __dict__. It uses - * {@link PyPackageManager#doDir} implementation furnished by the control package manager with + * {@link PackageManager#doDir} implementation furnished by the control package manager with * instantiate true. The package manager should load classes with {@link #addClass} in the * package. * @@ -131,11 +131,11 @@ if (__mgr__.packageExists(__name__,name)) { __mgr__.notifyPackageImport(__name__,name); - return addPackage(name); + return (PyObject)addPackage(name); } Class c = __mgr__.findClass(__name__,name); - if (c != null) return addClass(name,c); + if (c != null) return (PyObject)addClass(name,c); if (name == "__name__") return new PyString(__name__); if (name == "__dict__") return __dict__; @@ -151,8 +151,8 @@ public void __setattr__(String attr, PyObject value) { if (attr == "__mgr__") { - PyPackageManager newMgr = Py.tojava(value, - PyPackageManager.class); + PackageManager newMgr = Py.tojava(value, + PackageManager.class); if (newMgr == null) { throw Py.TypeError("cannot set java package __mgr__ to None"); } @@ -170,4 +170,15 @@ public String toString() { return "<java package "+__name__+" "+Py.idstr(this)+">"; } + + public String getName() { return __name__; } + public Object dir() { return __dir__(); } + public Object getClasses() { return clsSet; } + public Object getMembers() { return __dict__; } + public void setPackageManager (PackageManager mgr) { __mgr__ = mgr; } + //public Object addClass(String string, Class<?> clazz); + //public JavaPackage addPackage(String name); + //public JavaPackage addPackage(String name, String jarfile); + //public void addPlaceholders(String classes); + } Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java 2009-01-28 16:26:16 UTC (rev 5993) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PySystemState.java 2009-01-28 17:42:03 UTC (rev 5994) @@ -21,7 +21,7 @@ import org.python.Version; import org.python.core.adapter.ClassicPyObjectAdapter; import org.python.core.adapter.ExtensiblePyObjectAdapter; -import org.python.core.packagecache.PyPackageManager; +import org.python.core.packagecache.PackageManager; import org.python.core.packagecache.SysPackageManager; import org.python.modules.Setup; import org.python.modules.zipimport.zipimporter; @@ -80,7 +80,7 @@ private static Map<String,String> builtinNames; public static PyTuple builtin_module_names = null; - public static PyPackageManager packageManager; + public static PackageManager packageManager; private static File cachedir; private static PyList defaultPath; @@ -1019,7 +1019,7 @@ } public static PyJavaPackage add_package(String n) { - return add_package(n, null); + return (PyJavaPackage)add_package(n, null); } public static PyJavaPackage add_package(String n, String contents) { Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java 2009-01-28 16:26:16 UTC (rev 5993) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java 2009-01-28 17:42:03 UTC (rev 5994) @@ -31,8 +31,10 @@ /** * Base package manager. */ -public abstract class BasePackageManager { +public abstract class BasePackageManager implements PackageManager { + protected JavaPackage topLevelPackage; + /* from old PackageManager */ protected List searchPath; @@ -44,8 +46,22 @@ // for default cache (local fs based) impl protected File cachedir; - public BasePackageManager(boolean respectJavaAccessibility) { + public BasePackageManager(JavaPackage top, File cachedir, boolean respectJavaAccessibility, List<String> classpaths, List<String> jarpaths) { this.respectJavaAccessibility = respectJavaAccessibility; + this.searchPath = new ArrayList(); + this.topLevelPackage = top; + top.setPackageManager(this); + if (useCacheDir(cachedir)) { + initCache(); + for (String c : classpaths) { + addClassPath(c); + } + for (String j : jarpaths) { + addJarPath(j); + } + saveCache(); + } + } public abstract Object makeJavaPackage(String name, String classes, String jarfile); @@ -164,7 +180,6 @@ } } - //Copied from CachedJarsPackageManager /** * Filter class/pkg by name helper method - hook. The default impl. is used * by {@link #addJarToPackages} in order to filter out classes whose name Added: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/JavaPackage.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/JavaPackage.java (rev 0) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/JavaPackage.java 2009-01-28 17:42:03 UTC (rev 5994) @@ -0,0 +1,23 @@ +// Released to the public domain by Frank Wierzbicki Jan 3, 2009 +package org.python.core.packagecache; + +import java.util.Map; + +public interface JavaPackage { + public String getName(); + + /* XXX: should return List */ + public Object dir(); + + /* XXX: should return Set or Map */ + public Object getClasses(); + + /* XXX: should return Map */ + public Object getMembers(); + + public Object addClass(String string, Class<?> clazz); + public JavaPackage addPackage(String name); + public JavaPackage addPackage(String name, String jarfile); + public void addPlaceholders(String classes); + void setPackageManager(PackageManager mgr); +} Copied: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java (from rev 5986, trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java) =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java (rev 0) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java 2009-01-28 17:42:03 UTC (rev 5994) @@ -0,0 +1,70 @@ +// Copyright (c) Corporation for National Research Initiatives +// Copyright 2000 Samuele Pedroni + +package org.python.core.packagecache; + +import org.python.core.PyList; +import org.python.core.PyObject; + +public interface PackageManager { + + Class findClass(String pkg, String name, String reason); + + Class findClass(String pkg, String name); + + void notifyPackageImport(String pkg, String name); + + boolean packageExists(String pkg, String name); + + /** + * Append a directory to the list of directories searched for java packages + * and java classes. + * + * @param dir A directory. + */ + void addDirectory(java.io.File dir); + + /** + * Append a directory to the list of directories searched for java packages + * and java classes. + * + * @param dir A directory name. + */ + void addJarDir(String dir, boolean cache); + + /** + * Append a jar file to the list of locations searched for java packages and + * java classes. + * + * @param jarfile A directory name. + */ + void addJar(String jarfile, boolean cache); + + + /** + * Reports the specified package content names. Should be overriden. Used by + * {@link PyJavaPackage#__dir__} and {@link PyJavaPackage#fillDir}. + * + * @return resulting list of names (PyList of PyString) + * @param jpkg queried package + * @param instantiate if true then instatiate reported names in package dict + * @param exclpkgs exclude packages (just when instantiate is false) + */ + //XXX + PyList doDir(JavaPackage jpkg, boolean instantiate, boolean exclpkgs); + + //XXX + PyObject lookupName(String name); + + /** + * Creates package/updates statically known classes info. Uses + * {@link PyJavaPackage#addPackage(java.lang.String, java.lang.String) }, + * {@link PyJavaPackage#addPlaceholders}. + * + * @param name package name + * @param classes comma-separated string + * @param jarfile involved jarfile; can be null + * @return created/updated package + */ + Object makeJavaPackage(String name, String classes, String jarfile); +} Deleted: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java 2009-01-28 16:26:16 UTC (rev 5993) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PyPackageManager.java 2009-01-28 17:42:03 UTC (rev 5994) @@ -1,70 +0,0 @@ -// Copyright (c) Corporation for National Research Initiatives -// Copyright 2000 Samuele Pedroni - -package org.python.core.packagecache; - -import org.python.core.PyJavaPackage; -import org.python.core.PyList; -import org.python.core.PyObject; - -public interface PyPackageManager { - - Class findClass(String pkg, String name, String reason); - - Class findClass(String pkg, String name); - - void notifyPackageImport(String pkg, String name); - - boolean packageExists(String pkg, String name); - - /** - * Append a directory to the list of directories searched for java packages - * and java classes. - * - * @param dir A directory. - */ - void addDirectory(java.io.File dir); - - /** - * Append a directory to the list of directories searched for java packages - * and java classes. - * - * @param dir A directory name. - */ - void addJarDir(String dir, boolean cache); - - /** - * Append a jar file to the list of locations searched for java packages and - * java classes. - * - * @param jarfile A directory name. - */ - void addJar(String jarfile, boolean cache); - - - /** - * Reports the specified package content names. Should be overriden. Used by - * {@link PyJavaPackage#__dir__} and {@link PyJavaPackage#fillDir}. - * - * @return resulting list of names (PyList of PyString) - * @param jpkg queried package - * @param instantiate if true then instatiate reported names in package dict - * @param exclpkgs exclude packages (just when instantiate is false) - */ - PyList doDir(PyJavaPackage jpkg, boolean instantiate, boolean exclpkgs); - - //XXX - PyObject lookupName(String name); - - /** - * Creates package/updates statically known classes info. Uses - * {@link PyJavaPackage#addPackage(java.lang.String, java.lang.String) }, - * {@link PyJavaPackage#addPlaceholders}. - * - * @param name package name - * @param classes comma-separated string - * @param jarfile involved jarfile; can be null - * @return created/updated package - */ - Object makeJavaPackage(String name, String classes, String jarfile); -} Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-28 16:26:16 UTC (rev 5993) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-28 17:42:03 UTC (rev 5994) @@ -18,6 +18,7 @@ import java.net.URL; import java.net.URLConnection; import java.security.AccessControlException; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -41,30 +42,16 @@ /** * System package manager. Used by org.python.core.PySystemState. */ -public class SysPackageManager extends BasePackageManager implements PyPackageManager{ +public class SysPackageManager extends BasePackageManager { - protected PyJavaPackage topLevelPackage; - public SysPackageManager(File cachedir, Properties registry) { - super(Options.respectJavaAccessibility); - /* from PathPackageManager constructor */ - this.searchPath = new PyList(); - - /* from old PackageManager constructor */ - this.topLevelPackage = new PyJavaPackage("", this); - - if (useCacheDir(cachedir)) { - initCache(); - findAllPackages(registry); - saveCache(); - } + super(new PyJavaPackage(""), cachedir, Options.respectJavaAccessibility, findClassPaths(registry), findJarPaths(registry)); } - protected void findAllPackages(Properties registry) { + private static List<String> findClassPaths(Properties registry) { + List<String> classpaths = new ArrayList<String>(); String paths = registry.getProperty("python.packages.paths", "java.class.path,sun.boot.class.path"); - String directories = registry.getProperty( - "python.packages.directories", "java.ext.dirs"); String fakepath = registry .getProperty("python.packages.fakepath", null); StringTokenizer tok = new StringTokenizer(paths, ","); @@ -74,36 +61,42 @@ if (tmp == null) { continue; } - addClassPath(tmp); + classpaths.add(tmp); } - tok = new StringTokenizer(directories, ","); + if (fakepath != null) { + classpaths.add(fakepath); + } + return classpaths; + } + + private static List<String> findJarPaths(Properties registry) { + List<String> paths = new ArrayList<String>(); + String directories = registry.getProperty( + "python.packages.directories", "java.ext.dirs"); + StringTokenizer tok = new StringTokenizer(directories, ","); while (tok.hasMoreTokens()) { String entry = tok.nextToken().trim(); String tmp = registry.getProperty(entry); if (tmp == null) { continue; } - addJarPath(tmp); + paths.add(tmp); } - - if (fakepath != null) { - addClassPath(fakepath); - } + return paths; } - /** * @return the topLevelPackage */ - public PyJavaPackage getTopLevelPackage() { + public JavaPackage getTopLevelPackage() { return topLevelPackage; } /** * @param topLevelPackage the topLevelPackage to set */ - public void setTopLevelPackage(PyJavaPackage topLevelPackage) { + public void setTopLevelPackage(JavaPackage topLevelPackage) { this.topLevelPackage = topLevelPackage; } @@ -174,9 +167,9 @@ * package jpkg content over the directories in path. Add to ret the founded * classes/pkgs. Filter out classes using {@link #filterByName},{@link #filterByAccess}. */ - protected void doDir(List path, PyList ret, PyJavaPackage jpkg, + protected void doDir(List path, PyList ret, JavaPackage jpkg, boolean instantiate, boolean exclpkgs) { - String child = jpkg.__name__.replace('.', File.separatorChar); + String child = jpkg.getName().replace('.', File.separatorChar); for (int i = 0; i < path.size(); i++) { String dir = path.get(i).toString(); @@ -220,7 +213,7 @@ } // for opt maybe we should some hash-set for ret - if (jpkg.__dict__.has_key(name) || jpkg.clsSet.has_key(name) + if (((PyStringMap)jpkg.getMembers()).has_key(name) || ((PyStringMap)jpkg.getClasses()).has_key(name) || ret.__contains__(name)) { continue; } @@ -251,7 +244,7 @@ if (pkgCand) { jpkg.addPackage(jname); } else { - jpkg.addClass(jname, Py.findClass(jpkg.__name__ + "." + jname)); + jpkg.addClass(jname, Py.findClass(jpkg.getName() + "." + jname)); } } @@ -259,10 +252,9 @@ } } - } - public PyList doDir(PyJavaPackage jpkg, boolean instantiate, + public PyList doDir(JavaPackage jpkg, boolean instantiate, boolean exclpkgs) { PyList basic = basicDoDir(jpkg, instantiate, exclpkgs); PyList ret = new PyList(); @@ -282,12 +274,12 @@ /** * Basic helper implementation of {@link #doDir}. It merges information - * from jpkg {@link PyJavaPackage#clsSet} and {@link PyJavaPackage#__dict__}. + * from jpkg {@link JavaPackage#clsSet} and {@link JavaPackage#__dict__}. */ - protected PyList basicDoDir(PyJavaPackage jpkg, boolean instantiate, + protected PyList basicDoDir(JavaPackage jpkg, boolean instantiate, boolean exclpkgs) { - PyStringMap dict = jpkg.__dict__; - PyStringMap cls = jpkg.clsSet; + PyStringMap dict = (PyStringMap)jpkg.getMembers(); + PyStringMap cls = (PyStringMap)jpkg.getClasses(); if (!instantiate) { PyList ret = cls.keys(); @@ -309,7 +301,7 @@ for (PyObject pyname : cls.keys().asIterable()) { if (!dict.has_key(pyname)) { String name = pyname.toString(); - jpkg.addClass(name, Py.findClass(jpkg.__name__ + "." + name)); + jpkg.addClass(name, Py.findClass(jpkg.getName() + "." + name)); } } @@ -328,9 +320,8 @@ return list1; } - public PyObject lookupName(String name) { - PyObject top = this.getTopLevelPackage(); + PyObject top = (PyObject)this.getTopLevelPackage(); do { int dot = name.indexOf('.'); String firstName = name; @@ -359,9 +350,9 @@ * @param jarfile involved jarfile; can be null * @return created/updated package */ - public Object makeJavaPackage(String name, String classes, + public JavaPackage makeJavaPackage(String name, String classes, String jarfile) { - PyJavaPackage p = this.getTopLevelPackage(); + JavaPackage p = this.getTopLevelPackage(); if (name.length() != 0) p = p.addPackage(name, jarfile); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-01-28 18:21:03
|
Revision: 5995 http://jython.svn.sourceforge.net/jython/?rev=5995&view=rev Author: fwierzbicki Date: 2009-01-28 18:20:59 +0000 (Wed, 28 Jan 2009) Log Message: ----------- more purging of python-ness from package caching -- unfortunately means more casting internally. Modified Paths: -------------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/JavaImporter.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyModule.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/JavaImporter.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/JavaImporter.java 2009-01-28 17:42:03 UTC (rev 5994) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/JavaImporter.java 2009-01-28 18:20:59 UTC (rev 5995) @@ -36,7 +36,7 @@ public PyObject find_module(String name, PyObject path) { Py.writeDebug("import", "trying " + name + " in packagemanager for path " + path); - PyObject ret = PySystemState.packageManager.lookupName(name.intern()); + PyObject ret = (PyObject)PySystemState.packageManager.lookupName(name.intern()); if (ret != null) { Py.writeComment("import", "'" + name + "' as java package"); return this; @@ -45,7 +45,7 @@ } public PyObject load_module(String name) { - return PySystemState.packageManager.lookupName(name.intern()); + return (PyObject)PySystemState.packageManager.lookupName(name.intern()); } /** Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-28 17:42:03 UTC (rev 5994) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-28 18:20:59 UTC (rev 5995) @@ -108,7 +108,7 @@ } public PyObject __dir__() { - return __mgr__.doDir(this,false,false); + return (PyObject)__mgr__.doDir(this,false,false); } /** @@ -120,7 +120,7 @@ * @return list of member names */ public PyObject fillDir() { - return __mgr__.doDir(this,true,false); + return (PyObject)__mgr__.doDir(this,true,false); } Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyModule.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyModule.java 2009-01-28 17:42:03 UTC (rev 5994) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyModule.java 2009-01-28 18:20:59 UTC (rev 5995) @@ -112,7 +112,7 @@ } if (attr == null) { - attr = PySystemState.packageManager.lookupName(fullName); + attr = (PyObject)PySystemState.packageManager.lookupName(fullName); } if (attr != null) { Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java 2009-01-28 17:42:03 UTC (rev 5994) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/PackageManager.java 2009-01-28 18:20:59 UTC (rev 5995) @@ -3,8 +3,7 @@ package org.python.core.packagecache; -import org.python.core.PyList; -import org.python.core.PyObject; +import java.util.List; public interface PackageManager { @@ -45,16 +44,14 @@ * Reports the specified package content names. Should be overriden. Used by * {@link PyJavaPackage#__dir__} and {@link PyJavaPackage#fillDir}. * - * @return resulting list of names (PyList of PyString) + * @return resulting list of names (List of PyString) * @param jpkg queried package * @param instantiate if true then instatiate reported names in package dict * @param exclpkgs exclude packages (just when instantiate is false) */ - //XXX - PyList doDir(JavaPackage jpkg, boolean instantiate, boolean exclpkgs); + List doDir(JavaPackage jpkg, boolean instantiate, boolean exclpkgs); - //XXX - PyObject lookupName(String name); + Object lookupName(String name); /** * Creates package/updates statically known classes info. Uses Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-28 17:42:03 UTC (rev 5994) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/SysPackageManager.java 2009-01-28 18:20:59 UTC (rev 5995) @@ -167,7 +167,7 @@ * package jpkg content over the directories in path. Add to ret the founded * classes/pkgs. Filter out classes using {@link #filterByName},{@link #filterByAccess}. */ - protected void doDir(List path, PyList ret, JavaPackage jpkg, + protected void doDir(List path, List ret, JavaPackage jpkg, boolean instantiate, boolean exclpkgs) { String child = jpkg.getName().replace('.', File.separatorChar); @@ -214,7 +214,7 @@ // for opt maybe we should some hash-set for ret if (((PyStringMap)jpkg.getMembers()).has_key(name) || ((PyStringMap)jpkg.getClasses()).has_key(name) - || ret.__contains__(name)) { + || ret.contains(name)) { continue; } @@ -248,16 +248,16 @@ } } - ret.append(name); + ret.add(name); } } } - public PyList doDir(JavaPackage jpkg, boolean instantiate, + public List doDir(JavaPackage jpkg, boolean instantiate, boolean exclpkgs) { - PyList basic = basicDoDir(jpkg, instantiate, exclpkgs); - PyList ret = new PyList(); + List basic = basicDoDir(jpkg, instantiate, exclpkgs); + List ret = new PyList(); doDir(this.getSearchPath(), ret, jpkg, instantiate, exclpkgs); @@ -267,7 +267,8 @@ doDir(system.path, ret, jpkg, instantiate, exclpkgs); } - return merge(basic, ret); + basic.addAll(ret); + return basic; } /* From old PackageManager */ @@ -276,7 +277,7 @@ * Basic helper implementation of {@link #doDir}. It merges information * from jpkg {@link JavaPackage#clsSet} and {@link JavaPackage#__dict__}. */ - protected PyList basicDoDir(JavaPackage jpkg, boolean instantiate, + protected List basicDoDir(JavaPackage jpkg, boolean instantiate, boolean exclpkgs) { PyStringMap dict = (PyStringMap)jpkg.getMembers(); PyStringMap cls = (PyStringMap)jpkg.getClasses(); @@ -308,18 +309,6 @@ return dict.keys(); } - /** - * Helper merging list2 into list1. Returns list1. - */ - protected PyList merge(PyList list1, PyList list2) { - for (int i = 0; i < list2.__len__(); i++) { - PyObject name = list2.pyget(i); - list1.append(name); - } - - return list1; - } - public PyObject lookupName(String name) { PyObject top = (PyObject)this.getTopLevelPackage(); do { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-01-29 03:23:42
|
Revision: 5997 http://jython.svn.sourceforge.net/jython/?rev=5997&view=rev Author: fwierzbicki Date: 2009-01-29 03:23:40 +0000 (Thu, 29 Jan 2009) Log Message: ----------- Added more constructors to BasePackageManager, cleaned up commented code in PyJavaPackage. Modified Paths: -------------- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-28 20:32:23 UTC (rev 5996) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/PyJavaPackage.java 2009-01-29 03:23:40 UTC (rev 5997) @@ -176,9 +176,4 @@ public Object getClasses() { return clsSet; } public Object getMembers() { return __dict__; } public void setPackageManager (PackageManager mgr) { __mgr__ = mgr; } - //public Object addClass(String string, Class<?> clazz); - //public JavaPackage addPackage(String name); - //public JavaPackage addPackage(String name, String jarfile); - //public void addPlaceholders(String classes); - } Modified: trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java =================================================================== --- trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java 2009-01-28 20:32:23 UTC (rev 5996) +++ trunk/sandbox/wierzbicki/jlr_experiment/src/org/python/core/packagecache/BasePackageManager.java 2009-01-29 03:23:40 UTC (rev 5997) @@ -46,9 +46,31 @@ // for default cache (local fs based) impl protected File cachedir; + public BasePackageManager(JavaPackage top) { + this(top, null, true, null, null); + } + + public BasePackageManager(JavaPackage top, File cachedir) { + this(top, cachedir, true, null, null); + } + public BasePackageManager(JavaPackage top, File cachedir, + boolean respectJavaAccessibility) { + this(top, cachedir, respectJavaAccessibility, null, null); + } + + + public BasePackageManager(JavaPackage top, + File cachedir, boolean respectJavaAccessibility, + List<String> classpaths) { + this(top, cachedir, respectJavaAccessibility, classpaths, null); + } + + public BasePackageManager(JavaPackage top, + File cachedir, + boolean respectJavaAccessibility, List<String> classpaths, List<String> jarpaths) { @@ -66,7 +88,6 @@ } saveCache(); } - } public abstract Object makeJavaPackage(String name, String classes, String jarfile); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |