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 | 0 | public class BytecodeClassLoader extends ClassLoader { |
9 | |
|
10 | 0 | class NameClassAdapter extends ClassAdapter { |
11 | |
private String className; |
12 | |
|
13 | 0 | public NameClassAdapter() { |
14 | 0 | super(new EmptyVisitor()); |
15 | 0 | } |
16 | |
|
17 | |
public void visit( int version, int access, String name, String signature, String superName, String[] interfaces ) { |
18 | 0 | className = name; |
19 | 0 | } |
20 | |
|
21 | |
public String getName() { |
22 | 0 | return className; |
23 | |
} |
24 | |
} |
25 | |
|
26 | |
public Class loadClass( final byte[] bytecode ) { |
27 | 0 | final NameClassAdapter nameClassAdapter = new NameClassAdapter(); |
28 | |
|
29 | 0 | new ClassReader(bytecode).accept(nameClassAdapter, false); |
30 | |
|
31 | 0 | final String name = nameClassAdapter.getName().replace('/', '.'); |
32 | |
|
33 | |
|
34 | |
|
35 | 0 | final Class clazz = defineClass(name, bytecode, 0, bytecode.length); |
36 | |
|
37 | 0 | return clazz; |
38 | |
} |
39 | |
} |