[java] Report class name for package-private only classes

- Fixes #1729
This commit is contained in:
Juan Martín Sotuyo Dodero
2019-03-31 15:02:10 -03:00
parent a8823c4afd
commit 8468c4e2bc
2 changed files with 23 additions and 0 deletions

View File

@ -119,6 +119,19 @@ public class JavaRuleViolation extends ParametricRuleViolation<JavaNode> {
}
}
}
// Still not found?
if (qualifiedName == null) {
for (ClassNameDeclaration c : classes) {
// find the first package-private class/enum declaration
if (c.getAccessNodeParent() instanceof AccessNode) {
if (((AccessNode) c.getAccessNodeParent()).isPackagePrivate()) {
qualifiedName = c.getImage();
break;
}
}
}
}
}
if (qualifiedName != null) {

View File

@ -120,4 +120,14 @@ public class JavaRuleViolationTest {
assertEquals("pkg", violation.getPackageName());
assertEquals("Bar", violation.getClassName());
}
@Test
public void testPackageAndPackagePrivateClassesName() {
ASTCompilationUnit ast = parse("package pkg; import java.util.List; class Foo { }");
ASTImportDeclaration importNode = ast.getFirstDescendantOfType(ASTImportDeclaration.class);
JavaRuleViolation violation = new JavaRuleViolation(null, new RuleContext(), importNode, null);
assertEquals("pkg", violation.getPackageName());
assertEquals("Foo", violation.getClassName());
}
}