Fix name in proto_lang_toolchain rule

Added a wrapper for proto_lang_toolchain in order to have two implementations - one with public proto_compiler attribute, and the other one with the private one.
Restructured proto_lang_toolchain rules' implementation - merged two rule's definitions into one.

PiperOrigin-RevId: 447016335
diff --git a/src/main/starlark/builtins_bzl/common/exports.bzl b/src/main/starlark/builtins_bzl/common/exports.bzl
index ad07ebe..54fcfc2 100755
--- a/src/main/starlark/builtins_bzl/common/exports.bzl
+++ b/src/main/starlark/builtins_bzl/common/exports.bzl
@@ -25,7 +25,7 @@
 load("@_builtins//:common/objc/linking_support.bzl", "linking_support")
 load("@_builtins//:common/proto/proto_common.bzl", "proto_common_do_not_use")
 load("@_builtins//:common/proto/proto_library.bzl", "proto_library")
-load("@_builtins//:common/proto/proto_lang_toolchain.bzl", "proto_lang_toolchain")
+load("@_builtins//:common/proto/proto_lang_toolchain_wrapper.bzl", "proto_lang_toolchain")
 load("@_builtins//:common/java/proto/java_lite_proto_library.bzl", "java_lite_proto_library")
 load("@_builtins//:common/cc/cc_library.bzl", "cc_library")
 
diff --git a/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain.bzl b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain.bzl
index 18f8178..d5b25fa 100644
--- a/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain.bzl
+++ b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain.bzl
@@ -16,7 +16,6 @@
 
 load(":common/proto/proto_common.bzl", "ProtoLangToolchainInfo")
 load(":common/proto/proto_semantics.bzl", "semantics")
-load(":common/rule_util.bzl", "merge_attrs")
 
 ProtoInfo = _builtins.toplevel.ProtoInfo
 proto_common = _builtins.toplevel.proto_common
@@ -54,65 +53,38 @@
         ),
     ]
 
-proto_lang_toolchain_attrs = {
-    "progress_message": attr.string(default = "Generating proto_library %{label}"),
-    "mnemonic": attr.string(default = "GenProto"),
-    "command_line": attr.string(mandatory = True),
-    "plugin_format_flag": attr.string(),
-    "plugin": attr.label(
-        executable = True,
-        cfg = "exec",
-    ),
-    "runtime": attr.label(),
-    "blacklisted_protos": attr.label_list(
-        providers = [ProtoInfo],
-    ),
-}
-
-proto_lang_toolchain_custom_protoc = rule(
-    implementation = _rule_impl,
-    attrs = merge_attrs(
-        proto_lang_toolchain_attrs,
-        {
-            "proto_compiler": attr.label(
-                cfg = "exec",
-                executable = True,
-            ),
-        },
-    ),
-    provides = [ProtoLangToolchainInfo],
-    fragments = ["proto"] + semantics.EXTRA_FRAGMENTS,
-)
-
-proto_lang_toolchain_default_protoc = rule(
-    implementation = _rule_impl,
-    attrs = merge_attrs(
-        proto_lang_toolchain_attrs,
-        {
-            "_proto_compiler": attr.label(
-                cfg = "exec",
-                executable = True,
-                allow_files = True,
-                default = configuration_field("proto", "proto_compiler"),
-            ),
-        },
-    ),
-    provides = [ProtoLangToolchainInfo],
-    fragments = ["proto"] + semantics.EXTRA_FRAGMENTS,
-)
-
-def proto_lang_toolchain(
-        name = None,
-        proto_compiler = None,
-        **kwargs):
-    if proto_compiler != None:
-        proto_lang_toolchain_custom_protoc(
-            name = name,
-            proto_compiler = proto_compiler,
-            **kwargs
-        )
-    else:
-        proto_lang_toolchain_default_protoc(
-            name = name,
-            **kwargs
-        )
+def make_proto_lang_toolchain(custom_proto_compiler):
+    return rule(
+        _rule_impl,
+        attrs = dict(
+            {
+                "progress_message": attr.string(default = "Generating proto_library %{label}"),
+                "mnemonic": attr.string(default = "GenProto"),
+                "command_line": attr.string(mandatory = True),
+                "plugin_format_flag": attr.string(),
+                "plugin": attr.label(
+                    executable = True,
+                    cfg = "exec",
+                ),
+                "runtime": attr.label(),
+                "blacklisted_protos": attr.label_list(
+                    providers = [ProtoInfo],
+                ),
+            },
+            **({
+                "proto_compiler": attr.label(
+                    cfg = "exec",
+                    executable = True,
+                ),
+            } if custom_proto_compiler else {
+                "_proto_compiler": attr.label(
+                    cfg = "exec",
+                    executable = True,
+                    allow_files = True,
+                    default = configuration_field("proto", "proto_compiler"),
+                ),
+            })
+        ),
+        provides = [ProtoLangToolchainInfo],
+        fragments = ["proto"] + semantics.EXTRA_FRAGMENTS,
+    )
diff --git a/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_custom_protoc.bzl b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_custom_protoc.bzl
new file mode 100644
index 0000000..b4157f6
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_custom_protoc.bzl
@@ -0,0 +1,23 @@
+# 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.
+
+"""Defines a proto_lang_toolchain rule class with custom proto compiler.
+
+There are two physical rule classes for proto_lang_toolchain and we want both of them
+to have a name string of "proto_lang_toolchain".
+"""
+
+load(":common/proto/proto_lang_toolchain.bzl", "make_proto_lang_toolchain")
+
+proto_lang_toolchain = make_proto_lang_toolchain(custom_proto_compiler = True)
diff --git a/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_default_protoc.bzl b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_default_protoc.bzl
new file mode 100644
index 0000000..7345bc3
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_default_protoc.bzl
@@ -0,0 +1,23 @@
+# 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.
+
+"""Defines a proto_lang_toolchain rule class with default proto compiler.
+
+There are two physical rule classes for proto_lang_toolchain and we want both of them
+to have a name string of "proto_lang_toolchain".
+"""
+
+load(":common/proto/proto_lang_toolchain.bzl", "make_proto_lang_toolchain")
+
+proto_lang_toolchain = make_proto_lang_toolchain(custom_proto_compiler = False)
diff --git a/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_wrapper.bzl b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_wrapper.bzl
new file mode 100644
index 0000000..075e6d7
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/proto/proto_lang_toolchain_wrapper.bzl
@@ -0,0 +1,35 @@
+# 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.
+
+"""Macro encapsulating the proto_lang_toolchain implementation.
+
+This is needed since proto compiler can be defined, or used as a default one.
+There are two implementations of proto_lang_toolchain - one with public proto_compiler attribute, and the other one with private compiler.
+"""
+
+load(":common/proto/proto_lang_toolchain_default_protoc.bzl", toolchain_default_protoc = "proto_lang_toolchain")
+load(":common/proto/proto_lang_toolchain_custom_protoc.bzl", toolchain_custom_protoc = "proto_lang_toolchain")
+
+def proto_lang_toolchain(
+        proto_compiler = None,
+        **kwargs):
+    if proto_compiler != None:
+        toolchain_custom_protoc(
+            proto_compiler = proto_compiler,
+            **kwargs
+        )
+    else:
+        toolchain_default_protoc(
+            **kwargs
+        )