public FST<T> finish() throws IOException {
  final UnCompiledNode<T> root=frontier[0];
  freezeTail(0);
  if (root.inputCount < minSuffixCount1 || root.inputCount < minSuffixCount2 || root.numArcs == 0) {
    if (fst.emptyOutput == null) {
      return null;
    }
 else     if (minSuffixCount1 > 0 || minSuffixCount2 > 0) {
      return null;
    }
  }
 else {
    if (minSuffixCount2 != 0) {
      compileAllTargets(root,lastInput.length());
    }
  }
  fst.finish(compileNode(root,lastInput.length()).node);
  if (doPackFST) {
    return fst.pack(this,3,Math.max(10,(int)(getNodeCount() / 4)),acceptableOverheadRatio);
  }
 else {
    return fst;
  }
}

public FST < T > finish ( ) throws IOException { final UnCompiledNode < T > root = frontier [ 0 ] ; freezeTail ( 0 ) ; if ( root . inputCount < minSuffixCount1 || root . inputCount < minSuffixCount2 || root . numArcs == 0 ) { if ( fst . emptyOutput == null ) { return null ; } else if ( minSuffixCount1 > 0 || minSuffixCount2 > 0 ) { return null ; } } else { if ( minSuffixCount2 != 0 ) { compileAllTargets ( root , lastInput . length ( ) ) ; } } fst . finish ( compileNode ( root , lastInput . length ( ) ) . node ) ; if ( doPackFST ) { return fst . pack ( this , 3 , Math . max ( 10 , ( int ) ( getNodeCount ( ) / 4 ) ) , acceptableOverheadRatio ) ; } else { return fst ; } }
returns final fst . note : this will return null if nothing is accepted by the fst .
