Skip to content

Commit 25fa4c1

Browse files
authored
Fix to handle Scala 2.11 limited support for functional interfaces (#163)
1 parent e35052e commit 25fa4c1

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/main/scala/com/comcast/xfinity/sirius/api/AbstractParallelBootstrapRequestHandler.scala

+20-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.comcast.xfinity.sirius.api
22

33
import java.util.concurrent.ConcurrentHashMap
4+
import java.util.function.BiFunction
45

56
abstract class AbstractParallelBootstrapRequestHandler[K, M] extends RequestHandler {
67
private var sequences: Option[ConcurrentHashMap[K, Long]] = None
@@ -38,12 +39,16 @@ abstract class AbstractParallelBootstrapRequestHandler[K, M] extends RequestHand
3839
var result: SiriusResult = SiriusResult.none()
3940
// deserialize the body before calling compute to reduce lock contention
4041
val message = deserialize(body)
41-
map.compute(k, (_, existing) => {
42-
if (existing < sequence) {
43-
result = handlePutImpl(sequence, k, message)
42+
43+
// Scala 2.11 has limited support for Java functional interfaces
44+
val updateFunction = new BiFunction[K, Long, Long]() {
45+
override def apply(key: K, existing: Long): Long = if (existing < sequence) {
46+
result = handlePutImpl(sequence, key, message)
4447
sequence
4548
} else existing
46-
})
49+
}
50+
51+
map.compute(k, updateFunction)
4752
result
4853
}
4954
case None => handlePutImpl(sequence, createKey(key), deserialize(body))
@@ -54,12 +59,17 @@ abstract class AbstractParallelBootstrapRequestHandler[K, M] extends RequestHand
5459
sequences match {
5560
case Some(map) =>
5661
var result: SiriusResult = SiriusResult.none()
57-
map.compute(createKey(key), (k, existing) => {
58-
if (existing < sequence) {
59-
result = handleDeleteImpl(sequence, k)
60-
sequence
61-
} else existing
62-
})
62+
63+
// Scala 2.11 has limited support for Java functional interfaces
64+
val updateFunction = new BiFunction[K, Long, Long] {
65+
override def apply(key: K, existing: Long): Long =
66+
if (existing < sequence) {
67+
result = handleDeleteImpl(sequence, key)
68+
sequence
69+
} else existing
70+
}
71+
72+
map.compute(createKey(key), updateFunction)
6373
result
6474
case None => handleDeleteImpl(sequence, createKey(key))
6575
}

0 commit comments

Comments
 (0)