Introduce `--incompatible_disallow_filetype` to remove the `FileType` function.
RELNOTES:
`FileType` is deprecated and will be removed soon.
Try the `--incompatible_disallow_filetype` flag to ensure your code
is forward-compatible.
PiperOrigin-RevId: 192758063
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
index 28ae658..a612326 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
@@ -1087,11 +1087,21 @@
defaultValue = "[]",
doc = "a list of the accepted file extensions."
)
- }
+ },
+ useLocation = true,
+ useEnvironment = true
)
private static final BuiltinFunction fileType =
new BuiltinFunction("FileType") {
- public SkylarkFileType invoke(SkylarkList types) throws EvalException {
+ public SkylarkFileType invoke(SkylarkList types, Location loc, Environment env)
+ throws EvalException {
+ if (env.getSemantics().incompatibleDisallowFileType()) {
+ throw new EvalException(
+ loc,
+ "FileType function is not available. You may use a list of strings instead. "
+ + "You can temporarily reenable the function by passing the flag "
+ + "--incompatible_disallow_filetype=false");
+ }
return SkylarkFileType.of(types.getContents(String.class, "types"));
}
};
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 29d8d19..7de5cc9 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
@@ -49,6 +49,7 @@
codedOut.writeBoolNoTag(semantics.incompatibleDisableGlobTracking());
codedOut.writeBoolNoTag(semantics.incompatibleDisableObjcProviderResources());
codedOut.writeBoolNoTag(semantics.incompatibleDisallowDictPlus());
+ codedOut.writeBoolNoTag(semantics.incompatibleDisallowFileType());
codedOut.writeBoolNoTag(semantics.incompatibleDisallowOldStyleArgsAdd());
codedOut.writeBoolNoTag(semantics.incompatibleDisallowSlashOperator());
codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi());
@@ -71,6 +72,7 @@
builder.incompatibleDisableGlobTracking(codedIn.readBool());
builder.incompatibleDisableObjcProviderResources(codedIn.readBool());
builder.incompatibleDisallowDictPlus(codedIn.readBool());
+ builder.incompatibleDisallowFileType(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 2bbe871..499f7d2 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
@@ -145,6 +145,19 @@
public boolean incompatibleDisallowDictPlus;
@Option(
+ name = "incompatible_disallow_filetype",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ metadataTags = {
+ OptionMetadataTag.INCOMPATIBLE_CHANGE,
+ OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+ },
+ help = "If set to true, function `FileType` is not available."
+ )
+ public boolean incompatibleDisallowFileType;
+
+ @Option(
name = "incompatible_disallow_slash_operator",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
@@ -266,6 +279,7 @@
.incompatibleDisableGlobTracking(incompatibleDisableGlobTracking)
.incompatibleDisableObjcProviderResources(incompatibleDisableObjcProviderResources)
.incompatibleDisallowDictPlus(incompatibleDisallowDictPlus)
+ .incompatibleDisallowFileType(incompatibleDisallowFileType)
.incompatibleDisallowOldStyleArgsAdd(incompatibleDisallowOldStyleArgsAdd)
.incompatibleDisallowSlashOperator(incompatibleDisallowSlashOperator)
.incompatibleNewActionsApi(incompatibleNewActionsApi)
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 5240938..25946d8 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
@@ -51,6 +51,8 @@
public abstract boolean incompatibleDisallowDictPlus();
+ public abstract boolean incompatibleDisallowFileType();
+
public abstract boolean incompatibleDisallowOldStyleArgsAdd();
public abstract boolean incompatibleDisallowSlashOperator();
@@ -88,6 +90,7 @@
.incompatibleDisableGlobTracking(true)
.incompatibleDisableObjcProviderResources(false)
.incompatibleDisallowDictPlus(false)
+ .incompatibleDisallowFileType(false)
.incompatibleDisallowOldStyleArgsAdd(false)
.incompatibleDisallowSlashOperator(false)
.incompatibleNewActionsApi(false)
@@ -115,6 +118,8 @@
public abstract Builder incompatibleDisallowDictPlus(boolean value);
+ public abstract Builder incompatibleDisallowFileType(boolean value);
+
public abstract Builder incompatibleDisallowOldStyleArgsAdd(boolean value);
public abstract Builder incompatibleDisallowSlashOperator(boolean value);