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