aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/glavo/javah/RuntimeClassPath.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/glavo/javah/RuntimeClassPath.java')
-rw-r--r--src/main/java/org/glavo/javah/RuntimeClassPath.java41
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;
+ }
+ }
+}