private void addClassWithHierachy(String classBinaryName) {
    if (classNames.contains(classBinaryName)) {
      return;
    }

    try {
      DirectClassFile classFile = path.getClass(classBinaryName + CLASS_EXTENSION);
      classNames.add(classBinaryName);
      CstType superClass = classFile.getSuperclass();
      if (superClass != null) {
        addClassWithHierachy(superClass.getClassType().getClassName());
      }

      TypeList interfaceList = classFile.getInterfaces();
      int interfaceNumber = interfaceList.size();
      for (int i = 0; i < interfaceNumber; i++) {
        addClassWithHierachy(interfaceList.getType(i).getClassName());
      }
    } catch (FileNotFoundException e) {
      // Ignore: The referenced type is not in the path it must be part of the libraries.
    }
  }
@param jarOfRoots Archive containing the class files resulting of the tracing, typically this
    is the result of running ProGuard.
android/android_framework/dex-maker/src/main/java/com/android/multidex/ClassReferenceListBuilder.java