Merge "signature_trie: Avoid unnecessary wrapping and unwrapping of values"
This commit is contained in:
@@ -45,7 +45,9 @@ class Node:
|
||||
:return: A list of iterables of all the values associated with
|
||||
this node and its children.
|
||||
"""
|
||||
raise NotImplementedError("Please Implement this method")
|
||||
values = []
|
||||
self.append_values(values, selector)
|
||||
return values
|
||||
|
||||
def append_values(self, values, selector):
|
||||
"""Append the values associated with this node and its children.
|
||||
@@ -313,12 +315,8 @@ class InteriorNode(Node):
|
||||
node = node.nodes[element]
|
||||
else:
|
||||
return []
|
||||
return chain.from_iterable(node.values(selector))
|
||||
|
||||
def values(self, selector):
|
||||
values = []
|
||||
self.append_values(values, selector)
|
||||
return values
|
||||
return node.values(selector)
|
||||
|
||||
def append_values(self, values, selector):
|
||||
for key, node in self.nodes.items():
|
||||
@@ -336,11 +334,8 @@ class Leaf(Node):
|
||||
# The value associated with this leaf.
|
||||
value: typing.Any
|
||||
|
||||
def values(self, selector):
|
||||
return [[self.value]]
|
||||
|
||||
def append_values(self, values, selector):
|
||||
values.append([self.value])
|
||||
values.append(self.value)
|
||||
|
||||
def child_nodes(self):
|
||||
return []
|
||||
|
@@ -150,6 +150,27 @@ class TestSignatureToElements(unittest.TestCase):
|
||||
str(context.exception))
|
||||
|
||||
|
||||
class TestValues(unittest.TestCase):
|
||||
def test_add_then_get(self):
|
||||
trie = signature_trie()
|
||||
trie.add("La/b/C;->l()", 1)
|
||||
trie.add("La/b/C$D;->m()", "A")
|
||||
trie.add("La/b/C$D;->n()", {})
|
||||
|
||||
package_a_node = next(iter(trie.child_nodes()))
|
||||
self.assertEqual("package", package_a_node.type)
|
||||
self.assertEqual("a", package_a_node.selector)
|
||||
|
||||
package_b_node = next(iter(package_a_node.child_nodes()))
|
||||
self.assertEqual("package", package_b_node.type)
|
||||
self.assertEqual("a/b", package_b_node.selector)
|
||||
|
||||
class_c_node = next(iter(package_b_node.child_nodes()))
|
||||
self.assertEqual("class", class_c_node.type)
|
||||
self.assertEqual("a/b/C", class_c_node.selector)
|
||||
|
||||
self.assertEqual([1, "A", {}], class_c_node.values(lambda _: True))
|
||||
|
||||
class TestGetMatchingRows(unittest.TestCase):
|
||||
extractInput = """
|
||||
Ljava/lang/Character$UnicodeScript;->of(I)Ljava/lang/Character$UnicodeScript;
|
||||
|
Reference in New Issue
Block a user