package cuchaz.enigma.bytecode; import javassist.CtBehavior; import javassist.CtClass; import javassist.bytecode.ByteArray; import javassist.bytecode.CodeAttribute; import javassist.bytecode.ConstPool; import javassist.bytecode.LocalVariableAttribute; import javassist.bytecode.LocalVariableTypeAttribute; import cuchaz.enigma.mapping.ArgumentEntry; import cuchaz.enigma.mapping.BehaviorEntry; import cuchaz.enigma.mapping.EntryFactory; import cuchaz.enigma.mapping.Translator; public class LocalVariableRenamer { private Translator m_translator; public LocalVariableRenamer(Translator translator) { m_translator = translator; } public void rename(CtClass c) { for (CtBehavior behavior : c.getDeclaredBehaviors()) { // if there's a local variable table, just rename everything to v1, v2, v3, ... for now CodeAttribute codeAttribute = behavior.getMethodInfo().getCodeAttribute(); if (codeAttribute == null) { continue; } BehaviorEntry behaviorEntry = EntryFactory.getBehaviorEntry(behavior); ConstPool constants = c.getClassFile().getConstPool(); LocalVariableAttribute table = (LocalVariableAttribute)codeAttribute.getAttribute(LocalVariableAttribute.tag); if (table != null) { renameTable(behaviorEntry, constants, table); } LocalVariableTypeAttribute typeTable = (LocalVariableTypeAttribute)codeAttribute.getAttribute(LocalVariableAttribute.typeTag); if (typeTable != null) { renameTable(behaviorEntry, constants, typeTable); } } } // DEBUG @SuppressWarnings("unused") private void dumpTable(LocalVariableAttribute table) { for (int i=0; i