< prev index next >

src/jdk.jextract/share/classes/com/sun/tools/jextract/TreeFilter.java

Print this page

        

*** 41,61 **** /** * This visitor filters variable, function, macro trees * based on a Tree Predicate initialized. */ ! final class TreeFilter extends SimpleTreeVisitor<Tree, Void> implements TreePhase { private final TreeMaker treeMaker = new TreeMaker(); - private final Predicate<Tree> filter; - - TreeFilter(Predicate<Tree> filter) { - this.filter = filter; - } private Tree filterTree(Tree tree) { ! return filter.test(tree)? tree : null; } @Override public HeaderTree transform(HeaderTree ht) { return (HeaderTree)ht.accept(this, null); --- 41,56 ---- /** * This visitor filters variable, function, macro trees * based on a Tree Predicate initialized. */ ! abstract class TreeFilter extends SimpleTreeVisitor<Tree, Void> implements TreePhase { private final TreeMaker treeMaker = new TreeMaker(); private Tree filterTree(Tree tree) { ! return filter(tree)? tree : null; } @Override public HeaderTree transform(HeaderTree ht) { return (HeaderTree)ht.accept(this, null);
*** 88,113 **** @Override public Tree visitVar(VarTree vt, Void v) { return filterTree(vt); } // test main to manually check this visitor // Usage: <header-file> [<regex-for-symbols-to-include>] public static void main(String[] args) { if (args.length == 0) { System.err.println("Expected a header file"); return; } ! Parser p = new Parser(true); List<Path> paths = List.of(Paths.get(args[0])); Path builtinInc = Paths.get(System.getProperty("java.home"), "conf", "jextract"); List<String> clangArgs = List.of("-I" + builtinInc); List<HeaderTree> headers = p.parse(paths, clangArgs); TreePrinter printer = new TreePrinter(); Predicate<Tree> nameFilter = args.length > 1? t->t.name().matches(args[1]) : t->true; ! TreeFilter filter = new TreeFilter(nameFilter); for (HeaderTree ht : headers) { filter.transform(ht).accept(printer, null); } } } --- 83,116 ---- @Override public Tree visitVar(VarTree vt, Void v) { return filterTree(vt); } + abstract boolean filter(Tree tree); + // test main to manually check this visitor // Usage: <header-file> [<regex-for-symbols-to-include>] public static void main(String[] args) { if (args.length == 0) { System.err.println("Expected a header file"); return; } ! Context context = new Context(); ! Parser p = new Parser(context, true); List<Path> paths = List.of(Paths.get(args[0])); Path builtinInc = Paths.get(System.getProperty("java.home"), "conf", "jextract"); List<String> clangArgs = List.of("-I" + builtinInc); List<HeaderTree> headers = p.parse(paths, clangArgs); TreePrinter printer = new TreePrinter(); Predicate<Tree> nameFilter = args.length > 1? t->t.name().matches(args[1]) : t->true; ! TreeFilter filter = new TreeFilter() { ! @Override ! boolean filter(Tree tree) { ! return nameFilter.test(tree); ! } ! }; for (HeaderTree ht : headers) { filter.transform(ht).accept(printer, null); } } }
< prev index next >