/*
 * @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.Optional;
import java.util.Set;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
public interface IElement {
    
    IContext context();
    
    IElements<? extends IElement> collect();
    
    String name();
    
    Set<IAttribute> attributes();
    
    IAnnotations annotations();

    <A extends Annotation> Optional<A> annotation(Class<A> type);
    
    IElement parent();
    
}
