xref: /aosp_15_r20/external/protobuf/java/core/BUILD.bazel (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1load("@bazel_skylib//rules:build_test.bzl", "build_test")
2load("@rules_java//java:defs.bzl", "java_library", "java_lite_proto_library", "java_proto_library")
3load("@rules_jvm_external//:defs.bzl", "java_export")
4load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
5load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
6load("//conformance:defs.bzl", "conformance_test")
7load("//:protobuf.bzl", "internal_gen_well_known_protos_java")
8load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
9load("//java/internal:testing.bzl", "junit_tests")
10
11LITE_SRCS = [
12    # Keep in sync with `//java/lite:pom.xml`.
13    "src/main/java/com/google/protobuf/AbstractMessageLite.java",
14    "src/main/java/com/google/protobuf/AbstractParser.java",
15    "src/main/java/com/google/protobuf/AbstractProtobufList.java",
16    "src/main/java/com/google/protobuf/AllocatedBuffer.java",
17    "src/main/java/com/google/protobuf/Android.java",
18    "src/main/java/com/google/protobuf/ArrayDecoders.java",
19    "src/main/java/com/google/protobuf/BinaryReader.java",
20    "src/main/java/com/google/protobuf/BinaryWriter.java",
21    "src/main/java/com/google/protobuf/BooleanArrayList.java",
22    "src/main/java/com/google/protobuf/BufferAllocator.java",
23    "src/main/java/com/google/protobuf/ByteBufferWriter.java",
24    "src/main/java/com/google/protobuf/ByteOutput.java",
25    "src/main/java/com/google/protobuf/ByteString.java",
26    "src/main/java/com/google/protobuf/CanIgnoreReturnValue.java",
27    "src/main/java/com/google/protobuf/CheckReturnValue.java",
28    "src/main/java/com/google/protobuf/CodedInputStream.java",
29    "src/main/java/com/google/protobuf/CodedInputStreamReader.java",
30    "src/main/java/com/google/protobuf/CodedOutputStream.java",
31    "src/main/java/com/google/protobuf/CodedOutputStreamWriter.java",
32    "src/main/java/com/google/protobuf/CompileTimeConstant.java",
33    "src/main/java/com/google/protobuf/DoubleArrayList.java",
34    "src/main/java/com/google/protobuf/ExperimentalApi.java",
35    "src/main/java/com/google/protobuf/ExtensionLite.java",
36    "src/main/java/com/google/protobuf/ExtensionRegistryFactory.java",
37    "src/main/java/com/google/protobuf/ExtensionRegistryLite.java",
38    "src/main/java/com/google/protobuf/ExtensionSchema.java",
39    "src/main/java/com/google/protobuf/ExtensionSchemaLite.java",
40    "src/main/java/com/google/protobuf/ExtensionSchemas.java",
41    "src/main/java/com/google/protobuf/FieldInfo.java",
42    "src/main/java/com/google/protobuf/FieldSet.java",
43    "src/main/java/com/google/protobuf/FieldType.java",
44    "src/main/java/com/google/protobuf/FloatArrayList.java",
45    "src/main/java/com/google/protobuf/GeneratedMessageInfoFactory.java",
46    "src/main/java/com/google/protobuf/GeneratedMessageLite.java",
47    "src/main/java/com/google/protobuf/InlineMe.java",
48    "src/main/java/com/google/protobuf/IntArrayList.java",
49    "src/main/java/com/google/protobuf/Internal.java",
50    "src/main/java/com/google/protobuf/InvalidProtocolBufferException.java",
51    "src/main/java/com/google/protobuf/IterableByteBufferInputStream.java",
52    "src/main/java/com/google/protobuf/JavaType.java",
53    "src/main/java/com/google/protobuf/LazyField.java",
54    "src/main/java/com/google/protobuf/LazyFieldLite.java",
55    "src/main/java/com/google/protobuf/LazyStringArrayList.java",
56    "src/main/java/com/google/protobuf/LazyStringList.java",
57    "src/main/java/com/google/protobuf/ListFieldSchema.java",
58    "src/main/java/com/google/protobuf/LongArrayList.java",
59    "src/main/java/com/google/protobuf/ManifestSchemaFactory.java",
60    "src/main/java/com/google/protobuf/MapEntryLite.java",
61    "src/main/java/com/google/protobuf/MapFieldLite.java",
62    "src/main/java/com/google/protobuf/MapFieldSchema.java",
63    "src/main/java/com/google/protobuf/MapFieldSchemaLite.java",
64    "src/main/java/com/google/protobuf/MapFieldSchemas.java",
65    "src/main/java/com/google/protobuf/MessageInfo.java",
66    "src/main/java/com/google/protobuf/MessageInfoFactory.java",
67    "src/main/java/com/google/protobuf/MessageLite.java",
68    "src/main/java/com/google/protobuf/MessageLiteOrBuilder.java",
69    "src/main/java/com/google/protobuf/MessageLiteToString.java",
70    "src/main/java/com/google/protobuf/MessageSchema.java",
71    "src/main/java/com/google/protobuf/MessageSetSchema.java",
72    "src/main/java/com/google/protobuf/MutabilityOracle.java",
73    "src/main/java/com/google/protobuf/NewInstanceSchema.java",
74    "src/main/java/com/google/protobuf/NewInstanceSchemaLite.java",
75    "src/main/java/com/google/protobuf/NewInstanceSchemas.java",
76    "src/main/java/com/google/protobuf/NioByteString.java",
77    "src/main/java/com/google/protobuf/OneofInfo.java",
78    "src/main/java/com/google/protobuf/Parser.java",
79    "src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java",
80    "src/main/java/com/google/protobuf/ProtoSyntax.java",
81    "src/main/java/com/google/protobuf/Protobuf.java",
82    "src/main/java/com/google/protobuf/ProtobufArrayList.java",
83    "src/main/java/com/google/protobuf/ProtobufLists.java",
84    "src/main/java/com/google/protobuf/ProtocolStringList.java",
85    "src/main/java/com/google/protobuf/RawMessageInfo.java",
86    "src/main/java/com/google/protobuf/Reader.java",
87    "src/main/java/com/google/protobuf/RopeByteString.java",
88    "src/main/java/com/google/protobuf/Schema.java",
89    "src/main/java/com/google/protobuf/SchemaFactory.java",
90    "src/main/java/com/google/protobuf/SchemaUtil.java",
91    "src/main/java/com/google/protobuf/SmallSortedMap.java",
92    "src/main/java/com/google/protobuf/StructuralMessageInfo.java",
93    "src/main/java/com/google/protobuf/TextFormatEscaper.java",
94    "src/main/java/com/google/protobuf/UninitializedMessageException.java",
95    "src/main/java/com/google/protobuf/UnknownFieldSchema.java",
96    "src/main/java/com/google/protobuf/UnknownFieldSetLite.java",
97    "src/main/java/com/google/protobuf/UnknownFieldSetLiteSchema.java",
98    "src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java",
99    "src/main/java/com/google/protobuf/UnsafeByteOperations.java",
100    "src/main/java/com/google/protobuf/UnsafeUtil.java",
101    "src/main/java/com/google/protobuf/Utf8.java",
102    "src/main/java/com/google/protobuf/WireFormat.java",
103    "src/main/java/com/google/protobuf/Writer.java",
104]
105
106internal_gen_well_known_protos_java(
107    name = "gen_well_known_protos_javalite",
108    javalite = True,
109    deps = [
110        "//:any_proto",
111        "//:api_proto",
112        "//:duration_proto",
113        "//:empty_proto",
114        "//:field_mask_proto",
115        "//:source_context_proto",
116        "//:struct_proto",
117        "//:timestamp_proto",
118        "//:type_proto",
119        "//:wrappers_proto",
120    ],
121)
122
123# Should be used as `//java/lite`.
124java_library(
125    name = "lite",
126    srcs = LITE_SRCS + [
127        ":gen_well_known_protos_javalite",
128    ],
129    visibility = [
130        "//java/lite:__pkg__",
131    ],
132)
133
134# Bazel users, don't depend on this target, use //java/lite.
135java_export(
136    name = "lite_mvn",
137    maven_coordinates = "com.google.protobuf:protobuf-javalite:%s" % PROTOBUF_JAVA_VERSION,
138    pom_template = "//java/lite:pom_template.xml",
139    resources = [
140        "//:lite_well_known_protos",
141    ],
142    tags = ["manual"],
143    runtime_deps = [":lite"],
144)
145
146java_library(
147    name = "lite_runtime_only",
148    srcs = LITE_SRCS,
149)
150
151internal_gen_well_known_protos_java(
152    name = "gen_well_known_protos_java",
153    deps = [
154        "//:any_proto",
155        "//:api_proto",
156        "//:compiler_plugin_proto",
157        "//:descriptor_proto",
158        "//:duration_proto",
159        "//:empty_proto",
160        "//:field_mask_proto",
161        "//:source_context_proto",
162        "//:struct_proto",
163        "//:timestamp_proto",
164        "//:type_proto",
165        "//:wrappers_proto",
166    ],
167)
168
169java_library(
170    name = "core",
171    srcs = glob(
172        [
173            "src/main/java/com/google/protobuf/*.java",
174        ],
175        exclude = LITE_SRCS,
176    ) + [
177        ":gen_well_known_protos_java",
178    ],
179    visibility = ["//visibility:public"],
180    exports = [
181        ":lite_runtime_only",
182    ],
183    deps = [
184        ":lite_runtime_only",
185    ],
186)
187
188# Bazel users, don't depend on this target, use :core.
189java_export(
190    name = "core_mvn",
191    maven_coordinates = "com.google.protobuf:protobuf-java:%s" % PROTOBUF_JAVA_VERSION,
192    pom_template = "pom_template.xml",
193    resources = [
194        "//:built_in_runtime_protos",
195        "//:well_known_type_protos",
196    ],
197    tags = ["manual"],
198    runtime_deps = [":core"],
199)
200
201filegroup(
202    name = "release",
203    srcs = [
204        ":core_mvn-docs",
205        ":core_mvn-maven-source",
206        ":core_mvn-pom",
207        ":core_mvn-project",
208        ":lite_mvn-docs",
209        ":lite_mvn-maven-source",
210        ":lite_mvn-pom",
211        ":lite_mvn-project",
212    ],
213    visibility = ["//java:__pkg__"],
214)
215
216proto_lang_toolchain(
217    name = "toolchain",
218    # keep this in sync w/ WELL_KNOWN_PROTO_MAP in //:BUILD
219    blacklisted_protos = [
220        "//:any_proto",
221        "//:api_proto",
222        "//:compiler_plugin_proto",
223        "//:descriptor_proto",
224        "//:duration_proto",
225        "//:empty_proto",
226        "//:field_mask_proto",
227        "//:source_context_proto",
228        "//:struct_proto",
229        "//:timestamp_proto",
230        "//:type_proto",
231        "//:wrappers_proto",
232    ],
233    command_line = "--java_out=$(OUT)",
234    runtime = ":core",
235    visibility = ["//visibility:public"],
236)
237
238proto_library(
239    name = "java_test_protos",
240    srcs = glob(["src/test/proto/**/*.proto"]),
241    strip_import_prefix = "src/test/proto",
242    deps = [
243        "//:any_proto",
244        "//:descriptor_proto",
245        "//:generic_test_protos",
246        "//:wrappers_proto",
247    ],
248)
249
250java_proto_library(
251    name = "generic_test_protos_java_proto",
252    visibility = [
253        "//java:__subpackages__",
254    ],
255    deps = ["//:generic_test_protos"],
256)
257
258java_proto_library(
259    name = "java_test_protos_java_proto",
260    deps = [":java_test_protos"],
261)
262
263java_library(
264    name = "test_util",
265    srcs = [
266        "src/test/java/com/google/protobuf/TestUtil.java",
267        "src/test/java/com/google/protobuf/TestUtilLite.java",
268    ],
269    visibility = ["//java:__subpackages__"],
270    deps = [
271        ":core",
272        ":generic_test_protos_java_proto",
273        ":java_test_protos_java_proto",
274        "@maven//:com_google_guava_guava",
275        "@maven//:junit_junit",
276    ],
277)
278
279test_suite(
280    name = "tests",
281    tests = [
282        "conformance_test",
283        "core_build_test",
284        "core_tests",
285        "utf8_tests",
286    ],
287)
288
289build_test(
290    name = "core_build_test",
291    targets = [
292        ":core",
293    ],
294)
295
296conformance_test(
297    name = "conformance_test",
298    failure_list = "//conformance:failure_list_java.txt",
299    testee = "//conformance:conformance_java",
300    text_format_failure_list = "//conformance:text_format_failure_list_java.txt",
301)
302
303junit_tests(
304    name = "core_tests",
305    size = "small",
306    srcs = glob(
307        ["src/test/java/**/*.java"],
308        exclude = [
309            "src/test/java/com/google/protobuf/DecodeUtf8Test.java",
310            "src/test/java/com/google/protobuf/IsValidUtf8Test.java",
311            "src/test/java/com/google/protobuf/TestUtil.java",
312            "src/test/java/com/google/protobuf/TestUtilLite.java",
313        ],
314    ),
315    data = ["//:testdata"],
316    deps = [
317        ":core",
318        ":generic_test_protos_java_proto",
319        ":java_test_protos_java_proto",
320        ":test_util",
321        "@maven//:com_google_guava_guava",
322        "@maven//:com_google_truth_truth",
323        "@maven//:junit_junit",
324        "@maven//:org_mockito_mockito_core",
325    ],
326)
327
328# The UTF-8 validation tests are much slower than the other tests, so they get
329# their own test target with a longer timeout.
330junit_tests(
331    name = "utf8_tests",
332    size = "large",
333    srcs = [
334        "src/test/java/com/google/protobuf/DecodeUtf8Test.java",
335        "src/test/java/com/google/protobuf/IsValidUtf8Test.java",
336        "src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java",
337    ],
338    deps = [
339        ":core",
340        "@maven//:com_google_guava_guava",
341        "@maven//:com_google_truth_truth",
342        "@maven//:junit_junit",
343    ],
344)
345
346java_lite_proto_library(
347    name = "generic_test_protos_java_proto_lite",
348    visibility = [
349        "//java/kotlin-lite:__pkg__",
350        "//java/lite:__pkg__",
351    ],
352    deps = ["//:generic_test_protos"],
353)
354
355java_lite_proto_library(
356    name = "java_test_protos_java_proto_lite",
357    visibility = [
358        "//java/lite:__pkg__",
359    ],
360    deps = [":java_test_protos"],
361)
362
363genrule(
364    name = "rewrite_javalite_test_util",
365    srcs = [
366        "//java/lite:lite.awk",
367        "src/test/java/com/google/protobuf/TestUtil.java",
368    ],
369    outs = ["TestUtil.java"],
370    cmd = "awk -f $(location //java/lite:lite.awk) $(location src/test/java/com/google/protobuf/TestUtil.java) > $@",
371)
372
373java_library(
374    name = "test_util_lite",
375    srcs = [
376        "src/test/java/com/google/protobuf/TestUtilLite.java",
377        ":rewrite_javalite_test_util",
378    ],
379    visibility = [
380        "//java/kotlin-lite:__pkg__",
381        "//java/lite:__pkg__",
382    ],
383    deps = [
384        ":generic_test_protos_java_proto_lite",
385        ":java_test_protos_java_proto_lite",
386        ":lite_runtime_only",
387        "@maven//:com_google_guava_guava",
388        "@maven//:junit_junit",
389    ],
390)
391
392LITE_TEST_EXCLUSIONS = [
393    # Keep in sync with //java/lite:pom.xml id=copy-test-source-files execution.
394    "src/test/java/com/google/protobuf/AbstractMessageTest.java",
395    "src/test/java/com/google/protobuf/AbstractProto2SchemaTest.java",
396    "src/test/java/com/google/protobuf/AnyTest.java",
397    "src/test/java/com/google/protobuf/CodedInputStreamTest.java",
398    "src/test/java/com/google/protobuf/DeprecatedFieldTest.java",
399    "src/test/java/com/google/protobuf/DescriptorsTest.java",
400    "src/test/java/com/google/protobuf/DiscardUnknownFieldsTest.java",
401    "src/test/java/com/google/protobuf/DynamicMessageTest.java",
402    "src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java",
403    "src/test/java/com/google/protobuf/FieldPresenceTest.java",
404    "src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java",
405    "src/test/java/com/google/protobuf/GeneratedMessageTest.java",
406    "src/test/java/com/google/protobuf/LazyFieldTest.java",
407    "src/test/java/com/google/protobuf/LazyStringEndToEndTest.java",
408    "src/test/java/com/google/protobuf/MapForProto2Test.java",
409    "src/test/java/com/google/protobuf/MapTest.java",
410    "src/test/java/com/google/protobuf/MessageTest.java",
411    "src/test/java/com/google/protobuf/NestedBuildersTest.java",
412    "src/test/java/com/google/protobuf/PackedFieldTest.java",
413    "src/test/java/com/google/protobuf/ParserTest.java",
414    "src/test/java/com/google/protobuf/ParseExceptionsTest.java",
415    "src/test/java/com/google/protobuf/Proto2ExtensionLookupSchemaTest.java",
416    "src/test/java/com/google/protobuf/Proto2SchemaTest.java",
417    "src/test/java/com/google/protobuf/Proto2UnknownEnumValueTest.java",
418    "src/test/java/com/google/protobuf/RepeatedFieldBuilderV3Test.java",
419    "src/test/java/com/google/protobuf/ServiceTest.java",
420    "src/test/java/com/google/protobuf/SingleFieldBuilderV3Test.java",
421    "src/test/java/com/google/protobuf/TestBadIdentifiers.java",
422    "src/test/java/com/google/protobuf/TextFormatParseInfoTreeTest.java",
423    "src/test/java/com/google/protobuf/TextFormatParseLocationTest.java",
424    "src/test/java/com/google/protobuf/TextFormatTest.java",
425    "src/test/java/com/google/protobuf/TestUtil.java",
426    "src/test/java/com/google/protobuf/TestUtilLite.java",
427    "src/test/java/com/google/protobuf/TypeRegistryTest.java",
428    "src/test/java/com/google/protobuf/UnknownEnumValueTest.java",
429    "src/test/java/com/google/protobuf/UnknownFieldSetLiteTest.java",
430    "src/test/java/com/google/protobuf/UnknownFieldSetPerformanceTest.java",
431    "src/test/java/com/google/protobuf/UnknownFieldSetTest.java",
432    "src/test/java/com/google/protobuf/WellKnownTypesTest.java",
433    "src/test/java/com/google/protobuf/WireFormatTest.java",
434]
435
436junit_tests(
437    name = "lite_tests",
438    size = "large",
439    srcs = glob(
440        ["src/test/java/**/*.java"],
441        exclude = LITE_TEST_EXCLUSIONS,
442    ),
443    data = ["//:testdata"],
444    test_prefix = "Lite",
445    deps = [
446        ":generic_test_protos_java_proto_lite",
447        ":java_test_protos_java_proto_lite",
448        ":lite",
449        ":test_util_lite",
450        "@maven//:com_google_truth_truth",
451        "@maven//:junit_junit",
452        "@maven//:org_mockito_mockito_core",
453    ],
454)
455
456pkg_files(
457    name = "dist_files",
458    srcs = glob([
459        "src/main/java/com/google/protobuf/*.java",
460        "src/test/java/**/*.java",
461        "src/test/proto/**/*.proto",
462    ]) + [
463        "BUILD.bazel",
464        "generate-sources-build.xml",
465        "generate-test-sources-build.xml",
466        "pom.xml",
467        "pom_template.xml",
468    ],
469    strip_prefix = strip_prefix.from_root(""),
470    visibility = ["//java:__pkg__"],
471)
472