code: private VarDef getNextVarDef()
      {
      if( nextVarDef_ == null)
        {
        // Still traversing current VarSet?
        if( nextVarSet_ != null && nextVarSet_.hasNext())
          {
          // Yes, return next VarSet member.
          nextVarDef_ = nextVarSet_.next();
          }
        else
          {
          // No, get next variable, skipping any empty VarSet.
          nextVarSet_ = null;
          Iterator<IVarDef> members = null;
          IVarDef varDef;
          for( varDef = null;
  
               varDefs_.hasNext()
                 && (members = (varDef = varDefs_.next()).getMembers()) != null
                 && !members.hasNext();
  
               varDef = null);
  
          nextVarDef_ =
            // No VarDef left to visit?
            varDef == null? null :
  
            // Next variable is a VarDef?
            members == null? (VarDef) varDef :
  
            // No, start traversing next VarSet.
            (nextVarSet_ = new VarDefIterator( members)).next();
  
          }
        }
  
      return nextVarDef_;
      }
docs: Returns the next