@Override public void writeExpression(Expression oldExp){
  if (null == oldExp) {
    throw new NullPointerException();
  }
  boolean oldWritingObject=writingObject;
  writingObject=true;
  Object oldValue=expressionValue(oldExp);
  if (oldValue == null || get(oldValue) != null && (oldWritingObject || oldValue.getClass() != String.class)) {
    return;
  }
  if (!isBasicType(oldValue) || (!oldWritingObject && oldValue.getClass() == String.class)) {
    recordExpression(oldValue,oldExp);
  }
  if (checkDeadLoop(oldValue)) {
    return;
  }
  super.writeExpression(oldExp);
  writingObject=oldWritingObject;
}

@ Override public void writeExpression ( Expression oldExp ) { if ( null == oldExp ) { throw new NullPointerException ( ) ; } boolean oldWritingObject = writingObject ; writingObject = true ; Object oldValue = expressionValue ( oldExp ) ; if ( oldValue == null || get ( oldValue ) != null && ( oldWritingObject || oldValue . getClass ( ) != String . class ) ) { return ; } if ( ! isBasicType ( oldValue ) || ( ! oldWritingObject && oldValue . getClass ( ) == String . class ) ) { recordExpression ( oldValue , oldExp ) ; } if ( checkDeadLoop ( oldValue ) ) { return ; } super . writeExpression ( oldExp ) ; writingObject = oldWritingObject ; }
records the expression so that it can be written out later , then calls super implementation .
