Skip to content

Commit d9bc3f5

Browse files
committed
Handle injector creation exception in GuiceJavaPlugin.
Wrap the injector creation and instance retrieval in a try-catch block to manage exceptions effectively. If an exception occurs, log the stack trace and disable the plugin to prevent further errors. Additionally, bind the Plugin and its class instance to the module.
1 parent 45738c6 commit d9bc3f5

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package dev.newspicel.di
22

3-
import com.google.inject.AbstractModule
4-
import com.google.inject.Guice
5-
import com.google.inject.Injector
6-
import com.google.inject.Key
7-
import com.google.inject.Singleton
3+
import com.google.inject.*
84
import com.google.inject.name.Named
95
import com.google.inject.name.Names
106
import org.bukkit.Server
7+
import org.bukkit.plugin.Plugin
118
import org.bukkit.plugin.java.JavaPlugin
129
import java.util.logging.Logger
1310
import kotlin.reflect.KClass
@@ -22,13 +19,19 @@ abstract class GuiceJavaPlugin : DIJavaPlugin() {
2219
logger.info("Starting Guice injector")
2320
val module = MinecraftGuiceModule(this, stereotypesClasses, classLoader)
2421

25-
injector = Guice.createInjector(module) ?: error("Could not create Guice injector")
22+
try {
23+
injector = Guice.createInjector(module) ?: error("Could not create Guice injector")
2624

27-
stereotypesClasses
28-
.filter { it.findAnnotations(MinecraftController::class).isNotEmpty() }
29-
.forEach {
30-
injector.getInstance(it.java)
31-
}
25+
stereotypesClasses
26+
.filter { it.findAnnotations(MinecraftController::class).isNotEmpty() }
27+
.forEach {
28+
injector.getInstance(it.java)
29+
}
30+
} catch (e: Exception) {
31+
e.printStackTrace()
32+
server.pluginManager.disablePlugin(this)
33+
return
34+
}
3235
}
3336

3437
override fun <T : Any> getExistingBinding(type: KClass<T>, qualifier: String?): T? {
@@ -72,6 +75,8 @@ class MinecraftGuiceModule(
7275
bind(JavaPlugin::class.java).toInstance(plugin)
7376
bind(GuiceJavaPlugin::class.java).toInstance(plugin)
7477
bind(DIJavaPlugin::class.java).toInstance(plugin)
78+
bind(Plugin::class.java).toInstance(plugin)
79+
bind(plugin.javaClass).toInstance(plugin)
7580
bind(Server::class.java).toInstance(plugin.server)
7681
bind(ClassLoader::class.java).toInstance(classLoader)
7782

0 commit comments

Comments
 (0)