Skip to content

Commit 108a98f

Browse files
authored
Fix app crash resulting from plugin throwing exception. (#139)
1 parent a959c6b commit 108a98f

File tree

1 file changed

+16
-8
lines changed
  • core/src/main/java/com/segment/analytics/kotlin/core/platform

1 file changed

+16
-8
lines changed

core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.segment.analytics.kotlin.core.platform
22

3+
import com.segment.analytics.kotlin.core.Analytics
34
import com.segment.analytics.kotlin.core.BaseEvent
5+
import com.segment.analytics.kotlin.core.platform.plugins.logger.LogFilterKind
6+
import com.segment.analytics.kotlin.core.platform.plugins.logger.segmentLog
47
import kotlin.reflect.KClass
58

69
// Platform abstraction for managing plugins' execution (of a specific type)
@@ -20,13 +23,18 @@ internal class Mediator(internal val plugins: MutableList<Plugin>) {
2023

2124
plugins.forEach { plugin ->
2225
result?.let {
23-
when (plugin) {
24-
is DestinationPlugin -> {
25-
plugin.execute(it)
26-
}
27-
else -> {
28-
result = plugin.execute(it)
26+
try {
27+
when (plugin) {
28+
is DestinationPlugin -> {
29+
plugin.execute(it)
30+
}
31+
else -> {
32+
result = plugin.execute(it)
33+
}
2934
}
35+
} catch (t: Throwable) {
36+
Analytics.segmentLog("Caught Exception in plugin: $t", kind = LogFilterKind.ERROR)
37+
Analytics.segmentLog("Skipping plugin due to Exception: $plugin", kind = LogFilterKind.WARNING)
3038
}
3139
}
3240
}
@@ -40,7 +48,7 @@ internal class Mediator(internal val plugins: MutableList<Plugin>) {
4048
}
4149
}
4250

43-
fun <T: Plugin> find(pluginClass: KClass<T>): T? = synchronized(plugins) {
51+
fun <T : Plugin> find(pluginClass: KClass<T>): T? = synchronized(plugins) {
4452
plugins.forEach {
4553
if (pluginClass.isInstance(it)) {
4654
return it as T
@@ -49,7 +57,7 @@ internal class Mediator(internal val plugins: MutableList<Plugin>) {
4957
return null
5058
}
5159

52-
fun <T: Plugin> findAll(pluginClass: KClass<T>): List<T> = synchronized(plugins) {
60+
fun <T : Plugin> findAll(pluginClass: KClass<T>): List<T> = synchronized(plugins) {
5361
return plugins.filter { pluginClass.isInstance(it) } as List<T>
5462
}
5563
}

0 commit comments

Comments
 (0)