docs: @Override
  	public void writeExpression(Expression oldExp)
  	{
  		if (null == oldExp)
  		{
  			throw new NullPointerException();
  		}
  		boolean oldWritingObject = writingObject;
  		writingObject = true;
  		// get expression value
  		Object oldValue = expressionValue(oldExp);
  		// check existence
  		if (oldValue == null || get(oldValue) != null && (oldWritingObject || oldValue.getClass() != String.class))
  		{
  			return;
  		}
  
  		// record how the object is obtained
  		if (!isBasicType(oldValue) || (!oldWritingObject && oldValue.getClass() == String.class))
  		{
  			recordExpression(oldValue, oldExp);
  		}
  
  		// try to detect if we run into a dead loop
  		if (checkDeadLoop(oldValue))
  		{
  			return;
  		}
  		super.writeExpression(oldExp);
  		writingObject = oldWritingObject;
  	}