Fix parseString: ensure that CompilationUnit.lineInfo is set properly.
Change-Id: Id81338c1021f9548f2c3f24931baf1e45ac1b18b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106320
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/dart/analysis/utilities.dart b/pkg/analyzer/lib/dart/analysis/utilities.dart
index cd3210e..7b96945 100644
--- a/pkg/analyzer/lib/dart/analysis/utilities.dart
+++ b/pkg/analyzer/lib/dart/analysis/utilities.dart
@@ -55,8 +55,9 @@
var token = scanner.tokenize();
var parser = Parser(source, errorCollector, featureSet: scanner.featureSet);
var unit = parser.parseCompilationUnit(token);
- ParseStringResult result = ParseStringResultImpl(
- content, LineInfo(scanner.lineStarts), unit, errorCollector.errors);
+ unit.lineInfo = LineInfo(scanner.lineStarts);
+ ParseStringResult result =
+ ParseStringResultImpl(content, unit, errorCollector.errors);
if (throwIfDiagnostics && result.errors.isNotEmpty) {
throw new ArgumentError('Content produced diagnostics when parsed');
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index adfe2ea..e14ef3f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -171,12 +171,12 @@
final List<AnalysisError> errors;
@override
- final LineInfo lineInfo;
-
- @override
final CompilationUnit unit;
- ParseStringResultImpl(this.content, this.lineInfo, this.unit, this.errors);
+ ParseStringResultImpl(this.content, this.unit, this.errors);
+
+ @override
+ LineInfo get lineInfo => unit.lineInfo;
}
class ResolvedLibraryResultImpl extends AnalysisResultImpl
diff --git a/pkg/analyzer/test/dart/analysis/utilities_test.dart b/pkg/analyzer/test/dart/analysis/utilities_test.dart
index 8240940..1aebc1fe8 100644
--- a/pkg/analyzer/test/dart/analysis/utilities_test.dart
+++ b/pkg/analyzer/test/dart/analysis/utilities_test.dart
@@ -66,6 +66,17 @@
expect(result.unit.toString(), equals('int? f() => 1;'));
}
+ test_parseString_lineInfo() {
+ String content = '''
+main() {
+ print('Hello, world!');
+}
+''';
+ ParseStringResult result = parseString(content: content);
+ expect(result.lineInfo, same(result.unit.lineInfo));
+ expect(result.lineInfo.lineStarts, [0, 9, 35, 37]);
+ }
+
test_parseString_noErrors() {
String content = '''
void main() => print('Hello, world!');