diff options
author | 2017-02-16 19:00:42 +0000 | |
---|---|---|
committer | 2017-02-17 14:52:27 +0000 | |
commit | 5a1af9c2fdee399951fbb021f9b583075daab8fe (patch) | |
tree | d68a982f8d01526dff325ea46ea49fd41067600e /src/main/java | |
parent | 577fd468780c107e074dbd64951d230364d2afb2 (diff) |
[bazel] Added new java_toolchain entry timezoneData support.
--
PiperOrigin-RevId: 147741120
MOS_MIGRATED_REVID=147741120
Diffstat (limited to 'src/main/java')
4 files changed, 30 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index aa4f142d66..03c6a594a3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -37,6 +37,7 @@ import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.cmdline.Label; 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; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; @@ -77,6 +78,9 @@ public class JavaBinary implements RuleConfiguredTargetFactory { attributesBuilder.addClassPathResources( ruleContext.getPrerequisiteArtifacts("classpath_resources", Mode.TARGET).list()); + // Add Java8 timezone resource data + addTimezoneResourceForJavaBinaries(ruleContext, attributesBuilder); + List<String> userJvmFlags = JavaCommon.getJvmFlags(ruleContext); ruleContext.checkSrcsSamePackage(true); @@ -429,6 +433,16 @@ public class JavaBinary implements RuleConfiguredTargetFactory { return builder.build(); } + /** Add Java8 timezone resource jar to java binary, if specified in tool chain. */ + private void addTimezoneResourceForJavaBinaries( + RuleContext ruleContext, JavaTargetAttributes.Builder attributesBuilder) { + JavaToolchainProvider toolchainProvider = JavaToolchainProvider.fromRuleContext(ruleContext); + if (toolchainProvider.getTimezoneData() != null) { + attributesBuilder.addResourceJars( + NestedSetBuilder.create(Order.STABLE_ORDER, toolchainProvider.getTimezoneData())); + } + } + private void collectDefaultRunfiles(Runfiles.Builder builder, RuleContext ruleContext, JavaCommon common, JavaCompilationArtifacts javaArtifacts, NestedSet<Artifact> filesToBuild, Artifact launcher, Iterable<Artifact> dynamicRuntimeActionInputs) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java index 8a16c36b2c..255f0e156e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java @@ -61,6 +61,7 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory { Artifact oneVersionWhitelist = getArtifact("oneversion_whitelist", ruleContext); Artifact genClass = getArtifact("genclass", ruleContext); Artifact resourceJarBuilder = getArtifact("resourcejar", ruleContext); + Artifact timezoneData = getArtifact("timezone_data", ruleContext); FilesToRunProvider ijar = ruleContext.getExecutablePrerequisite("ijar", Mode.HOST); ImmutableListMultimap<String, String> compatibleJavacOptions = getCompatibleJavacOptions(ruleContext); @@ -93,6 +94,7 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory { oneVersionWhitelist, genClass, resourceJarBuilder, + timezoneData, ijar, compatibleJavacOptions); RuleConfiguredTargetBuilder builder = diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java index 1fb23acae0..3d621a3715 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java @@ -54,6 +54,7 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider { Artifact oneVersionWhitelist, Artifact genClass, @Nullable Artifact resourceJarBuilder, + @Nullable Artifact timezoneData, FilesToRunProvider ijar, ImmutableListMultimap<String, String> compatibleJavacOptions) { return new AutoValue_JavaToolchainProvider( @@ -72,6 +73,7 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider { oneVersionWhitelist, genClass, resourceJarBuilder, + timezoneData, ijar, compatibleJavacOptions, // merges the defaultJavacFlags from @@ -137,6 +139,13 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider { @Nullable public abstract Artifact getResourceJarBuilder(); + /** + * Returns the {@link Artifact} of the latest timezone data resource jar that can be loaded by + * Java 8 binaries. + */ + @Nullable + public abstract Artifact getTimezoneData(); + /** Returns the ijar executable */ public abstract FilesToRunProvider getIjar(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java index 9acc25ba49..a3115e3932 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java @@ -131,6 +131,11 @@ public final class JavaToolchainRule implements RuleDefinition { <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ .add( attr("resourcejar", LABEL_LIST).cfg(HOST).allowedFileTypes(FileTypeSet.ANY_FILE).exec()) + /* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(timezone_data) --> + Label of a resource jar containing timezone data. If set, the timezone data is added as an + implicitly runtime dependency of all java_binary rules. + <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ + .add(attr("timezone_data", LABEL).cfg(HOST).allowedFileTypes(FileTypeSet.ANY_FILE).exec()) /* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(ijar) --> Label of the ijar executable. <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ |