/*
* Copyright 2014-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.android;
import static com.facebook.buck.jvm.java.JavaCompilationConstants.ANDROID_JAVAC_OPTIONS;
import static com.facebook.buck.jvm.java.JavaCompilationConstants.DEFAULT_JAVA_CONFIG;
import static com.facebook.buck.jvm.java.JavaCompilationConstants.DEFAULT_JAVA_OPTIONS;
import com.facebook.buck.android.FilterResourcesStep.ResourceFilter;
import com.facebook.buck.android.ResourcesFilter.ResourceCompressionMode;
import com.facebook.buck.android.aapt.RDotTxtEntry;
import com.facebook.buck.cli.FakeBuckConfig;
import com.facebook.buck.cxx.CxxPlatformUtils;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.rules.AbstractNodeBuilderWithImmutableArg;
import com.facebook.buck.rules.SourcePath;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.List;
import java.util.Optional;
import java.util.Set;
public class AndroidBinaryBuilder
extends AbstractNodeBuilderWithImmutableArg<
AndroidBinaryDescriptionArg.Builder, AndroidBinaryDescriptionArg, AndroidBinaryDescription,
AndroidBinary> {
private AndroidBinaryBuilder(BuildTarget target) {
super(
new AndroidBinaryDescription(
DEFAULT_JAVA_CONFIG,
DEFAULT_JAVA_OPTIONS,
ANDROID_JAVAC_OPTIONS,
new ProGuardConfig(FakeBuckConfig.builder().build()),
ImmutableMap.of(),
MoreExecutors.newDirectExecutorService(),
FakeBuckConfig.builder().build(),
CxxPlatformUtils.DEFAULT_CONFIG,
new DxConfig(FakeBuckConfig.builder().build())),
target);
}
public static AndroidBinaryBuilder createBuilder(BuildTarget buildTarget) {
return new AndroidBinaryBuilder(buildTarget);
}
public AndroidBinaryBuilder setManifest(SourcePath manifest) {
getArgForPopulating().setManifest(manifest);
return this;
}
public AndroidBinaryBuilder setOriginalDeps(ImmutableSortedSet<BuildTarget> originalDeps) {
getArgForPopulating().setDeps(originalDeps);
return this;
}
public AndroidBinaryBuilder setKeystore(BuildTarget keystore) {
getArgForPopulating().setKeystore(keystore);
getArgForPopulating().addDeps(keystore);
return this;
}
public AndroidBinaryBuilder setPackageType(String packageType) {
getArgForPopulating().setPackageType(Optional.of(packageType));
return this;
}
public AndroidBinaryBuilder setShouldSplitDex(boolean shouldSplitDex) {
getArgForPopulating().setUseSplitDex(shouldSplitDex);
return this;
}
public AndroidBinaryBuilder setDexCompression(DexStore dexStore) {
getArgForPopulating().setDexCompression(Optional.of(dexStore));
return this;
}
public AndroidBinaryBuilder setLinearAllocHardLimit(long limit) {
getArgForPopulating().setLinearAllocHardLimit(limit);
return this;
}
public AndroidBinaryBuilder setPrimaryDexScenarioOverflowAllowed(boolean allowed) {
getArgForPopulating().setPrimaryDexScenarioOverflowAllowed(allowed);
return this;
}
public AndroidBinaryBuilder setBuildTargetsToExcludeFromDex(
Set<BuildTarget> buildTargetsToExcludeFromDex) {
getArgForPopulating().setNoDx(buildTargetsToExcludeFromDex);
return this;
}
public AndroidBinaryBuilder setResourceCompressionMode(
ResourceCompressionMode resourceCompressionMode) {
getArgForPopulating().setResourceCompression(Optional.of(resourceCompressionMode.toString()));
return this;
}
public AndroidBinaryBuilder setResourceFilter(ResourceFilter resourceFilter) {
List<String> rawFilters = ImmutableList.copyOf(resourceFilter.getFilter());
getArgForPopulating().setResourceFilter(rawFilters);
return this;
}
public AndroidBinaryBuilder setIntraDexReorderResources(
boolean enableReorder, SourcePath reorderTool, SourcePath reorderData) {
getArgForPopulating().setReorderClassesIntraDex(enableReorder);
getArgForPopulating().setDexReorderToolFile(Optional.of(reorderTool));
getArgForPopulating().setDexReorderDataDumpFile(Optional.of(reorderData));
return this;
}
public AndroidBinaryBuilder setNoDx(Set<BuildTarget> noDx) {
getArgForPopulating().setNoDx(noDx);
return this;
}
public AndroidBinaryBuilder setDuplicateResourceBehavior(
AndroidBinaryDescriptionArg.DuplicateResourceBehaviour value) {
getArgForPopulating().setDuplicateResourceBehavior(value);
return this;
}
public AndroidBinaryBuilder setBannedDuplicateResourceTypes(Set<RDotTxtEntry.RType> value) {
getArgForPopulating().setBannedDuplicateResourceTypes(value);
return this;
}
public AndroidBinaryBuilder setAllowedDuplicateResourceTypes(Set<RDotTxtEntry.RType> value) {
getArgForPopulating().setAllowedDuplicateResourceTypes(value);
return this;
}
public AndroidBinaryBuilder setPostFilterResourcesCmd(Optional<String> command) {
getArgForPopulating().setPostFilterResourcesCmd(command);
return this;
}
}