code refactoring

This commit is contained in:
Skylot
2013-09-25 18:04:42 +04:00
parent c95211925e
commit 6bc2d3321c
14 changed files with 78 additions and 72 deletions
@@ -8,9 +8,9 @@ import jadx.core.dex.info.FieldInfo;
import jadx.core.dex.info.MethodInfo;
import jadx.core.dex.instructions.ArithNode;
import jadx.core.dex.instructions.ArithOp;
import jadx.core.dex.instructions.ConstClassInsn;
import jadx.core.dex.instructions.ConstStringInsn;
import jadx.core.dex.instructions.FillArrayOp;
import jadx.core.dex.instructions.ConstClassNode;
import jadx.core.dex.instructions.ConstStringNode;
import jadx.core.dex.instructions.FillArrayNode;
import jadx.core.dex.instructions.GotoNode;
import jadx.core.dex.instructions.IfNode;
import jadx.core.dex.instructions.IndexInsnNode;
@@ -209,12 +209,12 @@ public class InsnGen {
private void makeInsnBody(CodeWriter code, InsnNode insn, EnumSet<IGState> state) throws CodegenException {
switch (insn.getType()) {
case CONST_STR:
String str = ((ConstStringInsn) insn).getString();
String str = ((ConstStringNode) insn).getString();
code.add(StringUtils.unescapeString(str));
break;
case CONST_CLASS:
ArgType clsType = ((ConstClassInsn) insn).getClsType();
ArgType clsType = ((ConstClassNode) insn).getClsType();
code.add(useType(clsType)).add(".class");
break;
@@ -311,7 +311,7 @@ public class InsnGen {
break;
case FILL_ARRAY:
fillArray((FillArrayOp) insn, code);
fillArray((FillArrayNode) insn, code);
break;
case FILLED_NEW_ARRAY:
@@ -449,7 +449,7 @@ public class InsnGen {
code.add('}');
}
private void fillArray(FillArrayOp insn, CodeWriter code) throws CodegenException {
private void fillArray(FillArrayNode insn, CodeWriter code) throws CodegenException {
ArgType elType = insn.getResult().getType().getArrayElement();
if (elType.getPrimitiveType() == null) {
elType = elType.selectFirst();
@@ -80,7 +80,7 @@ public final class ClassInfo {
char firstChar = name.charAt(0);
if (Character.isDigit(firstChar)) {
name = "InnerClass_" + name;
name = "AnonymousClass_" + name;
} else if (firstChar == '$') {
name = "_" + name;
}
@@ -3,11 +3,11 @@ package jadx.core.dex.instructions;
import jadx.core.dex.instructions.args.ArgType;
import jadx.core.dex.nodes.InsnNode;
public class ConstClassInsn extends InsnNode {
public class ConstClassNode extends InsnNode {
private final ArgType clsType;
public ConstClassInsn(ArgType clsType) {
public ConstClassNode(ArgType clsType) {
super(InsnType.CONST_CLASS, 0);
this.clsType = clsType;
}
@@ -2,11 +2,11 @@ package jadx.core.dex.instructions;
import jadx.core.dex.nodes.InsnNode;
public class ConstStringInsn extends InsnNode {
public class ConstStringNode extends InsnNode {
private final String str;
public ConstStringInsn(String str) {
public ConstStringNode(String str) {
super(InsnType.CONST_STR, 0);
this.str = str;
}
@@ -7,11 +7,11 @@ import jadx.core.dex.nodes.InsnNode;
import com.android.dx.io.instructions.FillArrayDataPayloadDecodedInstruction;
public class FillArrayOp extends InsnNode {
public class FillArrayNode extends InsnNode {
private final Object data;
public FillArrayOp(int resReg, FillArrayDataPayloadDecodedInstruction payload) {
public FillArrayNode(int resReg, FillArrayDataPayloadDecodedInstruction payload) {
super(InsnType.FILL_ARRAY, 0);
this.data = payload.getData();
@@ -96,13 +96,13 @@ public class InsnDecoder {
case Opcodes.CONST_STRING:
case Opcodes.CONST_STRING_JUMBO: {
InsnNode node = new ConstStringInsn(dex.getString(insn.getIndex()));
InsnNode node = new ConstStringNode(dex.getString(insn.getIndex()));
node.setResult(InsnArg.reg(insn, 0, ArgType.STRING));
return node;
}
case Opcodes.CONST_CLASS: {
InsnNode node = new ConstClassInsn(dex.getType(insn.getIndex()));
InsnNode node = new ConstClassNode(dex.getType(insn.getIndex()));
node.setResult(InsnArg.reg(insn, 0, ArgType.CLASS));
return node;
}
@@ -595,7 +595,7 @@ public class InsnDecoder {
private InsnNode fillArray(DecodedInstruction insn) {
DecodedInstruction payload = insnArr[insn.getTarget()];
return new FillArrayOp(insn.getA(), (FillArrayDataPayloadDecodedInstruction) payload);
return new FillArrayNode(insn.getA(), (FillArrayDataPayloadDecodedInstruction) payload);
}
private InsnNode filledNewArray(DecodedInstruction insn, int offset, boolean isRange) {
@@ -1,6 +1,5 @@
package jadx.core.dex.instructions.args;
import jadx.core.dex.instructions.InsnType;
import jadx.core.dex.nodes.InsnNode;
import jadx.core.utils.InsnUtils;
@@ -63,40 +62,45 @@ public abstract class InsnArg extends Typed {
}
public InsnArg wrapInstruction(InsnNode insn) {
assert parentInsn != insn : "Can't wrap instruction info itself";
int count = parentInsn.getArgsCount();
InsnNode parent = parentInsn;
assert parent != insn : "Can't wrap instruction info itself";
int count = parent.getArgsCount();
for (int i = 0; i < count; i++) {
if (parentInsn.getArg(i) == this) {
InsnArg arg;
InsnType insnType = insn.getType();
switch (insnType) {
case MOVE:
case CONST:
arg = insn.getArg(0);
String name = insn.getResult().getTypedVar().getName();
if (name != null) {
arg.getTypedVar().setName(name);
}
break;
case CONST_STR:
arg = wrap(insn);
arg.getTypedVar().forceSetType(ArgType.STRING);
break;
case CONST_CLASS:
arg = wrap(insn);
arg.getTypedVar().forceSetType(ArgType.CLASS);
break;
default:
arg = wrap(insn);
break;
}
parentInsn.setArg(i, arg);
if (parent.getArg(i) == this) {
InsnArg arg = wrapArg(insn);
parent.setArg(i, arg);
return arg;
}
}
return null;
}
private static InsnArg wrapArg(InsnNode insn) {
InsnArg arg;
switch (insn.getType()) {
case MOVE:
case CONST:
arg = insn.getArg(0);
String name = insn.getResult().getTypedVar().getName();
if (name != null) {
arg.getTypedVar().setName(name);
}
break;
case CONST_STR:
arg = wrap(insn);
arg.getTypedVar().forceSetType(ArgType.STRING);
break;
case CONST_CLASS:
arg = wrap(insn);
arg.getTypedVar().forceSetType(ArgType.CLASS);
break;
default:
arg = wrap(insn);
break;
}
return arg;
}
public boolean isThis() {
// must be implemented in RegisterArg
return false;
@@ -1,7 +1,7 @@
package jadx.core.dex.instructions.args;
import jadx.core.dex.instructions.ConstClassInsn;
import jadx.core.dex.instructions.ConstStringInsn;
import jadx.core.dex.instructions.ConstClassNode;
import jadx.core.dex.instructions.ConstStringNode;
import jadx.core.dex.instructions.InsnType;
import jadx.core.dex.nodes.InsnNode;
import jadx.core.dex.visitors.InstructionRemover;
@@ -53,9 +53,9 @@ public class RegisterArg extends InsnArg {
case CONST:
return parInsn.getArg(0);
case CONST_STR:
return ((ConstStringInsn) parInsn).getString();
return ((ConstStringNode) parInsn).getString();
case CONST_CLASS:
return ((ConstClassInsn) parInsn).getClsType();
return ((ConstClassNode) parInsn).getClsType();
}
}
return null;
@@ -3,8 +3,8 @@ package jadx.core.dex.visitors;
import jadx.core.deobf.NameMapper;
import jadx.core.dex.attributes.AttributeType;
import jadx.core.dex.info.MethodInfo;
import jadx.core.dex.instructions.ConstClassInsn;
import jadx.core.dex.instructions.ConstStringInsn;
import jadx.core.dex.instructions.ConstClassNode;
import jadx.core.dex.instructions.ConstStringNode;
import jadx.core.dex.instructions.IndexInsnNode;
import jadx.core.dex.instructions.InsnType;
import jadx.core.dex.instructions.InvokeNode;
@@ -104,10 +104,10 @@ public class ModVisitor extends AbstractVisitor {
ClassNode parentClass = mth.getParentClass();
FieldNode f = null;
if (insn.getType() == InsnType.CONST_STR) {
String s = ((ConstStringInsn) insn).getString();
String s = ((ConstStringNode) insn).getString();
f = parentClass.getConstField(s);
} else if (insn.getType() == InsnType.CONST_CLASS) {
ArgType t = ((ConstClassInsn) insn).getClsType();
ArgType t = ((ConstClassNode) insn).getClsType();
f = parentClass.getConstField(t);
} else {
LiteralArg arg = (LiteralArg) insn.getArg(0);
-13
View File
@@ -1,13 +0,0 @@
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} %-5level - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>