View Javadoc

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  //        System.out.println("loading class " + name);
34          
35          final Class clazz = defineClass(name, bytecode, 0, bytecode.length);
36          
37          return clazz;
38      }
39  }