public static Object[] isSimpleGeneric(Type type, ClassTypeResolver classTypeResolver)
      throws ModelDriverException {
    Object[] result = new Object[3];
    result[0] = false;
    result[1] = null;
    result[2] = null;

    if (type.isArray()
        || type.isPrimitive()
        || !type.isParameterized()
        || (type.isParameterized() && type.getTypeArguments().size() != 1)) {
      return result;
    }

    Type<?> argument = ((List<Type>) type.getTypeArguments()).get(0);
    if (!isSimpleClass(argument)) {
      return result;
    }

    try {
      String outerClass = classTypeResolver.getFullTypeName(type.getName());
      String argumentClass = classTypeResolver.getFullTypeName(argument.getName());

      result[0] = true;
      result[1] = outerClass;
      result[2] = argumentClass;
      return result;

    } catch (ClassNotFoundException e) {
      throw new ModelDriverException(
          "Class could not be resolved for name: " + type.getName() + ". " + e.getMessage(), e);
    }
  }
  public static boolean equalsType(
      Type type,
      String fullClassName,
      boolean multiple,
      String fullBagClassName,
      ClassTypeResolver classTypeResolver)
      throws Exception {

    String currentClassName;
    String currentBag;

    if (type.isArray()) {
      return false;
    }

    if (type.isPrimitive()) {
      return !multiple && fullClassName.equals(type.getName());
    }

    if (isSimpleClass(type)) {
      currentClassName = classTypeResolver.getFullTypeName(type.getName());
      return !multiple && fullClassName.equals(currentClassName);
    }

    Object[] simpleGenerics = isSimpleGeneric(type, classTypeResolver);
    if (multiple
        && Boolean.TRUE.equals(simpleGenerics[0])
        && isManagedType(type, classTypeResolver)) {

      currentBag = (String) simpleGenerics[1];
      currentBag = classTypeResolver.getFullTypeName(currentBag);

      currentClassName = (String) simpleGenerics[2];
      currentClassName = classTypeResolver.getFullTypeName(currentClassName);

      return fullBagClassName.equals(currentBag) && fullClassName.equals(currentClassName);
    }

    return false;
  }