From 60615d01c39a06e8e6b3d9646da79c5f1fd5a244 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 15 Jun 2013 19:46:01 +0400 Subject: [PATCH] Fix issue for wraped synchronized argument --- src/main/java/jadx/codegen/RegionGen.java | 2 +- .../java/jadx/dex/regions/SynchronizedRegion.java | 12 ++++++------ .../java/jadx/dex/visitors/regions/RegionMaker.java | 9 ++++----- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/jadx/codegen/RegionGen.java b/src/main/java/jadx/codegen/RegionGen.java index 7104fb528..4eba045a8 100644 --- a/src/main/java/jadx/codegen/RegionGen.java +++ b/src/main/java/jadx/codegen/RegionGen.java @@ -152,7 +152,7 @@ public class RegionGen extends InsnGen { } private void makeSynchronizedRegion(SynchronizedRegion cont, CodeWriter code) throws CodegenException { - code.startLine("synchronized(").add(arg(cont.getArg())).add(") {"); + code.startLine("synchronized(").add(arg(cont.getInsn().getArg(0))).add(") {"); makeRegionIndent(code, cont.getRegion()); code.startLine('}'); } diff --git a/src/main/java/jadx/dex/regions/SynchronizedRegion.java b/src/main/java/jadx/dex/regions/SynchronizedRegion.java index f29f020bb..e8e9fc94b 100644 --- a/src/main/java/jadx/dex/regions/SynchronizedRegion.java +++ b/src/main/java/jadx/dex/regions/SynchronizedRegion.java @@ -1,24 +1,24 @@ package jadx.dex.regions; -import jadx.dex.instructions.args.RegisterArg; import jadx.dex.nodes.IContainer; import jadx.dex.nodes.IRegion; +import jadx.dex.nodes.InsnNode; import java.util.List; public final class SynchronizedRegion extends AbstractRegion { - private final RegisterArg arg; + private final InsnNode insn; private final Region region; - public SynchronizedRegion(IRegion parent, RegisterArg arg) { + public SynchronizedRegion(IRegion parent, InsnNode insn) { super(parent); - this.arg = arg; + this.insn = insn; this.region = new Region(this); } - public RegisterArg getArg() { - return arg; + public InsnNode getInsn() { + return insn; } public Region getRegion() { diff --git a/src/main/java/jadx/dex/visitors/regions/RegionMaker.java b/src/main/java/jadx/dex/visitors/regions/RegionMaker.java index b4a667c95..03fe62186 100644 --- a/src/main/java/jadx/dex/visitors/regions/RegionMaker.java +++ b/src/main/java/jadx/dex/visitors/regions/RegionMaker.java @@ -9,7 +9,7 @@ import jadx.dex.attributes.LoopAttr; import jadx.dex.instructions.IfNode; import jadx.dex.instructions.InsnType; import jadx.dex.instructions.SwitchNode; -import jadx.dex.instructions.args.RegisterArg; +import jadx.dex.instructions.args.InsnArg; import jadx.dex.nodes.BlockNode; import jadx.dex.nodes.IRegion; import jadx.dex.nodes.InsnNode; @@ -269,14 +269,13 @@ public class RegionMaker { private static final Set cacheSet = new HashSet(); private BlockNode processMonitorEnter(IRegion curRegion, BlockNode block, InsnNode insn, RegionStack stack) { - RegisterArg arg = (RegisterArg) insn.getArg(0); - SynchronizedRegion synchRegion = new SynchronizedRegion(curRegion, arg); + SynchronizedRegion synchRegion = new SynchronizedRegion(curRegion, insn); synchRegion.getSubBlocks().add(block); curRegion.getSubBlocks().add(synchRegion); Set exits = new HashSet(); cacheSet.clear(); - traverseMonitorExits(arg, block, exits, cacheSet); + traverseMonitorExits(insn.getArg(0), block, exits, cacheSet); block = BlockUtils.getNextBlock(block); BlockNode exit; @@ -298,7 +297,7 @@ public class RegionMaker { /** * Traverse from monitor-enter thru successors and collect blocks contains monitor-exit */ - private void traverseMonitorExits(RegisterArg arg, BlockNode block, Set exits, Set visited) { + private void traverseMonitorExits(InsnArg arg, BlockNode block, Set exits, Set visited) { visited.add(block); for (InsnNode insn : block.getInstructions()) { if (insn.getType() == InsnType.MONITOR_EXIT