From 7e9e20e389d065e73c26f4b2dc54333292bc931c Mon Sep 17 00:00:00 2001 From: Jihoon Kang Date: Mon, 24 Apr 2023 18:06:44 +0000 Subject: [PATCH] Fix bootclasspath_fragment build failure during from-text stub build This change enables bootclasspath_fragment module to be correctly built during from-text stub build by android-non-updatable module to be interpreted as its java_api_library equivalent. Test: go test ./java Bug: 279460171 Change-Id: Ia6b60edcb60782977cc59855f1cf5d3a46e9f682 --- java/bootclasspath_fragment_test.go | 36 +++++++++++++++++++++++++++++ java/hiddenapi_modular.go | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/java/bootclasspath_fragment_test.go b/java/bootclasspath_fragment_test.go index 2541f14ff..9bdef749b 100644 --- a/java/bootclasspath_fragment_test.go +++ b/java/bootclasspath_fragment_test.go @@ -432,3 +432,39 @@ func TestBootclasspathFragment_Test(t *testing.T) { fragment = result.Module("a_test_fragment", "android_common").(*BootclasspathFragmentModule) android.AssertBoolEquals(t, "is a test fragment by type", true, fragment.isTestFragment()) } + +func TestBootclassFragment_LinkTextStub(t *testing.T) { + result := android.GroupFixturePreparers( + prepareForJavaTest, + prepareForTestWithBootclasspathFragment, + PrepareForTestWithJavaSdkLibraryFiles, + FixtureWithLastReleaseApis("mysdklibrary"), + android.FixtureModifyConfig(func(config android.Config) { + config.SetBuildFromTextStub(true) + }), + ).RunTestWithBp(t, ` + bootclasspath_fragment { + name: "myfragment", + contents: ["mysdklibrary"], + hidden_api: {split_packages: ["*"]}, + additional_stubs: [ + "android-non-updatable", + ], + } + java_sdk_library { + name: "mysdklibrary", + srcs: ["a.java"], + shared_library: false, + public: {enabled: true}, + system: {enabled: true}, + } + `) + + fragment := result.ModuleForTests("myfragment", "android_common") + ruleCommand := fragment.Rule("modularHiddenAPIStubFlagsFile").RuleParams.Command + android.AssertStringDoesContain(t, "Command expected to contain library as dependency stub dex", + ruleCommand, "--dependency-stub-dex=out/soong/.intermediates/default/java/android-non-updatable.stubs.module_lib.from-text/android_common/dex/android-non-updatable.stubs.module_lib.from-text.jar") + android.AssertStringDoesNotContain(t, + "Command not expected to contain multiple api_library as dependency stub dex", ruleCommand, + "--dependency-stub-dex=out/soong/.intermediates/default/java/android-non-updatable.stubs.from-text/android_common/dex/android-non-updatable.stubs.from-text.jar") +} diff --git a/java/hiddenapi_modular.go b/java/hiddenapi_modular.go index 96e084a20..e54275b88 100644 --- a/java/hiddenapi_modular.go +++ b/java/hiddenapi_modular.go @@ -647,7 +647,7 @@ func (s StubDexJarsByModule) addStubDexJar(ctx android.ModuleContext, module and // public version is provided by the art.module.public.api module. In those cases it is necessary // to treat all those modules as they were the same name, otherwise it will result in multiple // definitions of a single class being passed to hidden API processing which will cause an error. - if name == scope.nonUpdatablePrebuiltModule || name == scope.nonUpdatableSourceModule { + if name == scope.nonUpdatablePrebuiltModule || name == android.JavaApiLibraryName(ctx.Config(), scope.nonUpdatableSourceModule) { // Treat all *android-non-updatable* modules as if they were part of an android-non-updatable // java_sdk_library. // TODO(b/192067200): Remove once android-non-updatable is a java_sdk_library or equivalent.