Skip to content

Commit 1beff2a

Browse files
committed
handle when the else block is what's reported
1 parent 4279e27 commit 1beff2a

File tree

3 files changed

+74
-10
lines changed

3 files changed

+74
-10
lines changed

core-codemods/src/main/java/io/codemodder/codemods/AddClarifyingBracesCodemod.java

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,25 @@ public boolean onResultFound(
3838
final Node node,
3939
final Result result) {
4040

41+
// handle the while case
4142
if (node instanceof WhileStmt) {
42-
return handleUnbracedStmt(context, cu, new UnbracedWhileStatement((WhileStmt) node), result);
43-
} else if (node.getParentNode().isPresent() && node.getParentNode().get() instanceof IfStmt) {
44-
return handleUnbracedStmt(
45-
context, cu, new UnbracedIfStatement((IfStmt) node.getParentNode().get()), result);
43+
return handleUnbracedStmt(new UnbracedWhileStatement((WhileStmt) node));
44+
45+
// handle the if case
46+
} else if (node.getParentNode().isPresent()
47+
&& node.getParentNode().get() instanceof IfStmt ifStmt) {
48+
if (ifStmt.getThenStmt() == node) {
49+
return handleUnbracedStmt(new UnbracedIfStatement(ifStmt));
50+
// handle the else case
51+
} else if (ifStmt.getElseStmt().isPresent() && ifStmt.getElseStmt().get() == node) {
52+
return handleUnbracedStmt(new UnbracedElseStatement(ifStmt));
53+
}
4654
}
4755
return false;
4856
}
4957

50-
/** Handles the case where the {@link Node} is a while statement. */
51-
private boolean handleUnbracedStmt(
52-
final CodemodInvocationContext context,
53-
final CompilationUnit cu,
54-
final UnbracedStatement stmt,
55-
final Result result) {
58+
/** Handles the case where the {@link Node} is a while unbracedStatement. */
59+
private boolean handleUnbracedStmt(final UnbracedStatement stmt) {
5660
Node parentNode = stmt.getParentNode();
5761
List<Node> childNodes = parentNode.getChildNodes();
5862
int index = childNodes.indexOf(stmt.getStatement());
@@ -139,4 +143,30 @@ public Statement getStatement() {
139143
return ifStmt;
140144
}
141145
}
146+
147+
private record UnbracedElseStatement(IfStmt ifStmt) implements UnbracedStatement {
148+
private UnbracedElseStatement {
149+
Objects.requireNonNull(ifStmt);
150+
}
151+
152+
@Override
153+
public Node getParentNode() {
154+
return ifStmt.getParentNode().get();
155+
}
156+
157+
@Override
158+
public Range getExistingSingleStatementRange() {
159+
return ifStmt.getElseStmt().get().getRange().get();
160+
}
161+
162+
@Override
163+
public void addBraces() {
164+
ifStmt.setElseStmt(new BlockStmt(NodeList.nodeList(ifStmt.getElseStmt().get())));
165+
}
166+
167+
@Override
168+
public Statement getStatement() {
169+
return ifStmt;
170+
}
171+
}
142172
}

core-codemods/src/test/resources/add-clarifying-braces/Test.java.after

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,22 @@ public class Test
2727
doNonAdminStuff5();
2828
}
2929

30+
void handleEndingDoesntNeedAdjustment() {
31+
if(!isAdmin)
32+
doNonAdminStuff5();
33+
}
34+
35+
void handleElse() {
36+
System.out.println("a");
37+
if(isAdmin) {
38+
System.out.println("b");
39+
}
40+
else
41+
{
42+
System.out.println("c");
43+
}
44+
System.out.println("d");
45+
46+
System.out.println("e");
47+
}
3048
}

core-codemods/src/test/resources/add-clarifying-braces/Test.java.before

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,20 @@ public class Test
2323
doNonAdminStuff5();
2424
}
2525

26+
void handleEndingDoesntNeedAdjustment() {
27+
if(!isAdmin)
28+
doNonAdminStuff5();
29+
}
30+
31+
void handleElse() {
32+
System.out.println("a");
33+
if(isAdmin) {
34+
System.out.println("b");
35+
}
36+
else
37+
System.out.println("c");
38+
System.out.println("d");
39+
40+
System.out.println("e");
41+
}
2642
}

0 commit comments

Comments
 (0)