Skip to content

Commit 657b700

Browse files
committed
Refactor dependency injection and add SLF4J for logging
Revised the DI lifecycle by introducing an initializer and renaming `startDI` to `startDependencyInjection`. Added SLF4J JDK14 for improved logging capabilities and updated related configurations in build scripts. This enhances code readability and maintainability while enabling better logging practices.
1 parent 6a9e875 commit 657b700

File tree

4 files changed

+35
-28
lines changed

4 files changed

+35
-28
lines changed

build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ dependencies {
2525
implementation(libs.guice)
2626
implementation(libs.reflections)
2727

28+
// Logging
29+
implementation(libs.slf4j.jdk14)
30+
31+
32+
// Tests
2833
testImplementation(libs.kotlin.test)
2934
testImplementation(libs.kotlin.test.junit5)
3035
testImplementation(libs.kotlinx.coroutines.test)

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ mockbukkit = { group = "org.mockbukkit.mockbukkit", name = "mockbukkit-v1.21", v
1515
reflections = { group = "org.reflections", name = "reflections", version = "0.10.2" }
1616
guice = { group = "com.google.inject", name = "guice", version = "7.0.0" }
1717
kotest = { group = "io.kotest", name = "kotest-assertions-core-jvm", version = "5.9.1" }
18+
slf4j-jdk14 = { group = "org.slf4j", name = "slf4j-jdk14" , version = "2.0.16" }
1819

1920
[plugins]
2021
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }

src/main/kotlin/dev/newspicel/di/DIJavaPlugin.kt

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,43 @@ import org.bukkit.command.CommandSender
1414
import org.bukkit.plugin.java.JavaPlugin
1515
import org.reflections.Reflections
1616
import org.reflections.util.ConfigurationBuilder
17+
import java.util.logging.Level
1718
import kotlin.reflect.KClass
1819
import kotlin.reflect.KParameter
1920
import kotlin.reflect.full.findAnnotations
2021
import kotlin.reflect.full.functions
2122

2223
abstract class DIJavaPlugin : JavaPlugin() {
2324

24-
private val stereotypes = arrayOf(MinecraftController::class, Service::class, Repository::class)
25+
private val stereotypes = listOf(MinecraftController::class, Service::class, Repository::class)
2526

26-
protected lateinit var stereotypesClasses: List<KClass<*>>
27-
private lateinit var controllerClasses: List<KClass<*>>
27+
protected val stereotypesClasses: List<KClass<*>>
28+
private val controllerClasses: List<KClass<*>>
2829

29-
open val projectPackagePath: String
30+
private val projectPackagePath: String
3031
get() = this.javaClass.`package`.name
3132

32-
abstract fun startDI()
33+
init {
34+
stereotypesClasses = scanForMinecraftStereotypes()
35+
controllerClasses = stereotypesClasses.filter { it.findAnnotations(MinecraftController::class).isNotEmpty() }
36+
logger.log(Level.FINE, "Found ${stereotypesClasses.size} Minecraft Stereotypes in $projectPackagePath")
37+
startDependencyInjection()
38+
}
39+
40+
abstract fun startDependencyInjection()
3341
abstract fun <T : Any> getExistingBinding(type: KClass<T>, qualifier: String? = null): T?
3442
abstract fun <T : Any> getInstance(type: KClass<T>, qualifier: String? = null): T?
3543

3644
abstract fun getQualifier(annotation: List<Annotation>): String?
3745

3846
override fun onLoad() {
39-
logger.info("Scanning for Minecraft controllers in $projectPackagePath")
40-
stereotypesClasses = scanForMinecraftStereotypes()
41-
controllerClasses = stereotypesClasses.filter { it.findAnnotations(MinecraftController::class).isNotEmpty() }
42-
logger.info("Found ${stereotypesClasses.size} Minecraft Stereotypes in $projectPackagePath")
43-
startDI()
4447
scanForMinecraftAnnotationsInClassesOnLoad()
45-
4648
ServerEventsHelper.triggerOnLoad(this)
4749
}
4850

4951
final override fun onEnable() {
50-
ServerEventsHelper.triggerOnEnable(this)
5152
scanForMinecraftAnnotationsInClassesOnEnable()
53+
ServerEventsHelper.triggerOnEnable(this)
5254
}
5355

5456
final override fun onDisable() {
@@ -78,43 +80,43 @@ abstract class DIJavaPlugin : JavaPlugin() {
7880
?: error("Could not find a value for parameter ${parameter.name} of type ${parameter.type}")
7981
}
8082

81-
private fun scanForMinecraftAnnotationsInClassesOnEnable() {
83+
private fun scanForMinecraftAnnotationsInClassesOnLoad() {
8284
controllerClasses.forEach { clazz ->
8385
clazz.functions.forEach { func ->
8486
func.annotations.forEach { annotation ->
8587
when (annotation) {
86-
is Command -> {
87-
CommandsHelper.registerCommand(this, annotation, func)
88+
is OnEnable -> {
89+
ServerEventsHelper.registerOnEnable(func)
8890
}
8991

90-
is TabComplete -> {
91-
CommandsHelper.registerTabComplete(this, annotation, func)
92+
is OnDisable -> {
93+
ServerEventsHelper.registerOnDisable(func)
9294
}
9395

94-
is Event -> {
95-
EventHelper.registerEvent(this, annotation, func)
96+
is OnLoad -> {
97+
ServerEventsHelper.registerOnLoad(func)
9698
}
9799
}
98100
}
99101
}
100102
}
101103
}
102104

103-
private fun scanForMinecraftAnnotationsInClassesOnLoad() {
105+
private fun scanForMinecraftAnnotationsInClassesOnEnable() {
104106
controllerClasses.forEach { clazz ->
105107
clazz.functions.forEach { func ->
106108
func.annotations.forEach { annotation ->
107109
when (annotation) {
108-
is OnEnable -> {
109-
ServerEventsHelper.registerOnEnable(func)
110+
is Command -> {
111+
CommandsHelper.registerCommand(this, annotation, func)
110112
}
111113

112-
is OnDisable -> {
113-
ServerEventsHelper.registerOnDisable(func)
114+
is TabComplete -> {
115+
CommandsHelper.registerTabComplete(this, annotation, func)
114116
}
115117

116-
is OnLoad -> {
117-
ServerEventsHelper.registerOnLoad(func)
118+
is Event -> {
119+
EventHelper.registerEvent(this, annotation, func)
118120
}
119121
}
120122
}

src/main/kotlin/dev/newspicel/di/GuiceJavaPlugin.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ abstract class GuiceJavaPlugin : DIJavaPlugin() {
1515

1616
private lateinit var injector: Injector
1717

18-
override fun startDI() {
19-
logger.info("Starting Guice injector")
18+
override fun startDependencyInjection() {
2019
val module = MinecraftGuiceModule(this, stereotypesClasses, classLoader)
2120

2221
try {

0 commit comments

Comments
 (0)