diff options
Diffstat (limited to 'src/cuchaz/enigma/mapping/MethodMapping.java')
| -rw-r--r-- | src/cuchaz/enigma/mapping/MethodMapping.java | 168 |
1 files changed, 69 insertions, 99 deletions
diff --git a/src/cuchaz/enigma/mapping/MethodMapping.java b/src/cuchaz/enigma/mapping/MethodMapping.java index c51b011..4dab3c6 100644 --- a/src/cuchaz/enigma/mapping/MethodMapping.java +++ b/src/cuchaz/enigma/mapping/MethodMapping.java | |||
| @@ -16,8 +16,8 @@ import java.util.TreeMap; | |||
| 16 | 16 | ||
| 17 | import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater; | 17 | import cuchaz.enigma.mapping.SignatureUpdater.ClassNameUpdater; |
| 18 | 18 | ||
| 19 | public class MethodMapping implements Serializable, Comparable<MethodMapping> | 19 | public class MethodMapping implements Serializable, Comparable<MethodMapping> { |
| 20 | { | 20 | |
| 21 | private static final long serialVersionUID = -4409570216084263978L; | 21 | private static final long serialVersionUID = -4409570216084263978L; |
| 22 | 22 | ||
| 23 | private String m_obfName; | 23 | private String m_obfName; |
| @@ -25,165 +25,135 @@ public class MethodMapping implements Serializable, Comparable<MethodMapping> | |||
| 25 | private String m_obfSignature; | 25 | private String m_obfSignature; |
| 26 | private Map<Integer,ArgumentMapping> m_arguments; | 26 | private Map<Integer,ArgumentMapping> m_arguments; |
| 27 | 27 | ||
| 28 | public MethodMapping( String obfName, String obfSignature ) | 28 | public MethodMapping(String obfName, String obfSignature) { |
| 29 | { | 29 | this(obfName, obfSignature, null); |
| 30 | this( obfName, obfSignature, null ); | ||
| 31 | } | 30 | } |
| 32 | 31 | ||
| 33 | public MethodMapping( String obfName, String obfSignature, String deobfName ) | 32 | public MethodMapping(String obfName, String obfSignature, String deobfName) { |
| 34 | { | 33 | if (obfName == null) { |
| 35 | if( obfName == null ) | 34 | throw new IllegalArgumentException("obf name cannot be null!"); |
| 36 | { | ||
| 37 | throw new IllegalArgumentException( "obf name cannot be null!" ); | ||
| 38 | } | 35 | } |
| 39 | if( obfSignature == null ) | 36 | if (obfSignature == null) { |
| 40 | { | 37 | throw new IllegalArgumentException("obf signature cannot be null!"); |
| 41 | throw new IllegalArgumentException( "obf signature cannot be null!" ); | ||
| 42 | } | 38 | } |
| 43 | m_obfName = obfName; | 39 | m_obfName = obfName; |
| 44 | m_deobfName = NameValidator.validateMethodName( deobfName ); | 40 | m_deobfName = NameValidator.validateMethodName(deobfName); |
| 45 | m_obfSignature = obfSignature; | 41 | m_obfSignature = obfSignature; |
| 46 | m_arguments = new TreeMap<Integer,ArgumentMapping>(); | 42 | m_arguments = new TreeMap<Integer,ArgumentMapping>(); |
| 47 | } | 43 | } |
| 48 | 44 | ||
| 49 | public String getObfName( ) | 45 | public String getObfName() { |
| 50 | { | ||
| 51 | return m_obfName; | 46 | return m_obfName; |
| 52 | } | 47 | } |
| 53 | 48 | ||
| 54 | public String getDeobfName( ) | 49 | public String getDeobfName() { |
| 55 | { | ||
| 56 | return m_deobfName; | 50 | return m_deobfName; |
| 57 | } | 51 | } |
| 58 | public void setDeobfName( String val ) | 52 | |
| 59 | { | 53 | public void setDeobfName(String val) { |
| 60 | m_deobfName = NameValidator.validateMethodName( val ); | 54 | m_deobfName = NameValidator.validateMethodName(val); |
| 61 | } | 55 | } |
| 62 | 56 | ||
| 63 | public String getObfSignature( ) | 57 | public String getObfSignature() { |
| 64 | { | ||
| 65 | return m_obfSignature; | 58 | return m_obfSignature; |
| 66 | } | 59 | } |
| 67 | 60 | ||
| 68 | public Iterable<ArgumentMapping> arguments( ) | 61 | public Iterable<ArgumentMapping> arguments() { |
| 69 | { | ||
| 70 | return m_arguments.values(); | 62 | return m_arguments.values(); |
| 71 | } | 63 | } |
| 72 | 64 | ||
| 73 | public boolean isConstructor( ) | 65 | public boolean isConstructor() { |
| 74 | { | 66 | return m_obfName.startsWith("<"); |
| 75 | return m_obfName.startsWith( "<" ); | ||
| 76 | } | 67 | } |
| 77 | 68 | ||
| 78 | public void addArgumentMapping( ArgumentMapping argumentMapping ) | 69 | public void addArgumentMapping(ArgumentMapping argumentMapping) { |
| 79 | { | 70 | boolean wasAdded = m_arguments.put(argumentMapping.getIndex(), argumentMapping) == null; |
| 80 | boolean wasAdded = m_arguments.put( argumentMapping.getIndex(), argumentMapping ) == null; | 71 | assert (wasAdded); |
| 81 | assert( wasAdded ); | ||
| 82 | } | 72 | } |
| 83 | 73 | ||
| 84 | public String getObfArgumentName( int index ) | 74 | public String getObfArgumentName(int index) { |
| 85 | { | 75 | ArgumentMapping argumentMapping = m_arguments.get(index); |
| 86 | ArgumentMapping argumentMapping = m_arguments.get( index ); | 76 | if (argumentMapping != null) { |
| 87 | if( argumentMapping != null ) | ||
| 88 | { | ||
| 89 | return argumentMapping.getName(); | 77 | return argumentMapping.getName(); |
| 90 | } | 78 | } |
| 91 | 79 | ||
| 92 | return null; | 80 | return null; |
| 93 | } | 81 | } |
| 94 | 82 | ||
| 95 | public String getDeobfArgumentName( int index ) | 83 | public String getDeobfArgumentName(int index) { |
| 96 | { | 84 | ArgumentMapping argumentMapping = m_arguments.get(index); |
| 97 | ArgumentMapping argumentMapping = m_arguments.get( index ); | 85 | if (argumentMapping != null) { |
| 98 | if( argumentMapping != null ) | ||
| 99 | { | ||
| 100 | return argumentMapping.getName(); | 86 | return argumentMapping.getName(); |
| 101 | } | 87 | } |
| 102 | 88 | ||
| 103 | return null; | 89 | return null; |
| 104 | } | 90 | } |
| 105 | 91 | ||
| 106 | public void setArgumentName( int index, String name ) | 92 | public void setArgumentName(int index, String name) { |
| 107 | { | 93 | ArgumentMapping argumentMapping = m_arguments.get(index); |
| 108 | ArgumentMapping argumentMapping = m_arguments.get( index ); | 94 | if (argumentMapping == null) { |
| 109 | if( argumentMapping == null ) | 95 | argumentMapping = new ArgumentMapping(index, name); |
| 110 | { | 96 | boolean wasAdded = m_arguments.put(index, argumentMapping) == null; |
| 111 | argumentMapping = new ArgumentMapping( index, name ); | 97 | assert (wasAdded); |
| 112 | boolean wasAdded = m_arguments.put( index, argumentMapping ) == null; | 98 | } else { |
| 113 | assert( wasAdded ); | 99 | argumentMapping.setName(name); |
| 114 | } | ||
| 115 | else | ||
| 116 | { | ||
| 117 | argumentMapping.setName( name ); | ||
| 118 | } | 100 | } |
| 119 | } | 101 | } |
| 120 | 102 | ||
| 121 | public void removeArgumentName( int index ) | 103 | public void removeArgumentName(int index) { |
| 122 | { | 104 | boolean wasRemoved = m_arguments.remove(index) != null; |
| 123 | boolean wasRemoved = m_arguments.remove( index ) != null; | 105 | assert (wasRemoved); |
| 124 | assert( wasRemoved ); | ||
| 125 | } | 106 | } |
| 126 | 107 | ||
| 127 | @Override | 108 | @Override |
| 128 | public String toString( ) | 109 | public String toString() { |
| 129 | { | ||
| 130 | StringBuilder buf = new StringBuilder(); | 110 | StringBuilder buf = new StringBuilder(); |
| 131 | buf.append( "\t" ); | 111 | buf.append("\t"); |
| 132 | buf.append( m_obfName ); | 112 | buf.append(m_obfName); |
| 133 | buf.append( " <-> " ); | 113 | buf.append(" <-> "); |
| 134 | buf.append( m_deobfName ); | 114 | buf.append(m_deobfName); |
| 135 | buf.append( "\n" ); | 115 | buf.append("\n"); |
| 136 | buf.append( "\t" ); | 116 | buf.append("\t"); |
| 137 | buf.append( m_obfSignature ); | 117 | buf.append(m_obfSignature); |
| 138 | buf.append( "\n" ); | 118 | buf.append("\n"); |
| 139 | buf.append( "\tArguments:\n" ); | 119 | buf.append("\tArguments:\n"); |
| 140 | for( ArgumentMapping argumentMapping : m_arguments.values() ) | 120 | for (ArgumentMapping argumentMapping : m_arguments.values()) { |
| 141 | { | 121 | buf.append("\t\t"); |
| 142 | buf.append( "\t\t" ); | 122 | buf.append(argumentMapping.getIndex()); |
| 143 | buf.append( argumentMapping.getIndex() ); | 123 | buf.append(" -> "); |
| 144 | buf.append( " -> " ); | 124 | buf.append(argumentMapping.getName()); |
| 145 | buf.append( argumentMapping.getName() ); | 125 | buf.append("\n"); |
| 146 | buf.append( "\n" ); | ||
| 147 | } | 126 | } |
| 148 | return buf.toString(); | 127 | return buf.toString(); |
| 149 | } | 128 | } |
| 150 | 129 | ||
| 151 | @Override | 130 | @Override |
| 152 | public int compareTo( MethodMapping other ) | 131 | public int compareTo(MethodMapping other) { |
| 153 | { | 132 | return (m_obfName + m_obfSignature).compareTo(other.m_obfName + other.m_obfSignature); |
| 154 | return ( m_obfName + m_obfSignature ).compareTo( other.m_obfName + other.m_obfSignature ); | ||
| 155 | } | 133 | } |
| 156 | 134 | ||
| 157 | public boolean renameObfClass( final String oldObfClassName, final String newObfClassName ) | 135 | public boolean renameObfClass(final String oldObfClassName, final String newObfClassName) { |
| 158 | { | ||
| 159 | // rename obf classes in the signature | 136 | // rename obf classes in the signature |
| 160 | String newSignature = SignatureUpdater.update( m_obfSignature, new ClassNameUpdater( ) | 137 | String newSignature = SignatureUpdater.update(m_obfSignature, new ClassNameUpdater() { |
| 161 | { | ||
| 162 | @Override | 138 | @Override |
| 163 | public String update( String className ) | 139 | public String update(String className) { |
| 164 | { | 140 | if (className.equals(oldObfClassName)) { |
| 165 | if( className.equals( oldObfClassName ) ) | ||
| 166 | { | ||
| 167 | return newObfClassName; | 141 | return newObfClassName; |
| 168 | } | 142 | } |
| 169 | return className; | 143 | return className; |
| 170 | } | 144 | } |
| 171 | } ); | 145 | }); |
| 172 | 146 | ||
| 173 | if( newSignature != m_obfSignature ) | 147 | if (newSignature != m_obfSignature) { |
| 174 | { | ||
| 175 | m_obfSignature = newSignature; | 148 | m_obfSignature = newSignature; |
| 176 | return true; | 149 | return true; |
| 177 | } | 150 | } |
| 178 | return false; | 151 | return false; |
| 179 | } | 152 | } |
| 180 | 153 | ||
| 181 | public boolean containsArgument( String name ) | 154 | public boolean containsArgument(String name) { |
| 182 | { | 155 | for (ArgumentMapping argumentMapping : m_arguments.values()) { |
| 183 | for( ArgumentMapping argumentMapping : m_arguments.values() ) | 156 | if (argumentMapping.getName().equals(name)) { |
| 184 | { | ||
| 185 | if( argumentMapping.getName().equals( name ) ) | ||
| 186 | { | ||
| 187 | return true; | 157 | return true; |
| 188 | } | 158 | } |
| 189 | } | 159 | } |