Add --incompatible_disallow_legacy_javainfo flag.
When set to true, old-style JavaInfo provider construction methods become an error.
RELNOTES[INC]: Add --incompatible_disallow_legacy_javainfo flag.
PiperOrigin-RevId: 195104452
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 7de5cc9..af06231 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 @@
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 @@
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 499f7d2..e62f837 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 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 @@
.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 1a96c66..63e2656 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 @@
|| 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 6570c5e..310e197 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.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 @@
"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 @@
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 25946d8..b4b2388 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 boolean incompatibleDisallowFileType();
+ public abstract boolean incompatibleDisallowLegacyJavaInfo();
+
public abstract boolean incompatibleDisallowOldStyleArgsAdd();
public abstract boolean incompatibleDisallowSlashOperator();
@@ -91,6 +93,7 @@
.incompatibleDisableObjcProviderResources(false)
.incompatibleDisallowDictPlus(false)
.incompatibleDisallowFileType(false)
+ .incompatibleDisallowLegacyJavaInfo(false)
.incompatibleDisallowOldStyleArgsAdd(false)
.incompatibleDisallowSlashOperator(false)
.incompatibleNewActionsApi(false)
@@ -120,6 +123,8 @@
public abstract Builder incompatibleDisallowFileType(boolean value);
+ public abstract Builder incompatibleDisallowLegacyJavaInfo(boolean value);
+
public abstract Builder incompatibleDisallowOldStyleArgsAdd(boolean value);
public abstract Builder incompatibleDisallowSlashOperator(boolean value);