class BazaarAnnotationParser implements Executor.StreamHandler {

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

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

    /**
     * Pattern used to extract author/revision.
     */
    private static final Pattern BLAME_PATTERN = Pattern.compile("^\\W*(\\S+)\\W+(\\S+).*$");

    private final String fileName;

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

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

    @Override
    public void processStream(InputStream input) throws IOException {<FILL_FUNCTION_BODY>}
}

        try (BufferedReader in = new BufferedReader(new InputStreamReader(input))) {
            String line = "";
            int lineno = 0;
            Matcher matcher = BLAME_PATTERN.matcher(line);
            while ((line = in.readLine()) != null) {
                ++lineno;
                matcher.reset(line);
                if (matcher.find()) {
                    String rev = matcher.group(1);
                    String author = matcher.group(2).trim();
                    annotation.addLine(rev, author, true);
                } else {
                    LOGGER.log(Level.WARNING,
                            "Error: did not find annotation in line {0} for ''{1}'': [{2}]",
                            new Object[]{String.valueOf(lineno), this.fileName, line});
                }
            }
        }
    
<no_super_class>