Интернинация sbpattern
This commit is contained in:
parent
6646c1879d
commit
6aca9d40f1
@ -3,6 +3,7 @@ package ru.dbotthepony.kstarbound.util
|
|||||||
import com.google.common.collect.ImmutableList
|
import com.google.common.collect.ImmutableList
|
||||||
import com.google.common.collect.ImmutableMap
|
import com.google.common.collect.ImmutableMap
|
||||||
import com.google.common.collect.ImmutableSet
|
import com.google.common.collect.ImmutableSet
|
||||||
|
import com.google.common.collect.Interners
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.TypeAdapter
|
import com.google.gson.TypeAdapter
|
||||||
import com.google.gson.TypeAdapterFactory
|
import com.google.gson.TypeAdapterFactory
|
||||||
@ -102,6 +103,7 @@ class SBPattern private constructor(
|
|||||||
override fun <T : Any?> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? {
|
override fun <T : Any?> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? {
|
||||||
if (type.rawType == SBPattern::class.java) {
|
if (type.rawType == SBPattern::class.java) {
|
||||||
return object : TypeAdapter<SBPattern>() {
|
return object : TypeAdapter<SBPattern>() {
|
||||||
|
private val interner = Interners.newWeakInterner<SBPattern>()
|
||||||
private val strings = gson.getAdapter(String::class.java)
|
private val strings = gson.getAdapter(String::class.java)
|
||||||
|
|
||||||
override fun write(out: JsonWriter, value: SBPattern?) {
|
override fun write(out: JsonWriter, value: SBPattern?) {
|
||||||
@ -109,7 +111,7 @@ class SBPattern private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun read(`in`: JsonReader): SBPattern? {
|
override fun read(`in`: JsonReader): SBPattern? {
|
||||||
return of(strings.read(`in`) ?: return null)
|
return interner.intern(of(strings.read(`in`) ?: return null))
|
||||||
}
|
}
|
||||||
} as TypeAdapter<T>
|
} as TypeAdapter<T>
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user