@@ -13,24 +13,53 @@ import io.flutter.plugin.common.StandardMessageCodec
13
13
import java.io.ByteArrayOutputStream
14
14
import java.nio.ByteBuffer
15
15
16
- private fun wrapResult (result : Any? ): List <Any ?> {
17
- return listOf (result)
18
- }
16
+ private object MessagesPigeonUtils {
19
17
20
- private fun wrapError (exception : Throwable ): List <Any ?> {
21
- return if (exception is FlutterError ) {
22
- listOf (exception.code, exception.message, exception.details)
23
- } else {
24
- listOf (
25
- exception.javaClass.simpleName,
26
- exception.toString(),
27
- " Cause: " + exception.cause + " , Stacktrace: " + Log .getStackTraceString(exception))
18
+ fun createConnectionError (channelName : String ): FlutterError {
19
+ return FlutterError (
20
+ " channel-error" , " Unable to establish connection on channel: '$channelName '." , " " )
21
+ }
22
+
23
+ fun wrapResult (result : Any? ): List <Any ?> {
24
+ return listOf (result)
25
+ }
26
+
27
+ fun wrapError (exception : Throwable ): List <Any ?> {
28
+ return if (exception is FlutterError ) {
29
+ listOf (exception.code, exception.message, exception.details)
30
+ } else {
31
+ listOf (
32
+ exception.javaClass.simpleName,
33
+ exception.toString(),
34
+ " Cause: " + exception.cause + " , Stacktrace: " + Log .getStackTraceString(exception))
35
+ }
28
36
}
29
- }
30
37
31
- private fun createConnectionError (channelName : String ): FlutterError {
32
- return FlutterError (
33
- " channel-error" , " Unable to establish connection on channel: '$channelName '." , " " )
38
+ fun deepEquals (a : Any? , b : Any? ): Boolean {
39
+ if (a is ByteArray && b is ByteArray ) {
40
+ return a.contentEquals(b)
41
+ }
42
+ if (a is IntArray && b is IntArray ) {
43
+ return a.contentEquals(b)
44
+ }
45
+ if (a is LongArray && b is LongArray ) {
46
+ return a.contentEquals(b)
47
+ }
48
+ if (a is DoubleArray && b is DoubleArray ) {
49
+ return a.contentEquals(b)
50
+ }
51
+ if (a is Array <* > && b is Array <* >) {
52
+ return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) }
53
+ }
54
+ if (a is List <* > && b is List <* >) {
55
+ return a.size == b.size && a.indices.all { deepEquals(a[it], b[it]) }
56
+ }
57
+ if (a is Map <* , * > && b is Map <* , * >) {
58
+ return a.size == b.size &&
59
+ a.all { (b as Map <Any ?, Any ?>).containsKey(it.key) && deepEquals(it.value, b[it.key]) }
60
+ }
61
+ return a == b
62
+ }
34
63
}
35
64
36
65
/* *
@@ -46,34 +75,6 @@ class FlutterError(
46
75
val details : Any? = null
47
76
) : Throwable()
48
77
49
- private fun deepEqualsMessages (a : Any? , b : Any? ): Boolean {
50
- if (a is ByteArray && b is ByteArray ) {
51
- return a.contentEquals(b)
52
- }
53
- if (a is IntArray && b is IntArray ) {
54
- return a.contentEquals(b)
55
- }
56
- if (a is LongArray && b is LongArray ) {
57
- return a.contentEquals(b)
58
- }
59
- if (a is DoubleArray && b is DoubleArray ) {
60
- return a.contentEquals(b)
61
- }
62
- if (a is Array <* > && b is Array <* >) {
63
- return a.size == b.size && a.indices.all { deepEqualsMessages(a[it], b[it]) }
64
- }
65
- if (a is List <* > && b is List <* >) {
66
- return a.size == b.size && a.indices.all { deepEqualsMessages(a[it], b[it]) }
67
- }
68
- if (a is Map <* , * > && b is Map <* , * >) {
69
- return a.size == b.size &&
70
- a.all {
71
- (b as Map <Any ?, Any ?>).containsKey(it.key) && deepEqualsMessages(it.value, b[it.key])
72
- }
73
- }
74
- return a == b
75
- }
76
-
77
78
enum class Code (val raw : Int ) {
78
79
ONE (0 ),
79
80
TWO (1 );
@@ -118,7 +119,7 @@ data class MessageData(
118
119
if (this == = other) {
119
120
return true
120
121
}
121
- return deepEqualsMessages (toList(), other.toList())
122
+ return MessagesPigeonUtils .deepEquals (toList(), other.toList())
122
123
}
123
124
124
125
override fun hashCode (): Int = toList().hashCode()
@@ -184,7 +185,7 @@ interface ExampleHostApi {
184
185
try {
185
186
listOf (api.getHostLanguage())
186
187
} catch (exception: Throwable ) {
187
- wrapError(exception)
188
+ MessagesPigeonUtils . wrapError(exception)
188
189
}
189
190
reply.reply(wrapped)
190
191
}
@@ -207,7 +208,7 @@ interface ExampleHostApi {
207
208
try {
208
209
listOf (api.add(aArg, bArg))
209
210
} catch (exception: Throwable ) {
210
- wrapError(exception)
211
+ MessagesPigeonUtils . wrapError(exception)
211
212
}
212
213
reply.reply(wrapped)
213
214
}
@@ -228,10 +229,10 @@ interface ExampleHostApi {
228
229
api.sendMessage(messageArg) { result: Result <Boolean > ->
229
230
val error = result.exceptionOrNull()
230
231
if (error != null ) {
231
- reply.reply(wrapError(error))
232
+ reply.reply(MessagesPigeonUtils . wrapError(error))
232
233
} else {
233
234
val data = result.getOrNull()
234
- reply.reply(wrapResult(data))
235
+ reply.reply(MessagesPigeonUtils . wrapResult(data))
235
236
}
236
237
}
237
238
}
@@ -274,7 +275,7 @@ class MessageFlutterApi(
274
275
callback(Result .success(output))
275
276
}
276
277
} else {
277
- callback(Result .failure(createConnectionError(channelName)))
278
+ callback(Result .failure(MessagesPigeonUtils . createConnectionError(channelName)))
278
279
}
279
280
}
280
281
}
0 commit comments