code: public synchronized Entry previous()
    {
      if (tc.isEntryEnabled())
        SibTr.entry(tc, "previous");
  
  //  can only do anything if the cursor is still pointing in to a list
      checkEntryParent();
    
      Entry previousEntry = null;
    
      synchronized(parentList)
      {
        //get the previous entry
        previousEntry = getPreviousEntry();
        //if it is null
        if(previousEntry == null)
        {
          //then hopefully we are at the top of the list
          if(current == parentList.first)
          {
            //so move the cursor to the top
            moveToTop();
          }
          else if(!atTop)
          {
            //it should not be possible for the previous entry to be null but the current
            //not be the first one in the list or already at the top
            SIErrorException e = new SIErrorException(
              nls.getFormattedMessage(
                "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                new Object[] {
                  "com.ibm.ws.sib.processor.utils.linkedlist.Cursor",
                  "1:228:1.15" },
               null));
      
            FFDCFilter.processException(
              e,
              "com.ibm.ws.sib.processor.utils.linkedlist.Cursor.previous",
              "1:234:1.15",
              this);
        
            SibTr.exception(tc, e);      
      
            if (tc.isEntryEnabled())
              SibTr.exit(tc, "previous", e);
      
            throw e;
          }
        }
        else
        {
          //move the cursor to the previous entry
          moveCursor(previousEntry); 
        }
      }
    
      if (tc.isEntryEnabled())
        SibTr.exit(tc, "previous", previousEntry);
  
      return previousEntry;
    }
docs: Synchronized. Move the cursor up to the previous entry
  in the list and return it.
  
  @return The previous entry in the list, or null if there is no previous entry.