aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar kmb <kmb@google.com>2018-05-25 11:50:30 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-25 11:51:39 -0700
commit0e6396c01754fb1f03c673a98083d4495ce4bd8d (patch)
tree367b40656bc9d40146cdaa342d0cb7baba1a4e95 /src
parentc2cf1132a75d03cc37888fe8c2b9583c7ce198c5 (diff)
support jdeps input in JavaInfo constructor
PiperOrigin-RevId: 198081030
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java15
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java48
3 files changed, 74 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
index ee42606122..04ad9d27c7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
@@ -611,6 +611,17 @@ public final class JavaInfo extends NativeInfo {
+ "<code>source_jar</code> are used. "
+ "<p>The host_javabase to be used for packing source files to Jar.</p>"
),
+ @Param(
+ name = "jdeps",
+ type = FileApi.class,
+ named = true,
+ defaultValue = "None",
+ noneable = true,
+ doc = "jdeps information for the rule output (if available). This should be a "
+ + "binary proto encoded using the deps.proto protobuf included with Bazel. "
+ + "If available this file is typically produced by a compiler. IDEs and other "
+ + "tools can use this information for more efficient processing."
+ ),
},
selfCall = true,
useLocation = true,
@@ -635,6 +646,7 @@ public final class JavaInfo extends NativeInfo {
Object useIjarApi,
Object javaToolchainApi,
Object hostJavabaseApi,
+ Object jdepsApi,
Location loc,
Environment env) throws EvalException {
Artifact outputJar = (Artifact) outputJarApi;
@@ -651,6 +663,7 @@ public final class JavaInfo extends NativeInfo {
@Nullable Boolean useIjar = nullIfNone(useIjarApi, Boolean.class);
@Nullable Object javaToolchain = nullIfNone(javaToolchainApi);
@Nullable Object hostJavabase = nullIfNone(hostJavabaseApi);
+ @Nullable Artifact jdeps = nullIfNone(jdepsApi, Artifact.class);
boolean hasLegacyArg =
actions != null
@@ -690,6 +703,7 @@ public final class JavaInfo extends NativeInfo {
actions,
javaToolchain,
hostJavabase,
+ jdeps,
loc);
}
if (compileJar == null) {
@@ -700,7 +714,7 @@ public final class JavaInfo extends NativeInfo {
outputJar, compileJar, sourceJar, neverlink,
(SkylarkList<JavaInfo>) deps,
(SkylarkList<JavaInfo>) runtimeDeps,
- (SkylarkList<JavaInfo>) exports, loc);
+ (SkylarkList<JavaInfo>) exports, jdeps, loc);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
index a564df494c..e5c2cde4a3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
@@ -75,6 +75,7 @@ final class JavaInfoBuildHelper {
* target="_top">java_library.exports</a>
* @param actions used to create the ijar and single jar actions
* @param javaToolchain the toolchain to be used for retrieving the ijar tool
+ * @param jdeps optional jdeps information for outputJar
* @return new created JavaInfo instance
* @throws EvalException if some mandatory parameter are missing
*/
@@ -91,6 +92,7 @@ final class JavaInfoBuildHelper {
Object actions,
Object javaToolchain,
Object hostJavabase,
+ @Nullable Artifact jdeps,
Location location)
throws EvalException {
final Artifact sourceJar;
@@ -137,7 +139,15 @@ final class JavaInfoBuildHelper {
}
return createJavaInfo(
- outputJar, iJar, sourceJar, neverlink, compileTimeDeps, runtimeDeps, exports, location);
+ outputJar,
+ iJar,
+ sourceJar,
+ neverlink,
+ compileTimeDeps,
+ runtimeDeps,
+ exports,
+ jdeps,
+ location);
}
/**
@@ -154,6 +164,7 @@ final class JavaInfoBuildHelper {
* @param exports libraries to make available for users of this library. <a
* href="https://docs.bazel.build/versions/master/be/java.html#java_library"
* target="_top">java_library.exports</a>
+ * @param jdeps optional jdeps information for outputJar
* @return new created JavaInfo instance
*/
JavaInfo createJavaInfo(
@@ -164,6 +175,7 @@ final class JavaInfoBuildHelper {
SkylarkList<JavaInfo> compileTimeDeps,
SkylarkList<JavaInfo> runtimeDeps,
SkylarkList<JavaInfo> exports,
+ @Nullable Artifact jdeps,
Location location) {
compileJar = compileJar != null ? compileJar : outputJar;
ImmutableList<Artifact> sourceJars =
@@ -183,6 +195,7 @@ final class JavaInfoBuildHelper {
JavaRuleOutputJarsProvider javaRuleOutputJarsProvider =
JavaRuleOutputJarsProvider.builder()
.addOutputJar(outputJar, compileJar, sourceJars)
+ .setJdeps(jdeps)
.build();
javaInfoBuilder.addProvider(JavaRuleOutputJarsProvider.class, javaRuleOutputJarsProvider);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
index 5c156c4797..944c7e9a4b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
@@ -17,6 +17,7 @@ import static com.google.common.truth.Truth.assertThat;
import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.prettyArtifactNames;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Streams;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
@@ -83,7 +84,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
@Test
public void buildHelperCreateJavaInfoWithOutputJarAndUseIJar() throws Exception {
-
+
ruleBuilder()
.withIJar()
.build();
@@ -205,7 +206,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
ruleBuilder()
.withNeverLink()
.build();
-
+
scratch.file(
"foo/BUILD",
"load(':extension.bzl', 'my_rule')",
@@ -660,6 +661,44 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
}
@Test
+ public void buildHelperCreateJavaInfoWithJdeps_javaRuleOutputJarsProvider() throws Exception {
+ ruleBuilder().build();
+ scratch.file(
+ "foo/BUILD",
+ "load(':extension.bzl', 'my_rule')",
+ "java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])",
+ "my_rule(",
+ " name = 'my_skylark_rule',",
+ " output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
+ " dep = [':my_java_lib_direct'],",
+ " jdeps = 'my_jdeps.pb',",
+ ")");
+ assertNoEvents();
+
+ JavaRuleOutputJarsProvider ruleOutputs =
+ fetchJavaInfo().getProvider(JavaRuleOutputJarsProvider.class);
+
+ assertThat(
+ prettyArtifactNames(
+ ruleOutputs
+ .getOutputJars()
+ .stream()
+ .map(o -> o.getClassJar())
+ .collect(ImmutableList.toImmutableList())))
+ .containsExactly("foo/my_skylark_rule_lib.jar");
+ assertThat(
+ prettyArtifactNames(
+ ruleOutputs
+ .getOutputJars()
+ .stream()
+ .flatMap(o -> Streams.stream(o.getSrcJars()))
+ .collect(ImmutableList.toImmutableList())))
+ .containsExactly("foo/my_skylark_rule_src.jar");
+ assertThat(ruleOutputs.getJdeps().prettyPrint()).isEqualTo("foo/my_jdeps.pb");
+ }
+
+ @Test
public void testMixMatchNewAndLegacyArgsIsError() throws Exception {
ImmutableList.Builder<String> lines = ImmutableList.builder();
lines.add(
@@ -753,6 +792,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
" deps = dp,",
" runtime_deps = dp_runtime,",
" exports = dp_exports,",
+ " jdeps = ctx.file.jdeps,",
useIJar || sourceFiles ? " actions = ctx.actions," : "",
useIJar || sourceFiles ? " java_toolchain = ctx.attr._toolchain," : "",
sourceFiles ? " host_javabase = ctx.attr._host_javabase," : "",
@@ -801,13 +841,14 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
}
lines.add(
" javaInfo = JavaInfo(",
- " output_jar = ctx.outputs.output_jar, ",
+ " output_jar = ctx.outputs.output_jar,",
" compile_jar = compile_jar,",
" source_jar = source_jar,",
neverLink ? " neverlink = True," : "",
" deps = dp,",
" runtime_deps = dp_runtime,",
" exports = dp_exports,",
+ " jdeps = ctx.file.jdeps,",
" )",
" return [result(property = javaInfo)]");
return lines.build().toArray(new String[] {});
@@ -837,6 +878,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
" 'output_jar' : attr.output(default=None, mandatory=True),",
" 'source_jars' : attr.label_list(allow_files=['.jar']),",
" 'sources' : attr.label_list(allow_files=['.java']),",
+ " 'jdeps' : attr.label(allow_single_file=True),",
useIJar || stampJar || sourceFiles
? " '_toolchain': attr.label(default = Label('//java/com/google/test:toolchain')),"
: "",