summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar asie2018-12-09 09:18:12 +0100
committerGravatar asie2018-12-09 09:18:12 +0100
commited51dfd4abf7f1955d5a8fdcd43dcc9e0b40a075 (patch)
treeea19ac7a17e9fab329c11ad87e5f09564443c1c7 /src
parenttry hack to solve Darcula Ivy issue for now (diff)
downloadenigma-ed51dfd4abf7f1955d5a8fdcd43dcc9e0b40a075.tar.gz
enigma-ed51dfd4abf7f1955d5a8fdcd43dcc9e0b40a075.tar.xz
enigma-ed51dfd4abf7f1955d5a8fdcd43dcc9e0b40a075.zip
fix SourceIndex remap bugs
Diffstat (limited to 'src')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndex.java21
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexClassVisitor.java4
-rw-r--r--src/main/java/cuchaz/enigma/gui/GuiController.java8
3 files changed, 15 insertions, 18 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java
index 4c84e69d..3e0d66b4 100644
--- a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java
+++ b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java
@@ -68,20 +68,21 @@ public class SourceIndex {
68 declarationToToken.put(entry, tokenMap.getOrDefault(token, token)); 68 declarationToToken.put(entry, tokenMap.getOrDefault(token, token));
69 } 69 }
70 70
71 for (Token token : Lists.newArrayList(tokenToReference.keySet())) { 71 for (EntryReference<Entry, Entry> ref : referenceToTokens.keySet()) {
72 EntryReference<Entry, Entry> e = tokenToReference.remove(token); 72 Collection<Token> oldTokens = referenceToTokens.get(ref);
73 tokenToReference.put(tokenMap.getOrDefault(token, token), e); 73 List<Token> newTokens = new ArrayList<>(oldTokens.size());
74 }
75
76 for (EntryReference<Entry, Entry> ref : Lists.newArrayList(referenceToTokens.keySet())) {
77 List<Token> newTokens = new ArrayList<>();
78 74
79 for (Token token : referenceToTokens.get(ref)) { 75 for (Token token : oldTokens) {
80 newTokens.add(tokenMap.getOrDefault(token, token)); 76 newTokens.add(tokenMap.getOrDefault(token, token));
81 } 77 }
82 78
83 referenceToTokens.removeAll(ref); 79 referenceToTokens.replaceValues(ref, newTokens);
84 referenceToTokens.putAll(ref, newTokens); 80 }
81
82 Map<Token, EntryReference<Entry, Entry>> tokenToReferenceCopy = Maps.newHashMap(tokenToReference);
83 tokenToReference.clear();
84 for (Token token : tokenToReferenceCopy.keySet()) {
85 tokenToReference.put(tokenMap.getOrDefault(token, token), tokenToReferenceCopy.get(token));
85 } 86 }
86 } 87 }
87 88
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndexClassVisitor.java b/src/main/java/cuchaz/enigma/analysis/SourceIndexClassVisitor.java
index dd5bcef0..cad08574 100644
--- a/src/main/java/cuchaz/enigma/analysis/SourceIndexClassVisitor.java
+++ b/src/main/java/cuchaz/enigma/analysis/SourceIndexClassVisitor.java
@@ -24,9 +24,7 @@ import cuchaz.enigma.mapping.entry.*;
24public class SourceIndexClassVisitor extends SourceIndexVisitor { 24public class SourceIndexClassVisitor extends SourceIndexVisitor {
25 private final ReferencedEntryPool entryPool; 25 private final ReferencedEntryPool entryPool;
26 private final ProcyonEntryFactory entryFactory; 26 private final ProcyonEntryFactory entryFactory;
27
28 private ClassDefEntry classEntry; 27 private ClassDefEntry classEntry;
29 private boolean isEnum;
30 28
31 public SourceIndexClassVisitor(ReferencedEntryPool entryPool, ClassDefEntry classEntry) { 29 public SourceIndexClassVisitor(ReferencedEntryPool entryPool, ClassDefEntry classEntry) {
32 super(entryPool); 30 super(entryPool);
@@ -88,7 +86,6 @@ public class SourceIndexClassVisitor extends SourceIndexVisitor {
88 assert (node.getVariables().size() == 1); 86 assert (node.getVariables().size() == 1);
89 VariableInitializer variable = node.getVariables().firstOrNullObject(); 87 VariableInitializer variable = node.getVariables().firstOrNullObject();
90 index.addDeclaration(variable.getNameToken(), fieldEntry); 88 index.addDeclaration(variable.getNameToken(), fieldEntry);
91
92 return recurse(node, index); 89 return recurse(node, index);
93 } 90 }
94 91
@@ -98,7 +95,6 @@ public class SourceIndexClassVisitor extends SourceIndexVisitor {
98 FieldDefinition def = node.getUserData(Keys.FIELD_DEFINITION); 95 FieldDefinition def = node.getUserData(Keys.FIELD_DEFINITION);
99 FieldDefEntry fieldEntry = entryFactory.getFieldDefEntry(def); 96 FieldDefEntry fieldEntry = entryFactory.getFieldDefEntry(def);
100 index.addDeclaration(node.getNameToken(), fieldEntry); 97 index.addDeclaration(node.getNameToken(), fieldEntry);
101 this.isEnum = true;
102 return recurse(node, index); 98 return recurse(node, index);
103 } 99 }
104} 100}
diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java
index e2f332d0..acb0ebbb 100644
--- a/src/main/java/cuchaz/enigma/gui/GuiController.java
+++ b/src/main/java/cuchaz/enigma/gui/GuiController.java
@@ -345,7 +345,7 @@ public class GuiController {
345 List<Token> otherTokens = Lists.newArrayList(); 345 List<Token> otherTokens = Lists.newArrayList();
346 346
347 int offset = 0; 347 int offset = 0;
348 Map<Token, Token> tokenRemap = new IdentityHashMap<>(); 348 Map<Token, Token> tokenRemap = new HashMap<>();
349 boolean remapped = false; 349 boolean remapped = false;
350 350
351 for (Token inToken : index.referenceTokens()) { 351 for (Token inToken : index.referenceTokens()) {
@@ -353,7 +353,7 @@ public class GuiController {
353 Token token = inToken.move(offset); 353 Token token = inToken.move(offset);
354 354
355 if (referenceIsRenameable(reference)) { 355 if (referenceIsRenameable(reference)) {
356 boolean renamed = false; 356 boolean added = false;
357 357
358 if (!entryHasDeobfuscatedName(reference.getNameableEntry())) { 358 if (!entryHasDeobfuscatedName(reference.getNameableEntry())) {
359 Entry obfEntry = deobfuscator.obfuscateEntry(reference.getNameableEntry()); 359 Entry obfEntry = deobfuscator.obfuscateEntry(reference.getNameableEntry());
@@ -364,7 +364,7 @@ public class GuiController {
364 proposedTokens.add(token); 364 proposedTokens.add(token);
365 offset += token.getRenameOffset(proposal); 365 offset += token.getRenameOffset(proposal);
366 sourceString = token.rename(sourceString, proposal); 366 sourceString = token.rename(sourceString, proposal);
367 renamed = true; 367 added = true;
368 remapped = true; 368 remapped = true;
369 break; 369 break;
370 } 370 }
@@ -372,7 +372,7 @@ public class GuiController {
372 } 372 }
373 } 373 }
374 374
375 if (!renamed) { 375 if (!added) {
376 if (entryHasDeobfuscatedName(reference.getNameableEntry())) { 376 if (entryHasDeobfuscatedName(reference.getNameableEntry())) {
377 deobfuscatedTokens.add(token); 377 deobfuscatedTokens.add(token);
378 } else { 378 } else {