You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tc...@apache.org on 2010/06/26 19:16:25 UTC

svn commit: r958247 [1/2] - in /commons/sandbox/javaflow/trunk: ./ src/main/java/org/apache/commons/javaflow/ src/main/java/org/apache/commons/javaflow/ant/ src/main/java/org/apache/commons/javaflow/bytecode/ src/main/java/org/apache/commons/javaflow/b...

Author: tcurdt
Date: Sat Jun 26 17:16:23 2010
New Revision: 958247

URL: http://svn.apache.org/viewvc?rev=958247&view=rev
Log:
applied https://issues.apache.org/jira/browse/SANDBOX-323 (thanks to Valery Silaev),
removed author tags,
added some missing license headers,
some cleanups,
requires java5 now
some general cleanups
deactivated the BCEL tests


Modified:
    commons/sandbox/javaflow/trunk/pom.xml
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/Continuation.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationClassLoader.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationDeath.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ant/AntRewriteTask.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/BytecodeClassLoader.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Continuable.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/EmptyStackException.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Stack.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/StackRecorder.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/NopResourceTransformer.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/ResourceTransformer.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformer.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationClassAdapter.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAdapter.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/MonitoringFrame.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/DecompilingVisitor.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ControlFlowGraph.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandler.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandlers.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionPath.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionVisitor.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Frame.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/InstructionContext.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/LocalVariables.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/OperandStack.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Subroutine.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Subroutines.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/UninitializedObjectType.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/stores/JavaflowResourceStore.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/stores/TransformingResourceStore.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/utils/CompositeTransformer.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/utils/ReflectionUtils.java
    commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/utils/RewritingUtils.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/AsmTestSuite.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/BcelTestSuite.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/UsageTestCase.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/helper/ClassTransformerClassLoader.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/BlackRed.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/ClassAccess1.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/ClassAccess2.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/ClassAccess3.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/CounterFlow.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/DefaultConstructor.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/Invoker.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/NestedSynchronized.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/NewObject.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/NoReference.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/NullVariableMethodFlow.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/RewriteBugs.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/Simple.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/SimpleSerializable.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/SimpleSynchronized.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/SimpleTryCatch.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/rewrite/Stack.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/suite/SerializationTestCase.java
    commons/sandbox/javaflow/trunk/src/test/java/org/apache/commons/javaflow/suite/VerificationTestCase.java

Modified: commons/sandbox/javaflow/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/pom.xml?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/pom.xml (original)
+++ commons/sandbox/javaflow/trunk/pom.xml Sat Jun 26 17:16:23 2010
@@ -35,6 +35,10 @@
       <name>Eugene Kuleshov</name>
       <email>eu at javatx.org</email>
     </contributor>
+    <contributor>
+      <name>Valery Silaev</name>
+      <email>vsilaev at gmail.com</email>
+    </contributor>
   </contributors>
 
   <scm>
@@ -74,27 +78,27 @@
     <dependency>
       <groupId>asm</groupId>
       <artifactId>asm</artifactId>
-      <version>3.1</version>
+      <version>3.2</version>
     </dependency>
     <dependency>
       <groupId>asm</groupId>
       <artifactId>asm-analysis</artifactId>
-      <version>3.1</version>
+      <version>3.2</version>
     </dependency>
     <dependency>
       <groupId>asm</groupId>
       <artifactId>asm-commons</artifactId>
-      <version>3.1</version>
+      <version>3.2</version>
     </dependency>
     <dependency>
       <groupId>asm</groupId>
       <artifactId>asm-util</artifactId>
-      <version>3.1</version>
+      <version>3.2</version>
     </dependency>
     <dependency>
       <groupId>asm</groupId>
       <artifactId>asm-tree</artifactId>
-      <version>3.1</version>
+      <version>3.2</version>
     </dependency>
     <dependency>
       <groupId>commons-io</groupId>
@@ -127,11 +131,20 @@
 
   <build>
     <plugins>
+      <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <configuration>
+              <source>1.5</source>
+              <target>1.5</target>
+              <encoding>UTF-8</encoding>
+          </configuration>
+      </plugin>
       <plugin>     
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <includes>
-            <include>**/*TestSuite.java</include>
+            <include>**/AsmTestSuite.java</include>
           </includes>
           <excludes>
             <exclude>**/Abstract*</exclude>

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/Continuation.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/Continuation.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/Continuation.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/Continuation.java Sat Jun 26 17:16:23 2010
@@ -122,7 +122,9 @@ public final class Continuation implemen
             throw new IllegalArgumentException("target is null");
         }
 
-        log.debug("starting new flow from " + ReflectionUtils.getClassName(pTarget) + "/" + ReflectionUtils.getClassLoaderName(pTarget));
+        if (log.isDebugEnabled()) {
+            log.debug("starting new flow from " + ReflectionUtils.getClassName(pTarget) + "/" + ReflectionUtils.getClassLoaderName(pTarget));
+        }
 
         return continueWith(new Continuation(new StackRecorder(pTarget)), pContext);
     }
@@ -157,11 +159,13 @@ public final class Continuation implemen
      * @see #getContext()
      */
     public static Continuation continueWith(final Continuation pOldContinuation, final Object pContext) {
-        if(pOldContinuation == null) {
+        if (pOldContinuation == null) {
             throw new IllegalArgumentException("continuation parameter must not be null.");
         }
 
-        log.debug("continueing with continuation " + ReflectionUtils.getClassName(pOldContinuation) + "/" + ReflectionUtils.getClassLoaderName(pOldContinuation));
+        if (log.isDebugEnabled()) {
+            log.debug("continueing with continuation " + ReflectionUtils.getClassName(pOldContinuation) + "/" + ReflectionUtils.getClassLoaderName(pOldContinuation));
+        }
 
         while(true) {
             try {
@@ -189,6 +193,17 @@ public final class Continuation implemen
     }
     
     /**
+     * Accessor for value yielded by continuation  
+     * 
+     * @return
+     *      The latest value yielded by suspended continuation.
+     *      The value is passed from the continuation to the client code via {@link #suspend(Object)}
+     */
+    public Object value() {
+        return stackRecorder.value;
+    }
+    
+    /**
      * Stops the running continuation.
      *
      * <p>
@@ -196,13 +211,43 @@ public final class Continuation implemen
      * When called, the thread returns from the above methods with a new {@link Continuation}
      * object that captures the thread state.
      *
+     * @return
+     *      The value to be returned to suspended code after continuation is resumed.
+     *      The value is passed from the client code via @link #continueWith(Continuation, Object)
+     *      and is identical to value returned by {@link #getContext}.
+     *      
      * @throws IllegalStateException
      *      if this method is called outside the {@link #continueWith} or {@link #startWith} methods.
      */
-    public static void suspend() {
-        StackRecorder.suspend();
+    public static Object suspend() {
+        return suspend(null);
+    }
+    
+    /**
+     * Stops the running continuation.
+     *
+     * <p>
+     * This method can be only called inside {@link #continueWith} or {@link #startWith} methods.
+     * When called, the thread returns from the above methods with a new {@link Continuation}
+     * object that captures the thread state and with {@link #value} equals to parameter passed.
+     *
+     * @param value 
+     *      The intermediate result yielded by suspended continuations
+     *      The value may be accessed via {@link #value} method of continuation returned
+     *
+     * @return
+     *      The value to be returned to suspended code after continuation is resumed.
+     *      The value is passed from the client code via @link #continueWith(Continuation, Object)
+     *      and is identical to value returned by {@link #getContext}.
+     *      
+     * @throws IllegalStateException
+     *      if this method is called outside the {@link #continueWith} or {@link #startWith} methods.
+     */    
+    public static Object suspend(final Object value) {
+        return StackRecorder.suspend(value);
     }
 
+
     /**
      * Completes the execution of the running continuation.
      *

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationClassLoader.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationClassLoader.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationClassLoader.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationClassLoader.java Sat Jun 26 17:16:23 2010
@@ -31,7 +31,6 @@ import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.ProtectionDomain;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -62,14 +61,14 @@ public final class ContinuationClassLoad
      * loader regardless of whether the parent class loader is being searched
      * first or not.
      */
-    private List systemPackages = new ArrayList();
+    private List<String> systemPackages = new ArrayList<String>();
 
     /**
      * These are the package roots that are to be loaded by this class loader
      * regardless of whether the parent class loader is being searched first
      * or not.
      */
-    private List loaderPackages = new ArrayList();
+    private List<String> loaderPackages = new ArrayList<String>();
 
     /**
      * Whether or not this classloader will ignore the base
@@ -190,11 +189,11 @@ public final class ContinuationClassLoad
      * @exception ClassNotFoundException if the requested class does not exist
      *                                   on this loader's classpath.
      */
-    public Class forceLoadClass(String classname)
+    public Class<?> forceLoadClass(String classname)
          throws ClassNotFoundException {
         log.debug("force loading " + classname);
 
-        Class theClass = findLoadedClass(classname);
+        Class<?> theClass = findLoadedClass(classname);
 
         if (theClass == null) {
             theClass = findClass(classname);
@@ -225,16 +224,14 @@ public final class ContinuationClassLoad
 
         boolean useParentFirst = parentFirst;
 
-        for (Iterator itr = systemPackages.iterator(); itr.hasNext();) {
-            String packageName = (String) itr.next();
+        for (final String packageName : systemPackages) {
             if (resourceName.startsWith(packageName)) {
                 useParentFirst = true;
                 break;
             }
         }
 
-        for (Iterator itr = loaderPackages.iterator(); itr.hasNext();) {
-            String packageName = (String) itr.next();
+        for (final String packageName : loaderPackages) {
             if (resourceName.startsWith(packageName)) {
                 useParentFirst = false;
                 break;
@@ -264,13 +261,13 @@ public final class ContinuationClassLoad
      * on the system classpath (when not in isolated mode) or this loader's
      * classpath.
      */
-    protected synchronized Class loadClass(String classname, boolean resolve)
+    protected synchronized Class<?> loadClass(String classname, boolean resolve)
          throws ClassNotFoundException {
         // 'sync' is needed - otherwise 2 threads can load the same class
         // twice, resulting in LinkageError: duplicated class definition.
         // findLoadedClass avoids that, but without sync it won't work.
 
-        Class theClass = findLoadedClass(classname);
+        Class<?> theClass = findLoadedClass(classname);
         if (theClass != null) {
             return theClass;
         }
@@ -313,24 +310,24 @@ public final class ContinuationClassLoad
      *
      * @return the Class instance created from the given data
      */
-    protected Class defineClassFromData(final byte[] classData, final String classname) {
-        return (Class)AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
+    protected Class<?> defineClassFromData(final byte[] classData, final String classname) {
+        return AccessController.doPrivileged(new PrivilegedAction<Class<?>>() {
+            public Class<?> run() {
                 // define a package if necessary.
                 int i = classname.lastIndexOf('.');
                 if (i>0) {
-                    String packageName = classname.substring(0,i);
-                    Package pkg = getPackage(packageName);
-                    if(pkg==null) {
+                    final String packageName = classname.substring(0,i);
+                    final Package pkg = getPackage(packageName);
+                    if (pkg == null) {
                         definePackage(packageName,null,null,null,null,null,null,null);
                     }
                 }
 
-                byte[] newData = transformer.transform(classData);
-                ProtectionDomain domain = this.getClass().getProtectionDomain();
+                final byte[] newData = transformer.transform(classData);
+                final ProtectionDomain domain = this.getClass().getProtectionDomain();
                 return defineClass(classname,newData,0,newData.length,domain);
             }
-        },acc);
+        }, acc);
     }
 
     /**
@@ -348,10 +345,9 @@ public final class ContinuationClassLoad
      * @exception SecurityException if there is a security problem while
      * reading the class from the stream.
      */
-    private Class getClassFromStream(InputStream stream, String classname) throws IOException, SecurityException {
+    private Class<?> getClassFromStream(InputStream stream, String classname) throws IOException, SecurityException {
 
-    	ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        
+    	final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         try {
 	        
         	int bytesRead;
@@ -380,7 +376,7 @@ public final class ContinuationClassLoad
      * @exception ClassNotFoundException if the requested class does not exist
      *                                   on this loader's classpath.
      */
-    public Class findClass(final String name) throws ClassNotFoundException {
+    public Class<?> findClass(final String name) throws ClassNotFoundException {
         log.debug("Finding class " + name);
 
         // locate the class file

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationDeath.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationDeath.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationDeath.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ContinuationDeath.java Sat Jun 26 17:16:23 2010
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
 
 import org.apache.commons.javaflow.bytecode.StackRecorder;
@@ -9,8 +25,6 @@ import org.apache.commons.javaflow.bytec
  *
  * <p>
  * This class is only for javaflow internal code.
- *
- * @author Kohsuke Kawaguchi
  */
 public final class ContinuationDeath extends Error {
     

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ant/AntRewriteTask.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ant/AntRewriteTask.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ant/AntRewriteTask.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/ant/AntRewriteTask.java Sat Jun 26 17:16:23 2010
@@ -35,10 +35,8 @@ import org.apache.tools.ant.types.FileSe
 
 /**
  * Ant task that enhances class files with javaflow instrumentation.
- *
- * @author tcurdt
- * @author Kohsuke Kawaguchi
  */
+@SuppressWarnings("deprecation")
 public class AntRewriteTask extends MatchingTask {
 
     private ResourceTransformer transformer;
@@ -137,7 +135,7 @@ public class AntRewriteTask extends Matc
                 
                 if (fileName.endsWith(".class")) {
                     log("Rewriting " + source + " to " + destination, Project.MSG_VERBOSE);
-                    System.out.println("Rewriting " + source);
+                    // System.out.println("Rewriting " + source);
 
                     RewritingUtils.rewriteClassFile( source, transformer, destination );
                 }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/BytecodeClassLoader.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/BytecodeClassLoader.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/BytecodeClassLoader.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/BytecodeClassLoader.java Sat Jun 26 17:16:23 2010
@@ -1,10 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.objectweb.asm.ClassAdapter;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.commons.EmptyVisitor;
 
-
 public class BytecodeClassLoader extends ClassLoader {
 
     class NameClassAdapter extends ClassAdapter {
@@ -23,16 +38,16 @@ public class BytecodeClassLoader extends
         }
     }
     
-    public Class loadClass( final byte[] bytecode ) {
+    public Class<?> loadClass( final byte[] bytecode ) {
         final NameClassAdapter nameClassAdapter = new NameClassAdapter();
         
         new ClassReader(bytecode).accept(nameClassAdapter, 0);
         
         final String name = nameClassAdapter.getName().replace('/', '.');
         
-//        System.out.println("loading class " + name);
+        // System.out.println("loading class " + name);
         
-        final Class clazz = defineClass(name, bytecode, 0, bytecode.length);
+        final Class<?> clazz = defineClass(name, bytecode, 0, bytecode.length);
         
         return clazz;
     }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Continuable.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Continuable.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Continuable.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Continuable.java Sat Jun 26 17:16:23 2010
@@ -20,9 +20,6 @@ package org.apache.commons.javaflow.byte
  * Marker interface to mark classes, which are transformed by the 
  * ContinuationClassLoader.
  *
- * @author <a href="mailto:tcurdt@apache.org">Torsten Curdt</a>
- * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
- * @version CVS $Id$
  */
 public interface Continuable {
 }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/EmptyStackException.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/EmptyStackException.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/EmptyStackException.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/EmptyStackException.java Sat Jun 26 17:16:23 2010
@@ -16,16 +16,11 @@
  */
 package org.apache.commons.javaflow.bytecode;
 
-/**
- * @author tcurdt
- *
- */
-public class EmptyStackException extends RuntimeException {
+public final class EmptyStackException extends RuntimeException {
 
     private static final long serialVersionUID = 1L;
 
     public EmptyStackException(String message) {
         super(message);
     }
-
 }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Stack.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Stack.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Stack.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/Stack.java Sat Jun 26 17:16:23 2010
@@ -26,10 +26,6 @@ import org.apache.commons.logging.LogFac
 
 /**
  * Stack to store the frame information along the invocation trace.
- *
- * @author <a href="mailto:tcurdt@apache.org">Torsten Curdt</a>
- * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
- * @version CVS $Id$
  */
 public class Stack implements Serializable {
 

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/StackRecorder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/StackRecorder.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/StackRecorder.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/StackRecorder.java Sat Jun 26 17:16:23 2010
@@ -24,15 +24,13 @@ import org.apache.commons.logging.LogFac
 /**
  * Adds additional behaviors necessary for stack capture/restore
  * on top of {@link Stack}.
- *
- * @author Kohsuke Kawaguchi
  */
 public final class StackRecorder extends Stack {
 
     private static final Log log = LogFactory.getLog(StackRecorder.class);
     private static final long serialVersionUID = 2L;
 
-    private static final ThreadLocal threadMap = new ThreadLocal();
+    private static final ThreadLocal<StackRecorder> threadMap = new ThreadLocal<StackRecorder>();
 
     /**
      * True, if the continuation restores the previous stack trace to the last
@@ -53,8 +51,10 @@ public final class StackRecorder extends
      */
     public transient boolean isCapturing = false;
 
-    /** Context object given by the user */
+    /** Context object passed by the client code to continuation during resume */
     private transient Object context;
+    /** Result object passed by the continuation to the client code during suspend */
+    public transient Object value;
 
     /**
      * Creates a new empty {@link StackRecorder} that runs the given target.
@@ -70,7 +70,7 @@ public final class StackRecorder extends
         super(pParent);
     }
 
-    public static void suspend() {
+    public static Object suspend(final Object value) {
         log.debug("suspend()");
 
         final StackRecorder stackRecorder = get();
@@ -80,6 +80,12 @@ public final class StackRecorder extends
 
         stackRecorder.isCapturing = !stackRecorder.isRestoring;
         stackRecorder.isRestoring = false;
+        stackRecorder.value = value;
+
+        // flow breaks here, actual return will be executed in resumed continuation
+        // return in continuation to be suspended is executed as well but ignored
+
+        return stackRecorder.context;
     }
 
     public StackRecorder execute(final Object context) {
@@ -89,7 +95,9 @@ public final class StackRecorder extends
             this.context = context;
             
             if (isRestoring) {
-                log.debug("Restoring state of " + ReflectionUtils.getClassName(runnable) + "/" + ReflectionUtils.getClassLoaderName(runnable));
+                if (log.isDebugEnabled()) {
+                    log.debug("Restoring state of " + ReflectionUtils.getClassName(runnable) + "/" + ReflectionUtils.getClassLoaderName(runnable));
+                }
             }
             
             log.debug("calling runnable");
@@ -110,14 +118,14 @@ public final class StackRecorder extends
             } else {
                 return null;    // nothing more to continue
             }
-        } catch(ContinuationDeath cd) {
+        } catch(final ContinuationDeath cd) {
             // this isn't an error, so no need to log
             throw cd;
-        } catch(Error e) {
-            log.error(e.getMessage(),e);
+        } catch(final Error e) {
+            log.error(e.getMessage(), e);
             throw e;
-        } catch(RuntimeException e) {
-            log.error(e.getMessage(),e);
+        } catch(final RuntimeException e) {
+            log.error(e.getMessage(), e);
             throw e;
         } finally {
             this.context = null;
@@ -133,7 +141,7 @@ public final class StackRecorder extends
      * Bind this stack recorder to running thread.
      */
     private StackRecorder registerThread() {
-        StackRecorder old = get();
+        final StackRecorder old = get();
         threadMap.set(this);
         return old;
     }
@@ -149,6 +157,6 @@ public final class StackRecorder extends
      * Return the continuation, which is associated to the current thread.
      */
     public static StackRecorder get() {
-        return (StackRecorder)threadMap.get();
+        return threadMap.get();
     }
 }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/NopResourceTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/NopResourceTransformer.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/NopResourceTransformer.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/NopResourceTransformer.java Sat Jun 26 17:16:23 2010
@@ -23,5 +23,4 @@ public final class NopResourceTransforme
     public byte[] transform( byte[] original ) {
         return original;
     }
-
 }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/ResourceTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/ResourceTransformer.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/ResourceTransformer.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/ResourceTransformer.java Sat Jun 26 17:16:23 2010
@@ -23,10 +23,10 @@ package org.apache.commons.javaflow.byte
  * When {@link Continuation#suspend()} is called, all the methods
  * in the stack frame needs to be enhanced.
  *
- * @author tcurdt
  * @see BcelClassTransformer
  * @see AsmClassTransformer
  */
 public interface ResourceTransformer {
+
     byte[] transform( final byte[] original );
 }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformer.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformer.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformer.java Sat Jun 26 17:16:23 2010
@@ -18,21 +18,22 @@ package org.apache.commons.javaflow.byte
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+import java.lang.reflect.Field;
 
 import org.apache.commons.javaflow.bytecode.transformation.ResourceTransformer;
+
 import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.util.CheckClassAdapter;
+import org.objectweb.asm.util.TraceClassVisitor;
 
-
-/**
- * AsmClassTransformer
- * 
- * @author Eugene Kuleshov
- */
 public final class AsmClassTransformer implements ResourceTransformer {
 
-    public byte[] transform(InputStream is) throws IOException {
+    public byte[] transform(final InputStream is) throws IOException {
         return transform(new ClassReader(is));
     }
 
@@ -40,29 +41,56 @@ public final class AsmClassTransformer i
         return transform(new ClassReader(original));
     }
 
-    private byte[] transform(ClassReader cr) {
+    private byte[] transform(final ClassReader cr) {
         final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-
         // print bytecode before transformation
         // cr.accept(new TraceClassVisitor(new ContinuationClassAdapter(this, cw), new PrintWriter(System.out)), false);
 
-        // prints bytecode after transformation
-        // cr.accept(new ContinuationClassAdapter(this, new TraceClassVisitor(cw, new PrintWriter(System.err))), 0);
-        // cr.accept(new ContinuationClassAdapter(this, new TraceClassVisitor(cw, new PrintWriter(System.err))), false);
-
-        cr.accept(new ContinuationClassAdapter(new CheckClassAdapter(cw)), 0);
+        cr.accept(
+            new ContinuationClassAdapter(
+                decorateClassVisitor(cw, true, null/* System.err */)
+            ), 
+        0);
 
-        byte[] bytecode = cw.toByteArray();
+        final byte[] bytecode = cw.toByteArray();
 
         // CheckClassAdapter.verify(new ClassReader(bytecode), true);
         // new ClassReader(bytecode).accept(new ASMifierClassVisitor(new PrintWriter(System.err)), false);
+        return bytecode;
+    }
 
-        // ClassWriter cww = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
-        // new ClassReader(bytecode).accept(cww, ClassReader.SKIP_DEBUG);
-        // new ClassReader(cww.toByteArray()).accept(new TraceClassVisitor(new PrintWriter(System.err)), 0);
+    private ClassVisitor decorateClassVisitor(ClassVisitor visitor, final boolean check, final PrintStream dumpStream) {
+        if (check) {
+            visitor = new CheckClassAdapter(visitor);
+            if (null != CHECK_DATA_FLOW) {
+                try {
+                    // Currently CheckMethodAdapter throws error, so suppress flow checks
+                    CHECK_DATA_FLOW.set(visitor, Boolean.FALSE);
+                } catch (final IllegalAccessException ex) {
+                    throw new RuntimeException(ex);
+                }
+            }
+        }
+
+        if (null != dumpStream) {
+            visitor = new TraceClassVisitor(visitor, new PrintWriter(dumpStream));
+        }
 
-        return bytecode;
+        return visitor;
     }
 
+    final private static Field CHECK_DATA_FLOW;
+
+    static {
+        Field checkDataFlow = null;
+        try {
+            checkDataFlow = CheckClassAdapter.class.getDeclaredField("checkDataFlow");
+            checkDataFlow.setAccessible(true);
+        } catch (final NoSuchFieldException ex) {
+            // Normal, the field is available only since ASM 3.2
+        }
+
+        CHECK_DATA_FLOW = checkDataFlow;
+    }
 }
 

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationClassAdapter.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationClassAdapter.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationClassAdapter.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationClassAdapter.java Sat Jun 26 17:16:23 2010
@@ -20,13 +20,8 @@ import org.objectweb.asm.ClassAdapter;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.MethodVisitor;
 
+public final class ContinuationClassAdapter extends ClassAdapter {
 
-/**
- * ContinuationClassAdapter
- * 
- * @author Evgueni Koulechov
- */
-public class ContinuationClassAdapter extends ClassAdapter {
     private String className;
 
     public ContinuationClassAdapter(ClassVisitor cv) {

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAdapter.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAdapter.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAdapter.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAdapter.java Sat Jun 26 17:16:23 2010
@@ -30,6 +30,7 @@ import org.objectweb.asm.tree.analysis.B
 import org.objectweb.asm.tree.analysis.Frame;
 
 public final class ContinuationMethodAdapter extends MethodAdapter implements Opcodes {
+
     private static final String STACK_RECORDER = Type.getInternalName(StackRecorder.class);
     private static final String POP_METHOD = "pop";
     private static final String PUSH_METHOD = "push";
@@ -37,8 +38,8 @@ public final class ContinuationMethodAda
     private final ContinuationMethodAnalyzer canalyzer;
     private final Analyzer analyzer;
     private Label startLabel = new Label();
-    private final List labels;
-    private final List nodes;
+    private final List<Label> labels;
+    private final List<MethodInsnNode> nodes;
     private final int stackRecorderVar;
     private final boolean isStatic;
     private final String methodDesc;
@@ -130,9 +131,9 @@ public final class ContinuationMethodAda
 
             if (frame instanceof MonitoringFrame) {
                 int[] monitoredLocals = ((MonitoringFrame) frame).getMonitored();
-                System.out.println(System.identityHashCode(frame)+" AMonitored locals "+monitoredLocals.length);
+                // System.out.println(System.identityHashCode(frame)+" AMonitored locals "+monitoredLocals.length);
                 for (int j = 0; j < monitoredLocals.length; j++) {
-                    System.out.println(System.identityHashCode(frame)+" AMonitored local "+monitoredLocals[j]);
+                    // System.out.println(System.identityHashCode(frame)+" AMonitored local "+monitoredLocals[j]);
                     mv.visitVarInsn(ALOAD, monitoredLocals[j]);
                     mv.visitInsn(MONITORENTER);
                 }
@@ -280,9 +281,9 @@ public final class ContinuationMethodAda
 
             if (currentFrame instanceof MonitoringFrame) {
                 int[] monitoredLocals = ((MonitoringFrame) currentFrame).getMonitored();
-                System.out.println(System.identityHashCode(currentFrame)+" Monitored locals "+monitoredLocals.length);
+                // System.out.println(System.identityHashCode(currentFrame)+" Monitored locals "+monitoredLocals.length);
                 for (int j = 0; j < monitoredLocals.length; j++) {
-                    System.out.println(System.identityHashCode(currentFrame)+" Monitored local "+monitoredLocals[j]);
+                    // System.out.println(System.identityHashCode(currentFrame)+" Monitored local "+monitoredLocals[j]);
                     mv.visitVarInsn(ALOAD, monitoredLocals[j]);
                     mv.visitInsn(MONITOREXIT);
                 }

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java Sat Jun 26 17:16:23 2010
@@ -18,7 +18,6 @@ package org.apache.commons.javaflow.byte
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -42,18 +41,18 @@ import org.objectweb.asm.tree.analysis.S
 import org.objectweb.asm.tree.analysis.SourceValue;
 
 public class ContinuationMethodAnalyzer extends MethodNode implements Opcodes {
+
     protected final String className;
     protected final ClassVisitor cv;
     protected final MethodVisitor mv;
 
-    protected final List labels = new ArrayList();
-    protected final List nodes = new ArrayList();
-    protected final List methods = new ArrayList();
+    protected final List<Label> labels = new ArrayList<Label>();
+    protected final List<MethodInsnNode> nodes = new ArrayList<MethodInsnNode>();
+    protected final List<MethodInsnNode> methods = new ArrayList<MethodInsnNode>();
 
     protected Analyzer analyzer;
     public int stackRecorderVar;
 
-
     public ContinuationMethodAnalyzer(String className, ClassVisitor cv, MethodVisitor mv, int access, String name, String desc, String signature, String[] exceptions) {
         super(access, name, desc, signature, exceptions);
         this.className = className;
@@ -62,9 +61,9 @@ public class ContinuationMethodAnalyzer 
     }
 
     public int getIndex(AbstractInsnNode node) {
-    	return instructions.indexOf(node);
+        return instructions.indexOf(node);
     }
-    
+
     public void visitMethodInsn(int opcode, String owner, String name, String desc) {
         MethodInsnNode mnode = new MethodInsnNode(opcode, owner, name, desc);
         if (opcode == INVOKESPECIAL || "<init>".equals(name)) {
@@ -85,17 +84,17 @@ public class ContinuationMethodAnalyzer 
             return;
         }
 
-/*
-{
-          TraceMethodVisitor mv = new TraceMethodVisitor();
-          System.err.println(name + desc);
-          for (int j = 0; j < instructions.size(); ++j) {
-              ((AbstractInsnNode) instructions.get(j)).accept(mv);
-              System.err.print("   " + mv.text.get(j)); // mv.text.get(j));
-          }
-          System.err.println();
-}
-*/
+        /*
+        {
+                  TraceMethodVisitor mv = new TraceMethodVisitor();
+                  System.err.println(name + desc);
+                  for (int j = 0; j < instructions.size(); ++j) {
+                      ((AbstractInsnNode) instructions.get(j)).accept(mv);
+                      System.err.print("   " + mv.text.get(j)); // mv.text.get(j));
+                  }
+                  System.err.println();
+        }
+        */
 
         this.stackRecorderVar = maxLocals;
         try {
@@ -103,7 +102,8 @@ public class ContinuationMethodAnalyzer 
 
             // analyzer = new Analyzer(new BasicVerifier());
             analyzer = new Analyzer(new SimpleVerifier() {
-                protected Class getClass(Type t) {
+
+                protected Class<?> getClass(Type t) {
                     try {
                         if (t.getSort() == Type.ARRAY) {
                             return Class.forName(t.getDescriptor().replace('/', '.'), true, Thread.currentThread().getContextClassLoader());
@@ -115,7 +115,6 @@ public class ContinuationMethodAnalyzer 
                 }
             }) {
 
-
                 protected Frame newFrame(final int nLocals, final int nStack) {
                     return new MonitoringFrame(nLocals, nStack);
                 }
@@ -124,36 +123,35 @@ public class ContinuationMethodAnalyzer 
                     return new MonitoringFrame(src);
                 }
 
-                public Frame[] analyze(String owner, MethodNode m) throws AnalyzerException {
-                    //System.out.println("Analyze: "+owner+"|"+m.name+"|"+m.signature+"|"+m.tryCatchBlocks);
-                    Frame[] framesa = super.analyze(owner, m);
+                public Frame[] analyze(final String owner, final MethodNode m) throws AnalyzerException {
+                    // System.out.println("Analyze: "+owner+"|"+m.name+"|"+m.signature+"|"+m.tryCatchBlocks);
+                    final Frame[] frames = super.analyze(owner, m);
                     for (int i = 0; i < m.instructions.size(); i++) {
-                        int opcode = ((AbstractInsnNode) m.instructions.get(i)).getOpcode();
+                        int opcode = m.instructions.get(i).getOpcode();
                         if (opcode == MONITORENTER || opcode == MONITOREXIT) {
-                            //System.out.println(i);
+                            // System.out.println(i);
                         }
-                        
                     }
-                    return framesa;
+                    return frames;
                 }
             };
 
             analyzer.analyze(className, this);
             accept(new ContinuationMethodAdapter(this));
 
-/*
-{
-          TraceMethodVisitor mv = new TraceMethodVisitor();
-          System.err.println("=================");
-
-          System.err.println(name + desc);
-          for (int j = 0; j < instructions.size(); ++j) {
-              ((AbstractInsnNode) instructions.get(j)).accept(mv);
-              System.err.print("   " + mv.text.get(j)); // mv.text.get(j));
-          }
-          System.err.println();
-}
-*/
+            /*
+            {
+                      TraceMethodVisitor mv = new TraceMethodVisitor();
+                      System.err.println("=================");
+
+                      System.err.println(name + desc);
+                      for (int j = 0; j < instructions.size(); ++j) {
+                          ((AbstractInsnNode) instructions.get(j)).accept(mv);
+                          System.err.print("   " + mv.text.get(j)); // mv.text.get(j));
+                      }
+                      System.err.println();
+            }
+            */
 
         } catch (AnalyzerException ex) {
             // TODO log the error or fail?
@@ -163,38 +161,38 @@ public class ContinuationMethodAnalyzer 
         }
     }
 
+    @SuppressWarnings("unchecked")
     void moveNew() throws AnalyzerException {
         SourceInterpreter i = new SourceInterpreter();
         Analyzer a = new Analyzer(i);
         a.analyze(className, this);
 
-        HashMap movable = new HashMap();
+        final HashMap<AbstractInsnNode, MethodInsnNode> movable = new HashMap<AbstractInsnNode, MethodInsnNode>();
 
         Frame[] frames = a.getFrames();
         for (int j = 0; j < methods.size(); j++) {
-            MethodInsnNode mnode = (MethodInsnNode) methods.get(j);
+            MethodInsnNode mnode = methods.get(j);
             // require to move NEW instruction
             int n = instructions.indexOf(mnode);
             Frame f = frames[n];
             Type[] args = Type.getArgumentTypes(mnode.desc);
 
             SourceValue v = (SourceValue) f.getStack(f.getStackSize() - args.length - 1);
-            Set insns = v.insns;
-            for (Iterator it = insns.iterator(); it.hasNext();) {
-                AbstractInsnNode ins = (AbstractInsnNode) it.next();
+            Set<AbstractInsnNode> insns = v.insns;
+            for (final AbstractInsnNode ins : insns) {
                 if (ins.getOpcode() == NEW) {
                     movable.put(ins, mnode);
                 } else {
                     // other known patterns
                     int n1 = instructions.indexOf(ins);
                     if (ins.getOpcode() == DUP) { // <init> with params
-                        AbstractInsnNode ins1 = (AbstractInsnNode) instructions.get(n1 - 1);
+                        AbstractInsnNode ins1 = instructions.get(n1 - 1);
                         if (ins1.getOpcode() == NEW) {
                             movable.put(ins1, mnode);
                         }
-                    } else if (ins.getOpcode() == SWAP) {  // in exception handler
-                        AbstractInsnNode ins1 = (AbstractInsnNode) instructions.get(n1 - 1);
-                        AbstractInsnNode ins2 = (AbstractInsnNode) instructions.get(n1 - 2);
+                    } else if (ins.getOpcode() == SWAP) { // in exception handler
+                        AbstractInsnNode ins1 = instructions.get(n1 - 1);
+                        AbstractInsnNode ins2 = instructions.get(n1 - 2);
                         if (ins1.getOpcode() == DUP_X1 && ins2.getOpcode() == NEW) {
                             movable.put(ins2, mnode);
                         }
@@ -204,33 +202,30 @@ public class ContinuationMethodAnalyzer 
         }
 
         int updateMaxStack = 0;
-        for (Iterator it = movable.entrySet().iterator(); it.hasNext();) {
-            Map.Entry e = (Map.Entry) it.next();
-            AbstractInsnNode node1 = (AbstractInsnNode) e.getKey();
+        for (final Map.Entry<AbstractInsnNode, MethodInsnNode> e : movable.entrySet()) {
+            AbstractInsnNode node1 = e.getKey();
             int n1 = instructions.indexOf(node1);
-            AbstractInsnNode node2 = (AbstractInsnNode) instructions.get(n1 + 1);
-            AbstractInsnNode node3 = (AbstractInsnNode) instructions.get(n1 + 2);
+            AbstractInsnNode node2 = instructions.get(n1 + 1);
+            AbstractInsnNode node3 = instructions.get(n1 + 2);
             int producer = node2.getOpcode();
 
-            instructions.remove(node1);  // NEW
+            instructions.remove(node1); // NEW
             boolean requireDup = false;
             if (producer == DUP) {
-                instructions.remove(node2);  // DUP
+                instructions.remove(node2); // DUP
                 requireDup = true;
             } else if (producer == DUP_X1) {
-                instructions.remove(node2);  // DUP_X1
-                instructions.remove(node3);  // SWAP
+                instructions.remove(node2); // DUP_X1
+                instructions.remove(node3); // SWAP
                 requireDup = true;
             }
 
             MethodInsnNode mnode = (MethodInsnNode) e.getValue();
             AbstractInsnNode nm = mnode;
-            AbstractInsnNode next;
 
             int varOffset = stackRecorderVar + 1;
             Type[] args = Type.getArgumentTypes(mnode.desc);
 
-           
             // optimizations for some common cases
             if (args.length == 0) {
                 final InsnList doNew = new InsnList();
@@ -238,31 +233,29 @@ public class ContinuationMethodAnalyzer 
                 if (requireDup)
                     doNew.add(new InsnNode(DUP));
                 instructions.insertBefore(nm, doNew);
-                nm = doNew.getLast();  
+                nm = doNew.getLast();
                 continue;
             }
 
             if (args.length == 1 && args[0].getSize() == 1) {
                 final InsnList doNew = new InsnList();
-            	doNew.add(node1); // NEW
+                doNew.add(node1); // NEW
                 if (requireDup) {
                     doNew.add(new InsnNode(DUP));
                     doNew.add(new InsnNode(DUP2_X1));
                     doNew.add(new InsnNode(POP2));
                     updateMaxStack = updateMaxStack < 2 ? 2 : updateMaxStack; // a two extra slots for temp values
-                } else 
+                } else
                     doNew.add(new InsnNode(SWAP));
                 instructions.insertBefore(nm, doNew);
-                nm = doNew.getLast();    
+                nm = doNew.getLast();
                 continue;
             }
 
-
             // TODO this one untested!
-            if ((args.length == 1 && args[0].getSize() == 2) ||
-                (args.length == 2 && args[0].getSize() == 1 && args[1].getSize() == 1)) {
+            if ((args.length == 1 && args[0].getSize() == 2) || (args.length == 2 && args[0].getSize() == 1 && args[1].getSize() == 1)) {
                 final InsnList doNew = new InsnList();
-            	doNew.add(node1); // NEW
+                doNew.add(node1); // NEW
                 if (requireDup) {
                     doNew.add(new InsnNode(DUP));
                     doNew.add(new InsnNode(DUP2_X2));
@@ -274,10 +267,10 @@ public class ContinuationMethodAnalyzer 
                     updateMaxStack = updateMaxStack < 1 ? 1 : updateMaxStack; // an extra slot for temp value
                 }
                 instructions.insertBefore(nm, doNew);
-                nm = doNew.getLast();    
+                nm = doNew.getLast();
                 continue;
             }
-            
+
             final InsnList doNew = new InsnList();
             // generic code using temporary locals
             // save stack
@@ -294,7 +287,7 @@ public class ContinuationMethodAnalyzer 
             doNew.add(node1); // NEW
 
             if (requireDup)
-            	doNew.add(new InsnNode(DUP));
+                doNew.add(new InsnNode(DUP));
 
             // restore stack
             for (int j = 0; j < args.length; j++) {
@@ -313,18 +306,22 @@ public class ContinuationMethodAnalyzer 
                 }
             }
             instructions.insertBefore(nm, doNew);
-            nm = doNew.getLast(); 
+            nm = doNew.getLast();
         }
 
         maxStack += updateMaxStack;
     }
 
-    // TODO
     boolean needsFrameGuard(int opcode, String owner, String name, String desc) {
-        if (opcode == Opcodes.INVOKEINTERFACE ||
-            (opcode == Opcodes.INVOKESPECIAL && !"<init>".equals(name)) ||
-            opcode == Opcodes.INVOKESTATIC ||
-            opcode == Opcodes.INVOKEVIRTUAL) {
+        /* TODO: need to customize a way enchancer skips classes/methods
+            if (owner.startsWith("java/")) {
+            	System.out.println("SKIP:: " + owner + "." + name + desc);
+            	return false;
+            }
+        */
+
+        if (opcode == Opcodes.INVOKEINTERFACE || (opcode == Opcodes.INVOKESPECIAL && !"<init>".equals(name)) || opcode == Opcodes.INVOKESTATIC
+                || opcode == Opcodes.INVOKEVIRTUAL) {
             return true;
         }
         return false;

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/MonitoringFrame.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/MonitoringFrame.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/MonitoringFrame.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/asm/MonitoringFrame.java Sat Jun 26 17:16:23 2010
@@ -26,10 +26,10 @@ import org.objectweb.asm.tree.analysis.V
 import java.util.LinkedList;
 import java.util.List;
 
-public class MonitoringFrame extends Frame {
+public final class MonitoringFrame extends Frame {
     
     // keeps track of monitored locals
-    private List monitored;
+    private List<Integer> monitored;
 
     public MonitoringFrame(Frame arg0) {
         super(arg0);
@@ -37,16 +37,18 @@ public class MonitoringFrame extends Fra
 
     public MonitoringFrame(int arg0, int arg1) {
         super(arg0, arg1);
-        monitored = new LinkedList();
+        monitored = new LinkedList<Integer>();
     }
 
     public void execute(AbstractInsnNode insn, Interpreter interpreter)
             throws AnalyzerException {
         
-        if (false) {
+    	boolean never = false;
+        if (never) {
             super.execute(insn, interpreter);
             return;
         }
+
         int insnOpcode = insn.getOpcode();
         
         if (insnOpcode == Opcodes.MONITORENTER || insnOpcode == Opcodes.MONITOREXIT) {
@@ -71,12 +73,12 @@ public class MonitoringFrame extends Fra
         }
     }
 
-    public Frame init(Frame arg0) {
-        super.init(arg0);
-        if (arg0 instanceof MonitoringFrame) {
-            monitored = new LinkedList(((MonitoringFrame)arg0).monitored);
+    public Frame init(Frame frame) {
+        super.init(frame);
+        if (frame instanceof MonitoringFrame) {
+            monitored = new LinkedList<Integer>(MonitoringFrame.class.cast(frame).monitored);
         } else {
-            monitored = new LinkedList();
+            monitored = new LinkedList<Integer>();
         }
         return this;
     }
@@ -84,7 +86,7 @@ public class MonitoringFrame extends Fra
     public int[] getMonitored() {
         int[] res = new int[monitored.size()];
         for (int i = 0; i < monitored.size(); i++) {
-            res[i] = ((Integer) monitored.get(i)).intValue();
+            res[i] = monitored.get(i);
         }
         return res;
     }
@@ -94,7 +96,7 @@ public class MonitoringFrame extends Fra
     }
     
     public void monitorExit(int local) {
-        int index = monitored.lastIndexOf(new Integer(local));
+        int index = monitored.lastIndexOf(local);
         if (index == -1) {
             // throw new IllegalStateException("Monitor Exit never entered");
         } else {

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java Sat Jun 26 17:16:23 2010
@@ -74,13 +74,12 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Vector;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * {@link ResourceTransformer} that uses BCEL.
  *
- * @author tcurdt
- * @author Kohsuke Kawaguchi
  * @deprecated use the AsmClassTransformer instead
  */
 public final class BcelClassTransformer implements ResourceTransformer {
@@ -312,10 +311,10 @@ public final class BcelClassTransformer 
     private void analyse(ClassGen clazz, MethodGen method, ControlFlowGraph cfg, ExecutionVisitor ev) {
         log.debug("analyse " + method.getName());
 
-        final Frame vanillaFrame = craeteInitialFrame(method, clazz);
+        final Frame vanillaFrame = createInitialFrame(method, clazz);
 
-        final Vector ics = new Vector(); // Type: InstructionContext
-        final Vector ecs = new Vector(); // Type: ExecutionPath
+        final List<InstructionContext> ics = new ArrayList<InstructionContext>(); // Type: InstructionContext
+        final List<ExecutionPath> ecs = new ArrayList<ExecutionPath>(); // Type: ExecutionPath
 
         final InstructionContext start = cfg.contextOf(method.getInstructionList().getStart());
 
@@ -326,8 +325,8 @@ public final class BcelClassTransformer 
         ecs.add(ExecutionPath.EMPTY);
 
         while (!ics.isEmpty()) {
-            final InstructionContext u = (InstructionContext) ics.remove(0);
-            final ExecutionPath oldchain = (ExecutionPath) ecs.remove(0);
+            final InstructionContext u = ics.remove(0);
+            final ExecutionPath oldchain = ecs.remove(0);
             final ExecutionPath newchain = oldchain.append(u);
 
             if ((u.getInstruction().getInstruction()) instanceof RET) {
@@ -383,7 +382,7 @@ public final class BcelClassTransformer 
      * Creates a {@link Frame} object that represents the state of the stack frame
      * at the beginning of a method.
      */
-    private Frame craeteInitialFrame(MethodGen method, ClassGen clazz) {
+    private Frame createInitialFrame(MethodGen method, ClassGen clazz) {
         final Frame vanillaFrame = new Frame(method.getMaxLocals(), method.getMaxStack());
         if (!method.isStatic()) {
             if (method.getName().equals(Constants.CONSTRUCTOR_NAME)) {
@@ -413,7 +412,7 @@ public final class BcelClassTransformer 
 
     private void rewrite(MethodGen method, ControlFlowGraph cfg) throws ClassNotFoundException {
         final InstructionFactory insFactory = new InstructionFactory(method.getConstantPool());
-        final Vector invokeIns = new Vector();
+        final List<InstructionHandle> invokeIns = new ArrayList<InstructionHandle>();
         final InstructionList insList = method.getInstructionList();
         InstructionHandle ins = insList.getStart();
         final InstructionList restorer = new InstructionList();
@@ -449,7 +448,7 @@ public final class BcelClassTransformer 
                     }
                     final InstructionList rList = restoreFrame(method, ins, insFactory, frame, objecttype);
                     insList.append(ins, saveFrame(method, ins, count++, insFactory, frame));
-                    invokeIns.addElement(rList.getStart());
+                    invokeIns.add(rList.getStart());
                     restorer.append(rList);
                 }
                 // remove all new's
@@ -465,7 +464,7 @@ public final class BcelClassTransformer 
                         }
                         // if there are any dup_x2 following new and dup, replace them with dup.
                         // some java compiler generates such bytecode for code like
-                        //  someObject.someStringField += "abc"
+                        //   someObject.someStringField += "abc"
                         //
                         // which yield
                         //   NEW StringBuffer
@@ -480,7 +479,7 @@ public final class BcelClassTransformer 
                         //   PUTFIELD someStringField
                         //
                         // replacing this DUP_x2 -> DUP is required for moving the new.
-                        if(next!=null && next.getNext()!=null && next.getNext().getInstruction().getOpcode() == Constants.DUP_X2) {
+                        if (next != null && next.getNext() != null && next.getNext().getInstruction().getOpcode() == Constants.DUP_X2) {
                             InstructionHandle dupx2ptr = next.getNext();
                             final InstructionHandle newnext = dupx2ptr.getNext();
                             insList.insert(dupx2ptr, InstructionConstants.DUP);
@@ -532,12 +531,12 @@ public final class BcelClassTransformer 
 
         final InstructionHandle firstIns = insList.getStart();
         if (count > 0) {
-            final InstructionHandle[] tableTargets = new InstructionHandle[count];
             int[] match = new int[count];
             for (int i = 0; i < count; i++) {
                 match[i] = i;
             }
-            invokeIns.copyInto(tableTargets);
+            InstructionHandle[] tableTargets = new InstructionHandle[count];
+            tableTargets = invokeIns.toArray(tableTargets);
             insList.insert(restorer);
 
             // select frame restorer

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/DecompilingVisitor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/DecompilingVisitor.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/DecompilingVisitor.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/DecompilingVisitor.java Sat Jun 26 17:16:23 2010
@@ -42,7 +42,8 @@ import org.apache.bcel.generic.Select;
 import org.apache.bcel.generic.TABLESWITCH;
 
 public final class DecompilingVisitor extends org.apache.bcel.classfile.EmptyVisitor {
-	private JavaClass clazz;
+
+    private JavaClass clazz;
 	private PrintWriter out;
 	private String clazzname;
 	private ConstantPoolGen cp;

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ControlFlowGraph.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ControlFlowGraph.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ControlFlowGraph.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ControlFlowGraph.java Sat Jun 26 17:16:23 2010
@@ -17,7 +17,7 @@
 package org.apache.commons.javaflow.bytecode.transformation.bcel.analyser;
 
 import java.util.HashMap;
-import java.util.Hashtable;
+import java.util.Map;
 
 import org.apache.bcel.generic.ATHROW;
 import org.apache.bcel.generic.BranchInstruction;
@@ -38,8 +38,6 @@ import org.apache.bcel.verifier.exc.Stru
  * 
  * WARNING! These classes are a fork of the bcel verifier. 
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 public class ControlFlowGraph {
 
@@ -57,12 +55,12 @@ public class ControlFlowGraph {
 		/**
 		 * The 'incoming' execution Frames.
 		 */
-		private HashMap inFrames;	// key: the last-executed JSR
+		private Map<InstructionContext, Frame> inFrames;	// key: the last-executed JSR
 
 		/**
 		 * The 'outgoing' execution Frames.
 		 */
-		private HashMap outFrames; // key: the last-executed JSR 
+		private Map<InstructionContext, Frame> outFrames; // key: the last-executed JSR 
 
 		/**
 		 * The 'execution predecessors' - a list of {@link InstructionContext}
@@ -78,8 +76,8 @@ public class ControlFlowGraph {
 			if (inst == null) throw new AssertionViolatedException("Cannot instantiate InstructionContextImpl from NULL.");
 		
 			instruction = inst;
-			inFrames = new java.util.HashMap();
-			outFrames = new java.util.HashMap();
+			inFrames = new java.util.HashMap<InstructionContext, Frame>();
+			outFrames = new java.util.HashMap<InstructionContext, Frame>();
 		}
 
 		/**
@@ -200,7 +198,7 @@ public class ControlFlowGraph {
 		 */
 		private boolean mergeInFrames(Frame inFrame){
 			// TODO: Can be performance-improved.
-			Frame inF = (Frame) inFrames.get(lastExecutionJSR());
+			Frame inF = inFrames.get(lastExecutionJSR());
 			OperandStack oldstack = inF.getStack().getClone();
 			LocalVariables oldlocals = inF.getLocals().getClone();
 			try{
@@ -211,8 +209,8 @@ public class ControlFlowGraph {
 				extendMessageWithFlow(sce);
 				throw sce;
 			}
-			if (	oldstack.equals(inF.getStack()) &&
-						oldlocals.equals(inF.getLocals()) ){
+			if (oldstack.equals(inF.getStack()) &&
+				oldlocals.equals(inF.getLocals()) ){
 				return false;
 			}
 			else{
@@ -340,7 +338,7 @@ throw new AssertionViolatedException("DI
 	private final ExceptionHandlers exceptionhandlers;
 
 	/** All InstructionContext instances of this ControlFlowGraph. */
-	private Hashtable instructionContexts = new Hashtable(); //keys: InstructionHandle, values: InstructionContextImpl
+	private Map<InstructionHandle, InstructionContext> instructionContexts = new HashMap<InstructionHandle, InstructionContext>(); //keys: InstructionHandle, values: InstructionContextImpl
 
 	/** 
 	 * A Control Flow Graph.
@@ -349,9 +347,9 @@ throw new AssertionViolatedException("DI
 		subroutines = new Subroutines(method_gen);
 		exceptionhandlers = new ExceptionHandlers(method_gen);
 
-		InstructionHandle[] instructionhandles = method_gen.getInstructionList().getInstructionHandles();
-		for (int i=0; i<instructionhandles.length; i++){
-			instructionContexts.put(instructionhandles[i], new InstructionContextImpl(instructionhandles[i]));
+		final InstructionHandle[] instructionhandles = method_gen.getInstructionList().getInstructionHandles();
+		for (final InstructionHandle instructionhandle : instructionhandles){
+			instructionContexts.put(instructionhandle, new InstructionContextImpl(instructionhandle));
 		}
 	}
 
@@ -372,7 +370,7 @@ throw new AssertionViolatedException("DI
 	 */
 	public InstructionContext[] contextsOf(InstructionHandle[] insts){
 		InstructionContext[] ret = new InstructionContext[insts.length];
-		for (int i=0; i<insts.length; i++){
+		for (int i = 0; i < insts.length; i++) {
 			ret[i] = contextOf(insts[i]);
 		}
 		return ret;
@@ -385,7 +383,7 @@ throw new AssertionViolatedException("DI
 	 */
 	public InstructionContext[] getInstructionContexts(){
 		InstructionContext[] ret = new InstructionContext[instructionContexts.values().size()];
-		return (InstructionContext[]) instructionContexts.values().toArray(ret);
+		return instructionContexts.values().toArray(ret);
 	}
 
 	/**

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandler.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandler.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandler.java Sat Jun 26 17:16:23 2010
@@ -25,8 +25,6 @@ import org.apache.bcel.generic.*;
  * 
  * WARNING! These classes are a fork of the bcel verifier. 
  * 
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 public class ExceptionHandler{
 	/** The type of the exception to catch. NULL means ANY. */

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandlers.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandlers.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandlers.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExceptionHandlers.java Sat Jun 26 17:16:23 2010
@@ -17,37 +17,36 @@
 package org.apache.commons.javaflow.bytecode.transformation.bcel.analyser;
 
 import org.apache.bcel.generic.*;
+
+import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.Set;
 
 /**
  * This class allows easy access to ExceptionHandler objects.
  * 
  * WARNING! These classes are a fork of the bcel verifier.
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 public class ExceptionHandlers{
 	/**
 	 * The ExceptionHandler instances.
 	 * Key: InstructionHandle objects, Values: HashSet<ExceptionHandler> instances.
 	 */
-	private Hashtable exceptionhandlers;
+	private HashMap<InstructionHandle, Set<ExceptionHandler>> exceptionhandlers;
 	 
 	/**
 	 * Constructor. Creates a new ExceptionHandlers instance.
 	 */
 	public ExceptionHandlers(MethodGen mg){
-		exceptionhandlers = new Hashtable();
+		exceptionhandlers = new HashMap<InstructionHandle, Set<ExceptionHandler>>();
 		CodeExceptionGen[] cegs = mg.getExceptionHandlers();
-		for (int i=0; i<cegs.length; i++){
-			ExceptionHandler eh = new ExceptionHandler(cegs[i].getCatchType(), cegs[i].getHandlerPC());
-			for (InstructionHandle ih=cegs[i].getStartPC(); ih != cegs[i].getEndPC().getNext(); ih=ih.getNext()){
-				HashSet hs;
-				hs = (HashSet) exceptionhandlers.get(ih);
+		for (final CodeExceptionGen ceg : cegs) {
+			final ExceptionHandler eh = new ExceptionHandler(ceg.getCatchType(), ceg.getHandlerPC());
+			for (InstructionHandle ih = ceg.getStartPC(); ih != ceg.getEndPC().getNext(); ih = ih.getNext()) {
+				Set<ExceptionHandler> hs = exceptionhandlers.get(ih);
 				if (hs == null){
-					hs = new HashSet();
+					hs = new HashSet<ExceptionHandler>();
 					exceptionhandlers.put(ih, hs);
 				}
 				hs.add(eh);
@@ -60,11 +59,11 @@ public class ExceptionHandlers{
 	 * handlers that protect the instruction ih.
 	 */
 	public ExceptionHandler[] getExceptionHandlers(InstructionHandle ih){
-		HashSet hs = (HashSet) exceptionhandlers.get(ih);
+		Set<ExceptionHandler> hs = exceptionhandlers.get(ih);
 		if (hs == null) return new ExceptionHandler[0];
-		else{
+		else {
 			ExceptionHandler[] ret = new ExceptionHandler[hs.size()];
-			return (ExceptionHandler[]) (hs.toArray(ret));
+			return hs.toArray(ret);
 		}
 	}
 

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionPath.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionPath.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionPath.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionPath.java Sat Jun 26 17:16:23 2010
@@ -12,7 +12,6 @@ import org.apache.bcel.generic.JsrInstru
  * The sequence is represented in left-associative style; that is,
  * a sequence of [a,b,c,d] is represented as prev=[a,b,c] and last=d.
  *
- * @author Kohsuke Kawaguchi
  */
 public final class ExecutionPath {
     /**

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionVisitor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionVisitor.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionVisitor.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/ExecutionVisitor.java Sat Jun 26 17:16:23 2010
@@ -51,8 +51,6 @@ import org.apache.bcel.generic.*;
  * 
  * WARNING! These classes are a fork of the bcel verifier.
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  * @see #visitDSTORE(DSTORE o)
  * @see org.apache.bcel.verifier.structurals.InstConstraintVisitor
  */

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Frame.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Frame.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Frame.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Frame.java Sat Jun 26 17:16:23 2010
@@ -28,8 +28,6 @@ import org.apache.bcel.verifier.exc.Asse
  * 
  * WARNING! These classes are a fork of the bcel verifier.
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 
 public class Frame{

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/InstructionContext.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/InstructionContext.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/InstructionContext.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/InstructionContext.java Sat Jun 26 17:16:23 2010
@@ -25,8 +25,6 @@ import org.apache.bcel.generic.Instructi
  * to information like control flow successors and
  * such.
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 public interface InstructionContext{
 

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/LocalVariables.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/LocalVariables.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/LocalVariables.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/LocalVariables.java Sat Jun 26 17:16:23 2010
@@ -27,8 +27,6 @@ import java.util.Arrays;
  * 
  * WARNING! These classes are a fork of the bcel verifier.
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 public class LocalVariables{
     /** The Type[] containing the local variable slots. */

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/OperandStack.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/OperandStack.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/OperandStack.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/OperandStack.java Sat Jun 26 17:16:23 2010
@@ -27,13 +27,11 @@ import java.util.*;
  * 
  * WARNING! These classes are a fork of the bcel verifier.
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 public class OperandStack{
 
 	/** We hold the stack information here. */
-	private ArrayList stack = new ArrayList();
+	private ArrayList<Type> stack = new ArrayList<Type>();
 
 	/** The maximum number of stack slots this OperandStack instance may hold. */
 	private int maxStack;
@@ -60,7 +58,11 @@ public class OperandStack{
 	 */
 	protected Object clone(){
 		OperandStack newstack = new OperandStack(this.maxStack);
-		newstack.stack = (ArrayList) this.stack.clone();
+		
+		@SuppressWarnings("unchecked")
+		final ArrayList<Type> cloned = (ArrayList<Type>)stack.clone();
+		
+		newstack.stack = cloned;
 		return newstack;
 	}
 
@@ -68,7 +70,7 @@ public class OperandStack{
 	 * Clears the stack.
 	 */
 	public void clear(){
-		stack = new ArrayList();
+		stack = new ArrayList<Type>();
 	}
 
 	/**

Modified: commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Subroutine.java
URL: http://svn.apache.org/viewvc/commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Subroutine.java?rev=958247&r1=958246&r2=958247&view=diff
==============================================================================
--- commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Subroutine.java (original)
+++ commons/sandbox/javaflow/trunk/src/main/java/org/apache/commons/javaflow/bytecode/transformation/bcel/analyser/Subroutine.java Sat Jun 26 17:16:23 2010
@@ -25,8 +25,6 @@ import org.apache.bcel.generic.*;
  * 
  * WARNING! These classes are a fork of the bcel verifier.
  *
- * @version $Id$
- * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
  */
 public interface Subroutine{
 	/**