summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
diff options
context:
space:
mode:
authorGravatar Gegy2019-01-24 14:48:32 +0200
committerGravatar Adrian Siekierka2019-01-24 13:48:32 +0100
commit00fcd0550fcdda621c2e4662f6ddd55ce673b931 (patch)
tree6f9e4c24dbcc6d118fceec56adf7bf9d747a485c /src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
parentmark as 0.13.0-SNAPSHOT for preliminary development (diff)
downloadenigma-fork-00fcd0550fcdda621c2e4662f6ddd55ce673b931.tar.gz
enigma-fork-00fcd0550fcdda621c2e4662f6ddd55ce673b931.tar.xz
enigma-fork-00fcd0550fcdda621c2e4662f6ddd55ce673b931.zip
[WIP] Mapping rework (#91)
* Move packages * Mapping & entry refactor: first pass * Fix deobf -> obf tree remapping * Resolve various issues * Give all entries the potential for parents and treat inner classes as children * Deobf UI tree elements * Tests pass * Sort mapping output * Fix delta tracking * Index separation and first pass for #97 * Keep track of remapped jar index * Fix child entries not being remapped * Drop non-root entries * Track dropped mappings * Fix enigma mapping ordering * EntryTreeNode interface * Small tweaks * Naive full index remap on rename * Entries can resolve to more than one root entry * Support alternative resolution strategies * Bridge method resolution * Tests pass * Fix mappings being used where there are none * Fix methods with different descriptors being considered unique. closes #89
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
index 2318a2b..4beab7f 100644
--- a/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/FieldReferenceTreeNode.java
@@ -11,32 +11,31 @@
11 11
12package cuchaz.enigma.analysis; 12package cuchaz.enigma.analysis;
13 13
14import cuchaz.enigma.bytecode.AccessFlags; 14import cuchaz.enigma.analysis.index.JarIndex;
15import cuchaz.enigma.mapping.*; 15import cuchaz.enigma.analysis.index.ReferenceIndex;
16import cuchaz.enigma.mapping.entry.FieldEntry; 16import cuchaz.enigma.translation.Translator;
17import cuchaz.enigma.mapping.entry.MethodDefEntry; 17import cuchaz.enigma.translation.representation.entry.FieldEntry;
18import cuchaz.enigma.mapping.entry.MethodEntry; 18import cuchaz.enigma.translation.representation.entry.MethodDefEntry;
19import cuchaz.enigma.translation.representation.entry.MethodEntry;
19 20
20import javax.swing.tree.DefaultMutableTreeNode; 21import javax.swing.tree.DefaultMutableTreeNode;
21 22
22public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<FieldEntry, MethodDefEntry> { 23public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<FieldEntry, MethodDefEntry> {
23 24
24 private Translator deobfuscatingTranslator; 25 private final Translator translator;
25 private FieldEntry entry; 26 private FieldEntry entry;
26 private EntryReference<FieldEntry, MethodDefEntry> reference; 27 private EntryReference<FieldEntry, MethodDefEntry> reference;
27 private AccessFlags access;
28 28
29 public FieldReferenceTreeNode(Translator deobfuscatingTranslator, FieldEntry entry) { 29 public FieldReferenceTreeNode(Translator translator, FieldEntry entry) {
30 this.deobfuscatingTranslator = deobfuscatingTranslator; 30 this.translator = translator;
31 this.entry = entry; 31 this.entry = entry;
32 this.reference = null; 32 this.reference = null;
33 } 33 }
34 34
35 private FieldReferenceTreeNode(Translator deobfuscatingTranslator, EntryReference<FieldEntry, MethodDefEntry> reference, AccessFlags access) { 35 private FieldReferenceTreeNode(Translator translator, EntryReference<FieldEntry, MethodDefEntry> reference) {
36 this.deobfuscatingTranslator = deobfuscatingTranslator; 36 this.translator = translator;
37 this.entry = reference.entry; 37 this.entry = reference.entry;
38 this.reference = reference; 38 this.reference = reference;
39 this.access = access;
40 } 39 }
41 40
42 @Override 41 @Override
@@ -52,27 +51,29 @@ public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements Re
52 @Override 51 @Override
53 public String toString() { 52 public String toString() {
54 if (this.reference != null) { 53 if (this.reference != null) {
55 return String.format("%s (%s)", this.deobfuscatingTranslator.getTranslatedMethodDef(this.reference.context), this.access); 54 return String.format("%s", translator.translate(this.reference.context));
56 } 55 }
57 return deobfuscatingTranslator.getTranslatedField(entry).getName(); 56 return translator.translate(entry).toString();
58 } 57 }
59 58
60 public void load(JarIndex index, boolean recurse) { 59 public void load(JarIndex index, boolean recurse) {
60 ReferenceIndex referenceIndex = index.getReferenceIndex();
61
61 // get all the child nodes 62 // get all the child nodes
62 if (this.reference == null) { 63 if (this.reference == null) {
63 for (EntryReference<FieldEntry, MethodDefEntry> reference : index.getFieldReferences(this.entry)) { 64 for (EntryReference<FieldEntry, MethodDefEntry> reference : referenceIndex.getReferencesToField(this.entry)) {
64 add(new FieldReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccessFlags(this.entry))); 65 add(new FieldReferenceTreeNode(translator, reference));
65 } 66 }
66 } else { 67 } else {
67 for (EntryReference<MethodEntry, MethodDefEntry> reference : index.getMethodsReferencing(this.reference.context)) { 68 for (EntryReference<MethodEntry, MethodDefEntry> reference : referenceIndex.getReferencesToMethod(this.reference.context)) {
68 add(new MethodReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccessFlags(this.reference.context))); 69 add(new MethodReferenceTreeNode(translator, reference));
69 } 70 }
70 } 71 }
71 72
72 if (recurse && children != null) { 73 if (recurse && children != null) {
73 for (Object node : children) { 74 for (Object node : children) {
74 if (node instanceof MethodReferenceTreeNode) { 75 if (node instanceof MethodReferenceTreeNode) {
75 ((MethodReferenceTreeNode) node).load(index, true); 76 ((MethodReferenceTreeNode) node).load(index, true, false);
76 } else if (node instanceof FieldReferenceTreeNode) { 77 } else if (node instanceof FieldReferenceTreeNode) {
77 ((FieldReferenceTreeNode) node).load(index, true); 78 ((FieldReferenceTreeNode) node).load(index, true);
78 } 79 }