Silently return None on unknown invocations of functions of the native module

Also add internal type PintoModuleProvider to the list of non-bootstrap globals.

RELNOTES: None.
PiperOrigin-RevId: 269639202
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index 021df19..5ff6763 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -617,6 +617,7 @@
     ProguardMappingProviderApi.NAME,
     GeneratedExtensionRegistryProviderApi.NAME,
     AndroidBinaryDataInfoApi.NAME,
+    "PintoModuleProvider"
   };
 
   /**
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkNativeModuleApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkNativeModuleApi.java
index 5939c69..b9a4a26 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkNativeModuleApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkNativeModuleApi.java
@@ -14,8 +14,11 @@
 
 package com.google.devtools.build.skydoc.fakebuildapi;
 
+import com.google.common.collect.ImmutableCollection;
+import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.skylarkbuildapi.SkylarkNativeModuleApi;
+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.FuncallExpression;
@@ -23,11 +26,10 @@
 import com.google.devtools.build.lib.syntax.SkylarkDict;
 import com.google.devtools.build.lib.syntax.SkylarkList;
 import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
+import javax.annotation.Nullable;
 
-/**
- * Fake implementation of {@link SkylarkNativeModuleApi}.
- */
-public class FakeSkylarkNativeModuleApi implements SkylarkNativeModuleApi {
+/** Fake implementation of {@link SkylarkNativeModuleApi}. */
+public class FakeSkylarkNativeModuleApi implements SkylarkNativeModuleApi, ClassObject {
 
   @Override
   public SkylarkList<?> glob(
@@ -74,4 +76,25 @@
   public String repositoryName(Location location, Environment env) throws EvalException {
     return "";
   }
+
+  @Nullable
+  @Override
+  public Object getValue(String name) throws EvalException {
+    // Bazel's notion of the global "native" isn't fully exposed via public interfaces, for example,
+    // as far as native rules are concerned. Returning None on all unsupported invocations of
+    // native.[func_name]() is the safest "best effort" approach to implementing a fake for
+    // "native".
+    return new FakeStarlarkCallable(name);
+  }
+
+  @Override
+  public ImmutableCollection<String> getFieldNames() throws EvalException {
+    return ImmutableList.of();
+  }
+
+  @Nullable
+  @Override
+  public String getErrorMessageForUnknownField(String field) {
+    return "";
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkCallable.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkCallable.java
new file mode 100644
index 0000000..c667aa8
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkCallable.java
@@ -0,0 +1,51 @@
+// Copyright 2019 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.skydoc.fakebuildapi;
+
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Environment;
+import com.google.devtools.build.lib.syntax.FuncallExpression;
+import com.google.devtools.build.lib.syntax.Runtime;
+import com.google.devtools.build.lib.syntax.StarlarkCallable;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
+
+/**
+ * "Fake" implementation of {@link StarlarkCallable} which accepts any parameters and always returns
+ * None.
+ */
+public final class FakeStarlarkCallable implements StarlarkCallable {
+
+  private final String functionName;
+
+  public FakeStarlarkCallable(String functionName) {
+    this.functionName = functionName;
+  }
+
+  @Override
+  public Object call(
+      List<Object> args,
+      @Nullable Map<String, Object> kwargs,
+      @Nullable FuncallExpression call,
+      Environment env) {
+    return Runtime.NONE;
+  }
+
+  @Override
+  public void repr(SkylarkPrinter printer) {
+    printer.append("<faked no-op function " + functionName + ">");
+  }
+}
diff --git a/src/test/java/com/google/devtools/build/skydoc/testdata/cpp_basic_test/input.bzl b/src/test/java/com/google/devtools/build/skydoc/testdata/cpp_basic_test/input.bzl
index 937f7da..64dcb07 100644
--- a/src/test/java/com/google/devtools/build/skydoc/testdata/cpp_basic_test/input.bzl
+++ b/src/test/java/com/google/devtools/build/skydoc/testdata/cpp_basic_test/input.bzl
@@ -1,5 +1,6 @@
 def exercise_the_api():
     var1 = cc_common.CcToolchainInfo
+    var2 = native.cc_library(name = "foo")
 
 exercise_the_api()