From d29ec24576371c6a9394c53709e89df46521804e Mon Sep 17 00:00:00 2001 From: Renaud Rousset Date: Thu, 3 Oct 2024 09:44:40 +0000 Subject: [PATCH] [69] NullPointer exception in eco code java Sonar plugin --- ...FreeResourcesOfAutoCloseableInterface.java | 3 ++ ...reeResourcesOfAutoCloseableInterface2.java | 45 +++++++++++++++++++ ...ResourcesOfAutoCloseableInterfaceTest.java | 7 +++ 3 files changed, 55 insertions(+) create mode 100644 src/test/files/FreeResourcesOfAutoCloseableInterface2.java 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