private void extractClassProperties(
Class<?> clazz,
OverridableMethods overridableMethods,
ClassContributionTracker classContributionTracker) {
AutoProperty autoProperty = clazz.getAnnotation(AutoProperty.class);
final DefaultPojomaticPolicy classPolicy =
(autoProperty != null) ? autoProperty.policy() : null;
final AutoDetectPolicy autoDetectPolicy =
(autoProperty != null) ? autoProperty.autoDetect() : null;
Map<PropertyRole, Map<String, PropertyElement>> fieldsMap = extractFields(
clazz, classPolicy, autoDetectPolicy, classContributionTracker);
Map<PropertyRole, Map<String, PropertyElement>> methodsMap = extractMethods(
clazz, classPolicy, autoDetectPolicy, overridableMethods, classContributionTracker);
if (containsValues(fieldsMap) || containsValues(methodsMap)) {
PropertyClassVisitor propertyClassVisitor = PropertyClassVisitor.visitClass(clazz, fieldsMap, methodsMap);
if (propertyClassVisitor != null) {
for (PropertyRole role: PropertyRole.values()) {
properties.get(role).addAll(propertyClassVisitor.getSortedProperties().get(role));
}
}
else {
throw new RuntimeException("no class bytes for " + clazz);
}
}
}