From 2207cd7b52a1f0b60dc0d83ceb298694d242485b Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 3 May 2020 19:27:54 +0100 Subject: [PATCH] fix: inline class constants to fix enum transform (#916) --- .gitignore | 1 + .../java/jadx/core/dex/visitors/ConstInlineVisitor.java | 6 ++++++ .../src/main/java/jadx/core/dex/visitors/EnumVisitor.java | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/.gitignore b/.gitignore index eb707b1f3..bd3ccf6ff 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # IntelliJ Idea files .idea/ +.run/ out/ *.iml *.ipr diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ConstInlineVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ConstInlineVisitor.java index a358b7628..89eef2dd4 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ConstInlineVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ConstInlineVisitor.java @@ -100,6 +100,12 @@ public class ConstInlineVisitor extends AbstractVisitor { constArg = InsnArg.wrapArg(constGet); constArg.setType(ArgType.STRING); } + } else if (insnType == InsnType.CONST_CLASS) { + if (sVar.isUsedInPhi()) { + return; + } + constArg = InsnArg.wrapArg(insn.copyWithoutResult()); + constArg.setType(ArgType.CLASS); } else { return; } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java index 60889f9a6..fd331d4b2 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java @@ -293,6 +293,12 @@ public class EnumVisitor extends AbstractVisitor { if (mth == null) { return null; } + List regs = new ArrayList<>(); + co.getRegisterArgs(regs); + if (!regs.isEmpty()) { + cls.addWarnComment("Init of enum " + enumFieldNode.getName() + " can be incorrect"); + } + markArgsForSkip(mth); return new EnumField(enumFieldNode, co); }