protected TypeMetadata buildTypeMetadata(String type, ClassLoader classLoader) throws ClassNotFoundException { GenerationTools generationTools = new GenerationTools(); Class<?> clazz = classLoader.loadClass(type); ClassFieldInspector fieldInspector = new ClassFieldInspector(clazz); List<FieldMetadata> fields = new ArrayList<>(); for (String fieldName : fieldInspector.getFieldNames()) { ClassFieldInspector.FieldInfo fieldInfo = fieldInspector.getFieldTypesFieldInfo().get(fieldName); if (fieldInfo.getOrigin() == ModelField.FIELD_ORIGIN.DECLARED || fieldInfo.getOrigin() == ModelField.FIELD_ORIGIN.INHERITED) { String accessor = null; String mutator = null; if (fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.ACCESSOR || fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.BOTH) { accessor = generationTools.toJavaGetter(fieldName, fieldInfo.getReturnType().getName()); } if (fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.MUTATOR || fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.BOTH) { mutator = generationTools.toJavaSetter(fieldName); } fields.add(new FieldMetadata(fieldName, fieldInfo.getReturnType().getName(), accessor, mutator)); } } return new TypeMetadata(type, fields); }
public ClassFieldInspector(final Class<?> clazz) { final List<Field> fields = new ArrayList<>(getAllFields(clazz).values()); final List<Field> declaredFields = Arrays.asList(clazz.getDeclaredFields()); final Map<String, Field> inaccessibleFields = new HashMap<>(); final List<Method> methods = new ArrayList<>(getAllMethods(clazz).values()); for (Method method : methods) { final int modifiers = method.getModifiers(); String methodName = null; FieldAccessorsAndMutators accessorsAndMutators = null; if (isGetter(method)) { methodName = method.getName().substring(3); methodName = Introspector.decapitalize(methodName); accessorsAndMutators = FieldAccessorsAndMutators.ACCESSOR; } else if (isBooleanGetter(method)) { methodName = method.getName().substring(2); methodName = Introspector.decapitalize(methodName); accessorsAndMutators = FieldAccessorsAndMutators.ACCESSOR; } else if (isSetter(method)) { methodName = method.getName().substring(3); methodName = Introspector.decapitalize(methodName); final ModelField.FIELD_ORIGIN origin = getOrigin(methodName, getNames(fields), getNames(declaredFields));
final ClassFieldInspector inspector = new ClassFieldInspector(clazz); final Set<String> fieldNames = inspector.getFieldNames(); final ClassFieldInspector.FieldInfo f = inspector.getFieldTypesFieldInfo().get(fieldName); addParametricTypeForField(factType, fieldName,