< prev index next >

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

Print this page

        

@@ -41,21 +41,16 @@
 
 /**
  * This visitor filters variable, function, macro trees
  * based on a Tree Predicate initialized.
  */
-final class TreeFilter extends SimpleTreeVisitor<Tree, Void>
+abstract 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;
+        return filter(tree)? tree : null;
     }
 
     @Override
     public HeaderTree transform(HeaderTree ht) {
         return (HeaderTree)ht.accept(this, null);

@@ -88,26 +83,34 @@
     @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;
         }
 
-        Parser p = new Parser(true);
+        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(nameFilter);
+        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 >