docs: public void writeExpression(Expression oldExp)
  	{
  		if (oldExp == null)
  		{
  			throw new NullPointerException();
  		}
  		try
  		{
  			// if oldValue exists, no operation
  			Object oldValue = expressionValue(oldExp);
  			if (oldValue == null || get(oldValue) != null)
  			{
  				return;
  			}
  
  			// copy to newExp
  			Expression newExp = (Expression) createNewStatement(oldExp);
  			// relate oldValue to newValue
  			try
  			{
  				oldNewMap.put(oldValue, newExp.getValue());
  			}
  			catch (IndexOutOfBoundsException e)
  			{
  				// container does not have any component, set newVal null
  			}
  
  			// force same state
  			writeObject(oldValue);
  		}
  		catch (Exception e)
  		{
  			listener.exceptionThrown(new Exception("failed to write expression: " + oldExp, e)); //$NON-NLS-1$
  		}
  	}