diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index 8da82d379..5b77ba97d 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -931,6 +931,7 @@ var ( "java_import", "java_import_host", "java_sdk_library", + "java_sdk_library_import", "license", "linker_config", "sysprop_library", diff --git a/bp2build/Android.bp b/bp2build/Android.bp index b321b38cb..755b7a34a 100644 --- a/bp2build/Android.bp +++ b/bp2build/Android.bp @@ -74,6 +74,8 @@ bootstrap_go_package { "java_library_host_conversion_test.go", "java_plugin_conversion_test.go", "java_proto_conversion_test.go", + "java_sdk_library_conversion_test.go", + "java_sdk_library_import_conversion_test.go", "license_conversion_test.go", "license_kind_conversion_test.go", "linker_config_conversion_test.go", diff --git a/bp2build/java_sdk_library_import_conversion_test.go b/bp2build/java_sdk_library_import_conversion_test.go new file mode 100644 index 000000000..456f87268 --- /dev/null +++ b/bp2build/java_sdk_library_import_conversion_test.go @@ -0,0 +1,84 @@ +// Copyright 2023 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package bp2build + +import ( + "testing" + + "android/soong/java" +) + +func runJavaSdkLibraryImportTestCase(t *testing.T, tc Bp2buildTestCase) { + t.Helper() + RunBp2BuildTestCase(t, java.RegisterSdkLibraryBuildComponents, tc) +} + +func TestJavaSdkLibraryImport(t *testing.T) { + runJavaSdkLibraryImportTestCase(t, Bp2buildTestCase{ + Blueprint: ` +java_sdk_library_import { + name : "foo", + public: { + current_api: "foo_current.txt", + }, + system: { + current_api: "system_foo_current.txt", + }, +} +`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("java_sdk_library", "foo", AttrNameToString{ + "public": `"foo_current.txt"`, + "system": `"system_foo_current.txt"`, + }), + }, + }) +} + +func TestJavaSdkLibraryImportPrebuiltPrefixRemoved(t *testing.T) { + runJavaSdkLibraryImportTestCase(t, Bp2buildTestCase{ + Filesystem: map[string]string{ + "foobar/Android.bp": ` +java_sdk_library { + name: "foo", + srcs: ["**/*.java"], +} +`, + "foobar/api/current.txt": "", + "foobar/api/system-current.txt": "", + "foobar/api/test-current.txt": "", + "foobar/api/removed.txt": "", + "foobar/api/system-removed.txt": "", + "foobar/api/test-removed.txt": "", + }, + Blueprint: ` +java_sdk_library_import { + name : "foo", + public: { + current_api: "foo_current.txt", + }, + system: { + current_api: "system_foo_current.txt", + }, +} +`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("java_sdk_library", "foo", AttrNameToString{ + "public": `"foo_current.txt"`, + "system": `"system_foo_current.txt"`, + }), + }, + }) +} diff --git a/java/sdk_library.go b/java/sdk_library.go index 6349d92f5..e3e2427bc 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -2276,11 +2276,11 @@ func SdkLibraryFactory() android.Module { } type bazelSdkLibraryAttributes struct { - Public bazel.StringAttribute - System bazel.StringAttribute - Test bazel.StringAttribute - Module_lib bazel.StringAttribute - System_server bazel.StringAttribute + Public *bazel.Label + System *bazel.Label + Test *bazel.Label + Module_lib *bazel.Label + System_server *bazel.Label } // java_sdk_library bp2build converter @@ -2290,13 +2290,11 @@ func (module *SdkLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext) return } - nameToAttr := make(map[string]bazel.StringAttribute) + nameToAttr := make(map[string]*bazel.Label) for _, scope := range module.getGeneratedApiScopes(ctx) { - apiSurfaceFile := path.Join(module.getApiDir(), scope.apiFilePrefix+"current.txt") - var scopeStringAttribute bazel.StringAttribute - scopeStringAttribute.SetValue(apiSurfaceFile) - nameToAttr[scope.name] = scopeStringAttribute + apiSurfaceFile := android.BazelLabelForModuleSrcSingle(ctx, path.Join(module.getApiDir(), scope.apiFilePrefix+"current.txt")) + nameToAttr[scope.name] = &apiSurfaceFile } attrs := bazelSdkLibraryAttributes{ @@ -2355,6 +2353,7 @@ type sdkLibraryImportProperties struct { type SdkLibraryImport struct { android.ModuleBase android.DefaultableModuleBase + android.BazelModuleBase prebuilt android.Prebuilt android.ApexModuleBase @@ -2438,6 +2437,7 @@ func sdkLibraryImportFactory() android.Module { android.InitPrebuiltModule(module, &[]string{""}) android.InitApexModule(module) + android.InitBazelModule(module) InitJavaModule(module, android.HostAndDeviceSupported) module.SetDefaultableHook(func(mctx android.DefaultableHookContext) { @@ -2448,6 +2448,33 @@ func sdkLibraryImportFactory() android.Module { return module } +// java_sdk_library bp2build converter +func (i *SdkLibraryImport) ConvertWithBp2build(ctx android.TopDownMutatorContext) { + nameToAttr := make(map[string]*bazel.Label) + + for scope, props := range i.scopeProperties { + if api := proptools.String(props.Current_api); api != "" { + apiSurfaceFile := android.BazelLabelForModuleSrcSingle(ctx, api) + nameToAttr[scope.name] = &apiSurfaceFile + } + } + + attrs := bazelSdkLibraryAttributes{ + Public: nameToAttr["public"], + System: nameToAttr["system"], + Test: nameToAttr["test"], + Module_lib: nameToAttr["module-lib"], + System_server: nameToAttr["system-server"], + } + props := bazel.BazelTargetModuleProperties{ + Rule_class: "java_sdk_library", + Bzl_load_location: "//build/bazel/rules/java:sdk_library.bzl", + } + + name := android.RemoveOptionalPrebuiltPrefix(i.Name()) + ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name}, &attrs) +} + var _ PermittedPackagesForUpdatableBootJars = (*SdkLibraryImport)(nil) func (module *SdkLibraryImport) PermittedPackagesForUpdatableBootJars() []string {