public static Cons helpAllTypes(Stella_Object self, boolean doSubtypesP) {
    { Cons assertedtypes = Logic.allAssertedTypes(self);

      { List self000 = List.newList();

        self000.theConsList = Cons.copyConsList(assertedtypes);
        { List types = self000;

          { NamedDescription d = null;
            Cons iter000 = assertedtypes;

            for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
              d = ((NamedDescription)(iter000.value));
              { LogicObject c = null;
                Iterator iter001 = LogicObject.allSupercollections(d);

                while (iter001.nextP()) {
                  c = ((LogicObject)(iter001.value));
                  if (Stella_Object.isaP(c, Logic.SGT_LOGIC_NAMED_DESCRIPTION)) {
                    if (!types.memberP(c)) {
                      types.push(c);
                    }
                  }
                }
              }
              if (doSubtypesP) {
                Description.helpAllSubtypes(d, self, types);
              }
            }
          }
          return (((Cons)(types.theConsList)));
        }
      }
    }
  }