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. |