code: protected List<JavaFileObject> listClassesFromUrl(URL base, String packageName) throws IOException {
          //TODO this will only work with file:// not jar://
  
          if (base == null) {
              throw new NullPointerException("base == null");
          }
  
          List<JavaFileObject> list = new ArrayList<JavaFileObject>();
  
          URLConnection connection = base.openConnection();
          connection.connect();
          String encoding = connection.getContentEncoding();
          if (encoding == null) {
              encoding = "UTF-8";
          }
          BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));
          try {
              String curLine;
              do {
                  curLine = reader.readLine();
                  if (curLine != null && curLine.endsWith(".class")) {
                      try {
                          String curSimpleName = curLine.substring(0, curLine.length() - ".class".length());
                          String binaryName;
                          if (packageName == null) {
                              binaryName = curSimpleName;
                          } else {
                              binaryName = packageName + "." + curSimpleName;
                          }
                          list.add(new UrlJavaFileObject(curLine, new URL(base, curLine), Kind.CLASS, binaryName));
                      } catch (URISyntaxException e) {
                          throw new IOException("Error parsing URL " + curLine + ".", e);
                      }
                  }
              } while (curLine != null);
          } finally {
              reader.close();
          }
          return list;
      }
docs: Lists all files at a specified URL.
  
  @param base the URL.
  @param packageName the package name of classes to list.
  
  @return a list of class files.
  
  @throws IOException if an I/O error occurs.