private ICategory<String> handleObjectArray(
      Class<?> clazz, Map<ConfigurationOptions, String> parameterOptions) {
    ICategory<String> objects = HandlingDispatcherHelper.getObjectHierarchy(this.grammar, clazz);
    logger.debug(
        "Objects in array are {} for class {} with parameterOptions {}",
        new Object[] {objects, clazz, parameterOptions});

    Class<?> componentType = clazz.getComponentType();
    ICategory<String> componentCategory = this.handle(componentType, parameterOptions);

    // TODO why is object variable not used
    // ICategory<String> object = this.getObjectHierarchy(this.grammar,
    // clazz.getComponentType());
    Rule r1 = null;
    if (parameterOptions.get(ConfigurationOptions.ARRAY_DELIMITER).matches("\\s+")) {
      r1 =
          new Rule(
              objects,
              objects,
              WhitespaceCategoryDefinition.getAndSetRequiredWhitespace(this.grammar),
              objects);
    } else if (parameterOptions.get(ConfigurationOptions.ARRAY_DELIMITER).isEmpty()) {
      r1 = new Rule(objects, objects, objects);
    } else {
      Category ad = new Category(parameterOptions.get(ConfigurationOptions.ARRAY_DELIMITER), true);
      this.grammar.addCategory(ad);
      ICategory<String> WS = WhitespaceCategoryDefinition.getAndSetOptionalWhitespace(this.grammar);
      r1 = new Rule(objects, objects, WS, ad, WS, objects);
      // Rule r1a = new Rule(objects, objects, ad, WS, objects);
      // Rule r1b = new Rule(objects, objects, WS, ad, objects);
      // Rule r1c = new Rule(objects, objects, ad, objects);
      // this.grammar.addRules(r1c, r1b, r1a);
    }

    Rule r2 = new Rule(objects, componentCategory);

    this.grammar.addRules(r1, r2);

    this.grammar.addCategory(objects);

    return objects;
  }
  private ICategory<String> handleObject(Class<?> clazz) {
    ICategory<String> object = HandlingDispatcherHelper.getObjectHierarchy(this.grammar, clazz);

    return object;
  }