if (previousName != null && !previousName.equals(name)) {
try {
if (_valueListeners != null) {
Iterator listeners = _valueListeners.iterator();
while (listeners.hasNext()) {
ValueListener listener = (ValueListener) listeners
.next();
if (listener instanceof Variable) {
// The listener could be referencing this variable.
ParseTreeFreeVariableRenamer renamer = new ParseTreeFreeVariableRenamer();
((Variable) listener)._parseIfNecessary();
renamer.renameVariables(
((Variable) listener)._parseTree,
(Variable) listener, this, name);
ParseTreeWriter writer = new ParseTreeWriter();
((Variable) listener)
.setExpression(writer
.parseTreeToExpression(((Variable) listener)._parseTree));
changed.add(listener);
}
}
}
super.setName(name);
// With the new name, we may now shadow variables that
// were not previously shadowed. Invalidate those.
_invalidateShadowedSettables(getContainer());
validate();
} catch (IllegalActionException ex) {
// Reverse the changes above.
super.setName(previousName);
Iterator listeners = changed.iterator();
while (listeners.hasNext()) {
Variable listener = (Variable) listeners.next();
// The listener could be referencing this variable.
ParseTreeFreeVariableRenamer renamer = new ParseTreeFreeVariableRenamer();
renamer.renameVariables(listener._parseTree, listener,
this, previousName);
ParseTreeWriter writer = new ParseTreeWriter();
listener.setExpression(writer
.parseTreeToExpression(listener._parseTree));
}
// Make sure to re-evaluate dependent variables.
validate();
throw (ex);