From 9b2009913dfe381805ee6fb2be0f2affc1387ee7 Mon Sep 17 00:00:00 2001 From: Anton Malinskiy Date: Sat, 4 Sep 2021 13:46:50 +1000 Subject: [PATCH] fix(core): explicitly serialise File due to upstream issue see https://github.com/google/gson/issues/1875 --- buildSrc/src/main/kotlin/Versions.kt | 2 +- .../kotlin/com/malinskiy/marathon/di/Modules.kt | 10 ++++++++-- .../com/malinskiy/marathon/json/FileSerializer.kt | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 core/src/main/kotlin/com/malinskiy/marathon/json/FileSerializer.kt diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 00b81e816..e3f2667ce 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -23,7 +23,7 @@ object Versions { val espressoRules = "1.0.1" val espressoRunner = "1.0.1" val junit = "4.12" - val gson = "2.8.7" + val gson = "2.8.8" val apacheCommonsText = "1.9" val apacheCommonsIO = "2.9.0" val influxDbClient = "2.21" diff --git a/core/src/main/kotlin/com/malinskiy/marathon/di/Modules.kt b/core/src/main/kotlin/com/malinskiy/marathon/di/Modules.kt index f3066ac59..db0093f53 100644 --- a/core/src/main/kotlin/com/malinskiy/marathon/di/Modules.kt +++ b/core/src/main/kotlin/com/malinskiy/marathon/di/Modules.kt @@ -1,6 +1,6 @@ package com.malinskiy.marathon.di -import com.google.gson.Gson +import com.google.gson.GsonBuilder import com.malinskiy.marathon.Marathon import com.malinskiy.marathon.analytics.TrackerFactory import com.malinskiy.marathon.analytics.external.AnalyticsFactory @@ -8,11 +8,13 @@ import com.malinskiy.marathon.analytics.internal.pub.Track import com.malinskiy.marathon.execution.Configuration import com.malinskiy.marathon.execution.progress.ProgressReporter import com.malinskiy.marathon.io.FileManager +import com.malinskiy.marathon.json.FileSerializer import com.malinskiy.marathon.time.SystemTimer import com.malinskiy.marathon.time.Timer import org.koin.core.KoinApplication import org.koin.core.context.startKoin import org.koin.dsl.module +import java.io.File import java.time.Clock val analyticsModule = module { @@ -23,7 +25,11 @@ val analyticsModule = module { val coreModule = module { single { FileManager(get().outputDir) } - single { Gson() } + single { + GsonBuilder() + .registerTypeAdapter(File::class.java, FileSerializer()) + .create() + } single { Clock.systemDefaultZone() } single { SystemTimer(get()) } single { ProgressReporter(get()) } diff --git a/core/src/main/kotlin/com/malinskiy/marathon/json/FileSerializer.kt b/core/src/main/kotlin/com/malinskiy/marathon/json/FileSerializer.kt new file mode 100644 index 000000000..0b51cf878 --- /dev/null +++ b/core/src/main/kotlin/com/malinskiy/marathon/json/FileSerializer.kt @@ -0,0 +1,14 @@ +package com.malinskiy.marathon.json + +import com.google.gson.JsonElement +import com.google.gson.JsonPrimitive +import com.google.gson.JsonSerializationContext +import com.google.gson.JsonSerializer +import java.io.File +import java.lang.reflect.Type + +internal class FileSerializer : JsonSerializer { + override fun serialize(src: File, typeOfSrc: Type?, context: JsonSerializationContext?): JsonElement { + return JsonPrimitive(src.absolutePath) + } +}