diff --git a/qulice-pmd/src/main/java/com/qulice/pmd/rules/UnnecessaryLocalRule.java b/qulice-pmd/src/main/java/com/qulice/pmd/rules/UnnecessaryLocalRule.java index 36ced8a07..0a0d04b5f 100644 --- a/qulice-pmd/src/main/java/com/qulice/pmd/rules/UnnecessaryLocalRule.java +++ b/qulice-pmd/src/main/java/com/qulice/pmd/rules/UnnecessaryLocalRule.java @@ -8,6 +8,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTArgumentList; import net.sourceforge.pmd.lang.java.ast.ASTBlock; import net.sourceforge.pmd.lang.java.ast.ASTExpression; +import net.sourceforge.pmd.lang.java.ast.ASTResource; import net.sourceforge.pmd.lang.java.ast.ASTReturnStatement; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclarator; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRulechainRule; @@ -27,6 +28,10 @@ public Object visit( final ASTVariableDeclarator variable, final Object data ) { + // Skip variables that are declared as resources in a try-with-resources block + if (variable.ancestors(ASTResource.class).toStream().findAny().isPresent()) { + return data; + } if (variable.getInitializer() != null) { final String name = variableName(variable); if (!name.isEmpty()) { diff --git a/qulice-pmd/src/test/resources/com/qulice/pmd/ValidTryWithResources.java b/qulice-pmd/src/test/resources/com/qulice/pmd/ValidTryWithResources.java new file mode 100644 index 000000000..ef5c6a1f7 --- /dev/null +++ b/qulice-pmd/src/test/resources/com/qulice/pmd/ValidTryWithResources.java @@ -0,0 +1,21 @@ +package com.qulice.pmd; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.stream.Stream; + +public final class ValidTryWithResources { + private static long folderSizeInMb(final Path path) throws IOException { + try (Stream paths = Files.walk(path)) { + return paths.filter(Files::isRegularFile).mapToLong( + p -> { + try { + return Files.size(p); + } catch (final IOException exception) { + throw new IllegalStateException("Failed", exception); + } + } + ).sum() / 1024L / 1024L; + } + } +} \ No newline at end of file