Automated rollback of commit d5eeb04d1ca6814ed7e7e5bd61398a6eee77299e.

*** Reason for rollback ***

Starlarkification of proto_library is making progress faster than its toolchainization effort. As such adding JavaToolchainInfo directly to the Starlark implementation will be much easier than adding a native support for it (it's 2 lines of code vs. this PR).

*** Original change description ***

Expose ProtoToolchainInfo to Starlark

Progress on https://docs.google.com/document/d/1go3UMwm2nM8JHhI3MZrtyoFEy3BYg5omGqQmOwcjmNE/edit

Closes #13732.

PiperOrigin-RevId: 410076628
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 9dfe2e7..5c90429 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
@@ -111,7 +111,6 @@
 import com.google.devtools.build.lib.rules.proto.ProtoConfiguration;
 import com.google.devtools.build.lib.rules.proto.ProtoInfo;
 import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainRule;
-import com.google.devtools.build.lib.rules.proto.ProtoToolchainInfo;
 import com.google.devtools.build.lib.rules.python.PyInfo;
 import com.google.devtools.build.lib.rules.python.PyRuleClasses.PySymlink;
 import com.google.devtools.build.lib.rules.python.PyRuntimeInfo;
@@ -293,7 +292,6 @@
           ProtoBootstrap bootstrap =
               new ProtoBootstrap(
                   ProtoInfo.PROVIDER,
-                  ProtoToolchainInfo.PROVIDER,
                   BazelProtoCommon.INSTANCE,
                   new StarlarkAspectStub(),
                   new ProviderStub());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoToolchainInfo.java
index cb7a8c5..45c3e07 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoToolchainInfo.java
@@ -21,15 +21,12 @@
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
-import com.google.devtools.build.lib.starlarkbuildapi.proto.ProtoToolchainInfoApi;
+import com.google.devtools.build.lib.starlarkbuildapi.proto.ProtoBootstrap;
 import javax.annotation.Nullable;
-import net.starlark.java.eval.EvalException;
-import net.starlark.java.eval.Sequence;
 
 /** Toolchain for {@code proto_*} rules. */
 @AutoValue
-public abstract class ProtoToolchainInfo extends NativeInfo
-    implements ProtoToolchainInfoApi<FilesToRunProvider> {
+public abstract class ProtoToolchainInfo extends NativeInfo {
   public static final ProtoToolchainInfoProvider PROVIDER = new ProtoToolchainInfoProvider();
 
   /** Creates a {@link ProtoToolchainInfo} from a {@link RuleContext}. */
@@ -47,36 +44,17 @@
       return null;
     }
 
-    return create(compiler, protoConfiguration.protocOpts());
+    return new AutoValue_ProtoToolchainInfo(PROVIDER, compiler, protoConfiguration.protocOpts());
   }
 
-  private static final ProtoToolchainInfo create(
-      FilesToRunProvider compiler, ImmutableList<String> compilerOptions) {
-    Preconditions.checkNotNull(compiler);
-    Preconditions.checkNotNull(compilerOptions);
-
-    return new AutoValue_ProtoToolchainInfo(PROVIDER, compiler, compilerOptions);
-  }
-
-  @Override
   public abstract FilesToRunProvider getCompiler();
 
-  @Override
   public abstract ImmutableList<String> getCompilerOptions();
 
   /** Provider class for {@link ProtoToolchainInfo} objects. */
-  public static class ProtoToolchainInfoProvider extends BuiltinProvider<ProtoToolchainInfo>
-      implements ProtoToolchainInfoApi.Provider<FilesToRunProvider> {
+  public static class ProtoToolchainInfoProvider extends BuiltinProvider<ProtoToolchainInfo> {
     public ProtoToolchainInfoProvider() {
-      super(ProtoToolchainInfoApi.NAME, ProtoToolchainInfo.class);
-    }
-
-    @Override
-    public ProtoToolchainInfoApi<FilesToRunProvider> create(
-        FilesToRunProvider protoc, Sequence<?> protocOptions) throws EvalException {
-      return ProtoToolchainInfo.create(
-          protoc,
-          Sequence.cast(protocOptions, String.class, "compiler_options").getImmutableList());
+      super(ProtoBootstrap.PROTO_TOOLCHAIN_INFO_STARLARK_NAME, ProtoToolchainInfo.class);
     }
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
index fca7d5a..0a2eb50 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoBootstrap.java
@@ -16,8 +16,6 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.ProtoInfoApi.ProtoInfoProviderApi;
 import com.google.devtools.build.lib.starlarkbuildapi.StarlarkAspectApi;
 import com.google.devtools.build.lib.starlarkbuildapi.core.Bootstrap;
@@ -30,25 +28,23 @@
   /** The name of the proto info provider in Starlark. */
   public static final String PROTO_INFO_STARLARK_NAME = "ProtoInfo";
 
+  /** The name of the proto toolchain info provider in Starlark. */
+  public static final String PROTO_TOOLCHAIN_INFO_STARLARK_NAME = "ProtoToolchainInfo";
+
   /** The name of the proto namespace in Starlark. */
   public static final String PROTO_COMMON_NAME = "proto_common";
 
   private final ProtoInfoProviderApi protoInfoApiProvider;
-  private final ProtoToolchainInfoApi.Provider<? extends FilesToRunProviderApi<? extends FileApi>>
-      protoToolchainInfoApi;
   private final Object protoCommon;
   private final StarlarkAspectApi protoRegistryAspect;
   private final ProviderApi protoRegistryProvider;
 
   public ProtoBootstrap(
       ProtoInfoProviderApi protoInfoApiProvider,
-      ProtoToolchainInfoApi.Provider<? extends FilesToRunProviderApi<? extends FileApi>>
-          protoToolchainInfoApi,
       Object protoCommon,
       StarlarkAspectApi protoRegistryAspect,
       ProviderApi protoRegistryProvider) {
     this.protoInfoApiProvider = protoInfoApiProvider;
-    this.protoToolchainInfoApi = protoToolchainInfoApi;
     this.protoCommon = protoCommon;
     this.protoRegistryAspect = protoRegistryAspect;
     this.protoRegistryProvider = protoRegistryProvider;
@@ -57,7 +53,6 @@
   @Override
   public void addBindingsToBuilder(ImmutableMap.Builder<String, Object> builder) {
     builder.put(PROTO_INFO_STARLARK_NAME, protoInfoApiProvider);
-    builder.put(ProtoToolchainInfoApi.NAME, protoToolchainInfoApi);
     builder.put(PROTO_COMMON_NAME, protoCommon);
     builder.put(
         "ProtoRegistryAspect",
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoToolchainInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoToolchainInfoApi.java
deleted file mode 100644
index 8a40346..0000000
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/proto/ProtoToolchainInfoApi.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2021 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.starlarkbuildapi.proto;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.docgen.annot.DocCategory;
-import com.google.devtools.build.docgen.annot.StarlarkConstructor;
-import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.starlarkbuildapi.FilesToRunProviderApi;
-import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.ParamType;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkMethod;
-import net.starlark.java.eval.EvalException;
-import net.starlark.java.eval.Sequence;
-
-/** Information about the {@code proto} toolchain. */
-@StarlarkBuiltin(
-    name = ProtoToolchainInfoApi.NAME,
-    category = DocCategory.PROVIDER,
-    doc = "Information about the `proto` toolchain.")
-public interface ProtoToolchainInfoApi<
-        FilesToRunProviderApiT extends FilesToRunProviderApi<? extends FileApi>>
-    extends StructApi {
-  /** The name of the provider in Starlark. */
-  String NAME = "ProtoToolchainInfo";
-
-  @StarlarkMethod(name = "compiler", doc = "The proto compiler to use.", structField = true)
-  FilesToRunProviderApiT getCompiler();
-
-  @StarlarkMethod(
-      name = "compiler_options",
-      doc = "Additional options to pass to `protoc`.",
-      structField = true)
-  ImmutableList<String> getCompilerOptions();
-
-  /** The provider implementing this can construct {@code ProtoToolchainInfo} objects. */
-  @StarlarkBuiltin(
-      name = "Provider",
-      doc = "",
-      // This object is documented via the ProtoToolchainInfo documentation and the docuemntation of
-      // its
-      // callable function.
-      documented = false)
-  interface Provider<FilesToRunProviderApiT extends FilesToRunProviderApi<? extends FileApi>>
-      extends ProviderApi {
-    @StarlarkMethod(
-        name = NAME,
-        doc = "The `ProtoToolchainInfo` constructor.",
-        parameters = {
-          @Param(
-              name = "compiler",
-              doc = "The proto compiler.",
-              positional = false,
-              named = true,
-              allowedTypes = {@ParamType(type = FilesToRunProviderApi.class)}),
-          @Param(
-              name = "compiler_options",
-              doc = "The proto compiler.",
-              positional = false,
-              named = true,
-              defaultValue = "[]",
-              allowedTypes = {@ParamType(type = Sequence.class, generic1 = String.class)})
-        },
-        selfCall = true)
-    @StarlarkConstructor
-    ProtoToolchainInfoApi<FilesToRunProviderApiT> create(
-        FilesToRunProviderApiT protoc, Sequence<?> protocOptions) throws EvalException;
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD b/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD
index a3adb78..b04dae1 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD
@@ -94,18 +94,3 @@
         "//third_party:truth",
     ],
 )
-
-java_test(
-    name = "ProtoToolchainInfoTest",
-    srcs = [
-        "ProtoToolchainInfoTest.java",
-    ],
-    deps = [
-        "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
-        "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
-        "//src/main/java/com/google/devtools/build/lib/rules/proto",
-        "//src/test/java/com/google/devtools/build/lib/analysis/util",
-        "//third_party:junit4",
-        "//third_party:truth",
-    ],
-)
diff --git a/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoToolchainInfoTest.java b/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoToolchainInfoTest.java
deleted file mode 100644
index db30a5b..0000000
--- a/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoToolchainInfoTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2021 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.rules.proto;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.FilesToRunProvider;
-import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Unit tests for {@code ProtoToolchainInfo}. */
-@RunWith(JUnit4.class)
-public class ProtoToolchainInfoTest extends BuildViewTestCase {
-  @Before
-  public void setUp() throws Exception {
-    scratch.file(
-        "proto/toolchain.bzl",
-        "def _impl(ctx):",
-        "  return ProtoToolchainInfo(",
-        "      compiler = ctx.attr.compiler.files_to_run,",
-        "      compiler_options = ctx.attr.compiler_options,",
-        "  )",
-        "proto_toolchain = rule(",
-        "  implementation = _impl,",
-        "  attrs = {",
-        "    'compiler': attr.label(executable=True, cfg='exec'),",
-        "    'compiler_options': attr.string_list(),",
-        "  },",
-        ")");
-    scratch.file(
-        "proto/BUILD",
-        "load(':toolchain.bzl', 'proto_toolchain')",
-        "cc_binary(",
-        "  name = 'compiler',",
-        ")");
-  }
-
-  @Test
-  public void testStarlarkApi() throws Exception {
-    scratch.file(
-        "foo/BUILD",
-        "load('//proto:toolchain.bzl', 'proto_toolchain')",
-        "proto_toolchain(",
-        "  name = 'toolchain',",
-        "  compiler = '//proto:compiler',",
-        ")");
-
-    ConfiguredTarget target = getConfiguredTarget("//foo:toolchain");
-    ProtoToolchainInfo protoToolchain = target.get(ProtoToolchainInfo.PROVIDER);
-    FilesToRunProvider compiler = protoToolchain.getCompiler();
-    assertThat(compiler.getExecutable().getOwner().toString()).isEqualTo("//proto:compiler");
-    assertThat(protoToolchain.getCompilerOptions()).isEmpty();
-  }
-
-  @Test
-  public void testStarlarkApi_withCompilerOptions() throws Exception {
-    scratch.file(
-        "foo/BUILD",
-        "load('//proto:toolchain.bzl', 'proto_toolchain')",
-        "proto_toolchain(",
-        "  name = 'toolchain',",
-        "  compiler = '//proto:compiler',",
-        "  compiler_options = ['--foo', '--bar'],",
-        ")");
-
-    ConfiguredTarget target = getConfiguredTarget("//foo:toolchain");
-    ProtoToolchainInfo protoToolchain = target.get(ProtoToolchainInfo.PROVIDER);
-    FilesToRunProvider compiler = protoToolchain.getCompiler();
-    assertThat(compiler.getExecutable().getOwner().toString()).isEqualTo("//proto:compiler");
-    assertThat(protoToolchain.getCompilerOptions()).containsExactly("--foo", "--bar").inOrder();
-  }
-}