use of org.objectweb.asm.tree.ClassNode in project buck by facebook.
the class ClassNodeListSupplierTest method testOneJar.
@Test
public void testOneJar() throws IOException {
File jar = new File(tmpDir.getRoot(), "primary.jar");
ZipOutputStream jarOut = new JarOutputStream(new FileOutputStream(jar));
jarOut.putNextEntry(new JarEntry("com/facebook/buck/android/ClassNodeListSupplierTest.class"));
writeClassBytes(ClassNodeListSupplierTest.class, jarOut);
jarOut.close();
Supplier<ImmutableList<ClassNode>> supplier = ClassNodeListSupplier.createMemoized(ImmutableList.of(jar.toPath()));
ImmutableList<ClassNode> classNodes = supplier.get();
assertEquals(1, classNodes.size());
assertEquals(Type.getType(ClassNodeListSupplierTest.class).getInternalName(), classNodes.get(0).name);
// Memoized should always return the same object
assertSame(classNodes, supplier.get());
}
use of org.objectweb.asm.tree.ClassNode in project buck by facebook.
the class FirstOrderTest method loadClassNode.
private static ClassNode loadClassNode(Class<?> input) {
try {
ClassReader reader = new ClassReader(input.getName());
ClassNode node = new ClassNode(Opcodes.ASM4);
reader.accept(node, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
return node;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
use of org.objectweb.asm.tree.ClassNode in project buck by facebook.
the class AbiClass method extract.
public static AbiClass extract(Path pathToJar, String className) throws IOException {
try (ZipFile zip = new ZipFile(pathToJar.toString())) {
ZipEntry entry = zip.getEntry(className);
if (entry == null) {
return null;
}
try (InputStream entryStream = zip.getInputStream(entry)) {
ClassReader reader = new ClassReader(entryStream);
ClassNode classNode = new ClassNode();
reader.accept(classNode, 0);
return new AbiClass(classNode);
}
}
}
use of org.objectweb.asm.tree.ClassNode in project buck by facebook.
the class DescriptorAndSignatureFactoryTestBase method findErrors.
private void findErrors(TypeElement typeElement, Function<FieldNode, String> fieldNodeExpectedValueGetter, Function<MethodNode, String> methodNodeExpectedValueGetter, Function<ClassNode, String> classNodeExpectedValueGetter, Function<Element, String> elementActualValueGetter) throws IOException {
ClassNode typeNode = getClassNode(elements.getBinaryName(typeElement).toString());
for (Element enclosedElement : typeElement.getEnclosedElements()) {
Name elementName = enclosedElement.getSimpleName();
String actual = elementActualValueGetter.apply(enclosedElement);
switch(enclosedElement.getKind()) {
case FIELD:
checkValue("Field", elementName, fieldNodeExpectedValueGetter.apply(getFieldNode(typeNode, elementName)), actual);
break;
case CONSTRUCTOR:
case METHOD:
checkValue("Method", elementName, methodNodeExpectedValueGetter.apply(getMethodNode(typeNode, elementName)), actual);
break;
case ANNOTATION_TYPE:
case CLASS:
case ENUM:
case INTERFACE:
ClassNode innerTypeNode = getClassNode(elements.getBinaryName((TypeElement) enclosedElement).toString());
checkValue("Class", elementName, classNodeExpectedValueGetter.apply(innerTypeNode), actual);
findErrors((TypeElement) enclosedElement, fieldNodeExpectedValueGetter, methodNodeExpectedValueGetter, classNodeExpectedValueGetter, elementActualValueGetter);
break;
// $CASES-OMITTED$
default:
fail(String.format("Didn't implement testing for element kind %s", enclosedElement.getKind()));
continue;
}
}
}
use of org.objectweb.asm.tree.ClassNode in project buck by facebook.
the class DescriptorAndSignatureFactoryTestBase method getClassNode.
private ClassNode getClassNode(String classBinaryName) throws IOException {
ClassNode classNode = new ClassNode(Opcodes.ASM5);
testCompiler.getClasses().acceptClassVisitor(classBinaryName, 0, classNode);
return classNode;
}
Aggregations