@Override
  public ProductMessage onVersionMessage(List<Message> messages) throws ParseException {
    VersionMessage version = Messages.getVersionMessage(messages);
    if (!version.getLanguage().equals(JAVA)) {
      throw new IllegalArgumentException("wrong language in version message");
    }
    ProductMessage ast = Messages.getProductMessage(messages, AST, JAVA);
    if (!ast.getLanguage().equals(JAVA)) {
      throw new IllegalArgumentException("wrong language in ast product message");
    }
    NonTerminal root = (NonTerminal) ASTs.decode(ast);

    OutlineTrimmer trimmer = new OutlineTrimmer();
    root.accept(trimmer);

    return new ProductMessage(
        version.getVersionId(),
        new LongKey(1),
        version.getSource(),
        OUTLINE,
        JAVA,
        Outlines.encode(trimmer.getConverted()),
        new ProductDependency(ast));
  }