code: public void compile(String fileName, LineMap lineMap,
                        boolean ifModified)
      throws IOException, ClassNotFoundException
    {
      if (_compileParent) {
        try {
          if (_loader instanceof Make) {
            ((Make) _loader).make();
          }
        } catch (RuntimeException e) {
          throw e;
        } catch (ClassNotFoundException e) {
          throw e;
        } catch (IOException e) {
          throw e;
        } catch (Exception e) {
          throw ConfigException.wrap(e);
        }
      }
  
      int p = fileName.lastIndexOf('.');
      String path = fileName.substring(0, p);
      String javaName = path + _sourceExt;
      PathImpl javaPath = getSourceDir().lookup(javaName);
  
      String className = path + ".class";
      PathImpl classPath = getClassDir().lookup(className);
  
      synchronized (LOCK) {
        if (ifModified
            && javaPath.getLastModified() <= classPath.getLastModified())
          return;
  
        if (javaPath.canRead() && classPath.exists())
          classPath.remove();
      }
  
      _compilerService.compile(this, new String[] { fileName }, lineMap);
  
        // XXX: This is needed for some regressions to pass,
        // basically the timing wouldn't work if the classpath time
        // was selected by the compiler
        // server/141d, server/10k0
        // classPath.setLastModified(javaPath.getLastModified());
    }
docs: Compiles the class.  className is a fully qualified Java class, e.g.
  work.jsp.Test
  
  @param fileName Java source name -- in VFS format
  @param lineMap mapping from generated class back to the source class
  @param ifModified compile only if the *.java is modified
  
  @return compiled class