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 af935820f..44c210c69 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 @@ -82,6 +82,10 @@ public class ConstInlineVisitor extends AbstractVisitor { } return; } + // don't inline const values in synchronized statement + if (checkForSynchronizeBlock(insn, sVar)) { + return; + } } else if (insnType == InsnType.CONST_STR) { if (sVar.isUsedInPhi()) { return; @@ -108,6 +112,20 @@ public class ConstInlineVisitor extends AbstractVisitor { replaceConst(mth, insn, constArg, toRemove); } + private static boolean checkForSynchronizeBlock(InsnNode insn, SSAVar ssaVar) { + for (RegisterArg reg : ssaVar.getUseList()) { + InsnNode parentInsn = reg.getParentInsn(); + if (parentInsn != null) { + InsnType insnType = parentInsn.getType(); + if (insnType == InsnType.MONITOR_ENTER || insnType == InsnType.MONITOR_EXIT) { + insn.add(AFlag.DONT_INLINE); + return true; + } + } + } + return false; + } + private static boolean checkForFinallyBlock(SSAVar sVar) { List ssaVars = sVar.getCodeVar().getSsaVars(); if (ssaVars.size() <= 1) { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java index eba7e43e7..4632fb1d5 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java @@ -608,6 +608,7 @@ public class RegionMaker { visited.add(block); for (InsnNode insn : block.getInstructions()) { if (insn.getType() == InsnType.MONITOR_EXIT + && insn.getArgsCount() > 0 && insn.getArg(0).equals(arg)) { exits.add(block); region.getExitInsns().add(insn); diff --git a/jadx-core/src/test/java/jadx/tests/api/utils/assertj/JadxClassNodeAssertions.java b/jadx-core/src/test/java/jadx/tests/api/utils/assertj/JadxClassNodeAssertions.java index 6c5834de6..fc4e652c3 100644 --- a/jadx-core/src/test/java/jadx/tests/api/utils/assertj/JadxClassNodeAssertions.java +++ b/jadx-core/src/test/java/jadx/tests/api/utils/assertj/JadxClassNodeAssertions.java @@ -16,6 +16,8 @@ public class JadxClassNodeAssertions extends AbstractAssert