diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
4 files changed, 81 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index dadb76a8e9..2ef67af04f 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -923,6 +923,7 @@ java_library( "rules/java/JavaSkylarkCommon.java", "rules/java/JavaSourceInfoProvider.java", "rules/java/JavaToolchain.java", + "rules/java/JavaToolchainAlias.java", "rules/java/JavaToolchainRule.java", "rules/java/JavaToolchainSkylarkApiProvider.java", "rules/java/JvmConfigurationLoader.java", diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index a3a72bc31e..47337f1706 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -123,6 +123,7 @@ import com.google.devtools.build.lib.rules.java.JavaRuntimeRule; import com.google.devtools.build.lib.rules.java.JavaRuntimeSuiteRule; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSkylarkCommon; +import com.google.devtools.build.lib.rules.java.JavaToolchainAlias; import com.google.devtools.build.lib.rules.java.JavaToolchainRule; import com.google.devtools.build.lib.rules.java.JvmConfigurationLoader; import com.google.devtools.build.lib.rules.java.ProguardLibraryRule; @@ -453,6 +454,7 @@ public class BazelRuleClassProvider { builder.addRuleDefinition(new JavaRuntimeRule()); builder.addRuleDefinition(new JavaRuntimeSuiteRule()); builder.addRuleDefinition(new JavaRuntimeAlias.JavaRuntimeAliasRule()); + builder.addRuleDefinition(new JavaToolchainAlias.JavaToolchainAliasRule()); builder.addRuleDefinition(new ExtraActionRule()); builder.addRuleDefinition(new ActionListenerRule()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java index 75ad63bde0..4d3359161c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java @@ -444,18 +444,6 @@ public class JavaSkylarkCommon { .build(); } - @SkylarkCallable( - name = "java_toolchain_attr", - doc = "Creates a dependency on the current Java toolchain. Should only be used in the " - + "attribute dictionary of a rule definition.", - structField = true - ) - public SkylarkAttr.Descriptor getJavaToolchainAttribute() { - return new SkylarkAttr.Descriptor( - "java_toolchain_attr", - new Attribute.Builder<>("", BuildType.LABEL).value(JavaSemantics.JAVA_TOOLCHAIN)); - } - private static StrictDepsMode getStrictDepsMode(String strictDepsMode) { switch (strictDepsMode) { case "OFF": diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainAlias.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainAlias.java new file mode 100644 index 0000000000..77471223ef --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainAlias.java @@ -0,0 +1,78 @@ +// Copyright 2017 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.rules.java; + +import static com.google.devtools.build.lib.packages.Attribute.attr; +import static com.google.devtools.build.lib.packages.BuildType.LABEL; + +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.analysis.BaseRuleClasses; +import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; +import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.RuleDefinition; +import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; +import com.google.devtools.build.lib.analysis.VisibilityProvider; +import com.google.devtools.build.lib.analysis.VisibilityProviderImpl; +import com.google.devtools.build.lib.packages.RuleClass; +import com.google.devtools.build.lib.rules.AliasConfiguredTarget; +import com.google.devtools.build.lib.rules.AliasProvider; +import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; + +/** + * Implementation of the {@code java_toolchain_alias} rule. + */ +public class JavaToolchainAlias implements RuleConfiguredTargetFactory { + + @Override + public ConfiguredTarget create(RuleContext ruleContext) + throws InterruptedException, RuleErrorException { + ConfiguredTarget actual = + (ConfiguredTarget) ruleContext.getPrerequisite(":java_toolchain", Mode.TARGET); + return new AliasConfiguredTarget( + ruleContext, + actual, + ImmutableMap.of( + AliasProvider.class, + AliasProvider.fromAliasRule(ruleContext.getLabel(), actual), + VisibilityProvider.class, + new VisibilityProviderImpl(ruleContext.getVisibility()))); + } + + /** + * Rule definition for the {@code java_toolchain_alias} rule. + */ + public static class JavaToolchainAliasRule implements RuleDefinition { + + @Override + public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) { + return builder + .requiresConfigurationFragments(JavaConfiguration.class) + .removeAttribute("licenses") + .removeAttribute("distribs") + .add(attr(":java_toolchain", LABEL).value(JavaSemantics.JAVA_TOOLCHAIN)) + .build(); + } + + @Override + public Metadata getMetadata() { + return Metadata.builder() + .name("java_toolchain_alias") + .ancestors(BaseRuleClasses.BaseRule.class) + .factoryClass(JavaToolchainAlias.class) + .build(); + } + } +} |