/**
   * Initializes autoloader (currently PSR-4 and PSR-0 are supported)
   *
   * @param composerSchemaJson configuration from composer.json
   */
  private void initAutoLoader(ComposerSchemaJson composerSchemaJson) {
    Autoload autoload = composerSchemaJson.getAutoload();
    if (autoload == null) {
      return;
    }

    Map<String, List<String>> psr4 = autoload.getPsr4();
    if (psr4 != null) {
      PSR4ClassFileResolver psr4ClassFileResolver = new PSR4ClassFileResolver();
      for (Map.Entry<String, List<String>> entry : psr4.entrySet()) {
        for (String directory : entry.getValue()) {
          psr4ClassFileResolver.addNamespace(entry.getKey(), directory);
        }
      }
      classFileResolver.addResolver(psr4ClassFileResolver);
    }

    Map<String, List<String>> psr0 = autoload.getPsr0();
    if (psr0 != null) {
      PSR0ClassFileResolver psr0ClassFileResolver = new PSR0ClassFileResolver();
      for (Map.Entry<String, List<String>> entry : psr0.entrySet()) {
        for (String directory : entry.getValue()) {
          psr0ClassFileResolver.addNamespace(entry.getKey(), directory);
        }
      }
      classFileResolver.addResolver(psr0ClassFileResolver);
    }
    // TODO: classmap?

  }
 /**
  * Invoked by PHP parse tree listener to "touch" class. PHP language support tries to resolve
  * class file using registered class resolver(s) and if file is found, we are trying to parse it
  * before processing current class
  *
  * @param fullyQualifiedClassName FQCN
  */
 protected void resolveClass(String fullyQualifiedClassName) {
   if (!seenClasses.add(fullyQualifiedClassName)) {
     return;
   }
   File file = classFileResolver.resolve(fullyQualifiedClassName);
   if (file != null) {
     process(file);
   }
 }