Remove unused json stuff
This commit is contained in:
parent
6ffa54fb27
commit
b0913d1522
src/main/kotlin/ru/dbotthepony/kstarbound
@ -1,8 +0,0 @@
|
||||
package ru.dbotthepony.kstarbound.defs.projectile
|
||||
|
||||
import ru.dbotthepony.kstarbound.json.builder.JsonFactory
|
||||
|
||||
@JsonFactory
|
||||
data class ProjectileDefinition(
|
||||
val projectileName: String
|
||||
)
|
@ -1,39 +0,0 @@
|
||||
package ru.dbotthepony.kstarbound.defs.util
|
||||
|
||||
import com.github.benmanes.caffeine.cache.Interner
|
||||
import com.google.common.collect.ImmutableList
|
||||
import com.google.common.collect.ImmutableMap
|
||||
|
||||
/**
|
||||
* Возвращает глубокую, неизменяемую копию [input] примитивов/List'ов/Map'ов
|
||||
*/
|
||||
fun enrollList(input: List<Any>, interner: Interner<String> = Interner { it }): ImmutableList<Any> {
|
||||
val builder = ImmutableList.builder<Any>()
|
||||
|
||||
for (v in input) {
|
||||
when (v) {
|
||||
is Map<*, *> -> builder.add(enrollMap(v as Map<String, Any>, interner))
|
||||
is List<*> -> builder.add(enrollList(v as List<Any>, interner))
|
||||
else -> builder.add((v as? String)?.let(interner::intern) ?: v)
|
||||
}
|
||||
}
|
||||
|
||||
return builder.build()
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает глубокую, неизменяемую копию [input] примитивов/List'ов/Map'ов
|
||||
*/
|
||||
fun enrollMap(input: Map<String, Any>, interner: Interner<String> = Interner { it }): ImmutableMap<String, Any> {
|
||||
val builder = ImmutableMap.builder<String, Any>()
|
||||
|
||||
for ((k, v) in input) {
|
||||
when (v) {
|
||||
is Map<*, *> -> builder.put(interner.intern(k), enrollMap(v as Map<String, Any>, interner))
|
||||
is List<*> -> builder.put(interner.intern(k), enrollList(v as List<Any>, interner))
|
||||
else -> builder.put(interner.intern(k), (v as? String)?.let(interner::intern) ?: v)
|
||||
}
|
||||
}
|
||||
|
||||
return builder.build()
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
package ru.dbotthepony.kstarbound.defs.util
|
||||
|
||||
import com.github.benmanes.caffeine.cache.Interner
|
||||
import com.google.gson.JsonArray
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.JsonNull
|
||||
import com.google.gson.JsonObject
|
||||
import com.google.gson.JsonPrimitive
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap
|
||||
|
||||
private fun flattenJsonPrimitive(input: JsonPrimitive, interner: Interner<String> = Interner { it }): Any {
|
||||
if (input.isNumber) {
|
||||
return input.asNumber
|
||||
} else if (input.isString) {
|
||||
return interner.intern(input.asString)
|
||||
} else {
|
||||
return input.asBoolean
|
||||
}
|
||||
}
|
||||
|
||||
private fun flattenJsonArray(input: JsonArray, interner: Interner<String> = Interner { it }): ArrayList<Any> {
|
||||
val flattened = ArrayList<Any>(input.size())
|
||||
|
||||
for (v in input) {
|
||||
when (v) {
|
||||
is JsonObject -> flattened.add(flattenJsonObject(v, interner))
|
||||
is JsonArray -> flattened.add(flattenJsonArray(v, interner))
|
||||
is JsonPrimitive -> flattened.add(flattenJsonPrimitive(v, interner))
|
||||
// is JsonNull -> baked.add(null)
|
||||
}
|
||||
}
|
||||
|
||||
return flattened
|
||||
}
|
||||
|
||||
private fun flattenJsonObject(input: JsonObject, interner: Interner<String> = Interner { it }): MutableMap<String, Any> {
|
||||
val flattened = HashMap<String, Any>()
|
||||
|
||||
for ((k, v) in input.entrySet()) {
|
||||
when (v) {
|
||||
is JsonObject -> flattened[k] = flattenJsonObject(v, interner)
|
||||
is JsonArray -> flattened[k] = flattenJsonArray(v, interner)
|
||||
is JsonPrimitive -> flattened[k] = flattenJsonPrimitive(v, interner)
|
||||
}
|
||||
}
|
||||
|
||||
return flattened
|
||||
}
|
||||
|
||||
fun flattenJsonElement(input: JsonElement, interner: Interner<String> = Interner { it }): Any? {
|
||||
return when (input) {
|
||||
is JsonObject -> flattenJsonObject(input, interner)
|
||||
is JsonArray -> flattenJsonArray(input, interner)
|
||||
is JsonPrimitive -> flattenJsonPrimitive(input, interner)
|
||||
is JsonNull -> null
|
||||
else -> throw IllegalArgumentException("Unknown argument $input")
|
||||
}
|
||||
}
|
||||
|
||||
fun flattenJsonElement(input: JsonObject, interner: Interner<String> = Interner { it }) = flattenJsonObject(input, interner)
|
||||
fun flattenJsonElement(input: JsonArray, interner: Interner<String> = Interner { it }) = flattenJsonArray(input, interner)
|
||||
fun flattenJsonElement(input: JsonPrimitive, interner: Interner<String> = Interner { it }) = flattenJsonPrimitive(input, interner)
|
@ -1,34 +0,0 @@
|
||||
package ru.dbotthepony.kstarbound.defs.util
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap
|
||||
|
||||
/**
|
||||
* Возвращает глубокую изменяемую копию [input] примитивов/List'ов/Map'ов
|
||||
*/
|
||||
fun flattenList(input: List<Any>): ArrayList<Any> {
|
||||
val list = ArrayList<Any>(input.size)
|
||||
|
||||
for (v in input) {
|
||||
when (v) {
|
||||
is Map<*, *> -> list.add(flattenMap(v as Map<String, Any>))
|
||||
is List<*> -> list.add(flattenList(v as List<Any>))
|
||||
else -> list.add(v)
|
||||
}
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
|
||||
fun flattenMap(input: Map<String, Any>): Object2ObjectArrayMap<String, Any> {
|
||||
val map = Object2ObjectArrayMap<String, Any>()
|
||||
|
||||
for ((k, v) in input) {
|
||||
when (v) {
|
||||
is Map<*, *> -> map[k] = flattenMap(v as Map<String, Any>)
|
||||
is List<*> -> map[k] = flattenList(v as List<Any>)
|
||||
else -> map[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
return map
|
||||
}
|
@ -17,7 +17,6 @@ import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet
|
||||
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet
|
||||
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.kstarbound.defs.util.flattenJsonElement
|
||||
import kotlin.properties.Delegates
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KMutableProperty1
|
||||
@ -60,15 +59,9 @@ class BuilderAdapter<T : Any> private constructor(
|
||||
val instance = factory.invoke()
|
||||
var json: JsonObject by Delegates.notNull()
|
||||
|
||||
if (instance is IJsonHolder || flatProperties.isNotEmpty()) {
|
||||
if (flatProperties.isNotEmpty()) {
|
||||
json = TypeAdapters.JSON_ELEMENT.read(reader) as JsonObject
|
||||
reader = JsonTreeReader(json)
|
||||
|
||||
if (instance is INativeJsonHolder) {
|
||||
instance.acceptJson(flattenJsonElement(json, stringInterner::intern))
|
||||
} else if (instance is IJsonHolder) {
|
||||
instance.acceptJson(json)
|
||||
}
|
||||
}
|
||||
|
||||
// загружаем указатели на стек
|
||||
|
@ -1,10 +1,8 @@
|
||||
package ru.dbotthepony.kstarbound.json.builder
|
||||
|
||||
import com.google.common.collect.ImmutableList
|
||||
import com.google.common.collect.ImmutableMap
|
||||
import com.github.benmanes.caffeine.cache.Interner
|
||||
import com.google.common.collect.ImmutableList
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonArray
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.JsonNull
|
||||
import com.google.gson.JsonObject
|
||||
@ -18,26 +16,23 @@ import com.google.gson.stream.JsonReader
|
||||
import com.google.gson.stream.JsonToken
|
||||
import com.google.gson.stream.JsonWriter
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
|
||||
import it.unimi.dsi.fastutil.ints.IntArrayList
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArraySet
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.kommons.util.Either
|
||||
import ru.dbotthepony.kstarbound.Starbound
|
||||
import ru.dbotthepony.kstarbound.defs.util.enrollList
|
||||
import ru.dbotthepony.kstarbound.defs.util.enrollMap
|
||||
import ru.dbotthepony.kstarbound.defs.util.flattenJsonElement
|
||||
import ru.dbotthepony.kommons.gson.consumeNull
|
||||
import ru.dbotthepony.kommons.gson.value
|
||||
import ru.dbotthepony.kommons.util.Either
|
||||
import ru.dbotthepony.kstarbound.Starbound
|
||||
import java.lang.reflect.Constructor
|
||||
import java.util.Collections
|
||||
import java.util.*
|
||||
import java.util.function.Function
|
||||
import kotlin.jvm.internal.DefaultConstructorMarker
|
||||
import kotlin.properties.Delegates
|
||||
import kotlin.reflect.*
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KFunction
|
||||
import kotlin.reflect.KProperty1
|
||||
import kotlin.reflect.full.declaredMembers
|
||||
import kotlin.reflect.full.isSubclassOf
|
||||
import kotlin.reflect.full.isSupertypeOf
|
||||
import kotlin.reflect.full.primaryConstructor
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
package ru.dbotthepony.kstarbound.json.builder
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
|
||||
/**
|
||||
* Данный интерфейс имеет один единственный метод: [acceptJson]
|
||||
*
|
||||
* Используется в связке с [BuilderAdapter] для классов, которым необходимо хранить оригинальную JSON структуру
|
||||
*/
|
||||
interface IJsonHolder {
|
||||
/**
|
||||
* Выставляет [JsonObject], который является источником данных для данной структуры
|
||||
*/
|
||||
fun acceptJson(json: JsonObject)
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package ru.dbotthepony.kstarbound.json.builder
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import ru.dbotthepony.kstarbound.defs.util.flattenJsonElement
|
||||
|
||||
/**
|
||||
* Для классов, которые хотят принимать Java'вские [Map] напрямую, как оригинальную JSON структуру
|
||||
*/
|
||||
interface INativeJsonHolder : IJsonHolder {
|
||||
override fun acceptJson(json: JsonObject) {
|
||||
acceptJson(flattenJsonElement(json))
|
||||
}
|
||||
|
||||
fun acceptJson(json: MutableMap<String, Any>)
|
||||
}
|
Loading…
Reference in New Issue
Block a user