Add JSON module

Signed-off-by: Graham <gpe@openrs2.dev>
Graham 4 years ago
parent 08afa71d30
commit 5aa92fd600
  1. 2
      asm/build.gradle.kts
  2. 3
      asm/src/main/java/dev/openrs2/asm/AsmModule.kt
  3. 3
      conf/src/main/java/dev/openrs2/conf/ConfigProvider.kt
  4. 4
      deob-processor/src/main/java/dev/openrs2/deob/processor/NameMapProcessor.kt
  5. 1
      deob-util/build.gradle.kts
  6. 3
      deob-util/src/main/java/dev/openrs2/deob/util/map/NameMapProvider.kt
  7. 1
      deob/build.gradle.kts
  8. 3
      deob/src/main/java/dev/openrs2/deob/ProfileProvider.kt
  9. 27
      json/build.gradle.kts
  10. 8
      json/src/main/java/dev/openrs2/json/Json.kt
  11. 18
      json/src/main/java/dev/openrs2/json/JsonModule.kt
  12. 19
      json/src/main/java/dev/openrs2/json/ObjectMapperProvider.kt
  13. 1
      settings.gradle.kts
  14. 8
      yaml/src/main/java/dev/openrs2/yaml/Yaml.kt
  15. 1
      yaml/src/main/java/dev/openrs2/yaml/YamlModule.kt

@ -5,7 +5,7 @@ plugins {
dependencies { dependencies {
api(project(":util")) api(project(":util"))
api(project(":yaml")) api("com.fasterxml.jackson.core:jackson-databind:${Versions.jackson}")
api("com.google.inject:guice:${Versions.guice}") api("com.google.inject:guice:${Versions.guice}")
api("org.ow2.asm:asm:${Versions.asm}") api("org.ow2.asm:asm:${Versions.asm}")
api("org.ow2.asm:asm-commons:${Versions.asm}") api("org.ow2.asm:asm-commons:${Versions.asm}")

@ -3,12 +3,9 @@ package dev.openrs2.asm
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.multibindings.Multibinder import com.google.inject.multibindings.Multibinder
import dev.openrs2.yaml.YamlModule
public object AsmModule : AbstractModule() { public object AsmModule : AbstractModule() {
override fun configure() { override fun configure() {
install(YamlModule)
Multibinder.newSetBinder(binder(), Module::class.java) Multibinder.newSetBinder(binder(), Module::class.java)
.addBinding().to(AsmJacksonModule::class.java) .addBinding().to(AsmJacksonModule::class.java)
} }

@ -1,12 +1,13 @@
package dev.openrs2.conf package dev.openrs2.conf
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import dev.openrs2.yaml.Yaml
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Paths import java.nio.file.Paths
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
public class ConfigProvider @Inject constructor(private val mapper: ObjectMapper) : Provider<Config> { public class ConfigProvider @Inject constructor(@Yaml private val mapper: ObjectMapper) : Provider<Config> {
override fun get(): Config { override fun get(): Config {
if (Files.notExists(CONFIG_PATH)) { if (Files.notExists(CONFIG_PATH)) {
Files.copy(EXAMPLE_CONFIG_PATH, CONFIG_PATH) Files.copy(EXAMPLE_CONFIG_PATH, CONFIG_PATH)

@ -2,6 +2,7 @@ package dev.openrs2.deob.processor
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import com.google.inject.Guice import com.google.inject.Guice
import com.google.inject.Key
import com.sun.source.util.Trees import com.sun.source.util.Trees
import dev.openrs2.asm.MemberRef import dev.openrs2.asm.MemberRef
import dev.openrs2.asm.toInternalClassName import dev.openrs2.asm.toInternalClassName
@ -12,6 +13,7 @@ import dev.openrs2.deob.util.map.Field
import dev.openrs2.deob.util.map.Method import dev.openrs2.deob.util.map.Method
import dev.openrs2.deob.util.map.NameMap import dev.openrs2.deob.util.map.NameMap
import dev.openrs2.util.io.useAtomicBufferedWriter import dev.openrs2.util.io.useAtomicBufferedWriter
import dev.openrs2.yaml.Yaml
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
import java.nio.file.Paths import java.nio.file.Paths
@ -45,7 +47,7 @@ public class NameMapProcessor : AbstractProcessor() {
init { init {
val injector = Guice.createInjector(DeobfuscatorProcessorModule) val injector = Guice.createInjector(DeobfuscatorProcessorModule)
mapper = injector.getInstance(ObjectMapper::class.java) mapper = injector.getInstance(Key.get(ObjectMapper::class.java, Yaml::class.java))
} }
override fun init(env: ProcessingEnvironment) { override fun init(env: ProcessingEnvironment) {

@ -5,6 +5,7 @@ plugins {
dependencies { dependencies {
api(project(":asm")) api(project(":asm"))
api(project(":yaml"))
} }
publishing { publishing {

@ -1,13 +1,14 @@
package dev.openrs2.deob.util.map package dev.openrs2.deob.util.map
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import dev.openrs2.yaml.Yaml
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
import java.nio.file.Paths import java.nio.file.Paths
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
public class NameMapProvider @Inject constructor(private val mapper: ObjectMapper) : Provider<NameMap> { public class NameMapProvider @Inject constructor(@Yaml private val mapper: ObjectMapper) : Provider<NameMap> {
override fun get(): NameMap { override fun get(): NameMap {
val combinedMap = NameMap() val combinedMap = NameMap()

@ -14,6 +14,7 @@ dependencies {
implementation(project(":bundler")) implementation(project(":bundler"))
implementation(project(":deob-annotations")) implementation(project(":deob-annotations"))
implementation(project(":deob-util")) implementation(project(":deob-util"))
implementation(project(":yaml"))
implementation("com.google.guava:guava:${Versions.guava}") implementation("com.google.guava:guava:${Versions.guava}")
implementation("it.unimi.dsi:fastutil:${Versions.fastutil}") implementation("it.unimi.dsi:fastutil:${Versions.fastutil}")
implementation("org.jgrapht:jgrapht-core:${Versions.jgrapht}") implementation("org.jgrapht:jgrapht-core:${Versions.jgrapht}")

@ -1,12 +1,13 @@
package dev.openrs2.deob package dev.openrs2.deob
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import dev.openrs2.yaml.Yaml
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Paths import java.nio.file.Paths
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
public class ProfileProvider @Inject constructor(private val mapper: ObjectMapper) : Provider<Profile> { public class ProfileProvider @Inject constructor(@Yaml private val mapper: ObjectMapper) : Provider<Profile> {
override fun get(): Profile { override fun get(): Profile {
return Files.newBufferedReader(PATH).use { reader -> return Files.newBufferedReader(PATH).use { reader ->
mapper.readValue(reader, Profile::class.java) mapper.readValue(reader, Profile::class.java)

@ -0,0 +1,27 @@
plugins {
`maven-publish`
kotlin("jvm")
}
dependencies {
api("com.fasterxml.jackson.core:jackson-databind:${Versions.jackson}")
api("com.google.inject:guice:${Versions.guice}")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:${Versions.jackson}")
}
publishing {
publications.create<MavenPublication>("maven") {
from(components["java"])
pom {
packaging = "jar"
name.set("OpenRS2 JSON")
description.set(
"""
Guava module for creating a JSON ObjectMapper.
""".trimIndent()
)
}
}
}

@ -0,0 +1,8 @@
package dev.openrs2.json
import javax.inject.Qualifier
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FIELD, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION)
public annotation class Json

@ -0,0 +1,18 @@
package dev.openrs2.json
import com.fasterxml.jackson.databind.Module
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.inject.AbstractModule
import com.google.inject.Scopes
import com.google.inject.multibindings.Multibinder
public object JsonModule : AbstractModule() {
override fun configure() {
Multibinder.newSetBinder(binder(), Module::class.java)
bind(ObjectMapper::class.java)
.annotatedWith(Json::class.java)
.toProvider(ObjectMapperProvider::class.java)
.`in`(Scopes.SINGLETON)
}
}

@ -0,0 +1,19 @@
package dev.openrs2.json
import com.fasterxml.jackson.databind.Module
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
import javax.inject.Inject
import javax.inject.Provider
public class ObjectMapperProvider @Inject constructor(
private val modules: Set<@JvmSuppressWildcards Module>
) : Provider<ObjectMapper> {
override fun get(): ObjectMapper {
return ObjectMapper()
.registerKotlinModule()
.registerModules(modules)
.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
}
}

@ -19,6 +19,7 @@ include(
"deob-processor", "deob-processor",
"deob-util", "deob-util",
"game", "game",
"json",
"nonfree", "nonfree",
"nonfree:client", "nonfree:client",
"nonfree:gl", "nonfree:gl",

@ -0,0 +1,8 @@
package dev.openrs2.yaml
import javax.inject.Qualifier
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FIELD, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION)
public annotation class Yaml

@ -11,6 +11,7 @@ public object YamlModule : AbstractModule() {
Multibinder.newSetBinder(binder(), Module::class.java) Multibinder.newSetBinder(binder(), Module::class.java)
bind(ObjectMapper::class.java) bind(ObjectMapper::class.java)
.annotatedWith(Yaml::class.java)
.toProvider(ObjectMapperProvider::class.java) .toProvider(ObjectMapperProvider::class.java)
.`in`(Scopes.SINGLETON) .`in`(Scopes.SINGLETON)
} }

Loading…
Cancel
Save