diff options
author | Glavo <zjx001202@126.com> | 2019-11-29 03:30:24 +0800 |
---|---|---|
committer | Glavo <zjx001202@126.com> | 2019-11-29 03:30:24 +0800 |
commit | 4c0edeb4fc0ab85bae4bd41dfbf6a0089dfbf467 (patch) | |
tree | f6441f077f76e3788728eed65f8aeb08540d8324 /src/main/java/org/glavo/javah/RuntimeClassPath.java | |
parent | b664cbe6a72f551d12b5868ed4b48927bacf941e (diff) | |
download | gjavah-4c0edeb4fc0ab85bae4bd41dfbf6a0089dfbf467.tar.gz gjavah-4c0edeb4fc0ab85bae4bd41dfbf6a0089dfbf467.tar.bz2 gjavah-4c0edeb4fc0ab85bae4bd41dfbf6a0089dfbf467.zip |
update
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; + } + } +} |