Skylark: Expose non_empty flag for list/dict attributes.

--
MOS_MIGRATED_REVID=87956686
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
index 97e0fd2..9ee1049 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
@@ -50,6 +50,9 @@
   private static final String MANDATORY_DOC =
       "set to True if users have to explicitely specify the value";
 
+  private static final String NON_EMPTY_DOC =
+      "set to True if the attribute must not be empty";
+
   private static final String ALLOW_FILES_DOC =
       "whether File targets are allowed. Can be True, False (default), or "
       + "a FileType filter.";
@@ -99,6 +102,10 @@
       builder.setPropertyFlag("MANDATORY");
     }
 
+    if (arguments.containsKey("non_empty") && (Boolean) arguments.get("non_empty")) {
+      builder.setPropertyFlag("NON_EMPTY");
+    }
+
     if (arguments.containsKey("executable") && (Boolean) arguments.get("executable")) {
       builder.setPropertyFlag("EXECUTABLE");
     }
@@ -223,6 +230,7 @@
           doc = DEFAULT_DOC + " If not specified, default is []."),
       @Param(name = "flags", type = SkylarkList.class, generic1 = String.class, doc = FLAGS_DOC),
       @Param(name = "mandatory", type = Boolean.class, doc = MANDATORY_DOC),
+      @Param(name = "non_empty", type = Boolean.class, doc = NON_EMPTY_DOC),
       @Param(name = "cfg", type = ConfigurationTransition.class,
           doc = CONFIGURATION_DOC)})
   private static SkylarkFunction stringList = new SkylarkFunction("string_list") {
@@ -248,6 +256,7 @@
       @Param(name = "mandatory", type = Boolean.class, doc = MANDATORY_DOC),
       @Param(name = "allow_rules", type = SkylarkList.class, generic1 = String.class,
           doc = ALLOW_RULES_DOC),
+      @Param(name = "non_empty", type = Boolean.class, doc = NON_EMPTY_DOC),
       @Param(name = "providers", type = SkylarkList.class, generic1 = String.class,
           doc = "mandatory providers every dependency has to have"),
       @Param(name = "cfg", type = ConfigurationTransition.class, doc = CONFIGURATION_DOC)})
@@ -304,6 +313,7 @@
       @Param(name = "default", type = SkylarkList.class, generic1 = Label.class, doc = DEFAULT_DOC),
       @Param(name = "flags", type = SkylarkList.class, generic1 = String.class, doc = FLAGS_DOC),
       @Param(name = "mandatory", type = Boolean.class, doc = MANDATORY_DOC),
+      @Param(name = "non_empty", type = Boolean.class, doc = NON_EMPTY_DOC),
       @Param(name = "cfg", type = ConfigurationTransition.class, doc = CONFIGURATION_DOC)})
   private static SkylarkFunction outputList = new SkylarkFunction("output_list") {
       @Override
@@ -322,6 +332,7 @@
       @Param(name = "default", type = Map.class, doc = DEFAULT_DOC),
       @Param(name = "flags", type = SkylarkList.class, generic1 = String.class, doc = FLAGS_DOC),
       @Param(name = "mandatory", type = Boolean.class, doc = MANDATORY_DOC),
+      @Param(name = "non_empty", type = Boolean.class, doc = NON_EMPTY_DOC),
       @Param(name = "cfg", type = ConfigurationTransition.class, doc = CONFIGURATION_DOC)})
   private static SkylarkFunction stringDict = new SkylarkFunction("string_dict") {
       @Override