From f77b48750b3fd038babfa1c67b00aa665e0bb83c Mon Sep 17 00:00:00 2001 From: Georgii Ustinov Date: Wed, 22 Jan 2025 20:19:03 +0200 Subject: [PATCH] [Java. Inspections] Refactoring try-with-resources + fix check in AutoCloseableVariableUsedVisitor IDEA-359576 GitOrigin-RevId: 370c13b9667b0978d7bf95cb6a6fca060a8d368b --- ...inallyCanBeTryWithResourcesInspection.java | 6 ++--- .../TryFinallyCanBeTryWithResources.java | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/java/java-analysis-impl/src/com/siyeh/ig/migration/TryFinallyCanBeTryWithResourcesInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/migration/TryFinallyCanBeTryWithResourcesInspection.java index 3289c81adc12..cff5cc967c95 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/migration/TryFinallyCanBeTryWithResourcesInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/migration/TryFinallyCanBeTryWithResourcesInspection.java @@ -514,7 +514,7 @@ public final class TryFinallyCanBeTryWithResourcesInspection extends BaseInspect } private static boolean isAutoCloseableDeclaredInFinallyBlock(@NotNull PsiCodeBlock block, @NotNull PsiVariable variable) { - return variable instanceof PsiLocalVariable && PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class, true) == block; + return variable instanceof PsiLocalVariable && PsiTreeUtil.isAncestor(block, variable, true); } private static @Nullable PsiVariable findAutoCloseableVariable(@Nullable PsiStatement statement) { @@ -616,8 +616,8 @@ public final class TryFinallyCanBeTryWithResourcesInspection extends BaseInspect used = true; return; } - PsiElement parent = referenceExpression.getParent(); - if ((parent instanceof PsiMethodCallExpression && !isCloseMethodCalled(referenceExpression)) || parent instanceof PsiExpressionList) { + PsiElement parent = PsiTreeUtil.getParentOfType(referenceExpression, true, PsiMethodCallExpression.class, PsiExpressionList.class); + if (parent instanceof PsiMethodCallExpression && !isCloseMethodCalled(referenceExpression) || parent instanceof PsiExpressionList) { used = true; } } diff --git a/java/java-tests/testData/ig/com/siyeh/igtest/migration/try_finally_can_be_try_with_resources/TryFinallyCanBeTryWithResources.java b/java/java-tests/testData/ig/com/siyeh/igtest/migration/try_finally_can_be_try_with_resources/TryFinallyCanBeTryWithResources.java index b7bc730b1742..3b44bd98e498 100644 --- a/java/java-tests/testData/ig/com/siyeh/igtest/migration/try_finally_can_be_try_with_resources/TryFinallyCanBeTryWithResources.java +++ b/java/java-tests/testData/ig/com/siyeh/igtest/migration/try_finally_can_be_try_with_resources/TryFinallyCanBeTryWithResources.java @@ -360,6 +360,16 @@ class ExtraUsageOfAutoCloseableInFinally { } } } + + public void expressionList() throws Exception { + MyAutoCloseable first = create(); + try { + System.out.println(first.hashCode()); + } finally { + first.close(); + System.out.println(first.hashCode()); + } + } } class NestedCatchSections { @@ -480,6 +490,22 @@ class NestedCatchSections { } } } + + void variableUsedInSecondInnerTry(InputStream stream) { + try { + System.out.println(1); + } finally { + try { + stream.close(); + } + catch (Exception e) { + } + try { + stream.close(); + } catch (Exception e) { + } + } + } } class UsageOfDependentVariablesInFinally {