From 97ff04b51c42fd3a10c8f68f720f4e088991502a Mon Sep 17 00:00:00 2001 From: Egor Ushakov Date: Wed, 25 Oct 2017 21:11:40 +0300 Subject: [PATCH] fixed line numbers in case of decompile error --- .../jetbrains/java/decompiler/main/ClassWriter.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/org/jetbrains/java/decompiler/main/ClassWriter.java b/src/org/jetbrains/java/decompiler/main/ClassWriter.java index 764b4d4..4a4f67d 100644 --- a/src/org/jetbrains/java/decompiler/main/ClassWriter.java +++ b/src/org/jetbrains/java/decompiler/main/ClassWriter.java @@ -827,11 +827,16 @@ public class ClassWriter { if (root != null && !methodWrapper.decompiledWithErrors) { // check for existence try { - TextBuffer code = root.toJava(indent + 1, tracer); + // to restore in case of an exception + BytecodeMappingTracer codeTracer = new BytecodeMappingTracer(tracer.getCurrentSourceLine()); + TextBuffer code = root.toJava(indent + 1, codeTracer); hideMethod = (clinit || dinit || hideConstructor(wrapper, init, throwsExceptions, paramCount)) && code.length() == 0; buffer.append(code); + + tracer.setCurrentSourceLine(codeTracer.getCurrentSourceLine()); + tracer.addTracer(codeTracer); } catch (Throwable ex) { DecompilerContext.getLogger() @@ -848,8 +853,7 @@ public class ClassWriter { buffer.appendLineSeparator(); tracer.incrementCurrentSourceLine(); } - - if (root != null) { + else if (root != null) { tracer.addMapping(root.getDummyExit().bytecode); } buffer.appendIndent(indent).append('}').appendLineSeparator();