From 18b29e3c9dbc1c210b6571d74d881c5209b6b7e0 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Thu, 25 Jul 2013 13:31:53 -0400 Subject: [PATCH] parser_util: add `ANode#collect_annotations_by_name` Signed-off-by: Jean Privat --- src/parser_util.nit | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/parser_util.nit b/src/parser_util.nit index f9ea467..8ca59e8 100644 --- a/src/parser_util.nit +++ b/src/parser_util.nit @@ -92,6 +92,15 @@ redef class ANode v.enter_visit(self) return v.result end + + # Return an array of node that are annotated + # The attached node can be retrieved by two invocation of parent + fun collect_annotations_by_name(name: String): Array[AAnnotation] + do + var v = new CollectAnnotationsByNameVisitor(name) + v.enter_visit(self) + return v.result + end end private class CollectTokensByTextVisitor @@ -106,3 +115,16 @@ private class CollectTokensByTextVisitor if node isa Token and node.text == text then result.add(node) end end + +private class CollectAnnotationsByNameVisitor + super Visitor + var name: String + init(name: String) do self.name = name + var result = new Array[AAnnotation] + redef fun visit(node) + do + if node == null then return + node.visit_all(self) + if node isa AAnnotation and node.n_atid.n_id.text == name then result.add(node) + end +end -- 1.7.9.5