fun create()

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 }
            )
        }