diff --git a/BUILD b/BUILD index 27ee9e5bae..887e5e3845 100644 --- a/BUILD +++ b/BUILD @@ -146,6 +146,7 @@ load( "adapt_proto_library", "cc_proto_library", "internal_copied_filegroup", + "internal_gen_kt_protos", "internal_gen_well_known_protos_java", "internal_protobuf_py_tests", "py_proto_library", @@ -891,6 +892,23 @@ internal_gen_well_known_protos_java( deps = [proto + "_proto" for proto in LITE_WELL_KNOWN_PROTO_MAP.keys()], ) +internal_gen_kt_protos( + name = "gen_well_known_protos_kotlin", + visibility = [ + "//java:__subpackages__", + ], + deps = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], +) + +internal_gen_kt_protos( + name = "gen_well_known_protos_kotlinlite", + visibility = [ + "//java:__subpackages__", + ], + lite = True, + deps = [proto + "_proto" for proto in LITE_WELL_KNOWN_PROTO_MAP.keys()], +) + alias( name = "protobuf_java", actual = "//java/core", @@ -1428,159 +1446,60 @@ filegroup( # Kotlin proto rules -genrule( - name = "gen_kotlin_unittest_lite", +proto_library( + name = "kt_unittest_lite", srcs = [ "src/google/protobuf/unittest_lite.proto", "src/google/protobuf/unittest_import_lite.proto", "src/google/protobuf/unittest_import_public_lite.proto", "src/google/protobuf/map_lite_unittest.proto", ], - outs = [ - "TestAllTypesLiteKt.kt", - "ForeignMessageLiteKt.kt", - "TestAllExtensionsLiteKt.kt", - "TestEmptyMessageLiteKt.kt", - "TestEmptyMessageWithExtensionsLiteKt.kt", - "TestMapLiteKt.kt", - "OptionalGroup_extension_liteKt.kt", - "RepeatedGroup_extension_liteKt.kt", - ], + strip_import_prefix = "src", +) + +internal_gen_kt_protos( + name = "gen_kotlin_unittest_lite", + deps = [":kt_unittest_lite"], + lite = True, visibility = ["//java:__subpackages__"], - cmd = "$(location //:protoc) " + - "--kotlin_out=lite:$(@D) -Isrc/ " + - "$(locations src/google/protobuf/unittest_lite.proto) && " + - "$(location //:protoc) " + - "--kotlin_out=lite:$(@D) -Isrc/ " + - "$(locations src/google/protobuf/map_lite_unittest.proto) && " + - "cp $(@D)/com/google/protobuf/TestAllTypesLiteKt.kt " + - "$(location TestAllTypesLiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/ForeignMessageLiteKt.kt " + - "$(location ForeignMessageLiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/TestAllExtensionsLiteKt.kt " + - "$(location TestAllExtensionsLiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/TestAllTypesLiteKt.kt " + - "$(location TestAllTypesLiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/TestEmptyMessageLiteKt.kt " + - "$(location TestEmptyMessageLiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/TestEmptyMessageWithExtensionsLiteKt.kt " + - "$(location TestEmptyMessageWithExtensionsLiteKt.kt) && " + - "cp $(@D)/protobuf_unittest/TestMapLiteKt.kt " + - "$(location TestMapLiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/OptionalGroup_extension_liteKt.kt " + - "$(location OptionalGroup_extension_liteKt.kt) && " + - "cp $(@D)/com/google/protobuf/RepeatedGroup_extension_liteKt.kt " + - "$(location RepeatedGroup_extension_liteKt.kt)", - tools = [":protoc"], ) -genrule( - name = "gen_kotlin_unittest", +proto_library( + name = "kt_unittest", srcs = [ "src/google/protobuf/unittest.proto", "src/google/protobuf/unittest_import.proto", "src/google/protobuf/unittest_import_public.proto", "src/google/protobuf/map_proto2_unittest.proto", ], - outs = [ - "TestAllTypesKt.kt", - "ForeignMessageKt.kt", - "Int32MessageKt.kt", - "TestAllExtensionsKt.kt", - "TestEmptyMessageKt.kt", - "TestEmptyMessageWithExtensionsKt.kt", - "TestIntIntMapKt.kt", - "TestEnumMapKt.kt", - "TestMapsKt.kt", - "OptionalGroup_extensionKt.kt", - "RepeatedGroup_extensionKt.kt", - ], - visibility = ["//java:__subpackages__"], - cmd = "$(location //:protoc) " + - "--kotlin_out=shared,immutable:$(@D) -Isrc/ " + - "$(location src/google/protobuf/unittest.proto) && " + - "$(location //:protoc) " + - "--kotlin_out=shared,immutable:$(@D) -Isrc/ " + - "$(location src/google/protobuf/map_proto2_unittest.proto) && " + - "cp $(@D)/protobuf_unittest/TestAllTypesKt.kt " + - "$(location TestAllTypesKt.kt) && " + - "cp $(@D)/protobuf_unittest/ForeignMessageKt.kt " + - "$(location ForeignMessageKt.kt) && " + - "cp $(@D)/protobuf_unittest/Int32MessageKt.kt " + - "$(location Int32MessageKt.kt) && " + - "cp $(@D)/protobuf_unittest/TestAllExtensionsKt.kt " + - "$(location TestAllExtensionsKt.kt) && " + - "cp $(@D)/protobuf_unittest/TestEmptyMessageKt.kt " + - "$(location TestEmptyMessageKt.kt) && " + - "cp $(@D)/protobuf_unittest/TestEmptyMessageWithExtensionsKt.kt " + - "$(location TestEmptyMessageWithExtensionsKt.kt) && " + - "cp $(@D)/protobuf_unittest/TestIntIntMapKt.kt " + - "$(location TestIntIntMapKt.kt) && " + - "cp $(@D)/protobuf_unittest/TestEnumMapKt.kt " + - "$(location TestEnumMapKt.kt) && " + - "cp $(@D)/protobuf_unittest/TestMapsKt.kt " + - "$(location TestMapsKt.kt) && " + - "cp $(@D)/protobuf_unittest/OptionalGroup_extensionKt.kt " + - "$(location OptionalGroup_extensionKt.kt) && " + - "cp $(@D)/protobuf_unittest/RepeatedGroup_extensionKt.kt " + - "$(location RepeatedGroup_extensionKt.kt)", - tools = ["//:protoc"], + strip_import_prefix = "src", ) -genrule( - name = "gen_kotlin_proto3_unittest_lite", - srcs = [ - "src/google/protobuf/unittest_proto3.proto", - "src/google/protobuf/unittest_import.proto", - "src/google/protobuf/unittest_import_public.proto", - ], - outs = [ - "TestAllTypesProto3LiteKt.kt", - "TestEmptyMessageProto3LiteKt.kt", - ], +internal_gen_kt_protos( + name = "gen_kotlin_unittest", + deps = [":kt_unittest"], visibility = ["//java:__subpackages__"], - cmd = "$(location //:protoc) " + - "--kotlin_out=lite:$(@D) -Isrc/ " + - "$(location src/google/protobuf/unittest_proto3.proto) && " + - "cp $(@D)/proto3_unittest/TestAllTypesKt.kt " + - "$(location TestAllTypesProto3LiteKt.kt) && " + - "cp $(@D)/proto3_unittest/TestEmptyMessageKt.kt " + - "$(location TestEmptyMessageProto3LiteKt.kt)", - tools = ["//:protoc"], ) -genrule( - name = "gen_kotlin_proto3_unittest", +proto_library( + name = "kt_proto3_unittest", srcs = [ "src/google/protobuf/unittest_proto3.proto", "src/google/protobuf/unittest_import.proto", "src/google/protobuf/unittest_import_public.proto", ], - outs = [ - "TestAllTypesProto3Kt.kt", - "TestEmptyMessageProto3Kt.kt", - ], - visibility = ["//java:__subpackages__"], - cmd = "$(location //:protoc) " + - "--kotlin_out=shared,immutable:$(@D) -Isrc/ " + - "$(location src/google/protobuf/unittest_proto3.proto) && " + - "cp $(@D)/proto3_unittest/TestAllTypesKt.kt " + - "$(location TestAllTypesProto3Kt.kt) && " + - "cp $(@D)/proto3_unittest/TestEmptyMessageKt.kt " + - "$(location TestEmptyMessageProto3Kt.kt)", - tools = ["//:protoc"], + strip_import_prefix = "src", ) -genrule( - name = "gen_kotlin_any", - srcs = ["src/google/protobuf/any.proto"], - outs = ["AnyKt.kt"], - visibility = ["//java:__subpackages__"], - cmd = "$(location //:protoc) " + - "--kotlin_out=shared,immutable:$(@D) -Isrc/ " + - "$(location src/google/protobuf/any.proto) && " + - "cp $(@D)/com/google/protobuf/AnyKt.kt " + - "$(location AnyKt.kt)", - tools = ["//:protoc"], +internal_gen_kt_protos( + name = "gen_kotlin_proto3_unittest_lite", + deps = [":kt_proto3_unittest"], + lite = True, + visibility = ["//java:__subpackages__"], ) +internal_gen_kt_protos( + name = "gen_kotlin_proto3_unittest", + deps = [":kt_proto3_unittest"], + visibility = ["//java:__subpackages__"], +) diff --git a/java/kotlin-lite/BUILD b/java/kotlin-lite/BUILD index 0d1694c4ea..a41584a8bb 100644 --- a/java/kotlin-lite/BUILD +++ b/java/kotlin-lite/BUILD @@ -1,5 +1,6 @@ load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") load("@rules_java//java:defs.bzl", "java_lite_proto_library") +load("//:protobuf.bzl", "internal_gen_kt_protos") java_lite_proto_library( name = "example_extensible_message_java_proto_lite", @@ -47,74 +48,31 @@ java_lite_proto_library( deps = ["//java/kotlin:evil_names_proto2"], ) +internal_gen_kt_protos( + name = "gen_evil_names_proto2_lite", + deps = ["//java/kotlin:evil_names_proto2"], + lite = True, +) + java_lite_proto_library( name = "evil_names_proto3_java_proto_lite", deps = ["//java/kotlin:evil_names_proto3"], ) +internal_gen_kt_protos( + name = "gen_evil_names_proto3_lite", + deps = ["//java/kotlin:evil_names_proto3"], + lite = True, +) + java_lite_proto_library( name = "multiple_files_proto3_java_proto_lite", deps = ["//java/kotlin:multiple_files_proto3"], ) -genrule( +internal_gen_kt_protos( name = "gen_kotlin_proto3_java_multiple_files_lite", - srcs = ["src/test/proto/com/google/protobuf/multiple_files_proto3.proto"], - outs = [ - "MultipleFilesMessageALiteKt.kt", - "MultipleFilesMessageBLiteKt.kt", - "MultipleFilesProto3LiteKt.kt", - ], - cmd = "$(location //:protoc) " + - "--kotlin_out=lite:$(@D) " + - "$(location src/test/proto/com/google/protobuf/multiple_files_proto3.proto) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/MultipleFilesMessageAKt.kt " + - "$(location MultipleFilesMessageALiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/MultipleFilesMessageBKt.kt " + - "$(location MultipleFilesMessageBLiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/MultipleFilesProto3Kt.kt " + - "$(location MultipleFilesProto3LiteKt.kt)", - tools = ["//:protoc"], -) - -genrule( - name = "gen_evil_names_proto2_lite", - srcs = ["src/test/proto/com/google/protobuf/evil_names_proto2.proto"], - outs = [ - "EvilNamesProto2LiteKt.kt", - "HardKeywordsAllTypesProto2LiteKt.kt", - "InterfaceKt.kt", - ], - cmd = "$(location //:protoc) " + - "--kotlin_out=lite:$(@D) " + - "$(location src/test/proto/com/google/protobuf/evil_names_proto2.proto) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/EvilNamesProto2Kt.kt " + - "$(location EvilNamesProto2LiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/HardKeywordsAllTypesProto2Kt.kt " + - "$(location HardKeywordsAllTypesProto2LiteKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/InterfaceKt.kt " + - "$(location InterfaceKt.kt)", - tools = ["//:protoc"], -) - -genrule( - name = "gen_evil_names_proto3_lite", - srcs = ["src/test/proto/com/google/protobuf/evil_names_proto3.proto"], - outs = [ - "ClassKt.kt", - "EvilNamesProto3Kt.kt", - "HardKeywordsAllTypesProto3Kt.kt", - ], - cmd = "$(location //:protoc) " + - "--kotlin_out=lite:$(@D) " + - "$(location src/test/proto/com/google/protobuf/evil_names_proto3.proto) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/ClassKt.kt " + - "$(location ClassKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/EvilNamesProto3Kt.kt " + - "$(location EvilNamesProto3Kt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/HardKeywordsAllTypesProto3Kt.kt " + - "$(location HardKeywordsAllTypesProto3Kt.kt)", - tools = ["//:protoc"], + deps = ["//java/kotlin:multiple_files_proto3"], ) kt_jvm_library( diff --git a/java/kotlin-lite/src/test/proto/com/google/protobuf/evil_names_proto2.proto b/java/kotlin-lite/src/test/proto/com/google/protobuf/evil_names_proto2.proto deleted file mode 100644 index 3735baf9f6..0000000000 --- a/java/kotlin-lite/src/test/proto/com/google/protobuf/evil_names_proto2.proto +++ /dev/null @@ -1,93 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// 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 Inc. 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 THE COPYRIGHT -// OWNER OR CONTRIBUTORS 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. - -// LINT: LEGACY_NAMES -syntax = "proto2"; - -package protobuf.kotlin.generator; - -option java_package = "com.google.protobuf.kotlin.generator"; - -message EvilNamesProto2 { - optional bool initialized = 1; - optional bool has_foo = 2; - optional string Bar = 3; - optional bool is_initialized = 4; - - oneof camelCase { - string fooBar = 5; - } - - repeated string ALL_CAPS = 7; - map ALL_CAPS_MAP = 8; - - optional bool has_underbar_preceding_numeric_1foo = 9; - optional bool has_underbar_preceding_numeric_42bar = 13; - optional bool has_underbar_preceding_numeric_123foo42bar_baz = 14; - - extensions 100 to max; - - repeated string extension = 12; - repeated int32 class = 15; - optional double int = 16; - optional bool long = 17; - optional int64 boolean = 18; - optional string sealed = 19; - optional float interface = 20; - optional int32 in = 21; - optional string object = 22; - optional string cached_size = 23; - optional bool serialized_size = 24; - optional string by = 25; -} - -message HardKeywordsAllTypesProto2 { - message NestedMessage { - optional int32 while = 1; - } - - enum NestedEnum { - FOO = 1; - BAR = 2; - } - - optional int32 as = 1; - optional string in = 2; - optional NestedEnum break = 3; - map continue = 4; - optional NestedMessage do = 5; - - repeated int32 else = 6; - repeated string for = 7; - repeated NestedEnum fun = 8; - repeated NestedMessage if = 9; -} - -message Interface {} diff --git a/java/kotlin-lite/src/test/proto/com/google/protobuf/evil_names_proto3.proto b/java/kotlin-lite/src/test/proto/com/google/protobuf/evil_names_proto3.proto deleted file mode 100644 index f6b06d3727..0000000000 --- a/java/kotlin-lite/src/test/proto/com/google/protobuf/evil_names_proto3.proto +++ /dev/null @@ -1,107 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// 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 Inc. 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 THE COPYRIGHT -// OWNER OR CONTRIBUTORS 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. - -// LINT: LEGACY_NAMES -syntax = "proto3"; - -package protobuf.kotlin.generator; - -option java_package = "com.google.protobuf.kotlin.generator"; - -message EvilNamesProto3 { - bool initialized = 1; - bool has_foo = 2; - string Bar = 3; - bool is_initialized = 4; - - oneof camelCase { - string fooBar = 5; - } - - repeated string ALL_CAPS = 7; - map ALL_CAPS_MAP = 8; - - bool has_underbar_preceding_numeric_1foo = 9; - bool has_underbar_preceding_numeric_42bar = 10; - bool has_underbar_preceding_numeric_123foo42bar_baz = 11; - - repeated string extension = 12; - - string class = 13; - double int = 14; - bool long = 15; - int64 boolean = 16; - string sealed = 17; - float interface = 18; - int32 in = 19; - string object = 20; - string cached_size = 21; - bool serialized_size = 22; - string value = 23; - int64 index = 24; - repeated string values = 25; - repeated string new_values = 26; - bool builder = 27; - map k = 28; - map v = 29; - map key = 30; - map map = 31; - map pairs = 32; - - string _leading_underscore = 33; - oneof _leading_underscore_oneof { - int32 option = 34; - } -} - -message HardKeywordsAllTypesProto3 { - message NestedMessage { - optional int32 while = 1; - } - - enum NestedEnum { - ZERO = 0; - FOO = 1; - BAR = 2; - } - - optional int32 as = 1; - optional string in = 2; - optional NestedEnum break = 3; - map continue = 4; - optional NestedMessage do = 5; - - repeated int32 else = 6; - repeated string for = 7; - repeated NestedEnum fun = 8; - repeated NestedMessage if = 9; -} - -message Class {} diff --git a/java/kotlin-lite/src/test/proto/com/google/protobuf/multiple_files_proto3.proto b/java/kotlin-lite/src/test/proto/com/google/protobuf/multiple_files_proto3.proto deleted file mode 100644 index 61141c54eb..0000000000 --- a/java/kotlin-lite/src/test/proto/com/google/protobuf/multiple_files_proto3.proto +++ /dev/null @@ -1,42 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// 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 Inc. 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 THE COPYRIGHT -// OWNER OR CONTRIBUTORS 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. - -syntax = "proto3"; - -package protobuf.kotlin.generator; - -option java_package = "com.google.protobuf.kotlin.generator"; -option java_multiple_files = true; - -enum NestedEnum { FOO = 0; } - -message MultipleFilesMessageA {} - -message MultipleFilesMessageB {} diff --git a/java/kotlin/BUILD b/java/kotlin/BUILD index 0cb27e5b11..b4bdf7393f 100644 --- a/java/kotlin/BUILD +++ b/java/kotlin/BUILD @@ -2,6 +2,7 @@ load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") load("@rules_java//java:defs.bzl", "java_proto_library") load("@rules_proto//proto:defs.bzl", "proto_library") load("//:protobuf_version.bzl", "PROTOBUF_VERSION") +load("//:protobuf.bzl", "internal_gen_kt_protos") exports_files([ "src/test/kotlin/com/google/protobuf/Proto3Test.kt", @@ -142,6 +143,16 @@ proto_library( visibility = ["//:__subpackages__"], ) +java_proto_library( + name = "evil_names_proto2_java_proto", + deps = [":evil_names_proto2"], +) + +internal_gen_kt_protos( + name = "gen_evil_names_proto2", + deps = [":evil_names_proto2"], +) + proto_library( name = "evil_names_proto3", srcs = ["src/test/proto/com/google/protobuf/evil_names_proto3.proto"], @@ -149,12 +160,12 @@ proto_library( ) java_proto_library( - name = "evil_names_proto2_java_proto", - deps = [":evil_names_proto2"], + name = "evil_names_proto3_java_proto", + deps = [":evil_names_proto3"], ) -java_proto_library( - name = "evil_names_proto3_java_proto", +internal_gen_kt_protos( + name = "gen_evil_names_proto3", deps = [":evil_names_proto3"], ) @@ -164,75 +175,20 @@ proto_library( visibility = ["//:__subpackages__"], ) -java_proto_library( name = "multiple_files_proto3_java_proto", +java_proto_library( + name = "multiple_files_proto3_java_proto", deps = [":multiple_files_proto3"], ) -genrule( +internal_gen_kt_protos( name = "gen_kotlin_proto3_java_multiple_files", - srcs = ["src/test/proto/com/google/protobuf/multiple_files_proto3.proto"], - outs = [ - "MultipleFilesMessageAKt.kt", - "MultipleFilesMessageBKt.kt", - "MultipleFilesProto3Kt.kt", - ], - cmd = "$(location //:protoc) " + - "--kotlin_out=shared,immutable:$(@D) " + - "$(location src/test/proto/com/google/protobuf/multiple_files_proto3.proto) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/MultipleFilesMessageAKt.kt " + - "$(location MultipleFilesMessageAKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/MultipleFilesMessageBKt.kt " + - "$(location MultipleFilesMessageBKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/MultipleFilesProto3Kt.kt " + - "$(location MultipleFilesProto3Kt.kt)", - tools = ["//:protoc"], -) - -genrule( - name = "gen_evil_names_proto2", - srcs = ["src/test/proto/com/google/protobuf/evil_names_proto2.proto"], - outs = [ - "EvilNamesProto2Kt.kt", - "HardKeywordsAllTypesProto2Kt.kt", - "InterfaceKt.kt", - ], - cmd = "$(location //:protoc) " + - "--kotlin_out=shared,immutable:$(@D) " + - "$(location src/test/proto/com/google/protobuf/evil_names_proto2.proto) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/EvilNamesProto2Kt.kt " + - "$(location EvilNamesProto2Kt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/HardKeywordsAllTypesProto2Kt.kt " + - "$(location HardKeywordsAllTypesProto2Kt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/InterfaceKt.kt " + - "$(location InterfaceKt.kt)", - tools = ["//:protoc"], -) - -genrule( - name = "gen_evil_names_proto3", - srcs = ["src/test/proto/com/google/protobuf/evil_names_proto3.proto"], - outs = [ - "ClassKt.kt", - "EvilNamesProto3Kt.kt", - "HardKeywordsAllTypesProto3Kt.kt", - ], - cmd = "$(location //:protoc) " + - "--kotlin_out=shared,immutable:$(@D) " + - "$(location src/test/proto/com/google/protobuf/evil_names_proto3.proto) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/ClassKt.kt " + - "$(location ClassKt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/EvilNamesProto3Kt.kt " + - "$(location EvilNamesProto3Kt.kt) && " + - "cp $(@D)/com/google/protobuf/kotlin/generator/HardKeywordsAllTypesProto3Kt.kt " + - "$(location HardKeywordsAllTypesProto3Kt.kt)", - tools = ["//:protoc"], + deps = [":multiple_files_proto3"], ) kt_jvm_library( name = "kotlin_unittest", srcs = [ ":gen_evil_names_proto2", - "//:gen_kotlin_any", "//:gen_kotlin_unittest", ], deps = [ @@ -240,6 +196,7 @@ kt_jvm_library( "//java/core:core", ":only_for_use_in_proto_generated_code_its_generator_and_tests", ":shared_runtime", + ":well_known_protos_kotlin", "//:java_test_protos", ], ) @@ -294,3 +251,15 @@ java_test( runtime_deps = [":proto3_test_library"], test_class = "com.google.protobuf.kotlin.Proto3Test", ) + +kt_jvm_library( + name = "well_known_protos_kotlin", + srcs = [ + "//:gen_well_known_protos_kotlin", + ], + deps = [ + "//java/core", + ":only_for_use_in_proto_generated_code_its_generator_and_tests", + ":shared_runtime", + ], +) diff --git a/protobuf.bzl b/protobuf.bzl index 826b6100b8..ffd7c8df67 100644 --- a/protobuf.bzl +++ b/protobuf.bzl @@ -391,6 +391,70 @@ internal_gen_well_known_protos_java = rule( }, ) +def _internal_gen_kt_protos(ctx): + args = ctx.actions.args() + + deps = [d[ProtoInfo] for d in ctx.attr.deps] + + srcjar = ctx.actions.declare_file("{}.srcjar".format(ctx.attr.name)) + if ctx.attr.lite: + out = "lite:%s" % srcjar.path + else: + out = srcjar + + args.add("--kotlin_out", out) + + descriptors = depset( + transitive = [dep.transitive_descriptor_sets for dep in deps], + ) + args.add_joined( + "--descriptor_set_in", + descriptors, + join_with = ctx.configuration.host_path_separator, + ) + + for dep in deps: + if "." == dep.proto_source_root: + args.add_all([src.path for src in dep.direct_sources]) + else: + source_root = dep.proto_source_root + offset = len(source_root) + 1 # + '/'. + args.add_all([src.path[offset:] for src in dep.direct_sources]) + + ctx.actions.run( + executable = ctx.executable._protoc, + inputs = descriptors, + outputs = [srcjar], + arguments = [args], + use_default_shell_env = True, + ) + + return [ + DefaultInfo( + files = depset([srcjar]), + ), + ] + +internal_gen_kt_protos = rule( + implementation = _internal_gen_kt_protos, + attrs = { + "deps": attr.label_list( + mandatory = True, + providers = [ProtoInfo], + ), + "lite": attr.bool( + default = False, + ), + "_protoc": attr.label( + executable = True, + cfg = "exec", + default = "//:protoc", + ), + }, +) + + + def internal_copied_filegroup(name, srcs, strip_prefix, dest, **kwargs): """Macro to copy files to a different directory and then create a filegroup.