Browse Source

Add missing cases to bcel constantToString

tags/V1_9_0_RC4
Andy Clement 6 years ago
parent
commit
19cfe0e1ca

+ 21
- 0
bcel-builder/src/org/aspectj/apache/bcel/classfile/ConstantPool.java View File

@@ -207,6 +207,26 @@ 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);
return "#"+cID.getBootstrapMethodAttrIndex()+"."+constantToString(cID.getNameAndTypeIndex(), Constants.CONSTANT_NameAndType);

case Constants.CONSTANT_MethodHandle:
ConstantMethodHandle cMH = ((ConstantMethodHandle)c);
return cMH.getReferenceKind()+":"+constantToString(cMH.getReferenceIndex(),Constants.CONSTANT_Methodref);

case Constants.CONSTANT_MethodType:
ConstantMethodType cMT = (ConstantMethodType)c;
return constantToString(cMT.getDescriptorIndex(),Constants.CONSTANT_Utf8);

case Constants.CONSTANT_Module:
ConstantModule cM = (ConstantModule)c;
return "Module:"+constantToString(cM.getNameIndex(),Constants.CONSTANT_Utf8);

case Constants.CONSTANT_Package:
ConstantPackage cP = (ConstantPackage)c;
return "Package:"+constantToString(cP.getNameIndex(),Constants.CONSTANT_Utf8);

default: // Never reached
throw new RuntimeException("Unknown constant type " + c.tag);
@@ -254,6 +274,7 @@ public class ConstantPool implements Node {
return constantToString(getConstant(index));
}

@Override
public void accept(ClassVisitor v) {
v.visitConstantPool(this);
}

BIN
bcel-builder/testdata/lambda.jar View File


+ 8
- 0
bcel-builder/testdata/lambda/cpl.sh View File

@@ -0,0 +1,8 @@

# Use Java9 or later to compile this
cd one
javac Code.java

jar -cvMf ../../lambda.jar Code.class
rm Code.class
cd ..

BIN
bcel-builder/testdata/lambda/one/Code.class View File


+ 7
- 0
bcel-builder/testdata/lambda/one/Code.java View File

@@ -0,0 +1,7 @@
public class Code {
public static void main(String[] args) {
Runnable r = () -> { System.out.println("hello world!"); };
r.run();
}

}

+ 1
- 0
bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java View File

@@ -25,6 +25,7 @@ public class AllTests {
suite.addTestSuite(Fundamentals.class);
suite.addTestSuite(RuntimeVisibleParameterAnnotationAttributeTest.class);
suite.addTestSuite(AnnotationDefaultAttributeTest.class);
suite.addTestSuite(ConstantPoolToStringTest.class);
suite.addTestSuite(EnclosingMethodAttributeTest.class);
suite.addTestSuite(MethodAnnotationsTest.class);
suite.addTestSuite(RuntimeVisibleAnnotationAttributeTest.class);

+ 54
- 0
bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/ConstantPoolToStringTest.java View File

@@ -0,0 +1,54 @@
/* *******************************************************************
* Copyright (c) 2018 Contributors
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Andy Clement - initial implementation
* ******************************************************************/

package org.aspectj.apache.bcel.classfile.tests;

import org.aspectj.apache.bcel.classfile.ConstantPool;
import org.aspectj.apache.bcel.classfile.JavaClass;
import org.aspectj.apache.bcel.classfile.Method;
import org.aspectj.apache.bcel.util.SyntheticRepository;

public class ConstantPoolToStringTest extends BcelTestCase {

@Override
protected void setUp() throws Exception {
super.setUp();
}

public void testToStringLambdaElements() throws ClassNotFoundException {
SyntheticRepository repos = createRepos("lambda.jar");
JavaClass clazz = repos.loadClass("Code");
ConstantPool pool = clazz.getConstantPool();
Method[] methods = clazz.getMethods();
String codeString = methods[1].getCode().getCodeString();
assertEquals("Code(max_stack = 1, max_locals = 2, code_length = 13)\n" +
"0: invokedynamic #0.run ()Ljava/lang/Runnable; (2)\n" +
"5: astore_1\n" +
"6: aload_1\n" +
"7: invokeinterface java.lang.Runnable.run ()V (3) 1 0\n" +
"12: return\n",codeString);
// #20 = MethodHandle 6:#32 // REF_invokeStatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
String cts = pool.constantToString(pool.getConstant(20));
assertEquals("6:java.lang.invoke.LambdaMetafactory.metafactory (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;",cts);
// #21 = MethodType #10 // ()V
cts = pool.constantToString(pool.getConstant(21));
assertEquals("()V",cts);
}

@Override
protected void tearDown() throws Exception {
super.tearDown();
}

}

BIN
lib/asm/asm-6.0.jar View File


BIN
lib/asm/asm-6.0.renamed.jar View File


BIN
lib/asm/asm-6.0_ALPHA.jar View File


BIN
lib/asm/asm-6.0_ALPHA.renamed.jar View File


BIN
lib/asm/asm-6.0_BETA.jar View File


BIN
lib/asm/asm-6.0_BETA.renamed.jar View File


+ 2
- 2
lib/asm/build.xml View File

@@ -4,8 +4,8 @@
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"/>

<target name="package" description="Jarjar asm-5.0.4.jar and prefix package name with aj">
<jarjar destfile="asm-6.0_BETA.renamed.jar">
<zipfileset src="asm-6.0_BETA.jar" excludes="module-info.class"/>
<jarjar destfile="asm-6.0.renamed.jar">
<zipfileset src="asm-6.0.jar" excludes="module-info.class"/>
<rule pattern="org.objectweb.asm.**" result="aj.org.objectweb.asm.@1"/>
</jarjar>
</target>

+ 0
- 1
lib/asm/readme.txt View File

@@ -1 +0,0 @@
asm 2.0 is used by some tests

BIN
lib/bcel/bcel-src.zip View File


BIN
lib/bcel/bcel-verifier-src.zip View File


BIN
lib/bcel/bcel-verifier.jar View File


BIN
lib/bcel/bcel.jar View File


+ 1
- 1
weaver/.classpath View File

@@ -13,6 +13,6 @@
<classpathentry kind="lib" path="/lib/bcel/bcel.jar" sourcepath="/lib/bcel/bcel-src.zip"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.aspectj.matcher"/>
<classpathentry kind="lib" path="/lib/asm/asm-6.0_BETA.renamed.jar"/>
<classpathentry kind="lib" path="/lib/asm/asm-6.0.renamed.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Loading…
Cancel
Save