1
1
package com.segment.analytics.kotlin.core.platform
2
2
3
+ import com.segment.analytics.kotlin.core.Analytics
3
4
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
4
7
import kotlin.reflect.KClass
5
8
6
9
// Platform abstraction for managing plugins' execution (of a specific type)
@@ -20,13 +23,18 @@ internal class Mediator(internal val plugins: MutableList<Plugin>) {
20
23
21
24
plugins.forEach { plugin ->
22
25
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
+ }
29
34
}
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 )
30
38
}
31
39
}
32
40
}
@@ -40,7 +48,7 @@ internal class Mediator(internal val plugins: MutableList<Plugin>) {
40
48
}
41
49
}
42
50
43
- fun <T : Plugin > find (pluginClass : KClass <T >): T ? = synchronized(plugins) {
51
+ fun <T : Plugin > find (pluginClass : KClass <T >): T ? = synchronized(plugins) {
44
52
plugins.forEach {
45
53
if (pluginClass.isInstance(it)) {
46
54
return it as T
@@ -49,7 +57,7 @@ internal class Mediator(internal val plugins: MutableList<Plugin>) {
49
57
return null
50
58
}
51
59
52
- fun <T : Plugin > findAll (pluginClass : KClass <T >): List <T > = synchronized(plugins) {
60
+ fun <T : Plugin > findAll (pluginClass : KClass <T >): List <T > = synchronized(plugins) {
53
61
return plugins.filter { pluginClass.isInstance(it) } as List <T >
54
62
}
55
63
}
0 commit comments