Skip to content

Commit

Permalink
#491 fixed false error when during static field initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
krzyk committed Nov 22, 2015
1 parent 4013f9b commit 8a621ef
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 2 deletions.
2 changes: 1 addition & 1 deletion qulice-pmd/src/main/resources/com/qulice/pmd/ruleset.xml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
<![CDATA[
//ClassOrInterfaceBody
[count(ClassOrInterfaceBodyDeclaration/ConstructorDeclaration)>0]
[count(ClassOrInterfaceBodyDeclaration/FieldDeclaration/VariableDeclarator/VariableInitializer)>0]
[count(ClassOrInterfaceBodyDeclaration/FieldDeclaration[@Static='false']/VariableDeclarator/VariableInitializer)>0]
]]>
</value>
</property>
Expand Down
19 changes: 18 additions & 1 deletion qulice-pmd/src/test/java/com/qulice/pmd/PMDValidatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public final class PMDValidatorTest {
* Pattern for non-constructor field initialization.
* @checkstyle LineLength (2 lines)
*/
private static final String INIT_PATTERN = "%s\\[\\d-\\d\\]: Avoid doing field initialization outside constructor.";
private static final String INIT_PATTERN = "%s\\[\\d+-\\d+\\]: Avoid doing field initialization outside constructor.";

/**
* PMDValidator can find violations in Java file(s).
Expand Down Expand Up @@ -133,6 +133,23 @@ public void forbidsFieldInitializationWhenConstructorExists()
final String file = "FieldInitConstructor.java";
this.validatePMD(
file, false,
RegexMatchers.containsPattern(
String.format(PMDValidatorTest.INIT_PATTERN, file)
)
);
}

/**
* PMDValidator can allow static field initialization when constructor
* exists.
* @throws Exception If something wrong happens inside.
*/
@Test
public void allowsStaticFieldInitializationWhenConstructorExists()
throws Exception {
final String file = "StaticFieldInitConstructor.java";
this.validatePMD(
file, true,
Matchers.not(
RegexMatchers.containsPattern(
String.format(PMDValidatorTest.INIT_PATTERN, file)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package foo;

public final class StaticFieldInitConstructor {
private static final String TEXT = "text";
private final transient int number;

public FieldInitConstructor() {
this.number = 2;
}

public int num() {
return number;
}

public String tex() {
return StaticFieldInitConstructor.TEXT;
}
}

0 comments on commit 8a621ef

Please sign in to comment.