diff options
author | Glavo <zjx001202@126.com> | 2019-12-06 03:42:00 +0800 |
---|---|---|
committer | Glavo <zjx001202@126.com> | 2019-12-06 03:42:00 +0800 |
commit | e48c0668029849af07d1966729c5b703e89b1d00 (patch) | |
tree | fec378e2c6e52d86e601f0df45ba13728003fa2b /src/main/java/org/glavo/javah/RuntimeSearchPath.java | |
parent | 6fd5804e3f2c337839efcf5c10426faed1d8b1af (diff) | |
download | gjavah-e48c0668029849af07d1966729c5b703e89b1d00.tar.gz gjavah-e48c0668029849af07d1966729c5b703e89b1d00.tar.bz2 gjavah-e48c0668029849af07d1966729c5b703e89b1d00.zip |
update
Diffstat (limited to 'src/main/java/org/glavo/javah/RuntimeSearchPath.java')
-rw-r--r-- | src/main/java/org/glavo/javah/RuntimeSearchPath.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/main/java/org/glavo/javah/RuntimeSearchPath.java b/src/main/java/org/glavo/javah/RuntimeSearchPath.java new file mode 100644 index 0000000..fdfe717 --- /dev/null +++ b/src/main/java/org/glavo/javah/RuntimeSearchPath.java @@ -0,0 +1,44 @@ +package org.glavo.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); + } +} |