aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-05-24 22:20:45 +0200
committerGravatar Irina Iancu <elenairina@google.com>2017-05-26 09:36:15 +0200
commitd0e58c4790f499afa5d1fcafb2f9e4c3f47b3ca0 (patch)
tree15af629799daa35970627d59fe138a7b17e17e58 /src
parent721ea3e46922df63205e0ba87e49a50449e2f78b (diff)
Automated g4 rollback of commit e2edf2e141a09c025a958d580c7cac7b57c70d83.
*** Reason for rollback *** Rollforward with fix. *** Original change description *** Automated g4 rollback of commit c78c947e6a8cbb323304f872a3dcabb989a3d76b. *** Reason for rollback *** Breaks android targets in the nightly - see [] *** Original change description *** Do not retain transitive data in AndroidLocalTestBase... *** ROLLBACK_OF=156745610 RELNOTES: None PiperOrigin-RevId: 157028029
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java58
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/CommandLine.java43
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileHelper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java111
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestTargetExecutionSettings.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java13
10 files changed, 178 insertions, 111 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java
index e53fc3efbd..549204bd3f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java
@@ -20,6 +20,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.SourceManifestAction.ManifestType;
import com.google.devtools.build.lib.analysis.actions.ActionConstructionContext;
+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.SymlinkTreeAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.RunUnder;
@@ -76,19 +78,23 @@ public final class RunfilesSupport {
private final Artifact sourcesManifest;
private final Artifact owningExecutable;
private final boolean createSymlinks;
- private final ImmutableList<String> args;
+ private final CommandLine args;
/**
* Creates the RunfilesSupport helper with the given executable and runfiles.
*
* @param ruleContext the rule context to create the runfiles support for
* @param executable the executable for whose runfiles this runfiles support is responsible, may
- * be null
+ * be null
* @param runfiles the runfiles
* @param appendingArgs to be added after the rule's args
*/
- private RunfilesSupport(RuleContext ruleContext, Artifact executable, Runfiles runfiles,
- List<String> appendingArgs, boolean createSymlinks) {
+ private RunfilesSupport(
+ RuleContext ruleContext,
+ Artifact executable,
+ Runfiles runfiles,
+ CommandLine appendingArgs,
+ boolean createSymlinks) {
owningExecutable = Preconditions.checkNotNull(executable);
this.createSymlinks = createSymlinks;
@@ -121,10 +127,8 @@ public final class RunfilesSupport {
ruleContext, artifactsMiddleman, runfilesManifest);
sourcesManifest = createSourceManifest(ruleContext, runfiles);
- args = ImmutableList.<String>builder()
- .addAll(ruleContext.getTokenizedStringListAttr("args"))
- .addAll(appendingArgs)
- .build();
+ ImmutableList<String> args = ruleContext.getTokenizedStringListAttr("args");
+ this.args = CommandLine.concat(args, appendingArgs);
}
/**
@@ -356,11 +360,8 @@ public final class RunfilesSupport {
}
}
- /**
- * Returns the unmodifiable list of expanded and tokenized 'args' attribute
- * values.
- */
- public List<String> getArgs() {
+ /** Returns the unmodifiable list of expanded and tokenized 'args' attribute values. */
+ public CommandLine getArgs() {
return args;
}
@@ -370,7 +371,11 @@ public final class RunfilesSupport {
*/
public static RunfilesSupport withExecutable(RuleContext ruleContext, Runfiles runfiles,
Artifact executable) {
- return new RunfilesSupport(ruleContext, executable, runfiles, ImmutableList.<String>of(),
+ return new RunfilesSupport(
+ ruleContext,
+ executable,
+ runfiles,
+ CommandLine.EMPTY,
ruleContext.shouldCreateRunfilesSymlinks());
}
@@ -380,8 +385,8 @@ public final class RunfilesSupport {
*/
public static RunfilesSupport withExecutable(RuleContext ruleContext, Runfiles runfiles,
Artifact executable, boolean createSymlinks) {
- return new RunfilesSupport(ruleContext, executable, runfiles, ImmutableList.<String>of(),
- createSymlinks);
+ return new RunfilesSupport(
+ ruleContext, executable, runfiles, CommandLine.EMPTY, createSymlinks);
}
/**
@@ -389,7 +394,24 @@ public final class RunfilesSupport {
*/
public static RunfilesSupport withExecutable(RuleContext ruleContext, Runfiles runfiles,
Artifact executable, List<String> appendingArgs) {
- return new RunfilesSupport(ruleContext, executable, runfiles,
- ImmutableList.copyOf(appendingArgs), ruleContext.shouldCreateRunfilesSymlinks());
+ return new RunfilesSupport(
+ ruleContext,
+ executable,
+ runfiles,
+ CustomCommandLine.builder().add(appendingArgs).build(),
+ ruleContext.shouldCreateRunfilesSymlinks());
+ }
+
+ /**
+ * Creates and returns a RunfilesSupport object for the given rule, executable, runfiles and args.
+ */
+ public static RunfilesSupport withExecutable(
+ RuleContext ruleContext, Runfiles runfiles, Artifact executable, CommandLine appendingArgs) {
+ return new RunfilesSupport(
+ ruleContext,
+ executable,
+ runfiles,
+ appendingArgs,
+ ruleContext.shouldCreateRunfilesSymlinks());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/CommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/CommandLine.java
index 1d3e0bebb8..7bc670569a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/CommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/CommandLine.java
@@ -19,10 +19,17 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
import com.google.devtools.build.lib.collect.CollectionUtils;
-import com.google.devtools.build.lib.util.Preconditions;
/** A representation of a list of arguments, often a command executed by {@link SpawnAction}. */
public abstract class CommandLine {
+ public static final CommandLine EMPTY =
+ new CommandLine() {
+ @Override
+ public Iterable<String> arguments() {
+ return ImmutableList.of();
+ }
+ };
+
/**
* Returns the command line.
*/
@@ -55,18 +62,42 @@ public abstract class CommandLine {
* Returns a {@link CommandLine} that is constructed by prepending the {@code executableArgs} to
* {@code commandLine}.
*/
- CommandLine prepend(final ImmutableList<String> executableArgs) {
- final CommandLine self = this;
- Preconditions.checkState(!executableArgs.isEmpty());
+ public static CommandLine concat(
+ final ImmutableList<String> executableArgs, final CommandLine commandLine) {
+ if (executableArgs.isEmpty()) {
+ return commandLine;
+ }
+ return new CommandLine() {
+ @Override
+ public Iterable<String> arguments() {
+ return Iterables.concat(executableArgs, commandLine.arguments());
+ }
+
+ @Override
+ public Iterable<String> arguments(ArtifactExpander artifactExpander) {
+ return Iterables.concat(executableArgs, commandLine.arguments(artifactExpander));
+ }
+ };
+ }
+
+ /**
+ * Returns a {@link CommandLine} that is constructed by appending the {@code args} to {@code
+ * commandLine}.
+ */
+ public static CommandLine concat(
+ final CommandLine commandLine, final ImmutableList<String> args) {
+ if (args.isEmpty()) {
+ return commandLine;
+ }
return new CommandLine() {
@Override
public Iterable<String> arguments() {
- return Iterables.concat(executableArgs, self.arguments());
+ return Iterables.concat(commandLine.arguments(), args);
}
@Override
public Iterable<String> arguments(ArtifactExpander artifactExpander) {
- return Iterables.concat(executableArgs, self.arguments(artifactExpander));
+ return Iterables.concat(commandLine.arguments(artifactExpander), args);
}
};
}
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 e39401ac04..d1253c98e0 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
@@ -137,7 +137,7 @@ public final class ParamFileHelper {
return commandLine;
}
- return commandLine.prepend(ImmutableList.copyOf(executableArgs));
+ return CommandLine.concat(ImmutableList.copyOf(executableArgs), commandLine);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
index 7d98a9a942..4326269ccf 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.exec;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.io.ByteStreams;
import com.google.common.io.Closeables;
@@ -188,7 +189,7 @@ public abstract class TestStrategy implements TestActionContext {
// Execute the test using the alias in the runfiles tree, as mandated by the Test Encyclopedia.
args.add(execSettings.getExecutable().getRootRelativePath().getCallablePathString());
- args.addAll(execSettings.getArgs());
+ Iterables.addAll(args, execSettings.getArgs().arguments());
return ImmutableList.copyOf(args);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index eae1f2dfb4..a6d7f39718 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -67,7 +67,9 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
return null;
}
checkResourceInlining(ruleContext);
- NestedSetBuilder<Aar> transitiveAars = collectTransitiveAars(ruleContext);
+ NestedSetBuilder<Aar> transitiveAars = NestedSetBuilder.naiveLinkOrder();
+ NestedSetBuilder<Artifact> transitiveAarArtifacts = NestedSetBuilder.stableOrder();
+ collectTransitiveAars(ruleContext, transitiveAars, transitiveAarArtifacts);
NestedSetBuilder<Artifact> proguardConfigsbuilder = NestedSetBuilder.stableOrder();
proguardConfigsbuilder.addTransitive(new ProguardLibrary(ruleContext).collectProguardSpecs());
@@ -148,12 +150,12 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
// applicationManifest has already been checked for nullness above in this method
ApplicationManifest applicationManifest = androidSemantics.getManifestForRule(ruleContext);
aar = Aar.create(aarOut, applicationManifest.getManifest());
- transitiveAars.add(aar);
+ addAarToProvider(aar, transitiveAars, transitiveAarArtifacts);
} else if (AndroidCommon.getAndroidResources(ruleContext) != null) {
primaryResources = Iterables.getOnlyElement(
AndroidCommon.getAndroidResources(ruleContext).getDirectAndroidResources());
aar = Aar.create(aarOut, primaryResources.getManifest());
- transitiveAars.add(aar);
+ addAarToProvider(aar, transitiveAars, transitiveAarArtifacts);
} else {
// there are no local resources and resources attribute was not specified either
aar = null;
@@ -234,12 +236,26 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
if (!JavaCommon.isNeverLink(ruleContext)) {
builder.add(
AndroidLibraryAarProvider.class,
- AndroidLibraryAarProvider.create(aar, transitiveAars.build()));
+ AndroidLibraryAarProvider.create(
+ aar, transitiveAars.build(), transitiveAarArtifacts.build()));
}
return builder.build();
}
+ private void addAarToProvider(
+ Aar aar,
+ NestedSetBuilder<Aar> transitiveAars,
+ NestedSetBuilder<Artifact> transitiveAarArtifacts) {
+ transitiveAars.add(aar);
+ if (aar.getAar() != null) {
+ transitiveAarArtifacts.add(aar.getAar());
+ }
+ if (aar.getManifest() != null) {
+ transitiveAarArtifacts.add(aar.getManifest());
+ }
+ }
+
private void checkResourceInlining(RuleContext ruleContext) {
AndroidResourcesProvider resources = AndroidCommon.getAndroidResources(ruleContext);
if (resources == null) {
@@ -256,13 +272,15 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
}
}
- private NestedSetBuilder<Aar> collectTransitiveAars(RuleContext ruleContext) {
- NestedSetBuilder<Aar> builder = NestedSetBuilder.naiveLinkOrder();
+ private void collectTransitiveAars(
+ RuleContext ruleContext,
+ NestedSetBuilder<Aar> transitiveAars,
+ NestedSetBuilder<Artifact> transitiveAarArtifacts) {
for (AndroidLibraryAarProvider library : AndroidCommon.getTransitivePrerequisites(
ruleContext, Mode.TARGET, AndroidLibraryAarProvider.class)) {
- builder.addTransitive(library.getTransitiveAars());
+ transitiveAars.addTransitive(library.getTransitiveAars());
+ transitiveAarArtifacts.addTransitive(library.getTransitiveAarArtifacts());
}
- return builder;
}
private NestedSetBuilder<Artifact> collectTransitiveResourceJars(RuleContext ruleContext) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
index ff9236e9ce..d4a8a8afdd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
@@ -28,14 +28,19 @@ import javax.annotation.Nullable;
@Immutable
public abstract class AndroidLibraryAarProvider implements TransitiveInfoProvider {
- public static AndroidLibraryAarProvider create(@Nullable Aar aar, NestedSet<Aar> transitiveAars) {
- return new AutoValue_AndroidLibraryAarProvider(aar, transitiveAars);
+ public static AndroidLibraryAarProvider create(
+ @Nullable Aar aar,
+ NestedSet<Aar> transitiveAars,
+ NestedSet<Artifact> transitiveAarArtifacts) {
+ return new AutoValue_AndroidLibraryAarProvider(aar, transitiveAars, transitiveAarArtifacts);
}
@Nullable public abstract Aar getAar();
public abstract NestedSet<Aar> getTransitiveAars();
+ public abstract NestedSet<Artifact> getTransitiveAarArtifacts();
+
/** The .aar file and associated AndroidManifest.xml contributed by a single target. */
@AutoValue
@Immutable
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 de6987ed71..09180a6ff0 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
@@ -17,7 +17,7 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import static com.google.devtools.build.lib.rules.java.DeployArchiveBuilder.Compression.COMPRESSED;
import static com.google.devtools.build.lib.vfs.FileSystemUtils.replaceExtension;
-import com.google.common.base.Joiner;
+import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.Runfiles;
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.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
@@ -58,12 +59,9 @@ import com.google.devtools.build.lib.rules.java.OneVersionCheckActionBuilder;
import com.google.devtools.build.lib.rules.java.SingleJarActionBuilder;
import com.google.devtools.build.lib.rules.java.proto.GeneratedExtensionRegistryProvider;
import com.google.devtools.build.lib.syntax.Type;
-import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
-import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Set;
/**
* An base implementation for the "android_local_test" rule.
@@ -209,16 +207,51 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
ruleContext.getPrerequisites(
"deps", Mode.TARGET, AndroidLibraryAarProvider.class)));
- Runfiles defaultRunfiles =
- collectDefaultRunfiles(ruleContext, javaCommon, filesToBuild, androidAarProviders);
-
- ImmutableList<String> cmdLineArgs =
- ImmutableList.of(
- "--android_libraries=" + getTransitiveLibrariesArg(androidAarProviders),
- "--strict_libraries=" + getStrictLibrariesArg(androidAarProviders));
+ NestedSetBuilder<Aar> transitiveAarsBuilder = NestedSetBuilder.naiveLinkOrder();
+ NestedSetBuilder<Aar> strictAarsBuilder = NestedSetBuilder.naiveLinkOrder();
+ NestedSetBuilder<Artifact> transitiveAarArtifactsBuilder = NestedSetBuilder.stableOrder();
+ for (AndroidLibraryAarProvider aarProvider : androidAarProviders) {
+ transitiveAarsBuilder.addTransitive(aarProvider.getTransitiveAars());
+ transitiveAarArtifactsBuilder.addTransitive(aarProvider.getTransitiveAarArtifacts());
+ if (aarProvider.getAar() != null) {
+ strictAarsBuilder.add(aarProvider.getAar());
+ }
+ }
+ NestedSet<Aar> transitiveAars = transitiveAarsBuilder.build();
+ NestedSet<Aar> strictAars = strictAarsBuilder.build();
+ NestedSet<Artifact> transitiveAarArtifacts = transitiveAarArtifactsBuilder.build();
+ Runfiles defaultRunfiles =
+ collectDefaultRunfiles(ruleContext, javaCommon, filesToBuild, transitiveAarArtifacts);
+
+ CustomCommandLine.Builder cmdLineArgs = CustomCommandLine.builder();
+ if (!transitiveAars.isEmpty()) {
+ cmdLineArgs.addJoinValues(
+ "--android_libraries",
+ ",",
+ transitiveAars,
+ new Function<Aar, String>() {
+ @Override
+ public String apply(Aar aar) {
+ return aarCmdLineArg(aar);
+ }
+ });
+ }
+ if (!strictAars.isEmpty()) {
+ cmdLineArgs.addJoinValues(
+ "--strict_libraries",
+ ",",
+ strictAars,
+ new Function<Aar, String>() {
+ @Override
+ public String apply(Aar aar) {
+ return aarCmdLineArg(aar);
+ }
+ });
+ }
RunfilesSupport runfilesSupport =
- RunfilesSupport.withExecutable(ruleContext, defaultRunfiles, executable, cmdLineArgs);
+ RunfilesSupport.withExecutable(
+ ruleContext, defaultRunfiles, executable, cmdLineArgs.build());
// Create the deploy jar and make it dependent on the runfiles middleman if an executable is
// created. Do not add the deploy jar to files to build, so we will only build it when it gets
@@ -293,6 +326,12 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
.build();
}
+ private static String aarCmdLineArg(Aar aar) {
+ return aar.getManifest().getRootRelativePathString()
+ + ":"
+ + aar.getAar().getRootRelativePathString();
+ }
+
protected abstract JavaSemantics createJavaSemantics();
protected abstract void addExtraProviders(
@@ -363,7 +402,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
RuleContext ruleContext,
JavaCommon javaCommon,
NestedSet<Artifact> filesToBuild,
- Iterable<AndroidLibraryAarProvider> androidLibraryAarProviders) {
+ NestedSet<Artifact> transitiveAarArtifacts) {
Runfiles.Builder builder = new Runfiles.Builder(ruleContext.getWorkspaceName());
builder.addTransitiveArtifacts(filesToBuild);
builder.addArtifacts(javaCommon.getJavaCompilationArtifacts().getRuntimeJars());
@@ -384,17 +423,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
builder.addTargets(depsForRunfiles, JavaRunfilesProvider.TO_RUNFILES);
builder.addTargets(depsForRunfiles, RunfilesProvider.DEFAULT_RUNFILES);
-
- for (AndroidLibraryAarProvider aarProvider : androidLibraryAarProviders) {
- if (aarProvider.getAar() != null) {
- builder.addArtifact(aarProvider.getAar().getAar());
- builder.addArtifact(aarProvider.getAar().getManifest());
- }
- for (Aar aar : aarProvider.getTransitiveAars()) {
- builder.addArtifact(aar.getAar());
- builder.addArtifact(aar.getManifest());
- }
- }
+ builder.addTransitiveArtifacts(transitiveAarArtifacts);
if (ruleContext.getConfiguration().isCodeCoverageEnabled()) {
Artifact instrumentedJar = javaCommon.getJavaCompilationArtifacts().getInstrumentedJar();
@@ -436,38 +465,4 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
}
return testClass;
}
-
- protected static String getTransitiveLibrariesArg(
- Iterable<AndroidLibraryAarProvider> aarProviders) {
- Set<String> args = new LinkedHashSet<>();
-
- for (AndroidLibraryAarProvider aarProvider : aarProviders) {
- for (Aar aar : aarProvider.getTransitiveAars()) {
- Preconditions.checkNotNull(aar.getAar());
- Preconditions.checkNotNull(aar.getManifest());
- args.add(
- aar.getManifest().getRootRelativePathString()
- + ":"
- + aar.getAar().getRootRelativePathString());
- }
- }
- return Joiner.on(",").join(args);
- }
-
- protected static String getStrictLibrariesArg(Iterable<AndroidLibraryAarProvider> aarProviders) {
- Set<String> args = new LinkedHashSet<>();
-
- for (AndroidLibraryAarProvider aarProvider : aarProviders) {
- Aar aar = aarProvider.getAar();
- if (aar != null) {
- Preconditions.checkNotNull(aar.getAar());
- Preconditions.checkNotNull(aar.getManifest());
- args.add(
- aar.getManifest().getRootRelativePathString()
- + ":"
- + aar.getAar().getRootRelativePathString());
- }
- }
- return Joiner.on(",").join(args);
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
index dec8790a47..71eaac6850 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
@@ -211,7 +211,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
protected String computeKey() {
Fingerprint f = new Fingerprint();
f.addString(GUID);
- f.addStrings(executionSettings.getArgs());
+ f.addStrings(executionSettings.getArgs().arguments());
f.addString(executionSettings.getTestFilter() == null ? "" : executionSettings.getTestFilter());
RunUnder runUnder = executionSettings.getRunUnder();
f.addString(runUnder == null ? "" : runUnder.getValue());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestTargetExecutionSettings.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestTargetExecutionSettings.java
index 9d3947cbc1..5a01bcb0ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestTargetExecutionSettings.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestTargetExecutionSettings.java
@@ -15,7 +15,6 @@
package com.google.devtools.build.lib.rules.test;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
@@ -23,21 +22,20 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesSupport;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.actions.CommandLine;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.RunUnder;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.Path;
-import java.util.List;
-
/**
* Container for common test execution settings shared by all
* all TestRunnerAction instances for the given test target.
*/
public final class TestTargetExecutionSettings {
- private final List<String> testArguments;
+ private final CommandLine testArguments;
private final String testFilter;
private final int totalShards;
private final RunUnder runUnder;
@@ -55,10 +53,8 @@ public final class TestTargetExecutionSettings {
Preconditions.checkArgument(shards >= 0);
BuildConfiguration config = ruleContext.getConfiguration();
- List<String> targetArgs = runfilesSupport.getArgs();
- testArguments = targetArgs.isEmpty()
- ? config.getTestArguments()
- : ImmutableList.copyOf(Iterables.concat(targetArgs, config.getTestArguments()));
+ CommandLine targetArgs = runfilesSupport.getArgs();
+ testArguments = CommandLine.concat(targetArgs, ImmutableList.copyOf(config.getTestArguments()));
totalShards = shards;
runUnder = config.getRunUnder();
@@ -81,7 +77,7 @@ public final class TestTargetExecutionSettings {
: runUnderTarget.getProvider(FilesToRunProvider.class).getExecutable();
}
- public List<String> getArgs() {
+ public CommandLine getArgs() {
return testArguments;
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
index 2c6d4e0d5e..cf98f997e7 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -16,11 +16,13 @@ package com.google.devtools.build.lib.runtime.commands;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RunfilesSupport;
+import com.google.devtools.build.lib.analysis.actions.CommandLine;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.RunUnder;
import com.google.devtools.build.lib.buildtool.BuildRequest;
@@ -224,18 +226,15 @@ public class RunCommand implements BlazeCommand {
return ExitCode.LOCAL_ENVIRONMENTAL_ERROR;
}
- List<String> args = runTargetArgs;
+ List<String> args = Lists.newArrayList();
FilesToRunProvider provider = targetToRun.getProvider(FilesToRunProvider.class);
RunfilesSupport runfilesSupport = provider == null ? null : provider.getRunfilesSupport();
if (runfilesSupport != null && runfilesSupport.getArgs() != null) {
- List<String> targetArgs = runfilesSupport.getArgs();
- if (!targetArgs.isEmpty()) {
- args = Lists.newArrayListWithCapacity(targetArgs.size() + runTargetArgs.size());
- args.addAll(targetArgs);
- args.addAll(runTargetArgs);
- }
+ CommandLine targetArgs = runfilesSupport.getArgs();
+ Iterables.addAll(args, targetArgs.arguments());
}
+ args.addAll(runTargetArgs);
String productName = env.getRuntime().getProductName();
//