diff --git a/app/src/main/java/fr/free/nrw/commons/wikidata/json/NamespaceTypeAdapter.kt b/app/src/main/java/fr/free/nrw/commons/wikidata/json/NamespaceTypeAdapter.kt index 09f1dc5e854..2657507dade 100644 --- a/app/src/main/java/fr/free/nrw/commons/wikidata/json/NamespaceTypeAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/wikidata/json/NamespaceTypeAdapter.kt @@ -2,7 +2,6 @@ package fr.free.nrw.commons.wikidata.json import com.google.gson.TypeAdapter import com.google.gson.stream.JsonReader -import com.google.gson.stream.JsonToken import com.google.gson.stream.JsonWriter import fr.free.nrw.commons.wikidata.model.page.Namespace import java.io.IOException @@ -14,13 +13,5 @@ class NamespaceTypeAdapter : TypeAdapter() { } @Throws(IOException::class) - override fun read(reader: JsonReader): Namespace { - if (reader.peek() == JsonToken.STRING) { - // Prior to 3210ce44, we marshaled Namespace as the name string of the enum, instead of - // the code number. This introduces a backwards-compatible check for the string value. - // TODO: remove after April 2017, when all older namespaces have been deserialized. - return Namespace.valueOf(reader.nextString()) - } - return Namespace.of(reader.nextInt()) - } + override fun read(reader: JsonReader): Namespace = Namespace.of(reader.nextInt()) } diff --git a/app/src/main/java/fr/free/nrw/commons/wikidata/model/EnumCodeMap.kt b/app/src/main/java/fr/free/nrw/commons/wikidata/model/EnumCodeMap.kt index 4b358cc4987..427383635eb 100644 --- a/app/src/main/java/fr/free/nrw/commons/wikidata/model/EnumCodeMap.kt +++ b/app/src/main/java/fr/free/nrw/commons/wikidata/model/EnumCodeMap.kt @@ -1,25 +1,12 @@ package fr.free.nrw.commons.wikidata.model -import android.util.SparseArray - class EnumCodeMap( enumeration: Class, ) where T : Enum, T : EnumCode { - private val map: SparseArray - - init { - map = codeToEnumMap(enumeration) - } - - operator fun get(code: Int): T = map.get(code) ?: throw IllegalArgumentException("code=$code") + private val map: HashMap = + enumeration.enumConstants.associateByTo(HashMap()) { it.code() } - private fun codeToEnumMap(enumeration: Class): SparseArray { - val ret = SparseArray() - for (value in enumeration.enumConstants) { - ret.put(value.code(), value) - } - return ret - } + operator fun get(code: Int): T = map[code] ?: throw IllegalArgumentException("code=$code") - fun size(): Int = map.size() + fun size(): Int = map.size } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/wikidata/json/NamespaceTypeAdapterTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/wikidata/json/NamespaceTypeAdapterTest.kt new file mode 100644 index 00000000000..5f1178ee10c --- /dev/null +++ b/app/src/test/kotlin/fr/free/nrw/commons/wikidata/json/NamespaceTypeAdapterTest.kt @@ -0,0 +1,26 @@ +package fr.free.nrw.commons.wikidata.json + +import com.google.gson.stream.JsonReader +import com.google.gson.stream.JsonWriter +import fr.free.nrw.commons.wikidata.model.page.Namespace +import org.junit.Assert.assertEquals +import org.junit.Test +import java.io.StringReader +import java.io.StringWriter + +class NamespaceTypeAdapterTest { + private val adapter = NamespaceTypeAdapter() + + @Test + fun `reads integer namespace code`() { + val reader = JsonReader(StringReader("6")) + assertEquals(Namespace.FILE, adapter.read(reader)) + } + + @Test + fun `writes namespace as integer code`() { + val sw = StringWriter() + adapter.write(JsonWriter(sw), Namespace.FILE) + assertEquals("6", sw.toString()) + } +}