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]

Reply via email to