From d0e4b236a781ec9eef0b3f667ca88ef0748f2477 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 6 Jul 2017 17:25:09 +0300 Subject: [PATCH] Parcelable: Support SortedSet, NavigableSet, SortedMap, NavigableMap --- .../android/parcel/serializers/ParcelSerializer.kt | 4 ++++ .../android/parcel/serializers/ParcelSerializers.kt | 4 ++++ .../testData/parcel/box/listKinds.kt | 10 ++++++++-- .../testData/parcel/box/mapKinds.kt | 10 ++++++++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt index 04a078deb34..b09f00778f7 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt @@ -82,6 +82,8 @@ interface ParcelSerializer { || className == ArrayList::class.java.canonicalName || className == LinkedList::class.java.canonicalName || className == Set::class.java.canonicalName + || className == SortedSet::class.java.canonicalName + || className == NavigableSet::class.java.canonicalName || className == HashSet::class.java.canonicalName || className == LinkedHashSet::class.java.canonicalName || className == TreeSet::class.java.canonicalName @@ -93,6 +95,8 @@ interface ParcelSerializer { } className == Map::class.java.canonicalName + || className == SortedMap::class.java.canonicalName + || className == NavigableMap::class.java.canonicalName || className == HashMap::class.java.canonicalName || className == LinkedHashMap::class.java.canonicalName || className == TreeMap::class.java.canonicalName diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt index b02d06d62ed..e95d14e8a62 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt @@ -204,7 +204,11 @@ abstract internal class AbstractCollectionParcelSerializer( protected val collectionType: Type = Type.getObjectType(when (asmType.internalName) { "java/util/List" -> "java/util/ArrayList" "java/util/Set" -> "java/util/LinkedHashSet" + "java/util/SortedSet" -> "java/util/TreeSet" + "java/util/NavigableSet" -> "java/util/TreeSet" "java/util/Map" -> "java/util/LinkedHashMap" + "java/util/SortedMap" -> "java/util/TreeMap" + "java/util/NavigableMap" -> "java/util/TreeMap" else -> asmType.internalName }) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt index 747359aed1b..479ddbdc3cd 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt @@ -19,7 +19,9 @@ data class Test( val f: MutableSet, val g: TreeSet, val h: HashSet, - val i: LinkedHashSet + val i: LinkedHashSet, + val j: NavigableSet, + val k: SortedSet ) : Parcelable fun box() = parcelTest { parcel -> @@ -32,7 +34,9 @@ fun box() = parcelTest { parcel -> f = mutableSetOf("F"), g = TreeSet().apply { this += "G" }, h = HashSet().apply { this += "H" }, - i = LinkedHashSet().apply { this += "I" } + i = LinkedHashSet().apply { this += "I" }, + j = TreeSet().apply { this += "J" }, + k = TreeSet().apply { this += "K" } ) first.writeToParcel(parcel, 0) @@ -45,4 +49,6 @@ fun box() = parcelTest { parcel -> assert(first == first2) assert((first.d as LinkedList<*>).size == 1) assert((first2.h as HashSet<*>).size == 1) + assert(first2.j is NavigableSet<*>) + assert(first2.k is SortedSet<*>) } \ No newline at end of file diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/mapKinds.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/mapKinds.kt index 9e1b5adc7c5..93bd64cf649 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/mapKinds.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/mapKinds.kt @@ -15,7 +15,9 @@ data class Test( val b: MutableMap, val c: HashMap, val d: LinkedHashMap, - val e: TreeMap + val e: TreeMap, + val f: SortedMap, + val g: NavigableMap ) : Parcelable fun box() = parcelTest { parcel -> @@ -24,7 +26,9 @@ fun box() = parcelTest { parcel -> b = mutableMapOf("A" to "B"), c = HashMap().apply { put("A", "B") }, d = LinkedHashMap().apply { put("A", "B") }, - e = TreeMap().apply { put("A", "B") } + e = TreeMap().apply { put("A", "B") }, + f = TreeMap().apply { put("A", "B") }, + g = TreeMap().apply { put("A", "B") } ) first.writeToParcel(parcel, 0) @@ -37,4 +41,6 @@ fun box() = parcelTest { parcel -> assert(first == first2) assert((first.c as HashMap<*, *>).size == 1) assert((first2.e as TreeMap<*, *>).size == 1) + assert(first2.f is SortedMap<*, *>) + assert(first2.g is NavigableMap<*, *>) } \ No newline at end of file