pmd: fixed #947 CloseResource rule fails if field is marked with annotation

This commit is contained in:
Andreas Dangel 2013-01-26 15:43:46 +01:00
parent 7cbb385dbb
commit 52b8be6601
3 changed files with 34 additions and 2 deletions

View File

@ -2,6 +2,7 @@
Fixed bug 878: False positive: UnusedFormalParameter for abstract methods
Fixed bug 913: SignatureDeclareThrowsException is raised twice
Fixed bug 947: CloseResource rule fails if field is marked with annotation
Fixed bug 1007: Parse Exception with annotation
Fixed bug 1011: CloseResource Rule ignores Constructors
Fixed bug 1012: False positive: Useless parentheses.

View File

@ -97,7 +97,7 @@ public class CloseResourceRule extends AbstractJavaRule {
if (ref.jjtGetChild(0) instanceof ASTClassOrInterfaceType) {
ASTClassOrInterfaceType clazz = (ASTClassOrInterfaceType) ref.jjtGetChild(0);
if (types.contains(clazz.getImage())) {
ASTVariableDeclaratorId id = (ASTVariableDeclaratorId) var.jjtGetChild(1).jjtGetChild(0);
ASTVariableDeclaratorId id = var.getFirstDescendantOfType(ASTVariableDeclaratorId.class);
ids.add(id);
}
}
@ -227,7 +227,7 @@ public class CloseResourceRule extends AbstractJavaRule {
// if all is not well, complain
if (!closed) {
ASTType type = (ASTType) var.jjtGetChild(0);
ASTType type = var.getFirstChildOfType(ASTType.class);
ASTReferenceType ref = (ASTReferenceType) type.jjtGetChild(0);
ASTClassOrInterfaceType clazz = (ASTClassOrInterfaceType) ref.jjtGetChild(0);
addViolation(data, id, clazz.getImage());

View File

@ -374,4 +374,35 @@ public class Test {
}
]]></code>
</test-code>
<test-code reinitializeRule="true">
<description>#1029 No instance level check in the close resource rule</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
public class Test {
Connection c;
public void doIt() {
c = pool.getConnection();
}
}
]]></code>
</test-code>
<test-code>
<description>#947 CloseResource rule fails if field is marked with annotation</description>
<expected-problems>2</expected-problems>
<code><![CDATA[
public class CloseResourceRuleBug {
public void foo() {
try {
Connection c = DriverManager.getConnection("fake");
Statement s = c.createStatement();
@SuppressWarnings("PMD.CloseResource") ResultSet rs = s.executeQuery("fake");
while (rs.next()) {
}
rs.close();
} catch (SQLException e) {
}
}
}
]]></code>
</test-code>
</test-data>