@@ -8,11 +8,9 @@ import com.onesignal.debug.internal.logging.Logging
8
8
class ServiceProvider (
9
9
registrations : List <ServiceRegistration <* >>,
10
10
) : IServiceProvider {
11
- private var serviceMap: Map <Class <* >, List <ServiceRegistration <* >>>
11
+ private val serviceMap = mutableMapOf <Class <* >, MutableList <ServiceRegistration <* >>>()
12
12
13
13
init {
14
- val serviceMap = mutableMapOf<Class <* >, MutableList <ServiceRegistration <* >>>()
15
-
16
14
// go through the registrations to create the service map for easier lookup post-build
17
15
for (reg in registrations) {
18
16
for (service in reg.services) {
@@ -23,8 +21,6 @@ class ServiceProvider(
23
21
}
24
22
}
25
23
}
26
-
27
- this .serviceMap = serviceMap
28
24
}
29
25
30
26
internal inline fun <reified T : Any > hasService (): Boolean {
@@ -44,23 +40,27 @@ class ServiceProvider(
44
40
}
45
41
46
42
override fun <T > hasService (c : Class <T >): Boolean {
47
- return serviceMap.containsKey(c)
43
+ synchronized(serviceMap) {
44
+ return serviceMap.containsKey(c)
45
+ }
48
46
}
49
47
50
48
override fun <T > getAllServices (c : Class <T >): List <T > {
51
- val listOfServices: MutableList <T > = mutableListOf ()
49
+ synchronized(serviceMap) {
50
+ val listOfServices: MutableList <T > = mutableListOf ()
52
51
53
- if (serviceMap.containsKey(c)) {
54
- for (serviceReg in serviceMap!! [c]!! ) {
55
- val service =
56
- serviceReg.resolve(this ) as T ?
57
- ? : throw Exception (" Could not instantiate service: $serviceReg " )
52
+ if (serviceMap.containsKey(c)) {
53
+ for (serviceReg in serviceMap!! [c]!! ) {
54
+ val service =
55
+ serviceReg.resolve(this ) as T ?
56
+ ? : throw Exception (" Could not instantiate service: $serviceReg " )
58
57
59
- listOfServices.add(service)
58
+ listOfServices.add(service)
59
+ }
60
60
}
61
- }
62
61
63
- return listOfServices
62
+ return listOfServices
63
+ }
64
64
}
65
65
66
66
override fun <T > getService (c : Class <T >): T {
@@ -74,11 +74,10 @@ class ServiceProvider(
74
74
}
75
75
76
76
override fun <T > getServiceOrNull (c : Class <T >): T ? {
77
- Logging .debug(" ${indent} Retrieving service $c " )
78
- // indent += " "
79
- val service = serviceMap[c]?.last()?.resolve(this ) as T ?
80
- // indent = indent.substring(0, indent.length-2)
81
- return service
77
+ synchronized(serviceMap) {
78
+ Logging .debug(" ${indent} Retrieving service $c " )
79
+ return serviceMap[c]?.last()?.resolve(this ) as T ?
80
+ }
82
81
}
83
82
84
83
companion object {
0 commit comments