Skip to content

AnnotationLocation: add support for PACKAGE_DEF, ENUM_CONSTANT_DEF #6379

@pbludov

Description

@pbludov

https://checkstyle.org/config_annotation.html#AnnotationLocation

$ javac TestClass.java package-info.java
(no output)

$ cat TestConfig.xml

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
  <module name="TreeWalker">
    <module name="AnnotationLocation">
      <property name="allowSamelineSingleParameterlessAnnotation" value="false"/>
      <!-- all available tokens -->
      <property name="tokens" value="CLASS_DEF,INTERFACE_DEF,ENUM_DEF,METHOD_DEF,CTOR_DEF,VARIABLE_DEF,PARAMETER_DEF,ANNOTATION_DEF,TYPECAST,LITERAL_THROWS,IMPLEMENTS_CLAUSE,TYPE_ARGUMENT,LITERAL_NEW,DOT,ANNOTATION_FIELD_DEF"/>
    </module>
  </module>
</module>  

$ cat TestClass.java

package test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Ann enum TestEnum { // ok (line 6)

    @Ann ENUM_VALUE(); // missing violation

    TestEnum() {
        Object o = (@Ann TestEnum & @Ann Cloneable) null; // missing violation  or ... ??
    }
}

@Target({ElementType.TYPE_USE, ElementType.PACKAGE, ElementType.FIELD})
@interface Ann {}

$cat package-info.java

@Ann package test; //missing violation

$ RUN_LOCALE="-Duser.language=en -Duser.country=US"
$RUN_LOCALE java -jar checkstyle-8.16-all.jar -c TestConfig.xml TestClass.java package-info.java

Starting audit...
[WARN] TestClass.java:6: Annotation 'Ann' should be alone on line. [AnnotationLocation]
Audit done.

Expected 2 more violations.

The tokens PACKAGE_DEF, ENUM_CONSTANT_DEF, have no MODIFIERS, their annotations are under ANNOTATIONS token:

for example

    @Ann   ENUM_VALUE();

is

    |--ENUM_CONSTANT_DEF
    |   |--ANNOTATIONS
    |   |   |--ANNOTATION

AnnotationLocation does not support ANNOTATIONS at all. This is a bug and should be fixed.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions