diff --git a/android/bazel.go b/android/bazel.go index b4e7ae558..0c65945b0 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -544,7 +544,17 @@ func (b *BazelModuleBase) shouldConvertWithBp2build(ctx shouldConvertModuleConte } moduleName := moduleNameWithPossibleOverride(ctx, module, p.moduleName) + // use "prebuilt_" + original module name as the java_import(_host) module name, + // to avoid the failure that a normal module and a prebuilt module with + // the same name are both allowlisted. This cannot be applied to all the *_import + // module types. For example, android_library_import has to use original module + // name here otherwise the *-nodeps targets cannot be handled correctly. + if strings.HasPrefix(p.moduleType, "java_import") { + moduleName = module.Name() + } + allowlist := ctx.Config().Bp2buildPackageConfig + moduleNameAllowed := allowlist.moduleAlwaysConvert[moduleName] moduleTypeAllowed := allowlist.moduleTypeAlwaysConvert[p.moduleType] allowlistConvert := moduleNameAllowed || moduleTypeAllowed diff --git a/bp2build/java_import_conversion_test.go b/bp2build/java_import_conversion_test.go index 5661620e2..d9910afb9 100644 --- a/bp2build/java_import_conversion_test.go +++ b/bp2build/java_import_conversion_test.go @@ -21,6 +21,13 @@ import ( "testing" ) +func runJavaImportTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) { + t.Helper() + (&tc).ModuleTypeUnderTest = "java_import" + (&tc).ModuleTypeUnderTestFactory = java.ImportFactory + RunBp2BuildTestCase(t, registrationCtxFunc, tc) +} + func runJavaImportTestCase(t *testing.T, tc Bp2buildTestCase) { t.Helper() RunBp2BuildTestCase(t, registerJavaImportModuleTypes, tc) @@ -120,3 +127,31 @@ java_import_host { }), }}) } + +func TestJavaImportSameNameAsJavaLibrary(t *testing.T) { + runJavaImportTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{ + Description: "java_import has the same name as other package java_library's", + Filesystem: map[string]string{ + "foo/bar/Android.bp": simpleModule("java_library", "test_lib"), + "test.jar": "", + }, + Blueprint: `java_import { + name: "test_lib", + jars: ["test.jar"], + bazel_module: { bp2build_available: true }, +} +`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("java_import", "test_lib", AttrNameToString{ + "jars": `["test.jar"]`, + }), + MakeBazelTarget("java_library", "test_lib-neverlink", AttrNameToString{ + "exports": `[":test_lib"]`, + "neverlink": `True`, + "sdk_version": `"none"`, + }), + }, + }, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("java_library", java.LibraryFactory) + }) +} diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go index 426dffa2b..ad0ec655a 100644 --- a/bp2build/java_library_conversion_test.go +++ b/bp2build/java_library_conversion_test.go @@ -1041,3 +1041,28 @@ filegroup { ctx.RegisterModuleType("filegroup", android.FileGroupFactory) }) } + +func TestJavaLibrarySameNameAsPrebuilt(t *testing.T) { + runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{ + Description: "java_library and prebuilt module have the same name", + Filesystem: map[string]string{ + "foo/bar/Android.bp": simpleModule("java_import", "test_lib"), + }, + Blueprint: `java_library { + name: "test_lib", + srcs: ["a.java"], + sdk_version: "current", + bazel_module: { bp2build_available: true }, +} +`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("java_library", "test_lib", AttrNameToString{ + "srcs": `["a.java"]`, + "sdk_version": `"current"`, + }), + MakeNeverlinkDuplicateTarget("java_library", "test_lib"), + }, + }, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("java_import", java.ImportFactory) + }) +}