summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/Renamer.java
diff options
context:
space:
mode:
authorGravatar jeff2014-08-31 22:43:13 -0400
committerGravatar jeff2014-08-31 22:43:13 -0400
commit195ffb47a68c4b40d8cc04b67e6c49d8081dc3d3 (patch)
tree4633bdb8f67efc9d1d3a4749ffff4f972481c608 /src/cuchaz/enigma/mapping/Renamer.java
parentfixed crash finding related method implementations when method doesn't implem... (diff)
downloadenigma-fork-195ffb47a68c4b40d8cc04b67e6c49d8081dc3d3.tar.gz
enigma-fork-195ffb47a68c4b40d8cc04b67e6c49d8081dc3d3.tar.xz
enigma-fork-195ffb47a68c4b40d8cc04b67e6c49d8081dc3d3.zip
added checks to prevent renaming classes/fields/methods/arguments to the same name as other classes/fields/methods/arguments
Diffstat (limited to 'src/cuchaz/enigma/mapping/Renamer.java')
-rw-r--r--src/cuchaz/enigma/mapping/Renamer.java41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/cuchaz/enigma/mapping/Renamer.java b/src/cuchaz/enigma/mapping/Renamer.java
index 79cbd30..15d9af4 100644
--- a/src/cuchaz/enigma/mapping/Renamer.java
+++ b/src/cuchaz/enigma/mapping/Renamer.java
@@ -13,6 +13,7 @@ package cuchaz.enigma.mapping;
13import java.io.IOException; 13import java.io.IOException;
14import java.io.ObjectOutputStream; 14import java.io.ObjectOutputStream;
15import java.io.OutputStream; 15import java.io.OutputStream;
16import java.util.Set;
16import java.util.zip.GZIPOutputStream; 17import java.util.zip.GZIPOutputStream;
17 18
18import cuchaz.enigma.analysis.JarIndex; 19import cuchaz.enigma.analysis.JarIndex;
@@ -31,6 +32,12 @@ public class Renamer
31 public void setClassName( ClassEntry obf, String deobfName ) 32 public void setClassName( ClassEntry obf, String deobfName )
32 { 33 {
33 deobfName = NameValidator.validateClassName( deobfName ); 34 deobfName = NameValidator.validateClassName( deobfName );
35 ClassEntry targetEntry = new ClassEntry( deobfName );
36 if( m_mappings.containsDeobfClass( deobfName ) || m_index.containsObfClass( targetEntry ) )
37 {
38 throw new IllegalNameException( deobfName, "There is already a class with that name" );
39 }
40
34 ClassMapping classMapping = getOrCreateClassMapping( obf ); 41 ClassMapping classMapping = getOrCreateClassMapping( obf );
35 42
36 if( obf.isInnerClass() ) 43 if( obf.isInnerClass() )
@@ -50,13 +57,32 @@ public class Renamer
50 public void setFieldName( FieldEntry obf, String deobfName ) 57 public void setFieldName( FieldEntry obf, String deobfName )
51 { 58 {
52 deobfName = NameValidator.validateFieldName( deobfName ); 59 deobfName = NameValidator.validateFieldName( deobfName );
60 FieldEntry targetEntry = new FieldEntry( obf.getClassEntry(), deobfName );
61 if( m_mappings.containsDeobfField( obf.getClassEntry(), deobfName ) || m_index.containsObfField( targetEntry ) )
62 {
63 throw new IllegalNameException( deobfName, "There is already a field with that name" );
64 }
65
53 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() ); 66 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
54 classMapping.setFieldName( obf.getName(), deobfName ); 67 classMapping.setFieldName( obf.getName(), deobfName );
55 } 68 }
56 69
57 public void setMethodTreeName( MethodEntry obf, String deobfName ) 70 public void setMethodTreeName( MethodEntry obf, String deobfName )
58 { 71 {
59 for( MethodEntry entry : m_index.getRelatedMethodImplementations( obf ) ) 72 Set<MethodEntry> implementations = m_index.getRelatedMethodImplementations( obf );
73
74 deobfName = NameValidator.validateMethodName( deobfName );
75 for( MethodEntry entry : implementations )
76 {
77 MethodEntry targetEntry = new MethodEntry( entry.getClassEntry(), deobfName, entry.getSignature() );
78 if( m_mappings.containsDeobfMethod( entry.getClassEntry(), deobfName, entry.getSignature() ) || m_index.containsObfMethod( targetEntry ) )
79 {
80 String className = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateClass( entry.getClassName() );
81 throw new IllegalNameException( deobfName, "There is already a method with that name and signature in class " + className );
82 }
83 }
84
85 for( MethodEntry entry : implementations )
60 { 86 {
61 setMethodName( entry, deobfName ); 87 setMethodName( entry, deobfName );
62 } 88 }
@@ -65,6 +91,13 @@ public class Renamer
65 public void setMethodName( MethodEntry obf, String deobfName ) 91 public void setMethodName( MethodEntry obf, String deobfName )
66 { 92 {
67 deobfName = NameValidator.validateMethodName( deobfName ); 93 deobfName = NameValidator.validateMethodName( deobfName );
94 MethodEntry targetEntry = new MethodEntry( obf.getClassEntry(), deobfName, obf.getSignature() );
95 if( m_mappings.containsDeobfMethod( obf.getClassEntry(), deobfName, obf.getSignature() ) || m_index.containsObfMethod( targetEntry ) )
96 {
97 String className = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateClass( obf.getClassName() );
98 throw new IllegalNameException( deobfName, "There is already a method with that name and signature in class " + className );
99 }
100
68 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() ); 101 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
69 String deobfSignature = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() ); 102 String deobfSignature = m_mappings.getTranslator( m_index.getAncestries(), TranslationDirection.Deobfuscating ).translateSignature( obf.getSignature() );
70 classMapping.setMethodNameAndSignature( obf.getName(), obf.getSignature(), deobfName, deobfSignature ); 103 classMapping.setMethodNameAndSignature( obf.getName(), obf.getSignature(), deobfName, deobfSignature );
@@ -73,6 +106,12 @@ public class Renamer
73 public void setArgumentName( ArgumentEntry obf, String deobfName ) 106 public void setArgumentName( ArgumentEntry obf, String deobfName )
74 { 107 {
75 deobfName = NameValidator.validateArgumentName( deobfName ); 108 deobfName = NameValidator.validateArgumentName( deobfName );
109 // NOTE: don't need to check arguments for name collisions with names determined by Procyon
110 if( m_mappings.containsArgument( obf.getMethodEntry(), deobfName ) )
111 {
112 throw new IllegalNameException( deobfName, "There is already an argument with that name" );
113 }
114
76 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() ); 115 ClassMapping classMapping = getOrCreateClassMappingOrInnerClassMapping( obf.getClassEntry() );
77 classMapping.setArgumentName( obf.getMethodName(), obf.getMethodSignature(), obf.getIndex(), deobfName ); 116 classMapping.setArgumentName( obf.getMethodName(), obf.getMethodSignature(), obf.getIndex(), deobfName );
78 } 117 }