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!');