[java] CloseResource: Fix NPE in case of "var"

This commit is contained in:
Andreas Dangel
2020-09-17 18:49:21 +02:00
parent f00e9744ea
commit 81a72cb43e
3 changed files with 24 additions and 2 deletions

View File

@ -175,7 +175,7 @@ public class CloseResourceRule extends AbstractJavaRule {
Map<ASTVariableDeclarator, TypeNode> resVars = new HashMap<>();
for (ASTVariableDeclarator var : vars) {
TypeNode varType = getTypeOfVariable(var);
if (isResourceTypeOrSubtype(varType)) {
if (varType != null && isResourceTypeOrSubtype(varType)) {
resVars.put(var, wrappedResourceTypeOrReturn(var, varType));
}
}
@ -189,7 +189,7 @@ public class CloseResourceRule extends AbstractJavaRule {
private TypeNode getDeclaredTypeOfVariable(ASTVariableDeclarator var) {
ASTLocalVariableDeclaration localVar = (ASTLocalVariableDeclaration) var.getParent();
return localVar.getTypeNode();
return localVar.getTypeNode(); // note: can be null, if type is inferred (var)
}
private TypeNode getRuntimeTypeOfVariable(ASTVariableDeclarator var) {

View File

@ -1385,6 +1385,27 @@ public class Foo {
}
Closeables.close(stream, false);
}
}
]]></code>
</test-code>
<test-code>
<description>[java] [6.27.0] Exception applying rule CloseResource on file ... java.lang.NullPointerException #2755</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import java.io.*;
public class Foo {
public int bar() {
var inputStream = getInputStreamFromSomewhere();
if (inputStream != null) {
try (InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8")) {
char c = reader.read();
return c;
}
}
return -1;
}
}
]]></code>
</test-code>