public IElementType @NotNull [] getTypes() {
    if (myOrCondition != null) {
      // don't cache, since new element types matching the given condition can be registered at any moment
      return IElementType.enumerate(this::contains);
    }

    IElementType[] types = myTypes;

    if (types == null) {
      if (myWords.length == 0) {
        types = IElementType.EMPTY_ARRAY;
      }
      else {
        List<IElementType> list = new ArrayList<>();
        for (short i = (short)Math.max(1, myShift << 6); i <= myMax; i++) {
          if (!get(i)) continue;
          IElementType type = IElementType.find(i);
          if (type != null) {
            list.add(type);
          }
        }
        types = list.toArray(IElementType.EMPTY_ARRAY);
      }
      myTypes = types;
    }

    return types;
  }
public IElementType @NotNull [] getTypes()