summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis
diff options
context:
space:
mode:
authorGravatar Thog2017-03-07 21:24:39 +0100
committerGravatar Thog2017-03-07 21:30:02 +0100
commitb4aaff683d78ab92b83f3a7257c33b8e27d1affa (patch)
treef23c9bb0927d83cc7302881266b7df8fd37959c7 /src/main/java/cuchaz/enigma/analysis
parentAvoid crash of the matcher when the obf name is invalid (set a deob it using ... (diff)
downloadenigma-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')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/Access.java15
-rw-r--r--src/main/java/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java93
-rw-r--r--src/main/java/cuchaz/enigma/analysis/BridgeMarker.java6
-rw-r--r--src/main/java/cuchaz/enigma/analysis/JarIndex.java2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexBehaviorVisitor.java1
-rw-r--r--src/main/java/cuchaz/enigma/analysis/Token.java6
-rw-r--r--src/main/java/cuchaz/enigma/analysis/TreeDumpVisitor.java13
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
18public enum Access { 18public 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 @@
11package cuchaz.enigma.analysis; 11package cuchaz.enigma.analysis;
12 12
13import com.google.common.collect.Sets; 13import com.google.common.collect.Sets;
14
15import java.util.Set;
16
17import javax.swing.tree.DefaultMutableTreeNode;
18import javax.swing.tree.TreeNode;
19
20import cuchaz.enigma.mapping.BehaviorEntry; 14import cuchaz.enigma.mapping.BehaviorEntry;
21import cuchaz.enigma.mapping.Entry; 15import cuchaz.enigma.mapping.Entry;
22import cuchaz.enigma.mapping.Translator; 16import cuchaz.enigma.mapping.Translator;
23 17
24public class BehaviorReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<BehaviorEntry, BehaviorEntry> { 18import javax.swing.tree.DefaultMutableTreeNode;
19import javax.swing.tree.TreeNode;
20import java.util.Set;
21
22public 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
19public class BridgeMarker { 19public 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;
16import java.util.*; 16import java.util.*;
17import java.util.jar.JarFile; 17import java.util.jar.JarFile;
18 18
19import cuchaz.enigma.Constants;
20import cuchaz.enigma.bytecode.ClassRenamer;
21import cuchaz.enigma.mapping.*; 19import cuchaz.enigma.mapping.*;
22import cuchaz.enigma.mapping.Translator; 20import cuchaz.enigma.mapping.Translator;
23import javassist.*; 21import 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
13import com.google.common.collect.HashMultimap; 13import com.google.common.collect.HashMultimap;
14import com.google.common.collect.Multimap; 14import com.google.common.collect.Multimap;
15import com.google.common.collect.Multimaps;
16import com.strobel.assembler.metadata.MemberReference; 15import com.strobel.assembler.metadata.MemberReference;
17import com.strobel.assembler.metadata.MethodReference; 16import com.strobel.assembler.metadata.MethodReference;
18import com.strobel.assembler.metadata.ParameterDefinition; 17import 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
20public class TreeDumpVisitor implements IAstVisitor<Void, Void> { 20public 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 }