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()