summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis
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/main/java/cuchaz/enigma/analysis
parenttry hack to solve Darcula Ivy issue for now (diff)
downloadenigma-fork-ed51dfd4abf7f1955d5a8fdcd43dcc9e0b40a075.tar.gz
enigma-fork-ed51dfd4abf7f1955d5a8fdcd43dcc9e0b40a075.tar.xz
enigma-fork-ed51dfd4abf7f1955d5a8fdcd43dcc9e0b40a075.zip
fix SourceIndex remap bugs
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndex.java21
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexClassVisitor.java4
2 files changed, 11 insertions, 14 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndex.java b/src/main/java/cuchaz/enigma/analysis/SourceIndex.java
index 4c84e69..3e0d66b 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 dd5bcef..cad0857 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}