Add NameMapProvider

It returns a single NameMap combining all the maps in share/deob-map.
This will ultimately be fed into the RemapTransformer/TypedRemapper in
the deobfuscator.

Signed-off-by: Graham <gpe@openrs2.dev>
Graham 5 years ago
parent 435dee8b6d
commit e25918a8a0
  1. 5
      deob-map/src/main/java/dev/openrs2/deob/map/DeobfuscatorMapModule.kt
  2. 11
      deob-map/src/main/java/dev/openrs2/deob/map/NameMap.kt
  3. 32
      deob-map/src/main/java/dev/openrs2/deob/map/NameMapProvider.kt

@ -2,6 +2,7 @@ package dev.openrs2.deob.map
import com.fasterxml.jackson.databind.Module import com.fasterxml.jackson.databind.Module
import com.google.inject.AbstractModule import com.google.inject.AbstractModule
import com.google.inject.Scopes
import com.google.inject.multibindings.Multibinder import com.google.inject.multibindings.Multibinder
import dev.openrs2.yaml.YamlModule import dev.openrs2.yaml.YamlModule
@ -11,5 +12,9 @@ object DeobfuscatorMapModule : AbstractModule() {
Multibinder.newSetBinder(binder(), Module::class.java) Multibinder.newSetBinder(binder(), Module::class.java)
.addBinding().to(DeobfuscatorMapJacksonModule::class.java) .addBinding().to(DeobfuscatorMapJacksonModule::class.java)
bind(NameMap::class.java)
.toProvider(NameMapProvider::class.java)
.`in`(Scopes.SINGLETON)
} }
} }

@ -2,9 +2,18 @@ package dev.openrs2.deob.map
import dev.openrs2.asm.MemberRef import dev.openrs2.asm.MemberRef
import java.util.SortedMap import java.util.SortedMap
import java.util.TreeMap
data class NameMap( data class NameMap(
val classes: SortedMap<String, String>, val classes: SortedMap<String, String>,
val fields: SortedMap<MemberRef, Field>, val fields: SortedMap<MemberRef, Field>,
val methods: SortedMap<MemberRef, Method> val methods: SortedMap<MemberRef, Method>
) ) {
constructor() : this(TreeMap(), TreeMap(), TreeMap())
fun add(other: NameMap) {
classes.putAll(other.classes)
fields.putAll(other.fields)
methods.putAll(other.methods)
}
}

@ -0,0 +1,32 @@
package dev.openrs2.deob.map
import com.fasterxml.jackson.databind.ObjectMapper
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import javax.inject.Inject
import javax.inject.Provider
class NameMapProvider @Inject constructor(private val mapper: ObjectMapper) : Provider<NameMap> {
override fun get(): NameMap {
val combinedMap = NameMap()
for (file in Files.list(PATH).filter(::isYamlFile)) {
val map = Files.newBufferedReader(file).use { reader ->
mapper.readValue(reader, NameMap::class.java)
}
combinedMap.add(map)
}
return combinedMap
}
private fun isYamlFile(path: Path): Boolean {
return Files.isRegularFile(path) && path.fileName.toString().endsWith(YAML_SUFFIX)
}
companion object {
private val PATH = Paths.get("share/deob-map")
private const val YAML_SUFFIX = ".yaml"
}
}
Loading…
Cancel
Save