def parse_line(self, line: str): """Parses a line of jdeps output. The assumed format of the line starts with 'name_1 -> name_2'. """ parsed = line.split() if len(parsed) <= 3: return if parsed[2] == 'not' and parsed[3] == 'found': return if parsed[1] != '->': return dep_from = parsed[0] dep_to = parsed[2] if not class_is_interesting(dep_from): return if not class_is_interesting(dep_to): return key_from, nested_from = class_dependency.split_nested_class_from_key( dep_from) key_to, nested_to = class_dependency.split_nested_class_from_key( dep_to) self._graph.add_node_if_new(key_from) self._graph.add_node_if_new(key_to) if key_from != key_to: # Skip self-edges (class-nested dependency) self._graph.add_edge_if_new(key_from, key_to) if nested_from is not None: self._graph.add_nested_class_to_key(key_from, nested_from) if nested_to is not None: self._graph.add_nested_class_to_key(key_from, nested_to)
def test_split_nested_class_from_key_numeric(self): """Tests that the helper works for common jdeps output (numeric class name, used for private nested classes)""" part1, part2 = class_dependency.split_nested_class_from_key( 'pkg.name.class$1') self.assertEqual(part1, 'pkg.name.class') self.assertEqual(part2, '1')
def test_split_nested_class_from_key_numeric(self): """Tests that the helper works for jdeps' formatting of nested classes. Specifically, jdeps uses a numeric name for private nested classes. """ part1, part2 = class_dependency.split_nested_class_from_key( 'pkg.name.class$1') self.assertEqual(part1, 'pkg.name.class') self.assertEqual(part2, '1')
def test_split_nested_class_from_key_lambda(self): """Tests that the helper works for jdeps' formatting of lambdas.""" part1, part2 = class_dependency.split_nested_class_from_key( 'pkg.name.class$$Lambda$1') self.assertEqual(part1, 'pkg.name.class') self.assertEqual(part2, '$Lambda$1')
def test_split_nested_class_from_key_no_nested(self): """Tests that the helper works when there is no nested class.""" part1, part2 = class_dependency.split_nested_class_from_key( 'pkg.name.class') self.assertEqual(part1, 'pkg.name.class') self.assertIsNone(part2)
def test_split_nested_class_from_key(self): """Tests that the helper correctly splits out a nested class.""" part1, part2 = class_dependency.split_nested_class_from_key( 'pkg.name.class$nested') self.assertEqual(part1, 'pkg.name.class') self.assertEqual(part2, 'nested')
def test_split_nested_class_from_key_lambda(self): """Tests that the helper works for common jdeps output (lambdas)""" part1, part2 = class_dependency.split_nested_class_from_key( 'pkg.name.class$$Lambda$1') self.assertEqual(part1, 'pkg.name.class') self.assertEqual(part2, '$Lambda$1')