From 520917af9d71b11bcc2179f1dfdb6c701dffe044 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Fri, 13 May 2022 13:01:59 +0000 Subject: [PATCH] Pass pointer to dependencyTag instead of copying struct A follow up change will add some more fields to the tag which will make passing the struct around by value will get more expensive. Switching to pointers will make this slightly more efficient. Changing the type of the tags from dependencyTag to *dependencyTag broke a test. Rather than simply patch the test and then maybe have to patch it again in the next change this adds a a String() method that will insulate the test from being affected by changes in the dependencyTag contents. Bug: 232401814 Test: m nothing Change-Id: I23da742ebffb74ef3b9b68f772519ceb38332f5f --- apex/apex.go | 42 +++++++++++++++++++++++------------------- apex/apex_test.go | 2 +- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index 80db7c251..83dd8b04e 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -608,30 +608,34 @@ type dependencyTag struct { sourceOnly bool } -func (d dependencyTag) ReplaceSourceWithPrebuilt() bool { +func (d *dependencyTag) String() string { + return fmt.Sprintf("apex.dependencyTag{%q}", d.name) +} + +func (d *dependencyTag) ReplaceSourceWithPrebuilt() bool { return !d.sourceOnly } var _ android.ReplaceSourceWithPrebuilt = &dependencyTag{} var ( - androidAppTag = dependencyTag{name: "androidApp", payload: true} - bpfTag = dependencyTag{name: "bpf", payload: true} - certificateTag = dependencyTag{name: "certificate"} - executableTag = dependencyTag{name: "executable", payload: true} - fsTag = dependencyTag{name: "filesystem", payload: true} - bcpfTag = dependencyTag{name: "bootclasspathFragment", payload: true, sourceOnly: true} - sscpfTag = dependencyTag{name: "systemserverclasspathFragment", payload: true, sourceOnly: true} - compatConfigTag = dependencyTag{name: "compatConfig", payload: true, sourceOnly: true} - javaLibTag = dependencyTag{name: "javaLib", payload: true} - jniLibTag = dependencyTag{name: "jniLib", payload: true} - keyTag = dependencyTag{name: "key"} - prebuiltTag = dependencyTag{name: "prebuilt", payload: true} - rroTag = dependencyTag{name: "rro", payload: true} - sharedLibTag = dependencyTag{name: "sharedLib", payload: true} - testForTag = dependencyTag{name: "test for"} - testTag = dependencyTag{name: "test", payload: true} - shBinaryTag = dependencyTag{name: "shBinary", payload: true} + androidAppTag = &dependencyTag{name: "androidApp", payload: true} + bpfTag = &dependencyTag{name: "bpf", payload: true} + certificateTag = &dependencyTag{name: "certificate"} + executableTag = &dependencyTag{name: "executable", payload: true} + fsTag = &dependencyTag{name: "filesystem", payload: true} + bcpfTag = &dependencyTag{name: "bootclasspathFragment", payload: true, sourceOnly: true} + sscpfTag = &dependencyTag{name: "systemserverclasspathFragment", payload: true, sourceOnly: true} + compatConfigTag = &dependencyTag{name: "compatConfig", payload: true, sourceOnly: true} + javaLibTag = &dependencyTag{name: "javaLib", payload: true} + jniLibTag = &dependencyTag{name: "jniLib", payload: true} + keyTag = &dependencyTag{name: "key"} + prebuiltTag = &dependencyTag{name: "prebuilt", payload: true} + rroTag = &dependencyTag{name: "rro", payload: true} + sharedLibTag = &dependencyTag{name: "sharedLib", payload: true} + testForTag = &dependencyTag{name: "test for"} + testTag = &dependencyTag{name: "test", payload: true} + shBinaryTag = &dependencyTag{name: "shBinary", payload: true} ) // TODO(jiyong): shorten this function signature @@ -1752,7 +1756,7 @@ func (a *apexBundle) WalkPayloadDeps(ctx android.ModuleContext, do android.Paylo if _, ok := depTag.(android.ExcludeFromApexContentsTag); ok { return false } - if dt, ok := depTag.(dependencyTag); ok && !dt.payload { + if dt, ok := depTag.(*dependencyTag); ok && !dt.payload { return false } diff --git a/apex/apex_test.go b/apex/apex_test.go index bcb55af87..07372a308 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -5931,7 +5931,7 @@ func TestApexAvailable_DirectDep(t *testing.T) { func TestApexAvailable_IndirectDep(t *testing.T) { // libbbaz is an indirect dep testApexError(t, `requires "libbaz" that doesn't list the APEX under 'apex_available'.\n\nDependency path: -.*via tag apex\.dependencyTag.*name:sharedLib.* +.*via tag apex\.dependencyTag\{"sharedLib"\} .*-> libfoo.*link:shared.* .*via tag cc\.libraryDependencyTag.*Kind:sharedLibraryDependency.* .*-> libbar.*link:shared.*