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