From 57d837e98a876b3d410680a2c6108d4dbb1e0d93 Mon Sep 17 00:00:00 2001 From: dbabkin Date: Mon, 19 Feb 2018 07:46:28 -0800 Subject: Add JavaSemantics to JavaToolchain. RELNOTES:none PiperOrigin-RevId: 186220581 --- .../devtools/build/lib/bazel/rules/JavaRules.java | 3 ++- .../lib/bazel/rules/java/BazelJavaToolchain.java | 26 ++++++++++++++++++++++ .../build/lib/rules/java/JavaToolchain.java | 11 +++++++-- .../lib/rules/java/JavaToolchainProvider.java | 15 ++++++++++--- .../build/lib/rules/java/JavaToolchainRule.java | 15 +++++++++++-- 5 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaToolchain.java (limited to 'src/main/java') diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java index aeecf0a21f..776b436b54 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.bazel.rules.java.BazelJavaPluginRule; import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses; import com.google.devtools.build.lib.bazel.rules.java.BazelJavaSemantics; import com.google.devtools.build.lib.bazel.rules.java.BazelJavaTestRule; +import com.google.devtools.build.lib.bazel.rules.java.BazelJavaToolchain; import com.google.devtools.build.lib.rules.core.CoreRules; import com.google.devtools.build.lib.rules.extra.ActionListenerRule; import com.google.devtools.build.lib.rules.extra.ExtraActionRule; @@ -72,7 +73,7 @@ public class JavaRules implements RuleSet { builder.addRuleDefinition(new BazelJavaImportRule()); builder.addRuleDefinition(new BazelJavaTestRule()); builder.addRuleDefinition(new BazelJavaPluginRule()); - builder.addRuleDefinition(new JavaToolchainRule()); + builder.addRuleDefinition(JavaToolchainRule.create(BazelJavaToolchain.class)); builder.addRuleDefinition(new JavaPackageConfigurationRule()); builder.addRuleDefinition(new JavaRuntimeRule()); builder.addRuleDefinition(new JavaRuntimeSuiteRule()); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaToolchain.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaToolchain.java new file mode 100644 index 0000000000..35ad37dc83 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaToolchain.java @@ -0,0 +1,26 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.bazel.rules.java; + +import com.google.devtools.build.lib.rules.java.JavaToolchain; + +/** + * Implementation of {@code java_toolchain} with Bazel semantics. + */ +public final class BazelJavaToolchain extends JavaToolchain { + + public BazelJavaToolchain() { + super(BazelJavaSemantics.INSTANCE); + } +} 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 0fd4261f60..faa16d1dc6 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 @@ -44,7 +44,13 @@ import java.util.Map; /** * Implementation for the {@code java_toolchain} rule. */ -public final class JavaToolchain implements RuleConfiguredTargetFactory { +public class JavaToolchain implements RuleConfiguredTargetFactory { + + private final JavaSemantics semantics; + + protected JavaToolchain(JavaSemantics semantics) { + this.semantics = semantics; + } @Override public ConfiguredTarget create(RuleContext ruleContext) throws RuleErrorException { @@ -109,7 +115,8 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory { timezoneData, ijar, compatibleJavacOptions, - packageConfiguration); + packageConfiguration, + semantics); RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext) .addSkylarkTransitiveInfo( 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 fa20344edf..c4620cb0b4 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 @@ -83,7 +83,8 @@ public class JavaToolchainProvider extends ToolchainInfo { @Nullable Artifact timezoneData, FilesToRunProvider ijar, ImmutableListMultimap compatibleJavacOptions, - ImmutableList packageConfiguration) { + ImmutableList packageConfiguration, + JavaSemantics javaSemantics) { return new JavaToolchainProvider( label, bootclasspath, @@ -106,7 +107,8 @@ public class JavaToolchainProvider extends ToolchainInfo { ImmutableList.builder().addAll(javacOptions).addAll(defaultJavacFlags).build(), jvmOptions, javacSupportsWorkers, - packageConfiguration); + packageConfiguration, + javaSemantics); } private final Label label; @@ -129,6 +131,7 @@ public class JavaToolchainProvider extends ToolchainInfo { private final ImmutableList jvmOptions; private final boolean javacSupportsWorkers; private final ImmutableList packageConfiguration; + private final JavaSemantics javaSemantics; private JavaToolchainProvider( Label label, @@ -150,7 +153,8 @@ public class JavaToolchainProvider extends ToolchainInfo { ImmutableList javacOptions, ImmutableList jvmOptions, boolean javacSupportsWorkers, - ImmutableList packageConfiguration) { + ImmutableList packageConfiguration, + JavaSemantics javaSemantics) { super(ImmutableMap.of(), Location.BUILTIN); this.label = label; @@ -173,6 +177,7 @@ public class JavaToolchainProvider extends ToolchainInfo { this.jvmOptions = jvmOptions; this.javacSupportsWorkers = javacSupportsWorkers; this.packageConfiguration = packageConfiguration; + this.javaSemantics = javaSemantics; } /** Returns the label for this {@code java_toolchain}. */ @@ -293,4 +298,8 @@ public class JavaToolchainProvider extends ToolchainInfo { public ImmutableList packageConfiguration() { return packageConfiguration; } + + public JavaSemantics getJavaSemantics() { + return javaSemantics; + } } 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 1a6ab6c420..5d2a292f6b 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 @@ -36,7 +36,18 @@ import java.util.List; /** * Rule definition for {@code java_toolchain} */ -public final class JavaToolchainRule implements RuleDefinition { +public final class JavaToolchainRule implements RuleDefinition { + + private final Class ruleClass; + + public static JavaToolchainRule create(Class ruleClass){ + return new JavaToolchainRule(ruleClass); + } + + private JavaToolchainRule(Class ruleClass) { + this.ruleClass = ruleClass; + } + @Override public RuleClass build(Builder builder, RuleDefinitionEnvironment env) { return builder @@ -221,7 +232,7 @@ public final class JavaToolchainRule implements RuleDefinition { return RuleDefinition.Metadata.builder() .name("java_toolchain") .ancestors(BaseRuleClasses.BaseRule.class) - .factoryClass(JavaToolchain.class) + .factoryClass(ruleClass) .build(); } } -- cgit v1.2.3