Fix empty resource link resolving

This commit is contained in:
Karlatemp 2022-03-30 11:52:36 +08:00
parent 51c8684e22
commit 304220708a
No known key found for this signature in database
GPG Key ID: C6B606FF23D8FED7
2 changed files with 30 additions and 17 deletions

View File

@ -31,7 +31,7 @@ internal object PMain : KotlinPlugin(JvmPluginDescription("net.mamoe.console.ite
Class.forName("net.mamoe.console.integrationtest.mod.servicetypedef.ServiceTypedef"),
javaClass.classLoader,
)
val services = loader.asSequence().map { it.javaClass.name}.toMutableList()
val services = loader.asSequence().map { it.javaClass.name }.toMutableList()
services.forEach { service ->
logger.info { "Service: $service" }
}
@ -48,5 +48,10 @@ internal object PMain : KotlinPlugin(JvmPluginDescription("net.mamoe.console.ite
// /module-service-loader-typedef-0.0.0.jar!/test-res.txt
// /module-service-loader-impl-0.0.0.jar!/test-res.txt
assertEquals(3, tstRes.size)
assertEquals(
mutableListOf(),
javaClass.classLoader.getResources("something/not/exists.bin").asSequence().toMutableList()
)
}
}

View File

@ -356,27 +356,35 @@ private operator fun <E> Enumeration<E>.plus(next: Enumeration<E>): Enumeration<
private fun <E> compoundEnumerations(iter: Iterator<Enumeration<E>>): Enumeration<E> {
return object : Enumeration<E> {
private lateinit var crt: Enumeration<E>
override fun hasMoreElements(): Boolean {
return (::crt.isInitialized && crt.hasMoreElements()) || iter.hasNext()
private var hasMore: Boolean = false
private var fetched: Boolean = false
override tailrec fun hasMoreElements(): Boolean {
if (fetched) return hasMore
if (::crt.isInitialized) {
hasMore = crt.hasMoreElements()
if (hasMore) {
fetched = true
return true
}
}
if (!iter.hasNext()) {
fetched = true
hasMore = false
return false
}
crt = iter.next()
return hasMoreElements()
}
override fun nextElement(): E {
if (::crt.isInitialized) {
val c = crt
return if (c.hasMoreElements()) {
c.nextElement()
} else if (iter.hasNext()) {
crt = iter.next()
nextElement()
} else {
throw NoSuchElementException()
if (hasMoreElements()) {
return crt.nextElement().also {
fetched = false
}
} else if (iter.hasNext()) {
crt = iter.next()
return nextElement()
} else {
throw NoSuchElementException()
}
throw NoSuchElementException()
}
}
}