private void updateDependencies()

in plugin/src/main/java/com/uber/okbuck/core/manager/DependencyManager.java [273:344]


  private void updateDependencies(
      Map<VersionlessDependency, Collection<OExternalDependency>> dependencyMap) {

    ExternalDependenciesExtension extension = ProjectUtil.getExternalDependencyExtension(project);
    // This code-path is when versionless & exported deps is enabled
    if (!extension.versionlessExportedDepsEnabled()) {
      return;
    }

    Configuration config = project.getConfigurations().create("okbuckDependencyResolver");
    config.getDependencies().addAll(rawDependencies);

    ResolvedConfiguration resolvedConfiguration = config.getResolvedConfiguration();

    if (resolvedConfiguration.hasError()) {
      // Throw failure if there was one during resolution
      resolvedConfiguration.rethrowFailure();
    }

    resolvedConfiguration
        .getLenientConfiguration()
        .getAllModuleDependencies()
        .forEach(
            rDependency -> {
              List<Collection<OExternalDependency>> oExternal =
                  DependencyFactory.fromDependency(rDependency)
                      .stream()
                      .peek(
                          it -> {
                            if (!dependencyMap.containsKey(it)) {
                              dependencyException(rDependency);
                            }
                          })
                      .map(dependencyMap::get)
                      .collect(Collectors.toList());

              // Is a firstLevel dependency if it has a parent with no parents.
              boolean firstLevel =
                  rDependency
                      .getParents()
                      .stream()
                      .anyMatch(parent -> parent.getParents().size() == 0);

              // Update first level state.
              oExternal
                  .stream()
                  .flatMap(Collection::stream)
                  .forEach(external -> external.updateFirstLevel(firstLevel));

              Set<OExternalDependency> childDependencies =
                  childDependencies(rDependency, dependencyMap);
              if (childDependencies.size() == 0) {
                return;
              }

              oExternal
                  .stream()
                  .map(
                      dependencies -> {
                        Preconditions.checkArgument(
                            dependencies.size() == 1,
                            "Dependency having multiple versions can't have deps: m"
                                + dependencies);

                        return dependencies.stream().findAny().get();
                      })
                  .forEach(
                      dependency -> {
                        dependency.addDeps(childDependencies);
                      });
            });
  }