From b20115f1a78d33d9b6d414de73996429ccd70934 Mon Sep 17 00:00:00 2001 From: Graham Date: Wed, 5 Aug 2020 19:04:28 +0100 Subject: [PATCH] Simplify IfElseTransformer Signed-off-by: Graham --- .../deob/ast/transform/IfElseTransformer.kt | 42 +++++++------------ 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/deob-ast/src/main/java/dev/openrs2/deob/ast/transform/IfElseTransformer.kt b/deob-ast/src/main/java/dev/openrs2/deob/ast/transform/IfElseTransformer.kt index c6f95fec..5d4ba1c4 100644 --- a/deob-ast/src/main/java/dev/openrs2/deob/ast/transform/IfElseTransformer.kt +++ b/deob-ast/src/main/java/dev/openrs2/deob/ast/transform/IfElseTransformer.kt @@ -108,8 +108,9 @@ class IfElseTransformer : Transformer() { */ unit.walk { stmt: IfStmt -> stmt.elseStmt.ifPresent { elseStmt -> - if (elseStmt.isIf()) { - stmt.setElseStmt(elseStmt.getIf()) + val ifStmt = elseStmt.getIf() + if (ifStmt != null) { + stmt.setElseStmt(ifStmt) } } } @@ -210,44 +211,29 @@ class IfElseTransformer : Transformer() { } private fun Statement.isIf(): Boolean { - return when (this) { - is IfStmt -> true - is BlockStmt -> { - val stmts = statements - stmts.size == 1 && stmts[0] is IfStmt - } - else -> false - } + return getIf() != null } - private fun Statement.getIf(): Statement { - when (this) { - is IfStmt -> { - return clone() - } + private fun Statement.getIf(): Statement? { + return when (this) { + is IfStmt -> clone() is BlockStmt -> { - val stmts = statements - if (stmts.size == 1) { - val head = stmts[0] - if (head is IfStmt) { - return head.clone() - } + val head = statements.singleOrNull() + if (head is IfStmt) { + head.clone() + } else { + null } } + else -> null } - throw IllegalArgumentException() } private fun Statement.isTailThrowOrReturn(): Boolean { return when (this) { is ThrowStmt, is ReturnStmt -> true is BlockStmt -> { - val stmts = statements - if (stmts.isEmpty()) { - return false - } - - val tail = stmts[stmts.size - 1] + val tail = statements.lastOrNull() tail is ThrowStmt || tail is ReturnStmt } else -> false