1 package org.apache.commons.javaflow.bytecode;
2
3 import org.objectweb.asm.ClassAdapter;
4 import org.objectweb.asm.ClassReader;
5 import org.objectweb.asm.commons.EmptyVisitor;
6
7
8 public class BytecodeClassLoader extends ClassLoader {
9
10 class NameClassAdapter extends ClassAdapter {
11 private String className;
12
13 public NameClassAdapter() {
14 super(new EmptyVisitor());
15 }
16
17 public void visit( int version, int access, String name, String signature, String superName, String[] interfaces ) {
18 className = name;
19 }
20
21 public String getName() {
22 return className;
23 }
24 }
25
26 public Class loadClass( final byte[] bytecode ) {
27 final NameClassAdapter nameClassAdapter = new NameClassAdapter();
28
29 new ClassReader(bytecode).accept(nameClassAdapter, false);
30
31 final String name = nameClassAdapter.getName().replace('/', '.');
32
33
34
35 final Class clazz = defineClass(name, bytecode, 0, bytecode.length);
36
37 return clazz;
38 }
39 }