11package com.segment.analytics.kotlin.core.platform
22
3+ import com.segment.analytics.kotlin.core.Analytics
34import 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
47import 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