From 45486cd4d4b5e1d5388e19cf74f7cad657f3535c Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 7 Dec 2017 10:43:23 +0100 Subject: [PATCH] [java decompiler] adds an empty line before local classes --- .../java/decompiler/main/TextBuffer.java | 1 + .../modules/decompiler/ExprProcessor.java | 10 +++- testData/results/TestLocalClass.dec | 49 ++++++++++--------- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/org/jetbrains/java/decompiler/main/TextBuffer.java b/src/org/jetbrains/java/decompiler/main/TextBuffer.java index 789d584..c11ef4a 100644 --- a/src/org/jetbrains/java/decompiler/main/TextBuffer.java +++ b/src/org/jetbrains/java/decompiler/main/TextBuffer.java @@ -10,6 +10,7 @@ import java.util.*; * * @author egor */ +@SuppressWarnings("UnusedReturnValue") public class TextBuffer { private final String myLineSeparator = DecompilerContext.getNewLineSeparator(); private final String myIndent = (String)DecompilerContext.getProperty(IFernflowerPreferences.INDENT_STRING); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java b/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java index 00536fc..39efaff 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java @@ -731,8 +731,7 @@ public class ExprProcessor implements CodeConstants { return !(type == Exprent.EXPRENT_SWITCH || type == Exprent.EXPRENT_MONITOR || type == Exprent.EXPRENT_IF || - (type == Exprent.EXPRENT_VAR && ((VarExprent)expr) - .isClassDef())); + (type == Exprent.EXPRENT_VAR && ((VarExprent)expr).isClassDef())); } private static void addDeletedGotoInstructionMapping(Statement stat, BytecodeMappingTracer tracer) { @@ -803,7 +802,14 @@ public class ExprProcessor implements CodeConstants { TextBuffer buf = new TextBuffer(); for (Exprent expr : lst) { + if (buf.length() > 0 && expr.type == Exprent.EXPRENT_VAR && ((VarExprent)expr).isClassDef()) { + // separates local class definition from previous statements + buf.appendLineSeparator(); + tracer.incrementCurrentSourceLine(); + } + TextBuffer content = expr.toJava(indent, tracer); + if (content.length() > 0) { if (expr.type != Exprent.EXPRENT_VAR || !((VarExprent)expr).isClassDef()) { buf.appendIndent(indent); diff --git a/testData/results/TestLocalClass.dec b/testData/results/TestLocalClass.dec index 27c2958..a14a51a 100644 --- a/testData/results/TestLocalClass.dec +++ b/testData/results/TestLocalClass.dec @@ -3,6 +3,7 @@ package pkg; public abstract class TestLocalClass { void foo() { boolean var1 = true;// 8 + class Local { void foo() { boolean var1 = true;// 11 @@ -25,11 +26,11 @@ public abstract class TestLocalClass { class 'pkg/TestLocalClass$1Local' { method 'foo ()V' { - 0 7 - 1 7 - 2 8 - 3 8 - 4 9 + 0 8 + 1 8 + 2 9 + 3 9 + 4 10 } } @@ -37,33 +38,33 @@ class 'pkg/TestLocalClass' { method 'foo ()V' { 0 4 1 4 - a 12 - c 13 - f 14 + a 13 + c 14 + f 15 } method 'boo ()V' { - 0 17 - 1 17 - 2 18 + 0 18 + 1 18 + 2 19 } method 'zoo ()V' { - 0 21 - 1 21 - 2 22 + 0 22 + 1 22 + 2 23 } } Lines mapping: 8 <-> 5 -11 <-> 8 -12 <-> 9 -13 <-> 10 -15 <-> 13 -16 <-> 14 -17 <-> 15 -20 <-> 18 -21 <-> 19 -24 <-> 22 -25 <-> 23 +11 <-> 9 +12 <-> 10 +13 <-> 11 +15 <-> 14 +16 <-> 15 +17 <-> 16 +20 <-> 19 +21 <-> 20 +24 <-> 23 +25 <-> 24