From 4435515d156dbb0cc40869de686d326b175f61b8 Mon Sep 17 00:00:00 2001 From: tomlu Date: Thu, 10 Aug 2017 19:26:34 +0200 Subject: Inline @Deprecated methods in CustomCommandLine. Apart from updating CustomCommandLineTest this CL is entirely automated. We also sneak in a rename of addFormat -> addFormatted. RELNOTES: None PiperOrigin-RevId: 164870140 --- .../lib/analysis/actions/CustomCommandLine.java | 131 +-------------------- .../lib/analysis/actions/ParamFileHelper.java | 2 +- .../build/lib/rules/android/AndroidBinary.java | 17 +-- .../build/lib/rules/android/AndroidIdlHelper.java | 12 +- .../lib/rules/android/AndroidLocalTestBase.java | 11 +- .../AndroidResourceMergingActionBuilder.java | 12 +- .../AndroidResourceParsingActionBuilder.java | 8 +- .../AndroidResourceValidatorActionBuilder.java | 26 ++-- .../android/AndroidResourcesProcessorBuilder.java | 41 ++++--- .../build/lib/rules/android/DexArchiveAspect.java | 21 ++-- .../android/LibraryRGeneratorActionBuilder.java | 6 +- .../rules/android/ManifestMergerActionBuilder.java | 6 +- .../android/RClassGeneratorActionBuilder.java | 15 ++- .../rules/android/ResourceContainerConverter.java | 15 ++- .../android/ResourceShrinkerActionBuilder.java | 35 +++--- .../RobolectricResourceSymbolsActionBuilder.java | 13 +- .../build/lib/rules/java/DeployArchiveBuilder.java | 8 +- .../lib/rules/java/JavaCompilationHelper.java | 8 +- .../build/lib/rules/java/JavaCompileAction.java | 58 +++++---- .../lib/rules/java/JavaHeaderCompileAction.java | 24 ++-- .../rules/java/OneVersionCheckActionBuilder.java | 4 +- .../lib/rules/java/ResourceJarActionBuilder.java | 10 +- .../lib/rules/java/SingleJarActionBuilder.java | 6 +- .../build/lib/rules/objc/AppleStubBinary.java | 5 +- .../build/lib/rules/objc/BundleSupport.java | 54 ++++----- .../build/lib/rules/objc/CompilationSupport.java | 35 +++--- .../build/lib/rules/objc/J2ObjcAspect.java | 38 +++--- .../lib/rules/objc/LegacyCompilationSupport.java | 44 ++++--- .../devtools/build/lib/rules/objc/LipoSupport.java | 26 ++-- .../build/lib/rules/objc/ProtobufSupport.java | 6 +- .../lib/rules/objc/ReleaseBundlingSupport.java | 8 +- .../lib/rules/proto/ProtoCompileActionBuilder.java | 12 +- 32 files changed, 319 insertions(+), 398 deletions(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java index a2a7c9bd65..61ecebee60 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java @@ -30,7 +30,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.util.Preconditions; -import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -600,7 +599,7 @@ public final class CustomCommandLine extends CommandLine { } /** Calls {@link String#format} at command line expansion time. */ - public Builder addFormat(String formatStr, Object... args) { + public Builder addFormatted(String formatStr, Object... args) { Preconditions.checkNotNull(formatStr); FormatArg.push(arguments, formatStr, args); return this; @@ -694,134 +693,6 @@ public final class CustomCommandLine extends CommandLine { return this; } - @Deprecated - public Builder addPath(PathFragment pathFragment) { - return add(pathFragment); - } - - @Deprecated - public Builder addExecPath(String arg, @Nullable Artifact artifact) { - return add(arg, artifact); - } - - @Deprecated - public Builder addExecPaths(@Nullable ImmutableCollection artifacts) { - return add(artifacts); - } - - @Deprecated - public Builder addExecPaths(@Nullable NestedSet artifacts) { - return add(artifacts); - } - - @Deprecated - public Builder addExecPaths(String arg, @Nullable ImmutableCollection artifacts) { - return add(arg, artifacts); - } - - @Deprecated - public Builder addExecPaths(String arg, @Nullable NestedSet artifacts) { - return add(arg, artifacts); - } - - @Deprecated - public Builder addJoinExecPaths( - String arg, String delimiter, @Nullable ImmutableCollection values) { - return add(arg, VectorArg.of(values).joinWith(delimiter)); - } - - @Deprecated - public Builder addJoinExecPaths(String arg, String delimiter, @Nullable NestedSet values) { - return add(arg, VectorArg.of(values).joinWith(delimiter)); - } - - @Deprecated - public Builder addPaths(String formatStr, PathFragment path) { - Preconditions.checkNotNull(path); - return addFormat(formatStr, path); - } - - @Deprecated - public Builder addPaths(String formatStr, PathFragment path0, PathFragment path1) { - Preconditions.checkNotNull(path0); - Preconditions.checkNotNull(path1); - return addFormat(formatStr, path0, path1); - } - - @Deprecated - public Builder addBeforeEachExecPath( - String beforeEach, @Nullable ImmutableCollection values) { - return add(VectorArg.of(values).beforeEach(beforeEach)); - } - - @Deprecated - public Builder addBeforeEachExecPath(String beforeEach, @Nullable NestedSet values) { - return add(VectorArg.of(values).beforeEach(beforeEach)); - } - - @Deprecated - public Builder addJoinPaths( - String delimiter, @Nullable ImmutableCollection pathFragments) { - return add(VectorArg.of(pathFragments).joinWith(delimiter)); - } - - public Builder addBeforeEach(String beforeEach, @Nullable ImmutableCollection values) { - return add(VectorArg.of(values).beforeEach(beforeEach)); - } - - @Deprecated - public Builder addBeforeEachPath( - String beforeEach, @Nullable ImmutableCollection values) { - return add(VectorArg.of(values).beforeEach(beforeEach)); - } - - @Deprecated - public Builder addBeforeEachPath(String beforeEach, @Nullable NestedSet values) { - return add(VectorArg.of(values).beforeEach(beforeEach)); - } - - @Deprecated - public Builder addJoinValues( - String arg, - String join, - @Nullable ImmutableCollection values, - Function mapFn) { - return add(arg, VectorArg.of(values).joinWith(join).mapEach(mapFn)); - } - - @Deprecated - public Builder addJoinValues( - String arg, String join, @Nullable NestedSet values, Function mapFn) { - return add(arg, VectorArg.of(values).joinWith(join).mapEach(mapFn)); - } - - @Deprecated - public Builder addFormatEach(String formatStr, @Nullable ImmutableCollection values) { - return add(VectorArg.of(values).formatEach(formatStr)); - } - - @Deprecated - public Builder addFormatEach(String formatStr, @Nullable NestedSet values) { - return add(VectorArg.of(values).formatEach(formatStr)); - } - - @Deprecated - public Builder addJoinStrings( - String arg, String delimiter, @Nullable ImmutableCollection values) { - return add(arg, VectorArg.of(values).joinWith(delimiter)); - } - - /** - * Adds a param file as an argument. - * - * @param paramFilePrefix The character that denotes a param file, commonly '@' - * @param paramFile The param file artifact - */ - @Deprecated - public Builder addParamFile(String paramFilePrefix, @Nullable Artifact paramFile) { - return addWithPrefix(paramFilePrefix, paramFile); - } - public CustomCommandLine build() { return new CustomCommandLine(arguments); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileHelper.java index d364f924c0..9da449dd5b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileHelper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileHelper.java @@ -91,7 +91,7 @@ public final class ParamFileHelper { ImmutableList executableArgs, ParamFileInfo paramFileInfo, Artifact parameterFile) { return CustomCommandLine.builder() .add(executableArgs) - .addParamFile(paramFileInfo.getFlag(), parameterFile) + .addWithPrefix(paramFileInfo.getFlag(), parameterFile) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index fc2b6a69c8..350317923a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -46,6 +46,7 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction.Builder; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -1339,8 +1340,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { CommandLine mergeCommandLine = CustomCommandLine.builder() - .addBeforeEachExecPath("--input_zip", shardDexes) - .addExecPath("--output_zip", classesDex) + .add(VectorArg.of(shardDexes).beforeEach("--input_zip")) + .add("--output_zip", classesDex) .build(); ruleContext.registerAction( new SpawnAction.Builder() @@ -1563,11 +1564,11 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { CustomCommandLine.Builder shardCommandLine = CustomCommandLine.builder() - .addBeforeEachExecPath("--output_jar", shards) - .addExecPath("--output_resources", javaResourceJar); + .add(VectorArg.of(shards).beforeEach("--output_jar")) + .add("--output_resources", javaResourceJar); if (mainDexList != null) { - shardCommandLine.addExecPath("--main_dex_filter", mainDexList); + shardCommandLine.add("--main_dex_filter", mainDexList); shardAction.addInput(mainDexList); } @@ -1579,7 +1580,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { if (proguardedJar != null) { // When proguard is used we can't use dex archives, so just shuffle the proguarded jar checkArgument(!useDexArchives, "Dex archives are incompatible with Proguard"); - shardCommandLine.addExecPath("--input_jar", proguardedJar); + shardCommandLine.add("--input_jar", proguardedJar); shardAction.addInput(proguardedJar); } else { ImmutableList classpath = @@ -1618,11 +1619,11 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { } else { classpath = classpath.stream().map(derivedJarFunction::apply).collect(toImmutableList()); } - shardCommandLine.addBeforeEachExecPath("--input_jar", classpath); + shardCommandLine.add(VectorArg.of(classpath).beforeEach("--input_jar")); shardAction.addInputs(classpath); if (inclusionFilterJar != null) { - shardCommandLine.addExecPath("--inclusion_filter_jar", inclusionFilterJar); + shardCommandLine.add("--inclusion_filter_jar", inclusionFilterJar); shardAction.addInput(inclusionFilterJar); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java index 7e0dfbb075..fee0bbbaa4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java @@ -335,13 +335,13 @@ public class AndroidIdlHelper { .setExecutable(ruleContext.getExecutablePrerequisite("$idlclass", Mode.HOST)) .setCommandLine( CustomCommandLine.builder() - .addExecPath("--manifest_proto", manifestProtoOutput) - .addExecPath("--class_jar", classJar) - .addExecPath("--output_class_jar", idlClassJar) - .addExecPath("--output_source_jar", idlSourceJar) + .add("--manifest_proto", manifestProtoOutput) + .add("--class_jar", classJar) + .add("--output_class_jar", idlClassJar) + .add("--output_source_jar", idlSourceJar) .add("--temp_dir") - .addPath(idlTempDir) - .addExecPaths(ImmutableList.copyOf(generatedIdlJavaFiles)) + .add(idlTempDir) + .add(ImmutableList.copyOf(generatedIdlJavaFiles)) .build()) .useParameterFile(ParameterFileType.SHELL_QUOTED) .setProgressMessage("Building idl jars %s", idlClassJar.prettyPrint()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index fd66a26dfc..bac612c6c1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -34,6 +34,7 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.RunfilesSupport; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.android.AndroidLibraryAarProvider.Aar; @@ -240,12 +241,14 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor CustomCommandLine.Builder cmdLineArgs = CustomCommandLine.builder(); if (!transitiveAars.isEmpty()) { - cmdLineArgs.addJoinValues( - "--android_libraries", ",", transitiveAars, AndroidLocalTestBase::aarCmdLineArg); + cmdLineArgs.add( + "--android_libraries", + VectorArg.of(transitiveAars).joinWith(",").mapEach(AndroidLocalTestBase::aarCmdLineArg)); } if (!strictAars.isEmpty()) { - cmdLineArgs.addJoinValues( - "--strict_libraries", ",", strictAars, AndroidLocalTestBase::aarCmdLineArg); + cmdLineArgs.add( + "--strict_libraries", + VectorArg.of(strictAars).joinWith(",").mapEach(AndroidLocalTestBase::aarCmdLineArg)); } RunfilesSupport runfilesSupport = RunfilesSupport.withExecutable( diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java index 3e7e853d57..ddf4e42bb0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java @@ -133,7 +133,7 @@ public class AndroidResourceMergingActionBuilder { // Use a FluentIterable to avoid flattening the NestedSets NestedSetBuilder inputs = NestedSetBuilder.naiveLinkOrder(); - builder.addExecPath("--androidJar", sdk.getAndroidJar()); + builder.add("--androidJar", sdk.getAndroidJar()); inputs.add(sdk.getAndroidJar()); Preconditions.checkNotNull(primary); @@ -141,7 +141,7 @@ public class AndroidResourceMergingActionBuilder { inputs.addTransitive(RESOURCE_CONTAINER_TO_ARTIFACTS.apply(primary)); Preconditions.checkNotNull(primary.getManifest()); - builder.addExecPath("--primaryManifest", primary.getManifest()); + builder.add("--primaryManifest", primary.getManifest()); inputs.add(primary.getManifest()); ResourceContainerConverter.convertDependencies( @@ -149,19 +149,19 @@ public class AndroidResourceMergingActionBuilder { List outs = new ArrayList<>(); if (classJarOut != null) { - builder.addExecPath("--classJarOutput", classJarOut); + builder.add("--classJarOutput", classJarOut); outs.add(classJarOut); } if (mergedResourcesOut != null) { - builder.addExecPath("--resourcesOutput", mergedResourcesOut); + builder.add("--resourcesOutput", mergedResourcesOut); outs.add(mergedResourcesOut); } // For now, do manifest processing to remove placeholders that aren't handled by the legacy // manifest merger. Remove this once enough users migrate over to the new manifest merger. if (manifestOut != null) { - builder.addExecPath("--manifestOutput", manifestOut); + builder.add("--manifestOutput", manifestOut); outs.add(manifestOut); } @@ -174,7 +174,7 @@ public class AndroidResourceMergingActionBuilder { // TODO(corysmith): Move the data binding parsing out of the merging pass to enable faster // aapt2 builds. if (dataBindingInfoZip != null) { - builder.addExecPath("--dataBindingInfoOut", dataBindingInfoZip); + builder.add("--dataBindingInfoOut", dataBindingInfoZip); outs.add(dataBindingInfoZip); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java index 67d083074f..99f4b90a70 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java @@ -140,7 +140,7 @@ public class AndroidResourceParsingActionBuilder { inputs.addTransitive(RESOURCE_CONTAINER_TO_ARTIFACTS.apply(primary)); Preconditions.checkNotNull(output); - builder.addExecPath("--output", output); + builder.add("--output", output); SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder(); if (OS.getCurrent() == OS.WINDOWS) { @@ -179,17 +179,17 @@ public class AndroidResourceParsingActionBuilder { .add("--") .add("--resources") .add(resourceDirectories) - .addExecPath("--output", compiledSymbols); + .add("--output", compiledSymbols); outs.add(compiledSymbols); // The databinding needs to be processed before compilation, so the stripping happens here. if (dataBindingInfoZip != null) { - flatFileBuilder.addExecPath("--manifest", resourceContainer.getManifest()); + flatFileBuilder.add("--manifest", resourceContainer.getManifest()); inputs.add(resourceContainer.getManifest()); if (!Strings.isNullOrEmpty(resourceContainer.getJavaPackage())) { flatFileBuilder.add("--packagePath").add(resourceContainer.getJavaPackage()); } - builder.addExecPath("--dataBindingInfoOut", dataBindingInfoZip); + builder.add("--dataBindingInfoOut", dataBindingInfoZip); outs.add(dataBindingInfoZip); } // Create the spawn action. diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java index 832fc66ced..3680f10414 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java @@ -151,7 +151,7 @@ public class AndroidResourceValidatorActionBuilder { // Set the busybox tool. builder.add("--tool").add("LINK_STATIC_LIBRARY").add("--"); - builder.addExecPath("--aapt2", sdk.getAapt2().getExecutable()); + builder.add("--aapt2", sdk.getAapt2().getExecutable()); FluentIterable libraries = FluentIterable.from(resourceDeps.getResources()).transform( @@ -162,10 +162,10 @@ public class AndroidResourceValidatorActionBuilder { .add(libraries.join(Joiner.on(context.getConfiguration().getHostPathSeparator()))); inputs.addAll(libraries); - builder.addExecPath("--compiled", compiledSymbols); + builder.add("--compiled", compiledSymbols); inputs.add(compiledSymbols); - builder.addExecPath("--manifest", primary.getManifest()); + builder.add("--manifest", primary.getManifest()); inputs.add(validated.getManifest()); if (!Strings.isNullOrEmpty(customJavaPackage)) { @@ -174,13 +174,13 @@ public class AndroidResourceValidatorActionBuilder { builder.add("--packageForR").add(customJavaPackage); } - builder.addExecPath("--sourceJarOut", aapt2SourceJarOut); + builder.add("--sourceJarOut", aapt2SourceJarOut); outs.add(aapt2SourceJarOut); - builder.addExecPath("--rTxtOut", aapt2RTxtOut); + builder.add("--rTxtOut", aapt2RTxtOut); outs.add(aapt2RTxtOut); - builder.addExecPath("--staticLibraryOut", staticLibraryOut); + builder.add("--staticLibraryOut", staticLibraryOut); outs.add(staticLibraryOut); ruleContext.registerAction( @@ -217,21 +217,21 @@ public class AndroidResourceValidatorActionBuilder { builder.add("--buildToolsVersion").add(sdk.getBuildToolsVersion()); } - builder.addExecPath("--aapt", sdk.getAapt().getExecutable()); + builder.add("--aapt", sdk.getAapt().getExecutable()); ImmutableList.Builder inputs = ImmutableList.builder(); - builder.addExecPath("--annotationJar", sdk.getAnnotationsJar()); + builder.add("--annotationJar", sdk.getAnnotationsJar()); inputs.add(sdk.getAnnotationsJar()); - builder.addExecPath("--androidJar", sdk.getAndroidJar()); + builder.add("--androidJar", sdk.getAndroidJar()); inputs.add(sdk.getAndroidJar()); Preconditions.checkNotNull(mergedResources); - builder.addExecPath("--mergedResources", mergedResources); + builder.add("--mergedResources", mergedResources); inputs.add(mergedResources); - builder.addExecPath("--manifest", primary.getManifest()); + builder.add("--manifest", primary.getManifest()); inputs.add(primary.getManifest()); if (debug) { @@ -245,11 +245,11 @@ public class AndroidResourceValidatorActionBuilder { } List outs = new ArrayList<>(); Preconditions.checkNotNull(rTxtOut); - builder.addExecPath("--rOutput", rTxtOut); + builder.add("--rOutput", rTxtOut); outs.add(rTxtOut); Preconditions.checkNotNull(sourceJarOut); - builder.addExecPath("--srcJarOutput", sourceJarOut); + builder.add("--srcJarOutput", sourceJarOut); outs.add(sourceJarOut); SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java index f171ec6971..a76a6da073 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.ActionConstructionContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.Builder; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; @@ -281,7 +282,7 @@ public class AndroidResourcesProcessorBuilder { // Set the busybox tool. builder.add("--tool").add("AAPT2_PACKAGE").add("--"); - builder.addExecPath("--aapt2", sdk.getAapt2().getExecutable()); + builder.add("--aapt2", sdk.getAapt2().getExecutable()); ResourceContainerConverter.convertDependencies( dependencies, builder, inputs, AAPT2_RESOURCE_DEP_TO_ARG, AAPT2_RESOURCE_DEP_TO_ARTIFACTS); @@ -344,7 +345,7 @@ public class AndroidResourcesProcessorBuilder { ResourceContainerConverter.convertDependencies( dependencies, builder, inputs, RESOURCE_DEP_TO_ARG, RESOURCE_DEP_TO_ARTIFACTS); - builder.addExecPath("--aapt", sdk.getAapt().getExecutable()); + builder.add("--aapt", sdk.getAapt().getExecutable()); configureCommonFlags(outs, inputs, builder); if (OS.getCurrent() == OS.WINDOWS) { @@ -403,10 +404,10 @@ public class AndroidResourcesProcessorBuilder { builder.add("--buildToolsVersion").add(sdk.getBuildToolsVersion()); } - builder.addExecPath("--annotationJar", sdk.getAnnotationsJar()); + builder.add("--annotationJar", sdk.getAnnotationsJar()); inputs.add(sdk.getAnnotationsJar()); - builder.addExecPath("--androidJar", sdk.getAndroidJar()); + builder.add("--androidJar", sdk.getAndroidJar()); inputs.add(sdk.getAndroidJar()); if (isLibrary) { @@ -414,40 +415,40 @@ public class AndroidResourcesProcessorBuilder { } if (rTxtOut != null) { - builder.addExecPath("--rOutput", rTxtOut); + builder.add("--rOutput", rTxtOut); outs.add(rTxtOut); } if (symbols != null) { - builder.addExecPath("--symbolsOut", symbols); + builder.add("--symbolsOut", symbols); outs.add(symbols); } if (sourceJarOut != null) { - builder.addExecPath("--srcJarOutput", sourceJarOut); + builder.add("--srcJarOutput", sourceJarOut); outs.add(sourceJarOut); } if (proguardOut != null) { - builder.addExecPath("--proguardOutput", proguardOut); + builder.add("--proguardOutput", proguardOut); outs.add(proguardOut); } if (mainDexProguardOut != null) { - builder.addExecPath("--mainDexProguardOutput", mainDexProguardOut); + builder.add("--mainDexProguardOutput", mainDexProguardOut); outs.add(mainDexProguardOut); } if (manifestOut != null) { - builder.addExecPath("--manifestOutput", manifestOut); + builder.add("--manifestOutput", manifestOut); outs.add(manifestOut); } if (mergedResourcesOut != null) { - builder.addExecPath("--resourcesOutput", mergedResourcesOut); + builder.add("--resourcesOutput", mergedResourcesOut); outs.add(mergedResourcesOut); } if (apkOut != null) { - builder.addExecPath("--packagePath", apkOut); + builder.add("--packagePath", apkOut); outs.add(apkOut); } if (resourceFilter.hasConfigurationFilters() && !resourceFilter.isPrefiltering()) { @@ -458,17 +459,19 @@ public class AndroidResourcesProcessorBuilder { } ImmutableList filteredResources = resourceFilter.getResourcesToIgnoreInExecution(); if (!filteredResources.isEmpty()) { - builder.addJoinStrings("--prefilteredResources", ",", filteredResources); + builder.add("--prefilteredResources", VectorArg.of(filteredResources).joinWith(",")); } if (!uncompressedExtensions.isEmpty()) { - builder.addJoinStrings( - "--uncompressedExtensions", ",", ImmutableList.copyOf(uncompressedExtensions)); + builder.add( + "--uncompressedExtensions", + VectorArg.of(ImmutableList.copyOf(uncompressedExtensions)).joinWith(",")); } if (!crunchPng) { builder.add("--useAaptCruncher=no"); } if (!assetsToIgnore.isEmpty()) { - builder.addJoinStrings("--assetsToIgnore", ",", ImmutableList.copyOf(assetsToIgnore)); + builder.add( + "--assetsToIgnore", VectorArg.of(ImmutableList.copyOf(assetsToIgnore)).joinWith(",")); } if (debug) { builder.add("--debug"); @@ -487,7 +490,7 @@ public class AndroidResourcesProcessorBuilder { } if (dataBindingInfoZip != null) { - builder.addExecPath("--dataBindingInfoOut", dataBindingInfoZip); + builder.add("--dataBindingInfoOut", dataBindingInfoZip); outs.add(dataBindingInfoZip); } @@ -498,12 +501,12 @@ public class AndroidResourcesProcessorBuilder { } if (featureOf != null) { - builder.addExecPath("--featureOf", featureOf); + builder.add("--featureOf", featureOf); inputs.add(featureOf); } if (featureAfter != null) { - builder.addExecPath("--featureAfter", featureAfter); + builder.add("--featureAfter", featureAfter); inputs.add(featureAfter); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index 441be7ae9a..996523b50e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -42,6 +42,8 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.WrappingProvider; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.Builder; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.cmdline.Label; @@ -369,12 +371,13 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu ImmutableList bootclasspath, NestedSet classpath, Artifact result) { - CustomCommandLine args = new CustomCommandLine.Builder() - .addExecPath("--input", jar) - .addExecPath("--output", result) - .addBeforeEachExecPath("--classpath_entry", classpath) - .addBeforeEachExecPath("--bootclasspath_entry", bootclasspath) - .build(); + CustomCommandLine args = + new Builder() + .add("--input", jar) + .add("--output", result) + .add(VectorArg.of(classpath).beforeEach("--classpath_entry")) + .add(VectorArg.of(bootclasspath).beforeEach("--bootclasspath_entry")) + .build(); // Just use params file, since classpaths can get long Artifact paramFile = @@ -423,9 +426,9 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu Artifact jar, Set incrementalDexopts, Artifact dexArchive) { // Write command line arguments into a params file for compatibility with WorkerSpawnStrategy CustomCommandLine args = - new CustomCommandLine.Builder() - .addExecPath("--input_jar", jar) - .addExecPath("--output_zip", dexArchive) + new Builder() + .add("--input_jar", jar) + .add("--output_zip", dexArchive) .add(ImmutableList.copyOf(incrementalDexopts)) .build(); Artifact paramFile = diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java index 184a8f0c87..d5b332d9e2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java @@ -76,13 +76,13 @@ public class LibraryRGeneratorActionBuilder { if (!symbolProviders.isEmpty()) { ImmutableList symbols = symbolProviders.stream().map(ResourceContainer::getSymbols).collect(toImmutableList()); - builder.addExecPaths("--symbols", symbols); + builder.add("--symbols", symbols); inputs.addTransitive(NestedSetBuilder.wrap(Order.NAIVE_LINK_ORDER, symbols)); } - builder.addExecPath("--classJarOutput", rJavaClassJar); + builder.add("--classJarOutput", rJavaClassJar); - builder.addExecPath("--androidJar", sdk.getAndroidJar()); + builder.add("--androidJar", sdk.getAndroidJar()); inputs.add(sdk.getAndroidJar()); // Create the spawn action. diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java index 52c801437b..e892ae25e3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java @@ -100,7 +100,7 @@ public class ManifestMergerActionBuilder { .getRunfilesSupport() .getRunfilesArtifactsWithoutMiddlemen()); - builder.addExecPath("--manifest", manifest); + builder.add("--manifest", manifest); inputs.add(manifest); if (mergeeManifests != null && !mergeeManifests.isEmpty()) { @@ -124,11 +124,11 @@ public class ManifestMergerActionBuilder { builder.add("--customPackage").add(customPackage); } - builder.addExecPath("--manifestOutput", manifestOutput); + builder.add("--manifestOutput", manifestOutput); outputs.add(manifestOutput); if (logOut != null) { - builder.addExecPath("--log", logOut); + builder.add("--log", logOut); outputs.add(logOut); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java index 3039d68b36..89386d6d0c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -88,11 +89,11 @@ public class RClassGeneratorActionBuilder { List outs = new ArrayList<>(); if (primary.getRTxt() != null) { - builder.addExecPath("--primaryRTxt", primary.getRTxt()); + builder.add("--primaryRTxt", primary.getRTxt()); inputs.add(primary.getRTxt()); } if (primary.getManifest() != null) { - builder.addExecPath("--primaryManifest", primary.getManifest()); + builder.add("--primaryManifest", primary.getManifest()); inputs.add(primary.getManifest()); } if (!Strings.isNullOrEmpty(primary.getJavaPackage())) { @@ -102,9 +103,11 @@ public class RClassGeneratorActionBuilder { // TODO(corysmith): Remove NestedSet as we are already flattening it. Iterable depResources = dependencies.getResources(); if (!Iterables.isEmpty(depResources)) { - builder.addBeforeEach( - "--library", - ImmutableList.copyOf(Iterables.transform(depResources, chooseDepsToArg(version)))); + builder.add( + VectorArg.of( + ImmutableList.copyOf( + Iterables.transform(depResources, chooseDepsToArg(version)))) + .beforeEach("--library")); inputs.addTransitive( NestedSetBuilder.wrap( Order.NAIVE_LINK_ORDER, @@ -112,7 +115,7 @@ public class RClassGeneratorActionBuilder { .transformAndConcat(chooseDepsToArtifacts(version)))); } } - builder.addExecPath("--classJarOutput", classJarOut); + builder.add("--classJarOutput", classJarOut); outs.add(classJarOut); // Create the spawn action. diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java index 98393b2045..d3d017a931 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterators; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; @@ -240,12 +241,18 @@ public class ResourceContainerConverter { if (dependencies != null) { if (!dependencies.getTransitiveResources().isEmpty()) { - cmdBuilder.addJoinValues( - "--data", toArg.listSeparator(), dependencies.getTransitiveResources(), toArg); + cmdBuilder.add( + "--data", + VectorArg.of(dependencies.getTransitiveResources()) + .joinWith(toArg.listSeparator()) + .mapEach(toArg)); } if (!dependencies.getDirectResources().isEmpty()) { - cmdBuilder.addJoinValues( - "--directData", toArg.listSeparator(), dependencies.getDirectResources(), toArg); + cmdBuilder.add( + "--directData", + VectorArg.of(dependencies.getDirectResources()) + .joinWith(toArg.listSeparator()) + .mapEach(toArg)); } // This flattens the nested set. Since each ResourceContainer needs to be transformed into // Artifacts, and the NestedSetBuilder.wrap doesn't support lazy Iterator evaluation diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java index d87b7dbd0d..dd9fea6ea3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java @@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; @@ -161,20 +162,22 @@ public class ResourceShrinkerActionBuilder { .getRunfilesSupport() .getRunfilesArtifactsWithoutMiddlemen()); - commandLine.addExecPath("--aapt", sdk.getAapt().getExecutable()); + commandLine.add("--aapt", sdk.getAapt().getExecutable()); - commandLine.addExecPath("--annotationJar", sdk.getAnnotationsJar()); + commandLine.add("--annotationJar", sdk.getAnnotationsJar()); inputs.add(sdk.getAnnotationsJar()); - commandLine.addExecPath("--androidJar", sdk.getAndroidJar()); + commandLine.add("--androidJar", sdk.getAndroidJar()); inputs.add(sdk.getAndroidJar()); if (!uncompressedExtensions.isEmpty()) { - commandLine.addJoinStrings( - "--uncompressedExtensions", ",", ImmutableList.copyOf(uncompressedExtensions)); + commandLine.add( + "--uncompressedExtensions", + VectorArg.of(ImmutableList.copyOf(uncompressedExtensions)).joinWith(",")); } if (!assetsToIgnore.isEmpty()) { - commandLine.addJoinStrings("--assetsToIgnore", ",", ImmutableList.copyOf(assetsToIgnore)); + commandLine.add( + "--assetsToIgnore", VectorArg.of(ImmutableList.copyOf(assetsToIgnore)).joinWith(",")); } if (ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT) { commandLine.add("--debug"); @@ -191,38 +194,38 @@ public class ResourceShrinkerActionBuilder { checkNotNull(primaryResources.getManifest()); checkNotNull(resourceApkOut); - commandLine.addExecPath("--resources", resourceFilesZip); + commandLine.add("--resources", resourceFilesZip); inputs.add(resourceFilesZip); - commandLine.addExecPath("--shrunkJar", shrunkJar); + commandLine.add("--shrunkJar", shrunkJar); inputs.add(shrunkJar); - commandLine.addExecPath("--proguardMapping", proguardMapping); + commandLine.add("--proguardMapping", proguardMapping); inputs.add(proguardMapping); - commandLine.addExecPath("--rTxt", primaryResources.getRTxt()); + commandLine.add("--rTxt", primaryResources.getRTxt()); inputs.add(primaryResources.getRTxt()); - commandLine.addExecPath("--primaryManifest", primaryResources.getManifest()); + commandLine.add("--primaryManifest", primaryResources.getManifest()); inputs.add(primaryResources.getManifest()); ImmutableList dependencyManifests = getManifests(dependencyResources); if (!dependencyManifests.isEmpty()) { - commandLine.addExecPaths("--dependencyManifest", dependencyManifests); + commandLine.add("--dependencyManifest", dependencyManifests); inputs.addAll(dependencyManifests); } ImmutableList resourcePackages = getResourcePackages(primaryResources, dependencyResources); - commandLine.addJoinStrings("--resourcePackages", ",", resourcePackages); + commandLine.add("--resourcePackages", VectorArg.of(resourcePackages).joinWith(",")); - commandLine.addExecPath("--shrunkResourceApk", resourceApkOut); + commandLine.add("--shrunkResourceApk", resourceApkOut); outputs.add(resourceApkOut); - commandLine.addExecPath("--shrunkResources", shrunkResourcesOut); + commandLine.add("--shrunkResources", shrunkResourcesOut); outputs.add(shrunkResourcesOut); - commandLine.addExecPath("--log", logOut); + commandLine.add("--log", logOut); outputs.add(logOut); ruleContext.registerAction( diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java index 0a22bb1da1..17cd13bc9b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java @@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -81,22 +82,22 @@ public class RobolectricResourceSymbolsActionBuilder { List inputs = new ArrayList<>(); - builder.addExecPath("--androidJar", sdk.getAndroidJar()); + builder.add("--androidJar", sdk.getAndroidJar()); inputs.add(sdk.getAndroidJar()); if (!Iterables.isEmpty(dependencies.getResources())) { - builder.addJoinValues( + builder.add( "--data", - RESOURCE_CONTAINER_TO_ARG.listSeparator(), - dependencies.getResources(), - RESOURCE_CONTAINER_TO_ARG); + VectorArg.of(dependencies.getResources()) + .joinWith(RESOURCE_CONTAINER_TO_ARG.listSeparator()) + .mapEach(RESOURCE_CONTAINER_TO_ARG)); } // This flattens the nested set. Iterables.addAll(inputs, FluentIterable.from(dependencies.getResources()) .transformAndConcat(RESOURCE_CONTAINER_TO_ARTIFACTS)); - builder.addExecPath("--classJarOutput", classJarOut); + builder.add("--classJarOutput", classJarOut); SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder(); if (OS.getCurrent() == OS.WINDOWS) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java index e33fd68b86..354cde97bd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java @@ -170,7 +170,7 @@ public class DeployArchiveBuilder { Compression compress, Artifact launcher) { CustomCommandLine.Builder args = CustomCommandLine.builder(); - args.addExecPath("--output", outputJar); + args.add("--output", outputJar); if (compress == Compression.COMPRESSED) { args.add("--compression"); } @@ -187,7 +187,7 @@ public class DeployArchiveBuilder { if (buildInfoFiles != null) { for (Artifact artifact : buildInfoFiles) { - args.addExecPath("--build_info_file", artifact); + args.add("--build_info_file", artifact); } } if (!includeBuildData) { @@ -198,9 +198,9 @@ public class DeployArchiveBuilder { args.add(launcher.getExecPathString()); } - args.addExecPaths("--classpath_resources", classpathResources); + args.add("--classpath_resources", classpathResources); if (runtimeClasspath != null) { - args.addExecPaths("--sources", ImmutableList.copyOf(runtimeClasspath)); + args.add("--sources", ImmutableList.copyOf(runtimeClasspath)); } return args; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index 3b75c46039..67b9d9202e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -463,11 +463,11 @@ public final class JavaCompilationHelper { javaToolchain.getJvmOptions()) .setCommandLine( CustomCommandLine.builder() - .addExecPath("--manifest_proto", manifestProto) - .addExecPath("--class_jar", classJar) - .addExecPath("--output_jar", genClassJar) + .add("--manifest_proto", manifestProto) + .add("--class_jar", classJar) + .add("--output_jar", genClassJar) .add("--temp_dir") - .addPath(tempDir(genClassJar)) + .add(tempDir(genClassJar)) .build()) .setProgressMessage("Building genclass jar %s", genClassJar.prettyPrint()) .setMnemonic("JavaSourceJar") diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index 95ff93b0be..7ded72f2cd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -43,6 +43,7 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.CustomMultiArgv; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -424,17 +425,21 @@ public final class JavaCompileAction extends SpawnAction { checkNotNull(javaBuilderJar); CustomCommandLine.Builder builder = - CustomCommandLine.builder().addPath(javaExecutable).add(javaBuilderJvmFlags); + CustomCommandLine.builder().add(javaExecutable).add(javaBuilderJvmFlags); if (!instrumentationJars.isEmpty()) { builder - .addJoinExecPaths( + .add( "-cp", - pathDelimiter, - ImmutableList.builder().addAll(instrumentationJars).add(javaBuilderJar).build()) + VectorArg.of( + ImmutableList.builder() + .addAll(instrumentationJars) + .add(javaBuilderJar) + .build()) + .joinWith(pathDelimiter)) .add(javaBuilderMainClass); } else { // If there are no instrumentation jars, use simpler '-jar' option to launch JavaBuilder. - builder.addExecPath("-jar", javaBuilderJar); + builder.add("-jar", javaBuilderJar); } return builder.build().arguments(); } @@ -599,10 +604,11 @@ public final class JavaCompileAction extends SpawnAction { pathSeparator); // The actual params-file-based command line executed for a compile action. - CommandLine javaBuilderCommandLine = CustomCommandLine.builder() - .add(spawnCommandLineBase) - .addPaths("@%s", paramFile.getExecPath()) - .build(); + CommandLine javaBuilderCommandLine = + CustomCommandLine.builder() + .add(spawnCommandLineBase) + .addFormatted("@%s", paramFile.getExecPath()) + .build(); NestedSet tools = NestedSetBuilder.stableOrder() @@ -658,37 +664,37 @@ public final class JavaCompileAction extends SpawnAction { CustomCommandLine.Builder result = CustomCommandLine.builder(); - result.add("--classdir").addPath(classDirectory); - result.add("--tempdir").addPath(tempDirectory); + result.add("--classdir").add(classDirectory); + result.add("--tempdir").add(tempDirectory); if (outputJar != null) { - result.addExecPath("--output", outputJar); + result.add("--output", outputJar); } if (sourceGenDirectory != null) { - result.add("--sourcegendir").addPath(sourceGenDirectory); + result.add("--sourcegendir").add(sourceGenDirectory); } if (gensrcOutputJar != null) { - result.addExecPath("--generated_sources_output", gensrcOutputJar); + result.add("--generated_sources_output", gensrcOutputJar); } if (manifestProtoOutput != null) { - result.addExecPath("--output_manifest_proto", manifestProtoOutput); + result.add("--output_manifest_proto", manifestProtoOutput); } if (compressJar) { result.add("--compress_jar"); } if (outputDepsProto != null) { - result.addExecPath("--output_deps_proto", outputDepsProto); + result.add("--output_deps_proto", outputDepsProto); } if (!extdirInputs.isEmpty()) { - result.addExecPaths("--extclasspath", extdirInputs); + result.add("--extclasspath", extdirInputs); } if (!bootclasspathEntries.isEmpty()) { - result.addExecPaths("--bootclasspath", bootclasspathEntries); + result.add("--bootclasspath", bootclasspathEntries); } if (!sourcePathEntries.isEmpty()) { - result.addExecPaths("--sourcepath", sourcePathEntries); + result.add("--sourcepath", sourcePathEntries); } if (!processorPath.isEmpty()) { - result.addExecPaths("--processorpath", processorPath); + result.add("--processorpath", processorPath); } if (!processorNames.isEmpty()) { result.add("--processors", ImmutableList.copyOf(processorNames)); @@ -697,10 +703,10 @@ public final class JavaCompileAction extends SpawnAction { result.add("--javacopts", ImmutableList.copyOf(processorFlags)); } if (!sourceJars.isEmpty()) { - result.addExecPaths("--source_jars", ImmutableList.copyOf(sourceJars)); + result.add("--source_jars", ImmutableList.copyOf(sourceJars)); } if (!sourceFiles.isEmpty()) { - result.addExecPaths("--sources", sourceFiles); + result.add("--sources", sourceFiles); } if (!javacOpts.isEmpty()) { result.add("--javacopts", ImmutableList.copyOf(javacOpts)); @@ -725,7 +731,7 @@ public final class JavaCompileAction extends SpawnAction { } if (!classpathEntries.isEmpty()) { - result.addExecPaths("--classpath", classpathEntries); + result.add("--classpath", classpathEntries); } // strict_java_deps controls whether the mapping from jars to targets is @@ -740,14 +746,14 @@ public final class JavaCompileAction extends SpawnAction { result.add("--reduce_classpath"); if (!compileTimeDependencyArtifacts.isEmpty()) { - result.addExecPaths("--deps_artifacts", compileTimeDependencyArtifacts); + result.add("--deps_artifacts", compileTimeDependencyArtifacts); } } } if (metadata != null) { result.add("--post_processor"); - result.addExecPath(JACOCO_INSTRUMENTATION_PROCESSOR, metadata); - result.addPath( + result.add(JACOCO_INSTRUMENTATION_PROCESSOR, metadata); + result.add( configuration .getCoverageMetadataDirectory(targetLabel.getPackageIdentifier().getRepository()) .getExecPath()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java index e7ccb8df35..016ad43967 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java @@ -421,7 +421,7 @@ public class JavaHeaderCompileAction extends SpawnAction { ParameterFile.ParameterFileType.UNQUOTED, ISO_8859_1); CommandLine transitiveCommandLine = - getBaseArgs(javaToolchain).addPaths("@%s", paramsFile.getExecPath()).build(); + getBaseArgs(javaToolchain).addFormatted("@%s", paramsFile.getExecPath()).build(); NestedSet transitiveInputs = NestedSetBuilder.stableOrder() .addTransitive(baseInputs) @@ -503,10 +503,10 @@ public class JavaHeaderCompileAction extends SpawnAction { private CustomCommandLine.Builder getBaseArgs(JavaToolchainProvider javaToolchain) { return CustomCommandLine.builder() - .addPath(JavaCommon.getHostJavaExecutable(ruleContext)) + .add(JavaCommon.getHostJavaExecutable(ruleContext)) .add("-Xverify:none") .add(javaToolchain.getJvmOptions()) - .addExecPath("-jar", javaToolchain.getHeaderCompiler()); + .add("-jar", javaToolchain.getHeaderCompiler()); } /** @@ -515,20 +515,20 @@ public class JavaHeaderCompileAction extends SpawnAction { */ private CustomCommandLine.Builder baseCommandLine( CustomCommandLine.Builder result, NestedSet classpathEntries) { - result.addExecPath("--output", outputJar); + result.add("--output", outputJar); if (outputDepsProto != null) { - result.addExecPath("--output_deps", outputDepsProto); + result.add("--output_deps", outputDepsProto); } - result.add("--temp_dir").addPath(tempDirectory); + result.add("--temp_dir").add(tempDirectory); - result.addExecPaths("--bootclasspath", bootclasspathEntries); + result.add("--bootclasspath", bootclasspathEntries); - result.addExecPaths("--sources", sourceFiles); + result.add("--sources", sourceFiles); if (!sourceJars.isEmpty()) { - result.addExecPaths("--source_jars", ImmutableList.copyOf(sourceJars)); + result.add("--source_jars", ImmutableList.copyOf(sourceJars)); } result.add("--javacopts", javacOpts); @@ -548,7 +548,7 @@ public class JavaHeaderCompileAction extends SpawnAction { result.addWithPrefix("@", targetLabel); } } - result.addExecPaths("--classpath", classpathEntries); + result.add("--classpath", classpathEntries); return result; } @@ -563,12 +563,12 @@ public class JavaHeaderCompileAction extends SpawnAction { result.add("--javacopts", ImmutableList.copyOf(processorFlags)); } if (!processorPath.isEmpty()) { - result.addExecPaths("--processorpath", processorPath); + result.add("--processorpath", processorPath); } if (strictJavaDeps != BuildConfiguration.StrictDepsMode.OFF) { result.add(new JavaCompileAction.JarsToTargetsArgv(classpathEntries, directJars)); if (!compileTimeDependencyArtifacts.isEmpty()) { - result.addExecPaths("--deps_artifacts", compileTimeDependencyArtifacts); + result.add("--deps_artifacts", compileTimeDependencyArtifacts); } } return result.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java index c4de56da51..57ff2e2ae5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/OneVersionCheckActionBuilder.java @@ -89,8 +89,8 @@ public final class OneVersionCheckActionBuilder { CustomCommandLine.Builder oneVersionArgsBuilder = CustomCommandLine.builder() - .addExecPath("--output", outputArtifact) - .addExecPath("--whitelist", oneVersionWhitelist); + .add("--output", outputArtifact) + .add("--whitelist", oneVersionWhitelist); if (enforcementLevel == OneVersionEnforcementLevel.WARNING) { oneVersionArgsBuilder.add("--succeed_on_found_violations"); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java index e8902f49ec..cc2aaf6822 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java @@ -104,9 +104,9 @@ public class ResourceJarActionBuilder { .add("--normalize") .add("--dont_change_compression") .add("--exclude_build_data") - .addExecPath("--output", outputJar); + .add("--output", outputJar); if (!resourceJars.isEmpty()) { - command.addExecPaths("--sources", resourceJars); + command.add("--sources", resourceJars); } if (!resources.isEmpty() || !messages.isEmpty()) { command.add("--resources"); @@ -119,7 +119,7 @@ public class ResourceJarActionBuilder { } } if (!classpathResources.isEmpty()) { - command.addExecPaths("--classpath_resources", classpathResources); + command.add("--classpath_resources", classpathResources); } // TODO(b/37444705): remove this logic and always call useParameterFile once the bug is fixed // Most resource jar actions are very small and expanding the argument list for @@ -153,9 +153,9 @@ public class ResourceJarActionBuilder { PathFragment resourcePath, Artifact artifact, CustomCommandLine.Builder builder) { PathFragment execPath = artifact.getExecPath(); if (execPath.equals(resourcePath)) { - builder.addPaths("%s", resourcePath); + builder.addFormatted("%s", resourcePath); } else { - builder.addPaths("%s:%s", execPath, resourcePath); + builder.addFormatted("%s:%s", execPath, resourcePath); } } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java index fffeb69549..10a06eae07 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java @@ -92,13 +92,13 @@ public final class SingleJarActionBuilder { private static CommandLine sourceJarCommandLine(Artifact outputJar, Map resources, Iterable resourceJars) { CustomCommandLine.Builder args = CustomCommandLine.builder(); - args.addExecPath("--output", outputJar); + args.add("--output", outputJar); args.add(SOURCE_JAR_COMMAND_LINE_ARGS); - args.addExecPaths("--sources", ImmutableList.copyOf(resourceJars)); + args.add("--sources", ImmutableList.copyOf(resourceJars)); if (!resources.isEmpty()) { args.add("--resources"); for (Map.Entry resource : resources.entrySet()) { - args.addPaths("%s:%s", resource.getValue().getExecPath(), resource.getKey()); + args.addFormatted("%s:%s", resource.getValue().getExecPath(), resource.getKey()); } } return args.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java index 49c8636f52..493f6f5f26 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java @@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.Builder; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; @@ -152,10 +153,10 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory { Artifact outputBinary) throws RuleErrorException { CustomCommandLine copyCommandLine = - new CustomCommandLine.Builder() + new Builder() .add("/bin/cp") .add(resolveXcenvBasedPath(ruleContext, platform)) - .addExecPaths(ImmutableList.of(outputBinary)) + .add(ImmutableList.of(outputBinary)) .build(); ruleContext.registerAction( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java index b353ad1d6b..179095a7bc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java @@ -267,8 +267,7 @@ final class BundleSupport { Artifact storyboardInput) { CustomCommandLine.Builder commandLine = CustomCommandLine.builder() - // The next three arguments are positional, i.e. they don't have flags before them. - .addPath(zipOutput.getExecPath()) + .add(zipOutput.getExecPath()) .add(archiveRoot) .add("--minimum-deployment-target") .add(bundling.getMinimumOsVersion().toString()) @@ -279,9 +278,7 @@ final class BundleSupport { commandLine.add("--target-device").add(targetDeviceFamily.name().toLowerCase(Locale.US)); } - return commandLine - .addPath(storyboardInput.getExecPath()) - .build(); + return commandLine.add(storyboardInput.getExecPath()).build(); } private void registerMomczipActions(ObjcProvider objcProvider) { @@ -295,17 +292,20 @@ final class BundleSupport { .setExecutable(attributes.momcWrapper()) .addOutput(outputZip) .addInputs(datamodel.getInputs()) - .setCommandLine(CustomCommandLine.builder() - .addPath(outputZip.getExecPath()) - .add(datamodel.archiveRootForMomczip()) - .add("-XD_MOMC_SDKROOT=" + AppleToolchain.sdkDir()) - .add("-XD_MOMC_IOS_TARGET_VERSION=" + bundling.getMinimumOsVersion()) - .add("-MOMC_PLATFORMS") - .add(appleConfiguration.getMultiArchPlatform(PlatformType.IOS) - .getLowerCaseNameInPlist()) - .add("-XD_MOMC_TARGET_VERSION=10.6") - .add(datamodel.getContainer().getSafePathString()) - .build()) + .setCommandLine( + CustomCommandLine.builder() + .add(outputZip.getExecPath()) + .add(datamodel.archiveRootForMomczip()) + .add("-XD_MOMC_SDKROOT=" + AppleToolchain.sdkDir()) + .add("-XD_MOMC_IOS_TARGET_VERSION=" + bundling.getMinimumOsVersion()) + .add("-MOMC_PLATFORMS") + .add( + appleConfiguration + .getMultiArchPlatform(PlatformType.IOS) + .getLowerCaseNameInPlist()) + .add("-XD_MOMC_TARGET_VERSION=10.6") + .add(datamodel.getContainer().getSafePathString()) + .build()) .build(ruleContext)); } } @@ -336,12 +336,14 @@ final class BundleSupport { ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) .setMnemonic("ConvertStringsPlist") .setExecutable(PathFragment.create("/usr/bin/plutil")) - .setCommandLine(CustomCommandLine.builder() - .add("-convert").add("binary1") - .addExecPath("-o", bundled) - .add("--") - .addPath(strings.getExecPath()) - .build()) + .setCommandLine( + CustomCommandLine.builder() + .add("-convert") + .add("binary1") + .add("-o", bundled) + .add("--") + .add(strings.getExecPath()) + .build()) .addInput(strings) .addInput(CompilationSupport.xcrunwrapper(ruleContext).getExecutable()) .addOutput(bundled) @@ -434,12 +436,10 @@ final class BundleSupport { } CustomCommandLine.Builder commandLine = CustomCommandLine.builder() - // The next three arguments are positional, i.e. they don't have flags before them. - .addPath(zipOutput.getExecPath()) + .add(zipOutput.getExecPath()) .add("--platform") - .add(appleConfiguration.getMultiArchPlatform(platformType) - .getLowerCaseNameInPlist()) - .addExecPath("--output-partial-info-plist", partialInfoPlist) + .add(appleConfiguration.getMultiArchPlatform(platformType).getLowerCaseNameInPlist()) + .add("--output-partial-info-plist", partialInfoPlist) .add("--minimum-deployment-target") .add(bundling.getMinimumOsVersion().toString()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index 76c67e9c6c..e6043f1fc8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -56,6 +56,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -882,7 +883,7 @@ public abstract class CompilationSupport { treeObjFiles.add(objFile); objFilesToLinkParam.addExpandedTreeArtifactExecPaths(objFile); } else { - objFilesToLinkParam.addPath(objFile.getExecPath()); + objFilesToLinkParam.add(objFile.getExecPath()); } } @@ -1074,14 +1075,17 @@ public abstract class CompilationSupport { CustomCommandLine commandLine = CustomCommandLine.builder() - .addExecPath("--input_archive", j2objcArchive) - .addExecPath("--output_archive", prunedJ2ObjcArchive) - .addExecPath("--dummy_archive", dummyArchive) - .addExecPath("--xcrunwrapper", xcrunwrapper(ruleContext).getExecutable()) - .addJoinExecPaths("--dependency_mapping_files", ",", j2ObjcDependencyMappingFiles) - .addJoinExecPaths("--header_mapping_files", ",", j2ObjcHeaderMappingFiles) - .addJoinExecPaths( - "--archive_source_mapping_files", ",", j2ObjcArchiveSourceMappingFiles) + .add("--input_archive", j2objcArchive) + .add("--output_archive", prunedJ2ObjcArchive) + .add("--dummy_archive", dummyArchive) + .add("--xcrunwrapper", xcrunwrapper(ruleContext).getExecutable()) + .add( + "--dependency_mapping_files", + VectorArg.of(j2ObjcDependencyMappingFiles).joinWith(",")) + .add("--header_mapping_files", VectorArg.of(j2ObjcHeaderMappingFiles).joinWith(",")) + .add( + "--archive_source_mapping_files", + VectorArg.of(j2ObjcArchiveSourceMappingFiles).joinWith(",")) .add("--entry_classes") .add(Joiner.on(",").join(entryClasses)) .build(); @@ -1107,7 +1111,7 @@ public abstract class CompilationSupport { .addTransitiveInputs(j2ObjcHeaderMappingFiles) .addTransitiveInputs(j2ObjcArchiveSourceMappingFiles) .setCommandLine( - CustomCommandLine.builder().addPaths("@%s", paramFile.getExecPath()).build()) + CustomCommandLine.builder().addFormatted("@%s", paramFile.getExecPath()).build()) .addOutput(prunedJ2ObjcArchive) .build(ruleContext)); } @@ -1165,8 +1169,8 @@ public abstract class CompilationSupport { return CustomCommandLine.builder() .add(STRIP) .add(extraFlags) - .addExecPath("-o", strippedArtifact) - .addPath(unstrippedArtifact.getExecPath()) + .add("-o", strippedArtifact) + .add(unstrippedArtifact.getExecPath()) .build(); } @@ -1393,8 +1397,11 @@ public abstract class CompilationSupport { .add(XcodeConfig.getXcodeVersion(ruleContext).toStringWithMinimumComponents(2)) .add("--"); for (ObjcHeaderThinningInfo info : infos) { - cmdLine.addJoinPaths( - ":", ImmutableList.of(info.sourceFile.getExecPath(), info.headersListFile.getExecPath())); + cmdLine.add( + VectorArg.of( + ImmutableList.of( + info.sourceFile.getExecPath(), info.headersListFile.getExecPath())) + .joinWith(":")); builder.addInput(info.sourceFile).addOutput(info.headersListFile); } ruleContext.registerAction( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index 1c17394a30..af346447c2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -34,6 +34,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -481,18 +482,18 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF argBuilder.add("--java").add(javaExecutable.getPathString()); Artifact j2ObjcDeployJar = ruleContext.getPrerequisiteArtifact("$j2objc", Mode.HOST); - argBuilder.addExecPath("--j2objc", j2ObjcDeployJar); + argBuilder.add("--j2objc", j2ObjcDeployJar); argBuilder.add("--main_class").add("com.google.devtools.j2objc.J2ObjC"); - argBuilder.add("--objc_file_path").addPath(j2ObjcSource.getObjcFilePath()); + argBuilder.add("--objc_file_path").add(j2ObjcSource.getObjcFilePath()); Artifact outputDependencyMappingFile = j2ObjcOutputDependencyMappingFile(ruleContext); - argBuilder.addExecPath("--output_dependency_mapping_file", outputDependencyMappingFile); + argBuilder.add("--output_dependency_mapping_file", outputDependencyMappingFile); ImmutableList.Builder sourceJarOutputFiles = ImmutableList.builder(); if (!Iterables.isEmpty(sourceJars)) { sourceJarOutputFiles.addAll(sourceJarOutputs(ruleContext)); - argBuilder.addJoinExecPaths("--src_jars", ",", ImmutableList.copyOf(sourceJars)); + argBuilder.add("--src_jars", VectorArg.of(ImmutableList.copyOf(sourceJars)).joinWith(",")); argBuilder.add(sourceJarFlags(ruleContext)); } @@ -504,44 +505,44 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF NestedSet depsHeaderMappingFiles = depJ2ObjcMappingFileProvider.getHeaderMappingFiles(); if (!depsHeaderMappingFiles.isEmpty()) { - argBuilder.addJoinExecPaths("--header-mapping", ",", depsHeaderMappingFiles); + argBuilder.add("--header-mapping", VectorArg.of(depsHeaderMappingFiles).joinWith(",")); } boolean experimentalJ2ObjcHeaderMap = ruleContext.getFragment(J2ObjcConfiguration.class).experimentalJ2ObjcHeaderMap(); Artifact outputHeaderMappingFile = j2ObjcOutputHeaderMappingFile(ruleContext); if (!experimentalJ2ObjcHeaderMap) { - argBuilder.addExecPath("--output-header-mapping", outputHeaderMappingFile); + argBuilder.add("--output-header-mapping", outputHeaderMappingFile); } NestedSet depsClassMappingFiles = depJ2ObjcMappingFileProvider.getClassMappingFiles(); if (!depsClassMappingFiles.isEmpty()) { - argBuilder.addJoinExecPaths("--mapping", ",", depsClassMappingFiles); + argBuilder.add("--mapping", VectorArg.of(depsClassMappingFiles).joinWith(",")); } Artifact archiveSourceMappingFile = j2ObjcOutputArchiveSourceMappingFile(ruleContext); - argBuilder.addExecPath("--output_archive_source_mapping_file", archiveSourceMappingFile); + argBuilder.add("--output_archive_source_mapping_file", archiveSourceMappingFile); Artifact compiledLibrary = ObjcRuleClasses.j2objcIntermediateArtifacts(ruleContext).archive(); - argBuilder.addExecPath("--compiled_archive_file_path", compiledLibrary); + argBuilder.add("--compiled_archive_file_path", compiledLibrary); Artifact bootclasspathJar = ruleContext.getPrerequisiteArtifact("$jre_emul_jar", Mode.HOST); argBuilder.add("-Xbootclasspath:" + bootclasspathJar.getExecPathString()); Artifact deadCodeReport = ruleContext.getPrerequisiteArtifact(":dead_code_report", Mode.HOST); if (deadCodeReport != null) { - argBuilder.addExecPath("--dead-code-report", deadCodeReport); + argBuilder.add("--dead-code-report", deadCodeReport); } - argBuilder.add("-d").addPath(j2ObjcSource.getObjcFilePath()); + argBuilder.add("-d").add(j2ObjcSource.getObjcFilePath()); NestedSet compileTimeJars = compArgsProvider.getRecursiveJavaCompilationArgs().getCompileTimeJars(); if (!compileTimeJars.isEmpty()) { - argBuilder.addJoinExecPaths("-classpath", ":", compileTimeJars); + argBuilder.add("-classpath", VectorArg.of(compileTimeJars).joinWith(":")); } - argBuilder.addExecPaths(ImmutableList.copyOf(sources)); + argBuilder.add(ImmutableList.copyOf(sources)); Artifact paramFile = j2ObjcOutputParamFile(ruleContext); ruleContext.registerAction(new ParameterFileWriteAction( @@ -566,7 +567,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF .addTransitiveInputs(depsClassMappingFiles) .addInput(paramFile) .setCommandLine( - CustomCommandLine.builder().addPaths("@%s", paramFile.getExecPath()).build()) + CustomCommandLine.builder().addFormatted("@%s", paramFile.getExecPath()).build()) .addOutputs(j2ObjcSource.getObjcSrcs()) .addOutputs(j2ObjcSource.getObjcHdrs()) .addOutput(outputDependencyMappingFile) @@ -584,13 +585,14 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF if (experimentalJ2ObjcHeaderMap) { CustomCommandLine.Builder headerMapCommandLine = CustomCommandLine.builder(); if (!Iterables.isEmpty(sources)) { - headerMapCommandLine.addJoinExecPaths("--source_files", ",", ImmutableList.copyOf(sources)); + headerMapCommandLine.add( + "--source_files", VectorArg.of(ImmutableList.copyOf(sources)).joinWith(",")); } if (!Iterables.isEmpty(sourceJars)) { - headerMapCommandLine.addJoinExecPaths( - "--source_jars", ",", ImmutableList.copyOf(sourceJars)); + headerMapCommandLine.add( + "--source_jars", VectorArg.of(ImmutableList.copyOf(sourceJars)).joinWith(",")); } - headerMapCommandLine.addExecPath("--output_mapping_file", outputHeaderMappingFile); + headerMapCommandLine.add("--output_mapping_file", outputHeaderMappingFile); ruleContext.registerAction(new SpawnAction.Builder() .setMnemonic("GenerateJ2objcHeaderMap") .setExecutable(ruleContext.getPrerequisiteArtifact("$j2objc_header_map", Mode.HOST)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java index 0329afa5b3..56f171cc34 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java @@ -50,6 +50,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate; import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate.OutputPathMapper; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -302,14 +303,15 @@ public class LegacyCompilationSupport extends CompilationSupport { .add(ImmutableList.copyOf(compileFlagsForClang(appleConfiguration))) .add(commonLinkAndCompileFlagsForClang(objcProvider, objcConfiguration, appleConfiguration)) .add(objcConfiguration.getCoptsForCompilationMode()) - .addBeforeEachPath( - "-iquote", ObjcCommon.userHeaderSearchPaths(objcProvider, buildConfiguration)) - .addBeforeEachExecPath("-include", ImmutableList.copyOf(pchFile.asSet())) - .addBeforeEachPath("-I", ImmutableList.copyOf(priorityHeaders)) - .addBeforeEachPath("-I", objcProvider.get(INCLUDE)) - .addBeforeEachPath("-isystem", objcProvider.get(INCLUDE_SYSTEM)) + .add( + VectorArg.of(ObjcCommon.userHeaderSearchPaths(objcProvider, buildConfiguration)) + .beforeEach("-iquote")) + .add(VectorArg.of(ImmutableList.copyOf(pchFile.asSet())).beforeEach("-include")) + .add(VectorArg.of(ImmutableList.copyOf(priorityHeaders)).beforeEach("-I")) + .add(VectorArg.of(objcProvider.get(INCLUDE)).beforeEach("-I")) + .add(VectorArg.of(objcProvider.get(INCLUDE_SYSTEM)).beforeEach("-isystem")) .add(ImmutableList.copyOf(otherFlags)) - .addFormatEach("-D%s", objcProvider.get(DEFINE)) + .add(VectorArg.of(objcProvider.get(DEFINE)).formatEach("-D%s")) .add(coverageFlags) .add(ImmutableList.copyOf(getCompileRuleCopts())); @@ -318,7 +320,7 @@ public class LegacyCompilationSupport extends CompilationSupport { if (sourceFile.isTreeArtifact()) { commandLine.addPlaceholderTreeArtifactExecPath(sourceFile); } else { - commandLine.addPath(sourceFile.getExecPath()); + commandLine.add(sourceFile.getExecPath()); } // Add output object file arguments. @@ -326,12 +328,12 @@ public class LegacyCompilationSupport extends CompilationSupport { if (objFile.isTreeArtifact()) { commandLine.addPlaceholderTreeArtifactExecPath(objFile); } else { - commandLine.addPath(objFile.getExecPath()); + commandLine.add(objFile.getExecPath()); } // Add Dotd file arguments. if (dotdFile.isPresent()) { - commandLine.add("-MD").addExecPath("-MF", dotdFile.get()); + commandLine.add("-MD").add("-MF", dotdFile.get()); } // Add module map arguments. @@ -535,7 +537,7 @@ public class LegacyCompilationSupport extends CompilationSupport { .add(AppleToolchain.sdkDir()) .add("-o") .add(outputArchive.getExecPathString()) - .addExecPaths(ImmutableList.copyOf(inputArtifacts)) + .add(ImmutableList.copyOf(inputArtifacts)) .build()) .addInputs(inputArtifacts) .addOutput(outputArchive) @@ -665,8 +667,8 @@ public class LegacyCompilationSupport extends CompilationSupport { Optional bitcodeSymbolMap) { ImmutableList libraryNames = libraryNames(objcProvider); - CustomCommandLine.Builder commandLine = CustomCommandLine.builder() - .addPath(xcrunwrapper(ruleContext).getExecutable().getExecPath()); + CustomCommandLine.Builder commandLine = + CustomCommandLine.builder().add(xcrunwrapper(ruleContext).getExecutable().getExecPath()); if (objcProvider.is(USES_CPP)) { commandLine .add(CLANG_PLUSPLUS) @@ -727,11 +729,15 @@ public class LegacyCompilationSupport extends CompilationSupport { .add("@executable_path/Frameworks") .add("-fobjc-link-runtime") .add(DEFAULT_LINKER_FLAGS) - .addBeforeEach("-framework", ImmutableList.copyOf(frameworkNames(objcProvider))) - .addBeforeEach("-weak_framework", SdkFramework.names(objcProvider.get(WEAK_SDK_FRAMEWORK))) - .addFormatEach("-l%s", libraryNames) - .addExecPath("-o", linkedBinary) - .addBeforeEachExecPath("-force_load", forceLinkArtifacts) + .add( + VectorArg.of(ImmutableList.copyOf(frameworkNames(objcProvider))) + .beforeEach("-framework")) + .add( + VectorArg.of(SdkFramework.names(objcProvider.get(WEAK_SDK_FRAMEWORK))) + .beforeEach("-weak_framework")) + .add(VectorArg.of(libraryNames).formatEach("-l%s")) + .add("-o", linkedBinary) + .add(VectorArg.of(forceLinkArtifacts).beforeEach("-force_load")) .add(ImmutableList.copyOf(extraLinkArgs)) .add(objcProvider.get(ObjcProvider.LINKOPT)); @@ -761,7 +767,7 @@ public class LegacyCompilationSupport extends CompilationSupport { PathFragment dsymPath = FileSystemUtils.removeExtension(dsymBundleZip.get().getExecPath()); commandLine .add("&&") - .addPath(xcrunwrapper(ruleContext).getExecutable().getExecPath()) + .add(xcrunwrapper(ruleContext).getExecutable().getExecPath()) .add(DSYMUTIL) .add(linkedBinary.getExecPathString()) .add("-o " + dsymPath) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java index 41487ecc43..762137f685 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java @@ -46,18 +46,20 @@ public class LipoSupport { public LipoSupport registerCombineArchitecturesAction( NestedSet inputBinaries, Artifact outputBinary, ApplePlatform platform) { if (inputBinaries.toList().size() > 1) { - ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder( - ruleContext.getFragment(AppleConfiguration.class), platform) - .setMnemonic("ObjcCombiningArchitectures") - .addTransitiveInputs(inputBinaries) - .addOutput(outputBinary) - .setExecutable(CompilationSupport.xcrunwrapper(ruleContext)) - .setCommandLine(CustomCommandLine.builder() - .add(ObjcRuleClasses.LIPO) - .addExecPaths("-create", inputBinaries) - .addExecPath("-o", outputBinary) - .build()) - .build(ruleContext)); + ruleContext.registerAction( + ObjcRuleClasses.spawnAppleEnvActionBuilder( + ruleContext.getFragment(AppleConfiguration.class), platform) + .setMnemonic("ObjcCombiningArchitectures") + .addTransitiveInputs(inputBinaries) + .addOutput(outputBinary) + .setExecutable(CompilationSupport.xcrunwrapper(ruleContext)) + .setCommandLine( + CustomCommandLine.builder() + .add(ObjcRuleClasses.LIPO) + .add("-create", inputBinaries) + .add("-o", outputBinary) + .build()) + .build(ruleContext)); } else { ruleContext.registerAction(new SymlinkAction( ruleContext.getActionOwner(), diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java index fb1a75fdfb..08e595f8a0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java @@ -27,6 +27,8 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.Builder; +import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; import com.google.devtools.build.lib.analysis.actions.FileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -494,7 +496,7 @@ final class ProtobufSupport { } private CustomCommandLine getGenerationCommandLine(Artifact protoInputsFile) { - return new CustomCommandLine.Builder() + return new Builder() .add("--input-file-list") .add(protoInputsFile.getExecPathString()) .add("--output-dir") @@ -504,7 +506,7 @@ final class ProtobufSupport { .add(getGenfilesPathString()) .add("--proto-root-dir") .add(".") - .addBeforeEachExecPath("--config", portableProtoFilters) + .add(VectorArg.of(portableProtoFilters).beforeEach("--config")) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java index 4071bfb214..0f12eba57a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java @@ -1029,12 +1029,12 @@ public final class ReleaseBundlingSupport { commandLine .add("--output_zip_path") - .addPath(intermediateArtifacts.swiftFrameworksFileZip().getExecPath()) + .add(intermediateArtifacts.swiftFrameworksFileZip().getExecPath()) .add("--bundle_path") .add("Frameworks") .add("--platform") .add(platform.getLowerCaseNameInPlist()) - .addExecPath("--scan-executable", combinedArchBinary); + .add("--scan-executable", combinedArchBinary); ruleContext.registerAction( ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) @@ -1061,12 +1061,12 @@ public final class ReleaseBundlingSupport { commandLine .add("--output_zip_path") - .addPath(intermediateArtifacts.swiftSupportZip().getExecPath()) + .add(intermediateArtifacts.swiftSupportZip().getExecPath()) .add("--bundle_path") .add("SwiftSupport/" + platform.getLowerCaseNameInPlist()) .add("--platform") .add(platform.getLowerCaseNameInPlist()) - .addExecPath("--scan-executable", combinedArchBinary); + .add("--scan-executable", combinedArchBinary); ruleContext.registerAction( ObjcRuleClasses.spawnAppleEnvActionBuilder(configuration, platform) diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java index 29c804fef8..1f93fbf85e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java @@ -296,7 +296,7 @@ public class ProtoCompileActionBuilder { Preconditions.checkArgument(langPluginParameter1 != null); // We pass a separate langPluginName as there are plugins that cannot be overridden // and thus we have to deal with "$xx_plugin" and "xx_plugin". - result.addFormat( + result.addFormatted( "--plugin=protoc-gen-%s=%s", langPrefix, langPluginTarget.getExecutable().getExecPath()); result.add(new LazyLangPluginFlag(langPrefix, langPluginParameter1)); } @@ -314,11 +314,11 @@ public class ProtoCompileActionBuilder { if (areDepsStrict) { // Note: the %s in the line below is used by proto-compiler. That is, the string we create // here should have a literal %s in it. - result.addFormat(STRICT_DEPS_FLAG_TEMPLATE, ruleContext.getLabel()); + result.addFormatted(STRICT_DEPS_FLAG_TEMPLATE, ruleContext.getLabel()); } for (Artifact src : supportData.getDirectProtoSources()) { - result.addPath(src.getRootRelativePath()); + result.add(src.getRootRelativePath()); } if (!hasServices) { @@ -580,7 +580,7 @@ public class ProtoCompileActionBuilder { String.format("PLUGIN_%s_out", invocation.name)))); if (toolchain.pluginExecutable() != null) { - cmdLine.addFormat( + cmdLine.addFormatted( "--plugin=protoc-gen-PLUGIN_%s=%s", invocation.name, toolchain.pluginExecutable().getExecutable().getExecPath()); } @@ -592,11 +592,11 @@ public class ProtoCompileActionBuilder { cmdLine.add(new ProtoCommandLineArgv(protosInDirectDeps, transitiveSources)); if (protosInDirectDeps != null) { - cmdLine.addFormat(STRICT_DEPS_FLAG_TEMPLATE, ruleLabel); + cmdLine.addFormatted(STRICT_DEPS_FLAG_TEMPLATE, ruleLabel); } for (Artifact src : protosToCompile) { - cmdLine.addPath(src.getExecPath()); + cmdLine.add(src.getExecPath()); } if (!allowServices) { -- cgit v1.2.3