From 6c4440ac1133bfaa7871d1049d174528a289ef30 Mon Sep 17 00:00:00 2001 From: hg Date: Sun, 17 Aug 2014 10:56:17 -0400 Subject: added support for automatic reconstruction of inner and anonymous classes also added class to restore bridge method flags taken out by the obfuscator --- src/cuchaz/enigma/mapping/MappingsWriter.java | 40 +++++++++++++++++++-------- 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'src/cuchaz/enigma/mapping/MappingsWriter.java') diff --git a/src/cuchaz/enigma/mapping/MappingsWriter.java b/src/cuchaz/enigma/mapping/MappingsWriter.java index a97052f..6203571 100644 --- a/src/cuchaz/enigma/mapping/MappingsWriter.java +++ b/src/cuchaz/enigma/mapping/MappingsWriter.java @@ -30,50 +30,56 @@ public class MappingsWriter { for( ClassMapping classMapping : sorted( mappings.classes() ) ) { - write( out, classMapping ); + write( out, classMapping, 0 ); } } - public void write( PrintWriter out, ClassMapping classMapping ) + private void write( PrintWriter out, ClassMapping classMapping, int depth ) throws IOException { - out.format( "CLASS %s %s\n", classMapping.getObfName(), classMapping.getDeobfName() ); + out.format( "%sCLASS %s %s\n", getIndent( depth ), classMapping.getObfName(), classMapping.getDeobfName() ); + + for( ClassMapping innerClassMapping : sorted( classMapping.innerClasses() ) ) + { + write( out, innerClassMapping, depth + 1 ); + } for( FieldMapping fieldMapping : sorted( classMapping.fields() ) ) { - write( out, fieldMapping ); + write( out, fieldMapping, depth + 1 ); } for( MethodMapping methodMapping : sorted( classMapping.methods() ) ) { - write( out, methodMapping ); + write( out, methodMapping, depth + 1 ); } } - public void write( PrintWriter out, FieldMapping fieldMapping ) + private void write( PrintWriter out, FieldMapping fieldMapping, int depth ) throws IOException { - out.format( "\tFIELD %s %s\n", fieldMapping.getObfName(), fieldMapping.getDeobfName() ); + out.format( "%sFIELD %s %s\n", getIndent( depth ), fieldMapping.getObfName(), fieldMapping.getDeobfName() ); } - public void write( PrintWriter out, MethodMapping methodMapping ) + private void write( PrintWriter out, MethodMapping methodMapping, int depth ) throws IOException { - out.format( "\tMETHOD %s %s %s %s\n", + out.format( "%sMETHOD %s %s %s %s\n", + getIndent( depth ), methodMapping.getObfName(), methodMapping.getDeobfName(), methodMapping.getObfSignature(), methodMapping.getDeobfSignature() ); for( ArgumentMapping argumentMapping : sorted( methodMapping.arguments() ) ) { - write( out, argumentMapping ); + write( out, argumentMapping, depth + 1 ); } } - public void write( PrintWriter out, ArgumentMapping argumentMapping ) + private void write( PrintWriter out, ArgumentMapping argumentMapping, int depth ) throws IOException { - out.format( "\t\tARG %d %s\n", argumentMapping.getIndex(), argumentMapping.getName() ); + out.format( "%sARG %d %s\n", getIndent( depth ), argumentMapping.getIndex(), argumentMapping.getName() ); } private > List sorted( Iterable classes ) @@ -86,4 +92,14 @@ public class MappingsWriter Collections.sort( out ); return out; } + + private String getIndent( int depth ) + { + StringBuilder buf = new StringBuilder(); + for( int i=0; i