Bläddra i källkod

Ensure we can disassemble invokedynamic

If there are problems at weave time the weaver may attempt to
disassemble some code to produce a nice error message. Until this
change that disassembly code did not understand invokedynamic.
This would make it fail to disassemble and instead of seeing the
real problem you see a disassembly problem. With this fix we
should now see the underlying problem in the issue.

Issue: #525541
tags/V1_8_12
Andy Clement 6 år sedan
förälder
incheckning
3d85b130f5

+ 5
- 0
bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantPool.java Visa fil

@@ -207,6 +207,11 @@ public class ConstantPool implements Node {
str = (constantToString(((ConstantCP) c).getClassIndex(), Constants.CONSTANT_Class) + "." + constantToString(
((ConstantCP) c).getNameAndTypeIndex(), Constants.CONSTANT_NameAndType));
break;
case Constants.CONSTANT_InvokeDynamic:
ConstantInvokeDynamic cid = (ConstantInvokeDynamic)c;
str = cid.toString();
break;

default: // Never reached
throw new RuntimeException("Unknown constant type " + c.tag);

+ 1
- 1
bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/BcelTestCase.java Visa fil

@@ -35,7 +35,7 @@ import org.aspectj.apache.bcel.util.SyntheticRepository;
* Super class for the Java5 tests, includes various helper methods.
*/

public class BcelTestCase extends TestCase {
public abstract class BcelTestCase extends TestCase {

private boolean verbose = false;


Binär
lib/bcel/bcel-src.zip Visa fil


Binär
lib/bcel/bcel-verifier-src.zip Visa fil


Binär
lib/bcel/bcel-verifier.jar Visa fil


Binär
lib/bcel/bcel.jar Visa fil


+ 16
- 1
tests/src/org/aspectj/systemtest/ajc186/Ajc186Tests.java Visa fil

@@ -17,6 +17,9 @@ import java.net.URLClassLoader;

import junit.framework.Test;

import org.aspectj.apache.bcel.classfile.JavaClass;
import org.aspectj.apache.bcel.classfile.Utility;
import org.aspectj.apache.bcel.util.ByteSequence;
import org.aspectj.testing.XMLBasedAjcTestCase;
import org.aspectj.weaver.tools.ContextBasedMatcher;
import org.aspectj.weaver.tools.DefaultMatchingContext;
@@ -117,7 +120,6 @@ public class Ajc186Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
Runnable r2 = (Runnable) fails.invoke(instance);
// r2.getClass().getName() == Application$$Lambda$1/1652149987
// JavaClass jc = getClassFrom(ajc.getSandboxDirectory(), "Application");
PointcutParser parser = PointcutParser
.getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution(ucl);
FooDesignatorHandler beanHandler = new FooDesignatorHandler();
@@ -137,6 +139,19 @@ public class Ajc186Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
context.addContextBinding("beanName", "yourBean");
assertFalse(pc.couldMatchJoinPointsInType(r2.getClass()));
JavaClass jc = getClassFrom(ajc.getSandboxDirectory(), "Application");
System.out.println("XXXX");
assertNotNull(jc);
// 525541: Checking that we can disassemble invokedynamic:
boolean checkedInvokeDynamic = false;
for (org.aspectj.apache.bcel.classfile.Method m: jc.getMethods()) {
if (m.getName().equals("fromLambdaExpression")) {
String code = m.getCode().getCodeString();
assertTrue(code.contains("invokedynamic"));
checkedInvokeDynamic = true;
}
}
assertTrue(checkedInvokeDynamic);
}

Laddar…
Avbryt
Spara