Merge pull request #3063 from oowekyala:issue3062-stream-close-resource

[java] Fix CloseResource FP with reassigned stream #3063
This commit is contained in:
Andreas Dangel committed 2021-01-21 18:05:22 +01:00
commit 41151d30e7
3 files changed
+21 -2

No files matched your search

+1
View File
@@ -44,6 +44,7 @@ This is a {{ site.pmd.release_type }} release.
* [#2977](https://github.com/pmd/pmd/issues/2977): \[java] 6.30.0 introduces new false positive in CloseResource rule?
* [#2979](https://github.com/pmd/pmd/issues/2979): \[java] UseEqualsToCompareStrings: FP with "var" variables
* [#3004](https://github.com/pmd/pmd/issues/3004): \[java] UseEqualsToCompareStrings false positive with PMD 6.30.0
* [#3062](https://github.com/pmd/pmd/issues/3062): \[java] CloseResource FP with reassigned stream
### API Changes
@@ -169,7 +169,7 @@ public class CloseResourceRule extends AbstractJavaRule {
} else if (shouldVarOfTypeBeClosedInMethod(resVar, resVarType, methodOrConstructor)) {
reportedVarNames.add(resVar.getVariableId().getName());
addCloseResourceViolation(resVar.getVariableId(), resVarType, data);
} else {
} else if (isNotAllowedResourceType(resVarType)) {
ASTStatementExpression reassigningStatement = getFirstReassigningStatementBeforeBeingClosed(resVar, methodOrConstructor);
if (reassigningStatement != null) {
reportedVarNames.add(resVar.getVariableId().getName());
@@ -1430,7 +1430,7 @@ public class CloseResourceWithVar {
}
]]></code>
</test-code>
<test-code>
<description>#2764 false-negative when re-assigning connection</description>
<rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property>
@@ -1477,6 +1477,7 @@ public class Foo {
}
]]></code>
</test-code>
<test-code>
<description>#2977 6.30.0 introduces new false positive in CloseResource rule</description>
<expected-problems>0</expected-problems>
@@ -1492,6 +1493,23 @@ public class Foo {
file.close();
}
}
}
]]></code>
</test-code>
<test-code>
<description>#3062 CloseResource FP with reassigned stream</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import java.util.stream.Stream;
public class Foo {
void bar() {
Stream<T> stream = Stream.of(2);
if (condition) {
stream = stream.skip(2);
}
}
}
]]></code>
</test-code>