docs: protected synchronized File getJsp() {
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINER)) {
              logger.logp(Level.FINER, CLASS_NAME, "getJsp", "enter");
          }
  
          File[] children;
          try {
              if (_counter % _notify == 0) {
                  if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.INFO)) {
                      logger.logp(Level.INFO, CLASS_NAME, "getJsp", "PrepareJspHelper in group [" + appName + "]: " + _counter + " jsp files have been processed.");
                  }
              }
  
              if (!_files.isEmpty()) {
                  _counter++;
                  if (_counter >= _startAt)
                      shouldClassload = true;
                  return (File) _files.pop();
              }
  
              if (_parents.isEmpty()) {
                  return null;
              }
  
              List extList = PrepareJspHelper.buildJspFileExtensionList(Constants.STANDARD_JSP_EXTENSIONS, _jspExtProcessor.getPatternList());
              String resourcePath = null;
              //do a loop in case we run into an empty directory.			
              while (_files.isEmpty() && !_parents.isEmpty()) {
                  children = ((File) _parents.pop()).listFiles();
  
                  if (children != null) {
                      for (int i = 0; i < children.length; i++) {
                          resourcePath = children[i].getName().replace('\\', '/');
                          if (resourcePath.startsWith("/META-INF") == false) {
                              if (children[i].isDirectory()) {
                                  _parents.push(children[i]);
                              } else if (children[i].isFile() && isJspFile(children[i].getName(), extList)) {
                                  //if none have been processed, get up to the starting point
                                  _files.push(children[i]);
                              }
                          }
                      }
                  }
              }
  
              if (!_files.isEmpty()) {
                  _counter++;
                  if (_counter >= _startAt)
                      shouldClassload = true;
  
                  return (File) _files.pop();
              } else {
                  return null;
              }
          } catch (Exception ex) {
              logger.logp(
                          Level.WARNING,
                          CLASS_NAME,
                          "getJsp",
                          "Pretouch ERROR: Unexpected exception retrieving jsp names", ex);
              return null;
          } finally {
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINER)) {
                  logger.logp(Level.FINER, CLASS_NAME, "getJsp", "exit");
              }
          }
      }