From 8fa1741b621644ef84a9395a4c395d4ff3a89207 Mon Sep 17 00:00:00 2001 From: jeff Date: Sat, 23 Aug 2014 23:43:31 -0400 Subject: moved all classes from the default package into a package called "default" so they can be properly imported by other classes --- src/cuchaz/enigma/analysis/JarIndex.java | 40 ++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'src/cuchaz/enigma/analysis/JarIndex.java') diff --git a/src/cuchaz/enigma/analysis/JarIndex.java b/src/cuchaz/enigma/analysis/JarIndex.java index 315a286..cdaca37 100644 --- a/src/cuchaz/enigma/analysis/JarIndex.java +++ b/src/cuchaz/enigma/analysis/JarIndex.java @@ -17,7 +17,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.jar.JarEntry; import java.util.jar.JarFile; import javassist.CannotCompileException; @@ -35,13 +34,12 @@ import javassist.expr.MethodCall; import javassist.expr.NewExpr; import com.google.common.collect.HashMultimap; -import com.google.common.collect.HashMultiset; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; -import com.google.common.collect.Multiset; import com.google.common.collect.Sets; +import cuchaz.enigma.bytecode.ClassRenamer; import cuchaz.enigma.mapping.ArgumentEntry; import cuchaz.enigma.mapping.BehaviorEntry; import cuchaz.enigma.mapping.ClassEntry; @@ -53,7 +51,7 @@ import cuchaz.enigma.mapping.Translator; public class JarIndex { - private Set m_obfClassNames; + private Set m_obfClassEntries; private Ancestries m_ancestries; private Multimap m_methodImplementations; private Multimap> m_behaviorReferences; @@ -64,7 +62,7 @@ public class JarIndex public JarIndex( ) { - m_obfClassNames = Sets.newHashSet(); + m_obfClassEntries = Sets.newHashSet(); m_ancestries = new Ancestries(); m_methodImplementations = HashMultimap.create(); m_behaviorReferences = HashMultimap.create(); @@ -77,15 +75,20 @@ public class JarIndex public void indexJar( JarFile jar ) { // pass 1: read the class names - for( JarEntry entry : JarClassIterator.getClassEntries( jar ) ) + for( ClassEntry classEntry : JarClassIterator.getClassEntries( jar ) ) { - String className = entry.getName().substring( 0, entry.getName().length() - 6 ); - m_obfClassNames.add( Descriptor.toJvmName( className ) ); + if( classEntry.isInDefaultPackage() ) + { + // move out of default package + classEntry = new ClassEntry( "default/" + classEntry.getName() ); + } + m_obfClassEntries.add( classEntry ); } // pass 2: index the types, methods for( CtClass c : JarClassIterator.classes( jar ) ) { + fixClass( c ); m_ancestries.addSuperclass( c.getName(), c.getClassFile().getSuperclass() ); for( CtBehavior behavior : c.getDeclaredBehaviors() ) { @@ -96,8 +99,10 @@ public class JarIndex // pass 2: index inner classes and anonymous classes for( CtClass c : JarClassIterator.classes( jar ) ) { + fixClass( c ); + String outerClassName = findOuterClass( c ); - if( outerClassName != null )// /* TEMP */ && false ) + if( outerClassName != null ) { String innerClassName = Descriptor.toJvmName( c.getName() ); m_innerClasses.put( outerClassName, innerClassName ); @@ -127,6 +132,17 @@ public class JarIndex renameClasses( renames ); } + private void fixClass( CtClass c ) + { + ClassEntry classEntry = new ClassEntry( Descriptor.toJvmName( c.getName() ) ); + if( classEntry.isInDefaultPackage() ) + { + // move class out of default package + classEntry = new ClassEntry( "default/" + classEntry.getName() ); + ClassRenamer.moveAllClassesOutOfDefaultPackage( c, "default" ); + } + } + private void indexBehavior( CtBehavior behavior ) { // get the method entry @@ -270,7 +286,7 @@ public class JarIndex else if( callerClasses.size() > 1 ) { // TEMP - System.out.println( "WARNING: Illegal class called by more than one class!" + callerClasses ); + System.out.println( "WARNING: Illegal constructor called by more than one class!" + callerClasses ); } } @@ -423,9 +439,9 @@ public class JarIndex return true; } - public Set getObfClassNames( ) + public Set getObfClassEntries( ) { - return m_obfClassNames; + return m_obfClassEntries; } public Ancestries getAncestries( ) -- cgit v1.2.3