diff options
| author | 2017-03-07 21:24:39 +0100 | |
|---|---|---|
| committer | 2017-03-07 21:30:02 +0100 | |
| commit | b4aaff683d78ab92b83f3a7257c33b8e27d1affa (patch) | |
| tree | f23c9bb0927d83cc7302881266b7df8fd37959c7 /src/main/java/cuchaz/enigma/analysis | |
| parent | Avoid crash of the matcher when the obf name is invalid (set a deob it using ... (diff) | |
| download | enigma-fork-b4aaff683d78ab92b83f3a7257c33b8e27d1affa.tar.gz enigma-fork-b4aaff683d78ab92b83f3a7257c33b8e27d1affa.tar.xz enigma-fork-b4aaff683d78ab92b83f3a7257c33b8e27d1affa.zip | |
Drop unix case style and implement hashCode when equals is overrided
Also update Guava to version 21
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis')
7 files changed, 74 insertions, 62 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/Access.java b/src/main/java/cuchaz/enigma/analysis/Access.java index b8aafaa..b8a7b2c 100644 --- a/src/main/java/cuchaz/enigma/analysis/Access.java +++ b/src/main/java/cuchaz/enigma/analysis/Access.java | |||
| @@ -17,10 +17,7 @@ import javassist.CtField; | |||
| 17 | 17 | ||
| 18 | public enum Access { | 18 | public enum Access { |
| 19 | 19 | ||
| 20 | Public, | 20 | PUBLIC, PROTECTED, PACKAGE, PRIVATE; |
| 21 | Protected, | ||
| 22 | Package, | ||
| 23 | Private; | ||
| 24 | 21 | ||
| 25 | public static Access get(CtBehavior behavior) { | 22 | public static Access get(CtBehavior behavior) { |
| 26 | return get(behavior.getModifiers()); | 23 | return get(behavior.getModifiers()); |
| @@ -36,15 +33,15 @@ public enum Access { | |||
| 36 | boolean isPrivate = Modifier.isPrivate(modifiers); | 33 | boolean isPrivate = Modifier.isPrivate(modifiers); |
| 37 | 34 | ||
| 38 | if (isPublic && !isProtected && !isPrivate) { | 35 | if (isPublic && !isProtected && !isPrivate) { |
| 39 | return Public; | 36 | return PUBLIC; |
| 40 | } else if (!isPublic && isProtected && !isPrivate) { | 37 | } else if (!isPublic && isProtected && !isPrivate) { |
| 41 | return Protected; | 38 | return PROTECTED; |
| 42 | } else if (!isPublic && !isProtected && isPrivate) { | 39 | } else if (!isPublic && !isProtected && isPrivate) { |
| 43 | return Private; | 40 | return PRIVATE; |
| 44 | } else if (!isPublic && !isProtected && !isPrivate) { | 41 | } else if (!isPublic && !isProtected && !isPrivate) { |
| 45 | return Package; | 42 | return PACKAGE; |
| 46 | } | 43 | } |
| 47 | // assume public by default | 44 | // assume public by default |
| 48 | return Public; | 45 | return PUBLIC; |
| 49 | } | 46 | } |
| 50 | } | 47 | } |
diff --git a/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java index 98aa12e..52d5b31 100644 --- a/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java +++ b/src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java | |||
| @@ -11,75 +11,88 @@ | |||
| 11 | package cuchaz.enigma.analysis; | 11 | package cuchaz.enigma.analysis; |
| 12 | 12 | ||
| 13 | import com.google.common.collect.Sets; | 13 | import com.google.common.collect.Sets; |
| 14 | |||
| 15 | import java.util.Set; | ||
| 16 | |||
| 17 | import javax.swing.tree.DefaultMutableTreeNode; | ||
| 18 | import javax.swing.tree.TreeNode; | ||
| 19 | |||
| 20 | import cuchaz.enigma.mapping.BehaviorEntry; | 14 | import cuchaz.enigma.mapping.BehaviorEntry; |
| 21 | import cuchaz.enigma.mapping.Entry; | 15 | import cuchaz.enigma.mapping.Entry; |
| 22 | import cuchaz.enigma.mapping.Translator; | 16 | import cuchaz.enigma.mapping.Translator; |
| 23 | 17 | ||
| 24 | public class BehaviorReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<BehaviorEntry, BehaviorEntry> { | 18 | import javax.swing.tree.DefaultMutableTreeNode; |
| 19 | import javax.swing.tree.TreeNode; | ||
| 20 | import java.util.Set; | ||
| 21 | |||
| 22 | public class BehaviorReferenceTreeNode extends DefaultMutableTreeNode | ||
| 23 | implements ReferenceTreeNode<BehaviorEntry, BehaviorEntry> | ||
| 24 | { | ||
| 25 | 25 | ||
| 26 | private Translator m_deobfuscatingTranslator; | 26 | private Translator deobfuscatingTranslator; |
| 27 | private BehaviorEntry m_entry; | 27 | private BehaviorEntry entry; |
| 28 | private EntryReference<BehaviorEntry, BehaviorEntry> m_reference; | 28 | private EntryReference<BehaviorEntry, BehaviorEntry> reference; |
| 29 | private Access m_access; | 29 | private Access access; |
| 30 | 30 | ||
| 31 | public BehaviorReferenceTreeNode(Translator deobfuscatingTranslator, BehaviorEntry entry) { | 31 | public BehaviorReferenceTreeNode(Translator deobfuscatingTranslator, BehaviorEntry entry) |
| 32 | this.m_deobfuscatingTranslator = deobfuscatingTranslator; | 32 | { |
| 33 | this.m_entry = entry; | 33 | this.deobfuscatingTranslator = deobfuscatingTranslator; |
| 34 | this.m_reference = null; | 34 | this.entry = entry; |
| 35 | this.reference = null; | ||
| 35 | } | 36 | } |
| 36 | 37 | ||
| 37 | public BehaviorReferenceTreeNode(Translator deobfuscatingTranslator, EntryReference<BehaviorEntry, BehaviorEntry> reference, Access access) { | 38 | public BehaviorReferenceTreeNode(Translator deobfuscatingTranslator, |
| 38 | this.m_deobfuscatingTranslator = deobfuscatingTranslator; | 39 | EntryReference<BehaviorEntry, BehaviorEntry> reference, Access access) |
| 39 | this.m_entry = reference.entry; | 40 | { |
| 40 | this.m_reference = reference; | 41 | this.deobfuscatingTranslator = deobfuscatingTranslator; |
| 41 | this.m_access = access; | 42 | this.entry = reference.entry; |
| 43 | this.reference = reference; | ||
| 44 | this.access = access; | ||
| 42 | } | 45 | } |
| 43 | 46 | ||
| 44 | @Override | 47 | @Override public BehaviorEntry getEntry() |
| 45 | public BehaviorEntry getEntry() { | 48 | { |
| 46 | return this.m_entry; | 49 | return this.entry; |
| 47 | } | 50 | } |
| 48 | 51 | ||
| 49 | @Override | 52 | @Override public EntryReference<BehaviorEntry, BehaviorEntry> getReference() |
| 50 | public EntryReference<BehaviorEntry, BehaviorEntry> getReference() { | 53 | { |
| 51 | return this.m_reference; | 54 | return this.reference; |
| 52 | } | 55 | } |
| 53 | 56 | ||
| 54 | @Override | 57 | @Override public String toString() |
| 55 | public String toString() { | 58 | { |
| 56 | if (this.m_reference != null) { | 59 | if (this.reference != null) |
| 57 | return String.format("%s (%s)", this.m_deobfuscatingTranslator.translateEntry(this.m_reference.context), this.m_access); | 60 | { |
| 61 | return String.format("%s (%s)", this.deobfuscatingTranslator.translateEntry(this.reference.context), | ||
| 62 | this.access); | ||
| 58 | } | 63 | } |
| 59 | return this.m_deobfuscatingTranslator.translateEntry(this.m_entry).toString(); | 64 | return this.deobfuscatingTranslator.translateEntry(this.entry).toString(); |
| 60 | } | 65 | } |
| 61 | 66 | ||
| 62 | public void load(JarIndex index, boolean recurse) { | 67 | public void load(JarIndex index, boolean recurse) |
| 68 | { | ||
| 63 | // get all the child nodes | 69 | // get all the child nodes |
| 64 | for (EntryReference<BehaviorEntry, BehaviorEntry> reference : index.getBehaviorReferences(this.m_entry)) { | 70 | for (EntryReference<BehaviorEntry, BehaviorEntry> reference : index.getBehaviorReferences(this.entry)) |
| 65 | add(new BehaviorReferenceTreeNode(this.m_deobfuscatingTranslator, reference, index.getAccess(this.m_entry))); | 71 | { |
| 72 | add(new BehaviorReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccess(this.entry))); | ||
| 66 | } | 73 | } |
| 67 | 74 | ||
| 68 | if (recurse && this.children != null) { | 75 | if (recurse && this.children != null) |
| 69 | for (Object child : this.children) { | 76 | { |
| 70 | if (child instanceof BehaviorReferenceTreeNode) { | 77 | for (Object child : this.children) |
| 78 | { | ||
| 79 | if (child instanceof BehaviorReferenceTreeNode) | ||
| 80 | { | ||
| 71 | BehaviorReferenceTreeNode node = (BehaviorReferenceTreeNode) child; | 81 | BehaviorReferenceTreeNode node = (BehaviorReferenceTreeNode) child; |
| 72 | 82 | ||
| 73 | // don't recurse into ancestor | 83 | // don't recurse into ancestor |
| 74 | Set<Entry> ancestors = Sets.newHashSet(); | 84 | Set<Entry> ancestors = Sets.newHashSet(); |
| 75 | TreeNode n = node; | 85 | TreeNode n = node; |
| 76 | while (n.getParent() != null) { | 86 | while (n.getParent() != null) |
| 87 | { | ||
| 77 | n = n.getParent(); | 88 | n = n.getParent(); |
| 78 | if (n instanceof BehaviorReferenceTreeNode) { | 89 | if (n instanceof BehaviorReferenceTreeNode) |
| 90 | { | ||
| 79 | ancestors.add(((BehaviorReferenceTreeNode) n).getEntry()); | 91 | ancestors.add(((BehaviorReferenceTreeNode) n).getEntry()); |
| 80 | } | 92 | } |
| 81 | } | 93 | } |
| 82 | if (ancestors.contains(node.getEntry())) { | 94 | if (ancestors.contains(node.getEntry())) |
| 95 | { | ||
| 83 | continue; | 96 | continue; |
| 84 | } | 97 | } |
| 85 | 98 | ||
diff --git a/src/main/java/cuchaz/enigma/analysis/BridgeMarker.java b/src/main/java/cuchaz/enigma/analysis/BridgeMarker.java index cd18584..0f4be7d 100644 --- a/src/main/java/cuchaz/enigma/analysis/BridgeMarker.java +++ b/src/main/java/cuchaz/enigma/analysis/BridgeMarker.java | |||
| @@ -18,10 +18,10 @@ import javassist.bytecode.AccessFlag; | |||
| 18 | 18 | ||
| 19 | public class BridgeMarker { | 19 | public class BridgeMarker { |
| 20 | 20 | ||
| 21 | private JarIndex m_jarIndex; | 21 | private JarIndex jarIndex; |
| 22 | 22 | ||
| 23 | public BridgeMarker(JarIndex jarIndex) { | 23 | public BridgeMarker(JarIndex jarIndex) { |
| 24 | this.m_jarIndex = jarIndex; | 24 | this.jarIndex = jarIndex; |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | public void markBridges(CtClass c) { | 27 | public void markBridges(CtClass c) { |
| @@ -30,7 +30,7 @@ public class BridgeMarker { | |||
| 30 | MethodEntry methodEntry = EntryFactory.getMethodEntry(method); | 30 | MethodEntry methodEntry = EntryFactory.getMethodEntry(method); |
| 31 | 31 | ||
| 32 | // is this a bridge method? | 32 | // is this a bridge method? |
| 33 | MethodEntry bridgedMethodEntry = this.m_jarIndex.getBridgedMethod(methodEntry); | 33 | MethodEntry bridgedMethodEntry = this.jarIndex.getBridgedMethod(methodEntry); |
| 34 | if (bridgedMethodEntry != null) { | 34 | if (bridgedMethodEntry != null) { |
| 35 | 35 | ||
| 36 | // it's a bridge method! add the bridge flag | 36 | // it's a bridge method! add the bridge flag |
diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index ee1dd54..e8f74cc 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java | |||
| @@ -16,8 +16,6 @@ import java.lang.reflect.Modifier; | |||
| 16 | import java.util.*; | 16 | import java.util.*; |
| 17 | import java.util.jar.JarFile; | 17 | import java.util.jar.JarFile; |
| 18 | 18 | ||
| 19 | import cuchaz.enigma.Constants; | ||
| 20 | import cuchaz.enigma.bytecode.ClassRenamer; | ||
| 21 | import cuchaz.enigma.mapping.*; | 19 | import cuchaz.enigma.mapping.*; |
| 22 | import cuchaz.enigma.mapping.Translator; | 20 | import cuchaz.enigma.mapping.Translator; |
| 23 | import javassist.*; | 21 | import javassist.*; |
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java b/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java index e690abd..bfd5a56 100644 --- a/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java +++ b/src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java | |||
| @@ -12,7 +12,6 @@ package cuchaz.enigma.analysis; | |||
| 12 | 12 | ||
| 13 | import com.google.common.collect.HashMultimap; | 13 | import com.google.common.collect.HashMultimap; |
| 14 | import com.google.common.collect.Multimap; | 14 | import com.google.common.collect.Multimap; |
| 15 | import com.google.common.collect.Multimaps; | ||
| 16 | import com.strobel.assembler.metadata.MemberReference; | 15 | import com.strobel.assembler.metadata.MemberReference; |
| 17 | import com.strobel.assembler.metadata.MethodReference; | 16 | import com.strobel.assembler.metadata.MethodReference; |
| 18 | import com.strobel.assembler.metadata.ParameterDefinition; | 17 | import com.strobel.assembler.metadata.ParameterDefinition; |
diff --git a/src/main/java/cuchaz/enigma/analysis/Token.java b/src/main/java/cuchaz/enigma/analysis/Token.java index 419842a..42f4660 100644 --- a/src/main/java/cuchaz/enigma/analysis/Token.java +++ b/src/main/java/cuchaz/enigma/analysis/Token.java | |||
| @@ -38,6 +38,12 @@ public class Token implements Comparable<Token> { | |||
| 38 | return other instanceof Token && equals((Token) other); | 38 | return other instanceof Token && equals((Token) other); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | @Override | ||
| 42 | public int hashCode() | ||
| 43 | { | ||
| 44 | return Integer.hashCode(start) + Integer.hashCode(end) + (text != null ? text.hashCode() : 0); | ||
| 45 | } | ||
| 46 | |||
| 41 | public boolean equals(Token other) { | 47 | public boolean equals(Token other) { |
| 42 | return start == other.start && end == other.end; | 48 | return start == other.start && end == other.end; |
| 43 | } | 49 | } |
diff --git a/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java b/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java index de39d36..cc025da 100644 --- a/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java +++ b/src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java | |||
| @@ -19,20 +19,19 @@ import java.nio.charset.Charset; | |||
| 19 | 19 | ||
| 20 | public class TreeDumpVisitor implements IAstVisitor<Void, Void> { | 20 | public class TreeDumpVisitor implements IAstVisitor<Void, Void> { |
| 21 | 21 | ||
| 22 | private File m_file; | 22 | private File file; |
| 23 | private Writer m_out; | 23 | private Writer out; |
| 24 | 24 | ||
| 25 | public TreeDumpVisitor(File file) { | 25 | public TreeDumpVisitor(File file) { |
| 26 | m_file = file; | 26 | this.file = file; |
| 27 | m_out = null; | ||
| 28 | } | 27 | } |
| 29 | 28 | ||
| 30 | @Override | 29 | @Override |
| 31 | public Void visitCompilationUnit(CompilationUnit node, Void ignored) { | 30 | public Void visitCompilationUnit(CompilationUnit node, Void ignored) { |
| 32 | try { | 31 | try { |
| 33 | m_out = new OutputStreamWriter(new FileOutputStream(m_file), Charset.forName("UTF-8")); | 32 | out = new OutputStreamWriter(new FileOutputStream(file), Charset.forName("UTF-8")); |
| 34 | recurse(node, ignored); | 33 | recurse(node, ignored); |
| 35 | m_out.close(); | 34 | out.close(); |
| 36 | return null; | 35 | return null; |
| 37 | } catch (IOException ex) { | 36 | } catch (IOException ex) { |
| 38 | throw new Error(ex); | 37 | throw new Error(ex); |
| @@ -42,7 +41,7 @@ public class TreeDumpVisitor implements IAstVisitor<Void, Void> { | |||
| 42 | private Void recurse(AstNode node, Void ignored) { | 41 | private Void recurse(AstNode node, Void ignored) { |
| 43 | // show the tree | 42 | // show the tree |
| 44 | try { | 43 | try { |
| 45 | m_out.write(getIndent(node) + node.getClass().getSimpleName() + " " + getText(node) + " " + dumpUserData(node) + " " + node.getRegion() + "\n"); | 44 | out.write(getIndent(node) + node.getClass().getSimpleName() + " " + getText(node) + " " + dumpUserData(node) + " " + node.getRegion() + "\n"); |
| 46 | } catch (IOException ex) { | 45 | } catch (IOException ex) { |
| 47 | throw new Error(ex); | 46 | throw new Error(ex); |
| 48 | } | 47 | } |