On Tue, Feb 22, 2005 at 08:08:01PM -0500, WHIRLYCOTT wrote: > Torsten Curdt wrote: > > >While I did some work with ASM I found it > >very nice to work with ...and so I wanted > >get rid of a direct BCEL dependency. Which > > Fyi, I'm working on porting the current BCEL ClassTransformer over to ASM. > > >...but for now I think rewriting on the > >package name is quite a useable alternative > >that probably will fit the real world > >requirements. > > You have mentioned this before, but I don't understand how you envision > this working. Does this mean that a class originally in package > com.foo.abc would be rewritten to rewritten.package.name by the > transformer? I'm fairly sure that I am not interpreting your idea > correctly because this will almost certainly cause problems for > instances of that class if they need to access package protected methods > and fields in other classes. If you could go into a bit of detail on > this, it would be super.
Sorry if I butt in. What we were talking about is how to decide is a class should be transformed. Right now, the ContinuationClassLoader is checking if the package name starts with "org.apache.commons.javaflow.testcode" and transforms it. Just for giggles, I just did a little patch to make that configurable (and a set). Any opinions? Art Gramlich Index: java/org/apache/commons/javaflow/ContinuationClassLoader.java =================================================================== --- src/java/org/apache/commons/javaflow/ContinuationClassLoader.java (revision 155031) +++ src/java/org/apache/commons/javaflow/ContinuationClassLoader.java (working copy) @@ -17,6 +17,7 @@ import java.io.IOException; import java.io.InputStream; +import java.util.Set; import org.apache.commons.io.IOUtils; import org.apache.commons.javaflow.bytecode.ClassTransformer; @@ -33,10 +34,31 @@ private final static Log log = LogFactory.getLog(ContinuationCompilingClassLoader.class); private ClassTransformer transformer = new BcelClassTransformer(); + private Set packagesToTransform; + /* public ContinuationClassLoader(ClassLoader parent) { + this(parent, new HashSet()); + } + */ + + public ContinuationClassLoader(ClassLoader parent, Set packageNamesToTransform) { super(parent); //Repository.setRepository(new ClassLoaderRepository(parent)); + packagesToTransform = packageNamesToTransform; + } + + protected boolean shouldTransform(String name) { + int index = name.lastIndexOf('.'); + String packageName; + if (index == -1) { + // If the class is in the default package, give the package name a single '.' + packageName = "."; + } else { + packageName = name.substring(0,index); + } + //log.debug("Checking if we should transform "+packageName); + return packagesToTransform.contains(packageName); } protected synchronized Class loadClass(String name, boolean resolve) @@ -57,7 +79,7 @@ if (is != null) { - if (name.startsWith("org.apache.commons.javaflow.testcode")) { + if (shouldTransform(name)) { //log.debug("transforming " + name); final byte data[] = transformer.transform(is); Index: test/org/apache/commons/javaflow/AbstractClassLoaderTestCase.java =================================================================== --- src/test/org/apache/commons/javaflow/AbstractClassLoaderTestCase.java (revision 155031) +++ src/test/org/apache/commons/javaflow/AbstractClassLoaderTestCase.java (working copy) @@ -16,7 +16,9 @@ package org.apache.commons.javaflow; import java.lang.reflect.Method; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import junit.framework.TestCase; @@ -35,7 +37,9 @@ } protected void call(final String methodName) throws Exception { - final ClassLoader cl = new ContinuationClassLoader(getClass().getClassLoader()); + Set packages = new HashSet(); + packages.add("org.apache.commons.javaflow.testcode"); + final ClassLoader cl = new ContinuationClassLoader(getClass().getClassLoader(), packages); final Class clazz = cl.loadClass(clazzName); final Object instance = clazz.newInstance(); assertNotNull(clazz); > > phil. > > -- > Whirlycott > Philip Jacob > [EMAIL PROTECTED] > http://www.whirlycott.com/phil/ > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]