code: private Object handleOpGet(CacheLine line, Op.Type type, Object data, short nodeHint, Transaction txn, int change) {
          if ((change & (LINE_STATE_CHANGED | LINE_OWNER_CHANGED | (synchronous ? LINE_MODIFIED_CHANGED : 0))) == 0)
              return PENDING;
  
          if (line.is(CacheLine.DELETED))
              handleDeleted(line);
  
          if (!transitionToS(line, nodeHint)) {
              if (type != Op.Type.GETS && line.version > 0 && !isPossibleInconsistencies(line)) {
                  if (data != null) {
                      readData(line, (Persistable) data);
                      return null;
                  } else
                      return readData(line);
              } else
                  return PENDING;
          }
  
          if (type == Op.Type.GETS)
              lockLine(line, txn);
  
          if (data != null) {
              readData(line, (Persistable) data);
              return null;
          } else
              return readData(line);
      }
docs: ///////////////////////// Op handling ///////////////////////////////////////////