in code/language/src/main/kotlin/org/fbme/ide/iec61499/snashot/DeclarationSnapshot.kt [49:87]
fun create(
declaration: Declaration
): DeclarationSnapshot {
check(declaration is PlatformElement)
val snapshotModule = TempModule(emptySet(), false, false)
val originalToTemporaryModels = hashMapOf<SModel, TrivialModelDescriptor>()
val declarations = hashSetOf<Declaration>()
collectAllDeclarations(declaration, declarations)
lateinit var resultDeclaration: Declaration
for (decl in declarations) {
check(decl is PlatformElement)
val originalModel = checkNotNull(decl.node.model)
val snapshotModel = originalToTemporaryModels.getOrPut(originalModel) {
SnapshotModel(originalModel).also { snapshotModule.registerModel(it) }
}
val snapshotNode = CopyUtil.copyAndPreserveId(decl.node)
snapshotModel.addRootNode(snapshotNode)
if (decl == declaration) {
resultDeclaration =
PlatformElementsOwner().getAdapter(snapshotNode, Declaration::class.java)!!
}
}
val referenceUpdater = ReferenceUpdater()
for ((original, temporary) in originalToTemporaryModels.entries) {
referenceUpdater.addModelToAdjust(original, temporary)
}
referenceUpdater.adjust()
return DeclarationSnapshot(
resultDeclaration,
declaration.owner,
originalToTemporaryModels.entries.associate { it.value to it.key }
)
}