Add java_sdk_library in bootclasspath_fragment contents to sdk

A java_library specified in a bootclasspath_fragment's contents
property will be automatically added to the sdk containing that
bootclasspath_fragment. Previously, if that was attempted with a
java_sdk_library it would be added to the sdk as if it was a normal
java_boot_libs which would prevent the sdk from containing the
API specific artifact such as current.txt files and stub libraries
and sources.

This change fixes that and adds a java_sdk_library as a java_sdk_libs
module.

Bug: 177892522
Test: m nothing
Change-Id: Ided57b846ce5b8940c7e898c786fd77602582ea2
This commit is contained in:
Paul Duffin 2021-05-12 13:46:54 +01:00
parent 17ccf26748
commit a10bd3c127
2 changed files with 76 additions and 9 deletions

View File

@ -61,8 +61,14 @@ func (b bootclasspathFragmentContentDependencyTag) ReplaceSourceWithPrebuilt() b
}
// SdkMemberType causes dependencies added with this tag to be automatically added to the sdk as if
// they were specified using java_boot_libs.
func (b bootclasspathFragmentContentDependencyTag) SdkMemberType(_ android.Module) android.SdkMemberType {
// they were specified using java_boot_libs or java_sdk_libs.
func (b bootclasspathFragmentContentDependencyTag) SdkMemberType(child android.Module) android.SdkMemberType {
// If the module is a java_sdk_library then treat it as if it was specified in the java_sdk_libs
// property, otherwise treat if it was specified in the java_boot_libs property.
if javaSdkLibrarySdkMemberType.IsInstance(child) {
return javaSdkLibrarySdkMemberType
}
return javaBootLibsSdkMemberType
}

View File

@ -165,21 +165,33 @@ func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
prepareForSdkTestWithJava,
java.PrepareForTestWithJavaDefaultModules,
java.PrepareForTestWithJavaSdkLibraryFiles,
java.FixtureWithLastReleaseApis("mysdklibrary", "mycoreplatform"),
java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
android.FixtureWithRootAndroidBp(`
sdk {
name: "mysdk",
bootclasspath_fragments: ["mybootclasspathfragment"],
java_sdk_libs: ["mysdklibrary", "mycoreplatform"],
java_sdk_libs: [
// This is not strictly needed as it should be automatically added to the sdk_snapshot as
// a java_sdk_libs module because it is used in the mybootclasspathfragment's
// api.stub_libs property. However, it is specified here to ensure that duplicates are
// correctly deduped.
"mysdklibrary",
],
}
bootclasspath_fragment {
name: "mybootclasspathfragment",
contents: ["mybootlib"],
contents: [
// This should be automatically added to the sdk_snapshot as a java_boot_libs module.
"mybootlib",
// This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
"myothersdklibrary",
],
api: {
stub_libs: ["mysdklibrary"],
},
core_platform_api: {
// This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
stub_libs: ["mycoreplatform"],
},
}
@ -199,6 +211,13 @@ func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
public: {enabled: true},
}
java_sdk_library {
name: "myothersdklibrary",
srcs: ["Test.java"],
compile_dex: true,
public: {enabled: true},
}
java_sdk_library {
name: "mycoreplatform",
srcs: ["Test.java"],
@ -217,7 +236,10 @@ prebuilt_bootclasspath_fragment {
prefer: false,
visibility: ["//visibility:public"],
apex_available: ["//apex_available:platform"],
contents: ["mybootlib"],
contents: [
"mybootlib",
"myothersdklibrary",
],
api: {
stub_libs: ["mysdklibrary"],
},
@ -234,6 +256,22 @@ java_import {
jars: ["java/mybootlib.jar"],
}
java_sdk_library_import {
name: "myothersdklibrary",
prefer: false,
visibility: ["//visibility:public"],
apex_available: ["//apex_available:platform"],
shared_library: true,
compile_dex: true,
public: {
jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
current_api: "sdk_library/public/myothersdklibrary.txt",
removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
sdk_version: "current",
},
}
java_sdk_library_import {
name: "mysdklibrary",
prefer: false,
@ -265,7 +303,7 @@ java_sdk_library_import {
sdk_version: "current",
},
}
`),
`),
checkVersionedAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.
@ -274,7 +312,10 @@ prebuilt_bootclasspath_fragment {
sdk_member_name: "mybootclasspathfragment",
visibility: ["//visibility:public"],
apex_available: ["//apex_available:platform"],
contents: ["mysdk_mybootlib@current"],
contents: [
"mysdk_mybootlib@current",
"mysdk_myothersdklibrary@current",
],
api: {
stub_libs: ["mysdk_mysdklibrary@current"],
},
@ -291,6 +332,22 @@ java_import {
jars: ["java/mybootlib.jar"],
}
java_sdk_library_import {
name: "mysdk_myothersdklibrary@current",
sdk_member_name: "myothersdklibrary",
visibility: ["//visibility:public"],
apex_available: ["//apex_available:platform"],
shared_library: true,
compile_dex: true,
public: {
jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
current_api: "sdk_library/public/myothersdklibrary.txt",
removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
sdk_version: "current",
},
}
java_sdk_library_import {
name: "mysdk_mysdklibrary@current",
sdk_member_name: "mysdklibrary",
@ -329,13 +386,17 @@ sdk_snapshot {
bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
java_boot_libs: ["mysdk_mybootlib@current"],
java_sdk_libs: [
"mysdk_myothersdklibrary@current",
"mysdk_mysdklibrary@current",
"mysdk_mycoreplatform@current",
],
}
`),
`),
checkAllCopyRules(`
.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt