diff options
Diffstat (limited to 'src/main')
6 files changed, 46 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java index 0a7d7f7ccd..7f147cb422 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java @@ -54,6 +54,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics codedOut.writeBoolNoTag(semantics.incompatibleDisallowLegacyJavaInfo()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowOldStyleArgsAdd()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowSlashOperator()); + codedOut.writeBoolNoTag(semantics.incompatibleGenerateJavaCommonSourceJar()); codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi()); codedOut.writeBoolNoTag(semantics.incompatibleNoSupportToolsInActionInputs()); codedOut.writeBoolNoTag(semantics.incompatiblePackageNameIsAFunction()); @@ -80,6 +81,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics builder.incompatibleDisallowLegacyJavaInfo(codedIn.readBool()); builder.incompatibleDisallowOldStyleArgsAdd(codedIn.readBool()); builder.incompatibleDisallowSlashOperator(codedIn.readBool()); + builder.incompatibleGenerateJavaCommonSourceJar(codedIn.readBool()); builder.incompatibleNewActionsApi(codedIn.readBool()); builder.incompatibleNoSupportToolsInActionInputs(codedIn.readBool()); builder.incompatiblePackageNameIsAFunction(codedIn.readBool()); diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java index 14c68c4d90..8781bb5b59 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java @@ -179,6 +179,19 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable public boolean incompatibleDisallowLegacyJavaInfo; @Option( + name = "incompatible_generate_javacommon_source_jar", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + metadataTags = { + OptionMetadataTag.INCOMPATIBLE_CHANGE, + OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES + }, + help = "If set to true, java_common.compile will always generate an output source jar." + ) + public boolean incompatibleGenerateJavaCommonSourceJar; + + @Option( name = "incompatible_disallow_slash_operator", defaultValue = "false", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, @@ -321,6 +334,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable .incompatibleDisallowLegacyJavaInfo(incompatibleDisallowLegacyJavaInfo) .incompatibleDisallowOldStyleArgsAdd(incompatibleDisallowOldStyleArgsAdd) .incompatibleDisallowSlashOperator(incompatibleDisallowSlashOperator) + .incompatibleGenerateJavaCommonSourceJar(incompatibleGenerateJavaCommonSourceJar) .incompatibleNewActionsApi(incompatibleNewActionsApi) .incompatibleNoSupportToolsInActionInputs(incompatibleNoSupportToolsInActionInputs) .incompatiblePackageNameIsAFunction(incompatiblePackageNameIsAFunction) 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 f1c2b699a7..802d86ca98 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 @@ -40,6 +40,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -422,7 +423,8 @@ final class JavaInfoBuildHelper { SkylarkList<Artifact> sourcepathEntries, SkylarkList<Artifact> resources, Boolean neverlink, - JavaSemantics javaSemantics) + JavaSemantics javaSemantics, + Environment environment) throws EvalException { if (sourceJars.isEmpty() && sourceFiles.isEmpty() && exports.isEmpty()) { throw new EvalException( @@ -469,13 +471,19 @@ final class JavaInfoBuildHelper { JavaRuleOutputJarsProvider.Builder outputJarsBuilder = JavaRuleOutputJarsProvider.builder(); - boolean generateMergedSourceJar = - (sourceJars.size() > 1 || !sourceFiles.isEmpty()) - || (sourceJars.isEmpty() && sourceFiles.isEmpty() && !exports.isEmpty()); - Artifact outputSourceJar = - generateMergedSourceJar - ? getSourceJar(skylarkRuleContext.getRuleContext(), outputJar) - : sourceJars.get(0); + boolean createOutputSourceJar; + Artifact outputSourceJar; + if (environment.getSemantics().incompatibleGenerateJavaCommonSourceJar()) { + outputSourceJar = getSourceJar(skylarkRuleContext.getRuleContext(), outputJar); + createOutputSourceJar = true; + } else { + createOutputSourceJar = (sourceJars.size() > 1 || !sourceFiles.isEmpty()) + || (sourceJars.isEmpty() && sourceFiles.isEmpty() && !exports.isEmpty()); + outputSourceJar = + createOutputSourceJar + ? getSourceJar(skylarkRuleContext.getRuleContext(), outputJar) + : sourceJars.get(0); + } JavaInfo.Builder javaInfoBuilder = JavaInfo.Builder.create(); JavaCompilationArtifacts artifacts = @@ -485,7 +493,7 @@ final class JavaInfoBuildHelper { javaRuntimeInfo, SkylarkList.createImmutable(ImmutableList.of()), outputJarsBuilder, - /*createOutputSourceJar=*/ generateMergedSourceJar, + /*createOutputSourceJar=*/ createOutputSourceJar, outputSourceJar, javaInfoBuilder, // Include JavaGenJarsProviders from both deps and exports in the JavaGenJarsProvider 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 b44fb1138a..1a7d590f45 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 @@ -97,7 +97,8 @@ public class JavaSkylarkCommon implements JavaCommonApi<Artifact, JavaInfo, Skyl ConfiguredTarget hostJavabase, SkylarkList<Artifact> sourcepathEntries, SkylarkList<Artifact> resources, - Boolean neverlink) throws EvalException, InterruptedException { + Boolean neverlink, + Environment environment) throws EvalException, InterruptedException { return JavaInfoBuildHelper.getInstance() .createJavaCompileAction( @@ -116,7 +117,8 @@ public class JavaSkylarkCommon implements JavaCommonApi<Artifact, JavaInfo, Skyl sourcepathEntries, resources, neverlink, - javaSemantics); + javaSemantics, + environment); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java index 3f8a1dd073..aa99ba579d 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java @@ -309,7 +309,8 @@ public interface JavaCommonApi<FileT extends FileApi, JavaInfoT extends JavaInfo type = Boolean.class, defaultValue = "False" ) - } + }, + useEnvironment = true ) public JavaInfoT createJavaCompileAction( SkylarkRuleContextT skylarkRuleContext, @@ -326,7 +327,8 @@ public interface JavaCommonApi<FileT extends FileApi, JavaInfoT extends JavaInfo TransitiveInfoCollectionT hostJavabase, SkylarkList<FileT> sourcepathEntries, SkylarkList<FileT> resources, - Boolean neverlink) throws EvalException, InterruptedException; + Boolean neverlink, + Environment environment) throws EvalException, InterruptedException; @SkylarkCallable( name = "run_ijar", diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java index bea8aa7469..5bd711b75e 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java @@ -61,6 +61,8 @@ public abstract class SkylarkSemantics { public abstract boolean incompatibleDisallowSlashOperator(); + public abstract boolean incompatibleGenerateJavaCommonSourceJar(); + public abstract boolean incompatibleNewActionsApi(); public abstract boolean incompatibleNoSupportToolsInActionInputs(); @@ -101,6 +103,7 @@ public abstract class SkylarkSemantics { .incompatibleDisallowLegacyJavaInfo(false) .incompatibleDisallowOldStyleArgsAdd(false) .incompatibleDisallowSlashOperator(false) + .incompatibleGenerateJavaCommonSourceJar(false) .incompatibleNewActionsApi(false) .incompatibleNoSupportToolsInActionInputs(false) .incompatiblePackageNameIsAFunction(false) @@ -137,6 +140,8 @@ public abstract class SkylarkSemantics { public abstract Builder incompatibleDisallowSlashOperator(boolean value); + public abstract Builder incompatibleGenerateJavaCommonSourceJar(boolean value); + public abstract Builder incompatibleNewActionsApi(boolean value); public abstract Builder incompatibleNoSupportToolsInActionInputs(boolean value); |