Refactor GetRefDumpDirStem to avoid excessive arguments passing

The arguments required by function get_ref_dump_dir_stem() would be
carried all the way to get_ref_dump_dir_stem(). In this CL, the logic
of get_ref_dump_dir_stem() would be wrapped into a class so that the
other functions can be cleaner.

Test: $ANDROID_BUILD_TOP/development/vndk/tools/header-checker/utils/create_reference_dumps.py --llndk -l libvndksupport -l libbinder_ndk -l libprocinfo
Bug: 238828401
Change-Id: If1ccc3d9de0408c5e1ef252412630df341d38e14
diff --git a/vndk/tools/header-checker/utils/create_reference_dumps.py b/vndk/tools/header-checker/utils/create_reference_dumps.py
index a774aad..a658090 100755
--- a/vndk/tools/header-checker/utils/create_reference_dumps.py
+++ b/vndk/tools/header-checker/utils/create_reference_dumps.py
@@ -20,6 +20,22 @@
 SOONG_DIR = os.path.join(AOSP_DIR, 'out', 'soong', '.intermediates')
 
 
+class GetRefDumpDirStem:
+    def __init__(self, ref_dump_dir, chosen_vndk_version,
+                 chosen_platform_version, binder_bitness):
+        self.ref_dump_dir = ref_dump_dir
+        self.chosen_vndk_version = chosen_vndk_version
+        self.chosen_platform_version = chosen_platform_version
+        self.binder_bitness = binder_bitness
+
+    def __call__(self, category, arch):
+        version_stem = (self.chosen_vndk_version
+                        if category == 'vndk'
+                        else self.chosen_platform_version)
+        return os.path.join(self.ref_dump_dir, category, version_stem,
+                            self.binder_bitness, arch)
+
+
 def choose_vndk_version(version, platform_vndk_version, board_vndk_version):
     if version is None:
         # This logic must be in sync with the logic for reference ABI dumps
@@ -38,12 +54,6 @@
         make_tree(product, variant)
 
 
-def get_ref_dump_dir_stem(ref_dump_dir, category, chosen_vndk_version,
-                          chosen_platform_version, binder_bitness, arch):
-    version = chosen_vndk_version if category == 'vndk' else chosen_platform_version
-    return os.path.join(ref_dump_dir, category, version, binder_bitness, arch)
-
-
 def find_and_remove_path(root_path, file_name=None):
     if file_name is not None:
         root_path = os.path.join(root_path, 'source-based', file_name)
@@ -56,14 +66,11 @@
             shutil.rmtree(root_path)
 
 
-def remove_references_for_all_arches(ref_dump_dir, chosen_vndk_version,
-                                     chosen_platform_version, binder_bitness,
-                                     targets, libs):
+def remove_references_for_all_arches(get_ref_dump_dir_stem, targets, libs):
     for target in targets:
         for category in ('ndk', 'platform', 'vndk'):
-            dir_to_remove = get_ref_dump_dir_stem(
-                ref_dump_dir, category, chosen_vndk_version, chosen_platform_version,
-                binder_bitness, target.get_arch_str())
+            dir_to_remove = get_ref_dump_dir_stem(category,
+                                                  target.get_arch_str())
             if libs:
                 for lib in libs:
                     find_and_remove_path(dir_to_remove,
@@ -84,24 +91,22 @@
     raise ValueError(tag + 'is not a known tag.')
 
 
-def find_and_copy_lib_lsdumps(ref_dump_dir, chosen_vndk_version, chosen_platform_version,
-                              binder_bitness, target, libs, lsdump_paths,
-                              compress):
+def find_and_copy_lib_lsdumps(get_ref_dump_dir_stem, target, libs,
+                              lsdump_paths, compress):
     arch_lsdump_paths = find_lib_lsdumps(lsdump_paths, libs, target)
 
     num_created = 0
     for tag, path in arch_lsdump_paths:
-        ref_dump_dir_stem = get_ref_dump_dir_stem(
-            ref_dump_dir, tag_to_dir_name(tag), chosen_vndk_version, chosen_platform_version,
-            binder_bitness, target.get_arch_str())
+        ref_dump_dir_stem = get_ref_dump_dir_stem(tag_to_dir_name(tag),
+                                                  target.get_arch_str())
         copy_reference_dump(
             path, os.path.join(ref_dump_dir_stem, 'source-based'), compress)
         num_created += 1
     return num_created
 
 
-def create_source_abi_reference_dumps(args, chosen_vndk_version, chosen_platform_version,
-                                      binder_bitness, lsdump_paths, targets):
+def create_source_abi_reference_dumps(args, get_ref_dump_dir_stem,
+                                      lsdump_paths, targets):
     num_libs_copied = 0
     for target in targets:
         assert target.primary_arch != ''
@@ -109,8 +114,8 @@
               f'primary arch: {target.primary_arch}')
 
         num_libs_copied += find_and_copy_lib_lsdumps(
-            args.ref_dump_dir, chosen_vndk_version, chosen_platform_version, binder_bitness,
-            target, args.libs, lsdump_paths, args.compress)
+            get_ref_dump_dir_stem, target, args.libs, lsdump_paths,
+            args.compress)
     return num_libs_copied
 
 
@@ -136,20 +141,24 @@
 
         chosen_vndk_version = choose_vndk_version(
             args.version, platform_vndk_version, board_vndk_version)
-        # chosen_vndk_version is expected to be the finalized PLATFORM_SDK_VERSION
-        # if the codename is REL.
+        # chosen_vndk_version is expected to be the finalized
+        # PLATFORM_SDK_VERSION if the codename is REL.
         chosen_platform_version = (platform_sdk_version
                                    if platform_version_codename == 'REL'
                                    else 'current')
 
+        get_ref_dump_dir_stem = GetRefDumpDirStem(args.ref_dump_dir,
+                                                  chosen_vndk_version,
+                                                  chosen_platform_version,
+                                                  binder_bitness)
+
         targets = [t for t in (Target(True, product), Target(False, product))
                    if t.arch]
         # Remove reference ABI dumps specified in `args.libs` (or remove all of
         # them if none of them are specified) so that we may build these
         # libraries successfully.
-        remove_references_for_all_arches(
-            args.ref_dump_dir, chosen_vndk_version, chosen_platform_version, binder_bitness,
-            targets, args.libs)
+        remove_references_for_all_arches(get_ref_dump_dir_stem, targets,
+                                         args.libs)
 
         if not args.no_make_lib:
             # Build all the specified libs, or build `findlsdumps` if no libs
@@ -162,8 +171,7 @@
                                          build=False)
 
         num_processed += create_source_abi_reference_dumps(
-            args, chosen_vndk_version, chosen_platform_version, binder_bitness, lsdump_paths,
-            targets)
+            args, get_ref_dump_dir_stem, lsdump_paths, targets)
 
     return num_processed