diff options
| author | 2014-08-29 15:41:30 -0400 | |
|---|---|---|
| committer | 2014-08-29 15:41:30 -0400 | |
| commit | 5ba8046f37b6998625a6ef4d61879950dbccfc4e (patch) | |
| tree | f7d85c73cc64cc1aa4bb4de2873985a6614189b9 /src/cuchaz | |
| parent | started on mapping converter tool so we can update to newer Minecraft jars (diff) | |
| download | enigma-5ba8046f37b6998625a6ef4d61879950dbccfc4e.tar.gz enigma-5ba8046f37b6998625a6ef4d61879950dbccfc4e.tar.xz enigma-5ba8046f37b6998625a6ef4d61879950dbccfc4e.zip | |
working on version conversion
Diffstat (limited to 'src/cuchaz')
| -rw-r--r-- | src/cuchaz/enigma/Main.java | 2 | ||||
| -rw-r--r-- | src/cuchaz/enigma/convert/ClassMapper.java | 111 |
2 files changed, 82 insertions, 31 deletions
diff --git a/src/cuchaz/enigma/Main.java b/src/cuchaz/enigma/Main.java index bbee9024..bbd734c6 100644 --- a/src/cuchaz/enigma/Main.java +++ b/src/cuchaz/enigma/Main.java | |||
| @@ -32,7 +32,7 @@ public class Main | |||
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | // DEBUG | 34 | // DEBUG |
| 35 | //gui.getController().openDeclaration( new ClassEntry( "none/bsp" ) ); | 35 | //gui.getController().openDeclaration( new ClassEntry( "none/bub" ) ); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | private static File getFile( String path ) | 38 | private static File getFile( String path ) |
diff --git a/src/cuchaz/enigma/convert/ClassMapper.java b/src/cuchaz/enigma/convert/ClassMapper.java index a0d5a3f1..5a16a1cb 100644 --- a/src/cuchaz/enigma/convert/ClassMapper.java +++ b/src/cuchaz/enigma/convert/ClassMapper.java | |||
| @@ -12,17 +12,31 @@ package cuchaz.enigma.convert; | |||
| 12 | 12 | ||
| 13 | import java.io.File; | 13 | import java.io.File; |
| 14 | import java.io.IOException; | 14 | import java.io.IOException; |
| 15 | import java.util.Collection; | ||
| 16 | import java.util.List; | ||
| 17 | import java.util.Map; | ||
| 15 | import java.util.jar.JarFile; | 18 | import java.util.jar.JarFile; |
| 16 | 19 | ||
| 17 | import javassist.CtClass; | 20 | import javassist.CtClass; |
| 18 | 21 | ||
| 19 | import com.google.common.collect.HashMultiset; | 22 | import com.beust.jcommander.internal.Lists; |
| 20 | import com.google.common.collect.Multiset; | 23 | import com.beust.jcommander.internal.Maps; |
| 24 | import com.google.common.collect.ArrayListMultimap; | ||
| 25 | import com.google.common.collect.Multimap; | ||
| 21 | 26 | ||
| 22 | import cuchaz.enigma.analysis.JarClassIterator; | 27 | import cuchaz.enigma.analysis.JarClassIterator; |
| 28 | import cuchaz.enigma.mapping.ClassEntry; | ||
| 23 | 29 | ||
| 24 | public class ClassMapper | 30 | public class ClassMapper |
| 25 | { | 31 | { |
| 32 | private int m_numSourceClasses; | ||
| 33 | private int m_numDestClasses; | ||
| 34 | private Multimap<ClassIdentity,ClassIdentity> m_sourceClasses; | ||
| 35 | private Multimap<ClassIdentity,ClassIdentity> m_destClasses; | ||
| 36 | private List<ClassIdentity> m_unmatchedSourceClasses; | ||
| 37 | private List<ClassIdentity> m_unmatchedDestClasses; | ||
| 38 | private Map<ClassEntry,ClassIdentity> m_sourceKeyIndex; | ||
| 39 | |||
| 26 | public static void main( String[] args ) | 40 | public static void main( String[] args ) |
| 27 | throws IOException | 41 | throws IOException |
| 28 | { | 42 | { |
| @@ -30,44 +44,81 @@ public class ClassMapper | |||
| 30 | JarFile fromJar = new JarFile( new File( "input/1.8-pre1.jar" ) ); | 44 | JarFile fromJar = new JarFile( new File( "input/1.8-pre1.jar" ) ); |
| 31 | JarFile toJar = new JarFile( new File( "input/1.8-pre2.jar" ) ); | 45 | JarFile toJar = new JarFile( new File( "input/1.8-pre2.jar" ) ); |
| 32 | 46 | ||
| 33 | new ClassMapper( fromJar, toJar ); | 47 | ClassMapper mapper = new ClassMapper( fromJar, toJar ); |
| 48 | System.out.println( String.format( "Mapped %d/%d source classes (%d unmatched) to %d/%d dest classes (%d unmatched)", | ||
| 49 | mapper.m_sourceClasses.size(), mapper.m_numSourceClasses, mapper.m_unmatchedSourceClasses.size(), | ||
| 50 | mapper.m_destClasses.size(), mapper.m_numDestClasses, mapper.m_unmatchedDestClasses.size() | ||
| 51 | ) ); | ||
| 34 | } | 52 | } |
| 35 | 53 | ||
| 36 | public ClassMapper( JarFile a, JarFile b ) | 54 | public ClassMapper( JarFile sourceJar, JarFile destJar ) |
| 37 | { | 55 | { |
| 38 | int numAClasses = JarClassIterator.getClassEntries( a ).size(); | 56 | m_numSourceClasses = JarClassIterator.getClassEntries( sourceJar ).size(); |
| 39 | int numBClasses = JarClassIterator.getClassEntries( b ).size(); | 57 | m_numDestClasses = JarClassIterator.getClassEntries( destJar ).size(); |
| 40 | |||
| 41 | // TEMP | ||
| 42 | System.out.println( "A classes: " + numAClasses ); | ||
| 43 | System.out.println( "B classes: " + numBClasses ); | ||
| 44 | 58 | ||
| 45 | // compute the a classes | 59 | // compute identities for the source classes |
| 46 | Multiset<ClassIdentity> aclasses = HashMultiset.create(); | 60 | m_sourceClasses = ArrayListMultimap.create(); |
| 47 | for( CtClass c : JarClassIterator.classes( a ) ) | 61 | m_sourceKeyIndex = Maps.newHashMap(); |
| 62 | for( CtClass c : JarClassIterator.classes( sourceJar ) ) | ||
| 48 | { | 63 | { |
| 49 | ClassIdentity aclass = new ClassIdentity( c ); | 64 | ClassIdentity sourceClass = new ClassIdentity( c ); |
| 50 | aclasses.add( aclass ); | 65 | m_sourceClasses.put( sourceClass, sourceClass ); |
| 66 | m_sourceKeyIndex.put( sourceClass.getClassEntry(), sourceClass ); | ||
| 51 | } | 67 | } |
| 52 | 68 | ||
| 53 | int numMatches = 0; | 69 | // match the dest classes to the source classes |
| 54 | 70 | m_destClasses = ArrayListMultimap.create(); | |
| 55 | // match the b classes to the a classes | 71 | m_unmatchedDestClasses = Lists.newArrayList(); |
| 56 | for( CtClass c : JarClassIterator.classes( b ) ) | 72 | for( CtClass c : JarClassIterator.classes( destJar ) ) |
| 57 | { | 73 | { |
| 58 | ClassIdentity bclass = new ClassIdentity( c ); | 74 | ClassIdentity destClass = new ClassIdentity( c ); |
| 59 | if( aclasses.contains( bclass ) ) | 75 | Collection<ClassIdentity> matchedSourceClasses = m_sourceClasses.get( destClass ); |
| 76 | if( matchedSourceClasses.isEmpty() ) | ||
| 77 | { | ||
| 78 | // unmatched dest class | ||
| 79 | m_unmatchedDestClasses.add( destClass ); | ||
| 80 | } | ||
| 81 | else | ||
| 60 | { | 82 | { |
| 61 | numMatches++; | 83 | ClassIdentity sourceClass = matchedSourceClasses.iterator().next(); |
| 84 | m_destClasses.put( sourceClass, destClass ); | ||
| 62 | } | 85 | } |
| 63 | |||
| 64 | // TEMP | ||
| 65 | //System.out.println( bclass ); | ||
| 66 | } | 86 | } |
| 67 | 87 | ||
| 68 | // TEMP | 88 | // get unmatched source classes |
| 69 | System.out.println( String.format( "Class matches: %d/%d (missing %d)", | 89 | m_unmatchedSourceClasses = Lists.newArrayList(); |
| 70 | numMatches, aclasses.size(), aclasses.size() - numMatches | 90 | for( ClassIdentity sourceClass : m_sourceClasses.keySet() ) |
| 71 | ) ); | 91 | { |
| 92 | Collection<ClassIdentity> matchedSourceClasses = m_sourceClasses.get( sourceClass ); | ||
| 93 | Collection<ClassIdentity> matchedDestClasses = m_destClasses.get( sourceClass ); | ||
| 94 | if( matchedDestClasses.isEmpty() ) | ||
| 95 | { | ||
| 96 | m_unmatchedSourceClasses.add( sourceClass ); | ||
| 97 | } | ||
| 98 | else if( matchedDestClasses.size() > 1 ) | ||
| 99 | { | ||
| 100 | // warn about identity collisions | ||
| 101 | System.err.println( String.format( "WARNING: identity collision:\n\tSource: %s\n\t Dest: %s", | ||
| 102 | getClassEntries( matchedSourceClasses ), | ||
| 103 | getClassEntries( matchedDestClasses ) | ||
| 104 | ) ); | ||
| 105 | } | ||
| 106 | } | ||
| 107 | } | ||
| 108 | |||
| 109 | public Map.Entry<Collection<ClassEntry>,Collection<ClassEntry>> getMapping( ClassEntry sourceEntry ) | ||
| 110 | { | ||
| 111 | // TODO | ||
| 112 | return null; | ||
| 113 | } | ||
| 114 | |||
| 115 | private Collection<ClassEntry> getClassEntries( Collection<ClassIdentity> classes ) | ||
| 116 | { | ||
| 117 | List<ClassEntry> entries = Lists.newArrayList(); | ||
| 118 | for( ClassIdentity c : classes ) | ||
| 119 | { | ||
| 120 | entries.add( c.getClassEntry() ); | ||
| 121 | } | ||
| 122 | return entries; | ||
| 72 | } | 123 | } |
| 73 | } | 124 | } |