diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go index 4b75e3b80..ccc52ef12 100644 --- a/bp2build/java_library_conversion_test.go +++ b/bp2build/java_library_conversion_test.go @@ -219,3 +219,35 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) }, }) } + +func TestJavaLibraryLogTags(t *testing.T) { + runJavaLibraryTestCase(t, bp2buildTestCase{ + description: "Java library - logtags creates separate dependency", + moduleTypeUnderTest: "java_library", + moduleTypeUnderTestFactory: java.LibraryFactory, + blueprint: `java_library { + name: "example_lib", + srcs: [ + "a.java", + "b.java", + "a.logtag", + "b.logtag", + ], + bazel_module: { bp2build_available: true }, +}`, + expectedBazelTargets: []string{ + makeBazelTarget("event_log_tags", "example_lib_logtags", attrNameToString{ + "srcs": `[ + "a.logtag", + "b.logtag", + ]`, + }), + makeBazelTarget("java_library", "example_lib", attrNameToString{ + "srcs": `[ + "a.java", + "b.java", + ":example_lib_logtags", + ]`, + }), + }}) +} diff --git a/java/java.go b/java/java.go index 713fe9492..b34d6de8a 100644 --- a/java/java.go +++ b/java/java.go @@ -2041,6 +2041,10 @@ type javaDependencyLabels struct { // and also separates dependencies into dynamic dependencies and static dependencies. // Each corresponding Bazel target type, can have a different method for handling // dynamic vs. static dependencies, and so these are returned to the calling function. +type eventLogTagsAttributes struct { + Srcs bazel.LabelListAttribute +} + func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) (*javaCommonAttributes, *javaDependencyLabels) { var srcs bazel.LabelListAttribute archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{}) @@ -2055,11 +2059,32 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) javaSrcPartition := "java" protoSrcPartition := "proto" + logtagSrcPartition := "logtag" srcPartitions := bazel.PartitionLabelListAttribute(ctx, &srcs, bazel.LabelPartitions{ - javaSrcPartition: bazel.LabelPartition{Extensions: []string{".java"}, Keep_remainder: true}, - protoSrcPartition: android.ProtoSrcLabelPartition, + javaSrcPartition: bazel.LabelPartition{Extensions: []string{".java"}, Keep_remainder: true}, + logtagSrcPartition: bazel.LabelPartition{Extensions: []string{".logtags", ".logtag"}}, + protoSrcPartition: android.ProtoSrcLabelPartition, }) + javaSrcs := srcPartitions[javaSrcPartition] + + var logtagsSrcs bazel.LabelList + if !srcPartitions[logtagSrcPartition].IsEmpty() { + logtagsLibName := m.Name() + "_logtags" + logtagsSrcs = bazel.MakeLabelList([]bazel.Label{{Label: ":" + logtagsLibName}}) + ctx.CreateBazelTargetModule( + bazel.BazelTargetModuleProperties{ + Rule_class: "event_log_tags", + Bzl_load_location: "//build/make/tools:event_log_tags.bzl", + }, + android.CommonAttributes{Name: logtagsLibName}, + &eventLogTagsAttributes{ + Srcs: srcPartitions[logtagSrcPartition], + }, + ) + } + javaSrcs.Append(bazel.MakeLabelListAttribute(logtagsSrcs)) + var javacopts []string if m.properties.Javacflags != nil { javacopts = append(javacopts, m.properties.Javacflags...) @@ -2071,7 +2096,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) } commonAttrs := &javaCommonAttributes{ - Srcs: srcPartitions[javaSrcPartition], + Srcs: javaSrcs, Plugins: bazel.MakeLabelListAttribute( android.BazelLabelForModuleDeps(ctx, m.properties.Plugins), ),