class TypeContainer {

    public void gatherInformation() {
        Stack<Class<?>> hierarchie;
        Class<?> parent;
        InjectionSet injectionSet;
        List<InjectionSet> injectionSets = new ArrayList<InjectionSet>();
        
        hierarchie = new Stack<Class<?>>();
        hierarchie.push(parent = type);
        while ((parent = parent.getSuperclass()) != null) {
            if (!parent.equals(Object.class)) {
                hierarchie.push(parent);
            }
        }
        
        while (!hierarchie.isEmpty()) {
            parent = hierarchie.pop();
            if (!parent.equals(Object.class)) {
                injectionSet = new InjectionSet();
                injectionSet.type = parent;
                injectionSets.add(injectionSet);
            }
        }
        
        this.injectionSets = injectionSets.toArray(EMPTY_INJECTIONSET_ARRAY);
        
        singleton = type.isAnnotationPresent(Singleton.class);
        getFieldInformation();
        getMethodInformation();
    }

    public  TypeContainer(Class<?> type, Constructor<?> constructor);

}