diff options
author | 2017-01-12 09:24:35 +0000 | |
---|---|---|
committer | 2017-01-12 14:08:14 +0000 | |
commit | bbd1c1e001c39dec7eeeab16f1a619d3540ba959 (patch) | |
tree | 41904ec80df84e7b197568f6c8dadb0366b7260b /src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java | |
parent | 31e29d15448dfde032c4e519bc8707165be48e34 (diff) |
Add a java_{library,binary}.resource_jars attribute that allows one to specify jar files containing Java resources.
--
PiperOrigin-RevId: 144299119
MOS_MIGRATED_REVID=144299119
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java index 87e3443163..efc8da71c8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java @@ -139,6 +139,9 @@ public final class JackCompilationHelper { /** Java resources for the rule's Jack library. */ private final ImmutableMap<PathFragment, Artifact> resources; + /** Jars that contain resources to be added to the Jack library. */ + private final NestedSet<Artifact> resourceJars; + /** Jack libraries to be provided to depending rules on the classpath, from srcs and exports. */ private final NestedSet<Artifact> exportedJacks; /** @@ -187,6 +190,7 @@ public final class JackCompilationHelper { ImmutableSet<Artifact> javaSources, ImmutableSet<Artifact> sourceJars, ImmutableMap<PathFragment, Artifact> resources, + NestedSet<Artifact> resourceJars, NestedSet<Artifact> processorClasspathJars, ImmutableSet<String> processorNames, NestedSet<Artifact> exportedJacks, @@ -206,6 +210,7 @@ public final class JackCompilationHelper { this.javaSources = javaSources; this.sourceJars = sourceJars; this.resources = resources; + this.resourceJars = resourceJars; this.processorClasspathJars = processorClasspathJars; this.processorNames = processorNames; this.exportedJacks = exportedJacks; @@ -349,11 +354,12 @@ public final class JackCompilationHelper { NestedSetBuilder<Artifact> dexContents = new NestedSetBuilder<>(Order.NAIVE_LINK_ORDER); if (outputArtifact != null) { - if (javaSources.isEmpty() && sourceJars.isEmpty() && resources.isEmpty()) { + if (javaSources.isEmpty() && sourceJars.isEmpty() && resources.isEmpty() + && resourceJars.isEmpty()) { // We still have to create SOMETHING to fulfill the artifact, but man, screw it buildEmptyJackAction(); } else { - buildJackAction(javaSources, sourceJars, resources, classpath); + buildJackAction(javaSources, sourceJars, resources, resourceJars, classpath); exports.add(outputArtifact); dexContents.add(outputArtifact); } @@ -485,6 +491,7 @@ public final class JackCompilationHelper { Iterable<Artifact> javaSources, Iterable<Artifact> sourceJars, Map<PathFragment, Artifact> resources, + NestedSet<Artifact> resourceJars, NestedSet<Artifact> classpathJackLibraries) { CustomCommandLine.Builder builder = CustomCommandLine.builder() @@ -517,6 +524,9 @@ public final class JackCompilationHelper { builder.addPaths("%s:%s", rootPrefix, resourcePath); } } + if (!resourceJars.isEmpty()) { + builder.addJoinExecPaths(IMPORT_RESOURCE_ZIP, ":", resourceJars); + } builder.addBeforeEachExecPath(IMPORT_SOURCE_ZIP, sourceJars).addExecPaths(javaSources); ruleContext.registerAction( new SpawnAction.Builder() @@ -525,6 +535,7 @@ public final class JackCompilationHelper { .addOutput(outputArtifact) .addTransitiveInputs(processorClasspathJars) .addInputs(resources.values()) + .addTransitiveInputs(resourceJars) .addInputs(sourceJars) .addInputs(javaSources) .setCommandLine(builder.build()) @@ -567,6 +578,9 @@ public final class JackCompilationHelper { /** Map from paths within the Jack library to Java resources for the rule's Jack library. */ private final LinkedHashMap<PathFragment, Artifact> resources = new LinkedHashMap<>(); + /** Set of resource jars that contain Java resources. */ + private final NestedSetBuilder<Artifact> resourceJars = NestedSetBuilder.stableOrder(); + /** Jack libraries to be provided to depending rules on the classpath, from srcs and exports. */ private final NestedSetBuilder<Artifact> exportedJackLibraries = new NestedSetBuilder<>(Order.NAIVE_LINK_ORDER); @@ -712,6 +726,11 @@ public final class JackCompilationHelper { return this; } + public JackCompilationHelper.Builder addResourceJars(NestedSet<Artifact> resourceJars) { + this.resourceJars.addTransitive(resourceJars); + return this; + } + /** * Adds a set of class names which will be used as annotation processors. */ @@ -867,6 +886,7 @@ public final class JackCompilationHelper { ImmutableSet.copyOf(javaSources), ImmutableSet.copyOf(sourceJars), ImmutableMap.copyOf(resources), + resourceJars.build(), processorClasspathJars.build(), ImmutableSet.copyOf(processorNames), exportedJackLibraries.build(), |