Skip to content

Commit fd6225e

Browse files
committed
Store referenced-by-factories classes by FQCN
Don't load them as they may reference unavailable classes
1 parent af96266 commit fd6225e

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/main/kotlin/io/github/freya022/botcommands/internal/utils/ReflectionMetadata.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import kotlin.reflect.jvm.internal.impl.load.kotlin.header.KotlinClassHeader
2626
import kotlin.reflect.jvm.jvmName
2727

2828
private typealias IsNullableAnnotated = Boolean
29+
private typealias FullClassName = String
2930

3031
internal object ReflectionMetadata {
3132
private val logger = KotlinLogging.logger { }
@@ -81,7 +82,7 @@ internal object ReflectionMetadata {
8182
.disableNestedJarScanning()
8283
.scan()
8384
.use { scan ->
84-
val referencedByFactories = hashSetOf<Class<*>>()
85+
val referencedByFactories = hashSetOf<FullClassName>()
8586
scan.allClasses
8687
.filterLibraryClasses(config, referencedByFactories)
8788
.filterClasses(config)
@@ -101,10 +102,10 @@ internal object ReflectionMetadata {
101102
scannedParams = true
102103
}
103104

104-
private fun List<ClassInfo>.filterLibraryClasses(config: BConfig, referencedByFactories: MutableSet<Class<*>>): List<ClassInfo> = filter { classInfo ->
105+
private fun List<ClassInfo>.filterLibraryClasses(config: BConfig, referencedByFactories: MutableSet<FullClassName>): List<ClassInfo> = filter { classInfo ->
105106
if (!classInfo.isFromLib()) return@filter true
106107

107-
if (classInfo.loadClass() in referencedByFactories) return@filter true
108+
if (classInfo.name in referencedByFactories) return@filter true
108109

109110
if (classInfo.isServiceOrHasFactories(config, referencedByFactories)) return@filter true
110111
if (classInfo.outerClasses.any { it.isServiceOrHasFactories(config, referencedByFactories) }) return@filter true
@@ -114,12 +115,12 @@ internal object ReflectionMetadata {
114115
return@filter false
115116
}
116117

117-
private fun ClassInfo.isServiceOrHasFactories(config: BConfig, referencedByFactories: MutableSet<Class<*>>): Boolean {
118+
private fun ClassInfo.isServiceOrHasFactories(config: BConfig, referencedByFactories: MutableSet<FullClassName>): Boolean {
118119
if (this.isService(config)) return true
119120

120121
val factories = this.methodInfo.filter { it.isService(config) }
121122
if (factories.isNotEmpty()) {
122-
referencedByFactories += factories.map { it.loadClassAndGetMethod().returnType }
123+
referencedByFactories += factories.map { it.typeDescriptor.resultType.toStringWithSimpleNames() }
123124
return true
124125
} else {
125126
return false

0 commit comments

Comments
 (0)