27 import java.lang.reflect.Field; 28 import java.lang.reflect.Method; 29 import java.net.URL; 30 import java.net.URLClassLoader; 31 import java.nio.file.FileVisitResult; 32 import java.nio.file.Files; 33 import java.nio.file.Path; 34 import java.nio.file.Paths; 35 import java.nio.file.SimpleFileVisitor; 36 import java.nio.file.attribute.BasicFileAttributes; 37 import java.util.Objects; 38 import java.util.spi.ToolProvider; 39 40 import static org.testng.Assert.assertEquals; 41 import static org.testng.Assert.assertNotEquals; 42 import static org.testng.Assert.assertNotNull; 43 import static org.testng.Assert.assertTrue; 44 import static org.testng.Assert.fail; 45 46 public class JextractToolRunner { 47 // utilities to avoid hard-coding generated class, interface names everywhere 48 public static String headerInterfaceName(String filename) { 49 int ext = filename.lastIndexOf('.'); 50 return ext != -1 ? filename.substring(0, ext) : filename; 51 } 52 53 public static String staticForwarderName(String filename) { 54 return headerInterfaceName(filename) + "_h"; 55 } 56 57 // struct, enum and callback interfaces are nested types of header interface 58 public static String structInterfaceName(String headerFileName, String structName) { 59 return headerInterfaceName(headerFileName) + "$" + structName; 60 } 61 62 public static String enumInterfaceName(String headerFileName, String enumName) { 63 return headerInterfaceName(headerFileName) + "$" + enumName; 64 } 65 66 public static String callbackInterfaceName(String headerFileName, String fiName) { 67 return headerInterfaceName(headerFileName) + "$" + fiName; 68 } 69 70 public static String enumForwarderInterfaceName(String headerFileName, String enumName) { 71 return staticForwarderName(headerFileName) + "$" + enumName; 72 } 73 74 private static final ToolProvider JEXTRACT_TOOL = ToolProvider.findFirst("jextract") | 27 import java.lang.reflect.Field; 28 import java.lang.reflect.Method; 29 import java.net.URL; 30 import java.net.URLClassLoader; 31 import java.nio.file.FileVisitResult; 32 import java.nio.file.Files; 33 import java.nio.file.Path; 34 import java.nio.file.Paths; 35 import java.nio.file.SimpleFileVisitor; 36 import java.nio.file.attribute.BasicFileAttributes; 37 import java.util.Objects; 38 import java.util.spi.ToolProvider; 39 40 import static org.testng.Assert.assertEquals; 41 import static org.testng.Assert.assertNotEquals; 42 import static org.testng.Assert.assertNotNull; 43 import static org.testng.Assert.assertTrue; 44 import static org.testng.Assert.fail; 45 46 public class JextractToolRunner { 47 private static String safeFileName(String filename) { 48 int ext = filename.lastIndexOf('.'); 49 return ext != -1 ? filename.substring(0, ext) : filename; 50 } 51 52 // utilities to avoid hard-coding generated class, interface names everywhere 53 public static String headerInterfaceName(String filename) { 54 return safeFileName(filename) + "_h"; 55 } 56 57 public static String staticForwarderName(String filename) { 58 return safeFileName(filename) + "_lib"; 59 } 60 61 // struct, enum and callback interfaces are nested types of header interface 62 public static String structInterfaceName(String headerFileName, String structName) { 63 return headerInterfaceName(headerFileName) + "$" + structName; 64 } 65 66 public static String enumInterfaceName(String headerFileName, String enumName) { 67 return headerInterfaceName(headerFileName) + "$" + enumName; 68 } 69 70 public static String callbackInterfaceName(String headerFileName, String fiName) { 71 return headerInterfaceName(headerFileName) + "$" + fiName; 72 } 73 74 public static String enumForwarderInterfaceName(String headerFileName, String enumName) { 75 return staticForwarderName(headerFileName) + "$" + enumName; 76 } 77 78 private static final ToolProvider JEXTRACT_TOOL = ToolProvider.findFirst("jextract") |