diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java | 28 |
1 files changed, 26 insertions, 2 deletions
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 97aa87f8e0..27ef1754d7 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 @@ -13,12 +13,16 @@ // limitations under the License. package com.google.devtools.build.lib.rules.java; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.FileProvider; +import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; +import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; @@ -42,8 +46,13 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory { final JavaToolchainData toolchainData = new JavaToolchainData(source, target, encoding, xlint, misc, jvmOpts); final JavaConfiguration configuration = ruleContext.getFragment(JavaConfiguration.class); - JavaToolchainProvider provider = new JavaToolchainProvider(toolchainData, - configuration.getDefaultJavacFlags(), configuration.getDefaultJavaBuilderJvmFlags()); + Artifact headerCompiler = getTurbine(ruleContext); + JavaToolchainProvider provider = + new JavaToolchainProvider( + toolchainData, + configuration.getDefaultJavacFlags(), + configuration.getDefaultJavaBuilderJvmFlags(), + headerCompiler); RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext) .add(JavaToolchainProvider.class, provider) .setFilesToBuild(new NestedSetBuilder<Artifact>(Order.STABLE_ORDER).build()) @@ -51,4 +60,19 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory { return builder.build(); } + + private Artifact getTurbine(RuleContext ruleContext) { + TransitiveInfoCollection prerequisite = + ruleContext.getPrerequisite("header_compiler", Mode.HOST); + if (prerequisite == null) { + return null; + } + Iterable<Artifact> artifacts = prerequisite.getProvider(FileProvider.class).getFilesToBuild(); + if (Iterables.size(artifacts) != 1) { + ruleContext.attributeError( + "header_compiler", prerequisite.getLabel() + " expected a single artifact"); + return null; + } + return Iterables.getOnlyElement(artifacts); + } } |