/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.ap.checks.annotationparameters;
import java.util.Collections;
import java.util.Set;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import org.hibernate.validator.ap.checks.ConstraintCheckIssue;
import org.hibernate.validator.ap.util.AnnotationApiHelper;
import org.hibernate.validator.ap.util.CollectionHelper;
/**
* Checks that the default annotation message parameter is valid and gives a warning otherwise.
*
* @author Marko Bekhta
*/
public class AnnotationDefaultMessageCheck extends AnnotationMessageCheck {
private final Elements elementUtils;
public AnnotationDefaultMessageCheck(AnnotationApiHelper annotationApiHelper, Elements elementUtils) {
super( annotationApiHelper );
this.elementUtils = elementUtils;
}
@Override
protected boolean canCheckThisAnnotation(AnnotationMirror annotation) {
return true;
}
@Override
protected Set<ConstraintCheckIssue> doCheck(Element element, AnnotationMirror annotation) {
//check if default message on annotation is correct or not:
if ( ElementKind.ANNOTATION_TYPE.equals( element.getKind() ) ) {
for ( Element innerElement : elementUtils.getAllMembers( (TypeElement) element ) ) {
if ( ElementKind.METHOD.equals( innerElement.getKind() ) && "message".equals( innerElement.getSimpleName().toString() ) ) {
if ( checkMessage( ( (ExecutableElement) innerElement ).getDefaultValue().getValue().toString() ) ) {
return CollectionHelper.asSet(
ConstraintCheckIssue.warning(
innerElement, annotation, "INVALID_MESSAGE_VALUE_ANNOTATION_PARAMETERS"
)
);
}
}
}
}
return Collections.emptySet();
}
}