diff options
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis')
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 | ||
| 24 | public class BehaviorReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<BehaviorEntry, BehaviorEntry> { | 24 | public 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 | ||
| 22 | public class ClassImplementationsTreeNode extends DefaultMutableTreeNode { | 22 | public 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 | ||
| 22 | public class ClassInheritanceTreeNode extends DefaultMutableTreeNode { | 22 | public 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; | |||
| 13 | import java.util.Arrays; | 13 | import java.util.Arrays; |
| 14 | import java.util.List; | 14 | import java.util.List; |
| 15 | 15 | ||
| 16 | import cuchaz.enigma.Util; | ||
| 17 | import cuchaz.enigma.mapping.ClassEntry; | 16 | import cuchaz.enigma.mapping.ClassEntry; |
| 18 | import cuchaz.enigma.mapping.ConstructorEntry; | 17 | import cuchaz.enigma.mapping.ConstructorEntry; |
| 19 | import cuchaz.enigma.mapping.Entry; | 18 | import cuchaz.enigma.mapping.Entry; |
| 19 | import cuchaz.enigma.utils.Utils; | ||
| 20 | 20 | ||
| 21 | public class EntryReference<E extends Entry, C extends Entry> { | 21 | public 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 | ||
| 19 | public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<FieldEntry, BehaviorEntry> { | 19 | public 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 | ||
| 23 | public class MethodImplementationsTreeNode extends DefaultMutableTreeNode { | 23 | public 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 | ||
| 23 | public class MethodInheritanceTreeNode extends DefaultMutableTreeNode { | 23 | public 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; | |||
| 15 | import com.google.common.collect.Maps; | 15 | import com.google.common.collect.Maps; |
| 16 | import com.google.common.collect.Multimap; | 16 | import com.google.common.collect.Multimap; |
| 17 | 17 | ||
| 18 | import java.io.*; | 18 | import java.util.Collection; |
| 19 | import java.util.*; | 19 | import java.util.List; |
| 20 | import java.util.zip.GZIPInputStream; | 20 | import java.util.Map; |
| 21 | import java.util.zip.GZIPOutputStream; | 21 | import java.util.Set; |
| 22 | 22 | ||
| 23 | import cuchaz.enigma.mapping.*; | 23 | import cuchaz.enigma.mapping.*; |
| 24 | import javassist.CtBehavior; | 24 | import javassist.CtBehavior; |
| @@ -26,9 +26,7 @@ import javassist.CtClass; | |||
| 26 | import javassist.CtField; | 26 | import javassist.CtField; |
| 27 | import javassist.bytecode.Descriptor; | 27 | import javassist.bytecode.Descriptor; |
| 28 | 28 | ||
| 29 | public class TranslationIndex implements Serializable { | 29 | public 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 | } |