Skip to content

Commit d1abef3

Browse files
committed
fix: correct ConditionalOnMissingComponent inheritance check
Fix isAssignableFrom direction in evaluateMissingComponentConditions to properly check if loaded components are assignable to the missing component type. Previously checked the inverse relationship, causing incorrect conditional component loading. Also refactored to use Class.forName with the component's classLoader instead of Kotlin reflection for more reliable class comparison across different plugin classloaders.
1 parent 83146c1 commit d1abef3

2 files changed

Lines changed: 11 additions & 5 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
77
javaVersion=25
88
mcVersion=1.21.11
99
group=dev.slne.surf
10-
version=1.21.11-2.59.1
10+
version=1.21.11-2.59.2
1111
relocationPrefix=dev.slne.surf.surfapi.libs
1212
snapshot=false

surf-api-core/surf-api-core-server/src/main/kotlin/dev/slne/surf/surfapi/core/server/component/ComponentService.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ abstract class ComponentService {
233233
if (!evaluateEnvironmentConditions(componentMeta, logger)) return null
234234

235235
// Evaluate @ConditionalOnMissingComponent
236-
if (!evaluateMissingComponentConditions(componentMeta, loadedComponents, logger)) return null
236+
if (!evaluateMissingComponentConditions(componentMeta, loadedComponents, classLoader, logger)) return null
237237

238238
// Evaluate @ConditionalOnProperty
239239
if (!evaluatePropertyConditions(owner, componentMeta, logger)) return null
@@ -291,13 +291,19 @@ abstract class ComponentService {
291291
private fun evaluateMissingComponentConditions(
292292
componentMeta: PluginComponentMeta.Component,
293293
loadedComponents: List<ComponentEntry>,
294+
classLoader: ClassLoader,
294295
logger: ComponentLogger
295296
): Boolean {
296297
for (missingComponent in componentMeta.conditionalOnMissingComponents) {
297298
val isLoaded = loadedComponents.any { (component) ->
298-
val kClass = component::class
299-
val className = kClass.qualifiedName ?: kClass.java.name
300-
className == missingComponent
299+
val loadedComponentClass = component.javaClass
300+
val missingComponentClass = try {
301+
Class.forName(missingComponent, false, classLoader)
302+
} catch (_: ClassNotFoundException) {
303+
null
304+
}
305+
306+
missingComponentClass != null && missingComponentClass.isAssignableFrom(loadedComponentClass)
301307
}
302308
if (isLoaded) {
303309
logger.debug(

0 commit comments

Comments
 (0)