code refactoring
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
-2
@@ -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;
|
||||
}
|
||||
+2
-2
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user