aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/BUILD3
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/SkydocMain.java4
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java27
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAspect.java27
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java22
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD26
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java155
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java63
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java68
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleToolchain.java42
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java37
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java242
-rw-r--r--src/test/java/com/google/devtools/build/skydoc/BUILD7
-rw-r--r--src/test/java/com/google/devtools/build/skydoc/apple_basic_test/golden.txt4
-rw-r--r--src/test/java/com/google/devtools/build/skydoc/apple_basic_test/input.txt20
15 files changed, 747 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/skydoc/BUILD b/src/main/java/com/google/devtools/build/skydoc/BUILD
index d3bcf4b101..b80bfab727 100644
--- a/src/main/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/BUILD
@@ -16,6 +16,7 @@ filegroup(
name = "srcs",
srcs = glob(["**"]) + [
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi:srcs",
+ "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple:srcs",
"//src/main/java/com/google/devtools/build/skydoc/rendering:srcs",
],
)
@@ -35,8 +36,10 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:events",
"//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+ "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple",
"//src/main/java/com/google/devtools/build/skydoc/rendering",
"//third_party:guava",
"//third_party:jsr305",
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 1d9043f8b7..6a5628368e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.skylarkbuildapi.TopLevelBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleBootstrap;
import com.google.devtools.build.lib.syntax.BaseFunction;
import com.google.devtools.build.lib.syntax.BuildFileAST;
import com.google.devtools.build.lib.syntax.Environment;
@@ -38,6 +39,7 @@ import com.google.devtools.build.skydoc.fakebuildapi.FakeSkylarkCommandLineApi;
import com.google.devtools.build.skydoc.fakebuildapi.FakeSkylarkNativeModuleApi;
import com.google.devtools.build.skydoc.fakebuildapi.FakeSkylarkRuleFunctionsApi;
import com.google.devtools.build.skydoc.fakebuildapi.FakeStructApi.FakeStructProviderApi;
+import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleCommon;
import com.google.devtools.build.skydoc.rendering.RuleInfo;
import java.io.IOException;
import java.io.PrintWriter;
@@ -180,12 +182,14 @@ public class SkydocMain {
new FakeOutputGroupInfoProvider(),
new FakeActionsInfoProvider(),
new FakeDefaultInfoProvider());
+ AppleBootstrap appleBootstrap = new AppleBootstrap(new FakeAppleCommon());
ImmutableMap.Builder<String, Object> envBuilder = ImmutableMap.builder();
Runtime.addConstantsToBuilder(envBuilder);
MethodLibrary.addBindingsToBuilder(envBuilder);
topLevelBootstrap.addBindingsToBuilder(envBuilder);
+ appleBootstrap.addBindingsToBuilder(envBuilder);
return GlobalFrame.createForBuiltins(envBuilder.build());
}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
new file mode 100644
index 0000000000..cdf8ef1f6e
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
@@ -0,0 +1,27 @@
+// Copyright 2018 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.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+
+/**
+ * Fake implementation of {@link ProviderApi}.
+ */
+public class FakeProviderApi implements ProviderApi {
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAspect.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAspect.java
new file mode 100644
index 0000000000..7cd6e108c3
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkAspect.java
@@ -0,0 +1,27 @@
+// Copyright 2018 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.skylarkbuildapi.SkylarkAspectApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+
+/**
+ * Fake implementation of {@link SkylarkAspectApi}.
+ */
+public class FakeSkylarkAspect implements SkylarkAspectApi {
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
new file mode 100644
index 0000000000..3d76190adc
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSplitTransitionProvider.java
@@ -0,0 +1,22 @@
+// Copyright 2018 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.skylarkbuildapi.SplitTransitionProviderApi;
+
+/**
+ * Fake implementation of {@link SplitTransitionProviderApi}.
+ */
+public class FakeSplitTransitionProvider implements SplitTransitionProviderApi {}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
new file mode 100644
index 0000000000..25246fd421
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/BUILD
@@ -0,0 +1,26 @@
+package(
+ default_visibility = ["//src:__subpackages__"],
+)
+
+licenses(["notice"]) # Apache 2.0
+
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+)
+
+java_library(
+ name = "apple",
+ srcs = glob(["*.java"]),
+ deps = [
+ "//src/main/java/com/google/devtools/build/lib:events",
+ "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+ "//src/main/java/com/google/devtools/build/lib:syntax",
+ "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple",
+ "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ ],
+)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
new file mode 100644
index 0000000000..59a2acfeef
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleCommon.java
@@ -0,0 +1,155 @@
+// Copyright 2018 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.apple;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.SkylarkAspectApi;
+import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi;
+import com.google.devtools.build.lib.skylarkbuildapi.SplitTransitionProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleCommonApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleDynamicFrameworkInfoApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.ApplePlatformApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleStaticLibraryInfoApi.AppleStaticLibraryInfoProvider;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleToolchainApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.DottedVersionApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.ObjcProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.XcodeConfigProviderApi;
+import com.google.devtools.build.lib.syntax.Environment;
+import com.google.devtools.build.lib.syntax.SkylarkDict;
+import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
+import com.google.devtools.build.skydoc.fakebuildapi.FakeSkylarkAspect;
+import com.google.devtools.build.skydoc.fakebuildapi.FakeSplitTransitionProvider;
+import com.google.devtools.build.skydoc.fakebuildapi.FakeStructApi;
+import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleStaticLibraryInfo.FakeAppleStaticLibraryInfoProvider;
+
+/**
+ * Fake implementation of {@link AppleCommonApi}.
+ */
+public class FakeAppleCommon implements AppleCommonApi<
+ FileApi,
+ ObjcProviderApi<?>,
+ XcodeConfigProviderApi<?, ?>,
+ ApplePlatformApi> {
+
+ @Override
+ public AppleToolchainApi<?> getAppleToolchain() {
+ return new FakeAppleToolchain();
+ }
+
+ @Override
+ public StructApi getPlatformTypeStruct() {
+ return new FakeStructApi();
+ }
+
+ @Override
+ public StructApi getPlatformStruct() {
+ return new FakeStructApi();
+ }
+
+ @Override
+ public ProviderApi getXcodeVersionPropertiesConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public ProviderApi getXcodeVersionConfigConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public ProviderApi getObjcProviderConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public ProviderApi getAppleDynamicFrameworkConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public ProviderApi getAppleDylibBinaryConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public ProviderApi getAppleExecutableBinaryConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public AppleStaticLibraryInfoProvider<?, ?> getAppleStaticLibraryProvider() {
+ return new FakeAppleStaticLibraryInfoProvider();
+ }
+
+ @Override
+ public ProviderApi getAppleDebugOutputsConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public ProviderApi getAppleLoadableBundleBinaryConstructor() {
+ return new FakeProviderApi();
+ }
+
+ @Override
+ public SplitTransitionProviderApi getMultiArchSplitProvider() {
+ return new FakeSplitTransitionProvider();
+ }
+
+ @Override
+ public StructApi linkMultiArchBinary(
+ SkylarkRuleContextApi skylarkRuleContext, Environment environment) {
+ return new FakeStructApi();
+ }
+
+ @Override
+ public DottedVersionApi<?> dottedVersion(String version) {
+ return new FakeDottedVersion();
+ }
+
+ @Override
+ public SkylarkAspectApi getObjcProtoAspect() {
+ return new FakeSkylarkAspect();
+ }
+
+ @Override
+ public AppleDynamicFrameworkInfoApi<?, ?> newDynamicFrameworkProvider(FileApi dylibBinary,
+ ObjcProviderApi<?> depsObjcProvider, Object dynamicFrameworkDirs,
+ Object dynamicFrameworkFiles) {
+ return new FakeAppleDynamicFrameworkInfo();
+ }
+
+ @Override
+ public ObjcProviderApi<?> newObjcProvider(Boolean usesSwift, SkylarkDict<?, ?> kwargs,
+ Environment environment) {
+ return new FakeObjcProvider();
+ }
+
+ @Override
+ public ImmutableMap<String, String> getTargetAppleEnvironment(
+ XcodeConfigProviderApi<?, ?> xcodeConfig,
+ ApplePlatformApi platform) {
+ return ImmutableMap.of();
+ }
+
+ @Override
+ public ImmutableMap<String, String> getAppleHostSystemEnv(
+ XcodeConfigProviderApi<?, ?> xcodeConfig) {
+ return ImmutableMap.of();
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
new file mode 100644
index 0000000000..fc9f236554
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
@@ -0,0 +1,63 @@
+// Copyright 2018 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.apple;
+
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleDynamicFrameworkInfoApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.ObjcProviderApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.EvalException;
+
+/**
+ * Fake implementation of {@link AppleDynamicFrameworkInfoApi}.
+ */
+public class FakeAppleDynamicFrameworkInfo
+ implements AppleDynamicFrameworkInfoApi<Object, FileApi> {
+
+ @Override
+ public NestedSet<Object> getDynamicFrameworkDirs() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> getDynamicFrameworkFiles() {
+ return null;
+ }
+
+ @Override
+ public FileApi getAppleDylibBinary() {
+ return null;
+ }
+
+ @Override
+ public ObjcProviderApi<FileApi> getDepsObjcProvider() {
+ return new FakeObjcProvider();
+ }
+
+ @Override
+ public String toProto(Location loc) throws EvalException {
+ return "";
+ }
+
+ @Override
+ public String toJson(Location loc) throws EvalException {
+ return "";
+ }
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
new file mode 100644
index 0000000000..bc246bb8b3
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleStaticLibraryInfo.java
@@ -0,0 +1,68 @@
+// Copyright 2018 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.apple;
+
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleStaticLibraryInfoApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.ObjcProviderApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.EvalException;
+
+/**
+ * Fake implementation of {@link AppleStaticLibraryInfoApi}.
+ */
+public class FakeAppleStaticLibraryInfo implements AppleStaticLibraryInfoApi {
+
+ @Override
+ public FileApi getMultiArchArchive() {
+ return null;
+ }
+
+ @Override
+ public ObjcProviderApi<?> getDepsObjcProvider() {
+ return null;
+ }
+
+ @Override
+ public String toProto(Location loc) throws EvalException {
+ return "";
+ }
+
+ @Override
+ public String toJson(Location loc) throws EvalException {
+ return "";
+ }
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+
+ /**
+ * Fake implementation of {@link AppleStaticLibraryInfoProvider}.
+ */
+ public static class FakeAppleStaticLibraryInfoProvider
+ implements AppleStaticLibraryInfoProvider<FileApi, ObjcProviderApi<FileApi>> {
+
+ @Override
+ public AppleStaticLibraryInfoApi appleStaticLibrary(FileApi archive,
+ ObjcProviderApi<FileApi> objcProvider)
+ throws EvalException {
+ return new FakeAppleStaticLibraryInfo();
+ }
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleToolchain.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleToolchain.java
new file mode 100644
index 0000000000..95c4344a9e
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleToolchain.java
@@ -0,0 +1,42 @@
+// Copyright 2018 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.apple;
+
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleConfigurationApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.ApplePlatformTypeApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleToolchainApi;
+
+/**
+ * Fake implementation of {@link AppleToolchainApi}.
+ */
+public class FakeAppleToolchain
+ implements AppleToolchainApi<AppleConfigurationApi<ApplePlatformTypeApi>> {
+
+ @Override
+ public String sdkDirConstant() {
+ return "";
+ }
+
+ @Override
+ public String developerDirConstant() {
+ return "";
+ }
+
+ @Override
+ public String platformFrameworkDirFromConfig(
+ AppleConfigurationApi<ApplePlatformTypeApi> configuration) {
+ return "";
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
new file mode 100644
index 0000000000..6ef2fe5a32
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeDottedVersion.java
@@ -0,0 +1,37 @@
+// Copyright 2018 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.apple;
+
+import com.google.devtools.build.lib.skylarkbuildapi.apple.DottedVersionApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+
+/**
+ * Fake implementation of {@link DottedVersionApi}.
+ */
+public class FakeDottedVersion implements DottedVersionApi<FakeDottedVersion> {
+
+ @Override
+ public int compareTo_skylark(FakeDottedVersion other) {
+ return 0;
+ }
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+
+ @Override
+ public int compareTo(FakeDottedVersion o) {
+ return 0;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
new file mode 100644
index 0000000000..b5dcbf4fe6
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
@@ -0,0 +1,242 @@
+// Copyright 2018 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.apple;
+
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.apple.ObjcProviderApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+
+/**
+ * Fake implementation of {@link ObjcProviderApi}.
+ */
+public class FakeObjcProvider implements ObjcProviderApi<FileApi> {
+
+ @Override
+ public NestedSet<FileApi> assetCatalog() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet bundleFile() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<String> define() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet dynamicFrameworkDir() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> dynamicFrameworkFile() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> debugSymbols() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> debugSymbolsPlist() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> exportedDebugArtifacts() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet frameworkSearchPathOnly() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> forceLoadLibrary() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> header() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> importedLibrary() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet include() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet includeSystem() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet iquote() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> j2objcLibrary() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> jreLibrary() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> library() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> linkInputs() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> linkedBinary() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> linkmapFile() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<String> linkopt() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> mergeZip() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> moduleMap() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> multiArchDynamicLibraries() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> multiArchLinkedArchives() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> multiArchLinkedBinaries() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> rootMergeZip() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<String> sdkDylib() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet sdkFramework() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> source() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> staticFrameworkFile() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> storyboard() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> strings() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> umbrellaHeader() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet weakSdkFramework() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet xcassetsDir() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> xcdatamodel() {
+ return null;
+ }
+
+ @Override
+ public NestedSet<FileApi> xib() {
+ return null;
+ }
+
+ @Override
+ public SkylarkNestedSet getStaticFrameworkDirsForSkylark() {
+ return null;
+ }
+
+ @Override
+ public String toProto(Location loc) throws EvalException {
+ return "";
+ }
+
+ @Override
+ public String toJson(Location loc) throws EvalException {
+ return "";
+ }
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+}
diff --git a/src/test/java/com/google/devtools/build/skydoc/BUILD b/src/test/java/com/google/devtools/build/skydoc/BUILD
index e5a80fd54d..5e98b403f2 100644
--- a/src/test/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/test/java/com/google/devtools/build/skydoc/BUILD
@@ -51,3 +51,10 @@ skydoc_test(
input_file = "multiple_rules_test/input.txt",
skydoc = "//src/main/java/com/google/devtools/build/skydoc",
)
+
+skydoc_test(
+ name = "apple_basic_test",
+ golden_file = "apple_basic_test/golden.txt",
+ input_file = "apple_basic_test/input.txt",
+ skydoc = "//src/main/java/com/google/devtools/build/skydoc",
+)
diff --git a/src/test/java/com/google/devtools/build/skydoc/apple_basic_test/golden.txt b/src/test/java/com/google/devtools/build/skydoc/apple_basic_test/golden.txt
new file mode 100644
index 0000000000..36642e45dc
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/skydoc/apple_basic_test/golden.txt
@@ -0,0 +1,4 @@
+apple_related_rule
+This rule does apple-related things.
+first,second,third,fourth
+
diff --git a/src/test/java/com/google/devtools/build/skydoc/apple_basic_test/input.txt b/src/test/java/com/google/devtools/build/skydoc/apple_basic_test/input.txt
new file mode 100644
index 0000000000..165176ef0e
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/skydoc/apple_basic_test/input.txt
@@ -0,0 +1,20 @@
+def exercise_the_api():
+ var1 = apple_common.platform_type
+ var2 = apple_common.AppleDynamicFramework
+
+exercise_the_api()
+
+def my_rule_impl(ctx):
+ return struct()
+
+
+apple_related_rule = rule(
+ implementation = my_rule_impl,
+ doc = "This rule does apple-related things.",
+ attrs = {
+ "first": attr.label(mandatory = True, allow_files = True, single_file = True),
+ "second": attr.string_dict(mandatory = True),
+ "third": attr.output(mandatory = True),
+ "fourth": attr.bool(default = False, mandatory = False),
+ },
+)