diff options
Diffstat (limited to 'src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java')
| -rw-r--r-- | src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java | 164 |
1 files changed, 94 insertions, 70 deletions
diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java index 7126d2b..85b6d2a 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java | |||
| @@ -13,6 +13,7 @@ package cuchaz.enigma.mapping; | |||
| 13 | 13 | ||
| 14 | import com.google.common.collect.Lists; | 14 | import com.google.common.collect.Lists; |
| 15 | import cuchaz.enigma.analysis.JarIndex; | 15 | import cuchaz.enigma.analysis.JarIndex; |
| 16 | import cuchaz.enigma.mapping.entry.*; | ||
| 16 | import cuchaz.enigma.throwables.IllegalNameException; | 17 | import cuchaz.enigma.throwables.IllegalNameException; |
| 17 | import cuchaz.enigma.throwables.MappingConflict; | 18 | import cuchaz.enigma.throwables.MappingConflict; |
| 18 | 19 | ||
| @@ -25,12 +26,14 @@ import java.util.zip.GZIPOutputStream; | |||
| 25 | 26 | ||
| 26 | public class MappingsRenamer { | 27 | public class MappingsRenamer { |
| 27 | 28 | ||
| 28 | private JarIndex index; | 29 | private final JarIndex index; |
| 30 | private final ReferencedEntryPool entryPool; | ||
| 29 | private Mappings mappings; | 31 | private Mappings mappings; |
| 30 | 32 | ||
| 31 | public MappingsRenamer(JarIndex index, Mappings mappings) { | 33 | public MappingsRenamer(JarIndex index, Mappings mappings, ReferencedEntryPool entryPool) { |
| 32 | this.index = index; | 34 | this.index = index; |
| 33 | this.mappings = mappings; | 35 | this.mappings = mappings; |
| 36 | this.entryPool = entryPool; | ||
| 34 | } | 37 | } |
| 35 | 38 | ||
| 36 | public void setMappings(Mappings mappings) { | 39 | public void setMappings(Mappings mappings) { |
| @@ -46,7 +49,7 @@ public class MappingsRenamer { | |||
| 46 | 49 | ||
| 47 | if (deobfName != null) { | 50 | if (deobfName != null) { |
| 48 | // make sure we don't rename to an existing obf or deobf class | 51 | // make sure we don't rename to an existing obf or deobf class |
| 49 | if (mappings.containsDeobfClass(deobfName) || index.containsObfClass(new ClassEntry(deobfName))) { | 52 | if (mappings.containsDeobfClass(deobfName) || index.containsObfClass(entryPool.getClass(deobfName))) { |
| 50 | throw new IllegalNameException(deobfName, "There is already a class with that name"); | 53 | throw new IllegalNameException(deobfName, "There is already a class with that name"); |
| 51 | } | 54 | } |
| 52 | } | 55 | } |
| @@ -87,13 +90,13 @@ public class MappingsRenamer { | |||
| 87 | 90 | ||
| 88 | public void setFieldName(FieldEntry obf, String deobfName) { | 91 | public void setFieldName(FieldEntry obf, String deobfName) { |
| 89 | deobfName = NameValidator.validateFieldName(deobfName); | 92 | deobfName = NameValidator.validateFieldName(deobfName); |
| 90 | FieldEntry targetEntry = new FieldEntry(obf.getClassEntry(), deobfName, obf.getType()); | 93 | FieldEntry targetEntry = entryPool.getField(obf.getOwnerClassEntry(), deobfName, obf.getDesc()); |
| 91 | ClassEntry definedClass = null; | 94 | ClassEntry definedClass = null; |
| 92 | if (mappings.containsDeobfField(obf.getClassEntry(), deobfName) || index.containsEntryWithSameName(targetEntry)) | 95 | if (mappings.containsDeobfField(obf.getOwnerClassEntry(), deobfName) || index.containsEntryWithSameName(targetEntry)) |
| 93 | definedClass = obf.getClassEntry(); | 96 | definedClass = obf.getOwnerClassEntry(); |
| 94 | else { | 97 | else { |
| 95 | for (ClassEntry ancestorEntry : this.index.getTranslationIndex().getAncestry(obf.getClassEntry())) { | 98 | for (ClassEntry ancestorEntry : this.index.getTranslationIndex().getAncestry(obf.getOwnerClassEntry())) { |
| 96 | if (mappings.containsDeobfField(ancestorEntry, deobfName) || index.containsEntryWithSameName(targetEntry.cloneToNewClass(ancestorEntry))) { | 99 | if (mappings.containsDeobfField(ancestorEntry, deobfName) || index.containsEntryWithSameName(targetEntry.updateOwnership(ancestorEntry))) { |
| 97 | definedClass = ancestorEntry; | 100 | definedClass = ancestorEntry; |
| 98 | break; | 101 | break; |
| 99 | } | 102 | } |
| @@ -101,42 +104,44 @@ public class MappingsRenamer { | |||
| 101 | } | 104 | } |
| 102 | 105 | ||
| 103 | if (definedClass != null) { | 106 | if (definedClass != null) { |
| 104 | String className = mappings.getTranslator(TranslationDirection.Deobfuscating, index.getTranslationIndex()).translateClass(definedClass.getClassName()); | 107 | Translator translator = mappings.getTranslator(TranslationDirection.DEOBFUSCATING, index.getTranslationIndex()); |
| 108 | String className = translator.getTranslatedClass(entryPool.getClass(definedClass.getClassName())).getName(); | ||
| 105 | if (className == null) | 109 | if (className == null) |
| 106 | className = definedClass.getClassName(); | 110 | className = definedClass.getClassName(); |
| 107 | throw new IllegalNameException(deobfName, "There is already a field with that name in " + className); | 111 | throw new IllegalNameException(deobfName, "There is already a field with that name in " + className); |
| 108 | } | 112 | } |
| 109 | 113 | ||
| 110 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 114 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 111 | classMapping.setFieldName(obf.getName(), obf.getType(), deobfName); | 115 | classMapping.setFieldName(obf.getName(), obf.getDesc(), deobfName); |
| 112 | } | 116 | } |
| 113 | 117 | ||
| 114 | public void removeFieldMapping(FieldEntry obf) { | 118 | public void removeFieldMapping(FieldEntry obf) { |
| 115 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 119 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 116 | classMapping.removeFieldMapping(classMapping.getFieldByObf(obf.getName(), obf.getType())); | 120 | classMapping.removeFieldMapping(classMapping.getFieldByObf(obf.getName(), obf.getDesc())); |
| 117 | } | 121 | } |
| 118 | 122 | ||
| 119 | public void markFieldAsDeobfuscated(FieldEntry obf) { | 123 | public void markFieldAsDeobfuscated(FieldEntry obf) { |
| 120 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 124 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 121 | classMapping.setFieldName(obf.getName(), obf.getType(), obf.getName()); | 125 | classMapping.setFieldName(obf.getName(), obf.getDesc(), obf.getName()); |
| 122 | } | 126 | } |
| 123 | 127 | ||
| 124 | private void validateMethodTreeName(MethodEntry entry, String deobfName) { | 128 | private void validateMethodTreeName(MethodEntry entry, String deobfName) { |
| 125 | MethodEntry targetEntry = new MethodEntry(entry.getClassEntry(), deobfName, entry.getSignature()); | 129 | MethodEntry targetEntry = entryPool.getMethod(entry.getOwnerClassEntry(), deobfName, entry.getDesc()); |
| 126 | 130 | ||
| 127 | // TODO: Verify if I don't break things | 131 | // TODO: Verify if I don't break things |
| 128 | ClassMapping classMapping = mappings.getClassByObf(entry.getClassEntry()); | 132 | ClassMapping classMapping = mappings.getClassByObf(entry.getOwnerClassEntry()); |
| 129 | if ((classMapping != null && classMapping.containsDeobfMethod(deobfName, entry.getSignature()) && classMapping.getMethodByObf(entry.getName(), entry.getSignature()) != classMapping.getMethodByDeobf(deobfName, entry.getSignature())) | 133 | if ((classMapping != null && classMapping.containsDeobfMethod(deobfName, entry.getDesc()) && classMapping.getMethodByObf(entry.getName(), entry.getDesc()) != classMapping.getMethodByDeobf(deobfName, entry.getDesc())) |
| 130 | || index.containsObfBehavior(targetEntry)) { | 134 | || index.containsObfMethod(targetEntry)) { |
| 131 | String deobfClassName = mappings.getTranslator(TranslationDirection.Deobfuscating, index.getTranslationIndex()).translateClass(entry.getClassName()); | 135 | Translator translator = mappings.getTranslator(TranslationDirection.DEOBFUSCATING, index.getTranslationIndex()); |
| 136 | String deobfClassName = translator.getTranslatedClass(entryPool.getClass(entry.getClassName())).getClassName(); | ||
| 132 | if (deobfClassName == null) { | 137 | if (deobfClassName == null) { |
| 133 | deobfClassName = entry.getClassName(); | 138 | deobfClassName = entry.getClassName(); |
| 134 | } | 139 | } |
| 135 | throw new IllegalNameException(deobfName, "There is already a method with that name and signature in class " + deobfClassName); | 140 | throw new IllegalNameException(deobfName, "There is already a method with that name and signature in class " + deobfClassName); |
| 136 | } | 141 | } |
| 137 | 142 | ||
| 138 | for (ClassEntry child : index.getTranslationIndex().getSubclass(entry.getClassEntry())) { | 143 | for (ClassEntry child : index.getTranslationIndex().getSubclass(entry.getOwnerClassEntry())) { |
| 139 | validateMethodTreeName(entry.cloneToNewClass(child), deobfName); | 144 | validateMethodTreeName(entry.updateOwnership(child), deobfName); |
| 140 | } | 145 | } |
| 141 | } | 146 | } |
| 142 | 147 | ||
| @@ -155,20 +160,21 @@ public class MappingsRenamer { | |||
| 155 | 160 | ||
| 156 | public void setMethodName(MethodEntry obf, String deobfName) { | 161 | public void setMethodName(MethodEntry obf, String deobfName) { |
| 157 | deobfName = NameValidator.validateMethodName(deobfName); | 162 | deobfName = NameValidator.validateMethodName(deobfName); |
| 158 | MethodEntry targetEntry = new MethodEntry(obf.getClassEntry(), deobfName, obf.getSignature()); | 163 | MethodEntry targetEntry = entryPool.getMethod(obf.getOwnerClassEntry(), deobfName, obf.getDesc()); |
| 159 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 164 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 160 | 165 | ||
| 161 | // TODO: Verify if I don't break things | 166 | // TODO: Verify if I don't break things |
| 162 | if ((mappings.containsDeobfMethod(obf.getClassEntry(), deobfName, obf.getSignature()) && classMapping.getMethodByObf(obf.getName(), obf.getSignature()) != classMapping.getMethodByDeobf(deobfName, obf.getSignature())) | 167 | if ((mappings.containsDeobfMethod(obf.getOwnerClassEntry(), deobfName, obf.getDesc()) && classMapping.getMethodByObf(obf.getName(), obf.getDesc()) != classMapping.getMethodByDeobf(deobfName, obf.getDesc())) |
| 163 | || index.containsObfBehavior(targetEntry)) { | 168 | || index.containsObfMethod(targetEntry)) { |
| 164 | String deobfClassName = mappings.getTranslator(TranslationDirection.Deobfuscating, index.getTranslationIndex()).translateClass(obf.getClassName()); | 169 | Translator translator = mappings.getTranslator(TranslationDirection.DEOBFUSCATING, index.getTranslationIndex()); |
| 170 | String deobfClassName = translator.getTranslatedClass(entryPool.getClass(obf.getClassName())).getClassName(); | ||
| 165 | if (deobfClassName == null) { | 171 | if (deobfClassName == null) { |
| 166 | deobfClassName = obf.getClassName(); | 172 | deobfClassName = obf.getClassName(); |
| 167 | } | 173 | } |
| 168 | throw new IllegalNameException(deobfName, "There is already a method with that name and signature in class " + deobfClassName); | 174 | throw new IllegalNameException(deobfName, "There is already a method with that name and signature in class " + deobfClassName); |
| 169 | } | 175 | } |
| 170 | 176 | ||
| 171 | classMapping.setMethodName(obf.getName(), obf.getSignature(), deobfName); | 177 | classMapping.setMethodName(obf.getName(), obf.getDesc(), deobfName); |
| 172 | } | 178 | } |
| 173 | 179 | ||
| 174 | public void removeMethodTreeMapping(MethodEntry obf) { | 180 | public void removeMethodTreeMapping(MethodEntry obf) { |
| @@ -176,8 +182,8 @@ public class MappingsRenamer { | |||
| 176 | } | 182 | } |
| 177 | 183 | ||
| 178 | public void removeMethodMapping(MethodEntry obf) { | 184 | public void removeMethodMapping(MethodEntry obf) { |
| 179 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 185 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 180 | classMapping.setMethodName(obf.getName(), obf.getSignature(), null); | 186 | classMapping.setMethodName(obf.getName(), obf.getDesc(), null); |
| 181 | } | 187 | } |
| 182 | 188 | ||
| 183 | public void markMethodTreeAsDeobfuscated(MethodEntry obf) { | 189 | public void markMethodTreeAsDeobfuscated(MethodEntry obf) { |
| @@ -185,30 +191,25 @@ public class MappingsRenamer { | |||
| 185 | } | 191 | } |
| 186 | 192 | ||
| 187 | public void markMethodAsDeobfuscated(MethodEntry obf) { | 193 | public void markMethodAsDeobfuscated(MethodEntry obf) { |
| 188 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 194 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 189 | classMapping.setMethodName(obf.getName(), obf.getSignature(), obf.getName()); | 195 | classMapping.setMethodName(obf.getName(), obf.getDesc(), obf.getName()); |
| 190 | } | 196 | } |
| 191 | 197 | ||
| 192 | public void setArgumentTreeName(ArgumentEntry obf, String deobfName) { | 198 | public void setLocalVariableTreeName(LocalVariableEntry obf, String deobfName) { |
| 193 | if (!(obf.getBehaviorEntry() instanceof MethodEntry)) { | 199 | MethodEntry obfMethod = obf.getOwnerEntry(); |
| 194 | setArgumentName(obf, deobfName); | ||
| 195 | return; | ||
| 196 | } | ||
| 197 | |||
| 198 | MethodEntry obfMethod = (MethodEntry) obf.getBehaviorEntry(); | ||
| 199 | 200 | ||
| 200 | Set<MethodEntry> implementations = index.getRelatedMethodImplementations(obfMethod); | 201 | Set<MethodEntry> implementations = index.getRelatedMethodImplementations(obfMethod); |
| 201 | for (MethodEntry entry : implementations) { | 202 | for (MethodEntry entry : implementations) { |
| 202 | ClassMapping classMapping = mappings.getClassByObf(entry.getClassEntry()); | 203 | ClassMapping classMapping = mappings.getClassByObf(entry.getOwnerClassEntry()); |
| 203 | if (classMapping != null) { | 204 | if (classMapping != null) { |
| 204 | MethodMapping mapping = classMapping.getMethodByObf(entry.getName(), entry.getSignature()); | 205 | MethodMapping mapping = classMapping.getMethodByObf(entry.getName(), entry.getDesc()); |
| 205 | // NOTE: don't need to check arguments for name collisions with names determined by Procyon | 206 | // NOTE: don't need to check arguments for name collisions with names determined by Procyon |
| 206 | // TODO: Verify if I don't break things | 207 | // TODO: Verify if I don't break things |
| 207 | if (mapping != null) { | 208 | if (mapping != null) { |
| 208 | for (ArgumentMapping argumentMapping : Lists.newArrayList(mapping.arguments())) { | 209 | for (LocalVariableMapping localVariableMapping : Lists.newArrayList(mapping.arguments())) { |
| 209 | if (argumentMapping.getIndex() != obf.getIndex()) { | 210 | if (localVariableMapping.getIndex() != obf.getIndex()) { |
| 210 | if (mapping.getDeobfArgumentName(argumentMapping.getIndex()).equals(deobfName) | 211 | if (mapping.getDeobfLocalVariableName(localVariableMapping.getIndex()).equals(deobfName) |
| 211 | || argumentMapping.getName().equals(deobfName)) { | 212 | || localVariableMapping.getName().equals(deobfName)) { |
| 212 | throw new IllegalNameException(deobfName, "There is already an argument with that name"); | 213 | throw new IllegalNameException(deobfName, "There is already an argument with that name"); |
| 213 | } | 214 | } |
| 214 | } | 215 | } |
| @@ -218,45 +219,45 @@ public class MappingsRenamer { | |||
| 218 | } | 219 | } |
| 219 | 220 | ||
| 220 | for (MethodEntry entry : implementations) { | 221 | for (MethodEntry entry : implementations) { |
| 221 | setArgumentName(new ArgumentEntry(obf, entry), deobfName); | 222 | setLocalVariableName(new LocalVariableEntry(entry, obf.getIndex(), obf.getName()), deobfName); |
| 222 | } | 223 | } |
| 223 | } | 224 | } |
| 224 | 225 | ||
| 225 | public void setArgumentName(ArgumentEntry obf, String deobfName) { | 226 | public void setLocalVariableName(LocalVariableEntry obf, String deobfName) { |
| 226 | deobfName = NameValidator.validateArgumentName(deobfName); | 227 | deobfName = NameValidator.validateArgumentName(deobfName); |
| 227 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 228 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 228 | MethodMapping mapping = classMapping.getMethodByObf(obf.getMethodName(), obf.getMethodSignature()); | 229 | MethodMapping mapping = classMapping.getMethodByObf(obf.getMethodName(), obf.getMethodDesc()); |
| 229 | // NOTE: don't need to check arguments for name collisions with names determined by Procyon | 230 | // NOTE: don't need to check arguments for name collisions with names determined by Procyon |
| 230 | // TODO: Verify if I don't break things | 231 | // TODO: Verify if I don't break things |
| 231 | if (mapping != null) { | 232 | if (mapping != null) { |
| 232 | for (ArgumentMapping argumentMapping : Lists.newArrayList(mapping.arguments())) { | 233 | for (LocalVariableMapping localVariableMapping : Lists.newArrayList(mapping.arguments())) { |
| 233 | if (argumentMapping.getIndex() != obf.getIndex()) { | 234 | if (localVariableMapping.getIndex() != obf.getIndex()) { |
| 234 | if (mapping.getDeobfArgumentName(argumentMapping.getIndex()).equals(deobfName) | 235 | if (mapping.getDeobfLocalVariableName(localVariableMapping.getIndex()).equals(deobfName) |
| 235 | || argumentMapping.getName().equals(deobfName)) { | 236 | || localVariableMapping.getName().equals(deobfName)) { |
| 236 | throw new IllegalNameException(deobfName, "There is already an argument with that name"); | 237 | throw new IllegalNameException(deobfName, "There is already an argument with that name"); |
| 237 | } | 238 | } |
| 238 | } | 239 | } |
| 239 | } | 240 | } |
| 240 | } | 241 | } |
| 241 | 242 | ||
| 242 | classMapping.setArgumentName(obf.getMethodName(), obf.getMethodSignature(), obf.getIndex(), deobfName); | 243 | classMapping.setArgumentName(obf.getMethodName(), obf.getMethodDesc(), obf.getIndex(), deobfName); |
| 243 | } | 244 | } |
| 244 | 245 | ||
| 245 | public void removeArgumentMapping(ArgumentEntry obf) { | 246 | public void removeLocalVariableMapping(LocalVariableEntry obf) { |
| 246 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 247 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 247 | classMapping.removeArgumentName(obf.getMethodName(), obf.getMethodSignature(), obf.getIndex()); | 248 | classMapping.removeArgumentName(obf.getMethodName(), obf.getMethodDesc(), obf.getIndex()); |
| 248 | } | 249 | } |
| 249 | 250 | ||
| 250 | public void markArgumentAsDeobfuscated(ArgumentEntry obf) { | 251 | public void markArgumentAsDeobfuscated(LocalVariableEntry obf) { |
| 251 | ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); | 252 | ClassMapping classMapping = getOrCreateClassMapping(obf.getOwnerClassEntry()); |
| 252 | classMapping.setArgumentName(obf.getMethodName(), obf.getMethodSignature(), obf.getIndex(), obf.getName()); | 253 | classMapping.setArgumentName(obf.getMethodName(), obf.getMethodDesc(), obf.getIndex(), obf.getName()); |
| 253 | } | 254 | } |
| 254 | 255 | ||
| 255 | public boolean moveFieldToObfClass(ClassMapping classMapping, FieldMapping fieldMapping, ClassEntry obfClass) { | 256 | public boolean moveFieldToObfClass(ClassMapping classMapping, FieldMapping fieldMapping, ClassEntry obfClass) { |
| 256 | classMapping.removeFieldMapping(fieldMapping); | 257 | classMapping.removeFieldMapping(fieldMapping); |
| 257 | ClassMapping targetClassMapping = getOrCreateClassMapping(obfClass); | 258 | ClassMapping targetClassMapping = getOrCreateClassMapping(obfClass); |
| 258 | if (!targetClassMapping.containsObfField(fieldMapping.getObfName(), fieldMapping.getObfType())) { | 259 | if (!targetClassMapping.containsObfField(fieldMapping.getObfName(), fieldMapping.getObfDesc())) { |
| 259 | if (!targetClassMapping.containsDeobfField(fieldMapping.getDeobfName(), fieldMapping.getObfType())) { | 260 | if (!targetClassMapping.containsDeobfField(fieldMapping.getDeobfName(), fieldMapping.getObfDesc())) { |
| 260 | targetClassMapping.addFieldMapping(fieldMapping); | 261 | targetClassMapping.addFieldMapping(fieldMapping); |
| 261 | return true; | 262 | return true; |
| 262 | } else { | 263 | } else { |
| @@ -269,12 +270,12 @@ public class MappingsRenamer { | |||
| 269 | public boolean moveMethodToObfClass(ClassMapping classMapping, MethodMapping methodMapping, ClassEntry obfClass) { | 270 | public boolean moveMethodToObfClass(ClassMapping classMapping, MethodMapping methodMapping, ClassEntry obfClass) { |
| 270 | classMapping.removeMethodMapping(methodMapping); | 271 | classMapping.removeMethodMapping(methodMapping); |
| 271 | ClassMapping targetClassMapping = getOrCreateClassMapping(obfClass); | 272 | ClassMapping targetClassMapping = getOrCreateClassMapping(obfClass); |
| 272 | if (!targetClassMapping.containsObfMethod(methodMapping.getObfName(), methodMapping.getObfSignature())) { | 273 | if (!targetClassMapping.containsObfMethod(methodMapping.getObfName(), methodMapping.getObfDesc())) { |
| 273 | if (!targetClassMapping.containsDeobfMethod(methodMapping.getDeobfName(), methodMapping.getObfSignature())) { | 274 | if (!targetClassMapping.containsDeobfMethod(methodMapping.getDeobfName(), methodMapping.getObfDesc())) { |
| 274 | targetClassMapping.addMethodMapping(methodMapping); | 275 | targetClassMapping.addMethodMapping(methodMapping); |
| 275 | return true; | 276 | return true; |
| 276 | } else { | 277 | } else { |
| 277 | System.err.println("WARNING: deobf method was already there: " + obfClass + "." + methodMapping.getDeobfName() + methodMapping.getObfSignature()); | 278 | System.err.println("WARNING: deobf method was already there: " + obfClass + "." + methodMapping.getDeobfName() + methodMapping.getObfDesc()); |
| 278 | } | 279 | } |
| 279 | } | 280 | } |
| 280 | return false; | 281 | return false; |
| @@ -326,12 +327,35 @@ public class MappingsRenamer { | |||
| 326 | } | 327 | } |
| 327 | 328 | ||
| 328 | public void setFieldModifier(FieldEntry obEntry, Mappings.EntryModifier modifier) { | 329 | public void setFieldModifier(FieldEntry obEntry, Mappings.EntryModifier modifier) { |
| 329 | ClassMapping classMapping = getOrCreateClassMapping(obEntry.getClassEntry()); | 330 | ClassMapping classMapping = getOrCreateClassMapping(obEntry.getOwnerClassEntry()); |
| 330 | classMapping.setFieldModifier(obEntry.getName(), obEntry.getType(), modifier); | 331 | classMapping.setFieldModifier(obEntry.getName(), obEntry.getDesc(), modifier); |
| 332 | } | ||
| 333 | |||
| 334 | public void setMethodModifier(MethodEntry obEntry, Mappings.EntryModifier modifier) { | ||
| 335 | ClassMapping classMapping = getOrCreateClassMapping(obEntry.getOwnerClassEntry()); | ||
| 336 | classMapping.setMethodModifier(obEntry.getName(), obEntry.getDesc(), modifier); | ||
| 337 | } | ||
| 338 | |||
| 339 | public Mappings.EntryModifier getClassModifier(ClassEntry obfEntry) { | ||
| 340 | ClassMapping classMapping = getOrCreateClassMapping(obfEntry); | ||
| 341 | return classMapping.getModifier(); | ||
| 331 | } | 342 | } |
| 332 | 343 | ||
| 333 | public void setMethodModifier(BehaviorEntry obEntry, Mappings.EntryModifier modifier) { | 344 | public Mappings.EntryModifier getFieldModifier(FieldEntry obfEntry) { |
| 334 | ClassMapping classMapping = getOrCreateClassMapping(obEntry.getClassEntry()); | 345 | ClassMapping classMapping = getOrCreateClassMapping(obfEntry.getOwnerClassEntry()); |
| 335 | classMapping.setMethodModifier(obEntry.getName(), obEntry.getSignature(), modifier); | 346 | FieldMapping fieldMapping = classMapping.getFieldByObf(obfEntry); |
| 347 | if (fieldMapping == null) { | ||
| 348 | return Mappings.EntryModifier.UNCHANGED; | ||
| 349 | } | ||
| 350 | return fieldMapping.getModifier(); | ||
| 351 | } | ||
| 352 | |||
| 353 | public Mappings.EntryModifier getMethodModfifier(MethodEntry obfEntry) { | ||
| 354 | ClassMapping classMapping = getOrCreateClassMapping(obfEntry.getOwnerClassEntry()); | ||
| 355 | MethodMapping methodMapping = classMapping.getMethodByObf(obfEntry); | ||
| 356 | if (methodMapping == null) { | ||
| 357 | return Mappings.EntryModifier.UNCHANGED; | ||
| 358 | } | ||
| 359 | return methodMapping.getModifier(); | ||
| 336 | } | 360 | } |
| 337 | } | 361 | } |