Path 1: 241 calls (0.93)

FunctionDef (239) AsyncFunctionDef (2)

FunctionDef (239) AsyncFunctionDef (2)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )
            

Path 2: 5 calls (0.02)

FunctionDef (5)

FunctionDef (5)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )
            

Path 3: 4 calls (0.02)

FunctionDef (4)

FunctionDef (4)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )
            

Path 4: 4 calls (0.02)

FunctionDef (4)

FunctionDef (4)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )
            

Path 5: 2 calls (0.01)

FunctionDef (2)

FunctionDef (2)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )
            

Path 6: 2 calls (0.01)

FunctionDef (2)

FunctionDef (2)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )
            

Path 7: 1 calls (0.0)

FunctionDef (1)

AsyncFunctionDef (1)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )
            

Path 8: 1 calls (0.0)

AsyncFunctionDef (1)

FunctionDef (1)

1def _check_invalid_overridden_method(
2        self,
3        function_node: nodes.FunctionDef,
4        parent_function_node: nodes.FunctionDef,
5    ) -> None:
6        parent_is_property = decorated_with_property(
7            parent_function_node
8        ) or is_property_setter_or_deleter(parent_function_node)
9        current_is_property = decorated_with_property(
10            function_node
11        ) or is_property_setter_or_deleter(function_node)
12        if parent_is_property and not current_is_property:
13            self.add_message(
14                "invalid-overridden-method",
15                args=(function_node.name, "property", function_node.type),
16                node=function_node,
17            )
18        elif not parent_is_property and current_is_property:
19            self.add_message(
20                "invalid-overridden-method",
21                args=(function_node.name, "method", "property"),
22                node=function_node,
23            )
24
25        parent_is_async = isinstance(parent_function_node, nodes.AsyncFunctionDef)
26        current_is_async = isinstance(function_node, nodes.AsyncFunctionDef)
27
28        if parent_is_async and not current_is_async:
29            self.add_message(
30                "invalid-overridden-method",
31                args=(function_node.name, "async", "non-async"),
32                node=function_node,
33            )
34
35        elif not parent_is_async and current_is_async:
36            self.add_message(
37                "invalid-overridden-method",
38                args=(function_node.name, "non-async", "async"),
39                node=function_node,
40            )
41        if (
42            decorated_with(parent_function_node, ["typing.final"])
43            or uninferable_final_decorators(parent_function_node.decorators)
44        ) and self._py38_plus:
45            self.add_message(
46                "overridden-final-method",
47                args=(function_node.name, parent_function_node.parent.frame().name),
48                node=function_node,
49            )