Skip to content

Commit 5106e44

Browse files
author
Fabrice Tiercelin
committed
Do not leave lone block
1 parent 2719e7f commit 5106e44

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

plugin/src/main/java/org/autorefactor/jdt/internal/ui/fix/OneTryRatherThanTwoCleanUp.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,10 @@ public boolean visit(final TryStatement node) {
6565
if (!tryStatements.isEmpty()) {
6666
TryStatement innerTryStatement= ASTNodes.as(tryStatements.get(0), TryStatement.class);
6767

68-
if (innerTryStatement != null && !innerTryStatement.resources().isEmpty() && innerTryStatement.catchClauses().isEmpty()) {
68+
if (innerTryStatement != null
69+
&& !innerTryStatement.resources().isEmpty()
70+
&& innerTryStatement.getFinally() == null
71+
&& innerTryStatement.catchClauses().isEmpty()) {
6972
collapseTryStatements(node, innerTryStatement);
7073
return false;
7174
}
@@ -81,6 +84,16 @@ private void collapseTryStatements(final TryStatement node, final TryStatement i
8184
TextEditGroup group= new TextEditGroup(MultiFixMessages.OneTryRatherThanTwoCleanUp_description);
8285

8386
rewrite.insertLast(node, TryStatement.RESOURCES_PROPERTY, ast.copyRange((List<VariableDeclarationExpression>) innerTryStatement.resources()), group);
84-
ASTNodes.replaceButKeepComment(rewrite, innerTryStatement, ASTNodes.createMoveTarget(rewrite, innerTryStatement.getBody()), group);
87+
List<Statement> innerStatements= ASTNodes.asList(innerTryStatement.getBody());
88+
89+
if (innerStatements == null || innerStatements.isEmpty()) {
90+
rewrite.removeButKeepComment(innerTryStatement, group);
91+
} else {
92+
ASTNodes.replaceButKeepComment(rewrite, innerTryStatement, ASTNodes.createMoveTarget(rewrite, innerStatements.get(0)), group);
93+
94+
for (int i= innerStatements.size() - 1; i > 1; i--) {
95+
rewrite.insertAfter(ASTNodes.createMoveTarget(rewrite, innerStatements.get(i)), innerTryStatement, group);
96+
}
97+
}
8598
}
8699
}

samples/src/test/java/org/autorefactor/jdt/internal/ui/fix/samples_in/OneTryRatherThanTwoSample.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ public void removeInnerTry() throws Exception {
3838
}
3939
}
4040

41+
public void doNotRemoveInnerTryWithFinally() throws Exception {
42+
try {
43+
try (final FileInputStream inputStream = new FileInputStream("out.txt")) {
44+
System.out.println(inputStream.read());
45+
} finally {
46+
System.out.println("Do not lose me!");
47+
}
48+
} catch (Exception e) {
49+
throw e;
50+
}
51+
}
52+
4153
public void doNotRemoveInnerTryWithCatchClause() throws Exception {
4254
try {
4355
try (final FileInputStream inputStream = new FileInputStream("out.txt")) {

samples/src/test/java/org/autorefactor/jdt/internal/ui/fix/samples_out/OneTryRatherThanTwoSample.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,18 @@
3030
public class OneTryRatherThanTwoSample {
3131
public void removeInnerTry() throws Exception {
3232
try (final FileInputStream inputStream = new FileInputStream("out.txt")) {
33-
{
33+
System.out.println(inputStream.read());
34+
} catch (Exception e) {
35+
throw e;
36+
}
37+
}
38+
39+
public void doNotRemoveInnerTryWithFinally() throws Exception {
40+
try {
41+
try (final FileInputStream inputStream = new FileInputStream("out.txt")) {
3442
System.out.println(inputStream.read());
43+
} finally {
44+
System.out.println("Do not lose me!");
3545
}
3646
} catch (Exception e) {
3747
throw e;

0 commit comments

Comments
 (0)