/*
 * @author Ranides Atterwim <ranides@gmail.com>
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/assira
 */
package net.ranides.assira.reflection;

import java.lang.annotation.Annotation;
import java.util.function.Predicate;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
public interface IAnnotations extends IElements<Annotation> {
    
    <A extends Annotation> A first(Class<A> type);
    
    IAnnotations require(Predicate<? super Annotation> predicate);
    
    IAnnotations require(Class<? extends Annotation> type);
    
    IAnnotations discard(Predicate<? super Annotation> predicate);
    
    IAnnotations discard(Class<? extends Annotation> type);
            
}
