<dependencies>
<!-- ActiveJ Core -->
<dependency>
<groupId>org.activej</groupId>
<artifactId>activej</artifactId>
<version>${activej.version}</version>
</dependency>
</dependencies>
import org.activej.codegen.DefiningClassLoader;
import org.activej.codegen.ClassBuilder;
import org.activej.codegen.ClassDefiningClassLoader;
import org.activej.codegen.DefiningClassLoader;
public interface User {
String getName();
void setName(String name);
}
import org.activej.codegen.DefiningClassLoader;
import org.activej.codegen.ClassBuilder;
import org.activej.codegen.ClassDefiningClassLoader;
import org.activej.inject.Injector;
import org.junit.Test;
import java.nio.file.Path;
import java.nio.file.Paths;
public class UserCodegenTest {
@Test
public void testClassGenerator() {
ClassDefiningClassLoader classLoader = DefiningClassLoader.create();
ClassBuilder<?> classBuilder = ClassBuilder.create(classLoader)
.withClass(def -> def
.withMethod(methodDef -> methodDef
.withName("getName")
.withDefining(is -> is
.add(ByteCodeExpressions.loadThis())
.add(ByteCodeExpressions.field(this.nameField, this)))
.withReturnType(String.class))
.withMethod(methodDef -> methodDef
.withName("setName")
.withReturnType(void.class)
.withArgument(String.class, "name")
.withDefining(is -> is
.add(ByteCodeExpressions.loadThis())
.add(ByteCodeExpressions.loadVariable(1))
.add(ByteCodeExpressions.field(this.nameField, this)))));
Class<?> generatedClass = classBuilder.build();
User user = Injector.of(User.class)
.injectClass(generatedClass)
.getInstance(User.class);
user.setName("John Doe");
System.out.println(user.getName());
}
}