Skip to content

Commit f8e65d7

Browse files
authored
fixes #381: Refactor: remove unnecessary Null safety (#433)
* fixes #381: Refactor: remove unnecessary Null safety * rebase
1 parent 0c79620 commit f8e65d7

File tree

3 files changed

+60
-53
lines changed

3 files changed

+60
-53
lines changed

kafka-connect-neo4j/src/main/kotlin/streams/kafka/connect/sink/converters/MapValueConverter.kt

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import java.util.*
88

99
open class MapValueConverter<T>: AbstractConverter<MutableMap<String, T?>>() {
1010

11-
open fun setValue(result: MutableMap<String, T?>?, fieldName: String?, value: Any?) {
12-
if (result != null && fieldName != null) {
11+
open fun setValue(result: MutableMap<String, T?>?, fieldName: String, value: Any?) {
12+
if (result != null) {
1313
result[fieldName] = value as T
1414
}
1515
}
@@ -18,50 +18,46 @@ open class MapValueConverter<T>: AbstractConverter<MutableMap<String, T?>>() {
1818
return mutableMapOf()
1919
}
2020

21-
override fun setBytesField(result: MutableMap<String, T?>?, fieldName: String?, value: ByteArray?) {
21+
override fun setBytesField(result: MutableMap<String, T?>?, fieldName: String, value: ByteArray?) {
2222
setValue(result, fieldName, value)
2323
}
2424

25-
override fun setStringField(result: MutableMap<String, T?>?, fieldName: String?, value: String?) {
25+
override fun setStringField(result: MutableMap<String, T?>?, fieldName: String, value: String?) {
2626
setValue(result, fieldName, value)
2727
}
2828

29-
override fun setFloat32Field(result: MutableMap<String, T?>?, fieldName: String?, value: Float?) {
29+
override fun setFloat32Field(result: MutableMap<String, T?>?, fieldName: String, value: Float?) {
3030
setValue(result, fieldName, value)
3131
}
3232

33-
override fun setInt32Field(result: MutableMap<String, T?>?, fieldName: String?, value: Int?) {
33+
override fun setInt32Field(result: MutableMap<String, T?>?, fieldName: String, value: Int?) {
3434
setValue(result, fieldName, value)
3535
}
3636

37-
override fun setArray(result: MutableMap<String, T?>?, fieldName: String?, schema: Schema?, array: MutableList<Any?>?) {
37+
override fun setArray(result: MutableMap<String, T?>?, fieldName: String, schema: Schema?, array: MutableList<Any?>?) {
3838
val convertedArray = array?.map { convertInner(it) }
3939
setValue(result, fieldName, convertedArray)
4040
}
4141

42-
override fun setTimestampField(result: MutableMap<String, T?>?, fieldName: String?, value: Date?) {
42+
override fun setTimestampField(result: MutableMap<String, T?>?, fieldName: String, value: Date) {
4343
setValue(result, fieldName, value)
4444

4545
}
4646

47-
override fun setTimeField(result: MutableMap<String, T?>?, fieldName: String?, value: Date?) {
47+
override fun setTimeField(result: MutableMap<String, T?>?, fieldName: String, value: Date) {
4848
setValue(result, fieldName, value)
4949
}
5050

51-
override fun setInt8Field(result: MutableMap<String, T?>?, fieldName: String?, value: Byte?) {
51+
override fun setInt8Field(result: MutableMap<String, T?>?, fieldName: String, value: Byte) {
5252
setValue(result, fieldName, value)
5353
}
5454

55-
override fun setStructField(result: MutableMap<String, T?>?, fieldName: String?, value: Struct?) {
56-
if (value != null) {
57-
val converted = convert(value) as MutableMap<Any?, Any?>
58-
setMap(result, fieldName, null, converted)
59-
} else {
60-
setNullField(result, fieldName)
61-
}
55+
override fun setStructField(result: MutableMap<String, T?>?, fieldName: String, value: Struct) {
56+
val converted = convert(value) as MutableMap<Any?, Any?>
57+
setMap(result, fieldName, null, converted)
6258
}
6359

64-
override fun setMap(result: MutableMap<String, T?>?, fieldName: String?, schema: Schema?, value: MutableMap<Any?, Any?>?) {
60+
override fun setMap(result: MutableMap<String, T?>?, fieldName: String, schema: Schema?, value: MutableMap<Any?, Any?>?) {
6561
if (value != null) {
6662
val converted = convert(value) as MutableMap<Any?, Any?>
6763
setValue(result, fieldName, converted)
@@ -70,31 +66,31 @@ open class MapValueConverter<T>: AbstractConverter<MutableMap<String, T?>>() {
7066
}
7167
}
7268

73-
override fun setNullField(result: MutableMap<String, T?>?, fieldName: String?) {
69+
override fun setNullField(result: MutableMap<String, T?>?, fieldName: String) {
7470
setValue(result, fieldName, null)
7571
}
7672

77-
override fun setFloat64Field(result: MutableMap<String, T?>?, fieldName: String?, value: Double?) {
73+
override fun setFloat64Field(result: MutableMap<String, T?>?, fieldName: String, value: Double) {
7874
setValue(result, fieldName, value)
7975
}
8076

81-
override fun setInt16Field(result: MutableMap<String, T?>?, fieldName: String?, value: Short?) {
77+
override fun setInt16Field(result: MutableMap<String, T?>?, fieldName: String, value: Short) {
8278
setValue(result, fieldName, value)
8379
}
8480

85-
override fun setInt64Field(result: MutableMap<String, T?>?, fieldName: String?, value: Long?) {
81+
override fun setInt64Field(result: MutableMap<String, T?>?, fieldName: String, value: Long) {
8682
setValue(result, fieldName, value)
8783
}
8884

89-
override fun setBooleanField(result: MutableMap<String, T?>?, fieldName: String?, value: Boolean?) {
85+
override fun setBooleanField(result: MutableMap<String, T?>?, fieldName: String, value: Boolean) {
9086
setValue(result, fieldName, value)
9187
}
9288

93-
override fun setDecimalField(result: MutableMap<String, T?>?, fieldName: String?, value: BigDecimal?) {
89+
override fun setDecimalField(result: MutableMap<String, T?>?, fieldName: String, value: BigDecimal) {
9490
setValue(result, fieldName, value)
9591
}
9692

97-
override fun setDateField(result: MutableMap<String, T?>?, fieldName: String?, value: Date?) {
93+
override fun setDateField(result: MutableMap<String, T?>?, fieldName: String, value: Date) {
9894
setValue(result, fieldName, value)
9995
}
10096

kafka-connect-neo4j/src/main/kotlin/streams/kafka/connect/sink/converters/Neo4jValueConverter.kt

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class Neo4jValueConverter: MapValueConverter<Value>() {
1515
@JvmStatic private val UTC = ZoneId.of("UTC")
1616
}
1717

18-
override fun setValue(result: MutableMap<String, Value?>?, fieldName: String?, value: Any?) {
19-
if (result != null && fieldName != null) {
18+
override fun setValue(result: MutableMap<String, Value?>?, fieldName: String, value: Any?) {
19+
if (result != null) {
2020
result[fieldName] = Values.value(value) ?: Values.NULL
2121
}
2222
}
@@ -25,43 +25,31 @@ class Neo4jValueConverter: MapValueConverter<Value>() {
2525
return mutableMapOf()
2626
}
2727

28-
override fun setDecimalField(result: MutableMap<String, Value?>?, fieldName: String?, value: BigDecimal?) {
29-
val doubleValue = value?.toDouble()
28+
override fun setDecimalField(result: MutableMap<String, Value?>?, fieldName: String, value: BigDecimal) {
29+
val doubleValue = value.toDouble()
3030
val fitsScale = doubleValue != Double.POSITIVE_INFINITY
3131
&& doubleValue != Double.NEGATIVE_INFINITY
32-
&& value?.compareTo(doubleValue?.let { BigDecimal.valueOf(it) }) == 0
32+
&& value.compareTo(doubleValue.let { BigDecimal.valueOf(it) }) == 0
3333
if (fitsScale) {
3434
setValue(result, fieldName, doubleValue)
3535
} else {
36-
setValue(result, fieldName, value?.toPlainString())
36+
setValue(result, fieldName, value.toPlainString())
3737
}
3838
}
3939

40-
override fun setTimestampField(result: MutableMap<String, Value?>?, fieldName: String?, value: Date?) {
41-
if (value != null) {
42-
val localDate = value.toInstant().atZone(UTC).toLocalDateTime()
43-
setValue(result, fieldName, localDate)
44-
} else {
45-
setNullField(result, fieldName)
46-
}
40+
override fun setTimestampField(result: MutableMap<String, Value?>?, fieldName: String, value: Date) {
41+
val localDate = value.toInstant().atZone(UTC).toLocalDateTime()
42+
setValue(result, fieldName, localDate)
4743

4844
}
4945

50-
override fun setTimeField(result: MutableMap<String, Value?>?, fieldName: String?, value: Date?) {
51-
if (value != null) {
52-
val time = LocalTime.ofNanoOfDay(TimeUnit.MILLISECONDS.toNanos(value.time))
53-
setValue(result, fieldName, time)
54-
} else {
55-
setNullField(result, fieldName)
56-
}
46+
override fun setTimeField(result: MutableMap<String, Value?>?, fieldName: String, value: Date) {
47+
val time = LocalTime.ofNanoOfDay(TimeUnit.MILLISECONDS.toNanos(value.time))
48+
setValue(result, fieldName, time)
5749
}
5850

59-
override fun setDateField(result: MutableMap<String, Value?>?, fieldName: String?, value: Date?) {
60-
if (value != null) {
61-
val localDate = value.toInstant().atZone(UTC).toLocalDate()
62-
setValue(result, fieldName, localDate)
63-
} else {
64-
setNullField(result, fieldName)
65-
}
51+
override fun setDateField(result: MutableMap<String, Value?>?, fieldName: String, value: Date) {
52+
val localDate = value.toInstant().atZone(UTC).toLocalDate()
53+
setValue(result, fieldName, localDate)
6654
}
6755
}

kafka-connect-neo4j/src/test/kotlin/streams/kafka/connect/sink/Neo4jValueConverterTest.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ class Neo4jValueConverterTest {
9191
assertTrue{ int32Time is LocalTimeValue }
9292
assertEquals(Date.from(Instant.ofEpochMilli(123)).toInstant().atZone(utc).toLocalTime(), int32Time?.asLocalTime())
9393

94+
val nullField = result["nullField"]
95+
assertTrue{ nullField is NullValue }
96+
97+
val nullFieldBytes = result["nullFieldBytes"]
98+
assertTrue{ nullFieldBytes is NullValue }
99+
94100
}
95101

96102
@Test
@@ -102,6 +108,11 @@ class Neo4jValueConverterTest {
102108

103109
assertTrue{ item is StringValue }
104110
assertEquals(number.toPlainString(), item?.asString())
111+
112+
val result2 = Neo4jValueConverter().convert(getItemElement(null))
113+
val item2 = result2["item"]
114+
115+
assertTrue{ item2 is NullValue }
105116
}
106117

107118
@Test
@@ -238,6 +249,18 @@ class Neo4jValueConverterTest {
238249
Date.from(Instant.ofEpochMilli(123)),
239250
Time.LOGICAL_NAME,
240251
null, null))
252+
.field("nullField",
253+
ConnectSchema(Schema.Type.INT64,
254+
false,
255+
null,
256+
Time.LOGICAL_NAME,
257+
null, null))
258+
.field("nullFieldBytes",
259+
ConnectSchema(Schema.Type.BYTES,
260+
false,
261+
null,
262+
Time.LOGICAL_NAME,
263+
null, null))
241264
.build()
242265

243266
fun getTreeStruct(): Struct? {
@@ -286,7 +309,7 @@ class Neo4jValueConverterTest {
286309
return mapOf("ul" to ulListMap, "p" to pListMap)
287310
}
288311

289-
fun getItemElement(number: Any): Map<String, Any> = mapOf("item" to number)
312+
fun getItemElement(number: Any?): Map<String, Any?> = mapOf("item" to number)
290313
}
291314

292315
}

0 commit comments

Comments
 (0)