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
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)