aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-01-23 18:29:47 +0000
committerGravatar John Cater <jcater@google.com>2017-01-23 19:39:52 +0000
commitca43c878a28bfd183933a6228cbad937d9c79f2a (patch)
tree5deb957df4ed31f43ee193dfac0a9581958985ad
parent7a089cf25bcc2972f95d14cbb5b73b4eb668cee2 (diff)
Add getImplicitOutputArtifact to BuildViewTestCase. This vastly simplifies
finding actions based on intermediate artifacts. -- PiperOrigin-RevId: 145303065 MOS_MIGRATED_REVID=145303065
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java26
4 files changed, 42 insertions, 6 deletions
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 9b6edbaff6..024fb104b6 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
@@ -31,10 +31,8 @@ import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.List;
-/**
- * Builder for creating $android_resource_parser action.
- */
-class AndroidResourceParsingActionBuilder {
+/** Builder for creating $android_resource_parser action. */
+public class AndroidResourceParsingActionBuilder {
private static final ResourceContainerToArtifacts RESOURCE_CONTAINER_TO_ARTIFACTS =
new ResourceContainerToArtifacts();
@@ -46,6 +44,8 @@ class AndroidResourceParsingActionBuilder {
private LocalResourceContainer primary;
private Artifact output;
+ private ResourceContainer resourceContainer;
+
/**
* @param ruleContext The RuleContext that was used to create the SpawnAction.Builder.
*/
@@ -69,6 +69,12 @@ class AndroidResourceParsingActionBuilder {
return this;
}
+ /** Set the primary resources. */
+ public AndroidResourceParsingActionBuilder withPrimary(ResourceContainer resourceContainer) {
+ this.resourceContainer = resourceContainer;
+ return this;
+ }
+
private static class ResourceContainerToArg implements Function<LocalResourceContainer, String> {
public ResourceContainerToArg() {
@@ -103,7 +109,7 @@ class AndroidResourceParsingActionBuilder {
return Joiner.on("#").join(Iterables.transform(roots, Functions.toStringFunction()));
}
- public Artifact build(ActionConstructionContext context) {
+ public ResourceContainer build(ActionConstructionContext context) {
CustomCommandLine.Builder builder = new CustomCommandLine.Builder();
NestedSetBuilder<Artifact> inputs = NestedSetBuilder.naiveLinkOrder();
@@ -132,6 +138,7 @@ class AndroidResourceParsingActionBuilder {
.setProgressMessage("Parsing Android resources for " + ruleContext.getLabel())
.setMnemonic("AndroidResourceParser")
.build(context));
- return output;
+
+ return resourceContainer.toBuilder().setSymbols(output).build();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 786fde860d..9148e849f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -114,6 +114,8 @@ public final class AndroidRuleClasses {
fromTemplates("%{name}_filtered.jar");
public static final SafeImplicitOutputsFunction ANDROID_R_TXT =
fromTemplates("%{name}_symbols/R.txt");
+ public static final SafeImplicitOutputsFunction ANDROID_LOCAL_SYMBOLS =
+ fromTemplates("%{name}_symbols/local.bin");
public static final SafeImplicitOutputsFunction ANDROID_SYMBOLS =
fromTemplates("%{name}_symbols/symbols.bin");
public static final ImplicitOutputsFunction ANDROID_PROCESSED_MANIFEST =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
index 7c6ba63296..05c896a96f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
@@ -453,6 +453,7 @@ public final class ApplicationManifest {
if (resourceContainer.getSymbols() != null) {
new AndroidResourceParsingActionBuilder(ruleContext)
+ .withPrimary(resourceContainer)
.setParse(data)
.setOutput(resourceContainer.getSymbols())
.build(ruleContext);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index 476f90dd67..3121bfcb5b 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -99,6 +99,7 @@ import com.google.devtools.build.lib.packages.AspectParameters;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
+import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.NativeAspectClass;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -106,6 +107,7 @@ import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
import com.google.devtools.build.lib.packages.Preprocessor;
+import com.google.devtools.build.lib.packages.RawAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.util.MockToolsConfig;
@@ -1811,4 +1813,28 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
return result.build();
}
+
+ protected Artifact getImplicitOutputArtifact(
+ ConfiguredTarget target, SafeImplicitOutputsFunction outputFunction) {
+ Rule associatedRule = target.getTarget().getAssociatedRule();
+ RepositoryName repository = associatedRule.getRepository();
+ BuildConfiguration configuration = target.getConfiguration();
+
+ Root root;
+ if (associatedRule.hasBinaryOutput()) {
+ root = configuration.getBinDirectory(repository);
+ } else {
+ root = configuration.getGenfilesDirectory(repository);
+ }
+ ArtifactOwner owner =
+ new ConfiguredTargetKey(target.getTarget().getLabel(), target.getConfiguration());
+
+ RawAttributeMapper attr = RawAttributeMapper.of(associatedRule);
+
+ String path = Iterables.getOnlyElement(outputFunction.getImplicitOutputs(attr));
+
+ return view.getArtifactFactory()
+ .getDerivedArtifact(
+ target.getTarget().getLabel().getPackageFragment().getRelative(path), root, owner);
+ }
}