protected void amendBuilder()

in src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java [38:141]


  protected void amendBuilder(AndroidBinaryRule.Builder builder,
      BuildRuleFactoryParams params) throws NoSuchBuildTargetException {
    // manifest
    builder.setManifest(params.getRequiredSourcePath("manifest", builder));

    // target
    String target = params.getRequiredStringAttribute("target");
    builder.setTarget(target);

    // keystore
    BuildTarget keystore = params.getRequiredBuildTarget("keystore");
    builder.setKeystore(keystore);

    // classpath_deps
    for (String classpathDep : params.getOptionalListAttribute("classpath_deps")) {
      BuildTarget classpathDepTarget = params.resolveBuildTarget(classpathDep);
      builder.addClasspathDep(classpathDepTarget);
    }

    // package_type
    // Note that it is not required for the user to supply this attribute, but buck.py should
    // supply 'debug' if the user has not supplied a value.
    String packageType = params.getRequiredStringAttribute("package_type");
    builder.setPackageType(packageType);

    // no_dx
    for (String noDx : params.getOptionalListAttribute("no_dx")) {
      BuildTarget buildTarget = params.resolveBuildTarget(noDx);
      builder.addBuildRuleToExcludeFromDex(buildTarget);
    }

    // use_split_dex
    boolean useSplitDex = params.getBooleanAttribute("use_split_dex");

    ZipSplitter.DexSplitStrategy dexSplitStrategy = params.getBooleanAttribute("minimize_primary_dex_size")
        ? ZipSplitter.DexSplitStrategy.MINIMIZE_PRIMARY_DEX_SIZE
        : ZipSplitter.DexSplitStrategy.MAXIMIZE_PRIMARY_DEX_SIZE;

    // disable_pre_dex
    builder.setDisablePreDex(params.getBooleanAttribute("disable_pre_dex"));

    // dex_compression
    DexStore dexStore =
        "xz".equals(params.getRequiredStringAttribute("dex_compression")) ?
            DexStore.XZ :
            DexStore.JAR;

    // use_linear_alloc_split_dex
    boolean useLinearAllocSplitDex = params.getBooleanAttribute("use_linear_alloc_split_dex");

    builder.setDexSplitMode(new DexSplitMode(
        useSplitDex,
        dexSplitStrategy,
        dexStore,
        useLinearAllocSplitDex));

    // use_android_proguard_config_with_optimizations
    boolean useAndroidProguardConfigWithOptimizations =
        params.getBooleanAttribute("use_android_proguard_config_with_optimizations");
    builder.setUseAndroidProguardConfigWithOptimizations(useAndroidProguardConfigWithOptimizations);

    // proguard_config
    Optional<SourcePath> proguardConfig = params.getOptionalSourcePath("proguard_config", builder);
    builder.setProguardConfig(proguardConfig);

    // resource_compression
    Optional<String> resourceCompression = params.getOptionalStringAttribute("resource_compression");
    if (resourceCompression.isPresent()) {
      builder.setResourceCompressionMode(resourceCompression.get());
    }

    // primary_dex_substrings
    List<String> primaryDexSubstrings = params.getOptionalListAttribute("primary_dex_substrings");
    builder.addPrimaryDexSubstrings(primaryDexSubstrings);

    // linear_alloc_hard_limit
    long linearAllocHardLimit = params.getRequiredLongAttribute("linear_alloc_hard_limit");
    builder.setLinearAllocHardLimit(linearAllocHardLimit);

    // primary_dex_classes_file
    Optional<SourcePath> primaryDexClassesFile = params.getOptionalSourcePath(
        "primary_dex_classes_file", builder);
    builder.setPrimaryDexClassesFile(primaryDexClassesFile);

    // resource_filter
    List<String> resourceFilter = params.getOptionalListAttribute("resource_filter");
    builder.setResourceFilter(new FilterResourcesStep.ResourceFilter(resourceFilter));

    // cpu_filters
    List<String> cpuFilters = params.getOptionalListAttribute("cpu_filters");
    for (String filter: cpuFilters) {
      builder.addCpuFilter(filter);
    }

    // preprocess_java_classes_deps
    for (String dep : params.getOptionalListAttribute("preprocess_java_classes_deps")) {
      BuildTarget buildTarget = params.resolveBuildTarget(dep);
      builder.addPreprocessJavaClassesDep(buildTarget);
    }

    // preprocess_java_classes_bash
    builder.setPreprocessJavaClassesBash(params.getOptionalStringAttribute(
        "preprocess_java_classes_bash"));
  }