buildSrc/src/main/java/com/uber/okbuck/core/manager/ManifestMergerManager.java [25:102]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public final class ManifestMergerManager {

  private static final String MANIFEST_MERGER_GROUP = "com.android.tools.build";
  private static final String MANIFEST_MERGER_MODULE = "manifest-merger";
  private static final String MANIFEST_MERGER_CACHE =
      OkBuckGradlePlugin.WORKSPACE_PATH + "/manifest-merger";
  private static final ImmutableSet<String> MANIFEST_MERGER_EXCLUDES =
      ImmutableSet.of("META-INF/.*\\\\.SF", "META-INF/.*\\\\.DSA", "META-INF/.*\\\\.RSA");
  private static final String MANIFEST_MERGER_CLI_CLASS =
      "com.uber.okbuck.manifmerger.ManifestMergerCli";

  private static final String MANIFEST_MERGER_RULE_NAME = "okbuck_manifest_merger";
  private static final String MANIFEST_MERGER_CLI_JAR = "manifest-merger-cli.jar";
  private static final String MANIFEST_MERGER_CLI_RULE_NAME = "manifest-merger-cli";

  private final Project rootProject;
  private final BuckFileManager buckFileManager;

  @Nullable private ImmutableSet<OExternalDependency> dependencies;

  public ManifestMergerManager(Project rootProject, BuckFileManager buckFileManager) {
    this.rootProject = rootProject;
    this.buckFileManager = buckFileManager;
  }

  public void fetchManifestMergerDeps() {
    boolean hasAndroidProject =
        rootProject.getAllprojects().stream().anyMatch(ProjectUtil::isAndroidType);

    if (hasAndroidProject) {
      Configuration manifestMergerConfiguration =
          rootProject
              .getConfigurations()
              .detachedConfiguration(
                  new DefaultExternalModuleDependency(
                      MANIFEST_MERGER_GROUP,
                      MANIFEST_MERGER_MODULE,
                      ProjectUtil.findVersionInClasspath(
                          rootProject, MANIFEST_MERGER_GROUP, MANIFEST_MERGER_MODULE)));

      dependencies =
          ImmutableSet.copyOf(
              new DependencyCache(rootProject, ProjectUtil.getDependencyManager(rootProject))
                  .build(manifestMergerConfiguration));
    }
  }

  public void finalizeDependencies(OkBuckExtension okBuckExtension) {
    Path manfistMergerCache = rootProject.file(MANIFEST_MERGER_CACHE).toPath();
    FileUtil.deleteQuietly(manfistMergerCache);

    if (dependencies != null && dependencies.size() > 0) {
      manfistMergerCache.toFile().mkdirs();

      FileUtil.copyResourceToProject(
          "manifest/" + MANIFEST_MERGER_CLI_JAR,
          new File(manfistMergerCache.toFile(), MANIFEST_MERGER_CLI_JAR));

      Set<String> deps = BuckRuleComposer.external(dependencies);
      deps.add(":" + MANIFEST_MERGER_CLI_RULE_NAME);

      List<Rule> rules =
          ImmutableList.of(
              new JvmBinaryRule()
                  .excludes(MANIFEST_MERGER_EXCLUDES)
                  .mainClassName(MANIFEST_MERGER_CLI_CLASS)
                  .deps(deps)
                  .ruleType(RuleType.JAVA_BINARY.getBuckName())
                  .name(MANIFEST_MERGER_RULE_NAME)
                  .defaultVisibility(),
              new NativePrebuilt()
                  .prebuiltType(RuleType.PREBUILT_JAR.getProperties().get(0))
                  .prebuilt(MANIFEST_MERGER_CLI_JAR)
                  .ruleType(RuleType.PREBUILT_JAR.getBuckName())
                  .name(MANIFEST_MERGER_CLI_RULE_NAME));

      buckFileManager.writeToBuckFile(rules,
          new File(manfistMergerCache.toFile(), okBuckExtension.buildFileName));
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



plugin/src/main/java/com/uber/okbuck/core/manager/ManifestMergerManager.java [25:102]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public final class ManifestMergerManager {

  private static final String MANIFEST_MERGER_GROUP = "com.android.tools.build";
  private static final String MANIFEST_MERGER_MODULE = "manifest-merger";
  private static final String MANIFEST_MERGER_CACHE =
      OkBuckGradlePlugin.WORKSPACE_PATH + "/manifest-merger";
  private static final ImmutableSet<String> MANIFEST_MERGER_EXCLUDES =
      ImmutableSet.of("META-INF/.*\\\\.SF", "META-INF/.*\\\\.DSA", "META-INF/.*\\\\.RSA");
  private static final String MANIFEST_MERGER_CLI_CLASS =
      "com.uber.okbuck.manifmerger.ManifestMergerCli";

  private static final String MANIFEST_MERGER_RULE_NAME = "okbuck_manifest_merger";
  private static final String MANIFEST_MERGER_CLI_JAR = "manifest-merger-cli.jar";
  private static final String MANIFEST_MERGER_CLI_RULE_NAME = "manifest-merger-cli";

  private final Project rootProject;
  private final BuckFileManager buckFileManager;

  @Nullable private ImmutableSet<OExternalDependency> dependencies;

  public ManifestMergerManager(Project rootProject, BuckFileManager buckFileManager) {
    this.rootProject = rootProject;
    this.buckFileManager = buckFileManager;
  }

  public void fetchManifestMergerDeps() {
    boolean hasAndroidProject =
        rootProject.getAllprojects().stream().anyMatch(ProjectUtil::isAndroidType);

    if (hasAndroidProject) {
      Configuration manifestMergerConfiguration =
          rootProject
              .getConfigurations()
              .detachedConfiguration(
                  new DefaultExternalModuleDependency(
                      MANIFEST_MERGER_GROUP,
                      MANIFEST_MERGER_MODULE,
                      ProjectUtil.findVersionInClasspath(
                          rootProject, MANIFEST_MERGER_GROUP, MANIFEST_MERGER_MODULE)));

      dependencies =
          ImmutableSet.copyOf(
              new DependencyCache(rootProject, ProjectUtil.getDependencyManager(rootProject))
                  .build(manifestMergerConfiguration));
    }
  }

  public void finalizeDependencies(OkBuckExtension okBuckExtension) {
    Path manfistMergerCache = rootProject.file(MANIFEST_MERGER_CACHE).toPath();
    FileUtil.deleteQuietly(manfistMergerCache);

    if (dependencies != null && dependencies.size() > 0) {
      manfistMergerCache.toFile().mkdirs();

      FileUtil.copyResourceToProject(
          "manifest/" + MANIFEST_MERGER_CLI_JAR,
          new File(manfistMergerCache.toFile(), MANIFEST_MERGER_CLI_JAR));

      Set<String> deps = BuckRuleComposer.external(dependencies);
      deps.add(":" + MANIFEST_MERGER_CLI_RULE_NAME);

      List<Rule> rules =
          ImmutableList.of(
              new JvmBinaryRule()
                  .excludes(MANIFEST_MERGER_EXCLUDES)
                  .mainClassName(MANIFEST_MERGER_CLI_CLASS)
                  .deps(deps)
                  .ruleType(RuleType.JAVA_BINARY.getBuckName())
                  .name(MANIFEST_MERGER_RULE_NAME)
                  .defaultVisibility(),
              new NativePrebuilt()
                  .prebuiltType(RuleType.PREBUILT_JAR.getProperties().get(0))
                  .prebuilt(MANIFEST_MERGER_CLI_JAR)
                  .ruleType(RuleType.PREBUILT_JAR.getBuckName())
                  .name(MANIFEST_MERGER_CLI_RULE_NAME));

      buckFileManager.writeToBuckFile(rules,
          new File(manfistMergerCache.toFile(), okBuckExtension.buildFileName));
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



