How can I remove IntelliJ warnings for annotation elements which it thinks are unused?

Onur Arı :

I have created a custom validator. Intellij is giving "unused" warning for message, groups and payload fields. However, these should be defined and are used by Spring.

@Documented
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Target({FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
public @interface ValidPassword {
    String message() default "Invalid Password.";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

Is there a way to get rid of this warning? I am not allowed to suppress warnings.

Michael :

You could add a unit test which checks those fields. It would not be a very useful test, but it would at least shut IntelliJ up without suppressing the warning.

public class ValidPasswordTest
{
    @ValidPassword
    private final String fakeField = "";

    @Test
    public void checkDefaultValues() throws NoSuchFieldException
    {
        final ValidPassword validPassword = Arrays.stream(ValidPasswordTest.class.getDeclaredField("fakeField").getAnnotations())
            .filter(ValidPassword.class::isInstance)
            .map(ValidPassword.class::cast)
            .findFirst()
            .orElseThrow(RuntimeException::new);

        assertEquals("Invalid Password.", validPassword.message());
        assertArrayEquals(new Class[]{}, validPassword.groups());
        assertArrayEquals(new Class[]{}, validPassword.payload());
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=299884&siteId=1