public static <T> Class<? extends T> defineClass(ClassDefinition classDefinition, Class<T> superType, DynamicClassLoader classLoader) { log.debug("Defining class: %s", classDefinition.getName()); return classGenerator(classLoader).defineClass(classDefinition, superType); } }
public static <T> Class<? extends T> defineClass(ClassDefinition classDefinition, Class<T> superType, DynamicClassLoader classLoader) { log.debug("Defining class: %s", classDefinition.getName()); return classGenerator(classLoader).defineClass(classDefinition, superType); } }
public static <T> Class<? extends T> defineClass(ClassDefinition classDefinition, Class<T> superType, DynamicClassLoader classLoader) { log.debug("Defining class: %s", classDefinition.getName()); return classGenerator(classLoader).defineClass(classDefinition, superType); } }
@BeforeClass public void setUp() throws Exception { for (Class<?> aClass : ImmutableList.of(boolean[].class, char[].class, float[].class, double[].class, byte[].class, short[].class, int[].class, long[].class, String[].class)) { MethodDefinition methodDefinition = defineSetAndGetMethod(aClass); typeMethodMap.put(aClass, methodDefinition); } classGenerator(classLoader).defineClass(classDefinition, Object.class); }
public static Object execute(Function<Scope, BytecodeNode> nodeGenerator, ParameterizedType returnType, Optional<ClassLoader> parentClassLoader) throws Exception { ClassDefinition classDefinition = new ClassDefinition( a(PUBLIC, FINAL), uniqueClassName("test", "Test"), type(Object.class)); MethodDefinition method = classDefinition.declareMethod(a(PUBLIC, STATIC), "test", returnType); BytecodeNode node = nodeGenerator.apply(method.getScope()); method.getBody().append(node); String tree = dumpBytecodeTree(classDefinition); if (DUMP_BYTECODE_TREE.get()) { System.out.println(tree); } ClassLoader classLoader = parentClassLoader.orElse(BytecodeExpressionAssertions.class.getClassLoader()); return classGenerator(classLoader) .defineClass(classDefinition, Object.class) .getMethod("test") .invoke(null); } }
.dumpRawBytecode(debug) .outputTo(new PrintWriter(System.out)) .defineClass(classDefinition, Object.class);
.outputTo(writer) .dumpClassFilesTo(tempDir) .defineClass(classDefinition, Object.class);