diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java | 56 |
1 files changed, 46 insertions, 10 deletions
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 358dd3c61d..b30ef83511 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 @@ -344,11 +344,7 @@ public class JavaSkylarkCommon { hostJavabaseProvider == null ? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER) : hostJavabaseProvider.getMiddlemanArtifact(); - JavaToolchainProvider javaToolchainProvider = - javaToolchain.getProvider(JavaToolchainProvider.class); - if (javaToolchain == null) { - throw new EvalException(null, javaToolchain.getLabel() + " is not a java_toolchain rule."); - } + JavaToolchainProvider javaToolchainProvider = getJavaToolchainProvider(javaToolchain); JavaCompilationArtifacts artifacts = helper.build( javaSemantics, @@ -381,6 +377,40 @@ public class JavaSkylarkCommon { .build(); } + @SkylarkCallable( + name = "build_ijar", + documented = true, + doc = "Builds and returns the ijar file for the given jar file.", + mandatoryPositionals = 1, + parameters = { + @Param( + name = "jar", + positional = true, + named = true, + type = Artifact.class, + doc = "The input .jar file for which an ijar will be built. Mandatory." + ), + @Param( + name = "java_toolchain", + positional = true, + named = true, + type = ConfiguredTarget.class, + doc = "A label pointing to a java_toolchain rule to be used for this compilation. " + + "Mandatory." + ), + } + ) + public Artifact buildIjar( + SkylarkRuleContext skylarkRuleContext, + Artifact fullJar, + ConfiguredTarget javaToolchain) throws EvalException { + return JavaCompilationHelper.createIjarAction( + skylarkRuleContext.getRuleContext(), + getJavaToolchainProvider(javaToolchain), + fullJar, + /* addPrefix = */ true); + } + /** * Creates a {@link JavaSourceJarsProvider} from the given list of source jars. */ @@ -406,11 +436,7 @@ public class JavaSkylarkCommon { RuleContext ruleContext = skylarkRuleContext.getRuleContext(); ConfiguredTarget javaToolchainConfigTarget = (ConfiguredTarget) skylarkRuleContext.getAttr().getValue(javaToolchainAttr); - JavaToolchainProvider toolchain = - javaToolchainConfigTarget.getProvider(JavaToolchainProvider.class); - if (toolchain == null) { - throw new EvalException(null, javaToolchainAttr + " is not a java_toolchain rule label"); - } + JavaToolchainProvider toolchain = getJavaToolchainProvider(javaToolchainConfigTarget); return ImmutableList.copyOf(Iterables.concat( toolchain.getJavacOptions(), ruleContext.getTokenizedStringListAttr("javacopts"))); } @@ -444,6 +470,16 @@ public class JavaSkylarkCommon { .build(); } + private static JavaToolchainProvider getJavaToolchainProvider(ConfiguredTarget javaToolchain) + throws EvalException{ + JavaToolchainProvider javaToolchainProvider = + javaToolchain.getProvider(JavaToolchainProvider.class); + if (javaToolchainProvider == null) { + throw new EvalException(null, javaToolchain.getLabel() + " is not a java_toolchain rule."); + } + return javaToolchainProvider; + } + /** * Returns a new JavaCompilationArgsProvider whose direct-jars part is the union of both the * direct and indirect jars of 'provider'. |