Esempio n. 1
0
    def parameters(self) -> Dict[str, AST]:
        parameters: Dict[str, AST] = {}
        for parameter_node in self.children_with_type(self.root, ASTNodeType.FORMAL_PARAMETER):
            parameter_name_node = next(iter(self.children_with_type(parameter_node, ASTNodeType.STRING)))
            parameter_name = self.get_attr(parameter_name_node, 'string')
            parameters[parameter_name] = AST(dfs_tree(self.tree, parameter_node), parameter_node)

        return parameters
Esempio n. 2
0
def _filter_class_methods_and_fields(class_ast: AST,
                                     allowed_fields_names: Set[str],
                                     allowed_methods_names: Set[str]) -> AST:
    class_declaration = class_ast.get_root()
    allowed_nodes = {class_declaration.node_index}

    for field_declaration in class_declaration.fields:
        if len(allowed_fields_names & set(field_declaration.names)) != 0:
            field_ast = class_ast.get_subtree(field_declaration)
            allowed_nodes.update(node.node_index for node in field_ast)

    for method_declaration in class_declaration.methods:
        if method_declaration.name in allowed_methods_names:
            method_ast = class_ast.get_subtree(method_declaration)
            allowed_nodes.update(node.node_index for node in method_ast)

    return AST(class_ast.tree.subgraph(allowed_nodes),
               class_declaration.node_index)