summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping
diff options
context:
space:
mode:
authorGravatar jeff2014-09-01 22:52:07 -0400
committerGravatar jeff2014-09-01 22:52:07 -0400
commit360bbd1c2fca8cbd575907b7d930a8072fccb0c2 (patch)
tree93d0f3c4a0901411427df580c5ddb75cf27440f1 /src/cuchaz/enigma/mapping
parentadded copyright notice (diff)
downloadenigma-fork-360bbd1c2fca8cbd575907b7d930a8072fccb0c2.tar.gz
enigma-fork-360bbd1c2fca8cbd575907b7d930a8072fccb0c2.tar.xz
enigma-fork-360bbd1c2fca8cbd575907b7d930a8072fccb0c2.zip
refactored jar,translation index. fixed bug with field renaming when fields are shadowed by subclasses
Diffstat (limited to 'src/cuchaz/enigma/mapping')
-rw-r--r--src/cuchaz/enigma/mapping/Mappings.java22
-rw-r--r--src/cuchaz/enigma/mapping/MappingsRenamer.java (renamed from src/cuchaz/enigma/mapping/Renamer.java)22
-rw-r--r--src/cuchaz/enigma/mapping/Translator.java21
3 files changed, 45 insertions, 20 deletions
diff --git a/src/cuchaz/enigma/mapping/Mappings.java b/src/cuchaz/enigma/mapping/Mappings.java
index 378d4c0..f52094f 100644
--- a/src/cuchaz/enigma/mapping/Mappings.java
+++ b/src/cuchaz/enigma/mapping/Mappings.java
@@ -24,8 +24,7 @@ import com.beust.jcommander.internal.Sets;
24import com.google.common.collect.Maps; 24import com.google.common.collect.Maps;
25 25
26import cuchaz.enigma.Util; 26import cuchaz.enigma.Util;
27import cuchaz.enigma.analysis.Ancestries; 27import cuchaz.enigma.analysis.TranslationIndex;
28import cuchaz.enigma.analysis.DeobfuscatedAncestries;
29import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater; 28import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater;
30 29
31public class Mappings implements Serializable 30public class Mappings implements Serializable
@@ -108,12 +107,27 @@ public class Mappings implements Serializable
108 return m_classesByDeobf.get( deobfName ); 107 return m_classesByDeobf.get( deobfName );
109 } 108 }
110 109
111 public Translator getTranslator( Ancestries ancestries, TranslationDirection direction ) 110 public Translator getTranslator( TranslationIndex index, TranslationDirection direction )
112 { 111 {
112 if( direction == TranslationDirection.Obfuscating )
113 {
114 // deobfuscate the index
115 index = new TranslationIndex( index );
116 Map<String,String> renames = Maps.newHashMap();
117 for( ClassMapping classMapping : classes() )
118 {
119 renames.put( classMapping.getObfName(), classMapping.getDeobfName() );
120 for( ClassMapping innerClassMapping : classMapping.innerClasses() )
121 {
122 renames.put( innerClassMapping.getObfName(), innerClassMapping.getDeobfName() );
123 }
124 }
125 index.renameClasses( renames );
126 }
113 return new Translator( 127 return new Translator(
114 direction, 128 direction,
115 direction.choose( m_classesByObf, m_classesByDeobf ), 129 direction.choose( m_classesByObf, m_classesByDeobf ),
116 direction.choose( ancestries, new DeobfuscatedAncestries( ancestries, m_classesByObf, m_classesByDeobf ) ) 130 index
117 ); 131 );
118 } 132 }
119 133
diff --git a/src/cuchaz/enigma/mapping/Renamer.java b/src/cuchaz/enigma/mapping/MappingsRenamer.java
index 15d9af4..9d036d8 100644
--- a/src/cuchaz/enigma/mapping/Renamer.java
+++ b/src/cuchaz/enigma/mapping/MappingsRenamer.java
@@ -18,12 +18,12 @@ import java.util.zip.GZIPOutputStream;
18 18
19import cuchaz.enigma.analysis.JarIndex; 19import cuchaz.enigma.analysis.JarIndex;
20 20
21public class Renamer 21public class MappingsRenamer
22{ 22{
23 private JarIndex m_index; 23 private JarIndex m_index;
24 private Mappings m_mappings; 24 private Mappings m_mappings;
25 25
26 public Renamer( JarIndex index, Mappings mappings ) 26 public MappingsRenamer( JarIndex index, Mappings mappings )
27 { 27 {
28 m_index = index; 28 m_index = index;
29 m_mappings = mappings; 29 m_mappings = mappings;
@@ -77,8 +77,8 @@ public class Renamer
77 MethodEntry targetEntry = new MethodEntry( entry.getClassEntry(), deobfName, entry.getSignature() ); 77 MethodEntry targetEntry = new MethodEntry( entry.getClassEntry(), deobfName, entry.getSignature() );
78 if( m_mappings.containsDeobfMethod( entry.getClassEntry(), deobfName, entry.getSignature() ) || m_index.containsObfMethod( targetEntry ) ) 78 if( m_mappings.containsDeobfMethod( entry.getClassEntry(), deobfName, entry.getSignature() ) || m_index.containsObfMethod( targetEntry ) )
79 { 79 {
80 String className = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateClass( entry.getClassName() ); 80 String deobfClassName = getTranslator( TranslationDirection.Deobfuscating ).translateClass( entry.getClassName() );
81 throw new IllegalNameException( deobfName, "There is already a method with that name and signature in class " + className ); 81 throw new IllegalNameException( deobfName, "There is already a method with that name and signature in class " + deobfClassName );
82 } 82 }
83 } 83 }
84 84
@@ -94,12 +94,12 @@ public class Renamer
94 MethodEntry targetEntry = new MethodEntry( obf.getClassEntry(), deobfName, obf.getSignature() ); 94 MethodEntry targetEntry = new MethodEntry( obf.getClassEntry(), deobfName, obf.getSignature() );
95 if( m_mappings.containsDeobfMethod( obf.getClassEntry(), deobfName, obf.getSignature() ) || m_index.containsObfMethod( targetEntry ) ) 95 if( m_mappings.containsDeobfMethod( obf.getClassEntry(), deobfName, obf.getSignature() ) || m_index.containsObfMethod( targetEntry ) )
96 { 96 {
97 String className = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateClass( obf.getClassName() ); 97 String deobfClassName = getTranslator( TranslationDirection.Deobfuscating ).translateClass( obf.getClassName() );
98 throw new IllegalNameException( deobfName, "There is already a method with that name and signature in class " + className ); 98 throw new IllegalNameException( deobfName, "There is already a method with that name and signature in class " + deobfClassName );
99 } 99 }
100 100
101 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() ); 101 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
102 String deobfSignature = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() ); 102 String deobfSignature = getTranslator( TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() );
103 classMapping.setMethodNameAndSignature( obf.getName(), obf.getSignature(), deobfName, deobfSignature ); 103 classMapping.setMethodNameAndSignature( obf.getName(), obf.getSignature(), deobfName, deobfSignature );
104 } 104 }
105 105
@@ -151,10 +151,14 @@ public class Renamer
151 151
152 private void updateDeobfMethodSignatures( ) 152 private void updateDeobfMethodSignatures( )
153 { 153 {
154 Translator translator = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating );
155 for( ClassMapping classMapping : m_mappings.m_classesByObf.values() ) 154 for( ClassMapping classMapping : m_mappings.m_classesByObf.values() )
156 { 155 {
157 classMapping.updateDeobfMethodSignatures( translator ); 156 classMapping.updateDeobfMethodSignatures( getTranslator( TranslationDirection.Deobfuscating ) );
158 } 157 }
159 } 158 }
159
160 private Translator getTranslator( TranslationDirection direction )
161 {
162 return m_mappings.getTranslator( m_index.getTranslationIndex(), direction );
163 }
160} 164}
diff --git a/src/cuchaz/enigma/mapping/Translator.java b/src/cuchaz/enigma/mapping/Translator.java
index 23bf095..f5aafdd 100644
--- a/src/cuchaz/enigma/mapping/Translator.java
+++ b/src/cuchaz/enigma/mapping/Translator.java
@@ -16,27 +16,27 @@ import java.util.Map;
16 16
17import com.beust.jcommander.internal.Maps; 17import com.beust.jcommander.internal.Maps;
18 18
19import cuchaz.enigma.analysis.Ancestries; 19import cuchaz.enigma.analysis.TranslationIndex;
20import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater; 20import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater;
21 21
22public class Translator 22public class Translator
23{ 23{
24 private TranslationDirection m_direction; 24 private TranslationDirection m_direction;
25 public Map<String,ClassMapping> m_classes; 25 private Map<String,ClassMapping> m_classes;
26 private Ancestries m_ancestries; 26 private TranslationIndex m_index;
27 27
28 public Translator( ) 28 public Translator( )
29 { 29 {
30 m_direction = null; 30 m_direction = null;
31 m_classes = Maps.newHashMap(); 31 m_classes = Maps.newHashMap();
32 m_ancestries = new Ancestries(); 32 m_index = new TranslationIndex();
33 } 33 }
34 34
35 protected Translator( TranslationDirection direction, Map<String,ClassMapping> classes, Ancestries ancestries ) 35 public Translator( TranslationDirection direction, Map<String,ClassMapping> classes, TranslationIndex index )
36 { 36 {
37 m_direction = direction; 37 m_direction = direction;
38 m_classes = classes; 38 m_classes = classes;
39 m_ancestries = ancestries; 39 m_index = index;
40 } 40 }
41 41
42 @SuppressWarnings( "unchecked" ) 42 @SuppressWarnings( "unchecked" )
@@ -145,6 +145,13 @@ public class Translator
145 return translatedName; 145 return translatedName;
146 } 146 }
147 } 147 }
148
149 // is the field implemented in this class?
150 if( m_index.containsField( className, in.getName() ) )
151 {
152 // stop traversing the superclass chain
153 break;
154 }
148 } 155 }
149 return null; 156 return null;
150 } 157 }
@@ -291,7 +298,7 @@ public class Translator
291 { 298 {
292 List<String> ancestry = new ArrayList<String>(); 299 List<String> ancestry = new ArrayList<String>();
293 ancestry.add( className ); 300 ancestry.add( className );
294 ancestry.addAll( m_ancestries.getAncestry( className ) ); 301 ancestry.addAll( m_index.getAncestry( className ) );
295 return ancestry; 302 return ancestry;
296 } 303 }
297 304