Author: sebb Date: Fri Sep 11 12:37:21 2015 New Revision: 1702447 URL: http://svn.apache.org/r1702447 Log: BCEL-221 BCELifier is not working for Java8Example Workround for crash; may need further work
Modified: commons/proper/bcel/trunk/src/changes/changes.xml commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/INVOKEDYNAMIC.java commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/util/BCELifierTestCase.java Modified: commons/proper/bcel/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/changes/changes.xml?rev=1702447&r1=1702446&r2=1702447&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/changes/changes.xml (original) +++ commons/proper/bcel/trunk/src/changes/changes.xml Fri Sep 11 12:37:21 2015 @@ -63,6 +63,7 @@ The <action> type attribute can be add,u <body> <release version="6.0" date="TBA" description="Major release with Java 7 and 8 support"> + <action issue="BCEL-221" type="fix">BCELifier is not working for Java8Example</action> <action issue="BCEL-195" type="fix">addition of hashCode() to generic/Instruction.java breaks Targeters. Never make distinct BranchInstructions compare equal</action> <action issue="BCEL-261" type="fix">Select constructor allows partially constructed instance to escape. Re-ordered code to delay the escape.</action> <action issue="BCEL-259" type="fix">Minor doc error in BranchInstruction.java</action> Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/INVOKEDYNAMIC.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/INVOKEDYNAMIC.java?rev=1702447&r1=1702446&r2=1702447&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/INVOKEDYNAMIC.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/INVOKEDYNAMIC.java Fri Sep 11 12:37:21 2015 @@ -22,6 +22,8 @@ import java.io.IOException; import org.apache.commons.bcel6.Const; import org.apache.commons.bcel6.ExceptionConst; +import org.apache.commons.bcel6.classfile.ConstantInvokeDynamic; +import org.apache.commons.bcel6.classfile.ConstantNameAndType; import org.apache.commons.bcel6.classfile.ConstantPool; import org.apache.commons.bcel6.util.ByteSequence; @@ -115,4 +117,13 @@ public class INVOKEDYNAMIC extends Invok v.visitInvokeInstruction(this); v.visitINVOKEDYNAMIC(this); } + + /** + * Override the parent method because our classname is held elsewhere. + */ + public String getClassName( ConstantPoolGen cpg ) { + ConstantPool cp = cpg.getConstantPool(); + ConstantInvokeDynamic cid = (ConstantInvokeDynamic) cp.getConstant(super.getIndex(), Const.CONSTANT_InvokeDynamic); + return ((ConstantNameAndType) cp.getConstant(cid.getNameAndTypeIndex())).getName(cp); + } } Modified: commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/util/BCELifierTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/util/BCELifierTestCase.java?rev=1702447&r1=1702446&r2=1702447&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/util/BCELifierTestCase.java (original) +++ commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/util/BCELifierTestCase.java Fri Sep 11 12:37:21 2015 @@ -2,21 +2,20 @@ package org.apache.commons.bcel6.util; import static org.junit.Assert.*; +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; + import org.apache.commons.bcel6.classfile.JavaClass; import org.junit.Test; -import static org.junit.Assume.assumeTrue; public class BCELifierTestCase { - // A bit of a hack - we use the same property as for the perf test for now - private static final boolean REPORT = Boolean.parseBoolean(System.getProperty("PerformanceTest.report", "true"));; - @Test public void test() throws Exception { - assumeTrue(REPORT); // set to false by pom so this will only run on demand + OutputStream os = new ByteArrayOutputStream(); JavaClass java_class = BCELifier.getJavaClass("Java8Example"); assertNotNull(java_class); - BCELifier bcelifier = new BCELifier(java_class, System.out); + BCELifier bcelifier = new BCELifier(java_class, os); bcelifier.start(); }