Version 2.18.0-133.0.dev

Merge commit '466202bb34d1752158f0d6fb8390948d273ea41a' into 'dev'
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index cc63b35..e1e3e17 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 const String PROTOCOL_VERSION = '1.33.0';
 
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 3db69c3..39f470f 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 import 'dart:convert' hide JsonDecoder;
 
@@ -34,7 +33,7 @@
     if (json is Map) {
       List<String> directories;
       if (json.containsKey('directories')) {
-        directories = jsonDecoder.decodeList(jsonPath + '.directories',
+        directories = jsonDecoder.decodeList('$jsonPath.directories',
             json['directories'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'directories');
@@ -108,14 +107,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<ClosingLabel> labels;
       if (json.containsKey('labels')) {
         labels = jsonDecoder.decodeList(
-            jsonPath + '.labels',
+            '$jsonPath.labels',
             json['labels'],
             (String jsonPath, Object? json) =>
                 ClosingLabel.fromJson(jsonDecoder, jsonPath, json));
@@ -193,14 +192,14 @@
       AnalysisError error;
       if (json.containsKey('error')) {
         error = AnalysisError.fromJson(
-            jsonDecoder, jsonPath + '.error', json['error']);
+            jsonDecoder, '$jsonPath.error', json['error']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'error');
       }
       List<SourceChange> fixes;
       if (json.containsKey('fixes')) {
         fixes = jsonDecoder.decodeList(
-            jsonPath + '.fixes',
+            '$jsonPath.fixes',
             json['fixes'],
             (String jsonPath, Object? json) =>
                 SourceChange.fromJson(jsonDecoder, jsonPath, json));
@@ -265,14 +264,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<AnalysisError> errors;
       if (json.containsKey('errors')) {
         errors = jsonDecoder.decodeList(
-            jsonPath + '.errors',
+            '$jsonPath.errors',
             json['errors'],
             (String jsonPath, Object? json) =>
                 AnalysisError.fromJson(jsonDecoder, jsonPath, json));
@@ -343,7 +342,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -409,14 +408,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<FoldingRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 FoldingRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -486,7 +485,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -548,7 +547,7 @@
       List<AnalysisError> errors;
       if (json.containsKey('errors')) {
         errors = jsonDecoder.decodeList(
-            jsonPath + '.errors',
+            '$jsonPath.errors',
             json['errors'],
             (String jsonPath, Object? json) =>
                 AnalysisError.fromJson(jsonDecoder, jsonPath, json));
@@ -620,13 +619,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -696,7 +695,7 @@
       List<HoverInformation> hovers;
       if (json.containsKey('hovers')) {
         hovers = jsonDecoder.decodeList(
-            jsonPath + '.hovers',
+            '$jsonPath.hovers',
             json['hovers'],
             (String jsonPath, Object? json) =>
                 HoverInformation.fromJson(jsonDecoder, jsonPath, json));
@@ -772,19 +771,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -856,7 +855,7 @@
       List<ImportedElements> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements',
+            '$jsonPath.elements',
             json['elements'],
             (String jsonPath, Object? json) =>
                 ImportedElements.fromJson(jsonDecoder, jsonPath, json));
@@ -956,15 +955,15 @@
     if (json is Map) {
       List<String> libraries;
       if (json.containsKey('libraries')) {
-        libraries = jsonDecoder.decodeList(jsonPath + '.libraries',
-            json['libraries'], jsonDecoder.decodeString);
+        libraries = jsonDecoder.decodeList(
+            '$jsonPath.libraries', json['libraries'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraries');
       }
       Map<String, Map<String, List<String>>> packageMap;
       if (json.containsKey('packageMap')) {
         packageMap = jsonDecoder.decodeMap(
-            jsonPath + '.packageMap', json['packageMap'],
+            '$jsonPath.packageMap', json['packageMap'],
             valueDecoder: (String jsonPath, Object? json) =>
                 jsonDecoder.decodeMap(jsonPath, json,
                     valueDecoder: (String jsonPath, Object? json) => jsonDecoder
@@ -1056,19 +1055,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -1149,14 +1148,14 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
       List<NavigationTarget> targets;
       if (json.containsKey('targets')) {
         targets = jsonDecoder.decodeList(
-            jsonPath + '.targets',
+            '$jsonPath.targets',
             json['targets'],
             (String jsonPath, Object? json) =>
                 NavigationTarget.fromJson(jsonDecoder, jsonPath, json));
@@ -1166,7 +1165,7 @@
       List<NavigationRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 NavigationRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -1245,7 +1244,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -1313,7 +1312,7 @@
     if (json is Map) {
       Map<String, List<String>> sources;
       if (json.containsKey('sources')) {
-        sources = jsonDecoder.decodeMap(jsonPath + '.sources', json['sources'],
+        sources = jsonDecoder.decodeMap('$jsonPath.sources', json['sources'],
             valueDecoder: (String jsonPath, Object? json) => jsonDecoder
                 .decodeList(jsonPath, json, jsonDecoder.decodeString));
       } else {
@@ -1387,13 +1386,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -1472,14 +1471,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       List<ParameterInfo> parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeList(
-            jsonPath + '.parameters',
+            '$jsonPath.parameters',
             json['parameters'],
             (String jsonPath, Object? json) =>
                 ParameterInfo.fromJson(jsonDecoder, jsonPath, json));
@@ -1489,7 +1488,7 @@
       String? dartdoc;
       if (json.containsKey('dartdoc')) {
         dartdoc =
-            jsonDecoder.decodeString(jsonPath + '.dartdoc', json['dartdoc']);
+            jsonDecoder.decodeString('$jsonPath.dartdoc', json['dartdoc']);
       }
       return AnalysisGetSignatureResult(name, parameters, dartdoc: dartdoc);
     } else {
@@ -1572,14 +1571,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<HighlightRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 HighlightRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -1657,14 +1656,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<ImplementedClass> classes;
       if (json.containsKey('classes')) {
         classes = jsonDecoder.decodeList(
-            jsonPath + '.classes',
+            '$jsonPath.classes',
             json['classes'],
             (String jsonPath, Object? json) =>
                 ImplementedClass.fromJson(jsonDecoder, jsonPath, json));
@@ -1674,7 +1673,7 @@
       List<ImplementedMember> members;
       if (json.containsKey('members')) {
         members = jsonDecoder.decodeList(
-            jsonPath + '.members',
+            '$jsonPath.members',
             json['members'],
             (String jsonPath, Object? json) =>
                 ImplementedMember.fromJson(jsonDecoder, jsonPath, json));
@@ -1764,25 +1763,25 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       int delta;
       if (json.containsKey('delta')) {
-        delta = jsonDecoder.decodeInt(jsonPath + '.delta', json['delta']);
+        delta = jsonDecoder.decodeInt('$jsonPath.delta', json['delta']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'delta');
       }
@@ -1873,14 +1872,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<NavigationRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 NavigationRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -1890,7 +1889,7 @@
       List<NavigationTarget> targets;
       if (json.containsKey('targets')) {
         targets = jsonDecoder.decodeList(
-            jsonPath + '.targets',
+            '$jsonPath.targets',
             json['targets'],
             (String jsonPath, Object? json) =>
                 NavigationTarget.fromJson(jsonDecoder, jsonPath, json));
@@ -1900,7 +1899,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -1979,14 +1978,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<Occurrences> occurrences;
       if (json.containsKey('occurrences')) {
         occurrences = jsonDecoder.decodeList(
-            jsonPath + '.occurrences',
+            '$jsonPath.occurrences',
             json['occurrences'],
             (String jsonPath, Object? json) =>
                 Occurrences.fromJson(jsonDecoder, jsonPath, json));
@@ -2109,43 +2108,43 @@
       bool? enableAsync;
       if (json.containsKey('enableAsync')) {
         enableAsync = jsonDecoder.decodeBool(
-            jsonPath + '.enableAsync', json['enableAsync']);
+            '$jsonPath.enableAsync', json['enableAsync']);
       }
       bool? enableDeferredLoading;
       if (json.containsKey('enableDeferredLoading')) {
         enableDeferredLoading = jsonDecoder.decodeBool(
-            jsonPath + '.enableDeferredLoading', json['enableDeferredLoading']);
+            '$jsonPath.enableDeferredLoading', json['enableDeferredLoading']);
       }
       bool? enableEnums;
       if (json.containsKey('enableEnums')) {
         enableEnums = jsonDecoder.decodeBool(
-            jsonPath + '.enableEnums', json['enableEnums']);
+            '$jsonPath.enableEnums', json['enableEnums']);
       }
       bool? enableNullAwareOperators;
       if (json.containsKey('enableNullAwareOperators')) {
         enableNullAwareOperators = jsonDecoder.decodeBool(
-            jsonPath + '.enableNullAwareOperators',
+            '$jsonPath.enableNullAwareOperators',
             json['enableNullAwareOperators']);
       }
       bool? enableSuperMixins;
       if (json.containsKey('enableSuperMixins')) {
         enableSuperMixins = jsonDecoder.decodeBool(
-            jsonPath + '.enableSuperMixins', json['enableSuperMixins']);
+            '$jsonPath.enableSuperMixins', json['enableSuperMixins']);
       }
       bool? generateDart2jsHints;
       if (json.containsKey('generateDart2jsHints')) {
         generateDart2jsHints = jsonDecoder.decodeBool(
-            jsonPath + '.generateDart2jsHints', json['generateDart2jsHints']);
+            '$jsonPath.generateDart2jsHints', json['generateDart2jsHints']);
       }
       bool? generateHints;
       if (json.containsKey('generateHints')) {
         generateHints = jsonDecoder.decodeBool(
-            jsonPath + '.generateHints', json['generateHints']);
+            '$jsonPath.generateHints', json['generateHints']);
       }
       bool? generateLints;
       if (json.containsKey('generateLints')) {
         generateLints = jsonDecoder.decodeBool(
-            jsonPath + '.generateLints', json['generateLints']);
+            '$jsonPath.generateLints', json['generateLints']);
       }
       return AnalysisOptions(
           enableAsync: enableAsync,
@@ -2265,25 +2264,25 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       FileKind kind;
       if (json.containsKey('kind')) {
-        kind = FileKind.fromJson(jsonDecoder, jsonPath + '.kind', json['kind']);
+        kind = FileKind.fromJson(jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String? libraryName;
       if (json.containsKey('libraryName')) {
         libraryName = jsonDecoder.decodeString(
-            jsonPath + '.libraryName', json['libraryName']);
+            '$jsonPath.libraryName', json['libraryName']);
       }
       Outline outline;
       if (json.containsKey('outline')) {
-        outline = Outline.fromJson(
-            jsonDecoder, jsonPath + '.outline', json['outline']);
+        outline =
+            Outline.fromJson(jsonDecoder, '$jsonPath.outline', json['outline']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'outline');
       }
@@ -2362,14 +2361,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<Override> overrides;
       if (json.containsKey('overrides')) {
         overrides = jsonDecoder.decodeList(
-            jsonPath + '.overrides',
+            '$jsonPath.overrides',
             json['overrides'],
             (String jsonPath, Object? json) =>
                 Override.fromJson(jsonDecoder, jsonPath, json));
@@ -2606,21 +2605,21 @@
       List<String> included;
       if (json.containsKey('included')) {
         included = jsonDecoder.decodeList(
-            jsonPath + '.included', json['included'], jsonDecoder.decodeString);
+            '$jsonPath.included', json['included'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'included');
       }
       List<String> excluded;
       if (json.containsKey('excluded')) {
         excluded = jsonDecoder.decodeList(
-            jsonPath + '.excluded', json['excluded'], jsonDecoder.decodeString);
+            '$jsonPath.excluded', json['excluded'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'excluded');
       }
       Map<String, String>? packageRoots;
       if (json.containsKey('packageRoots')) {
         packageRoots = jsonDecoder.decodeMap(
-            jsonPath + '.packageRoots', json['packageRoots'],
+            '$jsonPath.packageRoots', json['packageRoots'],
             valueDecoder: jsonDecoder.decodeString);
       }
       return AnalysisSetAnalysisRootsParams(included, excluded,
@@ -2720,7 +2719,7 @@
       List<GeneralAnalysisService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 GeneralAnalysisService.fromJson(jsonDecoder, jsonPath, json));
@@ -2813,7 +2812,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -2901,7 +2900,7 @@
       Map<AnalysisService, List<String>> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeMap(
-            jsonPath + '.subscriptions', json['subscriptions'],
+            '$jsonPath.subscriptions', json['subscriptions'],
             keyDecoder: (String jsonPath, Object? json) =>
                 AnalysisService.fromJson(jsonDecoder, jsonPath, json),
             valueDecoder: (String jsonPath, Object? json) => jsonDecoder
@@ -3002,14 +3001,14 @@
       bool isAnalyzing;
       if (json.containsKey('isAnalyzing')) {
         isAnalyzing = jsonDecoder.decodeBool(
-            jsonPath + '.isAnalyzing', json['isAnalyzing']);
+            '$jsonPath.isAnalyzing', json['isAnalyzing']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isAnalyzing');
       }
       String? analysisTarget;
       if (json.containsKey('analysisTarget')) {
         analysisTarget = jsonDecoder.decodeString(
-            jsonPath + '.analysisTarget', json['analysisTarget']);
+            '$jsonPath.analysisTarget', json['analysisTarget']);
       }
       return AnalysisStatus(isAnalyzing, analysisTarget: analysisTarget);
     } else {
@@ -3067,7 +3066,7 @@
     if (json is Map) {
       Map<String, Object> files;
       if (json.containsKey('files')) {
-        files = jsonDecoder.decodeMap(jsonPath + '.files', json['files'],
+        files = jsonDecoder.decodeMap('$jsonPath.files', json['files'],
             valueDecoder: (String jsonPath, Object? json) =>
                 jsonDecoder.decodeUnion(jsonPath, json, 'type', {
                   'add': (String jsonPath, Object? json) =>
@@ -3194,7 +3193,7 @@
       AnalysisOptions options;
       if (json.containsKey('options')) {
         options = AnalysisOptions.fromJson(
-            jsonDecoder, jsonPath + '.options', json['options']);
+            jsonDecoder, '$jsonPath.options', json['options']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'options');
       }
@@ -3280,7 +3279,7 @@
     if (json is Map) {
       bool value;
       if (json.containsKey('value')) {
-        value = jsonDecoder.decodeBool(jsonPath + '.value', json['value']);
+        value = jsonDecoder.decodeBool('$jsonPath.value', json['value']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'value');
       }
@@ -3389,8 +3388,7 @@
     if (json is Map) {
       bool enabled;
       if (json.containsKey('enabled')) {
-        enabled =
-            jsonDecoder.decodeBool(jsonPath + '.enabled', json['enabled']);
+        enabled = jsonDecoder.decodeBool('$jsonPath.enabled', json['enabled']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'enabled');
       }
@@ -3453,7 +3451,7 @@
     if (json is Map) {
       String action;
       if (json.containsKey('action')) {
-        action = jsonDecoder.decodeString(jsonPath + '.action', json['action']);
+        action = jsonDecoder.decodeString('$jsonPath.action', json['action']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'action');
       }
@@ -3542,13 +3540,13 @@
     if (json is Map) {
       String event;
       if (json.containsKey('event')) {
-        event = jsonDecoder.decodeString(jsonPath + '.event', json['event']);
+        event = jsonDecoder.decodeString('$jsonPath.event', json['event']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'event');
       }
       int millis;
       if (json.containsKey('millis')) {
-        millis = jsonDecoder.decodeInt(jsonPath + '.millis', json['millis']);
+        millis = jsonDecoder.decodeInt('$jsonPath.millis', json['millis']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'millis');
       }
@@ -3687,57 +3685,56 @@
     if (json is Map) {
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
       String declaringLibraryUri;
       if (json.containsKey('declaringLibraryUri')) {
         declaringLibraryUri = jsonDecoder.decodeString(
-            jsonPath + '.declaringLibraryUri', json['declaringLibraryUri']);
+            '$jsonPath.declaringLibraryUri', json['declaringLibraryUri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'declaringLibraryUri');
       }
       Element element;
       if (json.containsKey('element')) {
-        element = Element.fromJson(
-            jsonDecoder, jsonPath + '.element', json['element']);
+        element =
+            Element.fromJson(jsonDecoder, '$jsonPath.element', json['element']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'element');
       }
       String? defaultArgumentListString;
       if (json.containsKey('defaultArgumentListString')) {
         defaultArgumentListString = jsonDecoder.decodeString(
-            jsonPath + '.defaultArgumentListString',
+            '$jsonPath.defaultArgumentListString',
             json['defaultArgumentListString']);
       }
       List<int>? defaultArgumentListTextRanges;
       if (json.containsKey('defaultArgumentListTextRanges')) {
         defaultArgumentListTextRanges = jsonDecoder.decodeList(
-            jsonPath + '.defaultArgumentListTextRanges',
+            '$jsonPath.defaultArgumentListTextRanges',
             json['defaultArgumentListTextRanges'],
             jsonDecoder.decodeInt);
       }
       List<String>? parameterNames;
       if (json.containsKey('parameterNames')) {
-        parameterNames = jsonDecoder.decodeList(jsonPath + '.parameterNames',
+        parameterNames = jsonDecoder.decodeList('$jsonPath.parameterNames',
             json['parameterNames'], jsonDecoder.decodeString);
       }
       List<String>? parameterTypes;
       if (json.containsKey('parameterTypes')) {
-        parameterTypes = jsonDecoder.decodeList(jsonPath + '.parameterTypes',
+        parameterTypes = jsonDecoder.decodeList('$jsonPath.parameterTypes',
             json['parameterTypes'], jsonDecoder.decodeString);
       }
       List<String>? relevanceTags;
       if (json.containsKey('relevanceTags')) {
-        relevanceTags = jsonDecoder.decodeList(jsonPath + '.relevanceTags',
+        relevanceTags = jsonDecoder.decodeList('$jsonPath.relevanceTags',
             json['relevanceTags'], jsonDecoder.decodeString);
       }
       int? requiredParameterCount;
       if (json.containsKey('requiredParameterCount')) {
         requiredParameterCount = jsonDecoder.decodeInt(
-            jsonPath + '.requiredParameterCount',
-            json['requiredParameterCount']);
+            '$jsonPath.requiredParameterCount', json['requiredParameterCount']);
       }
       return AvailableSuggestion(label, declaringLibraryUri, element,
           defaultArgumentListString: defaultArgumentListString,
@@ -3847,20 +3844,20 @@
     if (json is Map) {
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       String uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeString(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeString('$jsonPath.uri', json['uri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'uri');
       }
       List<AvailableSuggestion> items;
       if (json.containsKey('items')) {
         items = jsonDecoder.decodeList(
-            jsonPath + '.items',
+            '$jsonPath.items',
             json['items'],
             (String jsonPath, Object? json) =>
                 AvailableSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -3928,14 +3925,14 @@
     if (json is Map) {
       String path;
       if (json.containsKey('path')) {
-        path = jsonDecoder.decodeString(jsonPath + '.path', json['path']);
+        path = jsonDecoder.decodeString('$jsonPath.path', json['path']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'path');
       }
       List<BulkFixDetail> fixes;
       if (json.containsKey('fixes')) {
         fixes = jsonDecoder.decodeList(
-            jsonPath + '.fixes',
+            '$jsonPath.fixes',
             json['fixes'],
             (String jsonPath, Object? json) =>
                 BulkFixDetail.fromJson(jsonDecoder, jsonPath, json));
@@ -4001,14 +3998,14 @@
     if (json is Map) {
       String code;
       if (json.containsKey('code')) {
-        code = jsonDecoder.decodeString(jsonPath + '.code', json['code']);
+        code = jsonDecoder.decodeString('$jsonPath.code', json['code']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'code');
       }
       int occurrences;
       if (json.containsKey('occurrences')) {
-        occurrences = jsonDecoder.decodeInt(
-            jsonPath + '.occurrences', json['occurrences']);
+        occurrences =
+            jsonDecoder.decodeInt('$jsonPath.occurrences', json['occurrences']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'occurrences');
       }
@@ -4072,19 +4069,19 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
@@ -4150,17 +4147,15 @@
       List<AvailableSuggestionSet>? changedLibraries;
       if (json.containsKey('changedLibraries')) {
         changedLibraries = jsonDecoder.decodeList(
-            jsonPath + '.changedLibraries',
+            '$jsonPath.changedLibraries',
             json['changedLibraries'],
             (String jsonPath, Object? json) =>
                 AvailableSuggestionSet.fromJson(jsonDecoder, jsonPath, json));
       }
       List<int>? removedLibraries;
       if (json.containsKey('removedLibraries')) {
-        removedLibraries = jsonDecoder.decodeList(
-            jsonPath + '.removedLibraries',
-            json['removedLibraries'],
-            jsonDecoder.decodeInt);
+        removedLibraries = jsonDecoder.decodeList('$jsonPath.removedLibraries',
+            json['removedLibraries'], jsonDecoder.decodeInt);
       }
       return CompletionAvailableSuggestionsParams(
           changedLibraries: changedLibraries,
@@ -4303,14 +4298,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       ExistingImports imports;
       if (json.containsKey('imports')) {
         imports = ExistingImports.fromJson(
-            jsonDecoder, jsonPath + '.imports', json['imports']);
+            jsonDecoder, '$jsonPath.imports', json['imports']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'imports');
       }
@@ -4393,27 +4388,27 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       String completion;
       if (json.containsKey('completion')) {
         completion = jsonDecoder.decodeString(
-            jsonPath + '.completion', json['completion']);
+            '$jsonPath.completion', json['completion']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'completion');
       }
       String libraryUri;
       if (json.containsKey('libraryUri')) {
         libraryUri = jsonDecoder.decodeString(
-            jsonPath + '.libraryUri', json['libraryUri']);
+            '$jsonPath.libraryUri', json['libraryUri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraryUri');
       }
@@ -4496,14 +4491,14 @@
       String completion;
       if (json.containsKey('completion')) {
         completion = jsonDecoder.decodeString(
-            jsonPath + '.completion', json['completion']);
+            '$jsonPath.completion', json['completion']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'completion');
       }
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
@@ -4587,25 +4582,25 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -4685,14 +4680,14 @@
       String completion;
       if (json.containsKey('completion')) {
         completion = jsonDecoder.decodeString(
-            jsonPath + '.completion', json['completion']);
+            '$jsonPath.completion', json['completion']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'completion');
       }
       SourceChange? change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       }
       return CompletionGetSuggestionDetailsResult(completion, change: change);
     } else {
@@ -4795,20 +4790,20 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int maxResults;
       if (json.containsKey('maxResults')) {
         maxResults =
-            jsonDecoder.decodeInt(jsonPath + '.maxResults', json['maxResults']);
+            jsonDecoder.decodeInt('$jsonPath.maxResults', json['maxResults']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'maxResults');
       }
@@ -4816,22 +4811,22 @@
       if (json.containsKey('completionCaseMatchingMode')) {
         completionCaseMatchingMode = CompletionCaseMatchingMode.fromJson(
             jsonDecoder,
-            jsonPath + '.completionCaseMatchingMode',
+            '$jsonPath.completionCaseMatchingMode',
             json['completionCaseMatchingMode']);
       }
       CompletionMode? completionMode;
       if (json.containsKey('completionMode')) {
         completionMode = CompletionMode.fromJson(
-            jsonDecoder, jsonPath + '.completionMode', json['completionMode']);
+            jsonDecoder, '$jsonPath.completionMode', json['completionMode']);
       }
       int? invocationCount;
       if (json.containsKey('invocationCount')) {
         invocationCount = jsonDecoder.decodeInt(
-            jsonPath + '.invocationCount', json['invocationCount']);
+            '$jsonPath.invocationCount', json['invocationCount']);
       }
       int? timeout;
       if (json.containsKey('timeout')) {
-        timeout = jsonDecoder.decodeInt(jsonPath + '.timeout', json['timeout']);
+        timeout = jsonDecoder.decodeInt('$jsonPath.timeout', json['timeout']);
       }
       return CompletionGetSuggestions2Params(file, offset, maxResults,
           completionCaseMatchingMode: completionCaseMatchingMode,
@@ -4958,21 +4953,21 @@
       int replacementOffset;
       if (json.containsKey('replacementOffset')) {
         replacementOffset = jsonDecoder.decodeInt(
-            jsonPath + '.replacementOffset', json['replacementOffset']);
+            '$jsonPath.replacementOffset', json['replacementOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementOffset');
       }
       int replacementLength;
       if (json.containsKey('replacementLength')) {
         replacementLength = jsonDecoder.decodeInt(
-            jsonPath + '.replacementLength', json['replacementLength']);
+            '$jsonPath.replacementLength', json['replacementLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementLength');
       }
       List<CompletionSuggestion> suggestions;
       if (json.containsKey('suggestions')) {
         suggestions = jsonDecoder.decodeList(
-            jsonPath + '.suggestions',
+            '$jsonPath.suggestions',
             json['suggestions'],
             (String jsonPath, Object? json) =>
                 CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -4982,7 +4977,7 @@
       bool isIncomplete;
       if (json.containsKey('isIncomplete')) {
         isIncomplete = jsonDecoder.decodeBool(
-            jsonPath + '.isIncomplete', json['isIncomplete']);
+            '$jsonPath.isIncomplete', json['isIncomplete']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isIncomplete');
       }
@@ -5065,13 +5060,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -5137,7 +5132,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -5257,7 +5252,7 @@
       List<LibraryPathSet> paths;
       if (json.containsKey('paths')) {
         paths = jsonDecoder.decodeList(
-            jsonPath + '.paths',
+            '$jsonPath.paths',
             json['paths'],
             (String jsonPath, Object? json) =>
                 LibraryPathSet.fromJson(jsonDecoder, jsonPath, json));
@@ -5411,28 +5406,28 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       int replacementOffset;
       if (json.containsKey('replacementOffset')) {
         replacementOffset = jsonDecoder.decodeInt(
-            jsonPath + '.replacementOffset', json['replacementOffset']);
+            '$jsonPath.replacementOffset', json['replacementOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementOffset');
       }
       int replacementLength;
       if (json.containsKey('replacementLength')) {
         replacementLength = jsonDecoder.decodeInt(
-            jsonPath + '.replacementLength', json['replacementLength']);
+            '$jsonPath.replacementLength', json['replacementLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementLength');
       }
       List<CompletionSuggestion> results;
       if (json.containsKey('results')) {
         results = jsonDecoder.decodeList(
-            jsonPath + '.results',
+            '$jsonPath.results',
             json['results'],
             (String jsonPath, Object? json) =>
                 CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -5441,19 +5436,19 @@
       }
       bool isLast;
       if (json.containsKey('isLast')) {
-        isLast = jsonDecoder.decodeBool(jsonPath + '.isLast', json['isLast']);
+        isLast = jsonDecoder.decodeBool('$jsonPath.isLast', json['isLast']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isLast');
       }
       String? libraryFile;
       if (json.containsKey('libraryFile')) {
         libraryFile = jsonDecoder.decodeString(
-            jsonPath + '.libraryFile', json['libraryFile']);
+            '$jsonPath.libraryFile', json['libraryFile']);
       }
       List<IncludedSuggestionSet>? includedSuggestionSets;
       if (json.containsKey('includedSuggestionSets')) {
         includedSuggestionSets = jsonDecoder.decodeList(
-            jsonPath + '.includedSuggestionSets',
+            '$jsonPath.includedSuggestionSets',
             json['includedSuggestionSets'],
             (String jsonPath, Object? json) =>
                 IncludedSuggestionSet.fromJson(jsonDecoder, jsonPath, json));
@@ -5461,7 +5456,7 @@
       List<ElementKind>? includedElementKinds;
       if (json.containsKey('includedElementKinds')) {
         includedElementKinds = jsonDecoder.decodeList(
-            jsonPath + '.includedElementKinds',
+            '$jsonPath.includedElementKinds',
             json['includedElementKinds'],
             (String jsonPath, Object? json) =>
                 ElementKind.fromJson(jsonDecoder, jsonPath, json));
@@ -5469,7 +5464,7 @@
       List<IncludedSuggestionRelevanceTag>? includedSuggestionRelevanceTags;
       if (json.containsKey('includedSuggestionRelevanceTags')) {
         includedSuggestionRelevanceTags = jsonDecoder.decodeList(
-            jsonPath + '.includedSuggestionRelevanceTags',
+            '$jsonPath.includedSuggestionRelevanceTags',
             json['includedSuggestionRelevanceTags'],
             (String jsonPath, Object? json) =>
                 IncludedSuggestionRelevanceTag.fromJson(
@@ -5645,7 +5640,7 @@
       List<CompletionService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 CompletionService.fromJson(jsonDecoder, jsonPath, json));
@@ -5753,35 +5748,35 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       int explicitFileCount;
       if (json.containsKey('explicitFileCount')) {
         explicitFileCount = jsonDecoder.decodeInt(
-            jsonPath + '.explicitFileCount', json['explicitFileCount']);
+            '$jsonPath.explicitFileCount', json['explicitFileCount']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'explicitFileCount');
       }
       int implicitFileCount;
       if (json.containsKey('implicitFileCount')) {
         implicitFileCount = jsonDecoder.decodeInt(
-            jsonPath + '.implicitFileCount', json['implicitFileCount']);
+            '$jsonPath.implicitFileCount', json['implicitFileCount']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'implicitFileCount');
       }
       int workItemQueueLength;
       if (json.containsKey('workItemQueueLength')) {
         workItemQueueLength = jsonDecoder.decodeInt(
-            jsonPath + '.workItemQueueLength', json['workItemQueueLength']);
+            '$jsonPath.workItemQueueLength', json['workItemQueueLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'workItemQueueLength');
       }
       List<String> cacheEntryExceptions;
       if (json.containsKey('cacheEntryExceptions')) {
         cacheEntryExceptions = jsonDecoder.decodeList(
-            jsonPath + '.cacheEntryExceptions',
+            '$jsonPath.cacheEntryExceptions',
             json['cacheEntryExceptions'],
             jsonDecoder.decodeString);
       } else {
@@ -5943,7 +5938,7 @@
       List<ContextData> contexts;
       if (json.containsKey('contexts')) {
         contexts = jsonDecoder.decodeList(
-            jsonPath + '.contexts',
+            '$jsonPath.contexts',
             json['contexts'],
             (String jsonPath, Object? json) =>
                 ContextData.fromJson(jsonDecoder, jsonPath, json));
@@ -6036,7 +6031,7 @@
     if (json is Map) {
       int port;
       if (json.containsKey('port')) {
-        port = jsonDecoder.decodeInt(jsonPath + '.port', json['port']);
+        port = jsonDecoder.decodeInt('$jsonPath.port', json['port']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'port');
       }
@@ -6117,14 +6112,14 @@
       List<String> included;
       if (json.containsKey('included')) {
         included = jsonDecoder.decodeList(
-            jsonPath + '.included', json['included'], jsonDecoder.decodeString);
+            '$jsonPath.included', json['included'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'included');
       }
       bool? inTestMode;
       if (json.containsKey('inTestMode')) {
-        inTestMode = jsonDecoder.decodeBool(
-            jsonPath + '.inTestMode', json['inTestMode']);
+        inTestMode =
+            jsonDecoder.decodeBool('$jsonPath.inTestMode', json['inTestMode']);
       }
       return EditBulkFixesParams(included, inTestMode: inTestMode);
     } else {
@@ -6197,7 +6192,7 @@
       List<SourceFileEdit> edits;
       if (json.containsKey('edits')) {
         edits = jsonDecoder.decodeList(
-            jsonPath + '.edits',
+            '$jsonPath.edits',
             json['edits'],
             (String jsonPath, Object? json) =>
                 SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
@@ -6207,7 +6202,7 @@
       List<BulkFix> details;
       if (json.containsKey('details')) {
         details = jsonDecoder.decodeList(
-            jsonPath + '.details',
+            '$jsonPath.details',
             json['details'],
             (String jsonPath, Object? json) =>
                 BulkFix.fromJson(jsonDecoder, jsonPath, json));
@@ -6280,7 +6275,7 @@
     if (json is Map) {
       List<String> directories;
       if (json.containsKey('directories')) {
-        directories = jsonDecoder.decodeList(jsonPath + '.directories',
+        directories = jsonDecoder.decodeList('$jsonPath.directories',
             json['directories'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'directories');
@@ -6346,7 +6341,7 @@
       List<SourceFileEdit> edits;
       if (json.containsKey('edits')) {
         edits = jsonDecoder.decodeList(
-            jsonPath + '.edits',
+            '$jsonPath.edits',
             json['edits'],
             (String jsonPath, Object? json) =>
                 SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
@@ -6427,28 +6422,28 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int selectionOffset;
       if (json.containsKey('selectionOffset')) {
         selectionOffset = jsonDecoder.decodeInt(
-            jsonPath + '.selectionOffset', json['selectionOffset']);
+            '$jsonPath.selectionOffset', json['selectionOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionOffset');
       }
       int selectionLength;
       if (json.containsKey('selectionLength')) {
         selectionLength = jsonDecoder.decodeInt(
-            jsonPath + '.selectionLength', json['selectionLength']);
+            '$jsonPath.selectionLength', json['selectionLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionLength');
       }
       int? lineLength;
       if (json.containsKey('lineLength')) {
         lineLength =
-            jsonDecoder.decodeInt(jsonPath + '.lineLength', json['lineLength']);
+            jsonDecoder.decodeInt('$jsonPath.lineLength', json['lineLength']);
       }
       return EditFormatParams(file, selectionOffset, selectionLength,
           lineLength: lineLength);
@@ -6532,7 +6527,7 @@
       List<SourceEdit> edits;
       if (json.containsKey('edits')) {
         edits = jsonDecoder.decodeList(
-            jsonPath + '.edits',
+            '$jsonPath.edits',
             json['edits'],
             (String jsonPath, Object? json) =>
                 SourceEdit.fromJson(jsonDecoder, jsonPath, json));
@@ -6542,14 +6537,14 @@
       int selectionOffset;
       if (json.containsKey('selectionOffset')) {
         selectionOffset = jsonDecoder.decodeInt(
-            jsonPath + '.selectionOffset', json['selectionOffset']);
+            '$jsonPath.selectionOffset', json['selectionOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionOffset');
       }
       int selectionLength;
       if (json.containsKey('selectionLength')) {
         selectionLength = jsonDecoder.decodeInt(
-            jsonPath + '.selectionLength', json['selectionLength']);
+            '$jsonPath.selectionLength', json['selectionLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionLength');
       }
@@ -6629,19 +6624,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -6711,7 +6706,7 @@
       List<SourceChange> assists;
       if (json.containsKey('assists')) {
         assists = jsonDecoder.decodeList(
-            jsonPath + '.assists',
+            '$jsonPath.assists',
             json['assists'],
             (String jsonPath, Object? json) =>
                 SourceChange.fromJson(jsonDecoder, jsonPath, json));
@@ -6787,19 +6782,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -6870,7 +6865,7 @@
       List<RefactoringKind> kinds;
       if (json.containsKey('kinds')) {
         kinds = jsonDecoder.decodeList(
-            jsonPath + '.kinds',
+            '$jsonPath.kinds',
             json['kinds'],
             (String jsonPath, Object? json) =>
                 RefactoringKind.fromJson(jsonDecoder, jsonPath, json));
@@ -6943,13 +6938,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7015,7 +7010,7 @@
       List<AnalysisErrorFixes> fixes;
       if (json.containsKey('fixes')) {
         fixes = jsonDecoder.decodeList(
-            jsonPath + '.fixes',
+            '$jsonPath.fixes',
             json['fixes'],
             (String jsonPath, Object? json) =>
                 AnalysisErrorFixes.fromJson(jsonDecoder, jsonPath, json));
@@ -7092,19 +7087,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       String key;
       if (json.containsKey('key')) {
-        key = jsonDecoder.decodeString(jsonPath + '.key', json['key']);
+        key = jsonDecoder.decodeString('$jsonPath.key', json['key']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'key');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7173,7 +7168,7 @@
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
@@ -7265,39 +7260,39 @@
       RefactoringKind kind;
       if (json.containsKey('kind')) {
         kind = RefactoringKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       bool validateOnly;
       if (json.containsKey('validateOnly')) {
         validateOnly = jsonDecoder.decodeBool(
-            jsonPath + '.validateOnly', json['validateOnly']);
+            '$jsonPath.validateOnly', json['validateOnly']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'validateOnly');
       }
       RefactoringOptions? options;
       if (json.containsKey('options')) {
         options = RefactoringOptions.fromJson(
-            jsonDecoder, jsonPath + '.options', json['options'], kind);
+            jsonDecoder, '$jsonPath.options', json['options'], kind);
       }
       return EditGetRefactoringParams(kind, file, offset, length, validateOnly,
           options: options);
@@ -7420,7 +7415,7 @@
       List<RefactoringProblem> initialProblems;
       if (json.containsKey('initialProblems')) {
         initialProblems = jsonDecoder.decodeList(
-            jsonPath + '.initialProblems',
+            '$jsonPath.initialProblems',
             json['initialProblems'],
             (String jsonPath, Object? json) =>
                 RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
@@ -7430,7 +7425,7 @@
       List<RefactoringProblem> optionsProblems;
       if (json.containsKey('optionsProblems')) {
         optionsProblems = jsonDecoder.decodeList(
-            jsonPath + '.optionsProblems',
+            '$jsonPath.optionsProblems',
             json['optionsProblems'],
             (String jsonPath, Object? json) =>
                 RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
@@ -7440,7 +7435,7 @@
       List<RefactoringProblem> finalProblems;
       if (json.containsKey('finalProblems')) {
         finalProblems = jsonDecoder.decodeList(
-            jsonPath + '.finalProblems',
+            '$jsonPath.finalProblems',
             json['finalProblems'],
             (String jsonPath, Object? json) =>
                 RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
@@ -7450,16 +7445,16 @@
       RefactoringFeedback? feedback;
       if (json.containsKey('feedback')) {
         feedback = RefactoringFeedback.fromJson(
-            jsonDecoder, jsonPath + '.feedback', json['feedback'], json);
+            jsonDecoder, '$jsonPath.feedback', json['feedback'], json);
       }
       SourceChange? change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       }
       List<String>? potentialEdits;
       if (json.containsKey('potentialEdits')) {
-        potentialEdits = jsonDecoder.decodeList(jsonPath + '.potentialEdits',
+        potentialEdits = jsonDecoder.decodeList('$jsonPath.potentialEdits',
             json['potentialEdits'], jsonDecoder.decodeString);
       }
       return EditGetRefactoringResult(
@@ -7563,13 +7558,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7641,14 +7636,14 @@
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
       bool whitespaceOnly;
       if (json.containsKey('whitespaceOnly')) {
         whitespaceOnly = jsonDecoder.decodeBool(
-            jsonPath + '.whitespaceOnly', json['whitespaceOnly']);
+            '$jsonPath.whitespaceOnly', json['whitespaceOnly']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'whitespaceOnly');
       }
@@ -7727,14 +7722,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<ImportedElements> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements',
+            '$jsonPath.elements',
             json['elements'],
             (String jsonPath, Object? json) =>
                 ImportedElements.fromJson(jsonDecoder, jsonPath, json));
@@ -7743,7 +7738,7 @@
       }
       int? offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       }
       return EditImportElementsParams(file, elements, offset: offset);
     } else {
@@ -7821,7 +7816,7 @@
       SourceFileEdit? edit;
       if (json.containsKey('edit')) {
         edit = SourceFileEdit.fromJson(
-            jsonDecoder, jsonPath + '.edit', json['edit']);
+            jsonDecoder, '$jsonPath.edit', json['edit']);
       }
       return EditImportElementsResult(edit: edit);
     } else {
@@ -7894,19 +7889,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       String key;
       if (json.containsKey('key')) {
-        key = jsonDecoder.decodeString(jsonPath + '.key', json['key']);
+        key = jsonDecoder.decodeString('$jsonPath.key', json['key']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'key');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7974,7 +7969,7 @@
     if (json is Map) {
       bool value;
       if (json.containsKey('value')) {
-        value = jsonDecoder.decodeBool(jsonPath + '.value', json['value']);
+        value = jsonDecoder.decodeBool('$jsonPath.value', json['value']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'value');
       }
@@ -8064,7 +8059,7 @@
       List<PostfixTemplateDescriptor> templates;
       if (json.containsKey('templates')) {
         templates = jsonDecoder.decodeList(
-            jsonPath + '.templates',
+            '$jsonPath.templates',
             json['templates'],
             (String jsonPath, Object? json) =>
                 PostfixTemplateDescriptor.fromJson(
@@ -8136,7 +8131,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -8200,7 +8195,7 @@
       SourceFileEdit edit;
       if (json.containsKey('edit')) {
         edit = SourceFileEdit.fromJson(
-            jsonDecoder, jsonPath + '.edit', json['edit']);
+            jsonDecoder, '$jsonPath.edit', json['edit']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'edit');
       }
@@ -8264,7 +8259,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -8327,7 +8322,7 @@
       SourceFileEdit edit;
       if (json.containsKey('edit')) {
         edit = SourceFileEdit.fromJson(
-            jsonDecoder, jsonPath + '.edit', json['edit']);
+            jsonDecoder, '$jsonPath.edit', json['edit']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'edit');
       }
@@ -8439,70 +8434,70 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       ElementKind kind;
       if (json.containsKey('kind')) {
         kind =
-            ElementKind.fromJson(jsonDecoder, jsonPath + '.kind', json['kind']);
+            ElementKind.fromJson(jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       int fileIndex;
       if (json.containsKey('fileIndex')) {
         fileIndex =
-            jsonDecoder.decodeInt(jsonPath + '.fileIndex', json['fileIndex']);
+            jsonDecoder.decodeInt('$jsonPath.fileIndex', json['fileIndex']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'fileIndex');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int line;
       if (json.containsKey('line')) {
-        line = jsonDecoder.decodeInt(jsonPath + '.line', json['line']);
+        line = jsonDecoder.decodeInt('$jsonPath.line', json['line']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'line');
       }
       int column;
       if (json.containsKey('column')) {
-        column = jsonDecoder.decodeInt(jsonPath + '.column', json['column']);
+        column = jsonDecoder.decodeInt('$jsonPath.column', json['column']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'column');
       }
       int codeOffset;
       if (json.containsKey('codeOffset')) {
         codeOffset =
-            jsonDecoder.decodeInt(jsonPath + '.codeOffset', json['codeOffset']);
+            jsonDecoder.decodeInt('$jsonPath.codeOffset', json['codeOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeOffset');
       }
       int codeLength;
       if (json.containsKey('codeLength')) {
         codeLength =
-            jsonDecoder.decodeInt(jsonPath + '.codeLength', json['codeLength']);
+            jsonDecoder.decodeInt('$jsonPath.codeLength', json['codeLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeLength');
       }
       String? className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       }
       String? mixinName;
       if (json.containsKey('mixinName')) {
-        mixinName = jsonDecoder.decodeString(
-            jsonPath + '.mixinName', json['mixinName']);
+        mixinName =
+            jsonDecoder.decodeString('$jsonPath.mixinName', json['mixinName']);
       }
       String? parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeString(
-            jsonPath + '.parameters', json['parameters']);
+            '$jsonPath.parameters', json['parameters']);
       }
       return ElementDeclaration(
           name, kind, fileIndex, offset, line, column, codeOffset, codeLength,
@@ -8598,14 +8593,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       ExecutableKind kind;
       if (json.containsKey('kind')) {
         kind = ExecutableKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
@@ -8727,7 +8722,7 @@
       String contextRoot;
       if (json.containsKey('contextRoot')) {
         contextRoot = jsonDecoder.decodeString(
-            jsonPath + '.contextRoot', json['contextRoot']);
+            '$jsonPath.contextRoot', json['contextRoot']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'contextRoot');
       }
@@ -8789,7 +8784,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -8853,7 +8848,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -8974,34 +8969,34 @@
     if (json is Map) {
       String code;
       if (json.containsKey('code')) {
-        code = jsonDecoder.decodeString(jsonPath + '.code', json['code']);
+        code = jsonDecoder.decodeString('$jsonPath.code', json['code']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'code');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       String contextFile;
       if (json.containsKey('contextFile')) {
         contextFile = jsonDecoder.decodeString(
-            jsonPath + '.contextFile', json['contextFile']);
+            '$jsonPath.contextFile', json['contextFile']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'contextFile');
       }
       int contextOffset;
       if (json.containsKey('contextOffset')) {
         contextOffset = jsonDecoder.decodeInt(
-            jsonPath + '.contextOffset', json['contextOffset']);
+            '$jsonPath.contextOffset', json['contextOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'contextOffset');
       }
       List<RuntimeCompletionVariable> variables;
       if (json.containsKey('variables')) {
         variables = jsonDecoder.decodeList(
-            jsonPath + '.variables',
+            '$jsonPath.variables',
             json['variables'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionVariable.fromJson(
@@ -9012,7 +9007,7 @@
       List<RuntimeCompletionExpression>? expressions;
       if (json.containsKey('expressions')) {
         expressions = jsonDecoder.decodeList(
-            jsonPath + '.expressions',
+            '$jsonPath.expressions',
             json['expressions'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpression.fromJson(
@@ -9125,7 +9120,7 @@
       List<CompletionSuggestion>? suggestions;
       if (json.containsKey('suggestions')) {
         suggestions = jsonDecoder.decodeList(
-            jsonPath + '.suggestions',
+            '$jsonPath.suggestions',
             json['suggestions'],
             (String jsonPath, Object? json) =>
                 CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -9133,7 +9128,7 @@
       List<RuntimeCompletionExpression>? expressions;
       if (json.containsKey('expressions')) {
         expressions = jsonDecoder.decodeList(
-            jsonPath + '.expressions',
+            '$jsonPath.expressions',
             json['expressions'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpression.fromJson(
@@ -9231,18 +9226,18 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       ExecutableKind? kind;
       if (json.containsKey('kind')) {
         kind = ExecutableKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       }
       List<String>? referencedFiles;
       if (json.containsKey('referencedFiles')) {
-        referencedFiles = jsonDecoder.decodeList(jsonPath + '.referencedFiles',
+        referencedFiles = jsonDecoder.decodeList('$jsonPath.referencedFiles',
             json['referencedFiles'], jsonDecoder.decodeString);
       }
       return ExecutionLaunchDataParams(file,
@@ -9326,17 +9321,17 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       String? file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       }
       String? uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeString(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeString('$jsonPath.uri', json['uri']);
       }
       return ExecutionMapUriParams(id, file: file, uri: uri);
     } else {
@@ -9413,11 +9408,11 @@
     if (json is Map) {
       String? file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       }
       String? uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeString(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeString('$jsonPath.uri', json['uri']);
       }
       return ExecutionMapUriResult(file: file, uri: uri);
     } else {
@@ -9533,7 +9528,7 @@
       List<ExecutionService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 ExecutionService.fromJson(jsonDecoder, jsonPath, json));
@@ -9629,14 +9624,14 @@
     if (json is Map) {
       int uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeInt(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeInt('$jsonPath.uri', json['uri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'uri');
       }
       List<int> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements', json['elements'], jsonDecoder.decodeInt);
+            '$jsonPath.elements', json['elements'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elements');
       }
@@ -9697,14 +9692,14 @@
       ImportedElementSet elements;
       if (json.containsKey('elements')) {
         elements = ImportedElementSet.fromJson(
-            jsonDecoder, jsonPath + '.elements', json['elements']);
+            jsonDecoder, '$jsonPath.elements', json['elements']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elements');
       }
       List<ExistingImport> imports;
       if (json.containsKey('imports')) {
         imports = jsonDecoder.decodeList(
-            jsonPath + '.imports',
+            '$jsonPath.imports',
             json['imports'],
             (String jsonPath, Object? json) =>
                 ExistingImport.fromJson(jsonDecoder, jsonPath, json));
@@ -9789,35 +9784,35 @@
       List<int>? coveringExpressionOffsets;
       if (json.containsKey('coveringExpressionOffsets')) {
         coveringExpressionOffsets = jsonDecoder.decodeList(
-            jsonPath + '.coveringExpressionOffsets',
+            '$jsonPath.coveringExpressionOffsets',
             json['coveringExpressionOffsets'],
             jsonDecoder.decodeInt);
       }
       List<int>? coveringExpressionLengths;
       if (json.containsKey('coveringExpressionLengths')) {
         coveringExpressionLengths = jsonDecoder.decodeList(
-            jsonPath + '.coveringExpressionLengths',
+            '$jsonPath.coveringExpressionLengths',
             json['coveringExpressionLengths'],
             jsonDecoder.decodeInt);
       }
       List<String> names;
       if (json.containsKey('names')) {
         names = jsonDecoder.decodeList(
-            jsonPath + '.names', json['names'], jsonDecoder.decodeString);
+            '$jsonPath.names', json['names'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'names');
       }
       List<int> offsets;
       if (json.containsKey('offsets')) {
         offsets = jsonDecoder.decodeList(
-            jsonPath + '.offsets', json['offsets'], jsonDecoder.decodeInt);
+            '$jsonPath.offsets', json['offsets'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offsets');
       }
       List<int> lengths;
       if (json.containsKey('lengths')) {
         lengths = jsonDecoder.decodeList(
-            jsonPath + '.lengths', json['lengths'], jsonDecoder.decodeInt);
+            '$jsonPath.lengths', json['lengths'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'lengths');
       }
@@ -9900,14 +9895,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       bool extractAll;
       if (json.containsKey('extractAll')) {
-        extractAll = jsonDecoder.decodeBool(
-            jsonPath + '.extractAll', json['extractAll']);
+        extractAll =
+            jsonDecoder.decodeBool('$jsonPath.extractAll', json['extractAll']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'extractAll');
       }
@@ -10005,41 +10000,41 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String returnType;
       if (json.containsKey('returnType')) {
         returnType = jsonDecoder.decodeString(
-            jsonPath + '.returnType', json['returnType']);
+            '$jsonPath.returnType', json['returnType']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'returnType');
       }
       List<String> names;
       if (json.containsKey('names')) {
         names = jsonDecoder.decodeList(
-            jsonPath + '.names', json['names'], jsonDecoder.decodeString);
+            '$jsonPath.names', json['names'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'names');
       }
       bool canCreateGetter;
       if (json.containsKey('canCreateGetter')) {
         canCreateGetter = jsonDecoder.decodeBool(
-            jsonPath + '.canCreateGetter', json['canCreateGetter']);
+            '$jsonPath.canCreateGetter', json['canCreateGetter']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'canCreateGetter');
       }
       List<RefactoringMethodParameter> parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeList(
-            jsonPath + '.parameters',
+            '$jsonPath.parameters',
             json['parameters'],
             (String jsonPath, Object? json) =>
                 RefactoringMethodParameter.fromJson(
@@ -10050,14 +10045,14 @@
       List<int> offsets;
       if (json.containsKey('offsets')) {
         offsets = jsonDecoder.decodeList(
-            jsonPath + '.offsets', json['offsets'], jsonDecoder.decodeInt);
+            '$jsonPath.offsets', json['offsets'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offsets');
       }
       List<int> lengths;
       if (json.containsKey('lengths')) {
         lengths = jsonDecoder.decodeList(
-            jsonPath + '.lengths', json['lengths'], jsonDecoder.decodeInt);
+            '$jsonPath.lengths', json['lengths'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'lengths');
       }
@@ -10168,27 +10163,27 @@
       String returnType;
       if (json.containsKey('returnType')) {
         returnType = jsonDecoder.decodeString(
-            jsonPath + '.returnType', json['returnType']);
+            '$jsonPath.returnType', json['returnType']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'returnType');
       }
       bool createGetter;
       if (json.containsKey('createGetter')) {
         createGetter = jsonDecoder.decodeBool(
-            jsonPath + '.createGetter', json['createGetter']);
+            '$jsonPath.createGetter', json['createGetter']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'createGetter');
       }
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       List<RefactoringMethodParameter> parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeList(
-            jsonPath + '.parameters',
+            '$jsonPath.parameters',
             json['parameters'],
             (String jsonPath, Object? json) =>
                 RefactoringMethodParameter.fromJson(
@@ -10198,8 +10193,8 @@
       }
       bool extractAll;
       if (json.containsKey('extractAll')) {
-        extractAll = jsonDecoder.decodeBool(
-            jsonPath + '.extractAll', json['extractAll']);
+        extractAll =
+            jsonDecoder.decodeBool('$jsonPath.extractAll', json['extractAll']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'extractAll');
       }
@@ -10317,7 +10312,7 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
@@ -10427,13 +10422,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -10503,7 +10498,7 @@
       List<FlutterWidgetProperty> properties;
       if (json.containsKey('properties')) {
         properties = jsonDecoder.decodeList(
-            jsonPath + '.properties',
+            '$jsonPath.properties',
             json['properties'],
             (String jsonPath, Object? json) =>
                 FlutterWidgetProperty.fromJson(jsonDecoder, jsonPath, json));
@@ -10637,73 +10632,72 @@
       FlutterOutlineKind kind;
       if (json.containsKey('kind')) {
         kind = FlutterOutlineKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       int codeOffset;
       if (json.containsKey('codeOffset')) {
         codeOffset =
-            jsonDecoder.decodeInt(jsonPath + '.codeOffset', json['codeOffset']);
+            jsonDecoder.decodeInt('$jsonPath.codeOffset', json['codeOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeOffset');
       }
       int codeLength;
       if (json.containsKey('codeLength')) {
         codeLength =
-            jsonDecoder.decodeInt(jsonPath + '.codeLength', json['codeLength']);
+            jsonDecoder.decodeInt('$jsonPath.codeLength', json['codeLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeLength');
       }
       String? label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       }
       Element? dartElement;
       if (json.containsKey('dartElement')) {
         dartElement = Element.fromJson(
-            jsonDecoder, jsonPath + '.dartElement', json['dartElement']);
+            jsonDecoder, '$jsonPath.dartElement', json['dartElement']);
       }
       List<FlutterOutlineAttribute>? attributes;
       if (json.containsKey('attributes')) {
         attributes = jsonDecoder.decodeList(
-            jsonPath + '.attributes',
+            '$jsonPath.attributes',
             json['attributes'],
             (String jsonPath, Object? json) =>
                 FlutterOutlineAttribute.fromJson(jsonDecoder, jsonPath, json));
       }
       String? className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       }
       String? parentAssociationLabel;
       if (json.containsKey('parentAssociationLabel')) {
         parentAssociationLabel = jsonDecoder.decodeString(
-            jsonPath + '.parentAssociationLabel',
-            json['parentAssociationLabel']);
+            '$jsonPath.parentAssociationLabel', json['parentAssociationLabel']);
       }
       String? variableName;
       if (json.containsKey('variableName')) {
         variableName = jsonDecoder.decodeString(
-            jsonPath + '.variableName', json['variableName']);
+            '$jsonPath.variableName', json['variableName']);
       }
       List<FlutterOutline>? children;
       if (json.containsKey('children')) {
         children = jsonDecoder.decodeList(
-            jsonPath + '.children',
+            '$jsonPath.children',
             json['children'],
             (String jsonPath, Object? json) =>
                 FlutterOutline.fromJson(jsonDecoder, jsonPath, json));
@@ -10863,40 +10857,40 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
       bool? literalValueBoolean;
       if (json.containsKey('literalValueBoolean')) {
         literalValueBoolean = jsonDecoder.decodeBool(
-            jsonPath + '.literalValueBoolean', json['literalValueBoolean']);
+            '$jsonPath.literalValueBoolean', json['literalValueBoolean']);
       }
       int? literalValueInteger;
       if (json.containsKey('literalValueInteger')) {
         literalValueInteger = jsonDecoder.decodeInt(
-            jsonPath + '.literalValueInteger', json['literalValueInteger']);
+            '$jsonPath.literalValueInteger', json['literalValueInteger']);
       }
       String? literalValueString;
       if (json.containsKey('literalValueString')) {
         literalValueString = jsonDecoder.decodeString(
-            jsonPath + '.literalValueString', json['literalValueString']);
+            '$jsonPath.literalValueString', json['literalValueString']);
       }
       Location? nameLocation;
       if (json.containsKey('nameLocation')) {
         nameLocation = Location.fromJson(
-            jsonDecoder, jsonPath + '.nameLocation', json['nameLocation']);
+            jsonDecoder, '$jsonPath.nameLocation', json['nameLocation']);
       }
       Location? valueLocation;
       if (json.containsKey('valueLocation')) {
         valueLocation = Location.fromJson(
-            jsonDecoder, jsonPath + '.valueLocation', json['valueLocation']);
+            jsonDecoder, '$jsonPath.valueLocation', json['valueLocation']);
       }
       return FlutterOutlineAttribute(name, label,
           literalValueBoolean: literalValueBoolean,
@@ -11077,14 +11071,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       FlutterOutline outline;
       if (json.containsKey('outline')) {
         outline = FlutterOutline.fromJson(
-            jsonDecoder, jsonPath + '.outline', json['outline']);
+            jsonDecoder, '$jsonPath.outline', json['outline']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'outline');
       }
@@ -11194,7 +11188,7 @@
       Map<FlutterService, List<String>> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeMap(
-            jsonPath + '.subscriptions', json['subscriptions'],
+            '$jsonPath.subscriptions', json['subscriptions'],
             keyDecoder: (String jsonPath, Object? json) =>
                 FlutterService.fromJson(jsonDecoder, jsonPath, json),
             valueDecoder: (String jsonPath, Object? json) => jsonDecoder
@@ -11305,14 +11299,14 @@
     if (json is Map) {
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       FlutterWidgetPropertyValue? value;
       if (json.containsKey('value')) {
         value = FlutterWidgetPropertyValue.fromJson(
-            jsonDecoder, jsonPath + '.value', json['value']);
+            jsonDecoder, '$jsonPath.value', json['value']);
       }
       return FlutterSetWidgetPropertyValueParams(id, value: value);
     } else {
@@ -11380,7 +11374,7 @@
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
@@ -11498,43 +11492,43 @@
       String? documentation;
       if (json.containsKey('documentation')) {
         documentation = jsonDecoder.decodeString(
-            jsonPath + '.documentation', json['documentation']);
+            '$jsonPath.documentation', json['documentation']);
       }
       String? expression;
       if (json.containsKey('expression')) {
         expression = jsonDecoder.decodeString(
-            jsonPath + '.expression', json['expression']);
+            '$jsonPath.expression', json['expression']);
       }
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       bool isRequired;
       if (json.containsKey('isRequired')) {
-        isRequired = jsonDecoder.decodeBool(
-            jsonPath + '.isRequired', json['isRequired']);
+        isRequired =
+            jsonDecoder.decodeBool('$jsonPath.isRequired', json['isRequired']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isRequired');
       }
       bool isSafeToUpdate;
       if (json.containsKey('isSafeToUpdate')) {
         isSafeToUpdate = jsonDecoder.decodeBool(
-            jsonPath + '.isSafeToUpdate', json['isSafeToUpdate']);
+            '$jsonPath.isSafeToUpdate', json['isSafeToUpdate']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isSafeToUpdate');
       }
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       List<FlutterWidgetProperty>? children;
       if (json.containsKey('children')) {
         children = jsonDecoder.decodeList(
-            jsonPath + '.children',
+            '$jsonPath.children',
             json['children'],
             (String jsonPath, Object? json) =>
                 FlutterWidgetProperty.fromJson(jsonDecoder, jsonPath, json));
@@ -11542,12 +11536,12 @@
       FlutterWidgetPropertyEditor? editor;
       if (json.containsKey('editor')) {
         editor = FlutterWidgetPropertyEditor.fromJson(
-            jsonDecoder, jsonPath + '.editor', json['editor']);
+            jsonDecoder, '$jsonPath.editor', json['editor']);
       }
       FlutterWidgetPropertyValue? value;
       if (json.containsKey('value')) {
         value = FlutterWidgetPropertyValue.fromJson(
-            jsonDecoder, jsonPath + '.value', json['value']);
+            jsonDecoder, '$jsonPath.value', json['value']);
       }
       return FlutterWidgetProperty(id, isRequired, isSafeToUpdate, name,
           documentation: documentation,
@@ -11648,14 +11642,14 @@
       FlutterWidgetPropertyEditorKind kind;
       if (json.containsKey('kind')) {
         kind = FlutterWidgetPropertyEditorKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       List<FlutterWidgetPropertyValueEnumItem>? enumItems;
       if (json.containsKey('enumItems')) {
         enumItems = jsonDecoder.decodeList(
-            jsonPath + '.enumItems',
+            '$jsonPath.enumItems',
             json['enumItems'],
             (String jsonPath, Object? json) =>
                 FlutterWidgetPropertyValueEnumItem.fromJson(
@@ -11838,32 +11832,32 @@
       bool? boolValue;
       if (json.containsKey('boolValue')) {
         boolValue =
-            jsonDecoder.decodeBool(jsonPath + '.boolValue', json['boolValue']);
+            jsonDecoder.decodeBool('$jsonPath.boolValue', json['boolValue']);
       }
       double? doubleValue;
       if (json.containsKey('doubleValue')) {
         doubleValue = jsonDecoder.decodeDouble(
-            jsonPath + '.doubleValue', json['doubleValue'] as Object);
+            '$jsonPath.doubleValue', json['doubleValue'] as Object);
       }
       int? intValue;
       if (json.containsKey('intValue')) {
         intValue =
-            jsonDecoder.decodeInt(jsonPath + '.intValue', json['intValue']);
+            jsonDecoder.decodeInt('$jsonPath.intValue', json['intValue']);
       }
       String? stringValue;
       if (json.containsKey('stringValue')) {
         stringValue = jsonDecoder.decodeString(
-            jsonPath + '.stringValue', json['stringValue']);
+            '$jsonPath.stringValue', json['stringValue']);
       }
       FlutterWidgetPropertyValueEnumItem? enumValue;
       if (json.containsKey('enumValue')) {
         enumValue = FlutterWidgetPropertyValueEnumItem.fromJson(
-            jsonDecoder, jsonPath + '.enumValue', json['enumValue']);
+            jsonDecoder, '$jsonPath.enumValue', json['enumValue']);
       }
       String? expression;
       if (json.containsKey('expression')) {
         expression = jsonDecoder.decodeString(
-            jsonPath + '.expression', json['expression']);
+            '$jsonPath.expression', json['expression']);
       }
       return FlutterWidgetPropertyValue(
           boolValue: boolValue,
@@ -11972,27 +11966,27 @@
       String libraryUri;
       if (json.containsKey('libraryUri')) {
         libraryUri = jsonDecoder.decodeString(
-            jsonPath + '.libraryUri', json['libraryUri']);
+            '$jsonPath.libraryUri', json['libraryUri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraryUri');
       }
       String className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'className');
       }
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       String? documentation;
       if (json.containsKey('documentation')) {
         documentation = jsonDecoder.decodeString(
-            jsonPath + '.documentation', json['documentation']);
+            '$jsonPath.documentation', json['documentation']);
       }
       return FlutterWidgetPropertyValueEnumItem(libraryUri, className, name,
           documentation: documentation);
@@ -12178,66 +12172,66 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String? containingLibraryPath;
       if (json.containsKey('containingLibraryPath')) {
         containingLibraryPath = jsonDecoder.decodeString(
-            jsonPath + '.containingLibraryPath', json['containingLibraryPath']);
+            '$jsonPath.containingLibraryPath', json['containingLibraryPath']);
       }
       String? containingLibraryName;
       if (json.containsKey('containingLibraryName')) {
         containingLibraryName = jsonDecoder.decodeString(
-            jsonPath + '.containingLibraryName', json['containingLibraryName']);
+            '$jsonPath.containingLibraryName', json['containingLibraryName']);
       }
       String? containingClassDescription;
       if (json.containsKey('containingClassDescription')) {
         containingClassDescription = jsonDecoder.decodeString(
-            jsonPath + '.containingClassDescription',
+            '$jsonPath.containingClassDescription',
             json['containingClassDescription']);
       }
       String? dartdoc;
       if (json.containsKey('dartdoc')) {
         dartdoc =
-            jsonDecoder.decodeString(jsonPath + '.dartdoc', json['dartdoc']);
+            jsonDecoder.decodeString('$jsonPath.dartdoc', json['dartdoc']);
       }
       String? elementDescription;
       if (json.containsKey('elementDescription')) {
         elementDescription = jsonDecoder.decodeString(
-            jsonPath + '.elementDescription', json['elementDescription']);
+            '$jsonPath.elementDescription', json['elementDescription']);
       }
       String? elementKind;
       if (json.containsKey('elementKind')) {
         elementKind = jsonDecoder.decodeString(
-            jsonPath + '.elementKind', json['elementKind']);
+            '$jsonPath.elementKind', json['elementKind']);
       }
       bool? isDeprecated;
       if (json.containsKey('isDeprecated')) {
         isDeprecated = jsonDecoder.decodeBool(
-            jsonPath + '.isDeprecated', json['isDeprecated']);
+            '$jsonPath.isDeprecated', json['isDeprecated']);
       }
       String? parameter;
       if (json.containsKey('parameter')) {
-        parameter = jsonDecoder.decodeString(
-            jsonPath + '.parameter', json['parameter']);
+        parameter =
+            jsonDecoder.decodeString('$jsonPath.parameter', json['parameter']);
       }
       String? propagatedType;
       if (json.containsKey('propagatedType')) {
         propagatedType = jsonDecoder.decodeString(
-            jsonPath + '.propagatedType', json['propagatedType']);
+            '$jsonPath.propagatedType', json['propagatedType']);
       }
       String? staticType;
       if (json.containsKey('staticType')) {
         staticType = jsonDecoder.decodeString(
-            jsonPath + '.staticType', json['staticType']);
+            '$jsonPath.staticType', json['staticType']);
       }
       return HoverInformation(offset, length,
           containingLibraryPath: containingLibraryPath,
@@ -12365,13 +12359,13 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -12430,13 +12424,13 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -12500,21 +12494,21 @@
       List<String> strings;
       if (json.containsKey('strings')) {
         strings = jsonDecoder.decodeList(
-            jsonPath + '.strings', json['strings'], jsonDecoder.decodeString);
+            '$jsonPath.strings', json['strings'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'strings');
       }
       List<int> uris;
       if (json.containsKey('uris')) {
         uris = jsonDecoder.decodeList(
-            jsonPath + '.uris', json['uris'], jsonDecoder.decodeInt);
+            '$jsonPath.uris', json['uris'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'uris');
       }
       List<int> names;
       if (json.containsKey('names')) {
         names = jsonDecoder.decodeList(
-            jsonPath + '.names', json['names'], jsonDecoder.decodeInt);
+            '$jsonPath.names', json['names'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'names');
       }
@@ -12583,20 +12577,20 @@
     if (json is Map) {
       String path;
       if (json.containsKey('path')) {
-        path = jsonDecoder.decodeString(jsonPath + '.path', json['path']);
+        path = jsonDecoder.decodeString('$jsonPath.path', json['path']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'path');
       }
       String prefix;
       if (json.containsKey('prefix')) {
-        prefix = jsonDecoder.decodeString(jsonPath + '.prefix', json['prefix']);
+        prefix = jsonDecoder.decodeString('$jsonPath.prefix', json['prefix']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'prefix');
       }
       List<String> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements', json['elements'], jsonDecoder.decodeString);
+            '$jsonPath.elements', json['elements'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elements');
       }
@@ -12661,14 +12655,14 @@
     if (json is Map) {
       String tag;
       if (json.containsKey('tag')) {
-        tag = jsonDecoder.decodeString(jsonPath + '.tag', json['tag']);
+        tag = jsonDecoder.decodeString('$jsonPath.tag', json['tag']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'tag');
       }
       int relevanceBoost;
       if (json.containsKey('relevanceBoost')) {
         relevanceBoost = jsonDecoder.decodeInt(
-            jsonPath + '.relevanceBoost', json['relevanceBoost']);
+            '$jsonPath.relevanceBoost', json['relevanceBoost']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'relevanceBoost');
       }
@@ -12740,21 +12734,21 @@
     if (json is Map) {
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       int relevance;
       if (json.containsKey('relevance')) {
         relevance =
-            jsonDecoder.decodeInt(jsonPath + '.relevance', json['relevance']);
+            jsonDecoder.decodeInt('$jsonPath.relevance', json['relevance']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'relevance');
       }
       String? displayUri;
       if (json.containsKey('displayUri')) {
         displayUri = jsonDecoder.decodeString(
-            jsonPath + '.displayUri', json['displayUri']);
+            '$jsonPath.displayUri', json['displayUri']);
       }
       return IncludedSuggestionSet(id, relevance, displayUri: displayUri);
     } else {
@@ -12818,14 +12812,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       int occurrences;
       if (json.containsKey('occurrences')) {
-        occurrences = jsonDecoder.decodeInt(
-            jsonPath + '.occurrences', json['occurrences']);
+        occurrences =
+            jsonDecoder.decodeInt('$jsonPath.occurrences', json['occurrences']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'occurrences');
       }
@@ -12908,20 +12902,20 @@
     if (json is Map) {
       String? className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       }
       String methodName;
       if (json.containsKey('methodName')) {
         methodName = jsonDecoder.decodeString(
-            jsonPath + '.methodName', json['methodName']);
+            '$jsonPath.methodName', json['methodName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'methodName');
       }
       bool isDeclaration;
       if (json.containsKey('isDeclaration')) {
         isDeclaration = jsonDecoder.decodeBool(
-            jsonPath + '.isDeclaration', json['isDeclaration']);
+            '$jsonPath.isDeclaration', json['isDeclaration']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isDeclaration');
       }
@@ -12991,14 +12985,14 @@
       bool deleteSource;
       if (json.containsKey('deleteSource')) {
         deleteSource = jsonDecoder.decodeBool(
-            jsonPath + '.deleteSource', json['deleteSource']);
+            '$jsonPath.deleteSource', json['deleteSource']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'deleteSource');
       }
       bool inlineAll;
       if (json.containsKey('inlineAll')) {
         inlineAll =
-            jsonDecoder.decodeBool(jsonPath + '.inlineAll', json['inlineAll']);
+            jsonDecoder.decodeBool('$jsonPath.inlineAll', json['inlineAll']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'inlineAll');
       }
@@ -13060,7 +13054,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -13130,7 +13124,7 @@
       List<KytheEntry> entries;
       if (json.containsKey('entries')) {
         entries = jsonDecoder.decodeList(
-            jsonPath + '.entries',
+            '$jsonPath.entries',
             json['entries'],
             (String jsonPath, Object? json) =>
                 KytheEntry.fromJson(jsonDecoder, jsonPath, json));
@@ -13140,7 +13134,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -13218,13 +13212,13 @@
     if (json is Map) {
       String scope;
       if (json.containsKey('scope')) {
-        scope = jsonDecoder.decodeString(jsonPath + '.scope', json['scope']);
+        scope = jsonDecoder.decodeString('$jsonPath.scope', json['scope']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'scope');
       }
       List<String> libraryPaths;
       if (json.containsKey('libraryPaths')) {
-        libraryPaths = jsonDecoder.decodeList(jsonPath + '.libraryPaths',
+        libraryPaths = jsonDecoder.decodeList('$jsonPath.libraryPaths',
             json['libraryPaths'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraryPaths');
@@ -13299,7 +13293,7 @@
       String newFile;
       if (json.containsKey('newFile')) {
         newFile =
-            jsonDecoder.decodeString(jsonPath + '.newFile', json['newFile']);
+            jsonDecoder.decodeString('$jsonPath.newFile', json['newFile']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'newFile');
       }
@@ -13360,15 +13354,15 @@
     if (json is Map) {
       Element element;
       if (json.containsKey('element')) {
-        element = Element.fromJson(
-            jsonDecoder, jsonPath + '.element', json['element']);
+        element =
+            Element.fromJson(jsonDecoder, '$jsonPath.element', json['element']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'element');
       }
       String className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'className');
       }
@@ -13440,25 +13434,25 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       OverriddenMember? superclassMember;
       if (json.containsKey('superclassMember')) {
         superclassMember = OverriddenMember.fromJson(jsonDecoder,
-            jsonPath + '.superclassMember', json['superclassMember']);
+            '$jsonPath.superclassMember', json['superclassMember']);
       }
       List<OverriddenMember>? interfaceMembers;
       if (json.containsKey('interfaceMembers')) {
         interfaceMembers = jsonDecoder.decodeList(
-            jsonPath + '.interfaceMembers',
+            '$jsonPath.interfaceMembers',
             json['interfaceMembers'],
             (String jsonPath, Object? json) =>
                 OverriddenMember.fromJson(jsonDecoder, jsonPath, json));
@@ -13541,20 +13535,20 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       String key;
       if (json.containsKey('key')) {
-        key = jsonDecoder.decodeString(jsonPath + '.key', json['key']);
+        key = jsonDecoder.decodeString('$jsonPath.key', json['key']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'key');
       }
       String example;
       if (json.containsKey('example')) {
         example =
-            jsonDecoder.decodeString(jsonPath + '.example', json['example']);
+            jsonDecoder.decodeString('$jsonPath.example', json['example']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'example');
       }
@@ -13613,7 +13607,7 @@
       bool isListingPackageDirs;
       if (json.containsKey('isListingPackageDirs')) {
         isListingPackageDirs = jsonDecoder.decodeBool(
-            jsonPath + '.isListingPackageDirs', json['isListingPackageDirs']);
+            '$jsonPath.isListingPackageDirs', json['isListingPackageDirs']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isListingPackageDirs');
       }
@@ -13749,27 +13743,27 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String elementKindName;
       if (json.containsKey('elementKindName')) {
         elementKindName = jsonDecoder.decodeString(
-            jsonPath + '.elementKindName', json['elementKindName']);
+            '$jsonPath.elementKindName', json['elementKindName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elementKindName');
       }
       String oldName;
       if (json.containsKey('oldName')) {
         oldName =
-            jsonDecoder.decodeString(jsonPath + '.oldName', json['oldName']);
+            jsonDecoder.decodeString('$jsonPath.oldName', json['oldName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'oldName');
       }
@@ -13832,7 +13826,7 @@
       String newName;
       if (json.containsKey('newName')) {
         newName =
-            jsonDecoder.decodeString(jsonPath + '.newName', json['newName']);
+            jsonDecoder.decodeString('$jsonPath.newName', json['newName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'newName');
       }
@@ -13899,21 +13893,21 @@
       RequestErrorCode code;
       if (json.containsKey('code')) {
         code = RequestErrorCode.fromJson(
-            jsonDecoder, jsonPath + '.code', json['code']);
+            jsonDecoder, '$jsonPath.code', json['code']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'code');
       }
       String message;
       if (json.containsKey('message')) {
         message =
-            jsonDecoder.decodeString(jsonPath + '.message', json['message']);
+            jsonDecoder.decodeString('$jsonPath.message', json['message']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'message');
       }
       String? stackTrace;
       if (json.containsKey('stackTrace')) {
         stackTrace = jsonDecoder.decodeString(
-            jsonPath + '.stackTrace', json['stackTrace']);
+            '$jsonPath.stackTrace', json['stackTrace']);
       }
       return RequestError(code, message, stackTrace: stackTrace);
     } else {
@@ -14332,20 +14326,20 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       RuntimeCompletionExpressionType? type;
       if (json.containsKey('type')) {
         type = RuntimeCompletionExpressionType.fromJson(
-            jsonDecoder, jsonPath + '.type', json['type']);
+            jsonDecoder, '$jsonPath.type', json['type']);
       }
       return RuntimeCompletionExpression(offset, length, type: type);
     } else {
@@ -14445,23 +14439,23 @@
       String? libraryPath;
       if (json.containsKey('libraryPath')) {
         libraryPath = jsonDecoder.decodeString(
-            jsonPath + '.libraryPath', json['libraryPath']);
+            '$jsonPath.libraryPath', json['libraryPath']);
       }
       RuntimeCompletionExpressionTypeKind kind;
       if (json.containsKey('kind')) {
         kind = RuntimeCompletionExpressionTypeKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String? name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       }
       List<RuntimeCompletionExpressionType>? typeArguments;
       if (json.containsKey('typeArguments')) {
         typeArguments = jsonDecoder.decodeList(
-            jsonPath + '.typeArguments',
+            '$jsonPath.typeArguments',
             json['typeArguments'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpressionType.fromJson(
@@ -14470,12 +14464,12 @@
       RuntimeCompletionExpressionType? returnType;
       if (json.containsKey('returnType')) {
         returnType = RuntimeCompletionExpressionType.fromJson(
-            jsonDecoder, jsonPath + '.returnType', json['returnType']);
+            jsonDecoder, '$jsonPath.returnType', json['returnType']);
       }
       List<RuntimeCompletionExpressionType>? parameterTypes;
       if (json.containsKey('parameterTypes')) {
         parameterTypes = jsonDecoder.decodeList(
-            jsonPath + '.parameterTypes',
+            '$jsonPath.parameterTypes',
             json['parameterTypes'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpressionType.fromJson(
@@ -14483,7 +14477,7 @@
       }
       List<String>? parameterNames;
       if (json.containsKey('parameterNames')) {
-        parameterNames = jsonDecoder.decodeList(jsonPath + '.parameterNames',
+        parameterNames = jsonDecoder.decodeList('$jsonPath.parameterNames',
             json['parameterNames'], jsonDecoder.decodeString);
       }
       return RuntimeCompletionExpressionType(kind,
@@ -14658,14 +14652,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       RuntimeCompletionExpressionType type;
       if (json.containsKey('type')) {
         type = RuntimeCompletionExpressionType.fromJson(
-            jsonDecoder, jsonPath + '.type', json['type']);
+            jsonDecoder, '$jsonPath.type', json['type']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'type');
       }
@@ -14731,20 +14725,20 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       bool includePotential;
       if (json.containsKey('includePotential')) {
         includePotential = jsonDecoder.decodeBool(
-            jsonPath + '.includePotential', json['includePotential']);
+            '$jsonPath.includePotential', json['includePotential']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'includePotential');
       }
@@ -14824,12 +14818,12 @@
     if (json is Map) {
       String? id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       }
       Element? element;
       if (json.containsKey('element')) {
-        element = Element.fromJson(
-            jsonDecoder, jsonPath + '.element', json['element']);
+        element =
+            Element.fromJson(jsonDecoder, '$jsonPath.element', json['element']);
       }
       return SearchFindElementReferencesResult(id: id, element: element);
     } else {
@@ -14901,7 +14895,7 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
@@ -14963,7 +14957,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -15027,7 +15021,7 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
@@ -15089,7 +15083,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -15155,7 +15149,7 @@
       String pattern;
       if (json.containsKey('pattern')) {
         pattern =
-            jsonDecoder.decodeString(jsonPath + '.pattern', json['pattern']);
+            jsonDecoder.decodeString('$jsonPath.pattern', json['pattern']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'pattern');
       }
@@ -15217,7 +15211,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -15293,17 +15287,17 @@
     if (json is Map) {
       String? file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       }
       String? pattern;
       if (json.containsKey('pattern')) {
         pattern =
-            jsonDecoder.decodeString(jsonPath + '.pattern', json['pattern']);
+            jsonDecoder.decodeString('$jsonPath.pattern', json['pattern']);
       }
       int? maxResults;
       if (json.containsKey('maxResults')) {
         maxResults =
-            jsonDecoder.decodeInt(jsonPath + '.maxResults', json['maxResults']);
+            jsonDecoder.decodeInt('$jsonPath.maxResults', json['maxResults']);
       }
       return SearchGetElementDeclarationsParams(
           file: file, pattern: pattern, maxResults: maxResults);
@@ -15386,7 +15380,7 @@
       List<ElementDeclaration> declarations;
       if (json.containsKey('declarations')) {
         declarations = jsonDecoder.decodeList(
-            jsonPath + '.declarations',
+            '$jsonPath.declarations',
             json['declarations'],
             (String jsonPath, Object? json) =>
                 ElementDeclaration.fromJson(jsonDecoder, jsonPath, json));
@@ -15396,7 +15390,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -15477,20 +15471,20 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       bool? superOnly;
       if (json.containsKey('superOnly')) {
         superOnly =
-            jsonDecoder.decodeBool(jsonPath + '.superOnly', json['superOnly']);
+            jsonDecoder.decodeBool('$jsonPath.superOnly', json['superOnly']);
       }
       return SearchGetTypeHierarchyParams(file, offset, superOnly: superOnly);
     } else {
@@ -15570,7 +15564,7 @@
       List<TypeHierarchyItem>? hierarchyItems;
       if (json.containsKey('hierarchyItems')) {
         hierarchyItems = jsonDecoder.decodeList(
-            jsonPath + '.hierarchyItems',
+            '$jsonPath.hierarchyItems',
             json['hierarchyItems'],
             (String jsonPath, Object? json) =>
                 TypeHierarchyItem.fromJson(jsonDecoder, jsonPath, json));
@@ -15659,28 +15653,28 @@
       Location location;
       if (json.containsKey('location')) {
         location = Location.fromJson(
-            jsonDecoder, jsonPath + '.location', json['location']);
+            jsonDecoder, '$jsonPath.location', json['location']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'location');
       }
       SearchResultKind kind;
       if (json.containsKey('kind')) {
         kind = SearchResultKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       bool isPotential;
       if (json.containsKey('isPotential')) {
         isPotential = jsonDecoder.decodeBool(
-            jsonPath + '.isPotential', json['isPotential']);
+            '$jsonPath.isPotential', json['isPotential']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isPotential');
       }
       List<Element> path;
       if (json.containsKey('path')) {
         path = jsonDecoder.decodeList(
-            jsonPath + '.path',
+            '$jsonPath.path',
             json['path'],
             (String jsonPath, Object? json) =>
                 Element.fromJson(jsonDecoder, jsonPath, json));
@@ -15844,14 +15838,14 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       List<SearchResult> results;
       if (json.containsKey('results')) {
         results = jsonDecoder.decodeList(
-            jsonPath + '.results',
+            '$jsonPath.results',
             json['results'],
             (String jsonPath, Object? json) =>
                 SearchResult.fromJson(jsonDecoder, jsonPath, json));
@@ -15860,7 +15854,7 @@
       }
       bool isLast;
       if (json.containsKey('isLast')) {
-        isLast = jsonDecoder.decodeBool(jsonPath + '.isLast', json['isLast']);
+        isLast = jsonDecoder.decodeBool('$jsonPath.isLast', json['isLast']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isLast');
       }
@@ -15930,7 +15924,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -16020,13 +16014,13 @@
       String version;
       if (json.containsKey('version')) {
         version =
-            jsonDecoder.decodeString(jsonPath + '.version', json['version']);
+            jsonDecoder.decodeString('$jsonPath.version', json['version']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'version');
       }
       int pid;
       if (json.containsKey('pid')) {
-        pid = jsonDecoder.decodeInt(jsonPath + '.pid', json['pid']);
+        pid = jsonDecoder.decodeInt('$jsonPath.pid', json['pid']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'pid');
       }
@@ -16100,22 +16094,21 @@
     if (json is Map) {
       bool isFatal;
       if (json.containsKey('isFatal')) {
-        isFatal =
-            jsonDecoder.decodeBool(jsonPath + '.isFatal', json['isFatal']);
+        isFatal = jsonDecoder.decodeBool('$jsonPath.isFatal', json['isFatal']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isFatal');
       }
       String message;
       if (json.containsKey('message')) {
         message =
-            jsonDecoder.decodeString(jsonPath + '.message', json['message']);
+            jsonDecoder.decodeString('$jsonPath.message', json['message']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'message');
       }
       String stackTrace;
       if (json.containsKey('stackTrace')) {
         stackTrace = jsonDecoder.decodeString(
-            jsonPath + '.stackTrace', json['stackTrace']);
+            '$jsonPath.stackTrace', json['stackTrace']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'stackTrace');
       }
@@ -16208,7 +16201,7 @@
       String version;
       if (json.containsKey('version')) {
         version =
-            jsonDecoder.decodeString(jsonPath + '.version', json['version']);
+            jsonDecoder.decodeString('$jsonPath.version', json['version']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'version');
       }
@@ -16282,20 +16275,20 @@
     if (json is Map) {
       int time;
       if (json.containsKey('time')) {
-        time = jsonDecoder.decodeInt(jsonPath + '.time', json['time']);
+        time = jsonDecoder.decodeInt('$jsonPath.time', json['time']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'time');
       }
       ServerLogEntryKind kind;
       if (json.containsKey('kind')) {
         kind = ServerLogEntryKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String data;
       if (json.containsKey('data')) {
-        data = jsonDecoder.decodeString(jsonPath + '.data', json['data']);
+        data = jsonDecoder.decodeString('$jsonPath.data', json['data']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'data');
       }
@@ -16439,7 +16432,7 @@
       ServerLogEntry entry;
       if (json.containsKey('entry')) {
         entry = ServerLogEntry.fromJson(
-            jsonDecoder, jsonPath + '.entry', json['entry']);
+            jsonDecoder, '$jsonPath.entry', json['entry']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'entry');
       }
@@ -16549,7 +16542,7 @@
       List<ServerService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 ServerService.fromJson(jsonDecoder, jsonPath, json));
@@ -16698,11 +16691,11 @@
       AnalysisStatus? analysis;
       if (json.containsKey('analysis')) {
         analysis = AnalysisStatus.fromJson(
-            jsonDecoder, jsonPath + '.analysis', json['analysis']);
+            jsonDecoder, '$jsonPath.analysis', json['analysis']);
       }
       PubStatus? pub;
       if (json.containsKey('pub')) {
-        pub = PubStatus.fromJson(jsonDecoder, jsonPath + '.pub', json['pub']);
+        pub = PubStatus.fromJson(jsonDecoder, '$jsonPath.pub', json['pub']);
       }
       return ServerStatusParams(analysis: analysis, pub: pub);
     } else {
@@ -16816,43 +16809,43 @@
       Element classElement;
       if (json.containsKey('classElement')) {
         classElement = Element.fromJson(
-            jsonDecoder, jsonPath + '.classElement', json['classElement']);
+            jsonDecoder, '$jsonPath.classElement', json['classElement']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'classElement');
       }
       String? displayName;
       if (json.containsKey('displayName')) {
         displayName = jsonDecoder.decodeString(
-            jsonPath + '.displayName', json['displayName']);
+            '$jsonPath.displayName', json['displayName']);
       }
       Element? memberElement;
       if (json.containsKey('memberElement')) {
         memberElement = Element.fromJson(
-            jsonDecoder, jsonPath + '.memberElement', json['memberElement']);
+            jsonDecoder, '$jsonPath.memberElement', json['memberElement']);
       }
       int? superclass;
       if (json.containsKey('superclass')) {
         superclass =
-            jsonDecoder.decodeInt(jsonPath + '.superclass', json['superclass']);
+            jsonDecoder.decodeInt('$jsonPath.superclass', json['superclass']);
       }
       List<int> interfaces;
       if (json.containsKey('interfaces')) {
-        interfaces = jsonDecoder.decodeList(jsonPath + '.interfaces',
-            json['interfaces'], jsonDecoder.decodeInt);
+        interfaces = jsonDecoder.decodeList(
+            '$jsonPath.interfaces', json['interfaces'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'interfaces');
       }
       List<int> mixins;
       if (json.containsKey('mixins')) {
         mixins = jsonDecoder.decodeList(
-            jsonPath + '.mixins', json['mixins'], jsonDecoder.decodeInt);
+            '$jsonPath.mixins', json['mixins'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'mixins');
       }
       List<int> subclasses;
       if (json.containsKey('subclasses')) {
-        subclasses = jsonDecoder.decodeList(jsonPath + '.subclasses',
-            json['subclasses'], jsonDecoder.decodeInt);
+        subclasses = jsonDecoder.decodeList(
+            '$jsonPath.subclasses', json['subclasses'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'subclasses');
       }
diff --git a/pkg/analysis_server/test/integration/support/integration_test_methods.dart b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
index 98d2823..14d35b7 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 /// Convenience methods for running integration tests.
 import 'dart:async';
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index 3e1fb05..b006a51 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 /// Matchers for data types defined in the analysis server API.
 import 'package:test/test.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
index d6935bf..9566809 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
@@ -584,7 +584,7 @@
         for (var field in type.fields) {
           var fieldNameString = literalString(field.name);
           var fieldAccessor = 'json[$fieldNameString]';
-          var jsonPath = 'jsonPath + ${literalString('.${field.name}')}';
+          var jsonPath = literalString('\$jsonPath.${field.name}');
           var fieldValue = field.value;
           if (fieldValue is String) {
             var valueString = literalString(fieldValue);
diff --git a/pkg/analysis_server_client/lib/handler/notification_handler.dart b/pkg/analysis_server_client/lib/handler/notification_handler.dart
index 8394584..b71e1c6 100644
--- a/pkg/analysis_server_client/lib/handler/notification_handler.dart
+++ b/pkg/analysis_server_client/lib/handler/notification_handler.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 import 'package:analysis_server_client/protocol.dart';
 
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
index 749b941..363d7e8 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 import 'dart:convert' hide JsonDecoder;
 
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
index cc63b35..e1e3e17 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 const String PROTOCOL_VERSION = '1.33.0';
 
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
index dd65279..a42ade2 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 import 'dart:convert' hide JsonDecoder;
 
@@ -34,7 +33,7 @@
     if (json is Map) {
       List<String> directories;
       if (json.containsKey('directories')) {
-        directories = jsonDecoder.decodeList(jsonPath + '.directories',
+        directories = jsonDecoder.decodeList('$jsonPath.directories',
             json['directories'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'directories');
@@ -108,14 +107,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<ClosingLabel> labels;
       if (json.containsKey('labels')) {
         labels = jsonDecoder.decodeList(
-            jsonPath + '.labels',
+            '$jsonPath.labels',
             json['labels'],
             (String jsonPath, Object? json) =>
                 ClosingLabel.fromJson(jsonDecoder, jsonPath, json));
@@ -193,14 +192,14 @@
       AnalysisError error;
       if (json.containsKey('error')) {
         error = AnalysisError.fromJson(
-            jsonDecoder, jsonPath + '.error', json['error']);
+            jsonDecoder, '$jsonPath.error', json['error']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'error');
       }
       List<SourceChange> fixes;
       if (json.containsKey('fixes')) {
         fixes = jsonDecoder.decodeList(
-            jsonPath + '.fixes',
+            '$jsonPath.fixes',
             json['fixes'],
             (String jsonPath, Object? json) =>
                 SourceChange.fromJson(jsonDecoder, jsonPath, json));
@@ -265,14 +264,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<AnalysisError> errors;
       if (json.containsKey('errors')) {
         errors = jsonDecoder.decodeList(
-            jsonPath + '.errors',
+            '$jsonPath.errors',
             json['errors'],
             (String jsonPath, Object? json) =>
                 AnalysisError.fromJson(jsonDecoder, jsonPath, json));
@@ -343,7 +342,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -409,14 +408,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<FoldingRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 FoldingRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -486,7 +485,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -548,7 +547,7 @@
       List<AnalysisError> errors;
       if (json.containsKey('errors')) {
         errors = jsonDecoder.decodeList(
-            jsonPath + '.errors',
+            '$jsonPath.errors',
             json['errors'],
             (String jsonPath, Object? json) =>
                 AnalysisError.fromJson(jsonDecoder, jsonPath, json));
@@ -620,13 +619,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -696,7 +695,7 @@
       List<HoverInformation> hovers;
       if (json.containsKey('hovers')) {
         hovers = jsonDecoder.decodeList(
-            jsonPath + '.hovers',
+            '$jsonPath.hovers',
             json['hovers'],
             (String jsonPath, Object? json) =>
                 HoverInformation.fromJson(jsonDecoder, jsonPath, json));
@@ -772,19 +771,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -856,7 +855,7 @@
       List<ImportedElements> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements',
+            '$jsonPath.elements',
             json['elements'],
             (String jsonPath, Object? json) =>
                 ImportedElements.fromJson(jsonDecoder, jsonPath, json));
@@ -956,15 +955,15 @@
     if (json is Map) {
       List<String> libraries;
       if (json.containsKey('libraries')) {
-        libraries = jsonDecoder.decodeList(jsonPath + '.libraries',
-            json['libraries'], jsonDecoder.decodeString);
+        libraries = jsonDecoder.decodeList(
+            '$jsonPath.libraries', json['libraries'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraries');
       }
       Map<String, Map<String, List<String>>> packageMap;
       if (json.containsKey('packageMap')) {
         packageMap = jsonDecoder.decodeMap(
-            jsonPath + '.packageMap', json['packageMap'],
+            '$jsonPath.packageMap', json['packageMap'],
             valueDecoder: (String jsonPath, Object? json) =>
                 jsonDecoder.decodeMap(jsonPath, json,
                     valueDecoder: (String jsonPath, Object? json) => jsonDecoder
@@ -1056,19 +1055,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -1149,14 +1148,14 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
       List<NavigationTarget> targets;
       if (json.containsKey('targets')) {
         targets = jsonDecoder.decodeList(
-            jsonPath + '.targets',
+            '$jsonPath.targets',
             json['targets'],
             (String jsonPath, Object? json) =>
                 NavigationTarget.fromJson(jsonDecoder, jsonPath, json));
@@ -1166,7 +1165,7 @@
       List<NavigationRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 NavigationRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -1245,7 +1244,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -1313,7 +1312,7 @@
     if (json is Map) {
       Map<String, List<String>> sources;
       if (json.containsKey('sources')) {
-        sources = jsonDecoder.decodeMap(jsonPath + '.sources', json['sources'],
+        sources = jsonDecoder.decodeMap('$jsonPath.sources', json['sources'],
             valueDecoder: (String jsonPath, Object? json) => jsonDecoder
                 .decodeList(jsonPath, json, jsonDecoder.decodeString));
       } else {
@@ -1387,13 +1386,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -1472,14 +1471,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       List<ParameterInfo> parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeList(
-            jsonPath + '.parameters',
+            '$jsonPath.parameters',
             json['parameters'],
             (String jsonPath, Object? json) =>
                 ParameterInfo.fromJson(jsonDecoder, jsonPath, json));
@@ -1489,7 +1488,7 @@
       String? dartdoc;
       if (json.containsKey('dartdoc')) {
         dartdoc =
-            jsonDecoder.decodeString(jsonPath + '.dartdoc', json['dartdoc']);
+            jsonDecoder.decodeString('$jsonPath.dartdoc', json['dartdoc']);
       }
       return AnalysisGetSignatureResult(name, parameters, dartdoc: dartdoc);
     } else {
@@ -1572,14 +1571,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<HighlightRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 HighlightRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -1657,14 +1656,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<ImplementedClass> classes;
       if (json.containsKey('classes')) {
         classes = jsonDecoder.decodeList(
-            jsonPath + '.classes',
+            '$jsonPath.classes',
             json['classes'],
             (String jsonPath, Object? json) =>
                 ImplementedClass.fromJson(jsonDecoder, jsonPath, json));
@@ -1674,7 +1673,7 @@
       List<ImplementedMember> members;
       if (json.containsKey('members')) {
         members = jsonDecoder.decodeList(
-            jsonPath + '.members',
+            '$jsonPath.members',
             json['members'],
             (String jsonPath, Object? json) =>
                 ImplementedMember.fromJson(jsonDecoder, jsonPath, json));
@@ -1764,25 +1763,25 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       int delta;
       if (json.containsKey('delta')) {
-        delta = jsonDecoder.decodeInt(jsonPath + '.delta', json['delta']);
+        delta = jsonDecoder.decodeInt('$jsonPath.delta', json['delta']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'delta');
       }
@@ -1873,14 +1872,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<NavigationRegion> regions;
       if (json.containsKey('regions')) {
         regions = jsonDecoder.decodeList(
-            jsonPath + '.regions',
+            '$jsonPath.regions',
             json['regions'],
             (String jsonPath, Object? json) =>
                 NavigationRegion.fromJson(jsonDecoder, jsonPath, json));
@@ -1890,7 +1889,7 @@
       List<NavigationTarget> targets;
       if (json.containsKey('targets')) {
         targets = jsonDecoder.decodeList(
-            jsonPath + '.targets',
+            '$jsonPath.targets',
             json['targets'],
             (String jsonPath, Object? json) =>
                 NavigationTarget.fromJson(jsonDecoder, jsonPath, json));
@@ -1900,7 +1899,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -1979,14 +1978,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<Occurrences> occurrences;
       if (json.containsKey('occurrences')) {
         occurrences = jsonDecoder.decodeList(
-            jsonPath + '.occurrences',
+            '$jsonPath.occurrences',
             json['occurrences'],
             (String jsonPath, Object? json) =>
                 Occurrences.fromJson(jsonDecoder, jsonPath, json));
@@ -2109,43 +2108,43 @@
       bool? enableAsync;
       if (json.containsKey('enableAsync')) {
         enableAsync = jsonDecoder.decodeBool(
-            jsonPath + '.enableAsync', json['enableAsync']);
+            '$jsonPath.enableAsync', json['enableAsync']);
       }
       bool? enableDeferredLoading;
       if (json.containsKey('enableDeferredLoading')) {
         enableDeferredLoading = jsonDecoder.decodeBool(
-            jsonPath + '.enableDeferredLoading', json['enableDeferredLoading']);
+            '$jsonPath.enableDeferredLoading', json['enableDeferredLoading']);
       }
       bool? enableEnums;
       if (json.containsKey('enableEnums')) {
         enableEnums = jsonDecoder.decodeBool(
-            jsonPath + '.enableEnums', json['enableEnums']);
+            '$jsonPath.enableEnums', json['enableEnums']);
       }
       bool? enableNullAwareOperators;
       if (json.containsKey('enableNullAwareOperators')) {
         enableNullAwareOperators = jsonDecoder.decodeBool(
-            jsonPath + '.enableNullAwareOperators',
+            '$jsonPath.enableNullAwareOperators',
             json['enableNullAwareOperators']);
       }
       bool? enableSuperMixins;
       if (json.containsKey('enableSuperMixins')) {
         enableSuperMixins = jsonDecoder.decodeBool(
-            jsonPath + '.enableSuperMixins', json['enableSuperMixins']);
+            '$jsonPath.enableSuperMixins', json['enableSuperMixins']);
       }
       bool? generateDart2jsHints;
       if (json.containsKey('generateDart2jsHints')) {
         generateDart2jsHints = jsonDecoder.decodeBool(
-            jsonPath + '.generateDart2jsHints', json['generateDart2jsHints']);
+            '$jsonPath.generateDart2jsHints', json['generateDart2jsHints']);
       }
       bool? generateHints;
       if (json.containsKey('generateHints')) {
         generateHints = jsonDecoder.decodeBool(
-            jsonPath + '.generateHints', json['generateHints']);
+            '$jsonPath.generateHints', json['generateHints']);
       }
       bool? generateLints;
       if (json.containsKey('generateLints')) {
         generateLints = jsonDecoder.decodeBool(
-            jsonPath + '.generateLints', json['generateLints']);
+            '$jsonPath.generateLints', json['generateLints']);
       }
       return AnalysisOptions(
           enableAsync: enableAsync,
@@ -2265,25 +2264,25 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       FileKind kind;
       if (json.containsKey('kind')) {
-        kind = FileKind.fromJson(jsonDecoder, jsonPath + '.kind', json['kind']);
+        kind = FileKind.fromJson(jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String? libraryName;
       if (json.containsKey('libraryName')) {
         libraryName = jsonDecoder.decodeString(
-            jsonPath + '.libraryName', json['libraryName']);
+            '$jsonPath.libraryName', json['libraryName']);
       }
       Outline outline;
       if (json.containsKey('outline')) {
-        outline = Outline.fromJson(
-            jsonDecoder, jsonPath + '.outline', json['outline']);
+        outline =
+            Outline.fromJson(jsonDecoder, '$jsonPath.outline', json['outline']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'outline');
       }
@@ -2362,14 +2361,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<Override> overrides;
       if (json.containsKey('overrides')) {
         overrides = jsonDecoder.decodeList(
-            jsonPath + '.overrides',
+            '$jsonPath.overrides',
             json['overrides'],
             (String jsonPath, Object? json) =>
                 Override.fromJson(jsonDecoder, jsonPath, json));
@@ -2606,21 +2605,21 @@
       List<String> included;
       if (json.containsKey('included')) {
         included = jsonDecoder.decodeList(
-            jsonPath + '.included', json['included'], jsonDecoder.decodeString);
+            '$jsonPath.included', json['included'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'included');
       }
       List<String> excluded;
       if (json.containsKey('excluded')) {
         excluded = jsonDecoder.decodeList(
-            jsonPath + '.excluded', json['excluded'], jsonDecoder.decodeString);
+            '$jsonPath.excluded', json['excluded'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'excluded');
       }
       Map<String, String>? packageRoots;
       if (json.containsKey('packageRoots')) {
         packageRoots = jsonDecoder.decodeMap(
-            jsonPath + '.packageRoots', json['packageRoots'],
+            '$jsonPath.packageRoots', json['packageRoots'],
             valueDecoder: jsonDecoder.decodeString);
       }
       return AnalysisSetAnalysisRootsParams(included, excluded,
@@ -2720,7 +2719,7 @@
       List<GeneralAnalysisService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 GeneralAnalysisService.fromJson(jsonDecoder, jsonPath, json));
@@ -2813,7 +2812,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -2901,7 +2900,7 @@
       Map<AnalysisService, List<String>> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeMap(
-            jsonPath + '.subscriptions', json['subscriptions'],
+            '$jsonPath.subscriptions', json['subscriptions'],
             keyDecoder: (String jsonPath, Object? json) =>
                 AnalysisService.fromJson(jsonDecoder, jsonPath, json),
             valueDecoder: (String jsonPath, Object? json) => jsonDecoder
@@ -3002,14 +3001,14 @@
       bool isAnalyzing;
       if (json.containsKey('isAnalyzing')) {
         isAnalyzing = jsonDecoder.decodeBool(
-            jsonPath + '.isAnalyzing', json['isAnalyzing']);
+            '$jsonPath.isAnalyzing', json['isAnalyzing']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isAnalyzing');
       }
       String? analysisTarget;
       if (json.containsKey('analysisTarget')) {
         analysisTarget = jsonDecoder.decodeString(
-            jsonPath + '.analysisTarget', json['analysisTarget']);
+            '$jsonPath.analysisTarget', json['analysisTarget']);
       }
       return AnalysisStatus(isAnalyzing, analysisTarget: analysisTarget);
     } else {
@@ -3067,7 +3066,7 @@
     if (json is Map) {
       Map<String, Object> files;
       if (json.containsKey('files')) {
-        files = jsonDecoder.decodeMap(jsonPath + '.files', json['files'],
+        files = jsonDecoder.decodeMap('$jsonPath.files', json['files'],
             valueDecoder: (String jsonPath, Object? json) =>
                 jsonDecoder.decodeUnion(jsonPath, json, 'type', {
                   'add': (String jsonPath, Object? json) =>
@@ -3194,7 +3193,7 @@
       AnalysisOptions options;
       if (json.containsKey('options')) {
         options = AnalysisOptions.fromJson(
-            jsonDecoder, jsonPath + '.options', json['options']);
+            jsonDecoder, '$jsonPath.options', json['options']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'options');
       }
@@ -3280,7 +3279,7 @@
     if (json is Map) {
       bool value;
       if (json.containsKey('value')) {
-        value = jsonDecoder.decodeBool(jsonPath + '.value', json['value']);
+        value = jsonDecoder.decodeBool('$jsonPath.value', json['value']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'value');
       }
@@ -3389,8 +3388,7 @@
     if (json is Map) {
       bool enabled;
       if (json.containsKey('enabled')) {
-        enabled =
-            jsonDecoder.decodeBool(jsonPath + '.enabled', json['enabled']);
+        enabled = jsonDecoder.decodeBool('$jsonPath.enabled', json['enabled']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'enabled');
       }
@@ -3453,7 +3451,7 @@
     if (json is Map) {
       String action;
       if (json.containsKey('action')) {
-        action = jsonDecoder.decodeString(jsonPath + '.action', json['action']);
+        action = jsonDecoder.decodeString('$jsonPath.action', json['action']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'action');
       }
@@ -3542,13 +3540,13 @@
     if (json is Map) {
       String event;
       if (json.containsKey('event')) {
-        event = jsonDecoder.decodeString(jsonPath + '.event', json['event']);
+        event = jsonDecoder.decodeString('$jsonPath.event', json['event']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'event');
       }
       int millis;
       if (json.containsKey('millis')) {
-        millis = jsonDecoder.decodeInt(jsonPath + '.millis', json['millis']);
+        millis = jsonDecoder.decodeInt('$jsonPath.millis', json['millis']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'millis');
       }
@@ -3687,57 +3685,56 @@
     if (json is Map) {
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
       String declaringLibraryUri;
       if (json.containsKey('declaringLibraryUri')) {
         declaringLibraryUri = jsonDecoder.decodeString(
-            jsonPath + '.declaringLibraryUri', json['declaringLibraryUri']);
+            '$jsonPath.declaringLibraryUri', json['declaringLibraryUri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'declaringLibraryUri');
       }
       Element element;
       if (json.containsKey('element')) {
-        element = Element.fromJson(
-            jsonDecoder, jsonPath + '.element', json['element']);
+        element =
+            Element.fromJson(jsonDecoder, '$jsonPath.element', json['element']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'element');
       }
       String? defaultArgumentListString;
       if (json.containsKey('defaultArgumentListString')) {
         defaultArgumentListString = jsonDecoder.decodeString(
-            jsonPath + '.defaultArgumentListString',
+            '$jsonPath.defaultArgumentListString',
             json['defaultArgumentListString']);
       }
       List<int>? defaultArgumentListTextRanges;
       if (json.containsKey('defaultArgumentListTextRanges')) {
         defaultArgumentListTextRanges = jsonDecoder.decodeList(
-            jsonPath + '.defaultArgumentListTextRanges',
+            '$jsonPath.defaultArgumentListTextRanges',
             json['defaultArgumentListTextRanges'],
             jsonDecoder.decodeInt);
       }
       List<String>? parameterNames;
       if (json.containsKey('parameterNames')) {
-        parameterNames = jsonDecoder.decodeList(jsonPath + '.parameterNames',
+        parameterNames = jsonDecoder.decodeList('$jsonPath.parameterNames',
             json['parameterNames'], jsonDecoder.decodeString);
       }
       List<String>? parameterTypes;
       if (json.containsKey('parameterTypes')) {
-        parameterTypes = jsonDecoder.decodeList(jsonPath + '.parameterTypes',
+        parameterTypes = jsonDecoder.decodeList('$jsonPath.parameterTypes',
             json['parameterTypes'], jsonDecoder.decodeString);
       }
       List<String>? relevanceTags;
       if (json.containsKey('relevanceTags')) {
-        relevanceTags = jsonDecoder.decodeList(jsonPath + '.relevanceTags',
+        relevanceTags = jsonDecoder.decodeList('$jsonPath.relevanceTags',
             json['relevanceTags'], jsonDecoder.decodeString);
       }
       int? requiredParameterCount;
       if (json.containsKey('requiredParameterCount')) {
         requiredParameterCount = jsonDecoder.decodeInt(
-            jsonPath + '.requiredParameterCount',
-            json['requiredParameterCount']);
+            '$jsonPath.requiredParameterCount', json['requiredParameterCount']);
       }
       return AvailableSuggestion(label, declaringLibraryUri, element,
           defaultArgumentListString: defaultArgumentListString,
@@ -3847,20 +3844,20 @@
     if (json is Map) {
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       String uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeString(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeString('$jsonPath.uri', json['uri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'uri');
       }
       List<AvailableSuggestion> items;
       if (json.containsKey('items')) {
         items = jsonDecoder.decodeList(
-            jsonPath + '.items',
+            '$jsonPath.items',
             json['items'],
             (String jsonPath, Object? json) =>
                 AvailableSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -3928,14 +3925,14 @@
     if (json is Map) {
       String path;
       if (json.containsKey('path')) {
-        path = jsonDecoder.decodeString(jsonPath + '.path', json['path']);
+        path = jsonDecoder.decodeString('$jsonPath.path', json['path']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'path');
       }
       List<BulkFixDetail> fixes;
       if (json.containsKey('fixes')) {
         fixes = jsonDecoder.decodeList(
-            jsonPath + '.fixes',
+            '$jsonPath.fixes',
             json['fixes'],
             (String jsonPath, Object? json) =>
                 BulkFixDetail.fromJson(jsonDecoder, jsonPath, json));
@@ -4001,14 +3998,14 @@
     if (json is Map) {
       String code;
       if (json.containsKey('code')) {
-        code = jsonDecoder.decodeString(jsonPath + '.code', json['code']);
+        code = jsonDecoder.decodeString('$jsonPath.code', json['code']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'code');
       }
       int occurrences;
       if (json.containsKey('occurrences')) {
-        occurrences = jsonDecoder.decodeInt(
-            jsonPath + '.occurrences', json['occurrences']);
+        occurrences =
+            jsonDecoder.decodeInt('$jsonPath.occurrences', json['occurrences']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'occurrences');
       }
@@ -4072,19 +4069,19 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
@@ -4150,17 +4147,15 @@
       List<AvailableSuggestionSet>? changedLibraries;
       if (json.containsKey('changedLibraries')) {
         changedLibraries = jsonDecoder.decodeList(
-            jsonPath + '.changedLibraries',
+            '$jsonPath.changedLibraries',
             json['changedLibraries'],
             (String jsonPath, Object? json) =>
                 AvailableSuggestionSet.fromJson(jsonDecoder, jsonPath, json));
       }
       List<int>? removedLibraries;
       if (json.containsKey('removedLibraries')) {
-        removedLibraries = jsonDecoder.decodeList(
-            jsonPath + '.removedLibraries',
-            json['removedLibraries'],
-            jsonDecoder.decodeInt);
+        removedLibraries = jsonDecoder.decodeList('$jsonPath.removedLibraries',
+            json['removedLibraries'], jsonDecoder.decodeInt);
       }
       return CompletionAvailableSuggestionsParams(
           changedLibraries: changedLibraries,
@@ -4303,14 +4298,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       ExistingImports imports;
       if (json.containsKey('imports')) {
         imports = ExistingImports.fromJson(
-            jsonDecoder, jsonPath + '.imports', json['imports']);
+            jsonDecoder, '$jsonPath.imports', json['imports']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'imports');
       }
@@ -4393,27 +4388,27 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       String completion;
       if (json.containsKey('completion')) {
         completion = jsonDecoder.decodeString(
-            jsonPath + '.completion', json['completion']);
+            '$jsonPath.completion', json['completion']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'completion');
       }
       String libraryUri;
       if (json.containsKey('libraryUri')) {
         libraryUri = jsonDecoder.decodeString(
-            jsonPath + '.libraryUri', json['libraryUri']);
+            '$jsonPath.libraryUri', json['libraryUri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraryUri');
       }
@@ -4496,14 +4491,14 @@
       String completion;
       if (json.containsKey('completion')) {
         completion = jsonDecoder.decodeString(
-            jsonPath + '.completion', json['completion']);
+            '$jsonPath.completion', json['completion']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'completion');
       }
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
@@ -4587,25 +4582,25 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -4685,14 +4680,14 @@
       String completion;
       if (json.containsKey('completion')) {
         completion = jsonDecoder.decodeString(
-            jsonPath + '.completion', json['completion']);
+            '$jsonPath.completion', json['completion']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'completion');
       }
       SourceChange? change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       }
       return CompletionGetSuggestionDetailsResult(completion, change: change);
     } else {
@@ -4795,20 +4790,20 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int maxResults;
       if (json.containsKey('maxResults')) {
         maxResults =
-            jsonDecoder.decodeInt(jsonPath + '.maxResults', json['maxResults']);
+            jsonDecoder.decodeInt('$jsonPath.maxResults', json['maxResults']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'maxResults');
       }
@@ -4816,22 +4811,22 @@
       if (json.containsKey('completionCaseMatchingMode')) {
         completionCaseMatchingMode = CompletionCaseMatchingMode.fromJson(
             jsonDecoder,
-            jsonPath + '.completionCaseMatchingMode',
+            '$jsonPath.completionCaseMatchingMode',
             json['completionCaseMatchingMode']);
       }
       CompletionMode? completionMode;
       if (json.containsKey('completionMode')) {
         completionMode = CompletionMode.fromJson(
-            jsonDecoder, jsonPath + '.completionMode', json['completionMode']);
+            jsonDecoder, '$jsonPath.completionMode', json['completionMode']);
       }
       int? invocationCount;
       if (json.containsKey('invocationCount')) {
         invocationCount = jsonDecoder.decodeInt(
-            jsonPath + '.invocationCount', json['invocationCount']);
+            '$jsonPath.invocationCount', json['invocationCount']);
       }
       int? timeout;
       if (json.containsKey('timeout')) {
-        timeout = jsonDecoder.decodeInt(jsonPath + '.timeout', json['timeout']);
+        timeout = jsonDecoder.decodeInt('$jsonPath.timeout', json['timeout']);
       }
       return CompletionGetSuggestions2Params(file, offset, maxResults,
           completionCaseMatchingMode: completionCaseMatchingMode,
@@ -4958,21 +4953,21 @@
       int replacementOffset;
       if (json.containsKey('replacementOffset')) {
         replacementOffset = jsonDecoder.decodeInt(
-            jsonPath + '.replacementOffset', json['replacementOffset']);
+            '$jsonPath.replacementOffset', json['replacementOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementOffset');
       }
       int replacementLength;
       if (json.containsKey('replacementLength')) {
         replacementLength = jsonDecoder.decodeInt(
-            jsonPath + '.replacementLength', json['replacementLength']);
+            '$jsonPath.replacementLength', json['replacementLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementLength');
       }
       List<CompletionSuggestion> suggestions;
       if (json.containsKey('suggestions')) {
         suggestions = jsonDecoder.decodeList(
-            jsonPath + '.suggestions',
+            '$jsonPath.suggestions',
             json['suggestions'],
             (String jsonPath, Object? json) =>
                 CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -4982,7 +4977,7 @@
       bool isIncomplete;
       if (json.containsKey('isIncomplete')) {
         isIncomplete = jsonDecoder.decodeBool(
-            jsonPath + '.isIncomplete', json['isIncomplete']);
+            '$jsonPath.isIncomplete', json['isIncomplete']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isIncomplete');
       }
@@ -5065,13 +5060,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -5137,7 +5132,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -5257,7 +5252,7 @@
       List<LibraryPathSet> paths;
       if (json.containsKey('paths')) {
         paths = jsonDecoder.decodeList(
-            jsonPath + '.paths',
+            '$jsonPath.paths',
             json['paths'],
             (String jsonPath, Object? json) =>
                 LibraryPathSet.fromJson(jsonDecoder, jsonPath, json));
@@ -5411,28 +5406,28 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       int replacementOffset;
       if (json.containsKey('replacementOffset')) {
         replacementOffset = jsonDecoder.decodeInt(
-            jsonPath + '.replacementOffset', json['replacementOffset']);
+            '$jsonPath.replacementOffset', json['replacementOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementOffset');
       }
       int replacementLength;
       if (json.containsKey('replacementLength')) {
         replacementLength = jsonDecoder.decodeInt(
-            jsonPath + '.replacementLength', json['replacementLength']);
+            '$jsonPath.replacementLength', json['replacementLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'replacementLength');
       }
       List<CompletionSuggestion> results;
       if (json.containsKey('results')) {
         results = jsonDecoder.decodeList(
-            jsonPath + '.results',
+            '$jsonPath.results',
             json['results'],
             (String jsonPath, Object? json) =>
                 CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -5441,19 +5436,19 @@
       }
       bool isLast;
       if (json.containsKey('isLast')) {
-        isLast = jsonDecoder.decodeBool(jsonPath + '.isLast', json['isLast']);
+        isLast = jsonDecoder.decodeBool('$jsonPath.isLast', json['isLast']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isLast');
       }
       String? libraryFile;
       if (json.containsKey('libraryFile')) {
         libraryFile = jsonDecoder.decodeString(
-            jsonPath + '.libraryFile', json['libraryFile']);
+            '$jsonPath.libraryFile', json['libraryFile']);
       }
       List<IncludedSuggestionSet>? includedSuggestionSets;
       if (json.containsKey('includedSuggestionSets')) {
         includedSuggestionSets = jsonDecoder.decodeList(
-            jsonPath + '.includedSuggestionSets',
+            '$jsonPath.includedSuggestionSets',
             json['includedSuggestionSets'],
             (String jsonPath, Object? json) =>
                 IncludedSuggestionSet.fromJson(jsonDecoder, jsonPath, json));
@@ -5461,7 +5456,7 @@
       List<ElementKind>? includedElementKinds;
       if (json.containsKey('includedElementKinds')) {
         includedElementKinds = jsonDecoder.decodeList(
-            jsonPath + '.includedElementKinds',
+            '$jsonPath.includedElementKinds',
             json['includedElementKinds'],
             (String jsonPath, Object? json) =>
                 ElementKind.fromJson(jsonDecoder, jsonPath, json));
@@ -5469,7 +5464,7 @@
       List<IncludedSuggestionRelevanceTag>? includedSuggestionRelevanceTags;
       if (json.containsKey('includedSuggestionRelevanceTags')) {
         includedSuggestionRelevanceTags = jsonDecoder.decodeList(
-            jsonPath + '.includedSuggestionRelevanceTags',
+            '$jsonPath.includedSuggestionRelevanceTags',
             json['includedSuggestionRelevanceTags'],
             (String jsonPath, Object? json) =>
                 IncludedSuggestionRelevanceTag.fromJson(
@@ -5645,7 +5640,7 @@
       List<CompletionService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 CompletionService.fromJson(jsonDecoder, jsonPath, json));
@@ -5753,35 +5748,35 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       int explicitFileCount;
       if (json.containsKey('explicitFileCount')) {
         explicitFileCount = jsonDecoder.decodeInt(
-            jsonPath + '.explicitFileCount', json['explicitFileCount']);
+            '$jsonPath.explicitFileCount', json['explicitFileCount']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'explicitFileCount');
       }
       int implicitFileCount;
       if (json.containsKey('implicitFileCount')) {
         implicitFileCount = jsonDecoder.decodeInt(
-            jsonPath + '.implicitFileCount', json['implicitFileCount']);
+            '$jsonPath.implicitFileCount', json['implicitFileCount']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'implicitFileCount');
       }
       int workItemQueueLength;
       if (json.containsKey('workItemQueueLength')) {
         workItemQueueLength = jsonDecoder.decodeInt(
-            jsonPath + '.workItemQueueLength', json['workItemQueueLength']);
+            '$jsonPath.workItemQueueLength', json['workItemQueueLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'workItemQueueLength');
       }
       List<String> cacheEntryExceptions;
       if (json.containsKey('cacheEntryExceptions')) {
         cacheEntryExceptions = jsonDecoder.decodeList(
-            jsonPath + '.cacheEntryExceptions',
+            '$jsonPath.cacheEntryExceptions',
             json['cacheEntryExceptions'],
             jsonDecoder.decodeString);
       } else {
@@ -5943,7 +5938,7 @@
       List<ContextData> contexts;
       if (json.containsKey('contexts')) {
         contexts = jsonDecoder.decodeList(
-            jsonPath + '.contexts',
+            '$jsonPath.contexts',
             json['contexts'],
             (String jsonPath, Object? json) =>
                 ContextData.fromJson(jsonDecoder, jsonPath, json));
@@ -6036,7 +6031,7 @@
     if (json is Map) {
       int port;
       if (json.containsKey('port')) {
-        port = jsonDecoder.decodeInt(jsonPath + '.port', json['port']);
+        port = jsonDecoder.decodeInt('$jsonPath.port', json['port']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'port');
       }
@@ -6117,14 +6112,14 @@
       List<String> included;
       if (json.containsKey('included')) {
         included = jsonDecoder.decodeList(
-            jsonPath + '.included', json['included'], jsonDecoder.decodeString);
+            '$jsonPath.included', json['included'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'included');
       }
       bool? inTestMode;
       if (json.containsKey('inTestMode')) {
-        inTestMode = jsonDecoder.decodeBool(
-            jsonPath + '.inTestMode', json['inTestMode']);
+        inTestMode =
+            jsonDecoder.decodeBool('$jsonPath.inTestMode', json['inTestMode']);
       }
       return EditBulkFixesParams(included, inTestMode: inTestMode);
     } else {
@@ -6197,7 +6192,7 @@
       List<SourceFileEdit> edits;
       if (json.containsKey('edits')) {
         edits = jsonDecoder.decodeList(
-            jsonPath + '.edits',
+            '$jsonPath.edits',
             json['edits'],
             (String jsonPath, Object? json) =>
                 SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
@@ -6207,7 +6202,7 @@
       List<BulkFix> details;
       if (json.containsKey('details')) {
         details = jsonDecoder.decodeList(
-            jsonPath + '.details',
+            '$jsonPath.details',
             json['details'],
             (String jsonPath, Object? json) =>
                 BulkFix.fromJson(jsonDecoder, jsonPath, json));
@@ -6280,7 +6275,7 @@
     if (json is Map) {
       List<String> directories;
       if (json.containsKey('directories')) {
-        directories = jsonDecoder.decodeList(jsonPath + '.directories',
+        directories = jsonDecoder.decodeList('$jsonPath.directories',
             json['directories'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'directories');
@@ -6346,7 +6341,7 @@
       List<SourceFileEdit> edits;
       if (json.containsKey('edits')) {
         edits = jsonDecoder.decodeList(
-            jsonPath + '.edits',
+            '$jsonPath.edits',
             json['edits'],
             (String jsonPath, Object? json) =>
                 SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
@@ -6427,28 +6422,28 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int selectionOffset;
       if (json.containsKey('selectionOffset')) {
         selectionOffset = jsonDecoder.decodeInt(
-            jsonPath + '.selectionOffset', json['selectionOffset']);
+            '$jsonPath.selectionOffset', json['selectionOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionOffset');
       }
       int selectionLength;
       if (json.containsKey('selectionLength')) {
         selectionLength = jsonDecoder.decodeInt(
-            jsonPath + '.selectionLength', json['selectionLength']);
+            '$jsonPath.selectionLength', json['selectionLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionLength');
       }
       int? lineLength;
       if (json.containsKey('lineLength')) {
         lineLength =
-            jsonDecoder.decodeInt(jsonPath + '.lineLength', json['lineLength']);
+            jsonDecoder.decodeInt('$jsonPath.lineLength', json['lineLength']);
       }
       return EditFormatParams(file, selectionOffset, selectionLength,
           lineLength: lineLength);
@@ -6532,7 +6527,7 @@
       List<SourceEdit> edits;
       if (json.containsKey('edits')) {
         edits = jsonDecoder.decodeList(
-            jsonPath + '.edits',
+            '$jsonPath.edits',
             json['edits'],
             (String jsonPath, Object? json) =>
                 SourceEdit.fromJson(jsonDecoder, jsonPath, json));
@@ -6542,14 +6537,14 @@
       int selectionOffset;
       if (json.containsKey('selectionOffset')) {
         selectionOffset = jsonDecoder.decodeInt(
-            jsonPath + '.selectionOffset', json['selectionOffset']);
+            '$jsonPath.selectionOffset', json['selectionOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionOffset');
       }
       int selectionLength;
       if (json.containsKey('selectionLength')) {
         selectionLength = jsonDecoder.decodeInt(
-            jsonPath + '.selectionLength', json['selectionLength']);
+            '$jsonPath.selectionLength', json['selectionLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'selectionLength');
       }
@@ -6629,19 +6624,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -6711,7 +6706,7 @@
       List<SourceChange> assists;
       if (json.containsKey('assists')) {
         assists = jsonDecoder.decodeList(
-            jsonPath + '.assists',
+            '$jsonPath.assists',
             json['assists'],
             (String jsonPath, Object? json) =>
                 SourceChange.fromJson(jsonDecoder, jsonPath, json));
@@ -6787,19 +6782,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -6870,7 +6865,7 @@
       List<RefactoringKind> kinds;
       if (json.containsKey('kinds')) {
         kinds = jsonDecoder.decodeList(
-            jsonPath + '.kinds',
+            '$jsonPath.kinds',
             json['kinds'],
             (String jsonPath, Object? json) =>
                 RefactoringKind.fromJson(jsonDecoder, jsonPath, json));
@@ -6943,13 +6938,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7015,7 +7010,7 @@
       List<AnalysisErrorFixes> fixes;
       if (json.containsKey('fixes')) {
         fixes = jsonDecoder.decodeList(
-            jsonPath + '.fixes',
+            '$jsonPath.fixes',
             json['fixes'],
             (String jsonPath, Object? json) =>
                 AnalysisErrorFixes.fromJson(jsonDecoder, jsonPath, json));
@@ -7092,19 +7087,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       String key;
       if (json.containsKey('key')) {
-        key = jsonDecoder.decodeString(jsonPath + '.key', json['key']);
+        key = jsonDecoder.decodeString('$jsonPath.key', json['key']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'key');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7173,7 +7168,7 @@
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
@@ -7265,39 +7260,39 @@
       RefactoringKind kind;
       if (json.containsKey('kind')) {
         kind = RefactoringKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       bool validateOnly;
       if (json.containsKey('validateOnly')) {
         validateOnly = jsonDecoder.decodeBool(
-            jsonPath + '.validateOnly', json['validateOnly']);
+            '$jsonPath.validateOnly', json['validateOnly']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'validateOnly');
       }
       RefactoringOptions? options;
       if (json.containsKey('options')) {
         options = RefactoringOptions.fromJson(
-            jsonDecoder, jsonPath + '.options', json['options'], kind);
+            jsonDecoder, '$jsonPath.options', json['options'], kind);
       }
       return EditGetRefactoringParams(kind, file, offset, length, validateOnly,
           options: options);
@@ -7420,7 +7415,7 @@
       List<RefactoringProblem> initialProblems;
       if (json.containsKey('initialProblems')) {
         initialProblems = jsonDecoder.decodeList(
-            jsonPath + '.initialProblems',
+            '$jsonPath.initialProblems',
             json['initialProblems'],
             (String jsonPath, Object? json) =>
                 RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
@@ -7430,7 +7425,7 @@
       List<RefactoringProblem> optionsProblems;
       if (json.containsKey('optionsProblems')) {
         optionsProblems = jsonDecoder.decodeList(
-            jsonPath + '.optionsProblems',
+            '$jsonPath.optionsProblems',
             json['optionsProblems'],
             (String jsonPath, Object? json) =>
                 RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
@@ -7440,7 +7435,7 @@
       List<RefactoringProblem> finalProblems;
       if (json.containsKey('finalProblems')) {
         finalProblems = jsonDecoder.decodeList(
-            jsonPath + '.finalProblems',
+            '$jsonPath.finalProblems',
             json['finalProblems'],
             (String jsonPath, Object? json) =>
                 RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
@@ -7450,16 +7445,16 @@
       RefactoringFeedback? feedback;
       if (json.containsKey('feedback')) {
         feedback = RefactoringFeedback.fromJson(
-            jsonDecoder, jsonPath + '.feedback', json['feedback'], json);
+            jsonDecoder, '$jsonPath.feedback', json['feedback'], json);
       }
       SourceChange? change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       }
       List<String>? potentialEdits;
       if (json.containsKey('potentialEdits')) {
-        potentialEdits = jsonDecoder.decodeList(jsonPath + '.potentialEdits',
+        potentialEdits = jsonDecoder.decodeList('$jsonPath.potentialEdits',
             json['potentialEdits'], jsonDecoder.decodeString);
       }
       return EditGetRefactoringResult(
@@ -7563,13 +7558,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7641,14 +7636,14 @@
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
       bool whitespaceOnly;
       if (json.containsKey('whitespaceOnly')) {
         whitespaceOnly = jsonDecoder.decodeBool(
-            jsonPath + '.whitespaceOnly', json['whitespaceOnly']);
+            '$jsonPath.whitespaceOnly', json['whitespaceOnly']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'whitespaceOnly');
       }
@@ -7727,14 +7722,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       List<ImportedElements> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements',
+            '$jsonPath.elements',
             json['elements'],
             (String jsonPath, Object? json) =>
                 ImportedElements.fromJson(jsonDecoder, jsonPath, json));
@@ -7743,7 +7738,7 @@
       }
       int? offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       }
       return EditImportElementsParams(file, elements, offset: offset);
     } else {
@@ -7821,7 +7816,7 @@
       SourceFileEdit? edit;
       if (json.containsKey('edit')) {
         edit = SourceFileEdit.fromJson(
-            jsonDecoder, jsonPath + '.edit', json['edit']);
+            jsonDecoder, '$jsonPath.edit', json['edit']);
       }
       return EditImportElementsResult(edit: edit);
     } else {
@@ -7894,19 +7889,19 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       String key;
       if (json.containsKey('key')) {
-        key = jsonDecoder.decodeString(jsonPath + '.key', json['key']);
+        key = jsonDecoder.decodeString('$jsonPath.key', json['key']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'key');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -7974,7 +7969,7 @@
     if (json is Map) {
       bool value;
       if (json.containsKey('value')) {
-        value = jsonDecoder.decodeBool(jsonPath + '.value', json['value']);
+        value = jsonDecoder.decodeBool('$jsonPath.value', json['value']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'value');
       }
@@ -8064,7 +8059,7 @@
       List<PostfixTemplateDescriptor> templates;
       if (json.containsKey('templates')) {
         templates = jsonDecoder.decodeList(
-            jsonPath + '.templates',
+            '$jsonPath.templates',
             json['templates'],
             (String jsonPath, Object? json) =>
                 PostfixTemplateDescriptor.fromJson(
@@ -8136,7 +8131,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -8200,7 +8195,7 @@
       SourceFileEdit edit;
       if (json.containsKey('edit')) {
         edit = SourceFileEdit.fromJson(
-            jsonDecoder, jsonPath + '.edit', json['edit']);
+            jsonDecoder, '$jsonPath.edit', json['edit']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'edit');
       }
@@ -8264,7 +8259,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -8327,7 +8322,7 @@
       SourceFileEdit edit;
       if (json.containsKey('edit')) {
         edit = SourceFileEdit.fromJson(
-            jsonDecoder, jsonPath + '.edit', json['edit']);
+            jsonDecoder, '$jsonPath.edit', json['edit']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'edit');
       }
@@ -8439,70 +8434,70 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       ElementKind kind;
       if (json.containsKey('kind')) {
         kind =
-            ElementKind.fromJson(jsonDecoder, jsonPath + '.kind', json['kind']);
+            ElementKind.fromJson(jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       int fileIndex;
       if (json.containsKey('fileIndex')) {
         fileIndex =
-            jsonDecoder.decodeInt(jsonPath + '.fileIndex', json['fileIndex']);
+            jsonDecoder.decodeInt('$jsonPath.fileIndex', json['fileIndex']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'fileIndex');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int line;
       if (json.containsKey('line')) {
-        line = jsonDecoder.decodeInt(jsonPath + '.line', json['line']);
+        line = jsonDecoder.decodeInt('$jsonPath.line', json['line']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'line');
       }
       int column;
       if (json.containsKey('column')) {
-        column = jsonDecoder.decodeInt(jsonPath + '.column', json['column']);
+        column = jsonDecoder.decodeInt('$jsonPath.column', json['column']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'column');
       }
       int codeOffset;
       if (json.containsKey('codeOffset')) {
         codeOffset =
-            jsonDecoder.decodeInt(jsonPath + '.codeOffset', json['codeOffset']);
+            jsonDecoder.decodeInt('$jsonPath.codeOffset', json['codeOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeOffset');
       }
       int codeLength;
       if (json.containsKey('codeLength')) {
         codeLength =
-            jsonDecoder.decodeInt(jsonPath + '.codeLength', json['codeLength']);
+            jsonDecoder.decodeInt('$jsonPath.codeLength', json['codeLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeLength');
       }
       String? className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       }
       String? mixinName;
       if (json.containsKey('mixinName')) {
-        mixinName = jsonDecoder.decodeString(
-            jsonPath + '.mixinName', json['mixinName']);
+        mixinName =
+            jsonDecoder.decodeString('$jsonPath.mixinName', json['mixinName']);
       }
       String? parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeString(
-            jsonPath + '.parameters', json['parameters']);
+            '$jsonPath.parameters', json['parameters']);
       }
       return ElementDeclaration(
           name, kind, fileIndex, offset, line, column, codeOffset, codeLength,
@@ -8598,14 +8593,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       ExecutableKind kind;
       if (json.containsKey('kind')) {
         kind = ExecutableKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
@@ -8727,7 +8722,7 @@
       String contextRoot;
       if (json.containsKey('contextRoot')) {
         contextRoot = jsonDecoder.decodeString(
-            jsonPath + '.contextRoot', json['contextRoot']);
+            '$jsonPath.contextRoot', json['contextRoot']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'contextRoot');
       }
@@ -8789,7 +8784,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -8853,7 +8848,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -8974,34 +8969,34 @@
     if (json is Map) {
       String code;
       if (json.containsKey('code')) {
-        code = jsonDecoder.decodeString(jsonPath + '.code', json['code']);
+        code = jsonDecoder.decodeString('$jsonPath.code', json['code']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'code');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       String contextFile;
       if (json.containsKey('contextFile')) {
         contextFile = jsonDecoder.decodeString(
-            jsonPath + '.contextFile', json['contextFile']);
+            '$jsonPath.contextFile', json['contextFile']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'contextFile');
       }
       int contextOffset;
       if (json.containsKey('contextOffset')) {
         contextOffset = jsonDecoder.decodeInt(
-            jsonPath + '.contextOffset', json['contextOffset']);
+            '$jsonPath.contextOffset', json['contextOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'contextOffset');
       }
       List<RuntimeCompletionVariable> variables;
       if (json.containsKey('variables')) {
         variables = jsonDecoder.decodeList(
-            jsonPath + '.variables',
+            '$jsonPath.variables',
             json['variables'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionVariable.fromJson(
@@ -9012,7 +9007,7 @@
       List<RuntimeCompletionExpression>? expressions;
       if (json.containsKey('expressions')) {
         expressions = jsonDecoder.decodeList(
-            jsonPath + '.expressions',
+            '$jsonPath.expressions',
             json['expressions'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpression.fromJson(
@@ -9125,7 +9120,7 @@
       List<CompletionSuggestion>? suggestions;
       if (json.containsKey('suggestions')) {
         suggestions = jsonDecoder.decodeList(
-            jsonPath + '.suggestions',
+            '$jsonPath.suggestions',
             json['suggestions'],
             (String jsonPath, Object? json) =>
                 CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
@@ -9133,7 +9128,7 @@
       List<RuntimeCompletionExpression>? expressions;
       if (json.containsKey('expressions')) {
         expressions = jsonDecoder.decodeList(
-            jsonPath + '.expressions',
+            '$jsonPath.expressions',
             json['expressions'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpression.fromJson(
@@ -9231,18 +9226,18 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       ExecutableKind? kind;
       if (json.containsKey('kind')) {
         kind = ExecutableKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       }
       List<String>? referencedFiles;
       if (json.containsKey('referencedFiles')) {
-        referencedFiles = jsonDecoder.decodeList(jsonPath + '.referencedFiles',
+        referencedFiles = jsonDecoder.decodeList('$jsonPath.referencedFiles',
             json['referencedFiles'], jsonDecoder.decodeString);
       }
       return ExecutionLaunchDataParams(file,
@@ -9326,17 +9321,17 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       String? file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       }
       String? uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeString(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeString('$jsonPath.uri', json['uri']);
       }
       return ExecutionMapUriParams(id, file: file, uri: uri);
     } else {
@@ -9413,11 +9408,11 @@
     if (json is Map) {
       String? file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       }
       String? uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeString(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeString('$jsonPath.uri', json['uri']);
       }
       return ExecutionMapUriResult(file: file, uri: uri);
     } else {
@@ -9533,7 +9528,7 @@
       List<ExecutionService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 ExecutionService.fromJson(jsonDecoder, jsonPath, json));
@@ -9629,14 +9624,14 @@
     if (json is Map) {
       int uri;
       if (json.containsKey('uri')) {
-        uri = jsonDecoder.decodeInt(jsonPath + '.uri', json['uri']);
+        uri = jsonDecoder.decodeInt('$jsonPath.uri', json['uri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'uri');
       }
       List<int> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements', json['elements'], jsonDecoder.decodeInt);
+            '$jsonPath.elements', json['elements'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elements');
       }
@@ -9697,14 +9692,14 @@
       ImportedElementSet elements;
       if (json.containsKey('elements')) {
         elements = ImportedElementSet.fromJson(
-            jsonDecoder, jsonPath + '.elements', json['elements']);
+            jsonDecoder, '$jsonPath.elements', json['elements']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elements');
       }
       List<ExistingImport> imports;
       if (json.containsKey('imports')) {
         imports = jsonDecoder.decodeList(
-            jsonPath + '.imports',
+            '$jsonPath.imports',
             json['imports'],
             (String jsonPath, Object? json) =>
                 ExistingImport.fromJson(jsonDecoder, jsonPath, json));
@@ -9789,35 +9784,35 @@
       List<int>? coveringExpressionOffsets;
       if (json.containsKey('coveringExpressionOffsets')) {
         coveringExpressionOffsets = jsonDecoder.decodeList(
-            jsonPath + '.coveringExpressionOffsets',
+            '$jsonPath.coveringExpressionOffsets',
             json['coveringExpressionOffsets'],
             jsonDecoder.decodeInt);
       }
       List<int>? coveringExpressionLengths;
       if (json.containsKey('coveringExpressionLengths')) {
         coveringExpressionLengths = jsonDecoder.decodeList(
-            jsonPath + '.coveringExpressionLengths',
+            '$jsonPath.coveringExpressionLengths',
             json['coveringExpressionLengths'],
             jsonDecoder.decodeInt);
       }
       List<String> names;
       if (json.containsKey('names')) {
         names = jsonDecoder.decodeList(
-            jsonPath + '.names', json['names'], jsonDecoder.decodeString);
+            '$jsonPath.names', json['names'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'names');
       }
       List<int> offsets;
       if (json.containsKey('offsets')) {
         offsets = jsonDecoder.decodeList(
-            jsonPath + '.offsets', json['offsets'], jsonDecoder.decodeInt);
+            '$jsonPath.offsets', json['offsets'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offsets');
       }
       List<int> lengths;
       if (json.containsKey('lengths')) {
         lengths = jsonDecoder.decodeList(
-            jsonPath + '.lengths', json['lengths'], jsonDecoder.decodeInt);
+            '$jsonPath.lengths', json['lengths'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'lengths');
       }
@@ -9900,14 +9895,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       bool extractAll;
       if (json.containsKey('extractAll')) {
-        extractAll = jsonDecoder.decodeBool(
-            jsonPath + '.extractAll', json['extractAll']);
+        extractAll =
+            jsonDecoder.decodeBool('$jsonPath.extractAll', json['extractAll']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'extractAll');
       }
@@ -10005,41 +10000,41 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String returnType;
       if (json.containsKey('returnType')) {
         returnType = jsonDecoder.decodeString(
-            jsonPath + '.returnType', json['returnType']);
+            '$jsonPath.returnType', json['returnType']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'returnType');
       }
       List<String> names;
       if (json.containsKey('names')) {
         names = jsonDecoder.decodeList(
-            jsonPath + '.names', json['names'], jsonDecoder.decodeString);
+            '$jsonPath.names', json['names'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'names');
       }
       bool canCreateGetter;
       if (json.containsKey('canCreateGetter')) {
         canCreateGetter = jsonDecoder.decodeBool(
-            jsonPath + '.canCreateGetter', json['canCreateGetter']);
+            '$jsonPath.canCreateGetter', json['canCreateGetter']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'canCreateGetter');
       }
       List<RefactoringMethodParameter> parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeList(
-            jsonPath + '.parameters',
+            '$jsonPath.parameters',
             json['parameters'],
             (String jsonPath, Object? json) =>
                 RefactoringMethodParameter.fromJson(
@@ -10050,14 +10045,14 @@
       List<int> offsets;
       if (json.containsKey('offsets')) {
         offsets = jsonDecoder.decodeList(
-            jsonPath + '.offsets', json['offsets'], jsonDecoder.decodeInt);
+            '$jsonPath.offsets', json['offsets'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offsets');
       }
       List<int> lengths;
       if (json.containsKey('lengths')) {
         lengths = jsonDecoder.decodeList(
-            jsonPath + '.lengths', json['lengths'], jsonDecoder.decodeInt);
+            '$jsonPath.lengths', json['lengths'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'lengths');
       }
@@ -10168,27 +10163,27 @@
       String returnType;
       if (json.containsKey('returnType')) {
         returnType = jsonDecoder.decodeString(
-            jsonPath + '.returnType', json['returnType']);
+            '$jsonPath.returnType', json['returnType']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'returnType');
       }
       bool createGetter;
       if (json.containsKey('createGetter')) {
         createGetter = jsonDecoder.decodeBool(
-            jsonPath + '.createGetter', json['createGetter']);
+            '$jsonPath.createGetter', json['createGetter']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'createGetter');
       }
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       List<RefactoringMethodParameter> parameters;
       if (json.containsKey('parameters')) {
         parameters = jsonDecoder.decodeList(
-            jsonPath + '.parameters',
+            '$jsonPath.parameters',
             json['parameters'],
             (String jsonPath, Object? json) =>
                 RefactoringMethodParameter.fromJson(
@@ -10198,8 +10193,8 @@
       }
       bool extractAll;
       if (json.containsKey('extractAll')) {
-        extractAll = jsonDecoder.decodeBool(
-            jsonPath + '.extractAll', json['extractAll']);
+        extractAll =
+            jsonDecoder.decodeBool('$jsonPath.extractAll', json['extractAll']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'extractAll');
       }
@@ -10317,7 +10312,7 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
@@ -10427,13 +10422,13 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
@@ -10503,7 +10498,7 @@
       List<FlutterWidgetProperty> properties;
       if (json.containsKey('properties')) {
         properties = jsonDecoder.decodeList(
-            jsonPath + '.properties',
+            '$jsonPath.properties',
             json['properties'],
             (String jsonPath, Object? json) =>
                 FlutterWidgetProperty.fromJson(jsonDecoder, jsonPath, json));
@@ -10637,73 +10632,72 @@
       FlutterOutlineKind kind;
       if (json.containsKey('kind')) {
         kind = FlutterOutlineKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       int codeOffset;
       if (json.containsKey('codeOffset')) {
         codeOffset =
-            jsonDecoder.decodeInt(jsonPath + '.codeOffset', json['codeOffset']);
+            jsonDecoder.decodeInt('$jsonPath.codeOffset', json['codeOffset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeOffset');
       }
       int codeLength;
       if (json.containsKey('codeLength')) {
         codeLength =
-            jsonDecoder.decodeInt(jsonPath + '.codeLength', json['codeLength']);
+            jsonDecoder.decodeInt('$jsonPath.codeLength', json['codeLength']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'codeLength');
       }
       String? label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       }
       Element? dartElement;
       if (json.containsKey('dartElement')) {
         dartElement = Element.fromJson(
-            jsonDecoder, jsonPath + '.dartElement', json['dartElement']);
+            jsonDecoder, '$jsonPath.dartElement', json['dartElement']);
       }
       List<FlutterOutlineAttribute>? attributes;
       if (json.containsKey('attributes')) {
         attributes = jsonDecoder.decodeList(
-            jsonPath + '.attributes',
+            '$jsonPath.attributes',
             json['attributes'],
             (String jsonPath, Object? json) =>
                 FlutterOutlineAttribute.fromJson(jsonDecoder, jsonPath, json));
       }
       String? className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       }
       String? parentAssociationLabel;
       if (json.containsKey('parentAssociationLabel')) {
         parentAssociationLabel = jsonDecoder.decodeString(
-            jsonPath + '.parentAssociationLabel',
-            json['parentAssociationLabel']);
+            '$jsonPath.parentAssociationLabel', json['parentAssociationLabel']);
       }
       String? variableName;
       if (json.containsKey('variableName')) {
         variableName = jsonDecoder.decodeString(
-            jsonPath + '.variableName', json['variableName']);
+            '$jsonPath.variableName', json['variableName']);
       }
       List<FlutterOutline>? children;
       if (json.containsKey('children')) {
         children = jsonDecoder.decodeList(
-            jsonPath + '.children',
+            '$jsonPath.children',
             json['children'],
             (String jsonPath, Object? json) =>
                 FlutterOutline.fromJson(jsonDecoder, jsonPath, json));
@@ -10863,40 +10857,40 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       String label;
       if (json.containsKey('label')) {
-        label = jsonDecoder.decodeString(jsonPath + '.label', json['label']);
+        label = jsonDecoder.decodeString('$jsonPath.label', json['label']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'label');
       }
       bool? literalValueBoolean;
       if (json.containsKey('literalValueBoolean')) {
         literalValueBoolean = jsonDecoder.decodeBool(
-            jsonPath + '.literalValueBoolean', json['literalValueBoolean']);
+            '$jsonPath.literalValueBoolean', json['literalValueBoolean']);
       }
       int? literalValueInteger;
       if (json.containsKey('literalValueInteger')) {
         literalValueInteger = jsonDecoder.decodeInt(
-            jsonPath + '.literalValueInteger', json['literalValueInteger']);
+            '$jsonPath.literalValueInteger', json['literalValueInteger']);
       }
       String? literalValueString;
       if (json.containsKey('literalValueString')) {
         literalValueString = jsonDecoder.decodeString(
-            jsonPath + '.literalValueString', json['literalValueString']);
+            '$jsonPath.literalValueString', json['literalValueString']);
       }
       Location? nameLocation;
       if (json.containsKey('nameLocation')) {
         nameLocation = Location.fromJson(
-            jsonDecoder, jsonPath + '.nameLocation', json['nameLocation']);
+            jsonDecoder, '$jsonPath.nameLocation', json['nameLocation']);
       }
       Location? valueLocation;
       if (json.containsKey('valueLocation')) {
         valueLocation = Location.fromJson(
-            jsonDecoder, jsonPath + '.valueLocation', json['valueLocation']);
+            jsonDecoder, '$jsonPath.valueLocation', json['valueLocation']);
       }
       return FlutterOutlineAttribute(name, label,
           literalValueBoolean: literalValueBoolean,
@@ -11077,14 +11071,14 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       FlutterOutline outline;
       if (json.containsKey('outline')) {
         outline = FlutterOutline.fromJson(
-            jsonDecoder, jsonPath + '.outline', json['outline']);
+            jsonDecoder, '$jsonPath.outline', json['outline']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'outline');
       }
@@ -11194,7 +11188,7 @@
       Map<FlutterService, List<String>> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeMap(
-            jsonPath + '.subscriptions', json['subscriptions'],
+            '$jsonPath.subscriptions', json['subscriptions'],
             keyDecoder: (String jsonPath, Object? json) =>
                 FlutterService.fromJson(jsonDecoder, jsonPath, json),
             valueDecoder: (String jsonPath, Object? json) => jsonDecoder
@@ -11305,14 +11299,14 @@
     if (json is Map) {
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       FlutterWidgetPropertyValue? value;
       if (json.containsKey('value')) {
         value = FlutterWidgetPropertyValue.fromJson(
-            jsonDecoder, jsonPath + '.value', json['value']);
+            jsonDecoder, '$jsonPath.value', json['value']);
       }
       return FlutterSetWidgetPropertyValueParams(id, value: value);
     } else {
@@ -11380,7 +11374,7 @@
       SourceChange change;
       if (json.containsKey('change')) {
         change = SourceChange.fromJson(
-            jsonDecoder, jsonPath + '.change', json['change']);
+            jsonDecoder, '$jsonPath.change', json['change']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'change');
       }
@@ -11498,43 +11492,43 @@
       String? documentation;
       if (json.containsKey('documentation')) {
         documentation = jsonDecoder.decodeString(
-            jsonPath + '.documentation', json['documentation']);
+            '$jsonPath.documentation', json['documentation']);
       }
       String? expression;
       if (json.containsKey('expression')) {
         expression = jsonDecoder.decodeString(
-            jsonPath + '.expression', json['expression']);
+            '$jsonPath.expression', json['expression']);
       }
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       bool isRequired;
       if (json.containsKey('isRequired')) {
-        isRequired = jsonDecoder.decodeBool(
-            jsonPath + '.isRequired', json['isRequired']);
+        isRequired =
+            jsonDecoder.decodeBool('$jsonPath.isRequired', json['isRequired']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isRequired');
       }
       bool isSafeToUpdate;
       if (json.containsKey('isSafeToUpdate')) {
         isSafeToUpdate = jsonDecoder.decodeBool(
-            jsonPath + '.isSafeToUpdate', json['isSafeToUpdate']);
+            '$jsonPath.isSafeToUpdate', json['isSafeToUpdate']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isSafeToUpdate');
       }
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       List<FlutterWidgetProperty>? children;
       if (json.containsKey('children')) {
         children = jsonDecoder.decodeList(
-            jsonPath + '.children',
+            '$jsonPath.children',
             json['children'],
             (String jsonPath, Object? json) =>
                 FlutterWidgetProperty.fromJson(jsonDecoder, jsonPath, json));
@@ -11542,12 +11536,12 @@
       FlutterWidgetPropertyEditor? editor;
       if (json.containsKey('editor')) {
         editor = FlutterWidgetPropertyEditor.fromJson(
-            jsonDecoder, jsonPath + '.editor', json['editor']);
+            jsonDecoder, '$jsonPath.editor', json['editor']);
       }
       FlutterWidgetPropertyValue? value;
       if (json.containsKey('value')) {
         value = FlutterWidgetPropertyValue.fromJson(
-            jsonDecoder, jsonPath + '.value', json['value']);
+            jsonDecoder, '$jsonPath.value', json['value']);
       }
       return FlutterWidgetProperty(id, isRequired, isSafeToUpdate, name,
           documentation: documentation,
@@ -11648,14 +11642,14 @@
       FlutterWidgetPropertyEditorKind kind;
       if (json.containsKey('kind')) {
         kind = FlutterWidgetPropertyEditorKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       List<FlutterWidgetPropertyValueEnumItem>? enumItems;
       if (json.containsKey('enumItems')) {
         enumItems = jsonDecoder.decodeList(
-            jsonPath + '.enumItems',
+            '$jsonPath.enumItems',
             json['enumItems'],
             (String jsonPath, Object? json) =>
                 FlutterWidgetPropertyValueEnumItem.fromJson(
@@ -11838,32 +11832,32 @@
       bool? boolValue;
       if (json.containsKey('boolValue')) {
         boolValue =
-            jsonDecoder.decodeBool(jsonPath + '.boolValue', json['boolValue']);
+            jsonDecoder.decodeBool('$jsonPath.boolValue', json['boolValue']);
       }
       double? doubleValue;
       if (json.containsKey('doubleValue')) {
         doubleValue = jsonDecoder.decodeDouble(
-            jsonPath + '.doubleValue', json['doubleValue'] as Object);
+            '$jsonPath.doubleValue', json['doubleValue'] as Object);
       }
       int? intValue;
       if (json.containsKey('intValue')) {
         intValue =
-            jsonDecoder.decodeInt(jsonPath + '.intValue', json['intValue']);
+            jsonDecoder.decodeInt('$jsonPath.intValue', json['intValue']);
       }
       String? stringValue;
       if (json.containsKey('stringValue')) {
         stringValue = jsonDecoder.decodeString(
-            jsonPath + '.stringValue', json['stringValue']);
+            '$jsonPath.stringValue', json['stringValue']);
       }
       FlutterWidgetPropertyValueEnumItem? enumValue;
       if (json.containsKey('enumValue')) {
         enumValue = FlutterWidgetPropertyValueEnumItem.fromJson(
-            jsonDecoder, jsonPath + '.enumValue', json['enumValue']);
+            jsonDecoder, '$jsonPath.enumValue', json['enumValue']);
       }
       String? expression;
       if (json.containsKey('expression')) {
         expression = jsonDecoder.decodeString(
-            jsonPath + '.expression', json['expression']);
+            '$jsonPath.expression', json['expression']);
       }
       return FlutterWidgetPropertyValue(
           boolValue: boolValue,
@@ -11972,27 +11966,27 @@
       String libraryUri;
       if (json.containsKey('libraryUri')) {
         libraryUri = jsonDecoder.decodeString(
-            jsonPath + '.libraryUri', json['libraryUri']);
+            '$jsonPath.libraryUri', json['libraryUri']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraryUri');
       }
       String className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'className');
       }
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       String? documentation;
       if (json.containsKey('documentation')) {
         documentation = jsonDecoder.decodeString(
-            jsonPath + '.documentation', json['documentation']);
+            '$jsonPath.documentation', json['documentation']);
       }
       return FlutterWidgetPropertyValueEnumItem(libraryUri, className, name,
           documentation: documentation);
@@ -12178,66 +12172,66 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String? containingLibraryPath;
       if (json.containsKey('containingLibraryPath')) {
         containingLibraryPath = jsonDecoder.decodeString(
-            jsonPath + '.containingLibraryPath', json['containingLibraryPath']);
+            '$jsonPath.containingLibraryPath', json['containingLibraryPath']);
       }
       String? containingLibraryName;
       if (json.containsKey('containingLibraryName')) {
         containingLibraryName = jsonDecoder.decodeString(
-            jsonPath + '.containingLibraryName', json['containingLibraryName']);
+            '$jsonPath.containingLibraryName', json['containingLibraryName']);
       }
       String? containingClassDescription;
       if (json.containsKey('containingClassDescription')) {
         containingClassDescription = jsonDecoder.decodeString(
-            jsonPath + '.containingClassDescription',
+            '$jsonPath.containingClassDescription',
             json['containingClassDescription']);
       }
       String? dartdoc;
       if (json.containsKey('dartdoc')) {
         dartdoc =
-            jsonDecoder.decodeString(jsonPath + '.dartdoc', json['dartdoc']);
+            jsonDecoder.decodeString('$jsonPath.dartdoc', json['dartdoc']);
       }
       String? elementDescription;
       if (json.containsKey('elementDescription')) {
         elementDescription = jsonDecoder.decodeString(
-            jsonPath + '.elementDescription', json['elementDescription']);
+            '$jsonPath.elementDescription', json['elementDescription']);
       }
       String? elementKind;
       if (json.containsKey('elementKind')) {
         elementKind = jsonDecoder.decodeString(
-            jsonPath + '.elementKind', json['elementKind']);
+            '$jsonPath.elementKind', json['elementKind']);
       }
       bool? isDeprecated;
       if (json.containsKey('isDeprecated')) {
         isDeprecated = jsonDecoder.decodeBool(
-            jsonPath + '.isDeprecated', json['isDeprecated']);
+            '$jsonPath.isDeprecated', json['isDeprecated']);
       }
       String? parameter;
       if (json.containsKey('parameter')) {
-        parameter = jsonDecoder.decodeString(
-            jsonPath + '.parameter', json['parameter']);
+        parameter =
+            jsonDecoder.decodeString('$jsonPath.parameter', json['parameter']);
       }
       String? propagatedType;
       if (json.containsKey('propagatedType')) {
         propagatedType = jsonDecoder.decodeString(
-            jsonPath + '.propagatedType', json['propagatedType']);
+            '$jsonPath.propagatedType', json['propagatedType']);
       }
       String? staticType;
       if (json.containsKey('staticType')) {
         staticType = jsonDecoder.decodeString(
-            jsonPath + '.staticType', json['staticType']);
+            '$jsonPath.staticType', json['staticType']);
       }
       return HoverInformation(offset, length,
           containingLibraryPath: containingLibraryPath,
@@ -12365,13 +12359,13 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -12430,13 +12424,13 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
@@ -12500,21 +12494,21 @@
       List<String> strings;
       if (json.containsKey('strings')) {
         strings = jsonDecoder.decodeList(
-            jsonPath + '.strings', json['strings'], jsonDecoder.decodeString);
+            '$jsonPath.strings', json['strings'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'strings');
       }
       List<int> uris;
       if (json.containsKey('uris')) {
         uris = jsonDecoder.decodeList(
-            jsonPath + '.uris', json['uris'], jsonDecoder.decodeInt);
+            '$jsonPath.uris', json['uris'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'uris');
       }
       List<int> names;
       if (json.containsKey('names')) {
         names = jsonDecoder.decodeList(
-            jsonPath + '.names', json['names'], jsonDecoder.decodeInt);
+            '$jsonPath.names', json['names'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'names');
       }
@@ -12583,20 +12577,20 @@
     if (json is Map) {
       String path;
       if (json.containsKey('path')) {
-        path = jsonDecoder.decodeString(jsonPath + '.path', json['path']);
+        path = jsonDecoder.decodeString('$jsonPath.path', json['path']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'path');
       }
       String prefix;
       if (json.containsKey('prefix')) {
-        prefix = jsonDecoder.decodeString(jsonPath + '.prefix', json['prefix']);
+        prefix = jsonDecoder.decodeString('$jsonPath.prefix', json['prefix']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'prefix');
       }
       List<String> elements;
       if (json.containsKey('elements')) {
         elements = jsonDecoder.decodeList(
-            jsonPath + '.elements', json['elements'], jsonDecoder.decodeString);
+            '$jsonPath.elements', json['elements'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elements');
       }
@@ -12661,14 +12655,14 @@
     if (json is Map) {
       String tag;
       if (json.containsKey('tag')) {
-        tag = jsonDecoder.decodeString(jsonPath + '.tag', json['tag']);
+        tag = jsonDecoder.decodeString('$jsonPath.tag', json['tag']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'tag');
       }
       int relevanceBoost;
       if (json.containsKey('relevanceBoost')) {
         relevanceBoost = jsonDecoder.decodeInt(
-            jsonPath + '.relevanceBoost', json['relevanceBoost']);
+            '$jsonPath.relevanceBoost', json['relevanceBoost']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'relevanceBoost');
       }
@@ -12740,21 +12734,21 @@
     if (json is Map) {
       int id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeInt(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeInt('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       int relevance;
       if (json.containsKey('relevance')) {
         relevance =
-            jsonDecoder.decodeInt(jsonPath + '.relevance', json['relevance']);
+            jsonDecoder.decodeInt('$jsonPath.relevance', json['relevance']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'relevance');
       }
       String? displayUri;
       if (json.containsKey('displayUri')) {
         displayUri = jsonDecoder.decodeString(
-            jsonPath + '.displayUri', json['displayUri']);
+            '$jsonPath.displayUri', json['displayUri']);
       }
       return IncludedSuggestionSet(id, relevance, displayUri: displayUri);
     } else {
@@ -12818,14 +12812,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       int occurrences;
       if (json.containsKey('occurrences')) {
-        occurrences = jsonDecoder.decodeInt(
-            jsonPath + '.occurrences', json['occurrences']);
+        occurrences =
+            jsonDecoder.decodeInt('$jsonPath.occurrences', json['occurrences']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'occurrences');
       }
@@ -12908,20 +12902,20 @@
     if (json is Map) {
       String? className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       }
       String methodName;
       if (json.containsKey('methodName')) {
         methodName = jsonDecoder.decodeString(
-            jsonPath + '.methodName', json['methodName']);
+            '$jsonPath.methodName', json['methodName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'methodName');
       }
       bool isDeclaration;
       if (json.containsKey('isDeclaration')) {
         isDeclaration = jsonDecoder.decodeBool(
-            jsonPath + '.isDeclaration', json['isDeclaration']);
+            '$jsonPath.isDeclaration', json['isDeclaration']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isDeclaration');
       }
@@ -12991,14 +12985,14 @@
       bool deleteSource;
       if (json.containsKey('deleteSource')) {
         deleteSource = jsonDecoder.decodeBool(
-            jsonPath + '.deleteSource', json['deleteSource']);
+            '$jsonPath.deleteSource', json['deleteSource']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'deleteSource');
       }
       bool inlineAll;
       if (json.containsKey('inlineAll')) {
         inlineAll =
-            jsonDecoder.decodeBool(jsonPath + '.inlineAll', json['inlineAll']);
+            jsonDecoder.decodeBool('$jsonPath.inlineAll', json['inlineAll']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'inlineAll');
       }
@@ -13060,7 +13054,7 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
@@ -13130,7 +13124,7 @@
       List<KytheEntry> entries;
       if (json.containsKey('entries')) {
         entries = jsonDecoder.decodeList(
-            jsonPath + '.entries',
+            '$jsonPath.entries',
             json['entries'],
             (String jsonPath, Object? json) =>
                 KytheEntry.fromJson(jsonDecoder, jsonPath, json));
@@ -13140,7 +13134,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -13218,13 +13212,13 @@
     if (json is Map) {
       String scope;
       if (json.containsKey('scope')) {
-        scope = jsonDecoder.decodeString(jsonPath + '.scope', json['scope']);
+        scope = jsonDecoder.decodeString('$jsonPath.scope', json['scope']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'scope');
       }
       List<String> libraryPaths;
       if (json.containsKey('libraryPaths')) {
-        libraryPaths = jsonDecoder.decodeList(jsonPath + '.libraryPaths',
+        libraryPaths = jsonDecoder.decodeList('$jsonPath.libraryPaths',
             json['libraryPaths'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'libraryPaths');
@@ -13299,7 +13293,7 @@
       String newFile;
       if (json.containsKey('newFile')) {
         newFile =
-            jsonDecoder.decodeString(jsonPath + '.newFile', json['newFile']);
+            jsonDecoder.decodeString('$jsonPath.newFile', json['newFile']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'newFile');
       }
@@ -13360,15 +13354,15 @@
     if (json is Map) {
       Element element;
       if (json.containsKey('element')) {
-        element = Element.fromJson(
-            jsonDecoder, jsonPath + '.element', json['element']);
+        element =
+            Element.fromJson(jsonDecoder, '$jsonPath.element', json['element']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'element');
       }
       String className;
       if (json.containsKey('className')) {
-        className = jsonDecoder.decodeString(
-            jsonPath + '.className', json['className']);
+        className =
+            jsonDecoder.decodeString('$jsonPath.className', json['className']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'className');
       }
@@ -13440,25 +13434,25 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       OverriddenMember? superclassMember;
       if (json.containsKey('superclassMember')) {
         superclassMember = OverriddenMember.fromJson(jsonDecoder,
-            jsonPath + '.superclassMember', json['superclassMember']);
+            '$jsonPath.superclassMember', json['superclassMember']);
       }
       List<OverriddenMember>? interfaceMembers;
       if (json.containsKey('interfaceMembers')) {
         interfaceMembers = jsonDecoder.decodeList(
-            jsonPath + '.interfaceMembers',
+            '$jsonPath.interfaceMembers',
             json['interfaceMembers'],
             (String jsonPath, Object? json) =>
                 OverriddenMember.fromJson(jsonDecoder, jsonPath, json));
@@ -13541,20 +13535,20 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       String key;
       if (json.containsKey('key')) {
-        key = jsonDecoder.decodeString(jsonPath + '.key', json['key']);
+        key = jsonDecoder.decodeString('$jsonPath.key', json['key']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'key');
       }
       String example;
       if (json.containsKey('example')) {
         example =
-            jsonDecoder.decodeString(jsonPath + '.example', json['example']);
+            jsonDecoder.decodeString('$jsonPath.example', json['example']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'example');
       }
@@ -13613,7 +13607,7 @@
       bool isListingPackageDirs;
       if (json.containsKey('isListingPackageDirs')) {
         isListingPackageDirs = jsonDecoder.decodeBool(
-            jsonPath + '.isListingPackageDirs', json['isListingPackageDirs']);
+            '$jsonPath.isListingPackageDirs', json['isListingPackageDirs']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isListingPackageDirs');
       }
@@ -13749,27 +13743,27 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       String elementKindName;
       if (json.containsKey('elementKindName')) {
         elementKindName = jsonDecoder.decodeString(
-            jsonPath + '.elementKindName', json['elementKindName']);
+            '$jsonPath.elementKindName', json['elementKindName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'elementKindName');
       }
       String oldName;
       if (json.containsKey('oldName')) {
         oldName =
-            jsonDecoder.decodeString(jsonPath + '.oldName', json['oldName']);
+            jsonDecoder.decodeString('$jsonPath.oldName', json['oldName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'oldName');
       }
@@ -13832,7 +13826,7 @@
       String newName;
       if (json.containsKey('newName')) {
         newName =
-            jsonDecoder.decodeString(jsonPath + '.newName', json['newName']);
+            jsonDecoder.decodeString('$jsonPath.newName', json['newName']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'newName');
       }
@@ -13899,21 +13893,21 @@
       RequestErrorCode code;
       if (json.containsKey('code')) {
         code = RequestErrorCode.fromJson(
-            jsonDecoder, jsonPath + '.code', json['code']);
+            jsonDecoder, '$jsonPath.code', json['code']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'code');
       }
       String message;
       if (json.containsKey('message')) {
         message =
-            jsonDecoder.decodeString(jsonPath + '.message', json['message']);
+            jsonDecoder.decodeString('$jsonPath.message', json['message']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'message');
       }
       String? stackTrace;
       if (json.containsKey('stackTrace')) {
         stackTrace = jsonDecoder.decodeString(
-            jsonPath + '.stackTrace', json['stackTrace']);
+            '$jsonPath.stackTrace', json['stackTrace']);
       }
       return RequestError(code, message, stackTrace: stackTrace);
     } else {
@@ -14332,20 +14326,20 @@
     if (json is Map) {
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       int length;
       if (json.containsKey('length')) {
-        length = jsonDecoder.decodeInt(jsonPath + '.length', json['length']);
+        length = jsonDecoder.decodeInt('$jsonPath.length', json['length']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'length');
       }
       RuntimeCompletionExpressionType? type;
       if (json.containsKey('type')) {
         type = RuntimeCompletionExpressionType.fromJson(
-            jsonDecoder, jsonPath + '.type', json['type']);
+            jsonDecoder, '$jsonPath.type', json['type']);
       }
       return RuntimeCompletionExpression(offset, length, type: type);
     } else {
@@ -14445,23 +14439,23 @@
       String? libraryPath;
       if (json.containsKey('libraryPath')) {
         libraryPath = jsonDecoder.decodeString(
-            jsonPath + '.libraryPath', json['libraryPath']);
+            '$jsonPath.libraryPath', json['libraryPath']);
       }
       RuntimeCompletionExpressionTypeKind kind;
       if (json.containsKey('kind')) {
         kind = RuntimeCompletionExpressionTypeKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String? name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       }
       List<RuntimeCompletionExpressionType>? typeArguments;
       if (json.containsKey('typeArguments')) {
         typeArguments = jsonDecoder.decodeList(
-            jsonPath + '.typeArguments',
+            '$jsonPath.typeArguments',
             json['typeArguments'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpressionType.fromJson(
@@ -14470,12 +14464,12 @@
       RuntimeCompletionExpressionType? returnType;
       if (json.containsKey('returnType')) {
         returnType = RuntimeCompletionExpressionType.fromJson(
-            jsonDecoder, jsonPath + '.returnType', json['returnType']);
+            jsonDecoder, '$jsonPath.returnType', json['returnType']);
       }
       List<RuntimeCompletionExpressionType>? parameterTypes;
       if (json.containsKey('parameterTypes')) {
         parameterTypes = jsonDecoder.decodeList(
-            jsonPath + '.parameterTypes',
+            '$jsonPath.parameterTypes',
             json['parameterTypes'],
             (String jsonPath, Object? json) =>
                 RuntimeCompletionExpressionType.fromJson(
@@ -14483,7 +14477,7 @@
       }
       List<String>? parameterNames;
       if (json.containsKey('parameterNames')) {
-        parameterNames = jsonDecoder.decodeList(jsonPath + '.parameterNames',
+        parameterNames = jsonDecoder.decodeList('$jsonPath.parameterNames',
             json['parameterNames'], jsonDecoder.decodeString);
       }
       return RuntimeCompletionExpressionType(kind,
@@ -14658,14 +14652,14 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
       RuntimeCompletionExpressionType type;
       if (json.containsKey('type')) {
         type = RuntimeCompletionExpressionType.fromJson(
-            jsonDecoder, jsonPath + '.type', json['type']);
+            jsonDecoder, '$jsonPath.type', json['type']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'type');
       }
@@ -14731,20 +14725,20 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       bool includePotential;
       if (json.containsKey('includePotential')) {
         includePotential = jsonDecoder.decodeBool(
-            jsonPath + '.includePotential', json['includePotential']);
+            '$jsonPath.includePotential', json['includePotential']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'includePotential');
       }
@@ -14824,12 +14818,12 @@
     if (json is Map) {
       String? id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       }
       Element? element;
       if (json.containsKey('element')) {
-        element = Element.fromJson(
-            jsonDecoder, jsonPath + '.element', json['element']);
+        element =
+            Element.fromJson(jsonDecoder, '$jsonPath.element', json['element']);
       }
       return SearchFindElementReferencesResult(id: id, element: element);
     } else {
@@ -14901,7 +14895,7 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
@@ -14963,7 +14957,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -15027,7 +15021,7 @@
     if (json is Map) {
       String name;
       if (json.containsKey('name')) {
-        name = jsonDecoder.decodeString(jsonPath + '.name', json['name']);
+        name = jsonDecoder.decodeString('$jsonPath.name', json['name']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'name');
       }
@@ -15089,7 +15083,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -15155,7 +15149,7 @@
       String pattern;
       if (json.containsKey('pattern')) {
         pattern =
-            jsonDecoder.decodeString(jsonPath + '.pattern', json['pattern']);
+            jsonDecoder.decodeString('$jsonPath.pattern', json['pattern']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'pattern');
       }
@@ -15217,7 +15211,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -15293,17 +15287,17 @@
     if (json is Map) {
       String? file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       }
       String? pattern;
       if (json.containsKey('pattern')) {
         pattern =
-            jsonDecoder.decodeString(jsonPath + '.pattern', json['pattern']);
+            jsonDecoder.decodeString('$jsonPath.pattern', json['pattern']);
       }
       int? maxResults;
       if (json.containsKey('maxResults')) {
         maxResults =
-            jsonDecoder.decodeInt(jsonPath + '.maxResults', json['maxResults']);
+            jsonDecoder.decodeInt('$jsonPath.maxResults', json['maxResults']);
       }
       return SearchGetElementDeclarationsParams(
           file: file, pattern: pattern, maxResults: maxResults);
@@ -15386,7 +15380,7 @@
       List<ElementDeclaration> declarations;
       if (json.containsKey('declarations')) {
         declarations = jsonDecoder.decodeList(
-            jsonPath + '.declarations',
+            '$jsonPath.declarations',
             json['declarations'],
             (String jsonPath, Object? json) =>
                 ElementDeclaration.fromJson(jsonDecoder, jsonPath, json));
@@ -15396,7 +15390,7 @@
       List<String> files;
       if (json.containsKey('files')) {
         files = jsonDecoder.decodeList(
-            jsonPath + '.files', json['files'], jsonDecoder.decodeString);
+            '$jsonPath.files', json['files'], jsonDecoder.decodeString);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'files');
       }
@@ -15477,20 +15471,20 @@
     if (json is Map) {
       String file;
       if (json.containsKey('file')) {
-        file = jsonDecoder.decodeString(jsonPath + '.file', json['file']);
+        file = jsonDecoder.decodeString('$jsonPath.file', json['file']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'file');
       }
       int offset;
       if (json.containsKey('offset')) {
-        offset = jsonDecoder.decodeInt(jsonPath + '.offset', json['offset']);
+        offset = jsonDecoder.decodeInt('$jsonPath.offset', json['offset']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'offset');
       }
       bool? superOnly;
       if (json.containsKey('superOnly')) {
         superOnly =
-            jsonDecoder.decodeBool(jsonPath + '.superOnly', json['superOnly']);
+            jsonDecoder.decodeBool('$jsonPath.superOnly', json['superOnly']);
       }
       return SearchGetTypeHierarchyParams(file, offset, superOnly: superOnly);
     } else {
@@ -15570,7 +15564,7 @@
       List<TypeHierarchyItem>? hierarchyItems;
       if (json.containsKey('hierarchyItems')) {
         hierarchyItems = jsonDecoder.decodeList(
-            jsonPath + '.hierarchyItems',
+            '$jsonPath.hierarchyItems',
             json['hierarchyItems'],
             (String jsonPath, Object? json) =>
                 TypeHierarchyItem.fromJson(jsonDecoder, jsonPath, json));
@@ -15659,28 +15653,28 @@
       Location location;
       if (json.containsKey('location')) {
         location = Location.fromJson(
-            jsonDecoder, jsonPath + '.location', json['location']);
+            jsonDecoder, '$jsonPath.location', json['location']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'location');
       }
       SearchResultKind kind;
       if (json.containsKey('kind')) {
         kind = SearchResultKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       bool isPotential;
       if (json.containsKey('isPotential')) {
         isPotential = jsonDecoder.decodeBool(
-            jsonPath + '.isPotential', json['isPotential']);
+            '$jsonPath.isPotential', json['isPotential']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isPotential');
       }
       List<Element> path;
       if (json.containsKey('path')) {
         path = jsonDecoder.decodeList(
-            jsonPath + '.path',
+            '$jsonPath.path',
             json['path'],
             (String jsonPath, Object? json) =>
                 Element.fromJson(jsonDecoder, jsonPath, json));
@@ -15844,14 +15838,14 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
       List<SearchResult> results;
       if (json.containsKey('results')) {
         results = jsonDecoder.decodeList(
-            jsonPath + '.results',
+            '$jsonPath.results',
             json['results'],
             (String jsonPath, Object? json) =>
                 SearchResult.fromJson(jsonDecoder, jsonPath, json));
@@ -15860,7 +15854,7 @@
       }
       bool isLast;
       if (json.containsKey('isLast')) {
-        isLast = jsonDecoder.decodeBool(jsonPath + '.isLast', json['isLast']);
+        isLast = jsonDecoder.decodeBool('$jsonPath.isLast', json['isLast']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isLast');
       }
@@ -15930,7 +15924,7 @@
     if (json is Map) {
       String id;
       if (json.containsKey('id')) {
-        id = jsonDecoder.decodeString(jsonPath + '.id', json['id']);
+        id = jsonDecoder.decodeString('$jsonPath.id', json['id']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'id');
       }
@@ -16020,13 +16014,13 @@
       String version;
       if (json.containsKey('version')) {
         version =
-            jsonDecoder.decodeString(jsonPath + '.version', json['version']);
+            jsonDecoder.decodeString('$jsonPath.version', json['version']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'version');
       }
       int pid;
       if (json.containsKey('pid')) {
-        pid = jsonDecoder.decodeInt(jsonPath + '.pid', json['pid']);
+        pid = jsonDecoder.decodeInt('$jsonPath.pid', json['pid']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'pid');
       }
@@ -16100,22 +16094,21 @@
     if (json is Map) {
       bool isFatal;
       if (json.containsKey('isFatal')) {
-        isFatal =
-            jsonDecoder.decodeBool(jsonPath + '.isFatal', json['isFatal']);
+        isFatal = jsonDecoder.decodeBool('$jsonPath.isFatal', json['isFatal']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'isFatal');
       }
       String message;
       if (json.containsKey('message')) {
         message =
-            jsonDecoder.decodeString(jsonPath + '.message', json['message']);
+            jsonDecoder.decodeString('$jsonPath.message', json['message']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'message');
       }
       String stackTrace;
       if (json.containsKey('stackTrace')) {
         stackTrace = jsonDecoder.decodeString(
-            jsonPath + '.stackTrace', json['stackTrace']);
+            '$jsonPath.stackTrace', json['stackTrace']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'stackTrace');
       }
@@ -16208,7 +16201,7 @@
       String version;
       if (json.containsKey('version')) {
         version =
-            jsonDecoder.decodeString(jsonPath + '.version', json['version']);
+            jsonDecoder.decodeString('$jsonPath.version', json['version']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'version');
       }
@@ -16282,20 +16275,20 @@
     if (json is Map) {
       int time;
       if (json.containsKey('time')) {
-        time = jsonDecoder.decodeInt(jsonPath + '.time', json['time']);
+        time = jsonDecoder.decodeInt('$jsonPath.time', json['time']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'time');
       }
       ServerLogEntryKind kind;
       if (json.containsKey('kind')) {
         kind = ServerLogEntryKind.fromJson(
-            jsonDecoder, jsonPath + '.kind', json['kind']);
+            jsonDecoder, '$jsonPath.kind', json['kind']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'kind');
       }
       String data;
       if (json.containsKey('data')) {
-        data = jsonDecoder.decodeString(jsonPath + '.data', json['data']);
+        data = jsonDecoder.decodeString('$jsonPath.data', json['data']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'data');
       }
@@ -16439,7 +16432,7 @@
       ServerLogEntry entry;
       if (json.containsKey('entry')) {
         entry = ServerLogEntry.fromJson(
-            jsonDecoder, jsonPath + '.entry', json['entry']);
+            jsonDecoder, '$jsonPath.entry', json['entry']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'entry');
       }
@@ -16549,7 +16542,7 @@
       List<ServerService> subscriptions;
       if (json.containsKey('subscriptions')) {
         subscriptions = jsonDecoder.decodeList(
-            jsonPath + '.subscriptions',
+            '$jsonPath.subscriptions',
             json['subscriptions'],
             (String jsonPath, Object? json) =>
                 ServerService.fromJson(jsonDecoder, jsonPath, json));
@@ -16698,11 +16691,11 @@
       AnalysisStatus? analysis;
       if (json.containsKey('analysis')) {
         analysis = AnalysisStatus.fromJson(
-            jsonDecoder, jsonPath + '.analysis', json['analysis']);
+            jsonDecoder, '$jsonPath.analysis', json['analysis']);
       }
       PubStatus? pub;
       if (json.containsKey('pub')) {
-        pub = PubStatus.fromJson(jsonDecoder, jsonPath + '.pub', json['pub']);
+        pub = PubStatus.fromJson(jsonDecoder, '$jsonPath.pub', json['pub']);
       }
       return ServerStatusParams(analysis: analysis, pub: pub);
     } else {
@@ -16816,43 +16809,43 @@
       Element classElement;
       if (json.containsKey('classElement')) {
         classElement = Element.fromJson(
-            jsonDecoder, jsonPath + '.classElement', json['classElement']);
+            jsonDecoder, '$jsonPath.classElement', json['classElement']);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'classElement');
       }
       String? displayName;
       if (json.containsKey('displayName')) {
         displayName = jsonDecoder.decodeString(
-            jsonPath + '.displayName', json['displayName']);
+            '$jsonPath.displayName', json['displayName']);
       }
       Element? memberElement;
       if (json.containsKey('memberElement')) {
         memberElement = Element.fromJson(
-            jsonDecoder, jsonPath + '.memberElement', json['memberElement']);
+            jsonDecoder, '$jsonPath.memberElement', json['memberElement']);
       }
       int? superclass;
       if (json.containsKey('superclass')) {
         superclass =
-            jsonDecoder.decodeInt(jsonPath + '.superclass', json['superclass']);
+            jsonDecoder.decodeInt('$jsonPath.superclass', json['superclass']);
       }
       List<int> interfaces;
       if (json.containsKey('interfaces')) {
-        interfaces = jsonDecoder.decodeList(jsonPath + '.interfaces',
-            json['interfaces'], jsonDecoder.decodeInt);
+        interfaces = jsonDecoder.decodeList(
+            '$jsonPath.interfaces', json['interfaces'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'interfaces');
       }
       List<int> mixins;
       if (json.containsKey('mixins')) {
         mixins = jsonDecoder.decodeList(
-            jsonPath + '.mixins', json['mixins'], jsonDecoder.decodeInt);
+            '$jsonPath.mixins', json['mixins'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'mixins');
       }
       List<int> subclasses;
       if (json.containsKey('subclasses')) {
-        subclasses = jsonDecoder.decodeList(jsonPath + '.subclasses',
-            json['subclasses'], jsonDecoder.decodeInt);
+        subclasses = jsonDecoder.decodeList(
+            '$jsonPath.subclasses', json['subclasses'], jsonDecoder.decodeInt);
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'subclasses');
       }
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
index 6259d9a..2192ee4 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 import 'dart:convert' hide JsonDecoder;
 
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_constants.dart b/pkg/analyzer_plugin/lib/protocol/protocol_constants.dart
index 7192e9a..51700b4 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_constants.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_constants.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 const String ANALYSIS_NOTIFICATION_ERRORS = 'analysis.errors';
 const String ANALYSIS_NOTIFICATION_ERRORS_ERRORS = 'errors';
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_generated.dart b/pkg/analyzer_plugin/lib/protocol/protocol_generated.dart
index cae7d66..a4314e2 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_generated.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_generated.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 import 'dart:convert' hide JsonDecoder;
 
diff --git a/pkg/analyzer_plugin/test/integration/support/integration_test_methods.dart b/pkg/analyzer_plugin/test/integration/support/integration_test_methods.dart
index 443bc76..309521c 100644
--- a/pkg/analyzer_plugin/test/integration/support/integration_test_methods.dart
+++ b/pkg/analyzer_plugin/test/integration/support/integration_test_methods.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 /// Convenience methods for running integration tests.
 import 'dart:async';
diff --git a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
index d360ead..04226f7 100644
--- a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
+++ b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
@@ -7,7 +7,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 
 /// Matchers for data types defined in the analysis server API.
 import 'package:test/test.dart';
diff --git a/pkg/analyzer_utilities/lib/tools.dart b/pkg/analyzer_utilities/lib/tools.dart
index b57f35a..c1a5ca7 100644
--- a/pkg/analyzer_utilities/lib/tools.dart
+++ b/pkg/analyzer_utilities/lib/tools.dart
@@ -170,7 +170,6 @@
 // "pkg/analysis_server/tool/spec/generate_files".
 
 // ignore_for_file: constant_identifier_names
-// ignore_for_file: prefer_interpolation_to_compose_strings
 ''';
     }
     writeln(header.trim());
@@ -278,7 +277,7 @@
     for (var target in targets) {
       var ok = await target.check(pkgPath);
       if (!ok) {
-        print('${target.output(pkgPath).absolute}'
+        print('${normalize(target.output(pkgPath).absolute.path)}'
             " doesn't have expected contents.");
         generateNeeded = true;
       }
@@ -376,7 +375,7 @@
       var file = entry.key;
       var fileContentsComputer = entry.value;
       var outputFile = File(posix.join(outputDirectory.path, file));
-      print('  ${outputFile.path}');
+      print('  ${normalize(outputFile.path)}');
       var contents = await fileContentsComputer(pkgPath);
       outputFile.writeAsStringSync(contents);
     }
@@ -426,7 +425,7 @@
   @override
   Future<void> generate(String pkgPath) async {
     var outputFile = output(pkgPath);
-    print('  ${outputFile.path}');
+    print('  ${normalize(outputFile.path)}');
     var contents = await computeContents(pkgPath);
     outputFile.writeAsStringSync(contents);
     if (isDartFile) {
diff --git a/tools/VERSION b/tools/VERSION
index 21952de..7609b64 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 132
+PRERELEASE 133
 PRERELEASE_PATCH 0
\ No newline at end of file