class AccuRevAnnotationParser implements Executor.StreamHandler {

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

    private static final Pattern ANNOTATION_PATTERN
            = Pattern.compile("^\\s+(\\d+.\\d+)\\s+(\\w+)");   // version, user

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

    private final String fileName;

    /**
     * @param fileName the name of the file being annotated
     */
    public AccuRevAnnotationParser(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 reader
                = new BufferedReader(new InputStreamReader(input))) {
            String line;
            int lineno = 0;
            try {
                while ((line = reader.readLine()) != null) {
                    ++lineno;
                    Matcher matcher = ANNOTATION_PATTERN.matcher(line);

                    if (matcher.find()) {
                        // On Windows machines version shows up as
                        // <number>\<number>. To get search annotation
                        // to work properly, need to flip '\' to '/'.
                        // This is a noop on Unix boxes.
                        String version = matcher.group(1).replace('\\', '/');
                        String author  = matcher.group(2);
                        annotation.addLine(version, author, true);
                    } else {
                        LOGGER.log(Level.WARNING,
                                "Did not find annotation in line {0} for ''{1}'': [{2}]",
                                new Object[]{lineno, this.fileName, line});
                    }
                }
            } catch (IOException e) {
                LOGGER.log(Level.WARNING,
                        String.format("Could not read annotations for '%s'", this.fileName), e);
            }
        }
    
<no_super_class>