Split the JSON rules out of the main BUILD file and removed obsolete forwarding headers

PiperOrigin-RevId: 541016462
diff --git a/BUILD b/BUILD
index 045f187..549ef0b 100644
--- a/BUILD
+++ b/BUILD
@@ -743,29 +743,10 @@
     ],
 )
 
-# TODO(b/232091617): Once we can delete the deprecated forwarding headers
-# (= everything in upb/) we can move this build target down into json/
-cc_library(
+alias(
     name = "json",
-    srcs = [
-        "upb/json/decode.c",
-        "upb/json/encode.c",
-    ],
-    hdrs = [
-        "upb/json/decode.h",
-        "upb/json/encode.h",
-        "upb/json_decode.h",
-        "upb/json_encode.h",
-    ],
-    copts = UPB_DEFAULT_COPTS,
+    actual = "//upb/json",
     visibility = ["//visibility:public"],
-    deps = [
-        ":collections",
-        ":lex",
-        ":port",
-        ":reflection",
-        ":upb",
-    ],
 )
 
 # Tests ########################################################################
@@ -790,53 +771,6 @@
     ],
 )
 
-proto_library(
-    name = "json_test_proto",
-    testonly = 1,
-    srcs = ["upb/json/test.proto"],
-    deps = ["@com_google_protobuf//:struct_proto"],
-)
-
-upb_proto_library(
-    name = "json_test_upb_proto",
-    testonly = 1,
-    deps = [":json_test_proto"],
-)
-
-upb_proto_reflection_library(
-    name = "json_test_upb_proto_reflection",
-    testonly = 1,
-    deps = [":json_test_proto"],
-)
-
-cc_test(
-    name = "json_decode_test",
-    srcs = ["upb/json/decode_test.cc"],
-    deps = [
-        ":json",
-        ":json_test_upb_proto",
-        ":json_test_upb_proto_reflection",
-        ":reflection",
-        ":struct_upb_proto",
-        ":upb",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
-cc_test(
-    name = "json_encode_test",
-    srcs = ["upb/json/encode_test.cc"],
-    deps = [
-        ":json",
-        ":json_test_upb_proto",
-        ":json_test_upb_proto_reflection",
-        ":reflection",
-        ":struct_upb_proto",
-        ":upb",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
 cc_test(
     name = "collections_test",
     srcs = ["upb/collections/test.cc"],
@@ -856,6 +790,7 @@
         ":message_test_upb_proto_reflection",
         ":reflection",
         ":upb",
+        "//upb/json",
         "//upb/test:fuzz_util",
         "//upb/test:test_messages_proto3_upb_proto",
         "@com_google_googletest//:gtest_main",
@@ -881,11 +816,6 @@
     deps = [":message_test_proto"],
 )
 
-upb_proto_library(
-    name = "struct_upb_proto",
-    deps = ["@com_google_protobuf//:struct_proto"],
-)
-
 cc_test(
     name = "atoi_test",
     srcs = ["upb/lex/atoi_test.cc"],
diff --git a/cmake/make_cmakelists.py b/cmake/make_cmakelists.py
index b925913..7b2851f 100755
--- a/cmake/make_cmakelists.py
+++ b/cmake/make_cmakelists.py
@@ -227,6 +227,9 @@
   def bootstrap_cc_library(self, **kwargs):
     pass
 
+  def alias(self, **kwargs):
+    pass
+
 
 class WorkspaceFileFunctions(object):
   def __init__(self, converter):
diff --git a/upb/conformance/BUILD b/upb/conformance/BUILD
index 3420557..74b2fc0 100644
--- a/upb/conformance/BUILD
+++ b/upb/conformance/BUILD
@@ -92,6 +92,7 @@
         "//:reflection",
         "//:textformat",
         "//:wire",
+        "//upb/json",
     ],
 )
 
@@ -141,6 +142,7 @@
         "//:reflection",
         "//:textformat",
         "//:wire",
+        "//upb/json",
     ],
 )
 
diff --git a/upb/json/BUILD b/upb/json/BUILD
new file mode 100644
index 0000000..facb3aa
--- /dev/null
+++ b/upb/json/BUILD
@@ -0,0 +1,84 @@
+# TODO(haberman): describe this package.
+
+load(
+    "//bazel:build_defs.bzl",
+    "UPB_DEFAULT_COPTS",
+)
+load(
+    "//bazel:upb_proto_library.bzl",
+    "upb_proto_library",
+    "upb_proto_reflection_library",
+)
+
+cc_library(
+    name = "json",
+    srcs = [
+        "decode.c",
+        "encode.c",
+    ],
+    hdrs = [
+        "decode.h",
+        "encode.h",
+    ],
+    copts = UPB_DEFAULT_COPTS,
+    visibility = ["//visibility:public"],
+    deps = [
+        "//:collections",
+        "//:lex",
+        "//:port",
+        "//:reflection",
+        "//:upb",
+    ],
+)
+
+cc_test(
+    name = "encode_test",
+    srcs = ["encode_test.cc"],
+    deps = [
+        ":json",
+        ":json_test_upb_proto",
+        ":json_test_upb_proto_reflection",
+        ":struct_upb_proto",
+        "//:reflection",
+        "//:upb",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+proto_library(
+    name = "json_test_proto",
+    testonly = 1,
+    srcs = ["test.proto"],
+    deps = ["@com_google_protobuf//:struct_proto"],
+)
+
+upb_proto_library(
+    name = "json_test_upb_proto",
+    testonly = 1,
+    deps = [":json_test_proto"],
+)
+
+upb_proto_reflection_library(
+    name = "json_test_upb_proto_reflection",
+    testonly = 1,
+    deps = [":json_test_proto"],
+)
+
+cc_test(
+    name = "json_decode_test",
+    srcs = ["decode_test.cc"],
+    deps = [
+        ":json",
+        ":json_test_upb_proto",
+        ":json_test_upb_proto_reflection",
+        ":struct_upb_proto",
+        "//:reflection",
+        "//:upb",
+        "@com_google_googletest//:gtest_main",
+    ],
+)
+
+upb_proto_library(
+    name = "struct_upb_proto",
+    deps = ["@com_google_protobuf//:struct_proto"],
+)
diff --git a/upb/json_decode.h b/upb/json_decode.h
deleted file mode 100644
index 816bf01..0000000
--- a/upb/json_decode.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2009-2021, Google LLC
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Google LLC nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// This header is deprecated, use upb/json/decode.h instead
-// IWYU pragma: private, include "upb/json/decode.h"
-
-#ifndef UPB_JSONDECODE_H_
-#define UPB_JSONDECODE_H_
-
-#include "upb/json/decode.h"
-
-#endif /* UPB_JSONDECODE_H_ */
diff --git a/upb/json_encode.h b/upb/json_encode.h
deleted file mode 100644
index 8189956..0000000
--- a/upb/json_encode.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2009-2021, Google LLC
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Google LLC nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// This header is deprecated, use upb/json/encode.h instead
-// IWYU pragma: private, include "upb/json/encode.h"
-
-#ifndef UPB_JSONENCODE_H_
-#define UPB_JSONENCODE_H_
-
-#include "upb/json/encode.h"
-
-#endif /* UPB_JSONENCODE_H_ */
diff --git a/upb/test/BUILD b/upb/test/BUILD
index 6fbf7bf..9d8b658 100644
--- a/upb/test/BUILD
+++ b/upb/test/BUILD
@@ -169,6 +169,7 @@
         "//:json",
         "//:port",
         "//:reflection",
+        "//upb/json",
         "@com_google_googletest//:gtest_main",
     ],
 )
diff --git a/upb/util/required_fields_test.cc b/upb/util/required_fields_test.cc
index 7d44ef7..a7b4998 100644
--- a/upb/util/required_fields_test.cc
+++ b/upb/util/required_fields_test.cc
@@ -30,7 +30,7 @@
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
 #include "absl/strings/string_view.h"
-#include "upb/json_decode.h"
+#include "upb/json/decode.h"
 #include "upb/reflection/def.hpp"
 #include "upb/upb.hpp"
 #include "upb/util/required_fields_test.upb.h"
diff --git a/upbc/BUILD b/upbc/BUILD
index ef348b5..4283699 100644
--- a/upbc/BUILD
+++ b/upbc/BUILD
@@ -228,6 +228,7 @@
         "//:mini_table",
         "//:port",
         "//:reflection",
+        "//upb/json",
     ],
 )