From c31251bef578ce6afac595e8e92a846319c776ef Mon Sep 17 00:00:00 2001 From: darken Date: Wed, 27 Dec 2023 12:49:46 +0100 Subject: [PATCH] IO: Fix LocalPath serializing transient fields for already deleted files in NORMAL mode `segmentsCache` is an internal performance improvement and should not be stored when serializing a `LocalPath` --- .../sdmse/common/files/local/LocalPath.kt | 2 +- .../sdmse/common/files/local/LocalPathTest.kt | 26 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app-common-io/src/main/java/eu/darken/sdmse/common/files/local/LocalPath.kt b/app-common-io/src/main/java/eu/darken/sdmse/common/files/local/LocalPath.kt index 0eacb2f3f..f1a4bc7fe 100644 --- a/app-common-io/src/main/java/eu/darken/sdmse/common/files/local/LocalPath.kt +++ b/app-common-io/src/main/java/eu/darken/sdmse/common/files/local/LocalPath.kt @@ -32,7 +32,7 @@ data class LocalPath( @IgnoredOnParcel override val name: String get() = file.name - @IgnoredOnParcel internal var segmentsCache: Segments? = null + @IgnoredOnParcel @Transient internal var segmentsCache: Segments? = null @IgnoredOnParcel override val segments: Segments diff --git a/app-common-io/src/test/java/eu/darken/sdmse/common/files/local/LocalPathTest.kt b/app-common-io/src/test/java/eu/darken/sdmse/common/files/local/LocalPathTest.kt index d163fca18..c984a041f 100644 --- a/app-common-io/src/test/java/eu/darken/sdmse/common/files/local/LocalPathTest.kt +++ b/app-common-io/src/test/java/eu/darken/sdmse/common/files/local/LocalPathTest.kt @@ -27,12 +27,15 @@ class LocalPathTest : BaseTest() { } @Test - fun `test direct serialization`() { + fun `direct serialization with transient fields`() { testFile.tryMkFile() val original = LocalPath.build(file = testFile) val adapter = moshi.adapter(LocalPath::class.java) + // segmentsCache needs to be ignored during serialization + println(original.segments.toString()) + val json = adapter.toJson(original) json.toComparableJson() shouldBe """ { @@ -44,6 +47,27 @@ class LocalPathTest : BaseTest() { adapter.fromJson(json) shouldBe original } + @Test + fun `deserialization needs to respect transient fields`() { + testFile.tryMkFile() + val original = LocalPath.build(file = testFile) + + val adapter = moshi.adapter(LocalPath::class.java) + + val json = """ + { + "file": "${testFile.path}", + "pathType":"LOCAL", + "segmentsCache": [ + ".", + "testfile" + ] + } + """.toComparableJson() + + adapter.fromJson(json) shouldBe original + } + @Test fun `test polymorph serialization`() { testFile.tryMkFile()