aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
diff options
context:
space:
mode:
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.java28
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);
+ }
}