Skip to content

Commit c33d047

Browse files
committed
INodeReferenceSerializer allows to replace registered serializers by default
1 parent 2485510 commit c33d047

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

model-api/src/commonMain/kotlin/org/modelix/model/api/INodeReferenceSerializer.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,29 @@ interface INodeReferenceSerializer {
1818
}
1919

2020
fun register(serializer: INodeReferenceSerializer) {
21+
register(serializer, true)
22+
}
23+
24+
fun register(serializer: INodeReferenceSerializer, replace: Boolean) {
2125
if (serializer is INodeReferenceSerializerEx) {
2226
val prefix = serializer.prefix
2327
val existingDeserializer = deserializerForPrefix[prefix]
2428
if (existingDeserializer != null) {
25-
throw IllegalStateException("Deserializer for '$prefix:' already registered: $existingDeserializer")
29+
if (replace) {
30+
unregister(existingDeserializer)
31+
} else {
32+
throw IllegalStateException("Deserializer for '$prefix:' already registered: $existingDeserializer")
33+
}
2634
}
2735
val supportedClasses = serializer.supportedReferenceClasses
2836
for (supportedClass in supportedClasses) {
2937
val existingSerializer = serializersForClass[supportedClass]
3038
if (existingSerializer != null) {
31-
throw IllegalStateException("Serializer for $supportedClass already registered: $existingSerializer")
39+
if (replace) {
40+
unregister(existingSerializer)
41+
} else {
42+
throw IllegalStateException("Serializer for $supportedClass already registered: $existingSerializer")
43+
}
3244
}
3345
}
3446
deserializerForPrefix[prefix] = serializer

0 commit comments

Comments
 (0)