diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bec331..0695762 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#49](https://github.com/green-code-initiative/ecoCode-java/pull/49) Add test to ensure all Rules are registered - [#336](https://github.com/green-code-initiative/ecoCode/issues/336) [Adds Maven Wrapper](https://github.com/green-code-initiative/ecoCode-java/pull/67) +- [#69](https://github.com/green-code-initiative/ecoCode-java/pull/69) correction of NullPointer in EC79 rule ### Deleted diff --git a/src/main/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterface.java b/src/main/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterface.java index 47cbc2e..d88f6de 100644 --- a/src/main/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterface.java +++ b/src/main/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterface.java @@ -73,6 +73,9 @@ public void visitNode(Tree tree) { @Override public void leaveNode(Tree tree) { if (tree.is(Tree.Kind.TRY_STATEMENT)) { + if(!withinTry.isEmpty()) { + withinTry.pop(); + } List secondaryTrees = toReport.pop(); if (!secondaryTrees.isEmpty()) { reportIssue(tree, MESSAGE_RULE); diff --git a/src/test/files/FreeResourcesOfAutoCloseableInterface2.java b/src/test/files/FreeResourcesOfAutoCloseableInterface2.java new file mode 100644 index 0000000..b72ba6a --- /dev/null +++ b/src/test/files/FreeResourcesOfAutoCloseableInterface2.java @@ -0,0 +1,45 @@ +package files; + +import java.io.FileWriter; +import java.io.IOException; + +/* + * ecoCode - Java language - Provides rules to reduce the environmental footprint of your Java programs + * Copyright © 2023 Green Code Initiative (https://www.ecocode.io) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +public class FreeResourcesOfAutoCloseableInterface2 { + + /** + * The first methods adds a "try" in the stack used to follow if the code is in a try + */ + public void callingMethodWithTheTry() throws IOException { + try { + calledMethodWithoutTry(); + } finally { + // Empty block of code + } + } + + /** + * The "try" should have been poped from the stack before entering here + */ + private void calledMethodWithoutTry() throws IOException { + FileWriter myWriter = new FileWriter("somefilepath"); + myWriter.write("something"); + myWriter.flush(); + myWriter.close(); + } +} \ No newline at end of file diff --git a/src/test/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterfaceTest.java b/src/test/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterfaceTest.java index 9a9ca49..a406e40 100644 --- a/src/test/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterfaceTest.java +++ b/src/test/java/fr/greencodeinitiative/java/checks/FreeResourcesOfAutoCloseableInterfaceTest.java @@ -38,4 +38,11 @@ void test_no_java_version() { .withCheck(new FreeResourcesOfAutoCloseableInterface()) .verifyIssues(); } + @Test + void test_when_try_before_auto_closeable_but_different_hierarchy_of_code() { + CheckVerifier.newVerifier() + .onFile("src/test/files/FreeResourcesOfAutoCloseableInterface2.java") + .withCheck(new FreeResourcesOfAutoCloseableInterface()) + .verifyNoIssues(); + } } \ No newline at end of file