diff options
Diffstat (limited to 'src/org/jetbrains/java/decompiler/modules/decompiler/stats')
11 files changed, 108 insertions, 55 deletions
diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/BasicBlockStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/BasicBlockStatement.java index 91c1a4e..1ff1b2b 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/BasicBlockStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/BasicBlockStatement.java @@ -20,6 +20,7 @@ import org.jetbrains.java.decompiler.code.Instruction; import org.jetbrains.java.decompiler.code.SimpleInstructionSequence; import org.jetbrains.java.decompiler.code.cfg.BasicBlock; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.main.collectors.CounterContainer; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; @@ -65,9 +66,9 @@ public class BasicBlockStatement extends Statement { // public methods // ***************************************************************************** - public String toJava(int indent) { - return ExprProcessor.listToJava(varDefinitions, indent) + - ExprProcessor.listToJava(exprents, indent); + public String toJava(int indent, BytecodeMappingTracer tracer) { + return ExprProcessor.listToJava(varDefinitions, indent, tracer) + + ExprProcessor.listToJava(exprents, indent, tracer); } public Statement getSimpleCopy() { diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchAllStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchAllStatement.java index 15af3c6..9ab7ec2 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchAllStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchAllStatement.java @@ -17,6 +17,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.code.CodeConstants; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.main.collectors.CounterContainer; import org.jetbrains.java.decompiler.modules.decompiler.DecHelper; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; @@ -110,7 +111,7 @@ public class CatchAllStatement extends Statement { return null; } - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { String indstr = InterpreterUtil.getIndentString(indent); String indstr1 = null; @@ -118,42 +119,48 @@ public class CatchAllStatement extends Statement { StringBuilder buf = new StringBuilder(); - buf.append(ExprProcessor.listToJava(varDefinitions, indent)); + buf.append(ExprProcessor.listToJava(varDefinitions, indent, tracer)); boolean labeled = isLabeled(); if (labeled) { buf.append(indstr).append("label").append(this.id).append(":").append(new_line_separator); + tracer.incrementSourceLine(); } List<StatEdge> lstSuccs = first.getSuccessorEdges(STATEDGE_DIRECT_ALL); if (first.type == TYPE_TRYCATCH && first.varDefinitions.isEmpty() && isFinally && !labeled && !first.isLabeled() && (lstSuccs.isEmpty() || !lstSuccs.get(0).explicit)) { - String content = ExprProcessor.jmpWrapper(first, indent, true); + String content = ExprProcessor.jmpWrapper(first, indent, true, tracer); content = content.substring(0, content.length() - new_line_separator.length()); buf.append(content); } else { buf.append(indstr).append("try {").append(new_line_separator); - buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true)); + tracer.incrementSourceLine(); + buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true, tracer)); buf.append(indstr).append("}"); } buf.append(isFinally ? " finally" : - " catch (" + vars.get(0).toJava(indent) + ")").append(" {").append(new_line_separator); + " catch (" + vars.get(0).toJava(indent, tracer) + ")").append(" {").append(new_line_separator); + tracer.incrementSourceLine(); if (monitor != null) { indstr1 = InterpreterUtil.getIndentString(indent + 1); - buf.append(indstr1).append("if(").append(monitor.toJava(indent)).append(") {").append(new_line_separator); + buf.append(indstr1).append("if(").append(monitor.toJava(indent, tracer)).append(") {").append(new_line_separator); + tracer.incrementSourceLine(); } - buf.append(ExprProcessor.jmpWrapper(handler, indent + 1 + (monitor != null ? 1 : 0), true)); + buf.append(ExprProcessor.jmpWrapper(handler, indent + 1 + (monitor != null ? 1 : 0), true, tracer)); if (monitor != null) { buf.append(indstr1).append("}").append(new_line_separator); + tracer.incrementSourceLine(); } buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); return buf.toString(); } diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchStatement.java index ea45bdd..7162f15 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchStatement.java @@ -17,6 +17,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.code.CodeConstants; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.main.collectors.CounterContainer; import org.jetbrains.java.decompiler.modules.decompiler.DecHelper; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; @@ -149,20 +150,23 @@ public class CatchStatement extends Statement { return null; } - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { String indstr = InterpreterUtil.getIndentString(indent); StringBuilder buf = new StringBuilder(); String new_line_separator = DecompilerContext.getNewLineSeparator(); - buf.append(ExprProcessor.listToJava(varDefinitions, indent)); + buf.append(ExprProcessor.listToJava(varDefinitions, indent, tracer)); if (isLabeled()) { buf.append(indstr).append("label").append(this.id).append(":").append(new_line_separator); + tracer.incrementSourceLine(); } buf.append(indstr).append("try {").append(new_line_separator); - buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true)); + tracer.incrementSourceLine(); + + buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true, tracer)); buf.append(indstr).append("}"); for (int i = 1; i < stats.size(); i++) { @@ -177,12 +181,16 @@ public class CatchStatement extends Statement { buf.append(exc_type_name).append(" | "); } } - buf.append(vars.get(i - 1).toJava(indent)); - buf.append(") {").append(new_line_separator).append(ExprProcessor.jmpWrapper(stats.get(i), indent + 1, true)).append(indstr) + buf.append(vars.get(i - 1).toJava(indent, tracer)); + buf.append(") {").append(new_line_separator); + tracer.incrementSourceLine(); + buf.append(ExprProcessor.jmpWrapper(stats.get(i), indent + 1, true, tracer)).append(indstr) .append("}"); + tracer.incrementSourceLine(); } buf.append(new_line_separator); + tracer.incrementSourceLine(); return buf.toString(); } diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/DoStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/DoStatement.java index 7c152c2..299659a 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/DoStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/DoStatement.java @@ -16,6 +16,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; import org.jetbrains.java.decompiler.modules.decompiler.StatEdge; import org.jetbrains.java.decompiler.modules.decompiler.exps.Exprent; @@ -91,40 +92,49 @@ public class DoStatement extends Statement { return null; } - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { String indstr = InterpreterUtil.getIndentString(indent); StringBuilder buf = new StringBuilder(); String new_line_separator = DecompilerContext.getNewLineSeparator(); - buf.append(ExprProcessor.listToJava(varDefinitions, indent)); + buf.append(ExprProcessor.listToJava(varDefinitions, indent, tracer)); if (isLabeled()) { buf.append(indstr).append("label").append(this.id).append(":").append(new_line_separator); + tracer.incrementSourceLine(); } switch (looptype) { case LOOP_DO: buf.append(indstr).append("while(true) {").append(new_line_separator); - buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true)); + tracer.incrementSourceLine(); + buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true, tracer)); buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); break; case LOOP_DOWHILE: buf.append(indstr).append("do {").append(new_line_separator); - buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true)); - buf.append(indstr).append("} while(").append(conditionExprent.get(0).toJava(indent)).append(");").append(new_line_separator); + tracer.incrementSourceLine(); + buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true, tracer)); + buf.append(indstr).append("} while(").append(conditionExprent.get(0).toJava(indent, tracer)).append(");").append(new_line_separator); + tracer.incrementSourceLine(); break; case LOOP_WHILE: - buf.append(indstr).append("while(").append(conditionExprent.get(0).toJava(indent)).append(") {").append(new_line_separator); - buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true)); + buf.append(indstr).append("while(").append(conditionExprent.get(0).toJava(indent, tracer)).append(") {").append(new_line_separator); + tracer.incrementSourceLine(); + buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true, tracer)); buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); break; case LOOP_FOR: - buf.append(indstr).append("for(").append(initExprent.get(0) == null ? "" : initExprent.get(0).toJava(indent)).append("; ") - .append(conditionExprent.get(0).toJava(indent)).append("; ").append(incExprent.get(0).toJava(indent)).append(") {") + buf.append(indstr).append("for(").append(initExprent.get(0) == null ? "" : initExprent.get(0).toJava(indent, tracer)).append("; ") + .append(conditionExprent.get(0).toJava(indent, tracer)).append("; ").append(incExprent.get(0).toJava(indent, tracer)).append(") {") .append(new_line_separator); - buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true)); + tracer.incrementSourceLine(); + buf.append(ExprProcessor.jmpWrapper(first, indent + 1, true, tracer)); buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); } return buf.toString(); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/GeneralStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/GeneralStatement.java index a11171e..8541e68 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/GeneralStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/GeneralStatement.java @@ -16,6 +16,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.util.InterpreterUtil; import java.util.Collection; @@ -53,7 +54,7 @@ public class GeneralStatement extends Statement { // public methods // ***************************************************************************** - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { String indstr = InterpreterUtil.getIndentString(indent); StringBuilder buf = new StringBuilder(); @@ -65,7 +66,7 @@ public class GeneralStatement extends Statement { buf.append(indstr).append("abstract statement {").append(new_line_separator); for (int i = 0; i < stats.size(); i++) { - buf.append(stats.get(i).toJava(indent + 1)); + buf.append(stats.get(i).toJava(indent + 1, tracer)); } buf.append(indstr).append("}"); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/IfStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/IfStatement.java index 9ad8125..343d99e 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/IfStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/IfStatement.java @@ -16,6 +16,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.modules.decompiler.DecHelper; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; import org.jetbrains.java.decompiler.modules.decompiler.StatEdge; @@ -199,20 +200,22 @@ public class IfStatement extends Statement { return null; } - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { String indstr = InterpreterUtil.getIndentString(indent); StringBuilder buf = new StringBuilder(); String new_line_separator = DecompilerContext.getNewLineSeparator(); - buf.append(ExprProcessor.listToJava(varDefinitions, indent)); - buf.append(first.toJava(indent)); + buf.append(ExprProcessor.listToJava(varDefinitions, indent, tracer)); + buf.append(first.toJava(indent, tracer)); if (isLabeled()) { buf.append(indstr).append("label").append(this.id).append(":").append(new_line_separator); + tracer.incrementSourceLine(); } - buf.append(indstr).append(headexprent.get(0).toJava(indent)).append(" {").append(new_line_separator); + buf.append(indstr).append(headexprent.get(0).toJava(indent, tracer)).append(" {").append(new_line_separator); + tracer.incrementSourceLine(); if (ifstat == null) { buf.append(InterpreterUtil.getIndentString(indent + 1)); @@ -232,9 +235,10 @@ public class IfStatement extends Statement { } } buf.append(";").append(new_line_separator); + tracer.incrementSourceLine(); } else { - buf.append(ExprProcessor.jmpWrapper(ifstat, indent + 1, true)); + buf.append(ExprProcessor.jmpWrapper(ifstat, indent + 1, true, tracer)); } boolean elseif = false; @@ -245,7 +249,7 @@ public class IfStatement extends Statement { !elsestat.isLabeled() && (elsestat.getSuccessorEdges(STATEDGE_DIRECT_ALL).isEmpty() || !elsestat.getSuccessorEdges(STATEDGE_DIRECT_ALL).get(0).explicit)) { // else if - String content = ExprProcessor.jmpWrapper(elsestat, indent, false); + String content = ExprProcessor.jmpWrapper(elsestat, indent, false, tracer); content = content.substring(indstr.length()); buf.append(indstr).append("} else "); @@ -254,10 +258,12 @@ public class IfStatement extends Statement { elseif = true; } else { - String content = ExprProcessor.jmpWrapper(elsestat, indent + 1, false); + String content = ExprProcessor.jmpWrapper(elsestat, indent + 1, false, tracer); if (content.length() > 0) { buf.append(indstr).append("} else {").append(new_line_separator); + tracer.incrementSourceLine(); // FIXME: wrong order + buf.append(content); } } @@ -265,6 +271,7 @@ public class IfStatement extends Statement { if (!elseif) { buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); } return buf.toString(); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/RootStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/RootStatement.java index 2a69447..07009d6 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/RootStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/RootStatement.java @@ -15,6 +15,7 @@ */ package org.jetbrains.java.decompiler.modules.decompiler.stats; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; @@ -33,9 +34,9 @@ public class RootStatement extends Statement { first.setParent(this); } - public String toJava(int indent) { - return ExprProcessor.listToJava(varDefinitions, indent) + - first.toJava(indent); + public String toJava(int indent, BytecodeMappingTracer tracer) { + return ExprProcessor.listToJava(varDefinitions, indent, tracer) + + first.toJava(indent, tracer); } public Statement getDummyExit() { diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SequenceStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SequenceStatement.java index eccce91..24152f3 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SequenceStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SequenceStatement.java @@ -16,6 +16,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.modules.decompiler.DecHelper; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; import org.jetbrains.java.decompiler.modules.decompiler.StatEdge; @@ -98,7 +99,7 @@ public class SequenceStatement extends Statement { return null; } - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { StringBuilder buf = new StringBuilder(); @@ -107,12 +108,13 @@ public class SequenceStatement extends Statement { String new_line_separator = DecompilerContext.getNewLineSeparator(); - buf.append(ExprProcessor.listToJava(varDefinitions, indent)); + buf.append(ExprProcessor.listToJava(varDefinitions, indent, tracer)); if (islabeled) { indstr = InterpreterUtil.getIndentString(indent); indent++; buf.append(indstr).append("label").append(this.id).append(": {").append(new_line_separator); + tracer.incrementSourceLine(); } boolean notempty = false; @@ -123,9 +125,10 @@ public class SequenceStatement extends Statement { if (i > 0 && notempty) { buf.append(new_line_separator); + tracer.incrementSourceLine(); } - String str = ExprProcessor.jmpWrapper(st, indent, false); + String str = ExprProcessor.jmpWrapper(st, indent, false, tracer); buf.append(str); notempty = (str.trim().length() > 0); @@ -133,6 +136,7 @@ public class SequenceStatement extends Statement { if (islabeled) { buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); } return buf.toString(); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statement.java index 6a1a46b..669b15f 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statement.java @@ -18,6 +18,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.code.CodeConstants; import org.jetbrains.java.decompiler.code.InstructionSequence; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.main.collectors.CounterContainer; import org.jetbrains.java.decompiler.modules.decompiler.StatEdge; import org.jetbrains.java.decompiler.modules.decompiler.StrongConnectivityHelper; @@ -488,11 +489,11 @@ public class Statement { } // to be overwritten - public String toJava() { - return toJava(0); - } + //public String toJava() { + // return toJava(0); + //} - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { throw new RuntimeException("not implemented"); } diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SwitchStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SwitchStatement.java index b54642d..3b75fdc 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SwitchStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SwitchStatement.java @@ -18,6 +18,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.code.SwitchInstruction; import org.jetbrains.java.decompiler.code.cfg.BasicBlock; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.main.collectors.CounterContainer; import org.jetbrains.java.decompiler.modules.decompiler.DecHelper; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; @@ -106,21 +107,23 @@ public class SwitchStatement extends Statement { return null; } - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { String indstr = InterpreterUtil.getIndentString(indent); String new_line_separator = DecompilerContext.getNewLineSeparator(); StringBuilder buf = new StringBuilder(); - buf.append(ExprProcessor.listToJava(varDefinitions, indent)); - buf.append(first.toJava(indent)); + buf.append(ExprProcessor.listToJava(varDefinitions, indent, tracer)); + buf.append(first.toJava(indent, tracer)); if (isLabeled()) { buf.append(indstr).append("label").append(this.id).append(":").append(new_line_separator); + tracer.incrementSourceLine(); } - buf.append(indstr).append(headexprent.get(0).toJava(indent)).append(" {").append(new_line_separator); + buf.append(indstr).append(headexprent.get(0).toJava(indent, tracer)).append(" {").append(new_line_separator); + tracer.incrementSourceLine(); VarType switch_type = headexprent.get(0).getExprType(); @@ -133,19 +136,22 @@ public class SwitchStatement extends Statement { for (int j = 0; j < edges.size(); j++) { if (edges.get(j) == default_edge) { buf.append(indstr).append("default:").append(new_line_separator); + tracer.incrementSourceLine(); } else { ConstExprent value = (ConstExprent)values.get(j).copy(); value.setConsttype(switch_type); - buf.append(indstr).append("case ").append(value.toJava(indent)).append(":").append(new_line_separator); + buf.append(indstr).append("case ").append(value.toJava(indent, tracer)).append(":").append(new_line_separator); + tracer.incrementSourceLine(); } } - buf.append(ExprProcessor.jmpWrapper(stat, indent + 1, false)); + buf.append(ExprProcessor.jmpWrapper(stat, indent + 1, false, tracer)); } buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); return buf.toString(); } diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SynchronizedStatement.java b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SynchronizedStatement.java index 6e3dc47..3d61198 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SynchronizedStatement.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/stats/SynchronizedStatement.java @@ -16,6 +16,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.stats; import org.jetbrains.java.decompiler.main.DecompilerContext; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; import org.jetbrains.java.decompiler.modules.decompiler.SequenceHelper; import org.jetbrains.java.decompiler.modules.decompiler.StatEdge; @@ -68,22 +69,28 @@ public class SynchronizedStatement extends Statement { // public methods // ***************************************************************************** - public String toJava(int indent) { + public String toJava(int indent, BytecodeMappingTracer tracer) { String indstr = InterpreterUtil.getIndentString(indent); String new_line_separator = DecompilerContext.getNewLineSeparator(); StringBuilder buf = new StringBuilder(); - buf.append(ExprProcessor.listToJava(varDefinitions, indent)); - buf.append(first.toJava(indent)); + buf.append(ExprProcessor.listToJava(varDefinitions, indent, tracer)); + buf.append(first.toJava(indent, tracer)); if (isLabeled()) { buf.append(indstr).append("label").append(this.id).append(":").append(new_line_separator); + tracer.incrementSourceLine(); } - buf.append(indstr).append(headexprent.get(0).toJava(indent)).append(" {").append(new_line_separator); - buf.append(ExprProcessor.jmpWrapper(body, indent + 1, true)); + buf.append(indstr).append(headexprent.get(0).toJava(indent, tracer)).append(" {").append(new_line_separator); + tracer.incrementSourceLine(); + + buf.append(ExprProcessor.jmpWrapper(body, indent + 1, true, tracer)); + tracer.incrementSourceLine(); + buf.append(indstr).append("}").append(new_line_separator); + tracer.incrementSourceLine(); return buf.toString(); } |