Linter Demo Errors: 1Warnings: 4File: /home/fstrocco/Dart/dart/benchmark/compiler/lib/src/io/line_column_provider.dart // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. library dart2js.io.line_column; import 'code_output.dart'; /// Interface for providing line/column information. abstract class LineColumnProvider { /// Returns the line number (0-based) for [offset]. int getLine(int offset); /// Returns the column number (0-based) for [offset] at the given [line]. int getColumn(int line, int offset); } /// [CodeOutputListener] that collects line information. class LineColumnCollector extends CodeOutputListener implements LineColumnProvider { int length = 0; List lineStarts = [0]; void _collect(String text) { int index = 0; while (index < text.length) { // Unix uses '\n' and Windows uses '\r\n', so this algorithm works for // both platforms. index = text.indexOf('\n', index) + 1; if (index <= 0) break; lineStarts.add(length + index); } length += text.length; } @override void onText(String text) { _collect(text); } @override int getLine(int offset) { List starts = lineStarts; if (offset < 0 || starts.last <= offset) { throw 'bad position #$offset in buffer with length ${length}.'; } int first = 0; int count = starts.length; while (count > 1) { int step = count ~/ 2; int middle = first + step; int lineStart = starts[middle]; if (offset < lineStart) { count = step; } else { first = middle; count -= step; } } return first; } @override int getColumn(int line, int offset) { return offset - lineStarts[line]; } @override void onDone(int length) { lineStarts.add(length + 1); this.length = length; } String toString() { return 'lineStarts=$lineStarts,length=$length'; } }