private void buildConfigClassNameToExmlSourceFileMap(InputSource inputSource) throws IOException {
   for (InputSource source : inputSource.list()) {
     File exmlFile = ((FileInputSource) source).getFile();
     if (exmlFile.isFile()) {
       if (exmlFile.getName().endsWith(Exmlc.EXML_SUFFIX)) {
         exmlFilesByConfigClassName.put(
             computeConfigClassName(exmlFile), new ExmlSourceFile(this, exmlFile));
       }
     } else {
       // Recurse into the tree.
       buildConfigClassNameToExmlSourceFileMap(source);
     }
   }
 }
 private void scanAsFiles(Map<String, File> sourceFilesByName) {
   InputSource configPackageInputSource =
       sourcePathInputSource.getChild(
           config.getConfigClassPackage().replace('.', File.separatorChar));
   if (configPackageInputSource != null) {
     for (InputSource source : configPackageInputSource.list()) {
       File file = ((FileInputSource) source).getFile();
       if (file.isFile() && file.getName().endsWith(Jooc.AS_SUFFIX)) {
         try {
           File sourceDir = getConfig().findSourceDir(file);
           String qName = CompilerUtils.qNameFromFile(sourceDir, file);
           ConfigClass actionScriptConfigClass = findActionScriptConfigClass(qName);
           if (actionScriptConfigClass != null) {
             addSourceConfigClass(sourceFilesByName, file, actionScriptConfigClass);
           }
         } catch (IOException e) {
           throw new ExmlcException("could not read AS file", e);
         }
       }
     }
   }
 }