code: @Override
      protected synchronized void analyzeDependency(Dependency ignore, Engine engine) throws AnalysisException {
          if (!analyzed) {
              analyzed = true;
              final Set<Dependency> dependenciesToRemove = new HashSet<>();
  
              final Dependency[] dependencies = engine.getDependencies();
              if (dependencies.length < 2) {
                  return;
              }
              for (int x = 0; x < dependencies.length - 1; x++) {
                  final Dependency dependency = dependencies[x];
                  if (!dependenciesToRemove.contains(dependency)) {
                      for (int y = x + 1; y < dependencies.length; y++) {
                          final Dependency nextDependency = dependencies[y];
                          if (evaluateDependencies(dependency, nextDependency, dependenciesToRemove)) {
                              break;
                          }
                      }
                  }
              }
              dependenciesToRemove.forEach((d) -> {
                  engine.removeDependency(d);
              });
          }
docs: Analyzes a set of dependencies. If they have been found to have the same
  base path and the same set of identifiers they are likely related. The
  related dependencies are bundled into a single reportable item.
  
  @param ignore this analyzer ignores the dependency being analyzed
  @param engine the engine that is scanning the dependencies
  @throws AnalysisException is thrown if there is an error reading the JAR
  file.