From 959cb5fd4f9586ec3bd265b452fe25fe1db82e3f Mon Sep 17 00:00:00 2001 From: jeff Date: Tue, 13 Jan 2015 23:25:04 -0500 Subject: source format change don't hate me too much if you were planning a big merge. =P --- src/cuchaz/enigma/bytecode/InnerClassWriter.java | 103 +++++++++-------------- 1 file changed, 39 insertions(+), 64 deletions(-) (limited to 'src/cuchaz/enigma/bytecode/InnerClassWriter.java') diff --git a/src/cuchaz/enigma/bytecode/InnerClassWriter.java b/src/cuchaz/enigma/bytecode/InnerClassWriter.java index 5e59307..f52c31a 100644 --- a/src/cuchaz/enigma/bytecode/InnerClassWriter.java +++ b/src/cuchaz/enigma/bytecode/InnerClassWriter.java @@ -23,105 +23,80 @@ import cuchaz.enigma.analysis.JarIndex; import cuchaz.enigma.mapping.BehaviorEntry; import cuchaz.enigma.mapping.ClassEntry; -public class InnerClassWriter -{ +public class InnerClassWriter { + private JarIndex m_jarIndex; - public InnerClassWriter( JarIndex jarIndex ) - { + public InnerClassWriter(JarIndex jarIndex) { m_jarIndex = jarIndex; } - public void write( CtClass c ) - { + public void write(CtClass c) { + // is this an inner or outer class? - String obfInnerClassName = new ClassEntry( Descriptor.toJvmName( c.getName() ) ).getSimpleName(); - String obfOuterClassName = m_jarIndex.getOuterClass( obfInnerClassName ); - if( obfOuterClassName == null ) - { + String obfInnerClassName = new ClassEntry(Descriptor.toJvmName(c.getName())).getSimpleName(); + String obfOuterClassName = m_jarIndex.getOuterClass(obfInnerClassName); + if (obfOuterClassName == null) { // this is an outer class - obfOuterClassName = Descriptor.toJvmName( c.getName() ); - } - else - { + obfOuterClassName = Descriptor.toJvmName(c.getName()); + } else { // this is an inner class, rename it to outer$inner - ClassEntry obfClassEntry = new ClassEntry( obfOuterClassName + "$" + obfInnerClassName ); - c.setName( obfClassEntry.getName() ); + ClassEntry obfClassEntry = new ClassEntry(obfOuterClassName + "$" + obfInnerClassName); + c.setName(obfClassEntry.getName()); - BehaviorEntry caller = m_jarIndex.getAnonymousClassCaller( obfInnerClassName ); - if( caller != null ) - { + BehaviorEntry caller = m_jarIndex.getAnonymousClassCaller(obfInnerClassName); + if (caller != null) { // write the enclosing method attribute - if( caller.getName().equals( "" ) ) - { - c.getClassFile().addAttribute( new EnclosingMethodAttribute( - c.getClassFile().getConstPool(), - caller.getClassName() - ) ); - } - else - { - c.getClassFile().addAttribute( new EnclosingMethodAttribute( - c.getClassFile().getConstPool(), - caller.getClassName(), - caller.getName(), - caller.getSignature() - ) ); + if (caller.getName().equals("")) { + c.getClassFile().addAttribute(new EnclosingMethodAttribute(c.getClassFile().getConstPool(), caller.getClassName())); + } else { + c.getClassFile().addAttribute(new EnclosingMethodAttribute(c.getClassFile().getConstPool(), caller.getClassName(), caller.getName(), caller.getSignature())); } } } // write the inner classes if needed - Collection obfInnerClassNames = m_jarIndex.getInnerClasses( obfOuterClassName ); - if( obfInnerClassNames != null && !obfInnerClassNames.isEmpty() ) - { - writeInnerClasses( c, obfOuterClassName, obfInnerClassNames ); + Collection obfInnerClassNames = m_jarIndex.getInnerClasses(obfOuterClassName); + if (obfInnerClassNames != null && !obfInnerClassNames.isEmpty()) { + writeInnerClasses(c, obfOuterClassName, obfInnerClassNames); } } - private void writeInnerClasses( CtClass c, String obfOuterClassName, Collection obfInnerClassNames ) - { - InnerClassesAttribute attr = new InnerClassesAttribute( c.getClassFile().getConstPool() ); - c.getClassFile().addAttribute( attr ); - for( String obfInnerClassName : obfInnerClassNames ) - { + private void writeInnerClasses(CtClass c, String obfOuterClassName, Collection obfInnerClassNames) { + InnerClassesAttribute attr = new InnerClassesAttribute(c.getClassFile().getConstPool()); + c.getClassFile().addAttribute(attr); + for (String obfInnerClassName : obfInnerClassNames) { // get the new inner class name - ClassEntry obfClassEntry = new ClassEntry( obfOuterClassName + "$" + obfInnerClassName ); + ClassEntry obfClassEntry = new ClassEntry(obfOuterClassName + "$" + obfInnerClassName); // here's what the JVM spec says about the InnerClasses attribute - // append( inner, outer of inner if inner is member of outer 0 ow, name after $ if inner not anonymous 0 ow, flags ); + // append( inner, outer of inner if inner is member of outer 0 ow, name after $ if inner not anonymous 0 ow, flags ); // update the attribute with this inner class ConstPool constPool = c.getClassFile().getConstPool(); - int innerClassIndex = constPool.addClassInfo( obfClassEntry.getName() ); + int innerClassIndex = constPool.addClassInfo(obfClassEntry.getName()); int outerClassIndex = 0; int innerClassSimpleNameIndex = 0; - if( !m_jarIndex.isAnonymousClass( obfInnerClassName ) ) - { - outerClassIndex = constPool.addClassInfo( obfClassEntry.getOuterClassName() ); - innerClassSimpleNameIndex = constPool.addUtf8Info( obfClassEntry.getInnerClassName() ); + if (!m_jarIndex.isAnonymousClass(obfInnerClassName)) { + outerClassIndex = constPool.addClassInfo(obfClassEntry.getOuterClassName()); + innerClassSimpleNameIndex = constPool.addUtf8Info(obfClassEntry.getInnerClassName()); } - attr.append( - innerClassIndex, - outerClassIndex, - innerClassSimpleNameIndex, - c.getClassFile().getAccessFlags() & ~AccessFlag.SUPER - ); + attr.append(innerClassIndex, outerClassIndex, innerClassSimpleNameIndex, c.getClassFile().getAccessFlags() & ~AccessFlag.SUPER); - /* DEBUG - System.out.println( String.format( "\tOBF: %s -> ATTR: %s,%s,%s (replace %s with %s)", + /* DEBUG + System.out.println(String.format("\tOBF: %s -> ATTR: %s,%s,%s (replace %s with %s)", obfClassEntry, - attr.outerClass( attr.tableLength() - 1 ), - attr.innerClass( attr.tableLength() - 1 ), - attr.innerName( attr.tableLength() - 1 ), + attr.outerClass(attr.tableLength() - 1), + attr.innerClass(attr.tableLength() - 1), + attr.innerName(attr.tableLength() - 1), Constants.NonePackage + "/" + obfInnerClassName, obfClassEntry.getName() - ) ); + )); */ // make sure the outer class references only the new inner class names - c.replaceClassName( Constants.NonePackage + "/" + obfInnerClassName, obfClassEntry.getName() ); + c.replaceClassName(Constants.NonePackage + "/" + obfInnerClassName, obfClassEntry.getName()); } } } -- cgit v1.2.3