Add --incompatible_disable_deprecated_attr_params to disable some deprecated parameters of the skylark attr module.

RELNOTES: None.
PiperOrigin-RevId: 204797954
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
index 0d1a1aa..a0cf36d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
@@ -147,8 +147,15 @@
       builder.setPropertyFlag("MANDATORY");
     }
 
-    // TODO(laurentlb): Deprecated, remove in August 2016 (use allow_empty instead).
-    if (containsNonNoneKey(arguments, NON_EMPTY_ARG) && (Boolean) arguments.get(NON_EMPTY_ARG)) {
+    if (containsNonNoneKey(arguments, NON_EMPTY_ARG)
+        && (Boolean) arguments.get(NON_EMPTY_ARG)) {
+      if (env.getSemantics().incompatibleDisableDeprecatedAttrParams()) {
+        throw new EvalException(ast.getLocation(),
+            "'non_empty' is no longer supported. use allow_empty instead. You can use "
+                + "--incompatible_disable_deprecated_attr_params to temporarily disable this "
+                + "check.");
+      }
+
       builder.setPropertyFlag("NON_EMPTY");
     }
 
@@ -168,14 +175,21 @@
       }
     }
 
-    // TODO(laurentlb): Deprecated, remove in August 2016 (use allow_single_file).
     if (containsNonNoneKey(arguments, SINGLE_FILE_ARG)
         && (Boolean) arguments.get(SINGLE_FILE_ARG)) {
+      if (env.getSemantics().incompatibleDisableDeprecatedAttrParams()) {
+        throw new EvalException(
+            ast.getLocation(),
+            "'single_file' is no longer supported. use allow_single_file instead. You can use "
+                + "--incompatible_disable_deprecated_attr_params to temporarily disable this "
+                + "check.");
+      }
       if (containsNonNoneKey(arguments, ALLOW_SINGLE_FILE_ARG)) {
         throw new EvalException(
             ast.getLocation(),
             "Cannot specify both single_file (deprecated) and allow_single_file");
       }
+
       builder.setPropertyFlag("SINGLE_ARTIFACT");
     }
 
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 7f147cb..a8647a8 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
@@ -47,6 +47,7 @@
     codedOut.writeBoolNoTag(semantics.incompatibleBzlDisallowLoadAfterStatement());
     codedOut.writeBoolNoTag(semantics.incompatibleDepsetIsNotIterable());
     codedOut.writeBoolNoTag(semantics.incompatibleDepsetUnion());
+    codedOut.writeBoolNoTag(semantics.incompatibleDisableDeprecatedAttrParams());
     codedOut.writeBoolNoTag(semantics.incompatibleDisableObjcProviderResources());
     codedOut.writeBoolNoTag(semantics.incompatibleDisallowDataTransition());
     codedOut.writeBoolNoTag(semantics.incompatibleDisallowDictPlus());
@@ -74,6 +75,7 @@
     builder.incompatibleBzlDisallowLoadAfterStatement(codedIn.readBool());
     builder.incompatibleDepsetIsNotIterable(codedIn.readBool());
     builder.incompatibleDepsetUnion(codedIn.readBool());
+    builder.incompatibleDisableDeprecatedAttrParams(codedIn.readBool());
     builder.incompatibleDisableObjcProviderResources(codedIn.readBool());
     builder.incompatibleDisallowDataTransition(codedIn.readBool());
     builder.incompatibleDisallowDictPlus(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 8781bb5..0798968 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
@@ -115,6 +115,21 @@
   public boolean incompatibleDepsetIsNotIterable;
 
   @Option(
+      name = "incompatible_disable_deprecated_attr_params",
+      defaultValue = "false",
+      documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+      effectTags = {OptionEffectTag.UNKNOWN},
+      metadataTags = {
+          OptionMetadataTag.INCOMPATIBLE_CHANGE,
+          OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+      },
+      help =
+          "If set to true, disable the deprecated parameters 'single_file' and 'non_empty' on "
+              + "skylark attribute definition methods, such as attr.label()."
+  )
+  public boolean incompatibleDisableDeprecatedAttrParams;
+
+  @Option(
     name = "incompatible_disable_objc_provider_resources",
     defaultValue = "false",
     documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
@@ -327,6 +342,7 @@
         .incompatibleBzlDisallowLoadAfterStatement(incompatibleBzlDisallowLoadAfterStatement)
         .incompatibleDepsetIsNotIterable(incompatibleDepsetIsNotIterable)
         .incompatibleDepsetUnion(incompatibleDepsetUnion)
+        .incompatibleDisableDeprecatedAttrParams(incompatibleDisableDeprecatedAttrParams)
         .incompatibleDisableObjcProviderResources(incompatibleDisableObjcProviderResources)
         .incompatibleDisallowDataTransition(incompatibleDisallowDataTransition)
         .incompatibleDisallowDictPlus(incompatibleDisallowDictPlus)
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 5bd711b..fc7afa4 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
@@ -47,6 +47,8 @@
 
   public abstract boolean incompatibleDepsetUnion();
 
+  public abstract boolean incompatibleDisableDeprecatedAttrParams();
+
   public abstract boolean incompatibleDisableObjcProviderResources();
 
   public abstract boolean incompatibleDisallowDataTransition();
@@ -96,6 +98,7 @@
           .incompatibleBzlDisallowLoadAfterStatement(false)
           .incompatibleDepsetIsNotIterable(false)
           .incompatibleDepsetUnion(false)
+          .incompatibleDisableDeprecatedAttrParams(false)
           .incompatibleDisableObjcProviderResources(false)
           .incompatibleDisallowDataTransition(false)
           .incompatibleDisallowDictPlus(false)
@@ -126,6 +129,8 @@
 
     public abstract Builder incompatibleDepsetUnion(boolean value);
 
+    public abstract Builder incompatibleDisableDeprecatedAttrParams(boolean value);
+
     public abstract Builder incompatibleDisableObjcProviderResources(boolean value);
 
     public abstract Builder incompatibleDisallowDataTransition(boolean value);