Introduce proto-related Google-only interface methods to the Starlark build API
The new interface methods have no Bazel implementation, and are completely unrecognized when --experimental_google_legacy_api is false (the current default). They are introduced as stub methods in Bazel to make different build-API-aware binaries interface-consistent.
RELNOTES: None.
PiperOrigin-RevId: 256378114
diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD
index 7606312..e7641ed 100644
--- a/src/main/java/com/google/devtools/build/docgen/BUILD
+++ b/src/main/java/com/google/devtools/build/docgen/BUILD
@@ -23,8 +23,10 @@
"//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/lib/skylarkbuildapi/platform",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android",
@@ -33,6 +35,7 @@
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform",
+ "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/proto",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test",
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 f40b276..0c68293 100644
--- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
+++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
@@ -25,8 +25,11 @@
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.java.JavaBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.platform.PlatformBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.proto.ProtoBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.python.PyBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.repository.RepositoryBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.stubs.ProviderStub;
+import com.google.devtools.build.lib.skylarkbuildapi.stubs.SkylarkAspectStub;
import com.google.devtools.build.lib.skylarkbuildapi.test.TestingBootstrap;
import com.google.devtools.build.lib.syntax.MethodLibrary;
import com.google.devtools.build.lib.syntax.Runtime;
@@ -63,6 +66,8 @@
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaInfo.FakeJavaInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.java.FakeJavaProtoCommon;
import com.google.devtools.build.skydoc.fakebuildapi.platform.FakePlatformCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.proto.FakeProtoInfoApiProvider;
+import com.google.devtools.build.skydoc.fakebuildapi.proto.FakeProtoModule;
import com.google.devtools.build.skydoc.fakebuildapi.python.FakePyInfo.FakePyInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.python.FakePyRuntimeInfo.FakePyRuntimeInfoProvider;
import com.google.devtools.build.skydoc.fakebuildapi.repository.FakeRepositoryModule;
@@ -209,6 +214,12 @@
new FakeJavaProtoCommon(),
new FakeJavaCcLinkParamsProvider.Provider());
PlatformBootstrap platformBootstrap = new PlatformBootstrap(new FakePlatformCommon());
+ ProtoBootstrap protoBootstrap =
+ new ProtoBootstrap(
+ new FakeProtoInfoApiProvider(),
+ new FakeProtoModule(),
+ new SkylarkAspectStub(),
+ new ProviderStub());
PyBootstrap pyBootstrap =
new PyBootstrap(new FakePyInfoProvider(), new FakePyRuntimeInfoProvider());
RepositoryBootstrap repositoryBootstrap =
@@ -227,6 +238,7 @@
configBootstrap.addBindingsToBuilder(envBuilder);
javaBootstrap.addBindingsToBuilder(envBuilder);
platformBootstrap.addBindingsToBuilder(envBuilder);
+ protoBootstrap.addBindingsToBuilder(envBuilder);
pyBootstrap.addBindingsToBuilder(envBuilder);
repositoryBootstrap.addBindingsToBuilder(envBuilder);
testingBootstrap.addBindingsToBuilder(envBuilder);
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 0e53bf6..777dfc7 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -788,6 +788,7 @@
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/skyframe",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 1d5a322..46cb700 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -100,6 +100,8 @@
import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.proto.ProtoBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.python.PyBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.stubs.ProviderStub;
+import com.google.devtools.build.lib.skylarkbuildapi.stubs.SkylarkAspectStub;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.ResourceFileLoader;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -253,7 +255,11 @@
builder.addRuleDefinition(new ProtoLangToolchainRule());
ProtoBootstrap bootstrap =
- new ProtoBootstrap(ProtoInfo.PROVIDER, BazelProtoModule.INSTANCE);
+ new ProtoBootstrap(
+ ProtoInfo.PROVIDER,
+ BazelProtoModule.INSTANCE,
+ new SkylarkAspectStub(),
+ new ProviderStub());
builder.addSkylarkBootstrap(bootstrap);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD
index 982ca13..e08aab5 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD
@@ -22,6 +22,7 @@
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository:srcs",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto:srcs",
],
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/BUILD
index d379c34..3dd12eb 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/BUILD
@@ -19,7 +19,10 @@
name = "proto",
srcs = glob(["*.java"]),
deps = [
+ "//src/main/java/com/google/devtools/build/lib:skylark_semantics",
"//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",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoBootstrap.java
index 7a0d150..40e06b4 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoBootstrap.java
@@ -17,6 +17,10 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.skylarkbuildapi.Bootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.ProtoInfoApi;
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.SkylarkAspectApi;
+import com.google.devtools.build.lib.syntax.FlagGuardedValue;
+import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
/** A {@link Bootstrap} for Starlark objects related to protocol buffers. */
public class ProtoBootstrap implements Bootstrap {
@@ -29,15 +33,31 @@
private final ProtoInfoApi.Provider protoInfoApiProvider;
private final Object protoModule;
+ private final SkylarkAspectApi protoRegistryAspect;
+ private final ProviderApi protoRegistryProvider;
- public ProtoBootstrap(ProtoInfoApi.Provider protoInfoApiProvider, Object protoModule) {
+ public ProtoBootstrap(
+ ProtoInfoApi.Provider protoInfoApiProvider,
+ Object protoModule,
+ SkylarkAspectApi protoRegistryAspect,
+ ProviderApi protoRegistryProvider) {
this.protoInfoApiProvider = protoInfoApiProvider;
this.protoModule = protoModule;
+ this.protoRegistryAspect = protoRegistryAspect;
+ this.protoRegistryProvider = protoRegistryProvider;
}
@Override
public void addBindingsToBuilder(ImmutableMap.Builder<String, Object> builder) {
builder.put(PROTO_INFO_STARLARK_NAME, protoInfoApiProvider);
builder.put(PROTO_MODULE_NAME, protoModule);
+ builder.put(
+ "ProtoRegistryAspect",
+ FlagGuardedValue.onlyWhenExperimentalFlagIsTrue(
+ FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API, protoRegistryAspect));
+ builder.put(
+ "ProtoRegistryProvider",
+ FlagGuardedValue.onlyWhenExperimentalFlagIsTrue(
+ FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API, protoRegistryProvider));
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoRegistryProviderApi.java
new file mode 100644
index 0000000..24b0533
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoRegistryProviderApi.java
@@ -0,0 +1,45 @@
+// 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.lib.skylarkbuildapi.proto;
+
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.SkylarkList;
+
+/** Provides information about flavors for all built protos. */
+@SkylarkModule(
+ name = "ProtoRegistryProvider",
+ doc = "Information about flavors for all built protos.",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface ProtoRegistryProviderApi<FileT extends FileApi> extends StructApi {
+
+ @SkylarkCallable(name = "jars", documented = false, doc = "", structField = true)
+ NestedSet<FileT> getJars();
+
+ @SkylarkCallable(name = "flavors", documented = false, doc = "", structField = true)
+ SkylarkList<String> getFlavors();
+
+ @SkylarkCallable(
+ name = "errorMessage",
+ documented = false,
+ doc = "",
+ structField = true,
+ allowReturnNones = true)
+ String getError();
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/BUILD
new file mode 100644
index 0000000..e34cb33
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/BUILD
@@ -0,0 +1,24 @@
+# Description:
+# This package contains stubs for the starlark "build API".
+# Ultimately, this package may be broken out of the Bazel package hierarchy to be standalone.
+# Thus, this package should not depend on Bazel-specific packages (only
+# those which contain pure-Skylark concepts, such as the interpreter or
+# annotation interfaces).
+
+package(default_visibility = ["//src:__subpackages__"])
+
+licenses(["notice"]) # Apache 2.0
+
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+)
+
+java_library(
+ name = "stubs",
+ srcs = glob(["*.java"]),
+ deps = [
+ "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+ ],
+)
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/ProviderStub.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/ProviderStub.java
new file mode 100644
index 0000000..356ceac
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/ProviderStub.java
@@ -0,0 +1,30 @@
+// 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.lib.skylarkbuildapi.stubs;
+
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+
+/**
+ * Stub implementation of {@link ProviderApi}. Should only be used for experimental, unimplemented
+ * code paths.
+ */
+public final class ProviderStub implements ProviderApi {
+
+ @Override
+ public void repr(SkylarkPrinter printer) {
+ printer.append("<unimplemented provider>");
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/SkylarkAspectStub.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/SkylarkAspectStub.java
new file mode 100644
index 0000000..7a7ec26
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs/SkylarkAspectStub.java
@@ -0,0 +1,29 @@
+// 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.lib.skylarkbuildapi.stubs;
+
+import com.google.devtools.build.lib.skylarkbuildapi.SkylarkAspectApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+
+/**
+ * Stub implementation of {@link SkylarkAspectApi}. Should only be used for experimental,
+ * unimplemented code paths.
+ */
+public final class SkylarkAspectStub implements SkylarkAspectApi {
+ @Override
+ public void repr(SkylarkPrinter printer) {
+ printer.append("<unimplemented aspect>");
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/BUILD b/src/main/java/com/google/devtools/build/skydoc/BUILD
index 541a111..d749634 100644
--- a/src/main/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/BUILD
@@ -71,6 +71,7 @@
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/stubs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
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 ea8f47b..b1ac195 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -52,6 +52,8 @@
import com.google.devtools.build.lib.skylarkbuildapi.proto.ProtoBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.python.PyBootstrap;
import com.google.devtools.build.lib.skylarkbuildapi.repository.RepositoryBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.stubs.ProviderStub;
+import com.google.devtools.build.lib.skylarkbuildapi.stubs.SkylarkAspectStub;
import com.google.devtools.build.lib.skylarkbuildapi.test.TestingBootstrap;
import com.google.devtools.build.lib.syntax.BaseFunction;
import com.google.devtools.build.lib.syntax.BuildFileAST;
@@ -548,7 +550,11 @@
new FakeJavaCcLinkParamsProvider.Provider());
PlatformBootstrap platformBootstrap = new PlatformBootstrap(new FakePlatformCommon());
ProtoBootstrap protoBootstrap =
- new ProtoBootstrap(new FakeProtoInfoApiProvider(), new FakeProtoModule());
+ new ProtoBootstrap(
+ new FakeProtoInfoApiProvider(),
+ new FakeProtoModule(),
+ new SkylarkAspectStub(),
+ new ProviderStub());
PyBootstrap pyBootstrap =
new PyBootstrap(new FakePyInfoProvider(), new FakePyRuntimeInfoProvider());
RepositoryBootstrap repositoryBootstrap =
@@ -599,7 +605,6 @@
ProguardMappingProviderApi.NAME,
GeneratedExtensionRegistryProviderApi.NAME,
AndroidBinaryDataInfoApi.NAME,
- "ProtoRegistryAspect",
"JspbInfo",
};