@@ -99,6 +99,26 @@ _java_gapic_postprocess_srcjar = rule(
9999 implementation = _java_gapic_postprocess_srcjar_impl ,
100100)
101101
102+ def _extract_common_proto_dep (dep ):
103+ return dep [dep .index ("/" ):] if "//google" in dep else dep
104+
105+ def _append_dep_without_duplicates (dest_deps , new_deps ):
106+ """
107+ Appends new_deps into dest_deps only if elements in new_deps
108+ are not already present in dest_deps.
109+ A workaround for the lack of sets in skylark.
110+ """
111+
112+ # Naive dep checking, since the source (i.e. prefixed) repo can vary.
113+ # Examine only "//google"-prefixed targets, since common proto deps
114+ # are more likely to be duplicated.
115+ processed_dest_deps = [_extract_common_proto_dep (dep ) for dep in dest_deps ]
116+ processed_new_deps = [_extract_common_proto_dep (dep ) for dep in new_deps ]
117+ for i in range (len (new_deps )):
118+ if processed_new_deps [i ] not in processed_dest_deps :
119+ dest_deps .append (new_deps [i ])
120+ return dest_deps
121+
102122def java_gapic_library (
103123 name ,
104124 srcs ,
@@ -169,7 +189,7 @@ def java_gapic_library(
169189 )
170190
171191 # General additional deps.
172- actual_deps = deps + resource_name_deps + [
192+ actual_deps = resource_name_deps + [
173193 "@com_google_googleapis//google/rpc:rpc_java_proto" ,
174194 "@com_google_googleapis//google/longrunning:longrunning_java_proto" ,
175195 "@com_google_protobuf//:protobuf_java" ,
@@ -187,6 +207,7 @@ def java_gapic_library(
187207 "@com_google_http_client_google_http_client//jar" ,
188208 "@javax_annotation_javax_annotation_api//jar" ,
189209 ]
210+ _append_dep_without_duplicates (actual_deps , deps )
190211
191212 native .java_library (
192213 name = name ,
@@ -196,7 +217,7 @@ def java_gapic_library(
196217 )
197218
198219 # Test deps.
199- actual_test_deps = test_deps + actual_deps + [
220+ actual_test_deps = [
200221 "@com_google_googleapis//google/type:type_java_proto" , # Commonly used.
201222 "@com_google_api_gax_java//gax-grpc:gax_grpc_testlib" ,
202223 "@com_google_api_gax_java//gax:gax_testlib" ,
@@ -207,6 +228,8 @@ def java_gapic_library(
207228 "@io_opencensus_opencensus_contrib_grpc_metrics//jar" ,
208229 "@junit_junit//jar" ,
209230 ]
231+ _append_dep_without_duplicates (actual_test_deps , test_deps )
232+ _append_dep_without_duplicates (actual_test_deps , actual_deps )
210233
211234 native .java_library (
212235 name = "%s_test" % name ,
0 commit comments