code: private List<Set<ChainedProperty<S>>> getKeys()
          throws SupportException, RepositoryException
      {
          StorableInfo<S> info = StorableIntrospector.examine(mIndexAnalyzer.getStorableType());
          List<Set<ChainedProperty<S>>> keys = new ArrayList<Set<ChainedProperty<S>>>();
  
          keys.add(stripOrdering(info.getPrimaryKey().getProperties()));
  
          for (StorableKey<S> altKey : info.getAlternateKeys()) {
              keys.add(stripOrdering(altKey.getProperties()));
          }
  
          // Also fold in all unique indexes, just in case they weren't reported
          // as actual keys.
          Collection<StorableIndex<S>> indexes =
              mRepoAccess.storageAccessFor(getStorableType()).getAllIndexes();
  
          for (StorableIndex<S> index : indexes) {
              if (!index.isUnique()) {
                  continue;
              }
  
              int propCount = index.getPropertyCount();
              Set<ChainedProperty<S>> props = new LinkedHashSet<ChainedProperty<S>>(propCount);
  
              for (int i=0; i<propCount; i++) {
                  props.add(index.getOrderedProperty(i).getChainedProperty());
              }
  
              keys.add(props);
          }
  
          return keys;
      }
docs: Returns a list of all primary and alternate keys, stripped of ordering.