From 1458c61f6b458747906dec95b3592bf9b3eb6c91 Mon Sep 17 00:00:00 2001 From: elenairina Date: Fri, 29 Jun 2018 08:10:12 -0700 Subject: [java_common.compile] Always generate a source jar. [Rolling forward https://github.com/bazelbuild/bazel/commit/c4e128e2c6d8cacaeba034d6a3195796d50f1745] java_common.compile doesn't generate the output source jar when a source jar is the only input for the compilation. This is wrong because the source jar can include APT generated sources. It is also inconsistent with java_library and leads to inconsistent Skylark rules where a declared output will not always have a generating action. This new behavior is guarded by a new flag --incompatible_generate_javacommon_source_jar. RELNOTES: None. PiperOrigin-RevId: 202648346 --- .../packages/SkylarkSemanticsConsistencyTest.java | 2 + .../build/lib/rules/java/JavaSkylarkApiTest.java | 55 ++++++++++++++++++++++ 2 files changed, 57 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java index fc30103bb6..4a8e303a50 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java @@ -130,6 +130,7 @@ public class SkylarkSemanticsConsistencyTest { "--incompatible_disallow_legacy_javainfo=" + rand.nextBoolean(), "--incompatible_disallow_old_style_args_add=" + rand.nextBoolean(), "--incompatible_disallow_slash_operator=" + rand.nextBoolean(), + "--incompatible_generate_javacommon_source_jar=" + rand.nextBoolean(), "--incompatible_new_actions_api=" + rand.nextBoolean(), "--incompatible_no_support_tools_in_action_inputs=" + rand.nextBoolean(), "--incompatible_package_name_is_a_function=" + rand.nextBoolean(), @@ -157,6 +158,7 @@ public class SkylarkSemanticsConsistencyTest { .incompatibleDisallowLegacyJavaInfo(rand.nextBoolean()) .incompatibleDisallowOldStyleArgsAdd(rand.nextBoolean()) .incompatibleDisallowSlashOperator(rand.nextBoolean()) + .incompatibleGenerateJavaCommonSourceJar(rand.nextBoolean()) .incompatibleNewActionsApi(rand.nextBoolean()) .incompatibleNoSupportToolsInActionInputs(rand.nextBoolean()) .incompatiblePackageNameIsAFunction(rand.nextBoolean()) diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java index c5956c0021..cd5eaf171c 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java @@ -604,6 +604,61 @@ public class JavaSkylarkApiTest extends BuildViewTestCase { assertThat(outputJars.getJdeps().getFilename()).isEqualTo("libcustom.jdeps"); } + @Test + public void testJavaCommonCompileWithOnlyOneSourceJarWithIncompatibleFlag() throws Exception { + writeBuildFileForJavaToolchain(); + setSkylarkSemanticsOptions("--incompatible_generate_javacommon_source_jar=true"); + scratch.file( + "java/test/BUILD", + "load(':custom_rule.bzl', 'java_custom_library')", + "java_custom_library(", + " name = 'custom',", + " srcs = ['myjar-src.jar'],", + ")"); + scratch.file( + "java/test/custom_rule.bzl", + "def _impl(ctx):", + " output_jar = ctx.actions.declare_file('lib' + ctx.label.name + '.jar')", + " compilation_provider = java_common.compile(", + " ctx,", + " source_jars = ctx.files.srcs,", + " output = output_jar,", + " javac_opts = java_common.default_javac_opts(", + " ctx, java_toolchain_attr = '_java_toolchain'),", + " java_toolchain = ctx.attr._java_toolchain,", + " host_javabase = ctx.attr._host_javabase", + " )", + " return struct(", + " files = depset([output_jar]),", + " providers = [compilation_provider]", + " )", + "java_custom_library = rule(", + " implementation = _impl,", + " outputs = {", + " 'my_output': 'lib%{name}.jar'", + " },", + " attrs = {", + " 'srcs': attr.label_list(allow_files=['.jar']),", + " '_java_toolchain': attr.label(default = Label('//java/com/google/test:toolchain')),", + " '_host_javabase': attr.label(", + " default = Label('" + HOST_JAVA_RUNTIME_LABEL + "'))", + " },", + " fragments = ['java']", + ")"); + + ConfiguredTarget configuredTarget = getConfiguredTarget("//java/test:custom"); + JavaInfo info = configuredTarget.get(JavaInfo.PROVIDER); + SkylarkList sourceJars = info.getSourceJars(); + assertThat(artifactFilesNames(sourceJars)).containsExactly("libcustom-src.jar"); + JavaRuleOutputJarsProvider outputJars = info.getOutputJars(); + assertThat(outputJars.getOutputJars()).hasSize(1); + OutputJar outputJar = outputJars.getOutputJars().get(0); + assertThat(outputJar.getClassJar().getFilename()).isEqualTo("libcustom.jar"); + assertThat(outputJar.getSrcJar().getFilename()).isEqualTo("libcustom-src.jar"); + assertThat(outputJar.getIJar().getFilename()).isEqualTo("libcustom-hjar.jar"); + assertThat(outputJars.getJdeps().getFilename()).isEqualTo("libcustom.jdeps"); + } + @Test public void testJavaCommonCompileWithNoSources() throws Exception { writeBuildFileForJavaToolchain(); -- cgit v1.2.3