docs: public String getLine(int lineNumber, Janitor janitor) {
          // If the source is already open and is passed the line we
          // want, close it.
          if (lineSource != null && number > lineNumber) {
              cleanup();
          }
  
          // If the line source is closed, try to open it.
          if (lineSource == null) {
              try {
                  lineSource = new BufferedReader(getReader());
              } catch (Exception e) {
                  // Ignore
              }
              number = 0;
          }
  
          // Read until the appropriate line number.
          if (lineSource != null) {
              while (number < lineNumber) {
                  try {
                      line = lineSource.readLine();
                      number++;
                  }
                  catch (IOException e) {
                      cleanup();
                  }
              }
  
              if (janitor == null) {
                  final String result = line;   // otherwise cleanup() will wipe out value
                  cleanup();
                  return result;
              } else {
                  janitor.register(this);
              }
          }
  
          return line;
      }