From ff110508e694b0709cc82fd36e428c340cde03c4 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 11 Nov 2017 15:31:45 +0100 Subject: [PATCH] Fix another bug in NormalizeBlockStatements --- .../Transforms/NormalizeBlockStatements.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs b/ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs index 41529e0aa..89b27f40c 100644 --- a/ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs +++ b/ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs @@ -63,16 +63,23 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms { if (statement.IsNull) return; if (context.Settings.AlwaysUseBraces) { - InsertBlock(statement); + if (!IsElseIf(statement, parent)) { + InsertBlock(statement); + } } else { - if (statement is BlockStatement b && b.Statements.Count == 1 && IsAllowed(b.Statements.First(), parent)) { + if (statement is BlockStatement b && b.Statements.Count == 1 && IsAllowedAsEmbeddedStatement(b.Statements.First(), parent)) { statement.ReplaceWith(b.Statements.First().Detach()); - } else if (!IsAllowed(statement, parent)) { + } else if (!IsAllowedAsEmbeddedStatement(statement, parent)) { InsertBlock(statement); } } } + bool IsElseIf(Statement statement, Statement parent) + { + return parent is IfElseStatement && statement.Role == IfElseStatement.FalseRole; + } + static void InsertBlock(Statement statement) { if (statement.IsNull) return; @@ -83,11 +90,11 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms } } - bool IsAllowed(Statement statement, Statement parent) + bool IsAllowedAsEmbeddedStatement(Statement statement, Statement parent) { switch (statement) { case IfElseStatement ies: - return !(parent is IfElseStatement); + return parent is IfElseStatement && ies.Role == IfElseStatement.FalseRole; case VariableDeclarationStatement vds: case WhileStatement ws: case DoWhileStatement dws: