diff options
author | Stiver <stiver.mail@gmail.com> | 2014-10-01 07:00:11 +0200 |
---|---|---|
committer | Stiver <stiver.mail@gmail.com> | 2014-10-01 07:00:11 +0200 |
commit | f735cbc7eac13452c8833bd13a060970d7c97163 (patch) | |
tree | f8da31e68ced320bcdebc84afb542fb11262c7fb /src/org/jetbrains/java/decompiler/modules/decompiler/stats/IfStatement.java | |
parent | 91c64c5a9467d17665881010bc0d86d138b124f6 (diff) | |
download | fernflower-f735cbc7eac13452c8833bd13a060970d7c97163.tar fernflower-f735cbc7eac13452c8833bd13a060970d7c97163.tar.gz fernflower-f735cbc7eac13452c8833bd13a060970d7c97163.tar.lz fernflower-f735cbc7eac13452c8833bd13a060970d7c97163.tar.xz fernflower-f735cbc7eac13452c8833bd13a060970d7c97163.zip |
Started work on mapping bytecode instructions to source code lines
Diffstat (limited to 'src/org/jetbrains/java/decompiler/modules/decompiler/stats/IfStatement.java')
-rw-r--r-- | src/org/jetbrains/java/decompiler/modules/decompiler/stats/IfStatement.java | 21 |
1 files changed, 14 insertions, 7 deletions
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(); |