diff options
Diffstat (limited to '')
| -rw-r--r-- | src/cuchaz/enigma/mapping/ClassMapping.java | 36 |
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 | } |