Verify (in test) that ObjcProvider keys are either exposed to skylark or explicitly omitted

--
MOS_MIGRATED_REVID=137547748
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index df0d955..f1a8d08 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -17,6 +17,7 @@
 import static com.google.devtools.build.lib.collect.nestedset.Order.LINK_ORDER;
 import static com.google.devtools.build.lib.collect.nestedset.Order.STABLE_ORDER;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -380,43 +381,65 @@
   /** All keys in ObjcProvider that will be passed in the corresponding Skylark provider. */
   static final ImmutableList<Key<?>> KEYS_FOR_SKYLARK =
       ImmutableList.<Key<?>>of(
-          LIBRARY,
-          IMPORTED_LIBRARY,
-          JRE_LIBRARY,
-          LINKED_BINARY,
-          FORCE_LOAD_LIBRARY,
-          HEADER,
-          SOURCE,
-          DEFINE,
           ASSET_CATALOG,
-          SDK_DYLIB,
-          SDK_FRAMEWORK,
-          WEAK_SDK_FRAMEWORK,
-          XCDATAMODEL,
-          MODULE_MAP,
-          MERGE_ZIP,
-          STATIC_FRAMEWORK_FILE,
+          BUNDLE_FILE,
+          BUNDLE_IMPORT_DIR,
+          DEFINE,
           DYNAMIC_FRAMEWORK_FILE,
           DEBUG_SYMBOLS,
           DEBUG_SYMBOLS_PLIST,
-          STORYBOARD,
-          XIB,
-          STRINGS,
-          LINKOPT,
-          LINK_INPUTS,
-          J2OBJC_LIBRARY,
-          ROOT_MERGE_ZIP,
-          INCLUDE,
-          INCLUDE_SYSTEM,
+          EXPORTED_DEBUG_ARTIFACTS,
+          FRAMEWORK_DIR,
+          FRAMEWORK_SEARCH_PATH_ONLY,
+          FORCE_LOAD_LIBRARY,
           GENERAL_RESOURCE_DIR,
           GENERAL_RESOURCE_FILE,
-          BUNDLE_FILE,
-          BUNDLE_IMPORT_DIR,
-          XCASSETS_DIR,
-          FRAMEWORK_DIR,
-          MULTI_ARCH_LINKED_BINARIES,
+          HEADER,
+          IMPORTED_LIBRARY,
+          INCLUDE,
+          INCLUDE_SYSTEM,
+          J2OBJC_LIBRARY,
+          JRE_LIBRARY,
+          LIBRARY,
+          LINK_INPUTS,
+          LINKED_BINARY,
+          LINKMAP_FILE,
+          LINKOPT,
+          MERGE_ZIP,
+          MODULE_MAP,
+          MULTI_ARCH_DYNAMIC_LIBRARIES,
           MULTI_ARCH_LINKED_ARCHIVES,
-          MULTI_ARCH_DYNAMIC_LIBRARIES);
+          MULTI_ARCH_LINKED_BINARIES,
+          ROOT_MERGE_ZIP,
+          SDK_DYLIB,
+          SDK_FRAMEWORK,
+          SOURCE,
+          STATIC_FRAMEWORK_FILE,
+          STORYBOARD,
+          STRINGS,
+          WEAK_SDK_FRAMEWORK,
+          XCASSETS_DIR,
+          XCDATAMODEL,
+          XIB);
+  
+  /**
+   * All keys in ObjcProvider that are explicitly not exposed to skylark. This is used for
+   * testing and verification purposes to ensure that a conscious decision is made for all keys;
+   * by default, keys should be exposed to skylark: a comment outlining why a key is omitted
+   * from skylark should follow each such case.
+   **/
+  @VisibleForTesting
+  static final ImmutableList<Key<?>> KEYS_NOT_IN_SKYLARK = ImmutableList.<Key<?>>of(
+      // LibraryToLink not exposed to skylark.
+      CC_LIBRARY,
+      // Xcodegen is deprecated.
+      FORCE_LOAD_FOR_XCODEGEN,
+      // Flag enum is not exposed to skylark.
+      FLAG,
+      // Bundle not exposed to skylark.
+      NESTED_BUNDLE,
+      // CppModuleMap is not exposed to skylark.
+      TOP_LEVEL_MODULE_MAP);
 
   /**
    * Returns the skylark key for the given string, or null if no such key exists or is available
@@ -471,7 +494,7 @@
     }
     return builder.build();
   }
-  
+
   /**
    * All artifacts, bundleable files, etc, that should be propagated to transitive dependers, of
    * the type specified by {@code key}.
@@ -573,7 +596,7 @@
       }
       return this;
     }
-
+   
     /**
      * Add all keys and values from the given provider, but propagate any normally-propagated items
      * only to direct dependers of this ObjcProvider.