diff options
Diffstat (limited to 'plugin/src/main/java/ch/jodersky/sbt/jni/javah/RuntimeSearchPath.java')
-rw-r--r-- | plugin/src/main/java/ch/jodersky/sbt/jni/javah/RuntimeSearchPath.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/plugin/src/main/java/ch/jodersky/sbt/jni/javah/RuntimeSearchPath.java b/plugin/src/main/java/ch/jodersky/sbt/jni/javah/RuntimeSearchPath.java new file mode 100644 index 0000000..a43759c --- /dev/null +++ b/plugin/src/main/java/ch/jodersky/sbt/jni/javah/RuntimeSearchPath.java @@ -0,0 +1,44 @@ +package ch.jodersky.sbt.jni.javah; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.*; +import java.util.Collections; +import java.util.Objects; + +public class RuntimeSearchPath implements SearchPath { + public static final RuntimeSearchPath INSTANCE = new RuntimeSearchPath(); + + private RuntimeSearchPath() { + + } + + @Override + public Path search(ClassName name) { + Objects.requireNonNull(name); + URI uri = null; + try { + Class<?> cls = Class.forName(name.className()); + uri = cls.getResource(name.simpleName() + ".class").toURI(); + return Paths.get(uri); + } catch (FileSystemNotFoundException ex) { + if (uri == null) { + return null; + } + try { + return FileSystems.newFileSystem(uri, Collections.emptyMap()).getPath("/", name.relativePath()); + } catch (IOException | NullPointerException ignored) { + } + } catch (Exception ignored) { + } + return null; + } + + public static Path searchClass(String name) { + return INSTANCE.search(name); + } + + public static Path searchClass(ClassName name) { + return INSTANCE.search(name); + } +} |