Use trie to store monolithic hidden API flags
Previously, a simple map from dex signature to the flags was used to store the monolithic hidden API flags. This change replaces that with a trie that uses packages and class names extracted from the signature to map from the signature to the flags. The signature is broken down into pieces consisting of package names, class names and the remaining member signature. They are used in turn to navigate through nodes in the trie to a Leaf that contains the flags associated with the signature. The flags can be retrieved from the trie in a number of ways: * Using the complete signature to retrieve the flags for a single member. * Using a class name to retrieve the flags for all the members in a class and any nested classes. * Using a package wildcard to retrieve the flags for all the members in the classes in that package. * Using a recursive package wildcard to retrieve the flags for all the members in the classes in that package and nested packages. This will allow a bootclasspath_fragment to select a subset of the monolithic flags to compare against itself without specifying the signatures of every member of that set. Before creating the trie an attempt was made to compute the subset by iterating over all the signatures in the monolithic flags and matching against a regular expression created from the patterns but that was too slow. It took minutes to run whereas using the simple map or the trie only takes a few seconds. Bug: 194063708 Test: atest --host verify_overlaps_test Change-Id: I36f5e319d3e7d62dd34305de1eec990a93cb3a89
Loading
Please register or sign in to comment