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.ObjectOpenHashSet
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.kstarbound.defs.util.flattenJsonElement
import kotlin.properties.Delegates import kotlin.properties.Delegates
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.KMutableProperty1 import kotlin.reflect.KMutableProperty1
@ -60,15 +59,9 @@ class BuilderAdapter<T : Any> private constructor(
val instance = factory.invoke() val instance = factory.invoke()
var json: JsonObject by Delegates.notNull() var json: JsonObject by Delegates.notNull()
if (instance is IJsonHolder || flatProperties.isNotEmpty()) { if (flatProperties.isNotEmpty()) {
json = TypeAdapters.JSON_ELEMENT.read(reader) as JsonObject json = TypeAdapters.JSON_ELEMENT.read(reader) as JsonObject
reader = JsonTreeReader(json) 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 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.github.benmanes.caffeine.cache.Interner
import com.google.common.collect.ImmutableList
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonElement import com.google.gson.JsonElement
import com.google.gson.JsonNull import com.google.gson.JsonNull
import com.google.gson.JsonObject 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.JsonToken
import com.google.gson.stream.JsonWriter import com.google.gson.stream.JsonWriter
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap 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.ints.IntArrayList
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap
import it.unimi.dsi.fastutil.objects.ObjectArraySet import it.unimi.dsi.fastutil.objects.ObjectArraySet
import org.apache.logging.log4j.LogManager 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.consumeNull
import ru.dbotthepony.kommons.gson.value import ru.dbotthepony.kommons.gson.value
import ru.dbotthepony.kommons.util.Either
import ru.dbotthepony.kstarbound.Starbound
import java.lang.reflect.Constructor import java.lang.reflect.Constructor
import java.util.Collections import java.util.*
import java.util.function.Function import java.util.function.Function
import kotlin.jvm.internal.DefaultConstructorMarker import kotlin.jvm.internal.DefaultConstructorMarker
import kotlin.properties.Delegates 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.declaredMembers
import kotlin.reflect.full.isSubclassOf
import kotlin.reflect.full.isSupertypeOf import kotlin.reflect.full.isSupertypeOf
import kotlin.reflect.full.primaryConstructor 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>)
}