code: public AnalyzedSentence copy(AnalyzedSentence sentence) {
      AnalyzedTokenReadings[] copyTokens = new AnalyzedTokenReadings[sentence.getTokens().length];
      for (int i = 0; i < copyTokens.length; i++) {
        AnalyzedTokenReadings analyzedTokens = sentence.getTokens()[i];
        copyTokens[i] = new AnalyzedTokenReadings(analyzedTokens.getReadings(), analyzedTokens.getStartPos());
        copyTokens[i].setHistoricalAnnotations(analyzedTokens.getHistoricalAnnotations());
        copyTokens[i].setChunkTags(analyzedTokens.getChunkTags());
        if (analyzedTokens.isImmunized()) {
          copyTokens[i].immunize();
        }
        if (analyzedTokens.isIgnoredBySpeller()) {
          copyTokens[i].ignoreSpelling();
        }
        copyTokens[i].setWhitespaceBefore(sentence.getTokens()[i].isWhitespaceBefore());
      }
      return new AnalyzedSentence(copyTokens, sentence.whPositions, sentence.getTokensWithoutWhitespace(), sentence.getPreDisambigTokensWithoutWhitespace());
    }
docs: The method copies {@link AnalyzedSentence} and returns the copy.
  Useful for performing local immunization (for example).
  
  @param sentence {@link AnalyzedSentence} to be copied
  @return a new object which is a copy
  @since  2.5