summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Thiakil2018-07-10 21:18:54 +0800
committerGravatar Thiakil2018-07-10 21:18:54 +0800
commit0809cffbade803caa34ad99f5409997f50d57b8b (patch)
treea4fa172e6e22495848b9eb7693a868aa59cf43c0
parentfix giving obf classes a name not removing them from the panel (diff)
downloadenigma-0809cffbade803caa34ad99f5409997f50d57b8b.tar.gz
enigma-0809cffbade803caa34ad99f5409997f50d57b8b.tar.xz
enigma-0809cffbade803caa34ad99f5409997f50d57b8b.zip
buffer the ParsedJar class entry inputstream, allow use with a jarinputstream
-rw-r--r--src/main/java/cuchaz/enigma/analysis/ParsedJar.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/ParsedJar.java b/src/main/java/cuchaz/enigma/analysis/ParsedJar.java
index fae58f80..55f2141b 100644
--- a/src/main/java/cuchaz/enigma/analysis/ParsedJar.java
+++ b/src/main/java/cuchaz/enigma/analysis/ParsedJar.java
@@ -15,12 +15,14 @@ import cuchaz.enigma.mapping.entry.ClassEntry;
15import org.objectweb.asm.ClassReader; 15import org.objectweb.asm.ClassReader;
16import org.objectweb.asm.tree.ClassNode; 16import org.objectweb.asm.tree.ClassNode;
17 17
18import java.io.BufferedInputStream;
18import java.io.IOException; 19import java.io.IOException;
19import java.io.InputStream; 20import java.io.InputStream;
20import java.util.*; 21import java.util.*;
21import java.util.function.Consumer; 22import java.util.function.Consumer;
22import java.util.jar.JarEntry; 23import java.util.jar.JarEntry;
23import java.util.jar.JarFile; 24import java.util.jar.JarFile;
25import java.util.jar.JarInputStream;
24 26
25public class ParsedJar { 27public class ParsedJar {
26 private final Map<String, ClassNode> nodes = new LinkedHashMap<>(); 28 private final Map<String, ClassNode> nodes = new LinkedHashMap<>();
@@ -33,7 +35,7 @@ public class ParsedJar {
33 JarEntry entry = entries.nextElement(); 35 JarEntry entry = entries.nextElement();
34 // is this a class file? 36 // is this a class file?
35 if (entry.getName().endsWith(".class")) { 37 if (entry.getName().endsWith(".class")) {
36 try (InputStream input = jar.getInputStream(entry)) { 38 try (InputStream input = new BufferedInputStream(jar.getInputStream(entry))) {
37 // read the ClassNode from the jar 39 // read the ClassNode from the jar
38 ClassReader reader = new ClassReader(input); 40 ClassReader reader = new ClassReader(input);
39 ClassNode node = new ClassNode(); 41 ClassNode node = new ClassNode();
@@ -48,6 +50,27 @@ public class ParsedJar {
48 } 50 }
49 } 51 }
50 52
53 public ParsedJar(JarInputStream jar) throws IOException {
54 try {
55 // get the jar entries that correspond to classes
56 JarEntry entry;
57 while ((entry = jar.getNextJarEntry()) != null) {
58 // is this a class file?
59 if (entry.getName().endsWith(".class")) {
60 // read the ClassNode from the jar
61 ClassReader reader = new ClassReader(jar);
62 ClassNode node = new ClassNode();
63 reader.accept(node, 0);
64 String path = entry.getName().substring(0, entry.getName().length() - ".class".length());
65 nodes.put(path, node);
66 jar.closeEntry();
67 }
68 }
69 } finally {
70 jar.close();
71 }
72 }
73
51 public void visit(Consumer<ClassNode> visitor) { 74 public void visit(Consumer<ClassNode> visitor) {
52 for (ClassNode node : nodes.values()) { 75 for (ClassNode node : nodes.values()) {
53 visitor.accept(node); 76 visitor.accept(node);