You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by tc...@apache.org on 2005/12/25 05:10:28 UTC
svn commit: r358963 [2/2] - in /jakarta/commons/sandbox/javaflow/trunk: ./
lib/ src/java/org/apache/commons/javaflow/
src/java/org/apache/commons/javaflow/ant/
src/java/org/apache/commons/javaflow/bytecode/
src/java/org/apache/commons/javaflow/bytecode...
Added: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,191 @@
+/*
+ * 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.transformation.asm;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.InsnNode;
+import org.objectweb.asm.tree.MethodInsnNode;
+import org.objectweb.asm.tree.MethodNode;
+import org.objectweb.asm.tree.VarInsnNode;
+import org.objectweb.asm.tree.analysis.Analyzer;
+import org.objectweb.asm.tree.analysis.AnalyzerException;
+import org.objectweb.asm.tree.analysis.DataflowInterpreter;
+import org.objectweb.asm.tree.analysis.DataflowValue;
+import org.objectweb.asm.tree.analysis.Frame;
+import org.objectweb.asm.tree.analysis.SimpleVerifier;
+
+
+/**
+ * ContinuationMethodAdapter
+ *
+ * @author Evgueni Koulechov
+ */
+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 Analyzer analyzer;
+
+
+ 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;
+ this.cv = cv;
+ this.mv = mv;
+ }
+
+ 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)) {
+ methods.add(mnode);
+ }
+ if (needsFrameGuard(opcode, owner, name, desc) /* && transformer.inScope(owner, name)*/) {
+ Label label = new Label();
+ super.visitLabel(label);
+ labels.add(label);
+ nodes.add(mnode);
+ }
+ instructions.add(mnode);
+ }
+
+ public void visitEnd() {
+ if(instructions.size()==0 || labels.size()==0) {
+ accept(mv);
+ return;
+ }
+
+ try {
+ moveNew();
+
+ analyzer = new Analyzer(new SimpleVerifier());
+ analyzer.analyze(className, this);
+ accept(new ContinuationMethodAdapter(this));
+
+ } catch(AnalyzerException ex) {
+ // TODO log the error or fail?
+ ex.printStackTrace();
+ accept(mv);
+
+ }
+ }
+
+ void moveNew() throws AnalyzerException {
+ DataflowInterpreter i = new DataflowInterpreter();
+ Analyzer a = new Analyzer(i);
+ a.analyze(className, this);
+
+ HashMap movable = new HashMap();
+
+ Frame[] frames = a.getFrames();
+ for( int j = 0; j < methods.size(); j++) {
+ MethodInsnNode mnode = (MethodInsnNode) methods.get(j);
+ // require to move NEW instruction
+ int n = a.getIndex(mnode);
+ Frame f = frames[n];
+ Type[] args = Type.getArgumentTypes(mnode.desc);
+
+ DataflowValue v = (DataflowValue) f.getStack(f.getStackSize()-args.length-1);
+ Set insns = v.insns;
+ for( Iterator it = insns.iterator(); it.hasNext();) {
+ AbstractInsnNode ins = (AbstractInsnNode) it.next();
+ if(ins.getOpcode()==NEW) {
+ movable.put(ins, mnode);
+ } else if(ins.getOpcode()==DUP) {
+ int n1 = a.getIndex(ins);
+ AbstractInsnNode ins1 = (AbstractInsnNode) instructions.get(n1-1);
+ if(ins1.getOpcode()==NEW) {
+ movable.put(ins1, mnode);
+ }
+ }
+ }
+ }
+
+ for( Iterator it = movable.entrySet().iterator(); it.hasNext();) {
+ Map.Entry e = (Map.Entry) it.next();
+ AbstractInsnNode node1 = (AbstractInsnNode) e.getKey();
+ int n1 = instructions.indexOf(node1);
+ AbstractInsnNode node2 = (AbstractInsnNode) instructions.get(n1+1);
+ boolean hasCopy = node2.getOpcode()==DUP;
+
+ instructions.remove(node1); // NEW
+ if(hasCopy) {
+ instructions.remove(node2); // DUP
+ }
+
+ MethodInsnNode mnode = (MethodInsnNode) e.getValue();
+ int nm = instructions.indexOf(mnode);
+
+ int varOffset = maxLocals+1;
+ Type[] args = Type.getArgumentTypes(mnode.desc);
+
+ // save stack
+ for (int j = args.length - 1; j >= 0; j--) {
+ Type type = args[j];
+ instructions.add(nm++, new VarInsnNode(type.getOpcode(ISTORE), varOffset));
+ varOffset += type.getSize();
+ }
+ maxLocals = varOffset;
+
+ instructions.add(nm++, node1); // NEW
+ if(hasCopy) {
+ instructions.add(nm++, node2); // DUP
+ }
+
+ // restore stack
+ for( int j = 0; j < args.length; j++) {
+ Type type = args[j];
+ varOffset -= type.getSize();
+ instructions.add(nm++, new VarInsnNode(type.getOpcode(ILOAD), varOffset));
+ // clean up store to avoid memory leak?
+ if(type.getSort()==Type.OBJECT || type.getSort()==Type.ARRAY) {
+ instructions.add(nm++, new InsnNode(ACONST_NULL));
+ instructions.add(nm++, new VarInsnNode(type.getOpcode(ISTORE), varOffset));
+ }
+ }
+ }
+ }
+
+ // 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 ) {
+ return true;
+ }
+ return false;
+ }
+
+}
\ No newline at end of file
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/asm/ContinuationMethodAnalyzer.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/TestClassLoader.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/TestClassLoader.java?rev=358963&r1=358962&r2=358963&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/TestClassLoader.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/TestClassLoader.java Sat Dec 24 20:09:27 2005
@@ -1,71 +1,71 @@
-package org.apache.commons.javaflow;
-
-import org.apache.commons.javaflow.bytecode.transformation.ResourceTransformer;
-import org.apache.commons.javaflow.bytecode.transformation.bcel.BcelClassTransformer;
-import org.apache.commons.io.IOUtils;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * @author Kohsuke Kawaguchi
- */
-public class TestClassLoader extends ClassLoader {
- private ResourceTransformer transformer = new BcelClassTransformer();
-
- private final String prefix;
-
- /**
- * Creates a new instance.
- *
- * @param parent
- * parent class loader. Can be null, in which case it delegates
- * to the application class loader.
- * @param prefix
- * prefix of the classes that will be instrumented by this class loader.
- * for example, if this parameter is "org.acme.foo.", then classes like
- * "org.acme.foo.Abc" or "org.acme.foo.bar.Zot" will be instrumented,
- * but not "org.acme.Joe" or "org.acme.foobar.Zot".
- */
- public TestClassLoader(ClassLoader parent, String prefix) {
- super(parent);
- this.prefix = prefix;
- if(prefix==null)
- throw new IllegalArgumentException();
- }
-
- private boolean shouldBeRewritten(String s) {
- return s.startsWith(prefix);
- }
-
- protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
-
- Class c = findLoadedClass(name);
-
- if(c==null && shouldBeRewritten(name)) {
- InputStream is = super.getResourceAsStream(name.replace('.', '/') + ".class");
- if(is!=null) {
- try {
- byte[] buf = IOUtils.toByteArray(is);
- buf = transformer.transform(buf);
- c = defineClass(name, buf, 0, buf.length);
- } catch (IOException e) {
- throw new ClassNotFoundException("failed to read the class file", e);
- }
- }
- }
-
- if(c==null) {
- // delegate
- final ClassLoader parent = getParent();
- if (parent != null)
- c = parent.loadClass(name);
- else
- throw new ClassNotFoundException(name);
- }
-
- if (resolve)
- resolveClass(c);
- return c;
- }
-}
+package org.apache.commons.javaflow;
+
+import org.apache.commons.javaflow.bytecode.transformation.ResourceTransformer;
+import org.apache.commons.javaflow.bytecode.transformation.bcel.BcelClassTransformer;
+import org.apache.commons.io.IOUtils;
+
+import java.io.InputStream;
+import java.io.IOException;
+
+/**
+ * @author Kohsuke Kawaguchi
+ */
+public class TestClassLoader extends ClassLoader {
+ private ResourceTransformer transformer = new BcelClassTransformer();
+
+ private final String prefix;
+
+ /**
+ * Creates a new instance.
+ *
+ * @param parent
+ * parent class loader. Can be null, in which case it delegates
+ * to the application class loader.
+ * @param prefix
+ * prefix of the classes that will be instrumented by this class loader.
+ * for example, if this parameter is "org.acme.foo.", then classes like
+ * "org.acme.foo.Abc" or "org.acme.foo.bar.Zot" will be instrumented,
+ * but not "org.acme.Joe" or "org.acme.foobar.Zot".
+ */
+ public TestClassLoader(ClassLoader parent, String prefix) {
+ super(parent);
+ this.prefix = prefix;
+ if(prefix==null)
+ throw new IllegalArgumentException();
+ }
+
+ private boolean shouldBeRewritten(String s) {
+ return s.startsWith(prefix);
+ }
+
+ protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
+
+ Class c = findLoadedClass(name);
+
+ if(c==null && shouldBeRewritten(name)) {
+ InputStream is = super.getResourceAsStream(name.replace('.', '/') + ".class");
+ if(is!=null) {
+ try {
+ byte[] buf = IOUtils.toByteArray(is);
+ buf = transformer.transform(buf);
+ c = defineClass(name, buf, 0, buf.length);
+ } catch (IOException e) {
+ throw new ClassNotFoundException("failed to read the class file", e);
+ }
+ }
+ }
+
+ if(c==null) {
+ // delegate
+ final ClassLoader parent = getParent();
+ if (parent != null)
+ c = parent.loadClass(name);
+ else
+ throw new ClassNotFoundException(name);
+ }
+
+ if (resolve)
+ resolveClass(c);
+ return c;
+ }
+}
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformerClassLoader.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformerClassLoader.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformerClassLoader.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformerClassLoader.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,60 @@
+
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import java.io.InputStream;
+import org.objectweb.asm.ClassReader;
+
+
+public class AsmClassTransformerClassLoader extends ClassLoader {
+ private final AsmClassTransformer transformer = new AsmClassTransformer();
+// private final BcelClassTransformer transformer = new BcelClassTransformer();
+
+ private final String prefix;
+ private final ClassLoader cl;
+
+
+ public AsmClassTransformerClassLoader(String prefix) {
+ this.prefix = prefix;
+ this.cl = getClass().getClassLoader();
+ }
+
+ public Class loadClass(String name) throws ClassNotFoundException {
+ if(name.startsWith(prefix)) {
+ System.err.println("Loading: " + name);
+ try {
+ InputStream is = getClass().getResourceAsStream("/" + name.replace( '.', '/') + ".class");
+ byte[] bytecode;
+ if(name.startsWith(prefix+".data")) {
+ // bytecode = DefaultConstructorDump.dump();
+ bytecode = transformer.transform(is);
+
+ /*
+ FileOutputStream os = new FileOutputStream(name+".class");
+ os.write(bytecode);
+ os.flush();
+ os.close();
+ */
+
+ // CheckClassAdapter.verify(new ClassReader(bytecode), true);
+
+ } else {
+ ClassReader cr = new ClassReader(is);
+ bytecode = cr.b;
+ }
+ return super.defineClass(name, bytecode, 0, bytecode.length);
+
+// } catch( Error ex) {
+// new ClassReader(bytecode).accept(new TraceClassVisitor(new PrintWriter(System.err)), false);
+// throw ex;
+
+ } catch( Throwable ex) {
+ System.err.println("Load error: " + ex.toString());
+ ex.printStackTrace();
+ throw new ClassNotFoundException(name+" "+ex.getMessage(), ex);
+
+ }
+ }
+ return cl.loadClass( name);
+ }
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformerClassLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/AsmClassTransformerClassLoader.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/BlackRedTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/BlackRedTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/BlackRedTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/BlackRedTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,31 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.BlackRed;
+
+
+public class BlackRedTestCase extends TransformerTestCase {
+
+ public static Test suite() throws Exception {
+ Class test = BlackRedTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader( test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+ public void testBlackRed() {
+ final Runnable r = new BlackRed();
+ final Continuation c1 = Continuation.startWith(r);
+ assertTrue(c1 != null);
+ final Continuation c2 = Continuation.continueWith(c1);
+ assertTrue(c2 == null);
+ }
+
+ protected String getData() {
+ return "org.apache.commons.javaflow.bytecode.transformation.asm.data.BlackRed";
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/BlackRedTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/BlackRedTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccess2TestClass.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccess2TestClass.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccess2TestClass.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccess2TestClass.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,28 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.ClassAccess2;
+
+
+public class ClassAccess2TestClass extends TransformerTestCase {
+
+ public static Test suite() throws Exception {
+ Class test = ClassAccess2TestClass.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader( test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+ public void testClassAccess2() throws Exception {
+ final ClassAccess2 r = new ClassAccess2();
+ // final Continuation c = Continuation.startWith(r);
+ // assertTrue(c != null);
+ }
+
+ protected String getData() {
+ return "org.apache.commons.javaflow.bytecode.transformation.asm.data.ClassAccess2";
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccess2TestClass.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccess2TestClass.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccessTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccessTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccessTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccessTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,29 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.ClassAccess1;
+
+
+public class ClassAccessTestCase extends TransformerTestCase {
+
+ public static Test suite() throws Exception {
+ Class test = ClassAccessTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader( test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+ public void testClassAccess() throws Exception {
+ final ClassAccess1 r = new ClassAccess1();
+ final Continuation c = Continuation.startWith(r);
+ assertTrue(c != null);
+ }
+
+ protected String getData() {
+ return "org.apache.commons.javaflow.bytecode.transformation.asm.data.ClassAccess1";
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccessTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/ClassAccessTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/CounterTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/CounterTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/CounterTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/CounterTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,37 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.CounterFlow;
+
+
+public class CounterTestCase extends TransformerTestCase {
+
+ public static Test suite() throws Exception {
+ Class test = CounterTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader( test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+ public void testCounter() {
+ final int count = 5;
+ final Runnable r = new CounterFlow( count);
+
+ int i = 0;
+ Continuation c = Continuation.startWith( r);
+ while( c != null) {
+ c = Continuation.continueWith( c);
+ i++;
+ }
+
+ assertTrue( i == count);
+ }
+
+ protected String getData() {
+ return "org.apache.commons.javaflow.bytecode.transformation.asm.data.CounterFlow";
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/CounterTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/CounterTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorDump.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorDump.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorDump.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorDump.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,107 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+
+public class DefaultConstructorDump implements Opcodes {
+
+ public static byte[] dump() throws Exception {
+ FieldVisitor fv;
+ MethodVisitor mv;
+ AnnotationVisitor av0;
+
+ ClassWriter cw = new ClassWriter(true);
+ cw.visit( V1_2, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, "org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor", null, "java/lang/Thread", null);
+
+ cw.visitSource( "DefaultConstructor.java", null);
+
+ {
+ mv = cw.visitMethod( ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+
+ Label l0 = new Label();
+ mv.visitLabel( l0);
+
+ mv.visitVarInsn( ALOAD, 0);
+ mv.visitMethodInsn( INVOKESPECIAL, "java/lang/Thread", "<init>", "()V");
+
+ mv.visitMethodInsn( INVOKESTATIC, "org/apache/commons/javaflow/bytecode/StackRecorder", "get", "()Lorg/apache/commons/javaflow/bytecode/StackRecorder;");
+ mv.visitInsn( DUP);
+ mv.visitVarInsn( ASTORE, 1);
+ Label l1 = new Label();
+ mv.visitJumpInsn( IFNULL, l1);
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "isRestoring", "()Z");
+ mv.visitJumpInsn( IFEQ, l1);
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "popInt", "()I");
+ Label l2 = new Label();
+ mv.visitTableSwitchInsn( 0, 0, l1, new Label[] { l2});
+
+ mv.visitLabel( l2);
+ mv.visitLdcInsn( "restore locals");
+ mv.visitInsn( POP);
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "popObject", "()Ljava/lang/Object;");
+ mv.visitTypeInsn( CHECKCAST, "org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor");
+ mv.visitVarInsn( ASTORE, 0);
+ mv.visitLdcInsn( "restore stack");
+ mv.visitInsn( POP);
+ mv.visitLdcInsn( "restore reference");
+ mv.visitInsn( POP);
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "popReference", "()Ljava/lang/Object;");
+ mv.visitTypeInsn( CHECKCAST, "java/io/PrintStream");
+ mv.visitLdcInsn( "restore params");
+ mv.visitInsn( POP);
+ mv.visitInsn( ACONST_NULL);
+ mv.visitTypeInsn( CHECKCAST, "java/lang/String");
+ Label l3 = new Label();
+ mv.visitJumpInsn( GOTO, l3);
+
+ mv.visitLabel( l1);
+
+ mv.visitFieldInsn( GETSTATIC, "java/lang/System", "err", "Ljava/io/PrintStream;");
+ mv.visitLdcInsn( "aaa");
+ mv.visitLabel( l3);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
+ mv.visitVarInsn( ALOAD, 1);
+ Label l5 = new Label();
+ mv.visitJumpInsn( IFNULL, l5);
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "isCapturing", "()Z");
+ mv.visitJumpInsn( IFEQ, l5);
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitVarInsn( ALOAD, 0);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "pushReference",
+ "(Ljava/lang/Object;)V");
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitVarInsn( ALOAD, 0);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "pushObject",
+ "(Ljava/lang/Object;)V");
+ mv.visitVarInsn( ALOAD, 1);
+ mv.visitIntInsn( BIPUSH, 0);
+ mv.visitMethodInsn( INVOKEVIRTUAL, "org/apache/commons/javaflow/bytecode/StackRecorder", "pushInt", "(I)V");
+ mv.visitInsn( RETURN);
+
+ mv.visitLabel( l5);
+ mv.visitInsn( RETURN);
+
+ Label l6 = new Label();
+ mv.visitLabel( l6);
+ mv.visitLocalVariable( "this", "Lorg/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor;", null, l1, l6, 0);
+ mv.visitLocalVariable( "__stackRecorder", "Lorg/apache/commons/javaflow/bytecode/StackRecorder;", null, l0, l6, 1);
+ mv.visitMaxs( 2, 2);
+ mv.visitEnd();
+ }
+ cw.visitEnd();
+
+ return cw.toByteArray();
+ }
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorDump.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorDump.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,28 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.DefaultConstructor;
+
+
+public class DefaultConstructorTestCase extends TestCase {
+
+ public static Test suite() throws Exception {
+ Class test = DefaultConstructorTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader(test.getPackage().getName());
+ Class c = cl.loadClass(test.getName());
+ return new TestSuite(c);
+ }
+
+
+ public void testInvoker() {
+ Runnable o = new DefaultConstructor();
+ Continuation c = Continuation.startWith(o);
+
+ assertTrue(c == null);
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/DefaultConstructorTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/InvokerTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/InvokerTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/InvokerTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/InvokerTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,29 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.Invoker;
+
+
+public class InvokerTestCase extends TestCase {
+
+ public static Test suite() throws Exception {
+ Class test = InvokerTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader(test.getPackage().getName());
+ Class c = cl.loadClass(test.getName());
+ return new TestSuite(c);
+ }
+
+
+ public void testInvoker() {
+ Runnable r = new Thread();
+ Runnable o = new Invoker(r);
+ Continuation c = Continuation.startWith(o);
+
+ assertTrue(c == null);
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/InvokerTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/InvokerTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NewObjectTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NewObjectTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NewObjectTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NewObjectTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,26 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.NewObject;
+
+
+public class NewObjectTestCase extends TestCase {
+
+ public static Test suite() throws Exception {
+ Class test = NewObjectTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader( test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+
+ public void testNewObject() throws Exception {
+ final Runnable r = new NewObject();
+ final Continuation c = Continuation.startWith( r);
+ assertTrue( c == null);
+ }
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NewObjectTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NewObjectTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NoReferenceTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NoReferenceTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NoReferenceTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NoReferenceTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,29 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.NoReference;
+
+
+public class NoReferenceTestCase extends TransformerTestCase {
+
+ public static Test suite() throws Exception {
+ Class test = NoReferenceTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader( test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+ public void testNoReference() throws Exception {
+ final Runnable r = new NoReference();
+ final Continuation c = Continuation.startWith( r);
+ assertTrue( c != null);
+ }
+
+ protected String getData() {
+ return "org.apache.commons.javaflow.bytecode.transformation.asm.data.NoReference";
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NoReferenceTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/NoReferenceTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleSerializableTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleSerializableTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleSerializableTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleSerializableTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,73 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.SimpleSerializable;
+
+
+public class SimpleSerializableTestCase extends TransformerTestCase {
+
+ public static Test suite() throws Exception {
+ Class test = SimpleSerializableTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader(test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+
+ public void testSimpleSuspendResume() throws Exception {
+ final SimpleSerializable r = new SimpleSerializable();
+
+ assertTrue( r.g == -1);
+ assertTrue( r.l == -1);
+
+ Continuation c1 = Continuation.startWith( r);
+
+ assertTrue( r.g == 0);
+ assertTrue( r.l == 0);
+
+ Continuation c2 = Continuation.continueWith( c1);
+
+ assertTrue( r.g == 1);
+ assertTrue( r.l == 1);
+
+ Continuation c3 = Continuation.continueWith( c2);
+
+ assertTrue( r.g == 2);
+ assertTrue( r.l == 2);
+ }
+
+ public void testContinuationBranching() throws Exception {
+ final SimpleSerializable r = new SimpleSerializable();
+
+ assertTrue( r.g == -1);
+ assertTrue( r.l == -1);
+
+ Continuation c1 = Continuation.startWith( r);
+
+ assertTrue( r.g == 0);
+ assertTrue( r.l == 0);
+
+ Continuation c2 = Continuation.continueWith( c1);
+
+ assertTrue( r.g == 1);
+ assertTrue( r.l == 1);
+
+ Continuation c31 = Continuation.continueWith( c2);
+
+ assertTrue( r.g == 2);
+ assertTrue( r.l == 2);
+
+ Continuation c32 = Continuation.continueWith( c2);
+
+ assertTrue( r.g == 3);
+ assertTrue( r.l == 2);
+ }
+
+
+ protected String getData() {
+ return "org.apache.commons.javaflow.bytecode.transformation.asm.data.SimpleSerializable";
+ }
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleSerializableTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleSerializableTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,29 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.bytecode.transformation.asm.data.Simple;
+
+
+public class SimpleTestCase extends TransformerTestCase {
+
+ public static Test suite() throws Exception {
+ Class test = SimpleTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader( test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+ public void testNoReferenceBug() throws Exception {
+ final Runnable r = new Simple();
+ final Continuation c = Continuation.startWith( r);
+ assertTrue( c != null);
+ }
+
+ protected String getData() {
+ return "org.apache.commons.javaflow.bytecode.transformation.asm.data.Simple";
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/SimpleTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/StackTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/StackTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/StackTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/StackTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,26 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.javaflow.flow.StackBugFlow;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+
+public class StackTestCase extends TestCase {
+
+ public static Test suite() throws Exception {
+ Class test = StackTestCase.class;
+ AsmClassTransformerClassLoader cl = new AsmClassTransformerClassLoader(test.getPackage().getName());
+ Class c = cl.loadClass( test.getName());
+ return new TestSuite( c);
+ }
+
+ public void testStackBug() throws Exception {
+ final Runnable r = new StackBugFlow();
+ final Continuation c = Continuation.startWith( r);
+ assertTrue( c == null);
+ }
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/StackTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/StackTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/TransformerTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/TransformerTestCase.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/TransformerTestCase.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/TransformerTestCase.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,48 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm;
+
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer;
+import org.apache.commons.javaflow.bytecode.transformation.bcel.BcelClassTransformer;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.util.CheckClassAdapter;
+import org.objectweb.asm.util.TraceClassVisitor;
+
+import junit.framework.TestCase;
+
+
+public abstract class TransformerTestCase extends TestCase {
+
+ protected void runTest() throws Throwable {
+ try {
+ super.runTest();
+
+ } catch( Throwable e) {
+ InputStream is = getStream(getData());
+ ClassReader cr = new ClassReader(is);
+
+ AsmClassTransformer t1 = new AsmClassTransformer();
+ BcelClassTransformer t2 = new BcelClassTransformer();
+
+ byte[] bytecode = t1.transform(cr.b);
+ CheckClassAdapter.verify(new ClassReader(bytecode), true);
+
+ StringWriter sw1 = new StringWriter();
+ new ClassReader(bytecode).accept(new TraceClassVisitor(new PrintWriter(sw1)), false);
+
+ StringWriter sw2 = new StringWriter();
+ new ClassReader(t2.transform(cr.b)).accept(new TraceClassVisitor(new PrintWriter(sw2)), false);
+
+ assertEquals(e.getMessage(), sw2.toString(), sw1.toString());
+ }
+ }
+
+ private InputStream getStream( String name) {
+ return getClass().getResourceAsStream("/" + name.replace( '.', '/') + ".class");
+ }
+
+ protected abstract String getData();
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/TransformerTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/TransformerTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/BlackRed.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/BlackRed.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/BlackRed.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/BlackRed.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,57 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import org.apache.commons.javaflow.Continuation;
+
+import java.io.Serializable;
+
+
+/**
+ * Test for making sure that rstack works correctly. For this test we need to
+ * have a stack frame that goes through multiple objects of different types.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public final class BlackRed implements Runnable, Serializable {
+
+ public void run() {
+ // new Black( new Red( new Black( new Suspend()))).run();
+ new Black( new Suspend()).run();
+ }
+
+
+ class Black implements Runnable {
+ final Runnable r;
+
+ public Black( Runnable r) {
+ this.r = r;
+ }
+
+ public void run() {
+ String s = "foo"; // have some random variable
+ r.run();
+ }
+ }
+
+
+ class Red implements Runnable {
+ final Runnable r;
+
+ public Red( Runnable r) {
+ this.r = r;
+ }
+
+ public void run() {
+ int i = 5; // have some random variable
+ r.run();
+ }
+ }
+
+
+ class Suspend implements Runnable {
+ public void run() {
+ Continuation.suspend();
+ }
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/BlackRed.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/BlackRed.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess1.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess1.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess1.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess1.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,14 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import org.apache.commons.javaflow.Continuation;
+
+public final class ClassAccess1 implements Runnable {
+
+ public void run() {
+ final Class clazz1 = ClassAccess1.class;
+ final Class clazz2 = this.getClass();
+
+ Continuation.suspend();
+ }
+
+}
\ No newline at end of file
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess1.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess1.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess2.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess2.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess2.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess2.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,10 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+
+public final class ClassAccess2 {
+
+ public void run() throws Throwable {
+ Object o = ClassAccess2.class;
+ }
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess2.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess2.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess3.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess3.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess3.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess3.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,58 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import org.apache.commons.javaflow.Continuation;
+
+public final class ClassAccess3 implements Runnable {
+
+ /*
+ L0 (0)
+ GETSTATIC ClassAccess2.class$0 : Class
+ DUP
+ IFNONNULL L1
+ POP
+
+ L2 (5)
+ LDC "asm.data.ClassAccess2"
+ INVOKESTATIC Class.forName(String) : Class
+
+ L3 (8)
+ DUP
+ PUTSTATIC ClassAccess2.class$0 : Class
+ GOTO L1
+
+ L4 (12)
+ NEW NoClassDefFoundError
+ DUP_X1
+ SWAP
+ INVOKEVIRTUAL Throwable.getMessage() : String
+ INVOKESPECIAL NoClassDefFoundError.<init>(String) : void
+ ATHROW
+
+ L1 (19)
+ ASTORE 1: clazz1
+ L5 (21)
+ INVOKESTATIC Continuation.suspend() : void
+ L6 (23)
+ RETURN
+
+ L7 (25)
+ TRYCATCHBLOCK L2 L3 L4 ClassNotFoundException
+ */
+
+ static Class class$0;
+
+ public void run() {
+ // final Class clazz1 = ClassAccess2.class;
+ // final Class clazz2 = this.getClass();
+ // if(class$0==null) {
+ try {
+ class$0 = Class.forName("asm.data.ClassAccess2");
+ } catch(ClassNotFoundException ex) {
+ throw new NoClassDefFoundError(ex.getMessage());
+ }
+ // }
+
+ Continuation.suspend();
+ }
+
+}
\ No newline at end of file
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess3.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/ClassAccess3.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/CounterFlow.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/CounterFlow.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/CounterFlow.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/CounterFlow.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,24 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import org.apache.commons.javaflow.Continuation;
+
+
+/**
+ * @author Kohsuke Kawaguchi
+ */
+public final class CounterFlow implements Runnable {
+
+ final int up;
+
+ public CounterFlow( int up) {
+ this.up = up;
+ }
+
+ public void run() {
+ for( int i = 0; i < up; i++) {
+ System.err.println(i);
+ Continuation.suspend();
+ }
+ }
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/CounterFlow.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/CounterFlow.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,13 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+
+public final class DefaultConstructor implements Runnable {
+
+ public DefaultConstructor() {
+ }
+
+ public void run() {
+ System.err.println("aaa");
+ }
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/DefaultConstructor.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Invoker.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Invoker.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Invoker.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Invoker.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,16 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+
+public final class Invoker implements Runnable {
+
+ private Runnable runnable;
+
+ public Invoker(Runnable runnable) {
+ this.runnable = runnable;
+ }
+
+ public void run() {
+ runnable.run();
+ }
+
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Invoker.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Invoker.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NewObject.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NewObject.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NewObject.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NewObject.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,25 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import junit.framework.Assert;
+
+
+/**
+ * Test that allocates a lot of new objects. Javaflow performs some tricky
+ * instrumentation on new object allocations, especially when it has arguments.
+ * Nesting object allocations makes it even more interesting.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public final class NewObject implements Runnable {
+ static char[] ch = { 'a', 'b', 'c'};
+
+ public void run() {
+
+ String s = new String( new String( new String( ch, 0, ch.length).toCharArray(), 0, ch.length));
+ // String s = new String( new String( ch).toCharArray());
+
+ Assert.assertEquals( s, "abc");
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NewObject.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NewObject.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NoReference.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NoReference.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NoReference.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NoReference.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,13 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import org.apache.commons.javaflow.Continuation;
+
+
+public final class NoReference implements Runnable {
+
+ public void run() {
+ new Object();
+ Continuation.suspend();
+ }
+
+}
\ No newline at end of file
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NoReference.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/NoReference.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Simple.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Simple.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Simple.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Simple.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,22 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import org.apache.commons.javaflow.Continuation;
+
+public final class Simple implements Runnable {
+
+ public int g = -1; // global count throughout all continuations
+ public int l = -1; // local count mapped to a global variable so
+ // we can access is
+
+ public void run() {
+ int local = -1;
+ ++g; l=++local;
+ Continuation.suspend();
+ ++g; l=++local;
+ Continuation.suspend();
+ ++g; l=++local;
+ Continuation.suspend();
+ ++g; l=++local;
+ }
+
+}
\ No newline at end of file
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Simple.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Simple.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/SimpleSerializable.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/SimpleSerializable.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/SimpleSerializable.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/SimpleSerializable.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,26 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+import java.io.Serializable;
+import org.apache.commons.javaflow.Continuation;
+
+
+public final class SimpleSerializable implements Runnable, Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public int g = -1; // global count throughout all continuations
+ public int l = -1; // local count mapped to a global variable so
+ // we can access is
+
+ public void run() {
+ int local = -1;
+ ++g; l=++local;
+ Continuation.suspend();
+ ++g; l=++local;
+ Continuation.suspend();
+ ++g; l=++local;
+ Continuation.suspend();
+ ++g; l=++local;
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/SimpleSerializable.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/SimpleSerializable.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Stack.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Stack.java?rev=358963&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Stack.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Stack.java Sat Dec 24 20:09:27 2005
@@ -0,0 +1,35 @@
+package org.apache.commons.javaflow.bytecode.transformation.asm.data;
+
+/**
+ * Regression test case.
+ *
+ * <p>
+ * When the stack size reaches the maximum in a constructor method invocation,
+ * there was a bug where we failed to expand the stack size appropriately.
+ *
+ * This is a regression test for that case.
+ *
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public final class Stack implements Runnable {
+ public void run() {
+ final Object o = foo("abc","def");
+ }
+
+ private Object foo(String a, String b) {
+ return new StrStr(a,b);
+ }
+
+ private static final class StrStr {
+ private final String value;
+
+ public StrStr(String a, String b) {
+ value = a+b;
+ }
+
+ public String toString() {
+ return value;
+ }
+ }
+}
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Stack.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/bytecode/transformation/asm/data/Stack.java
------------------------------------------------------------------------------
svn:keywords = Id
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org