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