diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index bcb98f7d1..ece68b2c1 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -994,6 +994,7 @@ var ( "tradefed-result-interfaces", "tradefed-device-build-interfaces", "tradefed-invocation-interfaces", + "tradefed-lib-core", } Bp2buildModuleTypeAlwaysConvertList = []string{ diff --git a/bp2build/java_proto_conversion_test.go b/bp2build/java_proto_conversion_test.go index 4e96efe5e..cd8997838 100644 --- a/bp2build/java_proto_conversion_test.go +++ b/bp2build/java_proto_conversion_test.go @@ -193,3 +193,46 @@ java_library_static { }, }) } + +func TestJavaProtoPlugin(t *testing.T) { + runJavaProtoTestCase(t, Bp2buildTestCase{ + Description: "java_library proto plugin", + StubbedBuildDefinitions: []string{"protoc-gen-test-plugin"}, + Blueprint: `java_library_static { + name: "java-protos", + srcs: ["a.proto"], + proto: { + plugin: "test-plugin", + }, + sdk_version: "current", +} + +java_library_static { + name: "protoc-gen-test-plugin", +} +`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{ + "srcs": `["a.proto"]`, + }), + MakeBazelTarget( + "java_lite_proto_library", + "java-protos_java_proto_lite", + AttrNameToString{ + "deps": `[":java-protos_proto"]`, + "plugin": `":protoc-gen-test-plugin"`, + "sdk_version": `"current"`, + }), + MakeBazelTarget("java_library", "java-protos", AttrNameToString{ + "exports": `[":java-protos_java_proto_lite"]`, + "sdk_version": `"current"`, + }), + MakeNeverlinkDuplicateTargetWithAttrs( + "java_library", + "java-protos", + AttrNameToString{ + "sdk_version": `"current"`, + }), + }, + }) +} diff --git a/java/proto.go b/java/proto.go index 48adadcc9..c88d3d7fc 100644 --- a/java/proto.go +++ b/java/proto.go @@ -159,6 +159,8 @@ type protoAttributes struct { Sdk_version bazel.StringAttribute Java_version bazel.StringAttribute + + Plugin bazel.LabelAttribute } func bp2buildProto(ctx android.Bp2buildMutatorContext, m *Module, protoSrcs bazel.LabelListAttribute, AdditionalProtoDeps bazel.LabelListAttribute) *bazel.Label { @@ -189,12 +191,18 @@ func bp2buildProto(ctx android.Bp2buildMutatorContext, m *Module, protoSrcs baze ctx.PropertyErrorf("proto.type", "cannot handle conversion at this time: %q", typ) } + plugin := bazel.LabelAttribute{} + if m.protoProperties.Proto.Plugin != nil { + plugin.SetValue(android.BazelLabelForModuleDepSingle(ctx, "protoc-gen-"+*m.protoProperties.Proto.Plugin)) + } + protoAttrs := &protoAttributes{ Deps: bazel.MakeLabelListAttribute(protoInfo.Proto_libs), Transitive_deps: bazel.MakeLabelListAttribute(protoInfo.Transitive_proto_libs), Additional_proto_deps: AdditionalProtoDeps, Java_version: bazel.StringAttribute{Value: m.properties.Java_version}, Sdk_version: bazel.StringAttribute{Value: m.deviceProperties.Sdk_version}, + Plugin: plugin, } name := m.Name() + suffix