summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cuchaz/enigma/Deobfuscator.java5
-rw-r--r--src/cuchaz/enigma/mapping/ClassMapping.java17
-rw-r--r--src/cuchaz/enigma/mapping/MappingsReader.java3
-rw-r--r--src/cuchaz/enigma/mapping/MappingsRenamer.java25
-rw-r--r--src/cuchaz/enigma/mapping/MappingsWriter.java4
-rw-r--r--src/cuchaz/enigma/mapping/MethodMapping.java27
-rw-r--r--src/cuchaz/enigma/mapping/Translator.java4
7 files changed, 32 insertions, 53 deletions
diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java
index 526534da..8944eec7 100644
--- a/src/cuchaz/enigma/Deobfuscator.java
+++ b/src/cuchaz/enigma/Deobfuscator.java
@@ -1,5 +1,6 @@
1/******************************************************************************* 1/*******************************************************************************
2 * Copyright (c) 2014 Jeff Martin. 2 * Copyright (c) 2014 Jeff Martin.\
3 *
3 * All rights reserved. This program and the accompanying materials 4 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Public License v3.0 5 * are made available under the terms of the GNU Public License v3.0
5 * which accompanies this distribution, and is available at 6 * which accompanies this distribution, and is available at
@@ -78,7 +79,9 @@ public class Deobfuscator
78 79
79 // config the decompiler 80 // config the decompiler
80 m_settings = DecompilerSettings.javaDefaults(); 81 m_settings = DecompilerSettings.javaDefaults();
82 m_settings.setMergeVariables( true );
81 m_settings.setForceExplicitImports( true ); 83 m_settings.setForceExplicitImports( true );
84 m_settings.setForceExplicitTypeArguments( true );
82 // DEBUG 85 // DEBUG
83 //m_settings.setShowSyntheticMembers( true ); 86 //m_settings.setShowSyntheticMembers( true );
84 87
diff --git a/src/cuchaz/enigma/mapping/ClassMapping.java b/src/cuchaz/enigma/mapping/ClassMapping.java
index 6a89df7f..200d9ca2 100644
--- a/src/cuchaz/enigma/mapping/ClassMapping.java
+++ b/src/cuchaz/enigma/mapping/ClassMapping.java
@@ -214,7 +214,7 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
214 assert( wasAdded ); 214 assert( wasAdded );
215 if( methodMapping.getDeobfName() != null ) 215 if( methodMapping.getDeobfName() != null )
216 { 216 {
217 String deobfKey = getMethodKey( methodMapping.getDeobfName(), methodMapping.getDeobfSignature() ); 217 String deobfKey = getMethodKey( methodMapping.getDeobfName(), methodMapping.getObfSignature() );
218 if( m_methodsByDeobf.containsKey( deobfKey ) ) 218 if( m_methodsByDeobf.containsKey( deobfKey ) )
219 { 219 {
220 throw new Error( "Already have mapping for " + m_deobfName + "." + deobfKey ); 220 throw new Error( "Already have mapping for " + m_deobfName + "." + deobfKey );
@@ -248,7 +248,7 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
248 return name + signature; 248 return name + signature;
249 } 249 }
250 250
251 public void setMethodNameAndSignature( String obfName, String obfSignature, String deobfName, String deobfSignature ) 251 public void setMethodName( String obfName, String obfSignature, String deobfName )
252 { 252 {
253 MethodMapping methodMapping = m_methodsByObf.get( getMethodKey( obfName, obfSignature ) ); 253 MethodMapping methodMapping = m_methodsByObf.get( getMethodKey( obfName, obfSignature ) );
254 if( methodMapping == null ) 254 if( methodMapping == null )
@@ -257,23 +257,14 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
257 } 257 }
258 else if( methodMapping.getDeobfName() != null ) 258 else if( methodMapping.getDeobfName() != null )
259 { 259 {
260 boolean wasRemoved = m_methodsByDeobf.remove( getMethodKey( methodMapping.getDeobfName(), methodMapping.getDeobfSignature() ) ) != null; 260 boolean wasRemoved = m_methodsByDeobf.remove( getMethodKey( methodMapping.getDeobfName(), methodMapping.getObfSignature() ) ) != null;
261 assert( wasRemoved ); 261 assert( wasRemoved );
262 } 262 }
263 methodMapping.setDeobfName( deobfName ); 263 methodMapping.setDeobfName( deobfName );
264 methodMapping.setDeobfSignature( deobfSignature ); 264 boolean wasAdded = m_methodsByDeobf.put( getMethodKey( deobfName, obfSignature ), methodMapping ) == null;
265 boolean wasAdded = m_methodsByDeobf.put( getMethodKey( deobfName, deobfSignature ), methodMapping ) == null;
266 assert( wasAdded ); 265 assert( wasAdded );
267 } 266 }
268 267
269 public void updateDeobfMethodSignatures( Translator translator )
270 {
271 for( MethodMapping methodIndex : m_methodsByObf.values() )
272 {
273 methodIndex.setDeobfSignature( translator.translateSignature( methodIndex.getObfSignature() ) );
274 }
275 }
276
277 //// ARGUMENTS //////// 268 //// ARGUMENTS ////////
278 269
279 public void setArgumentName( String obfMethodName, String obfMethodSignature, int argumentIndex, String argumentName ) 270 public void setArgumentName( String obfMethodName, String obfMethodSignature, int argumentIndex, String argumentName )
diff --git a/src/cuchaz/enigma/mapping/MappingsReader.java b/src/cuchaz/enigma/mapping/MappingsReader.java
index 7888836e..5cbad59c 100644
--- a/src/cuchaz/enigma/mapping/MappingsReader.java
+++ b/src/cuchaz/enigma/mapping/MappingsReader.java
@@ -193,14 +193,13 @@ public class MappingsReader
193 String obfName = parts[1]; 193 String obfName = parts[1];
194 String deobfName = parts[2]; 194 String deobfName = parts[2];
195 String obfSignature = moveSignatureOutOfDefaultPackage( parts[3], Constants.NonePackage ); 195 String obfSignature = moveSignatureOutOfDefaultPackage( parts[3], Constants.NonePackage );
196 String deobfSignature = moveSignatureOutOfDefaultPackage( parts[4], Constants.NonePackage );
197 if( obfName.equals( deobfName ) ) 196 if( obfName.equals( deobfName ) )
198 { 197 {
199 return new MethodMapping( obfName, obfSignature ); 198 return new MethodMapping( obfName, obfSignature );
200 } 199 }
201 else 200 else
202 { 201 {
203 return new MethodMapping( obfName, obfSignature, deobfName, deobfSignature ); 202 return new MethodMapping( obfName, obfSignature, deobfName );
204 } 203 }
205 } 204 }
206 } 205 }
diff --git a/src/cuchaz/enigma/mapping/MappingsRenamer.java b/src/cuchaz/enigma/mapping/MappingsRenamer.java
index f84b2489..49e7b5fd 100644
--- a/src/cuchaz/enigma/mapping/MappingsRenamer.java
+++ b/src/cuchaz/enigma/mapping/MappingsRenamer.java
@@ -46,14 +46,15 @@ public class MappingsRenamer
46 } 46 }
47 else 47 else
48 { 48 {
49 boolean wasRemoved = m_mappings.m_classesByDeobf.remove( classMapping.getDeobfName() ) != null; 49 if( classMapping.getDeobfName() != null )
50 assert( wasRemoved ); 50 {
51 boolean wasRemoved = m_mappings.m_classesByDeobf.remove( classMapping.getDeobfName() ) != null;
52 assert( wasRemoved );
53 }
51 classMapping.setDeobfName( deobfName ); 54 classMapping.setDeobfName( deobfName );
52 boolean wasAdded = m_mappings.m_classesByDeobf.put( deobfName, classMapping ) == null; 55 boolean wasAdded = m_mappings.m_classesByDeobf.put( deobfName, classMapping ) == null;
53 assert( wasAdded ); 56 assert( wasAdded );
54 } 57 }
55
56 updateDeobfMethodSignatures();
57 } 58 }
58 59
59 public void setFieldName( FieldEntry obf, String deobfName ) 60 public void setFieldName( FieldEntry obf, String deobfName )
@@ -76,7 +77,8 @@ public class MappingsRenamer
76 deobfName = NameValidator.validateMethodName( deobfName ); 77 deobfName = NameValidator.validateMethodName( deobfName );
77 for( MethodEntry entry : implementations ) 78 for( MethodEntry entry : implementations )
78 { 79 {
79 MethodEntry targetEntry = new MethodEntry( entry.getClassEntry(), deobfName, entry.getSignature() ); 80 String deobfSignature = getTranslator( TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() );
81 MethodEntry targetEntry = new MethodEntry( entry.getClassEntry(), deobfName, deobfSignature );
80 if( m_mappings.containsDeobfMethod( entry.getClassEntry(), deobfName, entry.getSignature() ) || m_index.containsObfMethod( targetEntry ) ) 82 if( m_mappings.containsDeobfMethod( entry.getClassEntry(), deobfName, entry.getSignature() ) || m_index.containsObfMethod( targetEntry ) )
81 { 83 {
82 String deobfClassName = getTranslator( TranslationDirection.Deobfuscating ).translateClass( entry.getClassName() ); 84 String deobfClassName = getTranslator( TranslationDirection.Deobfuscating ).translateClass( entry.getClassName() );
@@ -101,8 +103,7 @@ public class MappingsRenamer
101 } 103 }
102 104
103 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() ); 105 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
104 String deobfSignature = getTranslator( TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() ); 106 classMapping.setMethodName( obf.getName(), obf.getSignature(), deobfName );
105 classMapping.setMethodNameAndSignature( obf.getName(), obf.getSignature(), deobfName, deobfSignature );
106 } 107 }
107 108
108 public void setArgumentName( ArgumentEntry obf, String deobfName ) 109 public void setArgumentName( ArgumentEntry obf, String deobfName )
@@ -137,8 +138,6 @@ public class MappingsRenamer
137 classMapping = new ClassMapping( obfClassName ); 138 classMapping = new ClassMapping( obfClassName );
138 boolean obfWasAdded = m_mappings.m_classesByObf.put( classMapping.getObfName(), classMapping ) == null; 139 boolean obfWasAdded = m_mappings.m_classesByObf.put( classMapping.getObfName(), classMapping ) == null;
139 assert( obfWasAdded ); 140 assert( obfWasAdded );
140 boolean deobfWasAdded = m_mappings.m_classesByDeobf.put( classMapping.getDeobfName(), classMapping ) == null;
141 assert( deobfWasAdded );
142 } 141 }
143 return classMapping; 142 return classMapping;
144 } 143 }
@@ -153,14 +152,6 @@ public class MappingsRenamer
153 return classMapping; 152 return classMapping;
154 } 153 }
155 154
156 private void updateDeobfMethodSignatures( )
157 {
158 for( ClassMapping classMapping : m_mappings.m_classesByObf.values() )
159 {
160 classMapping.updateDeobfMethodSignatures( getTranslator( TranslationDirection.Deobfuscating ) );
161 }
162 }
163
164 private Translator getTranslator( TranslationDirection direction ) 155 private Translator getTranslator( TranslationDirection direction )
165 { 156 {
166 return m_mappings.getTranslator( m_index.getTranslationIndex(), direction ); 157 return m_mappings.getTranslator( m_index.getTranslationIndex(), direction );
diff --git a/src/cuchaz/enigma/mapping/MappingsWriter.java b/src/cuchaz/enigma/mapping/MappingsWriter.java
index ea6e6558..3c86dfc0 100644
--- a/src/cuchaz/enigma/mapping/MappingsWriter.java
+++ b/src/cuchaz/enigma/mapping/MappingsWriter.java
@@ -80,10 +80,10 @@ public class MappingsWriter
80 } 80 }
81 else 81 else
82 { 82 {
83 out.format( "%sMETHOD %s %s %s %s\n", 83 out.format( "%sMETHOD %s %s %s\n",
84 getIndent( depth ), 84 getIndent( depth ),
85 methodMapping.getObfName(), methodMapping.getDeobfName(), 85 methodMapping.getObfName(), methodMapping.getDeobfName(),
86 methodMapping.getObfSignature(), methodMapping.getDeobfSignature() 86 methodMapping.getObfSignature()
87 ); 87 );
88 } 88 }
89 89
diff --git a/src/cuchaz/enigma/mapping/MethodMapping.java b/src/cuchaz/enigma/mapping/MethodMapping.java
index e59cb2eb..6210fd09 100644
--- a/src/cuchaz/enigma/mapping/MethodMapping.java
+++ b/src/cuchaz/enigma/mapping/MethodMapping.java
@@ -23,20 +23,26 @@ public class MethodMapping implements Serializable, Comparable<MethodMapping>
23 private String m_obfName; 23 private String m_obfName;
24 private String m_deobfName; 24 private String m_deobfName;
25 private String m_obfSignature; 25 private String m_obfSignature;
26 private String m_deobfSignature;
27 private Map<Integer,ArgumentMapping> m_arguments; 26 private Map<Integer,ArgumentMapping> m_arguments;
28 27
29 public MethodMapping( String obfName, String obfSignature ) 28 public MethodMapping( String obfName, String obfSignature )
30 { 29 {
31 this( obfName, obfSignature, null, null ); 30 this( obfName, obfSignature, null );
32 } 31 }
33 32
34 public MethodMapping( String obfName, String obfSignature, String deobfName, String deobfSignature ) 33 public MethodMapping( String obfName, String obfSignature, String deobfName )
35 { 34 {
35 if( obfName == null )
36 {
37 throw new IllegalArgumentException( "obf name cannot be null!" );
38 }
39 if( obfSignature == null )
40 {
41 throw new IllegalArgumentException( "obf signature cannot be null!" );
42 }
36 m_obfName = obfName; 43 m_obfName = obfName;
37 m_deobfName = NameValidator.validateMethodName( deobfName ); 44 m_deobfName = NameValidator.validateMethodName( deobfName );
38 m_obfSignature = obfSignature; 45 m_obfSignature = obfSignature;
39 m_deobfSignature = deobfSignature;
40 m_arguments = new TreeMap<Integer,ArgumentMapping>(); 46 m_arguments = new TreeMap<Integer,ArgumentMapping>();
41 } 47 }
42 48
@@ -59,15 +65,6 @@ public class MethodMapping implements Serializable, Comparable<MethodMapping>
59 return m_obfSignature; 65 return m_obfSignature;
60 } 66 }
61 67
62 public String getDeobfSignature( )
63 {
64 return m_deobfSignature;
65 }
66 public void setDeobfSignature( String val )
67 {
68 m_deobfSignature = val;
69 }
70
71 public Iterable<ArgumentMapping> arguments( ) 68 public Iterable<ArgumentMapping> arguments( )
72 { 69 {
73 return m_arguments.values(); 70 return m_arguments.values();
@@ -127,8 +124,6 @@ public class MethodMapping implements Serializable, Comparable<MethodMapping>
127 buf.append( "\n" ); 124 buf.append( "\n" );
128 buf.append( "\t" ); 125 buf.append( "\t" );
129 buf.append( m_obfSignature ); 126 buf.append( m_obfSignature );
130 buf.append( " <-> " );
131 buf.append( m_deobfSignature );
132 buf.append( "\n" ); 127 buf.append( "\n" );
133 buf.append( "\tArguments:\n" ); 128 buf.append( "\tArguments:\n" );
134 for( ArgumentMapping argumentMapping : m_arguments.values() ) 129 for( ArgumentMapping argumentMapping : m_arguments.values() )
@@ -145,7 +140,7 @@ public class MethodMapping implements Serializable, Comparable<MethodMapping>
145 @Override 140 @Override
146 public int compareTo( MethodMapping other ) 141 public int compareTo( MethodMapping other )
147 { 142 {
148 return ( m_obfName + m_obfSignature ).compareTo( ( other.m_obfName + other.m_obfSignature ) ); 143 return ( m_obfName + m_obfSignature ).compareTo( other.m_obfName + other.m_obfSignature );
149 } 144 }
150 145
151 public boolean renameObfClass( final String oldObfClassName, final String newObfClassName ) 146 public boolean renameObfClass( final String oldObfClassName, final String newObfClassName )
diff --git a/src/cuchaz/enigma/mapping/Translator.java b/src/cuchaz/enigma/mapping/Translator.java
index f5aafdd1..659ce9a2 100644
--- a/src/cuchaz/enigma/mapping/Translator.java
+++ b/src/cuchaz/enigma/mapping/Translator.java
@@ -180,7 +180,7 @@ public class Translator
180 // look for the method 180 // look for the method
181 MethodMapping methodMapping = m_direction.choose( 181 MethodMapping methodMapping = m_direction.choose(
182 classMapping.getMethodByObf( in.getName(), in.getSignature() ), 182 classMapping.getMethodByObf( in.getName(), in.getSignature() ),
183 classMapping.getMethodByDeobf( in.getName(), in.getSignature() ) 183 classMapping.getMethodByDeobf( in.getName(), translateSignature( in.getSignature() ) )
184 ); 184 );
185 if( methodMapping != null ) 185 if( methodMapping != null )
186 { 186 {
@@ -248,7 +248,7 @@ public class Translator
248 // look for the method 248 // look for the method
249 MethodMapping methodMapping = m_direction.choose( 249 MethodMapping methodMapping = m_direction.choose(
250 classMapping.getMethodByObf( in.getMethodName(), in.getMethodSignature() ), 250 classMapping.getMethodByObf( in.getMethodName(), in.getMethodSignature() ),
251 classMapping.getMethodByDeobf( in.getMethodName(), in.getMethodSignature() ) 251 classMapping.getMethodByDeobf( in.getMethodName(), translateSignature( in.getMethodSignature() ) )
252 ); 252 );
253 if( methodMapping != null ) 253 if( methodMapping != null )
254 { 254 {