Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 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')
Ejemplo n.º 3
0
    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')
Ejemplo n.º 4
0
 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')
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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')
Ejemplo n.º 7
0
 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')