buildSrc/src/main/java/com/uber/okbuck/core/task/OkBuckTask.java [182:304]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  private void generate(
      OkBuckExtension okbuckExt,
      @Nullable String groovyHome,
      @Nullable String kotlinHome,
      @Nullable String scalaCompiler,
      @Nullable String scalaLibrary) {
    // generate empty .buckconfig if it does not exist
    try {
      getDotBuckConfig().createNewFile();
    } catch (IOException e) {
      throw new IllegalStateException(e);
    }

    Map<String, RuleOverridesExtension.OverrideSetting> overrides =
        okbuckExt.getRuleOverridesExtension().getOverrides();

    // Setup okbuck_targets.bzl
    new OkbuckTargets()
        .resourceExcludes(
            okBuckExtension
                .excludeResources
                .stream()
                .map(s -> "'" + s + "'")
                .collect(Collectors.toSet()))
        .classpathMacro(CLASSPATH_ABI_MACRO)
        .lintJvmArgs(okbuckExt.getLintExtension().jvmArgs)
        .enableLint(!okbuckExt.getLintExtension().disabled)
        .jetifierConfigurationTarget(
            BuckRuleComposer.fileRule(okbuckExt.getJetifierExtension().customConfigFile))
        .externalDependencyCache(okbuckExt.getExternalDependenciesExtension().getCache())
        .classpathExclusionRegex(okbuckExt.getLintExtension().classpathExclusionRegex)
        .useCompilationClasspath(okbuckExt.getLintExtension().useCompilationClasspath)
        .render(getOkbuckTargets());

    // Setup okbuck_prebuilt.bzl
    Multimap<String, String> prebuiltLoadStatements = TreeMultimap.create();

    RuleOverridesExtension.OverrideSetting prebuiltSetting =
        overrides.get(RuleType.PREBUILT.getBuckName());
    RuleOverridesExtension.OverrideSetting aarSetting =
        overrides.get(RuleType.ANDROID_PREBUILT_AAR.getBuckName());
    RuleOverridesExtension.OverrideSetting jarSetting =
        overrides.get(RuleType.PREBUILT_JAR.getBuckName());

    prebuiltLoadStatements.put(aarSetting.getImportLocation(), aarSetting.getNewRuleName());
    prebuiltLoadStatements.put(jarSetting.getImportLocation(), jarSetting.getNewRuleName());

    ExternalDependenciesExtension external = okbuckExt.getExternalDependenciesExtension();
    OkbuckPrebuilt okbuckPrebuiltRule =
        new OkbuckPrebuilt()
            .okbuckPrebuiltRule(prebuiltSetting.getNewRuleName())
            .prebuiltAarRule(aarSetting.getNewRuleName())
            .prebuiltJarRule(jarSetting.getNewRuleName());
    if (external.strictVisibilityEnabled()) {
      okbuckPrebuiltRule.strictVisibilityScope(String.format("//%s/...", external.getCache()));
    }

    buckFileManager.writeToBuckFile(
        ImmutableList.of(okbuckPrebuiltRule), getOkbuckPrebuilt(), prebuiltLoadStatements);

    // Ensure that a build file is present where bzl files are
    buckFileManager.writeToBuckFile("", getOkbuckPrebuiltBuildFile(), false);

    // Setup okbuck_android_modules.bzl
    Multimap<String, String> unifiedLibsLoadStatements = TreeMultimap.create();

    RuleOverridesExtension.OverrideSetting androidResourceSetting =
        overrides.get(RuleType.ANDROID_RESOURCE.getBuckName());
    RuleOverridesExtension.OverrideSetting androidLibrarySetting =
        overrides.get(RuleType.ANDROID_LIBRARY.getBuckName());
    RuleOverridesExtension.OverrideSetting manifestSetting =
        overrides.get(RuleType.MANIFEST.getBuckName());

    // might be null as okbuck doesn't define a custom override for this.
    if (androidResourceSetting != null) {
      unifiedLibsLoadStatements.put(
          androidResourceSetting.getImportLocation(), androidResourceSetting.getNewRuleName());
    }
    unifiedLibsLoadStatements.put(
        androidLibrarySetting.getImportLocation(), androidLibrarySetting.getNewRuleName());
    unifiedLibsLoadStatements.put(
        manifestSetting.getImportLocation(), manifestSetting.getNewRuleName());

    Rule okbuckAndroidModules =
        new OkbuckAndroidModules()
            .androidLibraryRule(androidLibrarySetting.getNewRuleName())
            .manifestRule(manifestSetting.getNewRuleName())
            .androidResourceRule(
                androidResourceSetting != null
                    ? androidResourceSetting.getNewRuleName()
                    : "native." + RuleType.ANDROID_RESOURCE.getBuckName());

    buckFileManager.writeToBuckFile(
        ImmutableList.of(okbuckAndroidModules), getOkbuckAndroidModules(), unifiedLibsLoadStatements);

    // generate .buckconfig.okbuck
    OkbuckBuckConfigGenerator.generate(
            okbuckExt,
            groovyHome,
            kotlinHome,
            scalaCompiler,
            scalaLibrary,
            ProguardUtil.getProguardJarPath(getProject()),
            repositoryMap(
                okbuckExt.getExternalDependenciesExtension().shouldDownloadInBuck()
                    && okBuckExtension
                        .getExternalDependenciesExtension()
                        .getGenerateMavenRepositories()))
        .render(getOkbuckBuckConfig());

    if (okbuckExt.okBuckBuckConfig) {
      // Add entry of OkBuckBuckConfig to DotBuckConfig
      String entry =
          String.format(
              "<file:%s>", FileUtil.getRelativePath(getProject().getRootDir(), getOkbuckBuckConfig()));

      @Var String dotBuckContent = FileUtil.readString(getDotBuckConfig());
      if (!dotBuckContent.contains(entry)) {
        dotBuckContent = entry + "\n\n" + dotBuckContent;
        FileUtil.writeString(getDotBuckConfig(), dotBuckContent);
      }
    }
  }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



plugin/src/main/java/com/uber/okbuck/core/task/OkBuckTask.java [182:304]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  private void generate(
      OkBuckExtension okbuckExt,
      @Nullable String groovyHome,
      @Nullable String kotlinHome,
      @Nullable String scalaCompiler,
      @Nullable String scalaLibrary) {
    // generate empty .buckconfig if it does not exist
    try {
      getDotBuckConfig().createNewFile();
    } catch (IOException e) {
      throw new IllegalStateException(e);
    }

    Map<String, RuleOverridesExtension.OverrideSetting> overrides =
        okbuckExt.getRuleOverridesExtension().getOverrides();

    // Setup okbuck_targets.bzl
    new OkbuckTargets()
        .resourceExcludes(
            okBuckExtension
                .excludeResources
                .stream()
                .map(s -> "'" + s + "'")
                .collect(Collectors.toSet()))
        .classpathMacro(CLASSPATH_ABI_MACRO)
        .lintJvmArgs(okbuckExt.getLintExtension().jvmArgs)
        .enableLint(!okbuckExt.getLintExtension().disabled)
        .jetifierConfigurationTarget(
            BuckRuleComposer.fileRule(okbuckExt.getJetifierExtension().customConfigFile))
        .externalDependencyCache(okbuckExt.getExternalDependenciesExtension().getCache())
        .classpathExclusionRegex(okbuckExt.getLintExtension().classpathExclusionRegex)
        .useCompilationClasspath(okbuckExt.getLintExtension().useCompilationClasspath)
        .render(getOkbuckTargets());

    // Setup okbuck_prebuilt.bzl
    Multimap<String, String> prebuiltLoadStatements = TreeMultimap.create();

    RuleOverridesExtension.OverrideSetting prebuiltSetting =
        overrides.get(RuleType.PREBUILT.getBuckName());
    RuleOverridesExtension.OverrideSetting aarSetting =
        overrides.get(RuleType.ANDROID_PREBUILT_AAR.getBuckName());
    RuleOverridesExtension.OverrideSetting jarSetting =
        overrides.get(RuleType.PREBUILT_JAR.getBuckName());

    prebuiltLoadStatements.put(aarSetting.getImportLocation(), aarSetting.getNewRuleName());
    prebuiltLoadStatements.put(jarSetting.getImportLocation(), jarSetting.getNewRuleName());

    ExternalDependenciesExtension external = okbuckExt.getExternalDependenciesExtension();
    OkbuckPrebuilt okbuckPrebuiltRule =
        new OkbuckPrebuilt()
            .okbuckPrebuiltRule(prebuiltSetting.getNewRuleName())
            .prebuiltAarRule(aarSetting.getNewRuleName())
            .prebuiltJarRule(jarSetting.getNewRuleName());
    if (external.strictVisibilityEnabled()) {
      okbuckPrebuiltRule.strictVisibilityScope(String.format("//%s/...", external.getCache()));
    }

    buckFileManager.writeToBuckFile(
        ImmutableList.of(okbuckPrebuiltRule), getOkbuckPrebuilt(), prebuiltLoadStatements);

    // Ensure that a build file is present where bzl files are
    buckFileManager.writeToBuckFile("", getOkbuckPrebuiltBuildFile(), false);

    // Setup okbuck_android_modules.bzl
    Multimap<String, String> unifiedLibsLoadStatements = TreeMultimap.create();

    RuleOverridesExtension.OverrideSetting androidResourceSetting =
        overrides.get(RuleType.ANDROID_RESOURCE.getBuckName());
    RuleOverridesExtension.OverrideSetting androidLibrarySetting =
        overrides.get(RuleType.ANDROID_LIBRARY.getBuckName());
    RuleOverridesExtension.OverrideSetting manifestSetting =
        overrides.get(RuleType.MANIFEST.getBuckName());

    // might be null as okbuck doesn't define a custom override for this.
    if (androidResourceSetting != null) {
      unifiedLibsLoadStatements.put(
          androidResourceSetting.getImportLocation(), androidResourceSetting.getNewRuleName());
    }
    unifiedLibsLoadStatements.put(
        androidLibrarySetting.getImportLocation(), androidLibrarySetting.getNewRuleName());
    unifiedLibsLoadStatements.put(
        manifestSetting.getImportLocation(), manifestSetting.getNewRuleName());

    Rule okbuckAndroidModules =
        new OkbuckAndroidModules()
            .androidLibraryRule(androidLibrarySetting.getNewRuleName())
            .manifestRule(manifestSetting.getNewRuleName())
            .androidResourceRule(
                androidResourceSetting != null
                    ? androidResourceSetting.getNewRuleName()
                    : "native." + RuleType.ANDROID_RESOURCE.getBuckName());

    buckFileManager.writeToBuckFile(
        ImmutableList.of(okbuckAndroidModules), getOkbuckAndroidModules(), unifiedLibsLoadStatements);

    // generate .buckconfig.okbuck
    OkbuckBuckConfigGenerator.generate(
            okbuckExt,
            groovyHome,
            kotlinHome,
            scalaCompiler,
            scalaLibrary,
            ProguardUtil.getProguardJarPath(getProject()),
            repositoryMap(
                okbuckExt.getExternalDependenciesExtension().shouldDownloadInBuck()
                    && okBuckExtension
                        .getExternalDependenciesExtension()
                        .getGenerateMavenRepositories()))
        .render(getOkbuckBuckConfig());

    if (okbuckExt.okBuckBuckConfig) {
      // Add entry of OkBuckBuckConfig to DotBuckConfig
      String entry =
          String.format(
              "<file:%s>", FileUtil.getRelativePath(getProject().getRootDir(), getOkbuckBuckConfig()));

      @Var String dotBuckContent = FileUtil.readString(getDotBuckConfig());
      if (!dotBuckContent.contains(entry)) {
        dotBuckContent = entry + "\n\n" + dotBuckContent;
        FileUtil.writeString(getDotBuckConfig(), dotBuckContent);
      }
    }
  }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



