Reduce mutability in JarLibraryReader

Signed-off-by: Scu11 <scu11@openrs2.dev>
pull/102/head
Scu11 4 years ago
parent 9b42b1ff81
commit fabd5ff22a
  1. 5
      asm/src/main/java/dev/openrs2/asm/classpath/Library.kt
  2. 28
      asm/src/main/java/dev/openrs2/asm/io/JarLibraryReader.kt

@ -5,8 +5,9 @@ import org.objectweb.asm.commons.Remapper
import org.objectweb.asm.tree.ClassNode
import java.util.TreeMap
class Library() : Iterable<ClassNode> {
private var classes = TreeMap<String, ClassNode>()
class Library(classes: Map<String, ClassNode> = emptyMap()) : Iterable<ClassNode> {
private var classes = TreeMap(classes)
constructor(library: Library) : this() {
for (clazz in library.classes.values) {

@ -4,27 +4,29 @@ import dev.openrs2.asm.classpath.JsrInliner
import dev.openrs2.asm.classpath.Library
import org.objectweb.asm.ClassReader
import org.objectweb.asm.tree.ClassNode
import java.util.jar.JarEntry
import java.util.jar.JarInputStream
class JarLibraryReader(private val input: JarInputStream) : LibraryReader {
override fun read(): Library {
val library = Library()
val classes = generateSequence { input.nextJarEntry }
.filter(::isClass)
.map { input.readClass() }
.associateBy(ClassNode::name)
while (true) {
val entry = input.nextJarEntry ?: break
if (!entry.name.endsWith(CLASS_SUFFIX)) {
continue
}
val clazz = ClassNode()
val reader = ClassReader(input)
reader.accept(JsrInliner(clazz), ClassReader.SKIP_DEBUG or ClassReader.SKIP_FRAMES)
return Library(classes)
}
library.add(clazz)
}
private fun isClass(entry: JarEntry): Boolean {
return entry.name.endsWith(CLASS_SUFFIX)
}
return library
private fun JarInputStream.readClass(): ClassNode {
val clazz = ClassNode()
val reader = ClassReader(this)
reader.accept(JsrInliner(clazz), ClassReader.SKIP_DEBUG or ClassReader.SKIP_FRAMES)
return clazz
}
private companion object {

Loading…
Cancel
Save