aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-02-16 19:00:42 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2017-02-17 14:52:27 +0000
commit5a1af9c2fdee399951fbb021f9b583075daab8fe (patch)
treed68a982f8d01526dff325ea46ea49fd41067600e /src/main/java
parent577fd468780c107e074dbd64951d230364d2afb2 (diff)
[bazel] Added new java_toolchain entry timezoneData support.
-- PiperOrigin-RevId: 147741120 MOS_MIGRATED_REVID=147741120
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java5
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 --> */