code: public void reduce(GeneralSubtrees excluded) {
          if (excluded == null) {
              return;
          }
          for (int i = 0, n = excluded.size(); i < n; i++) {
              GeneralNameInterface excludedName = excluded.getGeneralNameInterface(i);
              for (int j = 0; j < size(); j++) {
                  GeneralNameInterface permitted = getGeneralNameInterface(j);
                  switch (excludedName.constrains(permitted)) {
                  case GeneralNameInterface.NAME_DIFF_TYPE:
                      break;
                  case GeneralNameInterface.NAME_MATCH:
                      remove(j);
                      j--;
                      break;
                  case GeneralNameInterface.NAME_NARROWS:
                      /* permitted narrows excluded */
                      remove(j);
                      j--;
                      break;
                  case GeneralNameInterface.NAME_WIDENS:
                      /* permitted widens excluded */
                      break;
                  case GeneralNameInterface.NAME_SAME_TYPE:
                      break;
                  }
              } /* end of this pass of permitted */
          } /* end of pass of excluded */
      }
docs: reduce this GeneralSubtrees by contents of another.  This function
  is used in merging excluded NameConstraints with permitted NameConstraints
  to obtain a minimal form of permitted NameConstraints.  It is an
  optimization, and does not affect correctness of the results.
  
  @param excluded GeneralSubtrees