private boolean processFileBytes(String name, long lastModified, byte[] bytes) {

    boolean isClass = name.endsWith(".class");
    boolean isClassesDex = name.equals(DexFormat.DEX_IN_JAR_NAME);
    boolean keepResources = (outputResources != null);

    if (!isClass && !isClassesDex && !keepResources) {
      if (args.verbose) {
        context.out.println("ignored resource " + name);
      }
      return false;
    }

    if (args.verbose) {
      context.out.println("processing " + name + "...");
    }

    String fixedName = fixPath(name);

    if (isClass) {

      if (keepResources && args.keepClassesInJar) {
        synchronized (outputResources) {
          outputResources.put(fixedName, bytes);
        }
      }
      if (lastModified < minimumFileAge) {
        return true;
      }
      processClass(fixedName, bytes);
      // Assume that an exception may occur. Status will be updated
      // asynchronously, if the class compiles without error.
      return false;
    } else if (isClassesDex) {
      synchronized (libraryDexBuffers) {
        libraryDexBuffers.add(bytes);
      }
      return true;
    } else {
      synchronized (outputResources) {
        outputResources.put(fixedName, bytes);
      }
      return true;
    }
  }
Processes one file, which may be either a class or a resource.

@param name {@code non-null;} name of the file
@param bytes {@code non-null;} contents of the file
@return whether processing was successful
android/android_framework/dex-maker/src/main/java/com/android/dx/command/dexer/Main.java