Merge pull request #9428 from SmartyAnsh/BAEL-View_Bytecode_of_a_Class_File_in_Java

BAEL-4049 View bytecode of a class file in java
This commit is contained in:
Eric Martin
2020-06-11 21:15:24 -05:00
committed by GitHub
2 changed files with 69 additions and 1 deletions

View File

@@ -0,0 +1,51 @@
package com.baeldung.bytecode;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.apache.bcel.Repository;
import org.apache.bcel.classfile.JavaClass;
import org.junit.Test;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.util.TraceClassVisitor;
import javassist.ClassPool;
import javassist.NotFoundException;
import javassist.bytecode.ClassFile;
public class ViewBytecodeUnitTest {
@Test
public void whenUsingASM_thenReadBytecode() throws IOException {
ClassReader reader = new ClassReader("java.lang.Object");
StringWriter sw = new StringWriter();
TraceClassVisitor tcv = new TraceClassVisitor(new PrintWriter(sw));
reader.accept(tcv, 0);
assertTrue(sw.toString().contains("public class java/lang/Object"));
}
@Test
public void whenUsingBCEL_thenReadBytecode() throws ClassNotFoundException {
JavaClass objectClazz = Repository.lookupClass("java.lang.Object");
assertEquals(objectClazz.getClassName(), "java.lang.Object");
assertEquals(objectClazz.getMethods().length, 14);
assertTrue(objectClazz.toString().contains("public class java.lang.Object"));
}
@Test
public void whenUsingJavassist_thenReadBytecode() throws NotFoundException {
ClassPool cp = ClassPool.getDefault();
ClassFile cf = cp.get("java.lang.Object").getClassFile();
assertEquals(cf.getName(), "java.lang.Object");
assertEquals(cf.getMethods().size(), 14);
}
}