Add URL, correction, and diagnostic messages to AnalysisIssue messages (#663)

diff --git a/lib/src/analysis_server.dart b/lib/src/analysis_server.dart
index 3d2f0d0..6570eec 100644
--- a/lib/src/analysis_server.dart
+++ b/lib/src/analysis_server.dart
@@ -321,14 +321,24 @@
 
       // Calculate the issues.
       final issues = getErrors().map((AnalysisError error) {
-        return proto.AnalysisIssue()
+        final issue = proto.AnalysisIssue()
           ..kind = error.severity.toLowerCase()
           ..line = error.location.startLine
           ..message = error.message
           ..sourceName = path.basename(error.location.file)
           ..hasFixes = error.hasFix
           ..charStart = error.location.offset
-          ..charLength = error.location.length;
+          ..charLength = error.location.length
+          ..diagnosticMessages.addAll(error.contextMessages?.map((m) =>
+                  proto.DiagnosticMessage(
+                      message: m.message,
+                      line: m.location.startLine,
+                      charStart: m.location.offset,
+                      charLength: m.location.length)) ??
+              []);
+        if (error.url != null) issue.url = error.url;
+        if (error.correction != null) issue.correction = error.correction;
+        return issue;
       }).toList();
 
       issues.sort((a, b) {
diff --git a/lib/src/protos/dart_services.pb.dart b/lib/src/protos/dart_services.pb.dart
index f718157..2b930c3 100644
--- a/lib/src/protos/dart_services.pb.dart
+++ b/lib/src/protos/dart_services.pb.dart
@@ -60,8 +60,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   CompileRequest copyWith(void Function(CompileRequest) updates) =>
-      super.copyWith((message) =>
-          updates(message as CompileRequest)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as CompileRequest))
+          as CompileRequest; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static CompileRequest create() => CompileRequest._();
@@ -139,8 +139,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   CompileDDCRequest copyWith(void Function(CompileDDCRequest) updates) =>
-      super.copyWith((message) => updates(
-          message as CompileDDCRequest)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as CompileDDCRequest))
+          as CompileDDCRequest; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static CompileDDCRequest create() => CompileDDCRequest._();
@@ -216,8 +216,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   SourceRequest copyWith(void Function(SourceRequest) updates) =>
-      super.copyWith((message) =>
-          updates(message as SourceRequest)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as SourceRequest))
+          as SourceRequest; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static SourceRequest create() => SourceRequest._();
@@ -306,8 +306,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   AnalysisResults copyWith(void Function(AnalysisResults) updates) =>
-      super.copyWith((message) =>
-          updates(message as AnalysisResults)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as AnalysisResults))
+          as AnalysisResults; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static AnalysisResults create() => AnalysisResults._();
@@ -370,6 +370,9 @@
     ..aOB(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'hasFixes', protoName: 'hasFixes')
     ..a<$core.int>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'charStart', $pb.PbFieldType.O3, protoName: 'charStart')
     ..a<$core.int>(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'charLength', $pb.PbFieldType.O3, protoName: 'charLength')
+    ..aOS(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'url')
+    ..pc<DiagnosticMessage>(9, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'diagnosticMessages', $pb.PbFieldType.PM, protoName: 'diagnosticMessages', subBuilder: DiagnosticMessage.create)
+    ..aOS(10, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'correction')
     ..hasRequiredFields = false;
 
   AnalysisIssue._() : super();
@@ -381,6 +384,9 @@
     $core.bool hasFixes,
     $core.int charStart,
     $core.int charLength,
+    $core.String url,
+    $core.Iterable<DiagnosticMessage> diagnosticMessages,
+    $core.String correction,
   }) {
     final _result = create();
     if (kind != null) {
@@ -404,6 +410,15 @@
     if (charLength != null) {
       _result.charLength = charLength;
     }
+    if (url != null) {
+      _result.url = url;
+    }
+    if (diagnosticMessages != null) {
+      _result.diagnosticMessages.addAll(diagnosticMessages);
+    }
+    if (correction != null) {
+      _result.correction = correction;
+    }
     return _result;
   }
   factory AnalysisIssue.fromBuffer($core.List<$core.int> i,
@@ -420,8 +435,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   AnalysisIssue copyWith(void Function(AnalysisIssue) updates) =>
-      super.copyWith((message) =>
-          updates(message as AnalysisIssue)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as AnalysisIssue))
+          as AnalysisIssue; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static AnalysisIssue create() => AnalysisIssue._();
@@ -516,6 +531,159 @@
   $core.bool hasCharLength() => $_has(6);
   @$pb.TagNumber(7)
   void clearCharLength() => clearField(7);
+
+  @$pb.TagNumber(8)
+  $core.String get url => $_getSZ(7);
+  @$pb.TagNumber(8)
+  set url($core.String v) {
+    $_setString(7, v);
+  }
+
+  @$pb.TagNumber(8)
+  $core.bool hasUrl() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearUrl() => clearField(8);
+
+  @$pb.TagNumber(9)
+  $core.List<DiagnosticMessage> get diagnosticMessages => $_getList(8);
+
+  @$pb.TagNumber(10)
+  $core.String get correction => $_getSZ(9);
+  @$pb.TagNumber(10)
+  set correction($core.String v) {
+    $_setString(9, v);
+  }
+
+  @$pb.TagNumber(10)
+  $core.bool hasCorrection() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearCorrection() => clearField(10);
+}
+
+class DiagnosticMessage extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      const $core.bool.fromEnvironment('protobuf.omit_message_names')
+          ? ''
+          : 'DiagnosticMessage',
+      package: const $pb.PackageName(
+          $core.bool.fromEnvironment('protobuf.omit_message_names')
+              ? ''
+              : 'dart_services.api'),
+      createEmptyInstance: create)
+    ..aOS(
+        1,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'message')
+    ..a<$core.int>(
+        2,
+        const $core.bool.fromEnvironment('protobuf.omit_field_names')
+            ? ''
+            : 'line',
+        $pb.PbFieldType.O3)
+    ..a<$core.int>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'charStart', $pb.PbFieldType.O3,
+        protoName: 'charStart')
+    ..a<$core.int>(
+        4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'charLength', $pb.PbFieldType.O3,
+        protoName: 'charLength')
+    ..hasRequiredFields = false;
+
+  DiagnosticMessage._() : super();
+  factory DiagnosticMessage({
+    $core.String message,
+    $core.int line,
+    $core.int charStart,
+    $core.int charLength,
+  }) {
+    final _result = create();
+    if (message != null) {
+      _result.message = message;
+    }
+    if (line != null) {
+      _result.line = line;
+    }
+    if (charStart != null) {
+      _result.charStart = charStart;
+    }
+    if (charLength != null) {
+      _result.charLength = charLength;
+    }
+    return _result;
+  }
+  factory DiagnosticMessage.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory DiagnosticMessage.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+      'Will be removed in next major version')
+  DiagnosticMessage clone() => DiagnosticMessage()..mergeFromMessage(this);
+  @$core.Deprecated('Using this can add significant overhead to your binary. '
+      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+      'Will be removed in next major version')
+  DiagnosticMessage copyWith(void Function(DiagnosticMessage) updates) =>
+      super.copyWith((message) => updates(message as DiagnosticMessage))
+          as DiagnosticMessage; // ignore: deprecated_member_use
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static DiagnosticMessage create() => DiagnosticMessage._();
+  DiagnosticMessage createEmptyInstance() => create();
+  static $pb.PbList<DiagnosticMessage> createRepeated() =>
+      $pb.PbList<DiagnosticMessage>();
+  @$core.pragma('dart2js:noInline')
+  static DiagnosticMessage getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<DiagnosticMessage>(create);
+  static DiagnosticMessage _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get message => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set message($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasMessage() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearMessage() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get line => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set line($core.int v) {
+    $_setSignedInt32(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasLine() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearLine() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get charStart => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set charStart($core.int v) {
+    $_setSignedInt32(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasCharStart() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearCharStart() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.int get charLength => $_getIZ(3);
+  @$pb.TagNumber(4)
+  set charLength($core.int v) {
+    $_setSignedInt32(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasCharLength() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCharLength() => clearField(4);
 }
 
 class VersionRequest extends $pb.GeneratedMessage {
@@ -546,8 +714,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   VersionRequest copyWith(void Function(VersionRequest) updates) =>
-      super.copyWith((message) =>
-          updates(message as VersionRequest)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as VersionRequest))
+          as VersionRequest; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static VersionRequest create() => VersionRequest._();
@@ -617,8 +785,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   CompileResponse copyWith(void Function(CompileResponse) updates) =>
-      super.copyWith((message) =>
-          updates(message as CompileResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as CompileResponse))
+          as CompileResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static CompileResponse create() => CompileResponse._();
@@ -726,8 +894,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   CompileDDCResponse copyWith(void Function(CompileDDCResponse) updates) =>
-      super.copyWith((message) => updates(
-          message as CompileDDCResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as CompileDDCResponse))
+          as CompileDDCResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static CompileDDCResponse create() => CompileDDCResponse._();
@@ -830,8 +998,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   DocumentResponse copyWith(void Function(DocumentResponse) updates) =>
-      super.copyWith((message) => updates(
-          message as DocumentResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as DocumentResponse))
+          as DocumentResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static DocumentResponse create() => DocumentResponse._();
@@ -919,8 +1087,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   CompleteResponse copyWith(void Function(CompleteResponse) updates) =>
-      super.copyWith((message) => updates(
-          message as CompleteResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as CompleteResponse))
+          as CompleteResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static CompleteResponse create() => CompleteResponse._();
@@ -1019,8 +1187,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   Completion copyWith(void Function(Completion) updates) =>
-      super.copyWith((message) =>
-          updates(message as Completion)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as Completion))
+          as Completion; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static Completion create() => Completion._();
@@ -1085,8 +1253,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   FixesResponse copyWith(void Function(FixesResponse) updates) =>
-      super.copyWith((message) =>
-          updates(message as FixesResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as FixesResponse))
+          as FixesResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static FixesResponse create() => FixesResponse._();
@@ -1175,8 +1343,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   ProblemAndFixes copyWith(void Function(ProblemAndFixes) updates) =>
-      super.copyWith((message) =>
-          updates(message as ProblemAndFixes)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as ProblemAndFixes))
+          as ProblemAndFixes; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static ProblemAndFixes create() => ProblemAndFixes._();
@@ -1290,8 +1458,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   CandidateFix copyWith(void Function(CandidateFix) updates) =>
-      super.copyWith((message) =>
-          updates(message as CandidateFix)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as CandidateFix))
+          as CandidateFix; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static CandidateFix create() => CandidateFix._();
@@ -1392,8 +1560,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   SourceEdit copyWith(void Function(SourceEdit) updates) =>
-      super.copyWith((message) =>
-          updates(message as SourceEdit)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as SourceEdit))
+          as SourceEdit; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static SourceEdit create() => SourceEdit._();
@@ -1501,8 +1669,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   LinkedEditGroup copyWith(void Function(LinkedEditGroup) updates) =>
-      super.copyWith((message) =>
-          updates(message as LinkedEditGroup)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as LinkedEditGroup))
+          as LinkedEditGroup; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static LinkedEditGroup create() => LinkedEditGroup._();
@@ -1584,8 +1752,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   LinkedEditSuggestion copyWith(void Function(LinkedEditSuggestion) updates) =>
-      super.copyWith((message) => updates(
-          message as LinkedEditSuggestion)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as LinkedEditSuggestion))
+          as LinkedEditSuggestion; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static LinkedEditSuggestion create() => LinkedEditSuggestion._();
@@ -1678,8 +1846,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   FormatResponse copyWith(void Function(FormatResponse) updates) =>
-      super.copyWith((message) =>
-          updates(message as FormatResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as FormatResponse))
+          as FormatResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static FormatResponse create() => FormatResponse._();
@@ -1780,8 +1948,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   AssistsResponse copyWith(void Function(AssistsResponse) updates) =>
-      super.copyWith((message) =>
-          updates(message as AssistsResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as AssistsResponse))
+          as AssistsResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static AssistsResponse create() => AssistsResponse._();
@@ -1892,8 +2060,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   VersionResponse copyWith(void Function(VersionResponse) updates) =>
-      super.copyWith((message) =>
-          updates(message as VersionResponse)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as VersionResponse))
+          as VersionResponse; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static VersionResponse create() => VersionResponse._();
@@ -2058,8 +2226,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   BadRequest copyWith(void Function(BadRequest) updates) =>
-      super.copyWith((message) =>
-          updates(message as BadRequest)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as BadRequest))
+          as BadRequest; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static BadRequest create() => BadRequest._();
@@ -2126,8 +2294,8 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   ErrorMessage copyWith(void Function(ErrorMessage) updates) =>
-      super.copyWith((message) =>
-          updates(message as ErrorMessage)); // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as ErrorMessage))
+          as ErrorMessage; // ignore: deprecated_member_use
   $pb.BuilderInfo get info_ => _i;
   @$core.pragma('dart2js:noInline')
   static ErrorMessage create() => ErrorMessage._();
diff --git a/lib/src/protos/dart_services.pbjson.dart b/lib/src/protos/dart_services.pbjson.dart
index b85ece2..882922c 100644
--- a/lib/src/protos/dart_services.pbjson.dart
+++ b/lib/src/protos/dart_services.pbjson.dart
@@ -3,8 +3,13 @@
 //  source: protos/dart_services.proto
 //
 // @dart = 2.7
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
 
+import 'dart:core' as $core;
+import 'dart:convert' as $convert;
+import 'dart:typed_data' as $typed_data;
+
+@$core.Deprecated('Use compileRequestDescriptor instead')
 const CompileRequest$json = {
   '1': 'CompileRequest',
   '2': [
@@ -13,6 +18,10 @@
   ],
 };
 
+/// Descriptor for `CompileRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List compileRequestDescriptor = $convert.base64Decode(
+    'Cg5Db21waWxlUmVxdWVzdBIWCgZzb3VyY2UYASABKAlSBnNvdXJjZRIoCg9yZXR1cm5Tb3VyY2VNYXAYAiABKAhSD3JldHVyblNvdXJjZU1hcA==');
+@$core.Deprecated('Use compileDDCRequestDescriptor instead')
 const CompileDDCRequest$json = {
   '1': 'CompileDDCRequest',
   '2': [
@@ -20,6 +29,10 @@
   ],
 };
 
+/// Descriptor for `CompileDDCRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List compileDDCRequestDescriptor = $convert.base64Decode(
+    'ChFDb21waWxlRERDUmVxdWVzdBIWCgZzb3VyY2UYASABKAlSBnNvdXJjZQ==');
+@$core.Deprecated('Use sourceRequestDescriptor instead')
 const SourceRequest$json = {
   '1': 'SourceRequest',
   '2': [
@@ -28,6 +41,10 @@
   ],
 };
 
+/// Descriptor for `SourceRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List sourceRequestDescriptor = $convert.base64Decode(
+    'Cg1Tb3VyY2VSZXF1ZXN0EhYKBnNvdXJjZRgBIAEoCVIGc291cmNlEhYKBm9mZnNldBgCIAEoBVIGb2Zmc2V0');
+@$core.Deprecated('Use analysisResultsDescriptor instead')
 const AnalysisResults$json = {
   '1': 'AnalysisResults',
   '2': [
@@ -51,6 +68,10 @@
   ],
 };
 
+/// Descriptor for `AnalysisResults`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List analysisResultsDescriptor = $convert.base64Decode(
+    'Cg9BbmFseXNpc1Jlc3VsdHMSOAoGaXNzdWVzGAEgAygLMiAuZGFydF9zZXJ2aWNlcy5hcGkuQW5hbHlzaXNJc3N1ZVIGaXNzdWVzEiYKDnBhY2thZ2VJbXBvcnRzGAIgAygJUg5wYWNrYWdlSW1wb3J0cxI1CgVlcnJvchhjIAEoCzIfLmRhcnRfc2VydmljZXMuYXBpLkVycm9yTWVzc2FnZVIFZXJyb3I=');
+@$core.Deprecated('Use analysisIssueDescriptor instead')
 const AnalysisIssue$json = {
   '1': 'AnalysisIssue',
   '2': [
@@ -61,13 +82,45 @@
     {'1': 'hasFixes', '3': 5, '4': 1, '5': 8, '10': 'hasFixes'},
     {'1': 'charStart', '3': 6, '4': 1, '5': 5, '10': 'charStart'},
     {'1': 'charLength', '3': 7, '4': 1, '5': 5, '10': 'charLength'},
+    {'1': 'url', '3': 8, '4': 1, '5': 9, '10': 'url'},
+    {
+      '1': 'diagnosticMessages',
+      '3': 9,
+      '4': 3,
+      '5': 11,
+      '6': '.dart_services.api.DiagnosticMessage',
+      '10': 'diagnosticMessages'
+    },
+    {'1': 'correction', '3': 10, '4': 1, '5': 9, '10': 'correction'},
   ],
 };
 
+/// Descriptor for `AnalysisIssue`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List analysisIssueDescriptor = $convert.base64Decode(
+    'Cg1BbmFseXNpc0lzc3VlEhIKBGtpbmQYASABKAlSBGtpbmQSEgoEbGluZRgCIAEoBVIEbGluZRIYCgdtZXNzYWdlGAMgASgJUgdtZXNzYWdlEh4KCnNvdXJjZU5hbWUYBCABKAlSCnNvdXJjZU5hbWUSGgoIaGFzRml4ZXMYBSABKAhSCGhhc0ZpeGVzEhwKCWNoYXJTdGFydBgGIAEoBVIJY2hhclN0YXJ0Eh4KCmNoYXJMZW5ndGgYByABKAVSCmNoYXJMZW5ndGgSEAoDdXJsGAggASgJUgN1cmwSVAoSZGlhZ25vc3RpY01lc3NhZ2VzGAkgAygLMiQuZGFydF9zZXJ2aWNlcy5hcGkuRGlhZ25vc3RpY01lc3NhZ2VSEmRpYWdub3N0aWNNZXNzYWdlcxIeCgpjb3JyZWN0aW9uGAogASgJUgpjb3JyZWN0aW9u');
+@$core.Deprecated('Use diagnosticMessageDescriptor instead')
+const DiagnosticMessage$json = {
+  '1': 'DiagnosticMessage',
+  '2': [
+    {'1': 'message', '3': 1, '4': 1, '5': 9, '10': 'message'},
+    {'1': 'line', '3': 2, '4': 1, '5': 5, '10': 'line'},
+    {'1': 'charStart', '3': 3, '4': 1, '5': 5, '10': 'charStart'},
+    {'1': 'charLength', '3': 4, '4': 1, '5': 5, '10': 'charLength'},
+  ],
+};
+
+/// Descriptor for `DiagnosticMessage`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List diagnosticMessageDescriptor = $convert.base64Decode(
+    'ChFEaWFnbm9zdGljTWVzc2FnZRIYCgdtZXNzYWdlGAEgASgJUgdtZXNzYWdlEhIKBGxpbmUYAiABKAVSBGxpbmUSHAoJY2hhclN0YXJ0GAMgASgFUgljaGFyU3RhcnQSHgoKY2hhckxlbmd0aBgEIAEoBVIKY2hhckxlbmd0aA==');
+@$core.Deprecated('Use versionRequestDescriptor instead')
 const VersionRequest$json = {
   '1': 'VersionRequest',
 };
 
+/// Descriptor for `VersionRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List versionRequestDescriptor =
+    $convert.base64Decode('Cg5WZXJzaW9uUmVxdWVzdA==');
+@$core.Deprecated('Use compileResponseDescriptor instead')
 const CompileResponse$json = {
   '1': 'CompileResponse',
   '2': [
@@ -84,6 +137,10 @@
   ],
 };
 
+/// Descriptor for `CompileResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List compileResponseDescriptor = $convert.base64Decode(
+    'Cg9Db21waWxlUmVzcG9uc2USFgoGcmVzdWx0GAEgASgJUgZyZXN1bHQSHAoJc291cmNlTWFwGAIgASgJUglzb3VyY2VNYXASNQoFZXJyb3IYYyABKAsyHy5kYXJ0X3NlcnZpY2VzLmFwaS5FcnJvck1lc3NhZ2VSBWVycm9y');
+@$core.Deprecated('Use compileDDCResponseDescriptor instead')
 const CompileDDCResponse$json = {
   '1': 'CompileDDCResponse',
   '2': [
@@ -100,6 +157,10 @@
   ],
 };
 
+/// Descriptor for `CompileDDCResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List compileDDCResponseDescriptor = $convert.base64Decode(
+    'ChJDb21waWxlRERDUmVzcG9uc2USFgoGcmVzdWx0GAEgASgJUgZyZXN1bHQSJgoObW9kdWxlc0Jhc2VVcmwYAiABKAlSDm1vZHVsZXNCYXNlVXJsEjUKBWVycm9yGGMgASgLMh8uZGFydF9zZXJ2aWNlcy5hcGkuRXJyb3JNZXNzYWdlUgVlcnJvcg==');
+@$core.Deprecated('Use documentResponseDescriptor instead')
 const DocumentResponse$json = {
   '1': 'DocumentResponse',
   '2': [
@@ -123,6 +184,7 @@
   '3': [DocumentResponse_InfoEntry$json],
 };
 
+@$core.Deprecated('Use documentResponseDescriptor instead')
 const DocumentResponse_InfoEntry$json = {
   '1': 'InfoEntry',
   '2': [
@@ -132,6 +194,10 @@
   '7': {'7': true},
 };
 
+/// Descriptor for `DocumentResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List documentResponseDescriptor = $convert.base64Decode(
+    'ChBEb2N1bWVudFJlc3BvbnNlEkEKBGluZm8YASADKAsyLS5kYXJ0X3NlcnZpY2VzLmFwaS5Eb2N1bWVudFJlc3BvbnNlLkluZm9FbnRyeVIEaW5mbxI1CgVlcnJvchhjIAEoCzIfLmRhcnRfc2VydmljZXMuYXBpLkVycm9yTWVzc2FnZVIFZXJyb3IaNwoJSW5mb0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAE=');
+@$core.Deprecated('Use completeResponseDescriptor instead')
 const CompleteResponse$json = {
   '1': 'CompleteResponse',
   '2': [
@@ -168,6 +234,10 @@
   ],
 };
 
+/// Descriptor for `CompleteResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List completeResponseDescriptor = $convert.base64Decode(
+    'ChBDb21wbGV0ZVJlc3BvbnNlEiwKEXJlcGxhY2VtZW50T2Zmc2V0GAEgASgFUhFyZXBsYWNlbWVudE9mZnNldBIsChFyZXBsYWNlbWVudExlbmd0aBgCIAEoBVIRcmVwbGFjZW1lbnRMZW5ndGgSPwoLY29tcGxldGlvbnMYAyADKAsyHS5kYXJ0X3NlcnZpY2VzLmFwaS5Db21wbGV0aW9uUgtjb21wbGV0aW9ucxI1CgVlcnJvchhjIAEoCzIfLmRhcnRfc2VydmljZXMuYXBpLkVycm9yTWVzc2FnZVIFZXJyb3I=');
+@$core.Deprecated('Use completionDescriptor instead')
 const Completion$json = {
   '1': 'Completion',
   '2': [
@@ -183,6 +253,7 @@
   '3': [Completion_CompletionEntry$json],
 };
 
+@$core.Deprecated('Use completionDescriptor instead')
 const Completion_CompletionEntry$json = {
   '1': 'CompletionEntry',
   '2': [
@@ -192,6 +263,10 @@
   '7': {'7': true},
 };
 
+/// Descriptor for `Completion`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List completionDescriptor = $convert.base64Decode(
+    'CgpDb21wbGV0aW9uEk0KCmNvbXBsZXRpb24YASADKAsyLS5kYXJ0X3NlcnZpY2VzLmFwaS5Db21wbGV0aW9uLkNvbXBsZXRpb25FbnRyeVIKY29tcGxldGlvbho9Cg9Db21wbGV0aW9uRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4AQ==');
+@$core.Deprecated('Use fixesResponseDescriptor instead')
 const FixesResponse$json = {
   '1': 'FixesResponse',
   '2': [
@@ -214,6 +289,10 @@
   ],
 };
 
+/// Descriptor for `FixesResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List fixesResponseDescriptor = $convert.base64Decode(
+    'Cg1GaXhlc1Jlc3BvbnNlEjgKBWZpeGVzGAEgAygLMiIuZGFydF9zZXJ2aWNlcy5hcGkuUHJvYmxlbUFuZEZpeGVzUgVmaXhlcxI1CgVlcnJvchhjIAEoCzIfLmRhcnRfc2VydmljZXMuYXBpLkVycm9yTWVzc2FnZVIFZXJyb3I=');
+@$core.Deprecated('Use problemAndFixesDescriptor instead')
 const ProblemAndFixes$json = {
   '1': 'ProblemAndFixes',
   '2': [
@@ -231,6 +310,10 @@
   ],
 };
 
+/// Descriptor for `ProblemAndFixes`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List problemAndFixesDescriptor = $convert.base64Decode(
+    'Cg9Qcm9ibGVtQW5kRml4ZXMSNQoFZml4ZXMYASADKAsyHy5kYXJ0X3NlcnZpY2VzLmFwaS5DYW5kaWRhdGVGaXhSBWZpeGVzEiYKDnByb2JsZW1NZXNzYWdlGAIgASgJUg5wcm9ibGVtTWVzc2FnZRIWCgZvZmZzZXQYAyABKAVSBm9mZnNldBIWCgZsZW5ndGgYBCABKAVSBmxlbmd0aA==');
+@$core.Deprecated('Use candidateFixDescriptor instead')
 const CandidateFix$json = {
   '1': 'CandidateFix',
   '2': [
@@ -255,6 +338,10 @@
   ],
 };
 
+/// Descriptor for `CandidateFix`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List candidateFixDescriptor = $convert.base64Decode(
+    'CgxDYW5kaWRhdGVGaXgSGAoHbWVzc2FnZRgBIAEoCVIHbWVzc2FnZRIzCgVlZGl0cxgCIAMoCzIdLmRhcnRfc2VydmljZXMuYXBpLlNvdXJjZUVkaXRSBWVkaXRzEigKD3NlbGVjdGlvbk9mZnNldBgDIAEoBVIPc2VsZWN0aW9uT2Zmc2V0Ek4KEGxpbmtlZEVkaXRHcm91cHMYBCADKAsyIi5kYXJ0X3NlcnZpY2VzLmFwaS5MaW5rZWRFZGl0R3JvdXBSEGxpbmtlZEVkaXRHcm91cHM=');
+@$core.Deprecated('Use sourceEditDescriptor instead')
 const SourceEdit$json = {
   '1': 'SourceEdit',
   '2': [
@@ -264,6 +351,10 @@
   ],
 };
 
+/// Descriptor for `SourceEdit`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List sourceEditDescriptor = $convert.base64Decode(
+    'CgpTb3VyY2VFZGl0EhYKBm9mZnNldBgBIAEoBVIGb2Zmc2V0EhYKBmxlbmd0aBgCIAEoBVIGbGVuZ3RoEiAKC3JlcGxhY2VtZW50GAMgASgJUgtyZXBsYWNlbWVudA==');
+@$core.Deprecated('Use linkedEditGroupDescriptor instead')
 const LinkedEditGroup$json = {
   '1': 'LinkedEditGroup',
   '2': [
@@ -280,6 +371,10 @@
   ],
 };
 
+/// Descriptor for `LinkedEditGroup`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List linkedEditGroupDescriptor = $convert.base64Decode(
+    'Cg9MaW5rZWRFZGl0R3JvdXASHAoJcG9zaXRpb25zGAEgAygFUglwb3NpdGlvbnMSFgoGbGVuZ3RoGAIgASgFUgZsZW5ndGgSSQoLc3VnZ2VzdGlvbnMYAyADKAsyJy5kYXJ0X3NlcnZpY2VzLmFwaS5MaW5rZWRFZGl0U3VnZ2VzdGlvblILc3VnZ2VzdGlvbnM=');
+@$core.Deprecated('Use linkedEditSuggestionDescriptor instead')
 const LinkedEditSuggestion$json = {
   '1': 'LinkedEditSuggestion',
   '2': [
@@ -288,6 +383,10 @@
   ],
 };
 
+/// Descriptor for `LinkedEditSuggestion`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List linkedEditSuggestionDescriptor = $convert.base64Decode(
+    'ChRMaW5rZWRFZGl0U3VnZ2VzdGlvbhIUCgV2YWx1ZRgBIAEoCVIFdmFsdWUSEgoEa2luZBgCIAEoCVIEa2luZA==');
+@$core.Deprecated('Use formatResponseDescriptor instead')
 const FormatResponse$json = {
   '1': 'FormatResponse',
   '2': [
@@ -304,6 +403,10 @@
   ],
 };
 
+/// Descriptor for `FormatResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List formatResponseDescriptor = $convert.base64Decode(
+    'Cg5Gb3JtYXRSZXNwb25zZRIcCgluZXdTdHJpbmcYASABKAlSCW5ld1N0cmluZxIWCgZvZmZzZXQYAiABKAVSBm9mZnNldBI1CgVlcnJvchhjIAEoCzIfLmRhcnRfc2VydmljZXMuYXBpLkVycm9yTWVzc2FnZVIFZXJyb3I=');
+@$core.Deprecated('Use assistsResponseDescriptor instead')
 const AssistsResponse$json = {
   '1': 'AssistsResponse',
   '2': [
@@ -326,6 +429,10 @@
   ],
 };
 
+/// Descriptor for `AssistsResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List assistsResponseDescriptor = $convert.base64Decode(
+    'Cg9Bc3Npc3RzUmVzcG9uc2USOQoHYXNzaXN0cxgBIAMoCzIfLmRhcnRfc2VydmljZXMuYXBpLkNhbmRpZGF0ZUZpeFIHYXNzaXN0cxI1CgVlcnJvchhjIAEoCzIfLmRhcnRfc2VydmljZXMuYXBpLkVycm9yTWVzc2FnZVIFZXJyb3I=');
+@$core.Deprecated('Use versionResponseDescriptor instead')
 const VersionResponse$json = {
   '1': 'VersionResponse',
   '2': [
@@ -360,6 +467,10 @@
   ],
 };
 
+/// Descriptor for `VersionResponse`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List versionResponseDescriptor = $convert.base64Decode(
+    'Cg9WZXJzaW9uUmVzcG9uc2USHgoKc2RrVmVyc2lvbhgBIAEoCVIKc2RrVmVyc2lvbhImCg5zZGtWZXJzaW9uRnVsbBgCIAEoCVIOc2RrVmVyc2lvbkZ1bGwSJgoOcnVudGltZVZlcnNpb24YAyABKAlSDnJ1bnRpbWVWZXJzaW9uEioKEGFwcEVuZ2luZVZlcnNpb24YBCABKAlSEGFwcEVuZ2luZVZlcnNpb24SKAoPc2VydmljZXNWZXJzaW9uGAUgASgJUg9zZXJ2aWNlc1ZlcnNpb24SJgoOZmx1dHRlclZlcnNpb24YBiABKAlSDmZsdXR0ZXJWZXJzaW9uEi4KEmZsdXR0ZXJEYXJ0VmVyc2lvbhgHIAEoCVISZmx1dHRlckRhcnRWZXJzaW9uEjYKFmZsdXR0ZXJEYXJ0VmVyc2lvbkZ1bGwYCCABKAlSFmZsdXR0ZXJEYXJ0VmVyc2lvbkZ1bGwSNQoFZXJyb3IYYyABKAsyHy5kYXJ0X3NlcnZpY2VzLmFwaS5FcnJvck1lc3NhZ2VSBWVycm9y');
+@$core.Deprecated('Use badRequestDescriptor instead')
 const BadRequest$json = {
   '1': 'BadRequest',
   '2': [
@@ -374,9 +485,17 @@
   ],
 };
 
+/// Descriptor for `BadRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List badRequestDescriptor = $convert.base64Decode(
+    'CgpCYWRSZXF1ZXN0EjUKBWVycm9yGGMgASgLMh8uZGFydF9zZXJ2aWNlcy5hcGkuRXJyb3JNZXNzYWdlUgVlcnJvcg==');
+@$core.Deprecated('Use errorMessageDescriptor instead')
 const ErrorMessage$json = {
   '1': 'ErrorMessage',
   '2': [
     {'1': 'message', '3': 1, '4': 1, '5': 9, '10': 'message'},
   ],
 };
+
+/// Descriptor for `ErrorMessage`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List errorMessageDescriptor = $convert
+    .base64Decode('CgxFcnJvck1lc3NhZ2USGAoHbWVzc2FnZRgBIAEoCVIHbWVzc2FnZQ==');
diff --git a/lib/src/protos/dart_services.pbserver.dart b/lib/src/protos/dart_services.pbserver.dart
index d9e5442..02254b5 100644
--- a/lib/src/protos/dart_services.pbserver.dart
+++ b/lib/src/protos/dart_services.pbserver.dart
@@ -3,6 +3,6 @@
 //  source: protos/dart_services.proto
 //
 // @dart = 2.7
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
 
 export 'dart_services.pb.dart';
diff --git a/protos/dart_services.proto b/protos/dart_services.proto
index aa20424..3625188 100644
--- a/protos/dart_services.proto
+++ b/protos/dart_services.proto
@@ -45,6 +45,16 @@
   bool hasFixes = 5;
   int32 charStart = 6;
   int32 charLength = 7;
+  string url = 8;
+  repeated DiagnosticMessage diagnosticMessages = 9;
+  string correction = 10;
+}
+
+message DiagnosticMessage {
+  string message = 1;
+  int32 line = 2;
+  int32 charStart = 3;
+  int32 charLength = 4;
 }
 
 message VersionRequest {}
diff --git a/pubspec.lock b/pubspec.lock
index cec5131..49961d8 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -56,7 +56,7 @@
       name: async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.5.0"
+    version: "2.4.2"
   bazel_worker:
     dependency: "direct main"
     description:
@@ -70,7 +70,7 @@
       name: boolean_selector
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0"
+    version: "2.0.0"
   build:
     dependency: transitive
     description:
@@ -133,7 +133,7 @@
       name: charcode
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.1.3"
   checked_yaml:
     dependency: transitive
     description:
@@ -148,13 +148,6 @@
       url: "https://pub.dartlang.org"
     source: hosted
     version: "0.2.0"
-  clock:
-    dependency: transitive
-    description:
-      name: clock
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.1.0"
   code_builder:
     dependency: transitive
     description:
@@ -175,7 +168,7 @@
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.15.0"
+    version: "1.14.13"
   convert:
     dependency: transitive
     description:
@@ -322,7 +315,7 @@
       name: intl
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.17.0"
+    version: "0.16.1"
   io:
     dependency: transitive
     description:
@@ -336,7 +329,7 @@
       name: js
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.6.3"
+    version: "0.6.2"
   json_annotation:
     dependency: transitive
     description:
@@ -364,7 +357,7 @@
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0"
+    version: "1.2.4"
   mime:
     dependency: transitive
     description:
@@ -413,7 +406,7 @@
       name: path
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.0"
+    version: "1.7.0"
   pedantic:
     dependency: "direct dev"
     description:
@@ -427,7 +420,7 @@
       name: pool
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.5.0"
+    version: "1.4.0"
   protobuf:
     dependency: "direct main"
     description:
@@ -511,35 +504,35 @@
       name: source_map_stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0"
+    version: "2.0.0"
   source_maps:
     dependency: transitive
     description:
       name: source_maps
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.10.10"
+    version: "0.10.9"
   source_span:
     dependency: transitive
     description:
       name: source_span
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.0"
+    version: "1.7.0"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.10.0"
+    version: "1.9.6"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0"
+    version: "2.0.0"
   stream_transform:
     dependency: transitive
     description:
@@ -553,7 +546,7 @@
       name: string_scanner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0"
+    version: "1.0.5"
   synchronized:
     dependency: "direct dev"
     description:
@@ -567,7 +560,7 @@
       name: term_glyph
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.1.0"
   test:
     dependency: "direct dev"
     description:
@@ -602,7 +595,7 @@
       name: typed_data
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0"
+    version: "1.2.0"
   vm_service:
     dependency: transitive
     description:
@@ -639,4 +632,4 @@
     source: hosted
     version: "2.2.1"
 sdks:
-  dart: ">=2.12.0-0.0 <3.0.0"
+  dart: ">=2.10.4 <3.0.0"