[stats-collector] Ignore static fields in serialized objects

This commit is contained in:
Vitaliy.Bibaev
2018-07-23 12:12:58 +03:00
parent 593215d6cd
commit 036ff4cf9f
2 changed files with 19 additions and 2 deletions
@@ -19,6 +19,7 @@ import com.google.gson.GsonBuilder
import com.google.gson.internal.LinkedTreeMap
import com.intellij.stats.completion.events.*
import java.lang.reflect.Field
import java.lang.reflect.Modifier
object JsonSerializer {
private val gson = GsonBuilder().serializeNulls().create()
@@ -40,7 +41,9 @@ object JsonSerializer {
}
private fun <T> allFields(clazz: Class<T>): List<Field> {
val fields: List<Field> = clazz.declaredFields.toList()
val fields: List<Field> = clazz.declaredFields.asSequence()
.filter { !Modifier.isStatic(it.modifiers) }
.toList()
if (clazz.superclass != null) {
return fields + allFields(clazz.superclass)
}
@@ -125,7 +125,13 @@ class EventSerializeDeserializeTest {
assertThat(obj.unknownFields).hasSize(1)
assertThat(obj.unknownFields).contains("unknown_field")
}
@Test
fun `ignore static fields`() {
val obj = JsonSerializer.fromJson(JsonSerializer.toJson(WithStaticField()), WithStaticField::class.java)
assertThat(obj.absentFields).hasSize(0)
assertThat(obj.unknownFields).hasSize(0)
}
}
@@ -142,3 +148,11 @@ class Second {
val absent_field1: Double = 1.0
}
@Suppress("unused")
class WithStaticField {
companion object {
@JvmStatic
val STATIC_FIELD = 10
}
}