Remove unused json stuff

This commit is contained in:
DBotThePony 2024-04-26 15:01:11 +07:00
parent 6ffa54fb27
commit b0913d1522
Signed by: DBot
GPG Key ID: DCC23B5715498507
8 changed files with 8 additions and 193 deletions

View File

@ -1,8 +0,0 @@
package ru.dbotthepony.kstarbound.defs.projectile
import ru.dbotthepony.kstarbound.json.builder.JsonFactory
@JsonFactory
data class ProjectileDefinition(
val projectileName: String
)

View File

@ -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()
}

View File

@ -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)

View File

@ -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
}

View File

@ -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)
}
}
// загружаем указатели на стек

View File

@ -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

View File

@ -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)
}

View File

@ -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>)
}