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
This commit is contained in:
Jihoon Kang 2023-04-24 18:06:44 +00:00
parent d0f9520414
commit 7e9e20e389
2 changed files with 37 additions and 1 deletions

View file

@ -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")
}

View file

@ -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.