Skip to content

Commit

Permalink
Separate source and output jars in JavaProtoAspectInfo
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 581237456
Change-Id: Iddd2c34ddaf19ba874d169f21f96320805537083
  • Loading branch information
hvadehra authored and copybara-github committed Nov 10, 2023
1 parent 07a571f commit d269943
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
load(":common/java/java_common.bzl", "java_common")
load(":common/java/java_info.bzl", "JavaInfo", _merge_private_for_builtins = "merge")
load(":common/java/java_semantics.bzl", "semantics")
load(":common/java/proto/java_proto_library.bzl", "JavaProtoAspectInfo", "java_compile_for_protos")
load(":common/java/proto/java_proto_library.bzl", "JavaProtoAspectInfo", "collect_transitive_proto_aspect_info", "java_compile_for_protos")
load(":common/proto/proto_common.bzl", "toolchains", proto_common = "proto_common_do_not_use")
load(":common/proto/proto_info.bzl", "ProtoInfo")

Expand Down Expand Up @@ -60,19 +60,19 @@ def _aspect_impl(target, ctx):
if runtime:
deps.append(runtime[JavaInfo])

java_info, jars = java_compile_for_protos(
java_info, output_jar = java_compile_for_protos(
ctx,
"-lite.jar",
source_jar,
deps,
exports,
injecting_rule_kind = "java_lite_proto_library",
)
transitive_jars = [dep[JavaProtoAspectInfo].jars for dep in ctx.rule.attr.deps]
java_proto_aspect_info = collect_transitive_proto_aspect_info(output_jar, source_jar, ctx.rule.attr.deps)

return [
java_info,
JavaProtoAspectInfo(jars = depset(jars, transitive = transitive_jars)),
java_proto_aspect_info,
]

java_lite_proto_aspect = aspect(
Expand Down Expand Up @@ -120,7 +120,10 @@ def _rule_impl(ctx):

java_info = _merge_private_for_builtins([dep[JavaInfo] for dep in ctx.attr.deps], merge_java_outputs = False)

transitive_src_and_runtime_jars = depset(transitive = [dep[JavaProtoAspectInfo].jars for dep in ctx.attr.deps])
transitive_src_and_runtime_jars = depset(
transitive = [dep[JavaProtoAspectInfo].sources for dep in ctx.attr.deps] +
[dep[JavaProtoAspectInfo].outputs for dep in ctx.attr.deps],
)
transitive_runtime_jars = depset(transitive = [java_info.transitive_runtime_jars])

if hasattr(java_common, "add_constraints"):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,22 @@ load(":common/proto/proto_common.bzl", "toolchains", proto_common = "proto_commo
load(":common/proto/proto_info.bzl", "ProtoInfo")

# The provider is used to collect source and runtime jars in the `proto_library` dependency graph.
JavaProtoAspectInfo = provider("JavaProtoAspectInfo", fields = ["jars"])
JavaProtoAspectInfo = provider("JavaProtoAspectInfo", fields = ["sources", "outputs"])

def collect_transitive_proto_aspect_info(output_jar, source_jar, deps):
"""Constructs JavaProtoAspectInfo collecting transitive sources and outputs from deps
Args:
output_jar: (File|None)
source_jar: (File|None)
deps: ([Target])
"""
transitive_sources = [dep[JavaProtoAspectInfo].sources for dep in deps if JavaProtoAspectInfo in dep]
transitive_outputs = [dep[JavaProtoAspectInfo].outputs for dep in deps if JavaProtoAspectInfo in dep]
return JavaProtoAspectInfo(
sources = depset([source_jar] if source_jar else [], transitive = transitive_sources),
outputs = depset([output_jar] if output_jar else [], transitive = transitive_outputs),
)

def _filter_provider(provider, *attrs):
return [dep[provider] for attr in attrs for dep in attr if provider in dep]
Expand Down Expand Up @@ -68,18 +83,17 @@ def _bazel_java_proto_aspect_impl(target, ctx):
exports = _filter_provider(JavaInfo, ctx.rule.attr.exports)
if source_jar and proto_toolchain_info.runtime:
deps.append(proto_toolchain_info.runtime[JavaInfo])
java_info, jars = java_compile_for_protos(
java_info, output_jar = java_compile_for_protos(
ctx,
"-speed.jar",
source_jar,
deps,
exports,
)

transitive_jars = [dep[JavaProtoAspectInfo].jars for dep in ctx.rule.attr.deps if JavaProtoAspectInfo in dep]
java_proto_aspect_info = collect_transitive_proto_aspect_info(output_jar, source_jar, ctx.rule.attr.deps)
return [
java_info,
JavaProtoAspectInfo(jars = depset(jars, transitive = transitive_jars)),
java_proto_aspect_info,
]

def java_compile_for_protos(ctx, output_jar_suffix, source_jar = None, deps = [], exports = [], injecting_rule_kind = "java_proto_library"):
Expand All @@ -103,8 +117,7 @@ def java_compile_for_protos(ctx, output_jar_suffix, source_jar = None, deps = []
injecting_rule_kind: (str) Rule kind requesting the compilation.
It's embedded into META-INF of the produced runtime jar, for debugging.
Returns:
((JavaInfo, list[File])) JavaInfo of this target and list containing source
and runtime jar, when they are created.
((JavaInfo, File|None)) JavaInfo of this target and output jar (if created)
"""
if source_jar != None:
path, sep, filename = ctx.label.name.rpartition("/")
Expand All @@ -123,12 +136,11 @@ def java_compile_for_protos(ctx, output_jar_suffix, source_jar = None, deps = []
enable_jspecify = False,
include_compilation_info = False,
)
jars = [source_jar, output_jar]
else:
# If there are no proto sources just pass along the compilation dependencies.
java_info = _merge_private_for_builtins(deps + exports, merge_java_outputs = False, merge_source_jars = False)
jars = []
return java_info, jars
output_jar = None
return java_info, output_jar

bazel_java_proto_aspect = aspect(
implementation = _bazel_java_proto_aspect_impl,
Expand Down Expand Up @@ -158,7 +170,10 @@ def bazel_java_proto_library_rule(ctx):

java_info = _merge_private_for_builtins([dep[JavaInfo] for dep in ctx.attr.deps], merge_java_outputs = False)

transitive_src_and_runtime_jars = depset(transitive = [dep[JavaProtoAspectInfo].jars for dep in ctx.attr.deps])
transitive_src_and_runtime_jars = depset(
transitive = [dep[JavaProtoAspectInfo].sources for dep in ctx.attr.deps] +
[dep[JavaProtoAspectInfo].outputs for dep in ctx.attr.deps],
)
transitive_runtime_jars = depset(transitive = [java_info.transitive_runtime_jars])

return [
Expand Down

0 comments on commit d269943

Please sign in to comment.