Author: tcurdt Date: Tue Jun 21 07:52:29 2005 New Revision: 191665 URL: http://svn.apache.org/viewcvs?rev=191665&view=rev Log: added rewriting utils plus a more recent commons-io, added transformer skeleton for the ASM implementation plus jars, changed the class transformer interface to use a byte array as input
Added: jakarta/commons/sandbox/javaflow/trunk/lib/asm-2.0.jar (with props) jakarta/commons/sandbox/javaflow/trunk/lib/asm-tree-2.0.jar (with props) jakarta/commons/sandbox/javaflow/trunk/lib/commons-io-20050621.133116.jar (with props) jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingUtils.java jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/asm/ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/asm/AsmClassTransformer.java Modified: jakarta/commons/sandbox/javaflow/trunk/project.properties jakarta/commons/sandbox/javaflow/trunk/project.xml jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ContinuationClassLoader.java jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ClassTransformer.java jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingResourceStore.java jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/bcel/BcelClassTransformer.java Added: jakarta/commons/sandbox/javaflow/trunk/lib/asm-2.0.jar URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/lib/asm-2.0.jar?rev=191665&view=auto ============================================================================== Binary file - no diff available. Propchange: jakarta/commons/sandbox/javaflow/trunk/lib/asm-2.0.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: jakarta/commons/sandbox/javaflow/trunk/lib/asm-tree-2.0.jar URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/lib/asm-tree-2.0.jar?rev=191665&view=auto ============================================================================== Binary file - no diff available. Propchange: jakarta/commons/sandbox/javaflow/trunk/lib/asm-tree-2.0.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: jakarta/commons/sandbox/javaflow/trunk/lib/commons-io-20050621.133116.jar URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/lib/commons-io-20050621.133116.jar?rev=191665&view=auto ============================================================================== Binary file - no diff available. Propchange: jakarta/commons/sandbox/javaflow/trunk/lib/commons-io-20050621.133116.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Modified: jakarta/commons/sandbox/javaflow/trunk/project.properties URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/project.properties?rev=191665&r1=191664&r2=191665&view=diff ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/project.properties (original) +++ jakarta/commons/sandbox/javaflow/trunk/project.properties Tue Jun 21 07:52:29 2005 @@ -36,3 +36,6 @@ # ------------------------------------------------------------------------ maven.jar.commons-jci = ${basedir}/lib/commons-jci-r159148.jar maven.jar.bcel = ${basedir}/lib/jakarta-bcel-20040329.jar +maven.jar.commons-io = lib/commons-io-20050621.133116.jar +maven.jar.asm = lib/asm-2.0.jar +maven.jar.asm-tree = lib/asm-tree-2.0.jar Modified: jakarta/commons/sandbox/javaflow/trunk/project.xml URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/project.xml?rev=191665&r1=191664&r2=191665&view=diff ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/project.xml (original) +++ jakarta/commons/sandbox/javaflow/trunk/project.xml Tue Jun 21 07:52:29 2005 @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <project> <!-- - --> <extend>../commons-build/sandbox-project.xml</extend> + --> <pomVersion>1</pomVersion> <artifactId>commons-javaflow</artifactId> <name>Commons Javaflow</name> @@ -82,7 +82,19 @@ <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> - <version>1.0</version> + <version>20050621.133116</version> + <type>jar</type> + </dependency> + <dependency> + <groupId>asm</groupId> + <artifactId>asm</artifactId> + <version>2.0</version> + <type>jar</type> + </dependency> + <dependency> + <groupId>asm</groupId> + <artifactId>asm-tree</artifactId> + <version>2.0</version> <type>jar</type> </dependency> </dependencies> Modified: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ContinuationClassLoader.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ContinuationClassLoader.java?rev=191665&r1=191664&r2=191665&view=diff ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ContinuationClassLoader.java (original) +++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ContinuationClassLoader.java Tue Jun 21 07:52:29 2005 @@ -17,7 +17,6 @@ import java.io.IOException; import java.io.InputStream; - import org.apache.commons.io.IOUtils; import org.apache.commons.javaflow.bytecode.ClassTransformer; import org.apache.commons.javaflow.bytecode.bcel.BcelClassTransformer; @@ -76,8 +75,14 @@ if (startsWithOneOf(includeInRewriting, name)) { //log.debug("transforming " + name); - final byte data[] = transformer.transform(is); - return defineClass(name, data, 0, data.length); + final byte[] original; + try { + original = IOUtils.toByteArray(is); + } catch (IOException e) { + throw new ClassNotFoundException("failed to read the class file", e); + } + final byte[] transformed = transformer.transform(original); + return defineClass(name, transformed, 0, transformed.length); } try { Modified: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ClassTransformer.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ClassTransformer.java?rev=191665&r1=191664&r2=191665&view=diff ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ClassTransformer.java (original) +++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ClassTransformer.java Tue Jun 21 07:52:29 2005 @@ -15,12 +15,11 @@ */ package org.apache.commons.javaflow.bytecode; -import java.io.InputStream; /** * @author tcurdt * */ public interface ClassTransformer { - byte[] transform( final InputStream is ); + byte[] transform( final byte[] original ); } Modified: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingResourceStore.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingResourceStore.java?rev=191665&r1=191664&r2=191665&view=diff ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingResourceStore.java (original) +++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingResourceStore.java Tue Jun 21 07:52:29 2005 @@ -15,16 +15,10 @@ */ package org.apache.commons.javaflow.bytecode; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; - import org.apache.bcel.Repository; -import org.apache.bcel.classfile.ClassParser; -import org.apache.bcel.classfile.JavaClass; import org.apache.bcel.util.ClassLoaderRepository; import org.apache.commons.javaflow.bytecode.bcel.BcelClassTransformer; import org.apache.commons.jci.stores.ResourceStore; @@ -89,7 +83,7 @@ throw new ClassNotFoundException("could not find " + clazzName); } - final byte[] newClazz = transformer.transform(new ByteArrayInputStream(oldClazz)); + final byte[] newClazz = transformer.transform(oldClazz); super.write(clazzName, newClazz); log.debug("rewrote " + clazzName); } catch (ClassNotFoundException e) { Added: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingUtils.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingUtils.java?rev=191665&view=auto ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingUtils.java (added) +++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/RewritingUtils.java Tue Jun 21 07:52:29 2005 @@ -0,0 +1,73 @@ +/* + * Copyright 1999-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.javaflow.bytecode; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.jar.JarEntry; +import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; + +public final class RewritingUtils { + + public static void rewriteClassFile( + final File input, + final ClassTransformer transformer, + final File output + ) throws IOException { + + final byte[] original = FileUtils.readFileToByteArray(input); + final byte[] transformed = transformer.transform(original); + final FileOutputStream os = new FileOutputStream(output); + os.write(transformed); + os.close(); + } + + public static void rewriteJar( + final JarInputStream input, + final ClassTransformer transformer, + final JarOutputStream output + ) throws IOException { + + while(true) { + final JarEntry entry = input.getNextJarEntry(); + + if (entry == null) { + break; + } + + if (entry.isDirectory()) { + continue; + } + + final String name = entry.getName(); + + final byte[] original = IOUtils.toByteArray(input); + final byte[] transformed = transformer.transform(original); + + output.putNextEntry(entry); + + IOUtils.copy(new ByteArrayInputStream(transformed), output); + } + + input.close(); + output.close(); + } +} Added: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/asm/AsmClassTransformer.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/asm/AsmClassTransformer.java?rev=191665&view=auto ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/asm/AsmClassTransformer.java (added) +++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/asm/AsmClassTransformer.java Tue Jun 21 07:52:29 2005 @@ -0,0 +1,49 @@ +/* + * Copyright 1999-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.javaflow.bytecode.asm; + +import org.apache.commons.javaflow.bytecode.ClassTransformer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.tree.ClassNode; + + +/** + * @author tcurdt + * + */ +public final class AsmClassTransformer implements ClassTransformer { + + private final static Log log = LogFactory.getLog(AsmClassTransformer.class); + + public byte[] transform(final byte[] original) { + + final ClassReader cr = new ClassReader(original); + final ClassNode cn = new ClassNode(); + + cr.accept(cn, true); + + final ClassWriter cw = new ClassWriter(true, false); + cn.accept(cn); + + final byte[] transformed = cw.toByteArray(); + + return null; + } + +} \ No newline at end of file Modified: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/bcel/BcelClassTransformer.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/bcel/BcelClassTransformer.java?rev=191665&r1=191664&r2=191665&view=diff ============================================================================== --- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/bcel/BcelClassTransformer.java (original) +++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/bcel/BcelClassTransformer.java Tue Jun 21 07:52:29 2005 @@ -15,12 +15,12 @@ */ package org.apache.commons.javaflow.bytecode.bcel; +import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Vector; - import org.apache.bcel.Constants; import org.apache.bcel.Repository; import org.apache.bcel.classfile.ClassFormatException; @@ -101,8 +101,10 @@ private boolean currentMethodStatic = false; private boolean debug = true; - public byte[] transform(final InputStream is) { - + public byte[] transform(final byte[] original) { + + final InputStream is = new ByteArrayInputStream(original); + final ClassParser parser = new ClassParser(is, null); JavaClass javaClazz = null; try { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]