From ffa59127298578d881f367ec9fe4738fb02bf8ab Mon Sep 17 00:00:00 2001 From: patrickroemer Date: Tue, 26 Jun 2007 16:12:12 +0000 Subject: [PATCH] introduce ClassSource configuration --- .../purdue/cs/bloat/file/ClassFileLoader.java | 21 ++++++++++++------- src/EDU/purdue/cs/bloat/file/ClassSource.java | 5 +++++ .../cs/bloat/file/DefaultClassSource.java | 9 ++++++++ 3 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 src/EDU/purdue/cs/bloat/file/ClassSource.java create mode 100644 src/EDU/purdue/cs/bloat/file/DefaultClassSource.java diff --git a/src/EDU/purdue/cs/bloat/file/ClassFileLoader.java b/src/EDU/purdue/cs/bloat/file/ClassFileLoader.java index 29fd2ab..dadb1c2 100644 --- a/src/EDU/purdue/cs/bloat/file/ClassFileLoader.java +++ b/src/EDU/purdue/cs/bloat/file/ClassFileLoader.java @@ -56,12 +56,9 @@ public class ClassFileLoader implements ClassInfoLoader { private static final int CACHE_LIMIT = 10; - /** - * Constructor. The classpath initially consists of the contents of the - * java.class.path and sun.boot.class.path system - * properties. - */ - public ClassFileLoader() { + private ClassSource _classSource; + + public ClassFileLoader(ClassSource classSource) { outputDir = new File("."); classpath = System.getProperty("java.class.path"); classpath += File.pathSeparator @@ -73,6 +70,16 @@ public class ClassFileLoader implements ClassInfoLoader { openZipFiles = new HashMap(); cache = new LinkedList(); verbose = false; + _classSource = classSource; + } + + /** + * Constructor. The classpath initially consists of the contents of the + * java.class.path and sun.boot.class.path system + * properties. + */ + public ClassFileLoader() { + this(new DefaultClassSource()); } public void setVerbose(final boolean verbose) { @@ -205,7 +212,7 @@ public class ClassFileLoader implements ClassInfoLoader { private ClassInfo loadClassFromRessource(String name){ name = name.replaceAll("/","."); try { - Class clazz = Class.forName(name); + Class clazz = _classSource.loadClass(name); int i = name.lastIndexOf('.'); if (i >= 0 && i < name.length()){ name = name.substring(i+1); diff --git a/src/EDU/purdue/cs/bloat/file/ClassSource.java b/src/EDU/purdue/cs/bloat/file/ClassSource.java new file mode 100644 index 0000000..b5ce03f --- /dev/null +++ b/src/EDU/purdue/cs/bloat/file/ClassSource.java @@ -0,0 +1,5 @@ +package EDU.purdue.cs.bloat.file; + +public interface ClassSource { + Class loadClass(String name) throws ClassNotFoundException ; +} diff --git a/src/EDU/purdue/cs/bloat/file/DefaultClassSource.java b/src/EDU/purdue/cs/bloat/file/DefaultClassSource.java new file mode 100644 index 0000000..8df2147 --- /dev/null +++ b/src/EDU/purdue/cs/bloat/file/DefaultClassSource.java @@ -0,0 +1,9 @@ +package EDU.purdue.cs.bloat.file; + +public class DefaultClassSource implements ClassSource { + + public Class loadClass(String name) throws ClassNotFoundException { + return Class.forName(name); + } + +}