< prev index next >

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

Print this page

        

*** 81,100 **** private final List<String> libraryNames; // The list of library paths private final List<String> libraryPaths; // The list of library paths for link checks private final List<String> linkCheckPaths; // Symbol patterns to be excluded private final List<Pattern> excludeSymbols; // generate static forwarder class or not? private boolean genStaticForwarder; final PrintWriter out; final PrintWriter err; private Predicate<String> symChecker; ! private Predicate<String> symFilter; private final Parser parser; private final static String defaultPkg = "jextract.dump"; final Logger logger = Logger.getLogger(getClass().getPackage().getName()); --- 81,103 ---- private final List<String> libraryNames; // The list of library paths private final List<String> libraryPaths; // The list of library paths for link checks private final List<String> linkCheckPaths; + // Symbol patterns to be included + private final List<Pattern> includeSymbols; // Symbol patterns to be excluded private final List<Pattern> excludeSymbols; // generate static forwarder class or not? private boolean genStaticForwarder; final PrintWriter out; final PrintWriter err; private Predicate<String> symChecker; ! private Predicate<String> includeSymFilter; ! private Predicate<String> excludeSymFilter; private final Parser parser; private final static String defaultPkg = "jextract.dump"; final Logger logger = Logger.getLogger(getClass().getPackage().getName());
*** 106,115 **** --- 109,119 ---- this.clangArgs = new ArrayList<>(); this.sources = new TreeSet<>(); this.libraryNames = new ArrayList<>(); this.libraryPaths = new ArrayList<>(); this.linkCheckPaths = new ArrayList<>(); + this.includeSymbols = new ArrayList<>(); this.excludeSymbols = new ArrayList<>(); this.parser = new Parser(out, err, Main.INCLUDE_MACROS); this.out = out; this.err = err; }
*** 140,149 **** --- 144,157 ---- void addLinkCheckPath(String path) { linkCheckPaths.add(path); } + void addIncludeSymbols(String pattern) { + includeSymbols.add(Pattern.compile(pattern)); + } + void addExcludeSymbols(String pattern) { excludeSymbols.add(Pattern.compile(pattern)); } void setGenStaticForwarder(boolean flag) {
*** 216,239 **** private boolean isSymbolFound(String name) { return symChecker == null? true : symChecker.test(name); } ! private void initSymFilter() { if (!excludeSymbols.isEmpty()) { Pattern[] pats = excludeSymbols.toArray(new Pattern[0]); ! symFilter = name -> { return Arrays.stream(pats).filter(pat -> pat.matcher(name).matches()). findFirst().isPresent(); }; } else { ! symFilter = null; } } private boolean isSymbolExcluded(String name) { ! return symFilter == null? false : symFilter.test(name); } /** * Setup a package name for a given folder. * --- 224,261 ---- private boolean isSymbolFound(String name) { return symChecker == null? true : symChecker.test(name); } ! private void initSymFilters() { ! if (!includeSymbols.isEmpty()) { ! Pattern[] pats = includeSymbols.toArray(new Pattern[0]); ! includeSymFilter = name -> { ! return Arrays.stream(pats).filter(pat -> pat.matcher(name).matches()). ! findFirst().isPresent(); ! }; ! } else { ! includeSymFilter = null; ! } ! if (!excludeSymbols.isEmpty()) { Pattern[] pats = excludeSymbols.toArray(new Pattern[0]); ! excludeSymFilter = name -> { return Arrays.stream(pats).filter(pat -> pat.matcher(name).matches()). findFirst().isPresent(); }; } else { ! excludeSymFilter = null; } } + private boolean isSymbolIncluded(String name) { + return includeSymFilter == null? true : includeSymFilter.test(name); + } + private boolean isSymbolExcluded(String name) { ! return excludeSymFilter == null? false : excludeSymFilter.test(name); } /** * Setup a package name for a given folder. *
*** 388,398 **** new AsmCodeFactoryExt(this, header) : new AsmCodeFactory(this, header)); } private boolean symbolFilter(Tree tree) { String name = tree.name(); ! if (isSymbolExcluded(name)) { return false; } // check for function symbols in libraries & warn missing symbols if (tree instanceof FunctionTree && !isSymbolFound(name)) { --- 410,420 ---- new AsmCodeFactoryExt(this, header) : new AsmCodeFactory(this, header)); } private boolean symbolFilter(Tree tree) { String name = tree.name(); ! if (!isSymbolIncluded(name) || isSymbolExcluded(name)) { return false; } // check for function symbols in libraries & warn missing symbols if (tree instanceof FunctionTree && !isSymbolFound(name)) {
*** 404,414 **** return true; } public void parse(Function<HeaderFile, AsmCodeFactory> fn) { initSymChecker(); ! initSymFilter(); List<HeaderTree> headers = parser.parse(sources, clangArgs); processHeaders(headers, fn); } --- 426,436 ---- return true; } public void parse(Function<HeaderFile, AsmCodeFactory> fn) { initSymChecker(); ! initSymFilters(); List<HeaderTree> headers = parser.parse(sources, clangArgs); processHeaders(headers, fn); }
< prev index next >