public void create(final Bean configuration) throws CreationException {
try {
final JDefinedClass bean = _class(configuration.name(), ClassType.CLASS);
if (configuration.extend() != null) {
bean._extends(_classByNames(configuration.extend()));
}
annotate(bean, configuration.annotations());
if (configuration.isMutable()) {
this.constructorFactory.constructor(configuration, bean, new ArrayList<JFieldVar>());
}
final Map<Member, JFieldVar> fieldsByMember = fields(bean, configuration);
final Collection<JFieldVar> fields = fieldsByMember.values();
this.constructorFactory.constructor(configuration, bean, fields);
this.creatorFactory.creator(configuration, bean, fields);
memberMethods(bean, fieldsByMember, configuration);
this.equalsFactory.create(configuration, bean, fields);
} catch (final JClassAlreadyExistsException exception) {
throw new CreationException(exception.getLocalizedMessage(), exception);
}
}