summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/ClassMapping.java
diff options
context:
space:
mode:
authorGravatar jeff2014-08-31 16:14:45 -0400
committerGravatar jeff2014-08-31 16:14:45 -0400
commit4e9c52d5fc5d23e8a77857e712654596203acb31 (patch)
treec4a48493e6d60dfec9df326dac2b1ef229aedffd /src/cuchaz/enigma/mapping/ClassMapping.java
parentfixed lots of bugs in the mappings converter. It's finally ready. =) (diff)
downloadenigma-fork-4e9c52d5fc5d23e8a77857e712654596203acb31.tar.gz
enigma-fork-4e9c52d5fc5d23e8a77857e712654596203acb31.tar.xz
enigma-fork-4e9c52d5fc5d23e8a77857e712654596203acb31.zip
fixed mapping conversion bug with class rename order
Diffstat (limited to '')
-rw-r--r--src/cuchaz/enigma/mapping/ClassMapping.java36
1 files changed, 21 insertions, 15 deletions
diff --git a/src/cuchaz/enigma/mapping/ClassMapping.java b/src/cuchaz/enigma/mapping/ClassMapping.java
index 095cb38..1219e7c 100644
--- a/src/cuchaz/enigma/mapping/ClassMapping.java
+++ b/src/cuchaz/enigma/mapping/ClassMapping.java
@@ -301,31 +301,37 @@ public class ClassMapping implements Serializable, Comparable<ClassMapping>
301 return m_obfName.compareTo( other.m_obfName ); 301 return m_obfName.compareTo( other.m_obfName );
302 } 302 }
303 303
304 public void renameObfClasses( Map<String,String> nameMap ) 304 public boolean renameObfClass( String oldObfClassName, String newObfClassName )
305 { 305 {
306 // rename self 306 // rename inner classes
307 for( ClassMapping innerClassMapping : new ArrayList<ClassMapping>( m_innerClassesByObf.values() ) )
307 { 308 {
308 String newName = nameMap.get( m_obfName ); 309 if( innerClassMapping.renameObfClass( oldObfClassName, newObfClassName ) )
309 if( newName != null )
310 { 310 {
311 m_obfName = newName; 311 m_innerClassesByObf.remove( oldObfClassName );
312 m_innerClassesByObf.put( newObfClassName, innerClassMapping );
313 assert( m_innerClassesByObf.size() == m_innerClassesByDeobf.size() );
312 } 314 }
313 } 315 }
314 316
315 // rename inner classes 317 // rename method signatures
316 for( ClassMapping classMapping : new ArrayList<ClassMapping>( m_innerClassesByObf.values() ) ) 318 for( MethodMapping methodMapping : new ArrayList<MethodMapping>( m_methodsByObf.values() ) )
317 { 319 {
318 m_innerClassesByObf.remove( classMapping.getObfName() ); 320 String oldMethodKey = getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() );
319 classMapping.renameObfClasses( nameMap ); 321 if( methodMapping.renameObfClass( oldObfClassName, newObfClassName ) )
320 m_innerClassesByObf.put( classMapping.getObfName(), classMapping ); 322 {
323 m_methodsByObf.remove( oldMethodKey );
324 m_methodsByObf.put( getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() ), methodMapping );
325 assert( m_methodsByObf.size() == m_methodsByDeobf.size() );
326 }
321 } 327 }
322 328
323 // rename method signatures 329 if( m_obfName.equals( oldObfClassName ) )
324 for( MethodMapping methodMapping : new ArrayList<MethodMapping>( m_methodsByObf.values() ) )
325 { 330 {
326 m_methodsByObf.remove( getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() ) ); 331 // rename this class
327 methodMapping.renameObfClasses( nameMap ); 332 m_obfName = newObfClassName;
328 m_methodsByObf.put( getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() ), methodMapping ); 333 return true;
329 } 334 }
335 return false;
330 } 336 }
331} 337}