aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar dbabkin <dbabkin@google.com>2018-02-19 07:46:28 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-19 07:48:36 -0800
commit57d837e98a876b3d410680a2c6108d4dbb1e0d93 (patch)
tree61d0d5400e436abd14567b6333c45e6d55b5d582 /src/main/java
parent9c1feebff51adb7ff744458057a5358830a50d89 (diff)
Add JavaSemantics to JavaToolchain.
RELNOTES:none PiperOrigin-RevId: 186220581
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaToolchain.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java15
5 files changed, 62 insertions, 8 deletions
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<String, String> compatibleJavacOptions,
- ImmutableList<JavaPackageConfigurationProvider> packageConfiguration) {
+ ImmutableList<JavaPackageConfigurationProvider> packageConfiguration,
+ JavaSemantics javaSemantics) {
return new JavaToolchainProvider(
label,
bootclasspath,
@@ -106,7 +107,8 @@ public class JavaToolchainProvider extends ToolchainInfo {
ImmutableList.<String>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<String> jvmOptions;
private final boolean javacSupportsWorkers;
private final ImmutableList<JavaPackageConfigurationProvider> packageConfiguration;
+ private final JavaSemantics javaSemantics;
private JavaToolchainProvider(
Label label,
@@ -150,7 +153,8 @@ public class JavaToolchainProvider extends ToolchainInfo {
ImmutableList<String> javacOptions,
ImmutableList<String> jvmOptions,
boolean javacSupportsWorkers,
- ImmutableList<JavaPackageConfigurationProvider> packageConfiguration) {
+ ImmutableList<JavaPackageConfigurationProvider> 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<JavaPackageConfigurationProvider> 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<C extends JavaToolchain> implements RuleDefinition {
+
+ private final Class<C> ruleClass;
+
+ public static <C extends JavaToolchain> JavaToolchainRule create(Class<C> ruleClass){
+ return new JavaToolchainRule(ruleClass);
+ }
+
+ private JavaToolchainRule(Class<C> 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();
}
}