class BitKeeperAnnotationParser implements Executor.StreamHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(BitKeeperAnnotationParser.class);

    /**
     * Store annotation created by processStream.
     */
    private final Annotation annotation;

    /**
     * @param fileName the name of the file being annotated
     */
    public BitKeeperAnnotationParser(String fileName) {
        annotation = new Annotation(fileName);
    }

    /**
     * Returns the annotation that has been created.
     *
     * @return annotation an annotation object
     */
    public Annotation getAnnotation() {
        return annotation;
    }

    /**
     * Process the output of a {@code bk annotate} command.
     *
     * Each input line should be in the following format:
     *   USER\tREVISION\tTEXT
     *
     * @param input the executor input stream
     * @throws IOException if the stream reader throws an IOException
     */
    @Override
    public void processStream(InputStream input) throws IOException {<FILL_FUNCTION_BODY>}
}

        final BufferedReader in = new BufferedReader(new InputStreamReader(input));
        for (String line = in.readLine(); line != null; line = in.readLine()) {
            final String[] fields = line.split("\t");
            if (fields.length >= 2) {
                final String author = fields[0];
                final String rev = fields[1];
                annotation.addLine(rev, author, true);
            } else {
                LOGGER.log(Level.SEVERE, "Error: malformed BitKeeper annotate output {0}", line);
            }
        }
    
<no_super_class>