diff options
Diffstat (limited to 'src/main/java/org/glavo/javah/RuntimeClassPath.java')
-rw-r--r-- | src/main/java/org/glavo/javah/RuntimeClassPath.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main/java/org/glavo/javah/RuntimeClassPath.java b/src/main/java/org/glavo/javah/RuntimeClassPath.java new file mode 100644 index 0000000..c16cfa3 --- /dev/null +++ b/src/main/java/org/glavo/javah/RuntimeClassPath.java @@ -0,0 +1,41 @@ +package org.glavo.javah; + +import java.net.URI; +import java.net.URL; +import java.nio.file.*; + +public class RuntimeClassPath implements SearchPath { + public static final RuntimeClassPath INSTANCE = new RuntimeClassPath(); + + private RuntimeClassPath() { + } + + @Override + @SuppressWarnings("ConstantConditions") + public Path searchClass(String className) { + className = Utils.fullClassNameOf(className); + URI uri = null; + try { + Class<?> cls = Class.forName(className); + URL url = cls.getResource(Utils.simpleNameOf(className) + ".class"); + if (url == null) { + return null; + } + uri = url.toURI(); + return Paths.get(uri); + } catch (FileSystemNotFoundException e) { + try { + FileSystem fs = FileSystems.newFileSystem(uri, null); + Path p = fs.getPath(className.replace('.', '/') + ".class"); + if (Files.isRegularFile(p)) { + return p; + } + return null; + } catch (Exception ex) { + return null; + } + } catch (Exception e) { + return null; + } + } +} |