From 5a9b06b707ceada5170002cb41ed23553aba00db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Thu, 25 Jul 2024 17:08:41 +0200 Subject: [PATCH] Minor speedup of diagram loading --- .../OPStonDiagramSerializer.class.st | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/repository/OpenPonk-Core/OPStonDiagramSerializer.class.st b/repository/OpenPonk-Core/OPStonDiagramSerializer.class.st index a3280861..ed98be11 100644 --- a/repository/OpenPonk-Core/OPStonDiagramSerializer.class.st +++ b/repository/OpenPonk-Core/OPStonDiagramSerializer.class.st @@ -32,13 +32,21 @@ OPStonDiagramSerializer >> formatName [ { #category : 'serialize/materialize' } OPStonDiagramSerializer >> materializeDiagramOf: aModel from: aStream [ - | diagram adapters allModelElements | + | diagram adapters innerElements elementsById | diagram := STON fromStream: aStream. adapters := OPNavigatorAdapters new. - allModelElements := ((Set with: aModel) - , (adapters allChildrenFor: aModel) collect: [ - :each | each uuid -> each ]) asDictionary. - diagram resolveAllModelElements: allModelElements. + innerElements := adapters allChildrenFor: aModel. + elementsById := Dictionary new: innerElements size + 1. + elementsById at: aModel uuid put: aModel. + innerElements do: [ :each | + elementsById + at: each uuid + ifPresent: [ :existing | + self error: + 'There are two elements with same ID ' , each uuid asString + , ': ' , existing asString , ' and: ' , each asString ] + ifAbsentPut: each ]. + diagram resolveAllModelElements: elementsById. ^ diagram ]