logMisses флаги и ещё парочка штук

This commit is contained in:
DBotThePony 2023-01-20 22:20:10 +07:00
parent b077b22180
commit c42cde3372
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 25 additions and 8 deletions

View File

@ -52,6 +52,7 @@ data class ThingDescription(
val ADAPTER = FactoryAdapter.Builder(ThingDescription::class,
ThingDescription::shortdescription,
ThingDescription::description)
.logMisses(false)
.build()
}
}

View File

@ -154,9 +154,8 @@ class BuilderAdapter<T : Any> private constructor(
throw JsonSyntaxException("$name is not a valid property of ${instance::class.qualifiedName}")
}
if (logMisses && !loggedMisses.contains(name)) {
if (logMisses && loggedMisses.add(name)) {
LOGGER.warn("${instance::class.qualifiedName} has no property for storing $name")
loggedMisses.add(name)
}
reader.skipValue()
@ -245,7 +244,7 @@ class BuilderAdapter<T : Any> private constructor(
private val flatProperties = ArrayList<WrappedProperty<T, *>>()
private val ignoreKeys = ObjectArraySet<String>()
var extraPropertiesAreFatal = false
var logMisses = true
var logMisses: Boolean? = null
/**
* Являются ли "лишние" ключи в JSON структуре ошибкой.
@ -320,6 +319,8 @@ class BuilderAdapter<T : Any> private constructor(
* Данный подход позволяет избавиться от постоянного наследования и реализации одного и того же интерфейса во множестве других классов.
*
* Флаг [extraPropertiesAreFatal] не поддерживается с данными свойствами
*
* Если [logMisses] не указан явно, то он будет выставлен на false
*/
fun <V> flat(property: KMutableProperty1<T, V>, adapter: TypeAdapter<V>, configurator: PropertyConfigurator<T, V>.() -> Unit = {}): Builder<T> {
val config = _add(property, adapter, configurator)
@ -413,7 +414,7 @@ class BuilderAdapter<T : Any> private constructor(
flatProperties = map2.build(),
ignoreKeys = ImmutableSet.copyOf(ignoreKeys),
extraPropertiesAreFatal = extraPropertiesAreFatal,
logMisses = logMisses,
logMisses = logMisses ?: flatProperties.isEmpty(),
)
}
}

View File

@ -35,7 +35,8 @@ class FactoryAdapter<T : Any> private constructor(
val bound: KClass<T>,
private val types: ImmutableList<PackedProperty<T, *>>,
val asJsonArray: Boolean,
val storesJson: Boolean
val storesJson: Boolean,
val logMisses: Boolean,
) : TypeAdapter<T>() {
private data class PackedProperty<Clazz : Any, T>(
val property: KProperty1<Clazz, T>,
@ -247,7 +248,7 @@ class FactoryAdapter<T : Any> private constructor(
val fieldId = name2index.getInt(name)
if (fieldId == -1) {
if (!storesJson && !hasFlatValues && loggedMisses.add(name)) {
if (!storesJson && !hasFlatValues && logMisses && loggedMisses.add(name)) {
if (currentSymbolicName == null) {
LOGGER.warn("${bound.qualifiedName} has no property for storing $name ")
} else {
@ -396,8 +397,21 @@ class FactoryAdapter<T : Any> private constructor(
*/
var storesJson = false
fun storesJson(): Builder<T> {
storesJson = true
/**
* Логировать ли несуществующие свойства у класса когда они попадаются в исходной JSON структуре
*/
var logMisses = true
fun storesJson(flag: Boolean = true): Builder<T> {
storesJson = flag
return this
}
/**
* Логировать ли json значения которые нет в списке свойств
*/
fun logMisses(flag: Boolean = true): Builder<T> {
logMisses = flag
return this
}
@ -572,6 +586,7 @@ class FactoryAdapter<T : Any> private constructor(
types = ImmutableList.copyOf(types),
asJsonArray = asList,
storesJson = storesJson,
logMisses = logMisses,
)
}
}