summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/ClassMapping.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/mapping/ClassMapping.java')
-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}