code: Parsable<RECORD> parse(final Parsable<RECORD> parsable)
          throws DissectionFailure, InvalidDissectorException, MissingDissectorsException {
          assembleDissectors();
  
          if (!assembled) {
              return null;
          }
  
          // Values look like "TYPE:foo.bar"
          Set<ParsedField> toBeParsed = new HashSet<>(parsable.getToBeParsed());
  
          while (!toBeParsed.isEmpty()) {
              for (ParsedField fieldThatNeedsToBeParsed : toBeParsed) {
                  parsable.setAsParsed(fieldThatNeedsToBeParsed);
                  Set<DissectorPhase> dissectorSet = compiledDissectors.get(fieldThatNeedsToBeParsed.getId());
                  if (dissectorSet != null) {
                      for (DissectorPhase dissector : dissectorSet) {
                          if (LOG.isDebugEnabled()) {
                              LOG.debug("Dissect {} with {}", fieldThatNeedsToBeParsed, dissector.instance.getClass().getName());
                          }
                          dissector.instance.dissect(parsable, fieldThatNeedsToBeParsed.getName());
                      }
                  } else {
                      LOG.trace("NO DISSECTORS FOR \"{}\"", fieldThatNeedsToBeParsed);
                  }
              }
              toBeParsed.clear();
              toBeParsed.addAll(parsable.getToBeParsed());
          }
          return parsable;
      }
docs: --------------------------------------------