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/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
index 4c1eb44..234526b 100644
--- a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
+++ b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
@@ -34,6 +34,7 @@
 import com.google.devtools.build.lib.syntax.SkylarkList;
 import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
 import com.google.devtools.build.lib.syntax.SkylarkList.Tuple;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
 import com.google.devtools.build.lib.syntax.util.EvaluationTestCase;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -66,7 +67,7 @@
   }
 
   @Override
-  protected EvaluationTestCase createEvaluationTestCase() {
+  protected EvaluationTestCase createEvaluationTestCase(SkylarkSemantics semantics) {
     return new EvaluationTestCase();
   }
 
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 057a7b7..569f3c3 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
@@ -125,6 +125,7 @@
         "--incompatible_disable_glob_tracking=" + rand.nextBoolean(),
         "--incompatible_disable_objc_provider_resources=" + rand.nextBoolean(),
         "--incompatible_disallow_dict_plus=" + rand.nextBoolean(),
+        "--incompatible_disallow_filetype=" + rand.nextBoolean(),
         "--incompatible_disallow_old_style_args_add=" + rand.nextBoolean(),
         "--incompatible_disallow_slash_operator=" + rand.nextBoolean(),
         "--incompatible_new_actions_api=" + rand.nextBoolean(),
@@ -148,6 +149,7 @@
         .incompatibleDisableGlobTracking(rand.nextBoolean())
         .incompatibleDisableObjcProviderResources(rand.nextBoolean())
         .incompatibleDisallowDictPlus(rand.nextBoolean())
+        .incompatibleDisallowFileType(rand.nextBoolean())
         .incompatibleDisallowOldStyleArgsAdd(rand.nextBoolean())
         .incompatibleDisallowSlashOperator(rand.nextBoolean())
         .incompatibleNewActionsApi(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index b13d64a..307139f 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -51,11 +51,13 @@
 import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.ClassObject;
 import com.google.devtools.build.lib.syntax.Environment;
+import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.SkylarkDict;
 import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
 import com.google.devtools.build.lib.syntax.SkylarkList.Tuple;
 import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.testutil.MoreAsserts;
 import com.google.devtools.build.lib.util.FileTypeSet;
@@ -793,6 +795,15 @@
   }
 
   @Test
+  public void testFileTypeIsDisabled() throws Exception {
+    SkylarkSemantics semantics =
+        SkylarkSemantics.DEFAULT_SEMANTICS.toBuilder().incompatibleDisallowFileType(true).build();
+    EvalException expected =
+        assertThrows(EvalException.class, () -> evalRuleClassCode(semantics, "FileType(['.css'])"));
+    assertThat(expected).hasMessageThat().contains("FileType function is not available.");
+  }
+
+  @Test
   public void testRuleInheritsBaseRuleAttributes() throws Exception {
     evalAndExport("def impl(ctx): return None", "r1 = rule(impl)");
     RuleClass c = ((SkylarkRuleFunction) lookup("r1")).getRuleClass();
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java b/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java
index 38d32e5..f292a3d 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java
@@ -31,6 +31,7 @@
 import com.google.devtools.build.lib.syntax.Environment;
 import com.google.devtools.build.lib.syntax.Environment.Phase;
 import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
 import com.google.devtools.build.lib.syntax.SkylarkUtils;
 import com.google.devtools.build.lib.syntax.util.EvaluationTestCase;
 import com.google.devtools.build.lib.testutil.TestConstants;
@@ -47,11 +48,11 @@
 
   @Before
   public final void setUpEvaluator() throws Exception {
-    ev = createEvaluationTestCase();
+    ev = createEvaluationTestCase(SkylarkSemantics.DEFAULT_SEMANTICS);
     ev.initialize();
   }
 
-  protected EvaluationTestCase createEvaluationTestCase() {
+  protected EvaluationTestCase createEvaluationTestCase(SkylarkSemantics semantics) {
     return new EvaluationTestCase() {
       @Override
       public Environment newEnvironment() throws Exception {
@@ -62,7 +63,7 @@
                 .build();
         Environment env =
             Environment.builder(mutability)
-                .useDefaultSemantics()
+                .setSemantics(semantics)
                 .setEventHandler(getEventHandler())
                 .setGlobals(
                     SkylarkModules.getGlobals(modules)
@@ -142,6 +143,12 @@
     return eval("def impl(ctx): return None\n" + Joiner.on("\n").join(lines));
   }
 
+  protected Object evalRuleClassCode(SkylarkSemantics semantics, String... lines) throws Exception {
+    ev = createEvaluationTestCase(semantics);
+    ev.initialize();
+    return eval("def impl(ctx): return None\n" + Joiner.on("\n").join(lines));
+  }
+
   protected void checkError(SkylarkRuleContext ruleContext, String errorMsg, String... lines)
       throws Exception {
     try {