From ba7a354efae7d49833c887cf147ac940c975a1fa Mon Sep 17 00:00:00 2001 From: Gegy Date: Wed, 30 Jan 2019 21:05:32 +0200 Subject: Remap sources (#106) * Source remapping beginnings * Fix navigation to remapped classes * Translate identifier info reference * Remap local variables with default names in source * Caching translator * Fix lack of highlighting for first opened class * Fix unicode variable names * Unicode checker shouldn't be checking just alphanumeric * Fix package tree being built from obf names * Don't index `this` as method call for method::reference * Apply proposed names * Fix source export issues * Replace unicode var names at bytecode level uniquely * Drop imports from editor source * Class selector fixes * Delta keep track of base mappings to enable lookup of old names * Optimize source remapping by remapping source with a StringBuffer instead of copying * Bump version --- .../enigma/analysis/index/BridgeMethodIndex.java | 16 +--------------- .../cuchaz/enigma/analysis/index/EntryIndex.java | 20 +------------------- .../enigma/analysis/index/InheritanceIndex.java | 18 +----------------- .../cuchaz/enigma/analysis/index/JarIndex.java | 22 +--------------------- .../enigma/analysis/index/RemappableIndex.java | 9 --------- 5 files changed, 4 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/cuchaz/enigma/analysis/index/RemappableIndex.java (limited to 'src/main/java/cuchaz/enigma/analysis/index') diff --git a/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java b/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java index e1903d9..8f6bd46 100644 --- a/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/index/BridgeMethodIndex.java @@ -1,7 +1,6 @@ package cuchaz.enigma.analysis.index; import com.google.common.collect.Maps; -import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryResolver; import cuchaz.enigma.translation.representation.AccessFlags; import cuchaz.enigma.translation.representation.entry.MethodEntry; @@ -10,7 +9,7 @@ import javax.annotation.Nullable; import java.util.Collection; import java.util.Map; -public class BridgeMethodIndex implements JarIndexer, RemappableIndex { +public class BridgeMethodIndex implements JarIndexer { private final EntryIndex entryIndex; private final ReferenceIndex referenceIndex; @@ -21,19 +20,6 @@ public class BridgeMethodIndex implements JarIndexer, RemappableIndex { this.referenceIndex = referenceIndex; } - @Override - public void remap(Translator translator) { - accessedToBridge = translator.translate(accessedToBridge); - } - - @Override - public BridgeMethodIndex remapped(Translator translator) { - BridgeMethodIndex index = new BridgeMethodIndex(entryIndex, referenceIndex); - index.accessedToBridge = translator.translate(accessedToBridge); - - return index; - } - @Override public void processIndex(EntryResolver resolver) { // look for access and bridged methods diff --git a/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java b/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java index 55bfbc2..773eaf1 100644 --- a/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/index/EntryIndex.java @@ -1,6 +1,5 @@ package cuchaz.enigma.analysis.index; -import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.representation.AccessFlags; import cuchaz.enigma.translation.representation.entry.*; @@ -9,28 +8,11 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -public class EntryIndex implements JarIndexer, RemappableIndex { +public class EntryIndex implements JarIndexer { private Map classes = new HashMap<>(); private Map fields = new HashMap<>(); private Map methods = new HashMap<>(); - @Override - public void remap(Translator translator) { - classes = translator.translateKeys(classes); - fields = translator.translateKeys(fields); - methods = translator.translateKeys(methods); - } - - @Override - public EntryIndex remapped(Translator translator) { - EntryIndex index = new EntryIndex(); - index.classes = translator.translateKeys(classes); - index.fields = translator.translateKeys(fields); - index.methods = translator.translateKeys(methods); - - return index; - } - @Override public void indexClass(ClassDefEntry classEntry) { classes.put(classEntry, classEntry.getAccess()); diff --git a/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java b/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java index d165cc8..17bed54 100644 --- a/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/index/InheritanceIndex.java @@ -14,7 +14,6 @@ package cuchaz.enigma.analysis.index; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; -import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.representation.entry.ClassDefEntry; import cuchaz.enigma.translation.representation.entry.ClassEntry; @@ -22,25 +21,10 @@ import java.util.Collection; import java.util.LinkedList; import java.util.Set; -public class InheritanceIndex implements JarIndexer, RemappableIndex { +public class InheritanceIndex implements JarIndexer { private Multimap classParents = HashMultimap.create(); private Multimap classChildren = HashMultimap.create(); - @Override - public void remap(Translator translator) { - classChildren = translator.translate(classChildren); - classParents = translator.translate(classParents); - } - - @Override - public InheritanceIndex remapped(Translator translator) { - InheritanceIndex index = new InheritanceIndex(); - index.classParents = translator.translate(classParents); - index.classChildren = translator.translate(classChildren); - - return index; - } - @Override public void indexClass(ClassDefEntry classEntry) { ClassEntry superClass = classEntry.getSuperClass(); diff --git a/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java index 0880244..9b21cba 100644 --- a/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java @@ -14,7 +14,6 @@ package cuchaz.enigma.analysis.index; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import cuchaz.enigma.analysis.ParsedJar; -import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryResolver; import cuchaz.enigma.translation.mapping.IndexEntryResolver; import cuchaz.enigma.translation.representation.entry.*; @@ -25,7 +24,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.function.Consumer; -public class JarIndex implements JarIndexer, RemappableIndex { +public class JarIndex implements JarIndexer { private final EntryIndex entryIndex; private final InheritanceIndex inheritanceIndex; private final ReferenceIndex referenceIndex; @@ -53,25 +52,6 @@ public class JarIndex implements JarIndexer, RemappableIndex { return new JarIndex(entryIndex, inheritanceIndex, referenceIndex, bridgeMethodIndex); } - @Override - public void remap(Translator translator) { - entryIndex.remap(translator); - inheritanceIndex.remap(translator); - bridgeMethodIndex.remap(translator); - } - - @Override - public JarIndex remapped(Translator translator) { - EntryIndex entryIndex = this.entryIndex.remapped(translator); - InheritanceIndex inheritanceIndex = this.inheritanceIndex.remapped(translator); - BridgeMethodIndex bridgeMethodIndex = this.bridgeMethodIndex.remapped(translator); - - JarIndex remappedIndex = new JarIndex(entryIndex, inheritanceIndex, this.referenceIndex, bridgeMethodIndex); - remappedIndex.methodImplementations.putAll(methodImplementations); - - return remappedIndex; - } - public void indexJar(ParsedJar jar, Consumer progress) { progress.accept("Indexing entries (1/3)"); jar.visitReader(name -> new IndexClassVisitor(this, Opcodes.ASM5), ClassReader.SKIP_CODE); diff --git a/src/main/java/cuchaz/enigma/analysis/index/RemappableIndex.java b/src/main/java/cuchaz/enigma/analysis/index/RemappableIndex.java deleted file mode 100644 index 537e772..0000000 --- a/src/main/java/cuchaz/enigma/analysis/index/RemappableIndex.java +++ /dev/null @@ -1,9 +0,0 @@ -package cuchaz.enigma.analysis.index; - -import cuchaz.enigma.translation.Translator; - -public interface RemappableIndex { - void remap(Translator translator); - - RemappableIndex remapped(Translator translator); -} -- cgit v1.2.3