package org.springframework.roo.classpath.details.annotations;
import java.util.List;
import org.springframework.roo.classpath.details.comments.CommentedJavaStructure;
import org.springframework.roo.model.JavaSymbolName;
import org.springframework.roo.model.JavaType;
/**
* Metadata concerning a particular annotation appearing on a member.
*
* @author Ben Alex
* @author Andrew Swan
* @since 1.0
*/
public interface AnnotationMetadata extends CommentedJavaStructure {
/**
* @return the annotation type (never null)
*/
JavaType getAnnotationType();
/**
* Acquires an attribute value for the requested name.
*
* @param attributeName
* @return the requested attribute (or null if not found)
*/
AnnotationAttributeValue<?> getAttribute(JavaSymbolName attributeName);
/**
* Returns the value of the given attribute
*
* @param attributeName
* @return the requested attribute (or null if not found)
* @since 1.2.0
*/
<T> AnnotationAttributeValue<T> getAttribute(String attributeName);
/**
* @return the attribute names, preferably in the order they are declared in
* the annotation (never null, but may be empty)
*/
List<JavaSymbolName> getAttributeNames();
}