Expose the JavaCcLinkParamsProvider to Starlark (as JavaCcLinkParamsInfo). This
is necessary for the Android Rules Starlark rewrite. The Starlark API is marked as
"do not use" in a similar way the Android Starlark APIs have been.
RELNOTES: none.
PiperOrigin-RevId: 217652352
diff --git a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
index 2c17a20..532f1e5 100644
--- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
+++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
@@ -50,6 +50,7 @@
import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigGlobalLibrary;
import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigSkylarkCommon;
import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcModule;
+import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCcLinkParamsProvider;
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCommon;
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaInfo.FakeJavaInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaProtoCommon;
@@ -180,7 +181,10 @@
CcBootstrap ccBootstrap = new CcBootstrap(new FakeCcModule());
JavaBootstrap javaBootstrap =
new JavaBootstrap(
- new FakeJavaCommon(), new FakeJavaInfoProvider(), new FakeJavaProtoCommon());
+ new FakeJavaCommon(),
+ new FakeJavaInfoProvider(),
+ new FakeJavaProtoCommon(),
+ new FakeJavaCcLinkParamsProvider.Provider());
PlatformBootstrap platformBootstrap = new PlatformBootstrap(new FakePlatformCommon());
RepositoryBootstrap repositoryBootstrap = new RepositoryBootstrap(new FakeRepositoryModule());
TestingBootstrap testingBootstrap = new TestingBootstrap(new FakeTestingModule(),
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
index 75b1ade..3d5a1a3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
@@ -28,6 +28,7 @@
import com.google.devtools.build.lib.rules.core.CoreRules;
import com.google.devtools.build.lib.rules.extra.ActionListenerRule;
import com.google.devtools.build.lib.rules.extra.ExtraActionRule;
+import com.google.devtools.build.lib.rules.java.JavaCcLinkParamsProvider;
import com.google.devtools.build.lib.rules.java.JavaConfigurationLoader;
import com.google.devtools.build.lib.rules.java.JavaHostRuntimeAliasRule;
import com.google.devtools.build.lib.rules.java.JavaImportBaseRule;
@@ -84,10 +85,12 @@
builder.addRuleDefinition(new ExtraActionRule());
builder.addRuleDefinition(new ActionListenerRule());
- builder.addSkylarkBootstrap(new JavaBootstrap(
- new JavaSkylarkCommon(BazelJavaSemantics.INSTANCE),
- JavaInfo.PROVIDER,
- new JavaProtoSkylarkCommon()));
+ builder.addSkylarkBootstrap(
+ new JavaBootstrap(
+ new JavaSkylarkCommon(BazelJavaSemantics.INSTANCE),
+ JavaInfo.PROVIDER,
+ new JavaProtoSkylarkCommon(),
+ JavaCcLinkParamsProvider.PROVIDER));
try {
builder.addWorkspaceFileSuffix(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
index 7d57ef9..863116b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
@@ -548,7 +548,7 @@
ImmutableList.<CcLinkingInfo>builder()
.addAll(AnalysisUtils.getProviders(deps, CcLinkingInfo.PROVIDER))
.addAll(
- Streams.stream(AnalysisUtils.getProviders(deps, JavaCcLinkParamsProvider.class))
+ Streams.stream(AnalysisUtils.getProviders(deps, JavaCcLinkParamsProvider.PROVIDER))
.map(JavaCcLinkParamsProvider::getCcLinkingInfo)
.collect(ImmutableList.toImmutableList()))
.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index 016e05f..4beacf0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -831,7 +831,7 @@
ImmutableList.<CcLinkingInfo>builder()
.add(linkOptsProvider)
.addAll(
- Streams.stream(AnalysisUtils.getProviders(deps, JavaCcLinkParamsProvider.class))
+ Streams.stream(AnalysisUtils.getProviders(deps, JavaCcLinkParamsProvider.PROVIDER))
.map(JavaCcLinkParamsProvider::getCcLinkingInfo)
.collect(ImmutableList.toImmutableList()))
.addAll(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
index c808552..64fc1f2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
@@ -14,24 +14,44 @@
package com.google.devtools.build.lib.rules.java;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCcLinkParamsProviderApi;
+import com.google.devtools.build.lib.syntax.EvalException;
/** A target that provides C++ libraries to be linked into Java targets. */
@Immutable
-@AutoCodec
-public final class JavaCcLinkParamsProvider implements TransitiveInfoProvider {
+public final class JavaCcLinkParamsProvider extends Info
+ implements JavaCcLinkParamsProviderApi<CcLinkingInfo> {
+ public static final String PROVIDER_NAME = "JavaCcLinkParamsInfo";
+ public static final Provider PROVIDER = new Provider();
+
private final CcLinkingInfo ccLinkingInfo;
- @AutoCodec.VisibleForSerialization
- @AutoCodec.Instantiator
public JavaCcLinkParamsProvider(CcLinkingInfo ccLinkingInfo) {
+ super(PROVIDER, Location.BUILTIN);
this.ccLinkingInfo = ccLinkingInfo;
}
+ @Override
public CcLinkingInfo getCcLinkingInfo() {
return ccLinkingInfo;
}
+
+ /** Provider class for {@link JavaCcLinkParamsProvider} objects. */
+ public static class Provider extends BuiltinProvider<JavaCcLinkParamsProvider>
+ implements JavaCcLinkParamsProviderApi.Provider<CcLinkingInfo> {
+ private Provider() {
+ super(PROVIDER_NAME, JavaCcLinkParamsProvider.class);
+ }
+
+ @Override
+ public JavaCcLinkParamsProviderApi<CcLinkingInfo> createInfo(CcLinkingInfo ccLinkingInfo)
+ throws EvalException {
+ return new JavaCcLinkParamsProvider(ccLinkingInfo);
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index 507949a..c472e9a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -246,7 +246,8 @@
}
aspect.addProvider(generatedCompilationArgsProvider);
- aspect.addProvider(createCcLinkingInfo(ruleContext, aspectCommon.getProtoRuntimeDeps()));
+ aspect.addNativeDeclaredProvider(
+ createCcLinkingInfo(ruleContext, aspectCommon.getProtoRuntimeDeps()));
JavaSkylarkApiProvider skylarkApiProvider = JavaSkylarkApiProvider.fromRuleContext();
aspect
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
index 5031713..87f8277 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
@@ -93,7 +93,7 @@
.addOutputGroup(OutputGroupInfo.DEFAULT, NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER))
.addNativeDeclaredProvider(getJavaLiteRuntimeSpec(ruleContext))
.addNativeDeclaredProvider(javaInfo)
- .addProvider(createCcLinkingInfo(ruleContext, ImmutableList.of()))
+ .addNativeDeclaredProvider(createCcLinkingInfo(ruleContext, ImmutableList.of()))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
index 15d6349..fd81f4c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
@@ -257,7 +257,8 @@
}
aspect.addProvider(generatedCompilationArgsProvider);
- aspect.addProvider(createCcLinkingInfo(ruleContext, aspectCommon.getProtoRuntimeDeps()));
+ aspect.addNativeDeclaredProvider(
+ createCcLinkingInfo(ruleContext, aspectCommon.getProtoRuntimeDeps()));
JavaSkylarkApiProvider javaSkylarkApiProvider = JavaSkylarkApiProvider.fromRuleContext();
aspect
.addSkylarkTransitiveInfo(JavaSkylarkApiProvider.NAME, javaSkylarkApiProvider)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java
index aa84228..d8cbf90 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java
@@ -97,7 +97,7 @@
.addNativeDeclaredProvider(javaInfo);
if (ruleContext.getFragment(JavaConfiguration.class).jplPropagateCcLinkParamsStore()) {
- result.addProvider(createCcLinkingInfo(ruleContext, ImmutableList.of()));
+ result.addNativeDeclaredProvider(createCcLinkingInfo(ruleContext, ImmutableList.of()));
}
return result.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java
index e63e188..092da05 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java
@@ -44,7 +44,7 @@
List<JavaCcLinkParamsProvider> providers = new ArrayList<>();
for (TransitiveInfoCollection t :
ruleContext.getPrerequisites("deps", RuleConfiguredTarget.Mode.TARGET)) {
- providers.add(t.getProvider(JavaCcLinkParamsProvider.class));
+ providers.add(t.get(JavaCcLinkParamsProvider.PROVIDER));
}
ImmutableList<CcLinkingInfo> ccLinkingInfos =
ImmutableList.<CcLinkingInfo>builder()
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD
index 938435a..3d361ca 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD
@@ -25,6 +25,7 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//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/cpp",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java
index bb65735..3b18a1f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java
@@ -26,13 +26,17 @@
private final JavaCommonApi<?, ?, ?, ?, ?> javaCommonApi;
private final JavaInfoProviderApi javaInfoProviderApi;
private final JavaProtoCommonApi<?, ?, ?> javaProtoCommonApi;
+ private final JavaCcLinkParamsProviderApi.Provider<?> javaCcLinkParamsProviderApiProvider;
- public JavaBootstrap(JavaCommonApi<?, ?, ?, ?, ?> javaCommonApi,
+ public JavaBootstrap(
+ JavaCommonApi<?, ?, ?, ?, ?> javaCommonApi,
JavaInfoProviderApi javaInfoProviderApi,
- JavaProtoCommonApi<?, ?, ?> javaProtoCommonApi) {
+ JavaProtoCommonApi<?, ?, ?> javaProtoCommonApi,
+ JavaCcLinkParamsProviderApi.Provider<?> javaCcLinkParamsProviderApiProvider) {
this.javaCommonApi = javaCommonApi;
this.javaInfoProviderApi = javaInfoProviderApi;
this.javaProtoCommonApi = javaProtoCommonApi;
+ this.javaCcLinkParamsProviderApiProvider = javaCcLinkParamsProviderApiProvider;
}
@Override
@@ -40,5 +44,6 @@
builder.put("java_common", javaCommonApi);
builder.put("JavaInfo", javaInfoProviderApi);
builder.put("java_proto_common", javaProtoCommonApi);
+ builder.put("java_cc_link_params_info", javaCcLinkParamsProviderApiProvider);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
new file mode 100644
index 0000000..d8bd298
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
@@ -0,0 +1,76 @@
+// 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.lib.skylarkbuildapi.java;
+
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingInfoApi;
+import com.google.devtools.build.lib.skylarkinterface.Param;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics.FlagIdentifier;
+
+/** A target that provides C++ libraries to be linked into Java targets. */
+@SkylarkModule(
+ name = "JavaCcLinkParamsInfo",
+ doc =
+ "Do not use this module. It is intended for migration purposes only. If you depend on it, "
+ + "you will be broken when it is removed."
+ + "Information about the c++ libraries to be linked into Java targets.",
+ documented = true,
+ category = SkylarkModuleCategory.PROVIDER)
+public interface JavaCcLinkParamsProviderApi<CcLinkingInfoApiT extends CcLinkingInfoApi> {
+ /** Name of this info object. */
+ public static String NAME = "JavaCcLinkParamsInfo";
+
+ /** Returns the cc linking info */
+ @SkylarkCallable(
+ name = "cc_linking_info",
+ structField = true,
+ doc = "Returns the CcLinkingInfo provider.",
+ documented = true,
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS)
+ CcLinkingInfoApiT getCcLinkingInfo();
+
+ /** The provider implementing this can construct the JavaCcLinkParamsInfo provider. */
+ @SkylarkModule(
+ name = "Provider",
+ doc =
+ "Do not use this module. It is intended for migration purposes only. If you depend on "
+ + "it, you will be broken when it is removed.",
+ documented = true)
+ public interface Provider<CcLinkingInfoApiT extends CcLinkingInfoApi> extends ProviderApi {
+
+ @SkylarkCallable(
+ name = NAME,
+ doc = "The <code>JavaCcLinkParamsInfo</code> constructor.",
+ documented = true,
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS,
+ parameters = {
+ @Param(
+ name = "store",
+ doc = "The CcLinkingInfo provider.",
+ positional = true,
+ named = false,
+ type = CcLinkingInfoApi.class),
+ },
+ selfCall = true)
+ @SkylarkConstructor(objectType = JavaCcLinkParamsProviderApi.class, receiverNameForDoc = NAME)
+ public JavaCcLinkParamsProviderApi<CcLinkingInfoApiT> createInfo(CcLinkingInfoApiT store)
+ throws EvalException;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index 3605c61..df6e9f9 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -40,6 +40,8 @@
public enum FlagIdentifier {
EXPERIMENTAL_ANALYSIS_TESTING_IMPROVEMENTS(
SkylarkSemantics::experimentalAnalysisTestingImprovements),
+ EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS(
+ SkylarkSemantics::experimentalEnableAndroidMigrationApis),
EXPERIMENTAL_PLATFORM_API(SkylarkSemantics::experimentalPlatformsApi),
INCOMPATIBLE_DISABLE_OBJC_PROVIDER_RESOURCES(
SkylarkSemantics::incompatibleDisableObjcProviderResources),
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 ebb19db..dfc7a4a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -60,6 +60,7 @@
import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigGlobalLibrary;
import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigSkylarkCommon;
import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcModule;
+import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCcLinkParamsProvider;
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaCommon;
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaInfo.FakeJavaInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaProtoCommon;
@@ -368,9 +369,12 @@
new ConfigBootstrap(new FakeConfigSkylarkCommon(), new FakeConfigApi(),
new FakeConfigGlobalLibrary());
CcBootstrap ccBootstrap = new CcBootstrap(new FakeCcModule());
- JavaBootstrap javaBootstrap = new JavaBootstrap(new FakeJavaCommon(),
- new FakeJavaInfoProvider(),
- new FakeJavaProtoCommon());
+ JavaBootstrap javaBootstrap =
+ new JavaBootstrap(
+ new FakeJavaCommon(),
+ new FakeJavaInfoProvider(),
+ new FakeJavaProtoCommon(),
+ new FakeJavaCcLinkParamsProvider.Provider());
PlatformBootstrap platformBootstrap = new PlatformBootstrap(new FakePlatformCommon());
RepositoryBootstrap repositoryBootstrap = new RepositoryBootstrap(new FakeRepositoryModule());
TestingBootstrap testingBootstrap = new TestingBootstrap(new FakeTestingModule(),
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
index 37cb809..56ade88 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/BUILD
@@ -19,6 +19,7 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//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/cpp",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
new file mode 100644
index 0000000..90c399b
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.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.java;
+
+import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingInfoApi;
+import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCcLinkParamsProviderApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.EvalException;
+
+/** Fake implementation of {@link JavaCcLinkParamsProvider}. */
+public class FakeJavaCcLinkParamsProvider implements JavaCcLinkParamsProviderApi<CcLinkingInfoApi> {
+
+ @Override
+ public CcLinkingInfoApi getCcLinkingInfo() {
+ return null;
+ }
+
+ /** Fake implementation of {@link JavaCcLinkParamsProvider#Provider}. */
+ public static class Provider implements JavaCcLinkParamsProviderApi.Provider<CcLinkingInfoApi> {
+
+ @Override
+ public FakeJavaCcLinkParamsProvider createInfo(CcLinkingInfoApi ccLinkingInfoApi)
+ throws EvalException {
+ return new FakeJavaCcLinkParamsProvider();
+ }
+
+ @Override
+ public void repr(SkylarkPrinter printer) {}
+ }
+}