private void buildMetaValues(
      AnyKeyCollection any,
      MetaBeanBuilder metaBeanBuilder,
      ControllerBuilder controllerBuilder,
      ComponentRegistry componentRegistry)
      throws InstantiationException, IllegalAccessException {

    if (any.metaValuesDefinition() == MetaValuesDefinition.class) {

      if (any.metaValues().length == 0) throw new MappingException("meta values is required");

      for (MetaValue value : any.metaValues()) {
        super.applyInternalConfiguration(
            new ImportBeanEntry(value.target()), controllerBuilder, componentRegistry);
        metaBeanBuilder.addMetaValue(value.name(), AnnotationUtil.getBeanName(value.target()));
      }
    } else {
      Class<? extends MetaValuesDefinition> metaClassDefinition = any.metaValuesDefinition();
      MetaValuesDefinition metaValuesDefinition =
          (MetaValuesDefinition) ClassUtil.getInstance(metaClassDefinition);

      List<MetaValueDefinition> list = metaValuesDefinition.getMetaValues();

      if (list == null || list.isEmpty()) throw new MappingException("meta values cannot be empty");

      for (MetaValueDefinition value : list) {
        super.applyInternalConfiguration(
            new ImportBeanEntry(value.getTarget()), controllerBuilder, componentRegistry);
        metaBeanBuilder.addMetaValue(
            value.getName(), AnnotationUtil.getBeanName(value.getTarget()));
      }
    }
  }
  public Object applyConfiguration0(
      Object source, Object builder, ComponentRegistry componentRegistry)
      throws InstantiationException, IllegalAccessException {

    KeyEntry keyEntry = (KeyEntry) source;
    KeyBuilder keyBuilder = (KeyBuilder) builder;

    AnyKeyCollection anyKeyCollection = keyEntry.getAnnotation(AnyKeyCollection.class);

    Basic basic = anyKeyCollection.metaBean();
    Class<?> metaType = anyKeyCollection.metaType();

    String key = StringUtil.isEmpty(basic.bean()) ? keyEntry.getName() : basic.bean();

    EnumerationType enumType = keyEntry.getEnumerated();
    String tempType = keyEntry.getTemporal();
    ScopeType scope = AnnotationUtil.getScope(basic);
    org.brandao.brutos.type.Type type =
        keyEntry.getType() == null ? null : AnnotationUtil.getTypeInstance(keyEntry.getType());

    MetaBeanBuilder metaBeanBuilder =
        keyBuilder.buildMetaBean(key, scope, enumType, tempType, metaType, type);

    this.buildMetaValues(
        anyKeyCollection,
        metaBeanBuilder,
        keyBuilder.getBeanBuilder().getControllerBuilder(),
        componentRegistry);

    super.applyInternalConfiguration(key, keyBuilder, componentRegistry);

    return builder;
  }