< prev index next >

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

Print this page




  33 
  34 public class HeaderResolver {
  35 
  36     // The folder path mapping to package name
  37     private final Map<Path, String> pkgMap = new LinkedHashMap<>();
  38     // The header file parsed
  39     private final Map<Path, HeaderFile> headerMap = new LinkedHashMap<>();
  40     private final Log log;
  41     private final Path builtinHeader;
  42 
  43     public HeaderResolver(Context ctx) {
  44         this.log = ctx.log;
  45         usePackageForFolder(Context.getBuiltinHeadersDir(), "clang_support");
  46         this.builtinHeader = Context.getBuiltinHeaderFile();
  47         ctx.sources.stream()
  48                 .map(Path::getParent)
  49                 .forEach(p -> usePackageForFolder(p, ctx.options.targetPackage));
  50         ctx.options.pkgMappings.forEach(this::usePackageForFolder);
  51     }
  52 
  53     public String headerInterfaceName(String filename) {
  54         int ext = filename.lastIndexOf('.');
  55         String name = ext != -1 ? filename.substring(0, ext) : filename;
  56         return Utils.toClassName(name);
  57     }
  58 
  59     public String staticForwarderName(String filename) {
  60         return headerInterfaceName(filename) + "_h";




  61     }
  62 
  63     private void usePackageForFolder(Path folder, String pkg) {
  64         folder = folder.normalize().toAbsolutePath();
  65         String existing = pkgMap.putIfAbsent(folder, pkg);
  66         final String finalFolder = (null == folder) ? "all folders not configured" : folder.toString();
  67         if (existing == null) {
  68             log.print(Level.CONFIG, () -> "Package " + pkg + " is selected for " + finalFolder);
  69         } else {
  70             String pkgName = pkg.isEmpty() ? "<default-package>" : pkg;
  71             log.print(Level.WARNING, () -> "Package " + existing + " had been selected for " + finalFolder + ", request to use " + pkgName + " is ignored.");
  72         }
  73     }
  74 
  75     // start of header file resolution logic
  76 
  77     static class HeaderPath {
  78         final String pkg;
  79         final String headerCls;
  80         final String forwarderCls;




  33 
  34 public class HeaderResolver {
  35 
  36     // The folder path mapping to package name
  37     private final Map<Path, String> pkgMap = new LinkedHashMap<>();
  38     // The header file parsed
  39     private final Map<Path, HeaderFile> headerMap = new LinkedHashMap<>();
  40     private final Log log;
  41     private final Path builtinHeader;
  42 
  43     public HeaderResolver(Context ctx) {
  44         this.log = ctx.log;
  45         usePackageForFolder(Context.getBuiltinHeadersDir(), "clang_support");
  46         this.builtinHeader = Context.getBuiltinHeaderFile();
  47         ctx.sources.stream()
  48                 .map(Path::getParent)
  49                 .forEach(p -> usePackageForFolder(p, ctx.options.targetPackage));
  50         ctx.options.pkgMappings.forEach(this::usePackageForFolder);
  51     }
  52 
  53     private static String safeFileName(String filename) {
  54         int ext = filename.lastIndexOf('.');
  55         String name = ext != -1 ? filename.substring(0, ext) : filename;
  56         return Utils.toClassName(name);
  57     }
  58 
  59     public static String headerInterfaceName(String filename) {
  60         return safeFileName(filename) + "_h";
  61     }
  62 
  63     public static String staticForwarderName(String filename) {
  64         return safeFileName(filename) + "_lib";
  65     }
  66 
  67     private void usePackageForFolder(Path folder, String pkg) {
  68         folder = folder.normalize().toAbsolutePath();
  69         String existing = pkgMap.putIfAbsent(folder, pkg);
  70         final String finalFolder = (null == folder) ? "all folders not configured" : folder.toString();
  71         if (existing == null) {
  72             log.print(Level.CONFIG, () -> "Package " + pkg + " is selected for " + finalFolder);
  73         } else {
  74             String pkgName = pkg.isEmpty() ? "<default-package>" : pkg;
  75             log.print(Level.WARNING, () -> "Package " + existing + " had been selected for " + finalFolder + ", request to use " + pkgName + " is ignored.");
  76         }
  77     }
  78 
  79     // start of header file resolution logic
  80 
  81     static class HeaderPath {
  82         final String pkg;
  83         final String headerCls;
  84         final String forwarderCls;


< prev index next >