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 {