diff options
Diffstat (limited to 'src')
8 files changed, 103 insertions, 3 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 7de5cc9b00..af06231ffe 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 @@ -50,6 +50,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics codedOut.writeBoolNoTag(semantics.incompatibleDisableObjcProviderResources()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowDictPlus()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowFileType()); + codedOut.writeBoolNoTag(semantics.incompatibleDisallowLegacyJavaInfo()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowOldStyleArgsAdd()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowSlashOperator()); codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi()); @@ -73,6 +74,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics builder.incompatibleDisableObjcProviderResources(codedIn.readBool()); builder.incompatibleDisallowDictPlus(codedIn.readBool()); builder.incompatibleDisallowFileType(codedIn.readBool()); + builder.incompatibleDisallowLegacyJavaInfo(codedIn.readBool()); builder.incompatibleDisallowOldStyleArgsAdd(codedIn.readBool()); builder.incompatibleDisallowSlashOperator(codedIn.readBool()); builder.incompatibleNewActionsApi(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 499f7d2596..e62f837088 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 @@ -158,6 +158,18 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable public boolean incompatibleDisallowFileType; @Option( + name = "incompatible_disallow_legacy_javainfo", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + metadataTags = { + OptionMetadataTag.INCOMPATIBLE_CHANGE, + OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES + }, + help = "If set to true, old-style JavaInfo provider construction is disallowed.") + public boolean incompatibleDisallowLegacyJavaInfo; + + @Option( name = "incompatible_disallow_slash_operator", defaultValue = "false", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, @@ -280,6 +292,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable .incompatibleDisableObjcProviderResources(incompatibleDisableObjcProviderResources) .incompatibleDisallowDictPlus(incompatibleDisallowDictPlus) .incompatibleDisallowFileType(incompatibleDisallowFileType) + .incompatibleDisallowLegacyJavaInfo(incompatibleDisallowLegacyJavaInfo) .incompatibleDisallowOldStyleArgsAdd(incompatibleDisallowOldStyleArgsAdd) .incompatibleDisallowSlashOperator(incompatibleDisallowSlashOperator) .incompatibleNewActionsApi(incompatibleNewActionsApi) 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 1a96c66d19..63e2656b41 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 @@ -326,6 +326,14 @@ public final class JavaInfo extends NativeInfo { || javaToolchain != null || hostJavabase != null; if (hasLegacyArg) { + if (env.getSemantics().incompatibleDisallowLegacyJavaInfo()) { + throw new EvalException( + loc, + "Cannot use deprecated argument when " + + "--incompatible_disallow_legacy_javainfo is set. " + + "Deprecated arguments are 'actions', 'sources', 'source_jars', " + + "'use_ijar', 'java_toolchain', 'host_javabase'."); + } boolean hasNewArg = compileJar != null || sourceJar != null; if (hasNewArg) { throw new EvalException( 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 6570c5e771..310e19733f 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 @@ -31,6 +31,7 @@ import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.ParamType; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.Runtime; import com.google.devtools.build.lib.syntax.SkylarkList; @@ -154,7 +155,8 @@ public class JavaSkylarkCommon { "A list or set of output source jars that contain the uncompiled source files " + "including the source files generated by annotation processors if the case.") }, - useLocation = true) + useLocation = true, + useEnvironment = true) public JavaInfo create( @Nullable Object actionsUnchecked, Object compileTimeJars, @@ -164,9 +166,16 @@ public class JavaSkylarkCommon { Object transitiveCompileTimeJars, Object transitiveRuntimeJars, Object sourceJars, - Location location) + Location location, + Environment environment) throws EvalException { - + if (environment.getSemantics().incompatibleDisallowLegacyJavaInfo()) { + throw new EvalException( + location, + "create_provider is deprecated and cannot be used when " + + "--incompatible_disallow_legacy_javainfo is set. " + + "Please migrate to the JavaInfo constructor."); + } return JavaInfoBuildHelper.getInstance() .create( actionsUnchecked, 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 25946d88e3..b4b23880c2 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 @@ -53,6 +53,8 @@ public abstract class SkylarkSemantics { public abstract boolean incompatibleDisallowFileType(); + public abstract boolean incompatibleDisallowLegacyJavaInfo(); + public abstract boolean incompatibleDisallowOldStyleArgsAdd(); public abstract boolean incompatibleDisallowSlashOperator(); @@ -91,6 +93,7 @@ public abstract class SkylarkSemantics { .incompatibleDisableObjcProviderResources(false) .incompatibleDisallowDictPlus(false) .incompatibleDisallowFileType(false) + .incompatibleDisallowLegacyJavaInfo(false) .incompatibleDisallowOldStyleArgsAdd(false) .incompatibleDisallowSlashOperator(false) .incompatibleNewActionsApi(false) @@ -120,6 +123,8 @@ public abstract class SkylarkSemantics { public abstract Builder incompatibleDisallowFileType(boolean value); + public abstract Builder incompatibleDisallowLegacyJavaInfo(boolean value); + public abstract Builder incompatibleDisallowOldStyleArgsAdd(boolean value); public abstract Builder incompatibleDisallowSlashOperator(boolean value); 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 569f3c36e8..7c7004a5c8 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 @@ -126,6 +126,7 @@ public class SkylarkSemanticsConsistencyTest { "--incompatible_disable_objc_provider_resources=" + rand.nextBoolean(), "--incompatible_disallow_dict_plus=" + rand.nextBoolean(), "--incompatible_disallow_filetype=" + rand.nextBoolean(), + "--incompatible_disallow_legacy_javainfo=" + rand.nextBoolean(), "--incompatible_disallow_old_style_args_add=" + rand.nextBoolean(), "--incompatible_disallow_slash_operator=" + rand.nextBoolean(), "--incompatible_new_actions_api=" + rand.nextBoolean(), @@ -150,6 +151,7 @@ public class SkylarkSemanticsConsistencyTest { .incompatibleDisableObjcProviderResources(rand.nextBoolean()) .incompatibleDisallowDictPlus(rand.nextBoolean()) .incompatibleDisallowFileType(rand.nextBoolean()) + .incompatibleDisallowLegacyJavaInfo(rand.nextBoolean()) .incompatibleDisallowOldStyleArgsAdd(rand.nextBoolean()) .incompatibleDisallowSlashOperator(rand.nextBoolean()) .incompatibleNewActionsApi(rand.nextBoolean()) 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 8fb0b29785..5c156c4797 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 @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.SkylarkProvider.SkylarkKey; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; import com.google.devtools.build.lib.testutil.TestConstants; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -47,6 +48,13 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase { this.legacyJavaInfoConstructor = legacyJavaInfoConstructor; } + @Before + public void setIncompatibleFlag() throws Exception { + if (legacyJavaInfoConstructor) { + setSkylarkSemanticsOptions("--noincompatible_disallow_legacy_javainfo"); + } + } + @Test public void buildHelperCreateJavaInfoWithOutputJarOnly() throws Exception { ruleBuilder().build(); @@ -677,6 +685,32 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase { "my_rule(name = 'my_skylark_rule')"); } + @Test + public void testIncompatibleDisallowLegacyJavaInfo() throws Exception { + setSkylarkSemanticsOptions("--incompatible_disallow_legacy_javainfo"); + ImmutableList.Builder<String> lines = ImmutableList.builder(); + lines.add( + "result = provider()", + "def _impl(ctx):", + " output_jar = ctx.actions.declare_file('output_jar')", + " source_jar = ctx.actions.declare_file('source_jar')", + " javaInfo = JavaInfo(", + " output_jar = output_jar,", + " source_jars = [source_jar],", // No longer allowed + " )", + " return [result(property = javaInfo)]", + "my_rule = rule(", + " implementation = _impl,", + ")"); + scratch.file("foo/extension.bzl", lines.build().toArray(new String[] {})); + checkError( + "foo", + "my_skylark_rule", + "Cannot use deprecated argument when --incompatible_disallow_legacy_javainfo is set. ", + "load(':extension.bzl', 'my_rule')", + "my_rule(name = 'my_skylark_rule')"); + } + private RuleBuilder ruleBuilder() { return new RuleBuilder(); } 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 da39f19f8e..8270921d4c 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 @@ -1642,6 +1642,33 @@ public class JavaSkylarkApiTest extends BuildViewTestCase { assertThat(javaToolchainLabel.toString()).isEqualTo("//java/com/google/test:toolchain"); } + @Test + public void testIncompatibleDisallowLegacyJavaInfo() throws Exception { + setSkylarkSemanticsOptions("--incompatible_disallow_legacy_javainfo"); + scratch.file( + "java/test/custom_rule.bzl", + "def _impl(ctx):", + " jar = ctx.actions.declare_file('jar')", + " java_common.create_provider(", + " compile_time_jars = [jar],", + " transitive_compile_time_jars = [jar],", + " runtime_jars = [jar],", + " use_ijar = False,", + " )", + "java_custom_library = rule(", + " implementation = _impl,", + ")"); + checkError( + "java/test", + "custom", + "create_provider is deprecated and cannot be used when " + + "--incompatible_disallow_legacy_javainfo is set. ", + "load(':custom_rule.bzl', 'java_custom_library')", + "java_custom_library(", + " name = 'custom',", + ")"); + } + private static boolean javaCompilationArgsHaveTheSameParent( JavaCompilationArgsProvider args, JavaCompilationArgsProvider otherArgs) { if (!nestedSetsOfArtifactHaveTheSameParent( |