From 784341909b4d7cc8faaca72ad423840c2d218013 Mon Sep 17 00:00:00 2001 From: Karishma Chadha Date: Mon, 22 Jan 2018 15:14:43 -0500 Subject: [PATCH] Update block xml for all blocks that use a variable that was just renamed. --- src/engine/blocks.js | 4 ++++ src/engine/runtime.js | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/engine/blocks.js b/src/engine/blocks.js index b889f2010..032bb075a 100644 --- a/src/engine/blocks.js +++ b/src/engine/blocks.js @@ -319,6 +319,10 @@ class Blocks { break; case 'var_rename': stage.renameVariable(e.varId, e.newName); + // Update all the blocks that use the renamed variable. + if (optRuntime) { + optRuntime.updateBlocksAfterVarRename(e.varId, e.newName); + } break; case 'var_delete': stage.deleteVariable(e.varId); diff --git a/src/engine/runtime.js b/src/engine/runtime.js index bf7969a0c..d5e79f4dc 100644 --- a/src/engine/runtime.js +++ b/src/engine/runtime.js @@ -1581,6 +1581,33 @@ class Runtime extends EventEmitter { disableProfiling () { this.profiler = null; } + + /** + * Keep blocks up to date after a variable gets renamed. + * @param {string} varId The id of the variable that was renamed + * @param {string} newName The new name of the variable that was renamed + */ + updateBlocksAfterVarRename (varId, newName) { + const allTargets = this.targets; + for (let i = 0; i < allTargets.length; i++) { + const currTarget = allTargets[i]; + const currBlocks = currTarget.blocks._blocks; + for (const blockId in currBlocks) { + let varOrListField = null; + if (currBlocks[blockId].fields.VARIABLE) { + varOrListField = currBlocks[blockId].fields.VARIABLE; + } else if (currBlocks[blockId].fields.LIST) { + varOrListField = currBlocks[blockId].fields.LIST; + } + if (varOrListField) { + const currFieldId = varOrListField.id; + if (varId === currFieldId) { + varOrListField.value = newName; + } + } + } + } + } } /**