From 653bb2ac1044a873cb49ddef0c7b0ae518fa9270 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 2 Mar 2019 16:02:17 +0300 Subject: [PATCH] fix: hide first argument instead remove for constructor in inner class --- jadx-core/src/main/java/jadx/core/codegen/ClassGen.java | 1 + jadx-core/src/main/java/jadx/core/codegen/MethodGen.java | 2 ++ .../main/java/jadx/core/dex/instructions/args/SSAVar.java | 7 +------ .../src/main/java/jadx/core/dex/nodes/MethodNode.java | 3 +-- .../main/java/jadx/core/dex/visitors/ClassModifier.java | 2 +- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java index c2a4c0e80..26b428a94 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java @@ -262,6 +262,7 @@ public class ClassGen { code.newLine().addMultiLine(Utils.getStackTrace(e)); code.newLine().add("*/"); code.setIndent(savedIndent); + mth.addError("Method generation error: " + e.getMessage(), e); } } } diff --git a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java index 8c35d2b78..332d43a84 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -116,6 +116,8 @@ public class MethodGen { } else { mth.addComment("JADX WARN: Incorrect number of args for enum constructor: " + args.size() + " (expected >= 2)"); } + } else if (mth.contains(AFlag.SKIP_FIRST_ARG)) { + args = args.subList(1, args.size()); } addMethodArguments(code, args); code.add(')'); diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/args/SSAVar.java b/jadx-core/src/main/java/jadx/core/dex/instructions/args/SSAVar.java index d49a6cc6c..78d06ad63 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/args/SSAVar.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/args/SSAVar.java @@ -82,12 +82,7 @@ public class SSAVar extends AttrNode { } public void removeUse(RegisterArg arg) { - for (int i = 0, useListSize = useList.size(); i < useListSize; i++) { - if (useList.get(i) == arg) { - useList.remove(i); - break; - } - } + useList.removeIf(registerArg -> registerArg == arg); } public void setUsedInPhi(@Nullable PhiInsn usedInPhi) { diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java index 5b1379852..124e3458e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java @@ -248,9 +248,8 @@ public class MethodNode extends LineAttrNode implements ILoadable, ICodeNode { return argsList; } - public RegisterArg removeFirstArgument() { + public void skipFirstArgument() { this.add(AFlag.SKIP_FIRST_ARG); - return argsList.remove(0); } @Nullable diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java index 04a493bcd..3f1de7661 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java @@ -120,7 +120,7 @@ public class ClassModifier extends AbstractVisitor { if (!fieldInfo.equals(field.getFieldInfo()) || !putInsn.getArg(0).equals(arg)) { return false; } - mth.removeFirstArgument(); + mth.skipFirstArgument(); InstructionRemover.remove(mth, block, insn); // other arg usage -> wrap with IGET insn if (arg.getSVar().getUseCount() != 0) {