Index: pkg/compiler/lib/src/io/source_information.dart |
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart |
index c0e6e0a80d5f316b95036be267b685d710a6dc01..c238268db6ffb80ed9d94f8dd7bab46f06ffa7c6 100644 |
--- a/pkg/compiler/lib/src/io/source_information.dart |
+++ b/pkg/compiler/lib/src/io/source_information.dart |
@@ -23,13 +23,13 @@ abstract class SourceInformation extends JavaScriptNodeSourceInformation { |
/// Source information that contains start source position and optionally an |
/// end source position. |
class StartEndSourceInformation implements SourceInformation { |
- final SourceFileLocation startPosition; |
- final SourceFileLocation endPosition; |
+ final SourceLocation startPosition; |
+ final SourceLocation endPosition; |
StartEndSourceInformation(this.startPosition, [this.endPosition]); |
SourceSpan get sourceSpan { |
- Uri uri = Uri.parse(startPosition.sourceFile.filename); |
+ Uri uri = startPosition.sourceUri; |
int begin = startPosition.offset; |
int end = endPosition == null ? begin : endPosition.offset; |
return new SourceSpan(uri, begin, end); |
@@ -80,85 +80,87 @@ class StartEndSourceInformation implements SourceInformation { |
} |
// TODO(podivilov): find the right sourceFile here and remove offset |
// checks below. |
- SourceFileLocation sourcePosition, endSourcePosition; |
+ SourceLocation sourcePosition, endSourcePosition; |
if (beginToken.charOffset < sourceFile.length) { |
sourcePosition = |
- new TokenSourceFileLocation(sourceFile, beginToken, name); |
+ new TokenSourceLocation(sourceFile, beginToken, name); |
} |
if (endToken.charOffset < sourceFile.length) { |
endSourcePosition = |
- new TokenSourceFileLocation(sourceFile, endToken, name); |
+ new TokenSourceLocation(sourceFile, endToken, name); |
} |
return new StartEndSourceInformation(sourcePosition, endSourcePosition); |
} |
String toString() { |
StringBuffer sb = new StringBuffer(); |
- sb.write('${startPosition.getSourceUrl()}:'); |
- sb.write('[${startPosition.getLine()},${startPosition.getColumn()}]'); |
+ sb.write('${startPosition.sourceUri}:'); |
+ sb.write('[${startPosition.line},${startPosition.column}]'); |
if (endPosition != null) { |
- sb.write('-[${endPosition.getLine()},${endPosition.getColumn()}]'); |
+ sb.write('-[${endPosition.line},${endPosition.column}]'); |
} |
return sb.toString(); |
} |
} |
-// TODO(johnniwinther): Refactor this class to use getters. |
-abstract class SourceFileLocation { |
- SourceFile sourceFile; |
+/// A location in a source file. |
+abstract class SourceLocation { |
+ final SourceFile _sourceFile; |
+ int _line; |
- SourceFileLocation(this.sourceFile) { |
- assert(isValid()); |
+ SourceLocation(this._sourceFile) { |
+ assert(isValid); |
} |
- int line; |
+ /// The absolute URI of the source file of this source location. |
+ Uri get sourceUri => _sourceFile.uri; |
+ /// The character offset of the this source location into the source file. |
int get offset; |
- String getSourceUrl() => sourceFile.filename; |
- |
- int getLine() { |
- if (line == null) line = sourceFile.getLine(offset); |
- return line; |
+ /// The 0-based line number of the [offset]. |
+ int get line { |
+ if (_line == null) _line = _sourceFile.getLine(offset); |
+ return _line; |
} |
- int getColumn() => sourceFile.getColumn(getLine(), offset); |
+ /// The 0-base column number of the [offset] with its line. |
+ int get column => _sourceFile.getColumn(line, offset); |
- String getSourceName(); |
+ /// The name associated with this source location, if any. |
+ String get sourceName; |
- bool isValid() => offset < sourceFile.length; |
+ /// `true` if the offset within the length of the source file. |
+ bool get isValid => offset < _sourceFile.length; |
int get hashCode { |
- return getSourceUrl().hashCode * 17 + |
+ return sourceUri.hashCode * 17 + |
offset.hashCode * 17 + |
- getSourceName().hashCode * 23; |
+ sourceName.hashCode * 23; |
} |
bool operator ==(other) { |
if (identical(this, other)) return true; |
- if (other is! SourceFileLocation) return false; |
- return getSourceUrl() == other.getSourceUrl() && |
+ if (other is! SourceLocation) return false; |
+ return sourceUri == other.sourceUri && |
offset == other.offset && |
- getSourceName() == other.getSourceName(); |
+ sourceName == other.sourceName; |
} |
- String toString() => '${getSourceUrl()}:[${getLine()},${getColumn()}]'; |
+ String toString() => '${sourceUri}:[${line},${column}]'; |
} |
-class TokenSourceFileLocation extends SourceFileLocation { |
+class TokenSourceLocation extends SourceLocation { |
final Token token; |
- final String name; |
+ final String sourceName; |
- TokenSourceFileLocation(SourceFile sourceFile, this.token, this.name) |
+ TokenSourceLocation(SourceFile sourceFile, this.token, this.sourceName) |
: super(sourceFile); |
+ @override |
int get offset => token.charOffset; |
- String getSourceName() { |
- return name; |
- } |
- |
String toString() { |
- return '${super.toString()}:$name'; |
+ return '${super.toString()}:$sourceName'; |
} |
} |