diff options
author | Paul Duffin <paulduffin@google.com> | 2020-03-02 11:33:02 +0000 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2020-04-22 12:51:33 +0100 |
commit | d76209b690540d1a5f626ad329db09874375d89a (patch) | |
tree | 333750376e8f1a9597d1a6f5d88ec240e484e0b6 /java/java.go | |
parent | 33cedcc4219b6181f8b52f8cea18ac8b555fd9c7 (diff) |
Refactor java_library/java_test snapshot processing
Adds support for handling the common arch to the sdk module type
snapshot generation code and then refactors the java_library
and java_test snapshot processing to take advantage of that.
Bug: 150451422
Bug: 153306490
Test: m nothing
Merged-In: If746f375f1c4288ab6b67c7d216593b70258b043
Change-Id: If746f375f1c4288ab6b67c7d216593b70258b043
Diffstat (limited to 'java/java.go')
-rw-r--r-- | java/java.go | 113 |
1 files changed, 70 insertions, 43 deletions
diff --git a/java/java.go b/java/java.go index e4b51c00c..fbb195510 100644 --- a/java/java.go +++ b/java/java.go @@ -1866,12 +1866,12 @@ const ( ) // path to the jar file of a java library. Relative to <sdk_root>/<api_dir> -func sdkSnapshotFilePathForJar(member android.SdkMember) string { - return sdkSnapshotFilePathForMember(member, jarFileSuffix) +func sdkSnapshotFilePathForJar(name string) string { + return sdkSnapshotFilePathForMember(name, jarFileSuffix) } -func sdkSnapshotFilePathForMember(member android.SdkMember, suffix string) string { - return filepath.Join(javaDir, member.Name()+suffix) +func sdkSnapshotFilePathForMember(name string, suffix string) string { + return filepath.Join(javaDir, name+suffix) } type librarySdkMemberType struct { @@ -1891,32 +1891,46 @@ func (mt *librarySdkMemberType) IsInstance(module android.Module) bool { return ok } -func (mt *librarySdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) { +func (mt *librarySdkMemberType) AddPrebuiltModule(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) android.BpModule { + return builder.AddPrebuiltModule(member, "java_import") +} - variants := member.Variants() - if len(variants) != 1 { - sdkModuleContext.ModuleErrorf("sdk contains %d variants of member %q but only one is allowed", len(variants), member.Name()) - for _, variant := range variants { - sdkModuleContext.ModuleErrorf(" %q", variant) - } - } - variant := variants[0] +func (mt *librarySdkMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties { + return &librarySdkMemberProperties{memberType: mt} +} + +type librarySdkMemberProperties struct { + android.SdkMemberPropertiesBase + + memberType *librarySdkMemberType + + library *Library + jarToExport android.Path +} + +func (p *librarySdkMemberProperties) PopulateFromVariant(variant android.SdkAware) { j := variant.(*Library) - exportedJar := mt.jarToExportGetter(j) - snapshotRelativeJavaLibPath := sdkSnapshotFilePathForJar(member) - builder.CopyToSnapshot(exportedJar, snapshotRelativeJavaLibPath) + p.library = j + p.jarToExport = p.memberType.jarToExportGetter(j) +} + +func (p *librarySdkMemberProperties) AddToPropertySet(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, propertySet android.BpPropertySet) { + if p.jarToExport != nil { + exportedJar := p.jarToExport + snapshotRelativeJavaLibPath := sdkSnapshotFilePathForJar(p.library.Name()) + builder.CopyToSnapshot(exportedJar, snapshotRelativeJavaLibPath) - for _, dir := range j.AidlIncludeDirs() { - // TODO(jiyong): copy parcelable declarations only - aidlFiles, _ := sdkModuleContext.GlobWithDeps(dir.String()+"/**/*.aidl", nil) - for _, file := range aidlFiles { - builder.CopyToSnapshot(android.PathForSource(sdkModuleContext, file), filepath.Join(aidlIncludeDir, file)) + for _, dir := range p.library.AidlIncludeDirs() { + // TODO(jiyong): copy parcelable declarations only + aidlFiles, _ := sdkModuleContext.GlobWithDeps(dir.String()+"/**/*.aidl", nil) + for _, file := range aidlFiles { + builder.CopyToSnapshot(android.PathForSource(sdkModuleContext, file), filepath.Join(aidlIncludeDir, file)) + } } - } - module := builder.AddPrebuiltModule(member, "java_import") - module.AddProperty("jars", []string{snapshotRelativeJavaLibPath}) + propertySet.AddProperty("jars", []string{snapshotRelativeJavaLibPath}) + } } var javaHeaderLibsSdkMemberType android.SdkMemberType = &librarySdkMemberType{ @@ -2082,31 +2096,44 @@ func (mt *testSdkMemberType) IsInstance(module android.Module) bool { return ok } -func (mt *testSdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) { - variants := member.Variants() - if len(variants) != 1 { - sdkModuleContext.ModuleErrorf("sdk contains %d variants of member %q but only one is allowed", len(variants), member.Name()) - for _, variant := range variants { - sdkModuleContext.ModuleErrorf(" %q", variant) - } - } - variant := variants[0] - j := variant.(*Test) +func (mt *testSdkMemberType) AddPrebuiltModule(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) android.BpModule { + return builder.AddPrebuiltModule(member, "java_test_import") +} + +func (mt *testSdkMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties { + return &testSdkMemberProperties{} +} + +type testSdkMemberProperties struct { + android.SdkMemberPropertiesBase - implementationJars := j.ImplementationJars() + test *Test + jarToExport android.Path +} + +func (p *testSdkMemberProperties) PopulateFromVariant(variant android.SdkAware) { + test := variant.(*Test) + + implementationJars := test.ImplementationJars() if len(implementationJars) != 1 { - panic(fmt.Errorf("there must be only one implementation jar from %q", j.Name())) + panic(fmt.Errorf("there must be only one implementation jar from %q", test.Name())) } - snapshotRelativeJavaLibPath := sdkSnapshotFilePathForJar(member) - builder.CopyToSnapshot(implementationJars[0], snapshotRelativeJavaLibPath) + p.test = test + p.jarToExport = implementationJars[0] +} + +func (p *testSdkMemberProperties) AddToPropertySet(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, propertySet android.BpPropertySet) { + if p.jarToExport != nil { + snapshotRelativeJavaLibPath := sdkSnapshotFilePathForJar(p.test.Name()) + builder.CopyToSnapshot(p.jarToExport, snapshotRelativeJavaLibPath) - snapshotRelativeTestConfigPath := sdkSnapshotFilePathForMember(member, testConfigSuffix) - builder.CopyToSnapshot(j.testConfig, snapshotRelativeTestConfigPath) + snapshotRelativeTestConfigPath := sdkSnapshotFilePathForMember(p.test.Name(), testConfigSuffix) + builder.CopyToSnapshot(p.test.testConfig, snapshotRelativeTestConfigPath) - module := builder.AddPrebuiltModule(member, "java_test_import") - module.AddProperty("jars", []string{snapshotRelativeJavaLibPath}) - module.AddProperty("test_config", snapshotRelativeTestConfigPath) + propertySet.AddProperty("jars", []string{snapshotRelativeJavaLibPath}) + propertySet.AddProperty("test_config", snapshotRelativeTestConfigPath) + } } // java_test builds a and links sources into a `.jar` file for the device, and possibly for the host as well, and |