Refactor Jar resource access and entry list
* Add getResource(), extracted from getClass() * Remove getInputStream(), using getResource() instead * Change getEntries() to getEntryNames(), hiding JarEntry * Store filename for getFilename()
This commit is contained in:
parent
61270b1259
commit
9fcbdce6e7
@ -56,6 +56,7 @@ public class Jar {
|
||||
|
||||
private final JarFile file;
|
||||
private final String main;
|
||||
private final String filename;
|
||||
private final Set<String> contains = new HashSet<String>();
|
||||
private final Map<String, ClassNode> classes = new HashMap<String, ClassNode>();
|
||||
|
||||
@ -63,13 +64,20 @@ public class Jar {
|
||||
return contains.contains(clazz) ? true : getClass(clazz) != null;
|
||||
}
|
||||
|
||||
public InputStream getResource(String name) throws IOException {
|
||||
ZipEntry e = file.getEntry(name);
|
||||
|
||||
return e == null ? null : file.getInputStream(e);
|
||||
}
|
||||
|
||||
public InputStream getClass(String clazz) {
|
||||
try {
|
||||
ZipEntry e = file.getEntry(clazz + ".class");
|
||||
if (e != null) {
|
||||
InputStream inputStream = getResource(clazz + ".class");
|
||||
|
||||
if (inputStream != null) {
|
||||
contains.add(clazz);
|
||||
}
|
||||
return e == null ? null : file.getInputStream(e);
|
||||
return inputStream;
|
||||
} catch (IOException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
@ -102,15 +110,22 @@ public class Jar {
|
||||
}
|
||||
|
||||
public String getFilename() {
|
||||
return file.getName();
|
||||
return filename;
|
||||
}
|
||||
|
||||
public InputStream getInputStream(ZipEntry zipEntry) throws IOException {
|
||||
return file.getInputStream(zipEntry);
|
||||
/**
|
||||
* Get all filenames in the jar (preserves archive order)
|
||||
*/
|
||||
public List<String> getEntryNames() {
|
||||
List<String> entryNames = new ArrayList<String>();
|
||||
|
||||
for (Enumeration<JarEntry> entr = file.entries(); entr.hasMoreElements();) {
|
||||
JarEntry entry = entr.nextElement();
|
||||
|
||||
entryNames.add(entry.getName());
|
||||
}
|
||||
|
||||
public Enumeration<JarEntry> getEntries() {
|
||||
return file.entries();
|
||||
return entryNames;
|
||||
}
|
||||
|
||||
public static Jar init(String jar) throws IOException {
|
||||
@ -120,6 +135,7 @@ public class Jar {
|
||||
|
||||
public static Jar init(File file) throws IOException {
|
||||
JarFile jarFile = new JarFile(file);
|
||||
String filename = file.getName();
|
||||
String main = null;
|
||||
|
||||
Manifest manifest = jarFile.getManifest();
|
||||
@ -133,6 +149,6 @@ public class Jar {
|
||||
}
|
||||
}
|
||||
|
||||
return new Jar(jarFile, main);
|
||||
return new Jar(jarFile, main, filename);
|
||||
}
|
||||
}
|
||||
|
@ -105,12 +105,12 @@ public class JarRemapper extends Remapper {
|
||||
if (jar == null) {
|
||||
return;
|
||||
}
|
||||
for (Enumeration<JarEntry> entr = jar.getEntries(); entr.hasMoreElements();) {
|
||||
JarEntry entry = entr.nextElement();
|
||||
for (String name : jar.getEntryNames()) {
|
||||
|
||||
InputStream is = jar.getInputStream(entry);
|
||||
JarEntry entry;
|
||||
|
||||
InputStream is = jar.getResource(name);
|
||||
try {
|
||||
String name = entry.getName();
|
||||
byte[] data;
|
||||
if (name.endsWith(".class")) {
|
||||
name = name.substring(0, name.length() - CLASS_LEN);
|
||||
|
Loading…
Reference in New Issue
Block a user