diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/IThingWithDescription.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/IThingWithDescription.kt index dc6ebbb2..14f3d6ab 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/IThingWithDescription.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/IThingWithDescription.kt @@ -52,6 +52,7 @@ data class ThingDescription( val ADAPTER = FactoryAdapter.Builder(ThingDescription::class, ThingDescription::shortdescription, ThingDescription::description) + .logMisses(false) .build() } } diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/BuilderAdapter.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/BuilderAdapter.kt index ba2e6f87..dba7e5c9 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/BuilderAdapter.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/BuilderAdapter.kt @@ -154,9 +154,8 @@ class BuilderAdapter 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 private constructor( private val flatProperties = ArrayList>() private val ignoreKeys = ObjectArraySet() var extraPropertiesAreFatal = false - var logMisses = true + var logMisses: Boolean? = null /** * Являются ли "лишние" ключи в JSON структуре ошибкой. @@ -320,6 +319,8 @@ class BuilderAdapter private constructor( * Данный подход позволяет избавиться от постоянного наследования и реализации одного и того же интерфейса во множестве других классов. * * Флаг [extraPropertiesAreFatal] не поддерживается с данными свойствами + * + * Если [logMisses] не указан явно, то он будет выставлен на false */ fun flat(property: KMutableProperty1, adapter: TypeAdapter, configurator: PropertyConfigurator.() -> Unit = {}): Builder { val config = _add(property, adapter, configurator) @@ -413,7 +414,7 @@ class BuilderAdapter private constructor( flatProperties = map2.build(), ignoreKeys = ImmutableSet.copyOf(ignoreKeys), extraPropertiesAreFatal = extraPropertiesAreFatal, - logMisses = logMisses, + logMisses = logMisses ?: flatProperties.isEmpty(), ) } } diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/FactoryAdapter.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/FactoryAdapter.kt index d5218e66..129b34c6 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/FactoryAdapter.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/FactoryAdapter.kt @@ -35,7 +35,8 @@ class FactoryAdapter private constructor( val bound: KClass, private val types: ImmutableList>, val asJsonArray: Boolean, - val storesJson: Boolean + val storesJson: Boolean, + val logMisses: Boolean, ) : TypeAdapter() { private data class PackedProperty( val property: KProperty1, @@ -247,7 +248,7 @@ class FactoryAdapter 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 private constructor( */ var storesJson = false - fun storesJson(): Builder { - storesJson = true + /** + * Логировать ли несуществующие свойства у класса когда они попадаются в исходной JSON структуре + */ + var logMisses = true + + fun storesJson(flag: Boolean = true): Builder { + storesJson = flag + return this + } + + /** + * Логировать ли json значения которые нет в списке свойств + */ + fun logMisses(flag: Boolean = true): Builder { + logMisses = flag return this } @@ -572,6 +586,7 @@ class FactoryAdapter private constructor( types = ImmutableList.copyOf(types), asJsonArray = asList, storesJson = storesJson, + logMisses = logMisses, ) } }