code: public static UndefineArgument[] merge(final UndefineArgument[] base, final UndefineArgument[] override) {
      if (base.length == 0) {
        final UndefineArgument[] overrideClone = override.clone();
        return overrideClone;
      }
      if (override.length == 0) {
        final UndefineArgument[] baseClone = base.clone();
        return baseClone;
      }
      final Vector<UndefineArgument> unduplicated = new Vector<>(base.length);
      for (final UndefineArgument current : base) {
        final String currentName = current.getName();
        boolean match = false;
        if (currentName == null) {
          match = true;
        } else {
          for (final UndefineArgument over : override) {
            final String overName = over.getName();
            if (overName != null && overName.equals(currentName)) {
              match = true;
              break;
            }
          }
        }
        if (!match) {
          unduplicated.addElement(current);
        }
      }
      final UndefineArgument[] combined = new UndefineArgument[unduplicated.size() + override.length];
      unduplicated.copyInto(combined);
      final int offset = unduplicated.size();
      System.arraycopy(override, 0, combined, offset + 0, override.length);
      return combined;
    }
docs: This method returns an array of UndefineArgument and DefineArgument's by
  merging a base list with an override list.
  
  Any define in the base list with a name that appears in the override
  list is suppressed. All entries in the override list are preserved