/* 368 */ return getTypeInfo(clazz);
/* */ }
/* */
/* */ protected TypeInfo instantiate(Class<?> clazz)
/* */ {
/* */ ClassInfoImpl result;
/* */ ClassInfoImpl result;
/* 374 */ if (clazz.isArray())
/* */ {
/* 376 */ TypeInfo componentType = getTypeInfo(clazz.getComponentType());
/* 377 */ result = new ArrayInfoImpl(componentType);
/* */ }
/* 379 */ else if (clazz.isEnum())
/* */ {
/* 381 */ EnumInfoImpl enumInfoImpl = new EnumInfoImpl(clazz.getName(), clazz.getModifiers());
/* 382 */ ClassInfoImpl result = enumInfoImpl;
/* 383 */ Field[] fields = clazz.getFields();
/* 384 */ EnumConstantInfoImpl[] constants = new EnumConstantInfoImpl[fields.length];
/* 385 */ int i = 0;
/* 386 */ for (Field field : fields)
/* */ {
/* 388 */ AnnotationValue[] annotations = getAnnotations(field);
/* 389 */ constants[(i++)] = new EnumConstantInfoImpl(field.getName(), enumInfoImpl, annotations);
/* */ }
/* 391 */ enumInfoImpl.setEnumConstants(constants);
/* */ }
/* 393 */ else if (clazz.isAnnotation())
/* */ {
/* 395 */ ClassInfoImpl result = new AnnotationInfoImpl(clazz.getName(), clazz.getModifiers());
/* 396 */ Method[] methods = getDeclaredMethods(clazz);
/* 397 */ AnnotationAttributeImpl[] atttributes = new AnnotationAttributeImpl[methods.length];
/* 398 */ for (int i = 0; i < methods.length; i++)
/* */ {
/* 400 */ atttributes[i] = new AnnotationAttributeImpl(methods[i].getName(), getTypeInfo(methods[i].getReturnType()), null);
/* */ }
/* 402 */ ((AnnotationInfoImpl)result).setAttributes(atttributes);
/* */ }
/* */ else
/* */ {
/* 406 */ result = new ReflectClassInfoImpl(clazz.getName());
/* */ }
/* 408 */ result.setType(clazz);
/* 409 */ result.setTypeInfoFactory(this);
/* 410 */ result.setClassInfoHelper(this);
/* 411 */ result.setAnnotationHelper(this);
/* 412 */ return result;
/* */ }