From c55a6db148bde94e278a32639b49175597757ed9 Mon Sep 17 00:00:00 2001 From: Tanish Azad Date: Wed, 29 May 2024 20:42:26 +0530 Subject: [PATCH] integrated di framework --- annotations/build.gradle | 6 +++++- .../jdi/core/processor/ListenerLoader.java | 8 ++++++-- build.gradle | 2 +- example/build.gradle | 2 ++ example/echo-bot/build.gradle | 2 +- .../com/javadiscord/jdi/example/EchoHandler.java | 12 +++++++++++- .../main/java/com/javadiscord/jdi/example/Main.java | 11 ++++++++++- 7 files changed, 36 insertions(+), 7 deletions(-) diff --git a/annotations/build.gradle b/annotations/build.gradle index 3d5e5504..fa1056ec 100644 --- a/annotations/build.gradle +++ b/annotations/build.gradle @@ -1,4 +1,8 @@ dependencies { + api 'io.avaje:avaje-inject:9.12' + annotationProcessor 'io.avaje:avaje-inject-generator:9.12' + implementation 'org.javassist:javassist:3.30.2-GA' + testImplementation project(":core") -} \ No newline at end of file +} diff --git a/annotations/src/main/java/com/javadiscord/jdi/core/processor/ListenerLoader.java b/annotations/src/main/java/com/javadiscord/jdi/core/processor/ListenerLoader.java index b7d9a79d..4350e7ed 100644 --- a/annotations/src/main/java/com/javadiscord/jdi/core/processor/ListenerLoader.java +++ b/annotations/src/main/java/com/javadiscord/jdi/core/processor/ListenerLoader.java @@ -6,11 +6,15 @@ import com.javadiscord.jdi.core.annotations.EventListener; +import io.avaje.inject.BeanScope; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ListenerLoader { private static final Logger LOGGER = LogManager.getLogger(ListenerLoader.class); + + private final BeanScope beanScope = BeanScope.builder().build(); private final EventListenerValidator eventListenerValidator = new EventListenerValidator(); private final List eventListeners; @@ -29,8 +33,8 @@ public void loadListeners() { try { Class clazz = Class.forName(ClassFileUtil.getClassName(classFile)); if (clazz.isAnnotationPresent(EventListener.class)) { + registerListener(clazz); if (validateListener(clazz)) { - registerListener(clazz); } else { LOGGER.error("{} failed validation", clazz.getName()); } @@ -43,7 +47,7 @@ public void loadListeners() { private void registerListener(Class clazz) { try { - eventListeners.add(getZeroArgConstructor(clazz).newInstance()); + eventListeners.add(beanScope.get(clazz)); LOGGER.info("Registered listener {}", clazz.getName()); } catch (Exception e) { LOGGER.error("Failed to create {} instance", clazz.getName(), e); diff --git a/build.gradle b/build.gradle index 01993fde..fcd24ec1 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ group = 'com.javadiscord' version = project.version subprojects { - apply plugin: 'java' + apply plugin: 'java-library' apply plugin: 'com.diffplug.spotless' spotless { diff --git a/example/build.gradle b/example/build.gradle index e90e0f44..2f1e1f1e 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -1,5 +1,7 @@ allprojects { dependencies { + annotationProcessor 'io.avaje:avaje-inject-generator:9.12' + implementation project(":core") implementation project(":annotations") implementation project(":models") diff --git a/example/echo-bot/build.gradle b/example/echo-bot/build.gradle index 598ab2f0..736aeb73 100644 --- a/example/echo-bot/build.gradle +++ b/example/echo-bot/build.gradle @@ -14,4 +14,4 @@ shadowJar { archiveBaseName.set('example-bot') archiveClassifier.set('') archiveVersion.set('') -} \ No newline at end of file +} diff --git a/example/echo-bot/src/main/java/com/javadiscord/jdi/example/EchoHandler.java b/example/echo-bot/src/main/java/com/javadiscord/jdi/example/EchoHandler.java index abf0e539..ff9c7a63 100644 --- a/example/echo-bot/src/main/java/com/javadiscord/jdi/example/EchoHandler.java +++ b/example/echo-bot/src/main/java/com/javadiscord/jdi/example/EchoHandler.java @@ -6,14 +6,24 @@ import com.javadiscord.jdi.core.api.builders.CreateMessageBuilder; import com.javadiscord.jdi.core.models.message.Message; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; + @EventListener +@Singleton public class EchoHandler { + private final String prefix; + + @Inject + public EchoHandler(String prefix) { + this.prefix = prefix; + } @MessageCreate public void echoMessages(Message message, Guild guild) { if (!message.author().bot()) { guild.channel().createMessage( - new CreateMessageBuilder(message.channelId()).content(message.content()) + new CreateMessageBuilder(message.channelId()).content(prefix + message.content()) ); } } diff --git a/example/echo-bot/src/main/java/com/javadiscord/jdi/example/Main.java b/example/echo-bot/src/main/java/com/javadiscord/jdi/example/Main.java index 940bacf7..09a766eb 100644 --- a/example/echo-bot/src/main/java/com/javadiscord/jdi/example/Main.java +++ b/example/echo-bot/src/main/java/com/javadiscord/jdi/example/Main.java @@ -2,9 +2,18 @@ import com.javadiscord.jdi.core.Discord; +import io.avaje.inject.Bean; +import io.avaje.inject.Factory; + +@Factory public class Main { public static void main(String[] args) { - Discord discord = new Discord(System.getenv("BOT_TOKEN")); + Discord discord = new Discord(""); discord.start(); } + + @Bean + public static String prefix() { + return "Message: "; + } }