summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis
diff options
context:
space:
mode:
authorGravatar lclc982016-07-04 18:14:22 +1000
committerGravatar lclc982016-07-04 18:14:22 +1000
commit59e189bef2b5e6d129fb7c2c988ed0b2130e36ac (patch)
tree2b638e60905251de85a4917152d6fc39a4112194 /src/main/java/cuchaz/enigma/analysis
parentFixed Obf Class list order (diff)
downloadenigma-fork-59e189bef2b5e6d129fb7c2c988ed0b2130e36ac.tar.gz
enigma-fork-59e189bef2b5e6d129fb7c2c988ed0b2130e36ac.tar.xz
enigma-fork-59e189bef2b5e6d129fb7c2c988ed0b2130e36ac.zip
Reformat
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/EntryReference.java4
-rw-r--r--src/main/java/cuchaz/enigma/analysis/EntryRenamer.java52
-rw-r--r--src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/JarClassIterator.java8
-rw-r--r--src/main/java/cuchaz/enigma/analysis/JarIndex.java8
-rw-r--r--src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndex.java4
-rw-r--r--src/main/java/cuchaz/enigma/analysis/Token.java4
-rw-r--r--src/main/java/cuchaz/enigma/analysis/TranslationIndex.java41
13 files changed, 11 insertions, 122 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java
index 39ff449..98aa12e 100644
--- a/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java
@@ -23,8 +23,6 @@ import cuchaz.enigma.mapping.Translator;
23 23
24public class BehaviorReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<BehaviorEntry, BehaviorEntry> { 24public class BehaviorReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<BehaviorEntry, BehaviorEntry> {
25 25
26 private static final long serialVersionUID = -3658163700783307520L;
27
28 private Translator m_deobfuscatingTranslator; 26 private Translator m_deobfuscatingTranslator;
29 private BehaviorEntry m_entry; 27 private BehaviorEntry m_entry;
30 private EntryReference<BehaviorEntry, BehaviorEntry> m_reference; 28 private EntryReference<BehaviorEntry, BehaviorEntry> m_reference;
diff --git a/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java b/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
index b1d1dee..f5227bb 100644
--- a/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
@@ -21,8 +21,6 @@ import cuchaz.enigma.mapping.Translator;
21 21
22public class ClassImplementationsTreeNode extends DefaultMutableTreeNode { 22public class ClassImplementationsTreeNode extends DefaultMutableTreeNode {
23 23
24 private static final long serialVersionUID = 3112703459157851912L;
25
26 private Translator deobfuscatingTranslator; 24 private Translator deobfuscatingTranslator;
27 private ClassEntry entry; 25 private ClassEntry entry;
28 26
diff --git a/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
index beac9d5..8a60fc7 100644
--- a/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
@@ -21,8 +21,6 @@ import cuchaz.enigma.mapping.Translator;
21 21
22public class ClassInheritanceTreeNode extends DefaultMutableTreeNode { 22public class ClassInheritanceTreeNode extends DefaultMutableTreeNode {
23 23
24 private static final long serialVersionUID = 4432367405826178490L;
25
26 private Translator deobfuscatingTranslator; 24 private Translator deobfuscatingTranslator;
27 private String obfClassName; 25 private String obfClassName;
28 26
diff --git a/src/main/java/cuchaz/enigma/analysis/EntryReference.java b/src/main/java/cuchaz/enigma/analysis/EntryReference.java
index 6a7a4bf..ad4baf8 100644
--- a/src/main/java/cuchaz/enigma/analysis/EntryReference.java
+++ b/src/main/java/cuchaz/enigma/analysis/EntryReference.java
@@ -13,10 +13,10 @@ package cuchaz.enigma.analysis;
13import java.util.Arrays; 13import java.util.Arrays;
14import java.util.List; 14import java.util.List;
15 15
16import cuchaz.enigma.Util;
17import cuchaz.enigma.mapping.ClassEntry; 16import cuchaz.enigma.mapping.ClassEntry;
18import cuchaz.enigma.mapping.ConstructorEntry; 17import cuchaz.enigma.mapping.ConstructorEntry;
19import cuchaz.enigma.mapping.Entry; 18import cuchaz.enigma.mapping.Entry;
19import cuchaz.enigma.utils.Utils;
20 20
21public class EntryReference<E extends Entry, C extends Entry> { 21public class EntryReference<E extends Entry, C extends Entry> {
22 22
@@ -84,7 +84,7 @@ public class EntryReference<E extends Entry, C extends Entry> {
84 @Override 84 @Override
85 public int hashCode() { 85 public int hashCode() {
86 if (context != null) { 86 if (context != null) {
87 return Util.combineHashesOrdered(entry.hashCode(), context.hashCode()); 87 return Utils.combineHashesOrdered(entry.hashCode(), context.hashCode());
88 } 88 }
89 return entry.hashCode(); 89 return entry.hashCode();
90 } 90 }
diff --git a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java
index 9a85f6e..f0e7306 100644
--- a/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java
+++ b/src/main/java/cuchaz/enigma/analysis/EntryRenamer.java
@@ -57,35 +57,6 @@ public class EntryRenamer {
57 } 57 }
58 58
59 @SuppressWarnings("unchecked") 59 @SuppressWarnings("unchecked")
60 public static <T> T renameMethodsInThing(Map<MethodEntry, MethodEntry> renames, T thing) {
61 if (thing instanceof MethodEntry) {
62 MethodEntry methodEntry = (MethodEntry) thing;
63 MethodEntry newMethodEntry = renames.get(methodEntry);
64 if (newMethodEntry != null) {
65 return (T) new MethodEntry(
66 methodEntry.getClassEntry(),
67 newMethodEntry.getName(),
68 methodEntry.getSignature()
69 );
70 }
71 return thing;
72 } else if (thing instanceof ArgumentEntry) {
73 ArgumentEntry argumentEntry = (ArgumentEntry) thing;
74 return (T) new ArgumentEntry(
75 renameMethodsInThing(renames, argumentEntry.getBehaviorEntry()),
76 argumentEntry.getIndex(),
77 argumentEntry.getName()
78 );
79 } else if (thing instanceof EntryReference) {
80 EntryReference<Entry, Entry> reference = (EntryReference<Entry, Entry>) thing;
81 reference.entry = renameMethodsInThing(renames, reference.entry);
82 reference.context = renameMethodsInThing(renames, reference.context);
83 return thing;
84 }
85 return thing;
86 }
87
88 @SuppressWarnings("unchecked")
89 public static <T> T renameClassesInThing(final Map<String, String> renames, T thing) { 60 public static <T> T renameClassesInThing(final Map<String, String> renames, T thing) {
90 if (thing instanceof String) { 61 if (thing instanceof String) {
91 String stringEntry = (String) thing; 62 String stringEntry = (String) thing;
@@ -97,31 +68,16 @@ public class EntryRenamer {
97 return (T) new ClassEntry(renameClassesInThing(renames, classEntry.getClassName())); 68 return (T) new ClassEntry(renameClassesInThing(renames, classEntry.getClassName()));
98 } else if (thing instanceof FieldEntry) { 69 } else if (thing instanceof FieldEntry) {
99 FieldEntry fieldEntry = (FieldEntry) thing; 70 FieldEntry fieldEntry = (FieldEntry) thing;
100 return (T) new FieldEntry( 71 return (T) new FieldEntry(renameClassesInThing(renames, fieldEntry.getClassEntry()), fieldEntry.getName(), renameClassesInThing(renames, fieldEntry.getType()));
101 renameClassesInThing(renames, fieldEntry.getClassEntry()),
102 fieldEntry.getName(),
103 renameClassesInThing(renames, fieldEntry.getType())
104 );
105 } else if (thing instanceof ConstructorEntry) { 72 } else if (thing instanceof ConstructorEntry) {
106 ConstructorEntry constructorEntry = (ConstructorEntry) thing; 73 ConstructorEntry constructorEntry = (ConstructorEntry) thing;
107 return (T) new ConstructorEntry( 74 return (T) new ConstructorEntry(renameClassesInThing(renames, constructorEntry.getClassEntry()), renameClassesInThing(renames, constructorEntry.getSignature()));
108 renameClassesInThing(renames, constructorEntry.getClassEntry()),
109 renameClassesInThing(renames, constructorEntry.getSignature())
110 );
111 } else if (thing instanceof MethodEntry) { 75 } else if (thing instanceof MethodEntry) {
112 MethodEntry methodEntry = (MethodEntry) thing; 76 MethodEntry methodEntry = (MethodEntry) thing;
113 return (T) new MethodEntry( 77 return (T) new MethodEntry(renameClassesInThing(renames, methodEntry.getClassEntry()), methodEntry.getName(), renameClassesInThing(renames, methodEntry.getSignature()));
114 renameClassesInThing(renames, methodEntry.getClassEntry()),
115 methodEntry.getName(),
116 renameClassesInThing(renames, methodEntry.getSignature())
117 );
118 } else if (thing instanceof ArgumentEntry) { 78 } else if (thing instanceof ArgumentEntry) {
119 ArgumentEntry argumentEntry = (ArgumentEntry) thing; 79 ArgumentEntry argumentEntry = (ArgumentEntry) thing;
120 return (T) new ArgumentEntry( 80 return (T) new ArgumentEntry(renameClassesInThing(renames, argumentEntry.getBehaviorEntry()), argumentEntry.getIndex(), argumentEntry.getName());
121 renameClassesInThing(renames, argumentEntry.getBehaviorEntry()),
122 argumentEntry.getIndex(),
123 argumentEntry.getName()
124 );
125 } else if (thing instanceof EntryReference) { 81 } else if (thing instanceof EntryReference) {
126 EntryReference<Entry, Entry> reference = (EntryReference<Entry, Entry>) thing; 82 EntryReference<Entry, Entry> reference = (EntryReference<Entry, Entry>) thing;
127 reference.entry = renameClassesInThing(renames, reference.entry); 83 reference.entry = renameClassesInThing(renames, reference.entry);
diff --git a/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
index 05d9c13..70cd059 100644
--- a/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
@@ -18,8 +18,6 @@ import cuchaz.enigma.mapping.Translator;
18 18
19public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<FieldEntry, BehaviorEntry> { 19public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<FieldEntry, BehaviorEntry> {
20 20
21 private static final long serialVersionUID = -7934108091928699835L;
22
23 private Translator deobfuscatingTranslator; 21 private Translator deobfuscatingTranslator;
24 private FieldEntry entry; 22 private FieldEntry entry;
25 private EntryReference<FieldEntry, BehaviorEntry> reference; 23 private EntryReference<FieldEntry, BehaviorEntry> reference;
diff --git a/src/main/java/cuchaz/enigma/analysis/JarClassIterator.java b/src/main/java/cuchaz/enigma/analysis/JarClassIterator.java
index 0400427..0d18105 100644
--- a/src/main/java/cuchaz/enigma/analysis/JarClassIterator.java
+++ b/src/main/java/cuchaz/enigma/analysis/JarClassIterator.java
@@ -89,14 +89,6 @@ public class JarClassIterator implements Iterator<CtClass> {
89 return () -> new JarClassIterator(jar); 89 return () -> new JarClassIterator(jar);
90 } 90 }
91 91
92 public static CtClass getClass(JarFile jar, ClassEntry classEntry) {
93 try {
94 return getClass(jar, new JarEntry(classEntry.getName() + ".class"));
95 } catch (IOException | NotFoundException ex) {
96 throw new Error("Unable to load class: " + classEntry.getName());
97 }
98 }
99
100 private static CtClass getClass(JarFile jar, JarEntry entry) throws IOException, NotFoundException { 92 private static CtClass getClass(JarFile jar, JarEntry entry) throws IOException, NotFoundException {
101 // read the class into a buffer 93 // read the class into a buffer
102 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 94 ByteArrayOutputStream bos = new ByteArrayOutputStream();
diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java
index bd67090..9acf0b1 100644
--- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java
+++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java
@@ -503,14 +503,6 @@ public class JarIndex {
503 return this.obfClassEntries; 503 return this.obfClassEntries;
504 } 504 }
505 505
506 public Collection<FieldEntry> getObfFieldEntries() {
507 return this.fields.values();
508 }
509
510 public Collection<BehaviorEntry> getObfBehaviorEntries() {
511 return this.behaviors.values();
512 }
513
514 public TranslationIndex getTranslationIndex() { 506 public TranslationIndex getTranslationIndex() {
515 return this.translationIndex; 507 return this.translationIndex;
516 } 508 }
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
index 7919b5d..9bd6219 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
@@ -22,8 +22,6 @@ import cuchaz.enigma.mapping.Translator;
22 22
23public class MethodImplementationsTreeNode extends DefaultMutableTreeNode { 23public class MethodImplementationsTreeNode extends DefaultMutableTreeNode {
24 24
25 private static final long serialVersionUID = 3781080657461899915L;
26
27 private Translator deobfuscatingTranslator; 25 private Translator deobfuscatingTranslator;
28 private MethodEntry entry; 26 private MethodEntry entry;
29 27
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
index 6383783..b65b8c1 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
@@ -22,8 +22,6 @@ import cuchaz.enigma.mapping.Translator;
22 22
23public class MethodInheritanceTreeNode extends DefaultMutableTreeNode { 23public class MethodInheritanceTreeNode extends DefaultMutableTreeNode {
24 24
25 private static final long serialVersionUID = 1096677030991810007L;
26
27 private Translator deobfuscatingTranslator; 25 private Translator deobfuscatingTranslator;
28 private MethodEntry entry; 26 private MethodEntry entry;
29 private boolean isImplemented; 27 private boolean isImplemented;
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java
index 3fa1309..73e0431 100644
--- a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java
+++ b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java
@@ -145,10 +145,6 @@ public class SourceIndex {
145 return this.tokenToReference.keySet(); 145 return this.tokenToReference.keySet();
146 } 146 }
147 147
148 public Iterable<Entry> declarations() {
149 return this.declarationToToken.keySet();
150 }
151
152 public Token getDeclarationToken(Entry deobfEntry) { 148 public Token getDeclarationToken(Entry deobfEntry) {
153 return this.declarationToToken.get(deobfEntry); 149 return this.declarationToToken.get(deobfEntry);
154 } 150 }
diff --git a/src/main/java/cuchaz/enigma/analysis/Token.java b/src/main/java/cuchaz/enigma/analysis/Token.java
index 575c373..419842a 100644
--- a/src/main/java/cuchaz/enigma/analysis/Token.java
+++ b/src/main/java/cuchaz/enigma/analysis/Token.java
@@ -16,10 +16,6 @@ public class Token implements Comparable<Token> {
16 public int end; 16 public int end;
17 public String text; 17 public String text;
18 18
19 public Token(int start, int end) {
20 this(start, end, null);
21 }
22
23 public Token(int start, int end, String source) { 19 public Token(int start, int end, String source) {
24 this.start = start; 20 this.start = start;
25 this.end = end; 21 this.end = end;
diff --git a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java
index 3d8f556..275f56c 100644
--- a/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java
+++ b/src/main/java/cuchaz/enigma/analysis/TranslationIndex.java
@@ -15,10 +15,10 @@ import com.google.common.collect.Lists;
15import com.google.common.collect.Maps; 15import com.google.common.collect.Maps;
16import com.google.common.collect.Multimap; 16import com.google.common.collect.Multimap;
17 17
18import java.io.*; 18import java.util.Collection;
19import java.util.*; 19import java.util.List;
20import java.util.zip.GZIPInputStream; 20import java.util.Map;
21import java.util.zip.GZIPOutputStream; 21import java.util.Set;
22 22
23import cuchaz.enigma.mapping.*; 23import cuchaz.enigma.mapping.*;
24import javassist.CtBehavior; 24import javassist.CtBehavior;
@@ -26,9 +26,7 @@ import javassist.CtClass;
26import javassist.CtField; 26import javassist.CtField;
27import javassist.bytecode.Descriptor; 27import javassist.bytecode.Descriptor;
28 28
29public class TranslationIndex implements Serializable { 29public class TranslationIndex {
30
31 private static final long serialVersionUID = 738687982126844179L;
32 30
33 private Map<ClassEntry, ClassEntry> superclasses; 31 private Map<ClassEntry, ClassEntry> superclasses;
34 private Multimap<ClassEntry, FieldEntry> fieldEntries; 32 private Multimap<ClassEntry, FieldEntry> fieldEntries;
@@ -43,7 +41,6 @@ public class TranslationIndex implements Serializable {
43 } 41 }
44 42
45 public TranslationIndex(TranslationIndex other, Translator translator) { 43 public TranslationIndex(TranslationIndex other, Translator translator) {
46
47 // translate the superclasses 44 // translate the superclasses
48 this.superclasses = Maps.newHashMap(); 45 this.superclasses = Maps.newHashMap();
49 for (Map.Entry<ClassEntry, ClassEntry> mapEntry : other.superclasses.entrySet()) { 46 for (Map.Entry<ClassEntry, ClassEntry> mapEntry : other.superclasses.entrySet()) {
@@ -82,7 +79,6 @@ public class TranslationIndex implements Serializable {
82 } 79 }
83 80
84 public void indexClass(CtClass c, boolean indexMembers) { 81 public void indexClass(CtClass c, boolean indexMembers) {
85
86 ClassEntry classEntry = EntryFactory.getClassEntry(c); 82 ClassEntry classEntry = EntryFactory.getClassEntry(c);
87 if (isJre(classEntry)) { 83 if (isJre(classEntry)) {
88 return; 84 return;
@@ -139,7 +135,6 @@ public class TranslationIndex implements Serializable {
139 } 135 }
140 136
141 public List<ClassEntry> getSubclass(ClassEntry classEntry) { 137 public List<ClassEntry> getSubclass(ClassEntry classEntry) {
142
143 // linear search is fast enough for now 138 // linear search is fast enough for now
144 List<ClassEntry> subclasses = Lists.newArrayList(); 139 List<ClassEntry> subclasses = Lists.newArrayList();
145 for (Map.Entry<ClassEntry, ClassEntry> entry : this.superclasses.entrySet()) { 140 for (Map.Entry<ClassEntry, ClassEntry> entry : this.superclasses.entrySet()) {
@@ -191,7 +186,6 @@ public class TranslationIndex implements Serializable {
191 } 186 }
192 187
193 public ClassEntry resolveEntryClass(Entry entry) { 188 public ClassEntry resolveEntryClass(Entry entry) {
194
195 if (entry instanceof ClassEntry) { 189 if (entry instanceof ClassEntry) {
196 return (ClassEntry) entry; 190 return (ClassEntry) entry;
197 } 191 }
@@ -210,7 +204,6 @@ public class TranslationIndex implements Serializable {
210 } 204 }
211 205
212 public ClassEntry resolveSuperclass(Entry entry) { 206 public ClassEntry resolveSuperclass(Entry entry) {
213
214 // this entry could refer to a method on a class where the method is not actually implemented 207 // this entry could refer to a method on a class where the method is not actually implemented
215 // travel up the inheritance tree to find the closest implementation 208 // travel up the inheritance tree to find the closest implementation
216 while (!entryExists(entry)) { 209 while (!entryExists(entry)) {
@@ -230,7 +223,6 @@ public class TranslationIndex implements Serializable {
230 } 223 }
231 224
232 public ClassEntry resolveInterface(Entry entry) { 225 public ClassEntry resolveInterface(Entry entry) {
233
234 // the interfaces for any class is a forest 226 // the interfaces for any class is a forest
235 // so let's look at all the trees 227 // so let's look at all the trees
236 for (ClassEntry interfaceEntry : this.interfaces.get(entry.getClassEntry())) { 228 for (ClassEntry interfaceEntry : this.interfaces.get(entry.getClassEntry())) {
@@ -246,27 +238,4 @@ public class TranslationIndex implements Serializable {
246 String packageName = classEntry.getPackageName(); 238 String packageName = classEntry.getPackageName();
247 return packageName != null && (packageName.startsWith("java") || packageName.startsWith("javax")); 239 return packageName != null && (packageName.startsWith("java") || packageName.startsWith("javax"));
248 } 240 }
249
250 public void write(OutputStream out)
251 throws IOException {
252 GZIPOutputStream gzipout = new GZIPOutputStream(out);
253 ObjectOutputStream oout = new ObjectOutputStream(gzipout);
254 oout.writeObject(this.superclasses);
255 oout.writeObject(this.fieldEntries);
256 oout.writeObject(this.behaviorEntries);
257 gzipout.finish();
258 }
259
260 @SuppressWarnings("unchecked")
261 public void read(InputStream in)
262 throws IOException {
263 try {
264 ObjectInputStream oin = new ObjectInputStream(new GZIPInputStream(in));
265 this.superclasses = (HashMap<ClassEntry, ClassEntry>) oin.readObject();
266 this.fieldEntries = (HashMultimap<ClassEntry, FieldEntry>) oin.readObject();
267 this.behaviorEntries = (HashMultimap<ClassEntry, BehaviorEntry>) oin.readObject();
268 } catch (ClassNotFoundException ex) {
269 throw new Error(ex);
270 }
271 }
272} 241}