/*
 * @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.reflect.Type;
import java.util.Map;
import net.ranides.assira.reflection.impl.AContext;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
public interface IContext {
    
    IContext DEFAULT = new AContext();
    
    IContext derive(Type type);
    
    <R> IClass<R> typeinfo(Class<R> type);
    
    IClass<?> typeinfo(Type type);
    
    IClass<?> typefor(Object object);
    
    IClasses typesinfo(Type... types);
    
    IClasses typesfor(Object... objects);
    
    Map<String,Type> map();
    
}
