Skip to content

Commit 60adb36

Browse files
committed
fix: nullMono<AnyUnsupportedType>() resulted in NPE
1 parent f8bbee6 commit 60adb36

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

modelql-core/src/commonMain/kotlin/org/modelix/modelql/core/ConstantSourceStep.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,10 @@ open class ConstantSourceStep<E>(val element: E, val type: KType) : ProducingSte
112112
override fun serialize(encoder: Encoder, value: Descriptor) {
113113
encoder.encodeStructure(descriptor) {
114114
encodeStringElement(descriptor, 0, value.elementType)
115-
encodeSerializableElement(descriptor, 1, encoder.serializersModule.serializer(string2type[value.elementType]!!), value.element)
115+
val type = requireNotNull(string2type[value.elementType]) {
116+
"Unsupported type: ${value.elementType}"
117+
}
118+
encodeSerializableElement(descriptor, 1, encoder.serializersModule.serializer(type), value.element)
116119
if (value.owner != null) {
117120
encodeLongElement(descriptor, 2, value.owner!!)
118121
}
@@ -165,7 +168,7 @@ fun String?.asMono() = createConstantSourceStep(this)
165168
@JvmName("asMono_nullable")
166169
fun Set<String?>.asMono() = createConstantSourceStep(this)
167170

168-
inline fun <reified T> nullMono(): IMonoStep<T?> = ConstantSourceStep<T?>(null, typeOf<T?>())
171+
fun <T> nullMono(): IMonoStep<T?> = (null as String?).asMono() as IMonoStep<T?>
169172

170173
fun fluxOf(vararg elements: String): IFluxStep<String> = when (elements.size) {
171174
0 -> nullMono<String>().filterNotNull().asFlux()

modelql-core/src/commonTest/kotlin/org/modelix/modelql/core/ModelQLTest.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,15 @@ class ModelQLTest {
412412
}
413413
}
414414

415+
@Test
416+
fun null_mono_of_non_serializable_type() = runTestWithTimeout {
417+
val result = remoteProductDatabaseQuery { db ->
418+
// This caused an exception during serialization of the query before
419+
nullMono<MyNonSerializableClass>()
420+
}
421+
assertEquals(null, result)
422+
}
423+
415424
data class MyNonSerializableClass(val id: Int, val title: String, val images: List<MyImage>)
416425
data class MyImage(val url: String)
417426
}

0 commit comments

Comments
 (0)