Simplify canParse on LSP types to only check for required fields

Change-Id: Idafb6936f0dd7adf283a690c5e56e2eebfc53ee4
Reviewed-on: https://dart-review.googlesource.com/c/80666
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index 97a2721..1c32810 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -39,15 +39,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('edit') || !WorkspaceEdit.canParse(map['edit'])) {
-      return false;
-    }
-    const validFieldNames = ['label', 'edit'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('edit') &&
+        WorkspaceEdit.canParse(obj['edit']);
   }
 }
 
@@ -73,15 +67,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('applied') || !map['applied'] is bool) {
-      return false;
-    }
-    const validFieldNames = ['applied'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('applied') &&
+        obj['applied'] is bool;
   }
 }
 
@@ -110,15 +98,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('id') || !(map['id'] is num || map['id'] is String)) {
-      return false;
-    }
-    const validFieldNames = ['id'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('id') &&
+        (obj['id'] is num || obj['id'] is String);
   }
 }
 
@@ -157,12 +139,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['workspace', 'textDocument', 'experimental'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -226,15 +203,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('title') || !map['title'] is String) {
-      return false;
-    }
-    const validFieldNames = ['title', 'kind', 'diagnostics', 'edit', 'command'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('title') &&
+        obj['title'] is String;
   }
 }
 
@@ -275,19 +246,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('diagnostics') ||
-        !(map['diagnostics'] is List &&
-            (map['diagnostics'].length == 0 ||
-                map['diagnostics']
-                    .every((item) => Diagnostic.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['diagnostics', 'only'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('diagnostics') &&
+        (obj['diagnostics'] is List &&
+            (obj['diagnostics'].length == 0 ||
+                obj['diagnostics'].every((item) => Diagnostic.canParse(item))));
   }
 }
 
@@ -365,12 +328,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['codeActionKinds'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -415,23 +373,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    if (!map.containsKey('context') ||
-        !CodeActionContext.canParse(map['context'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'range', 'context'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']) &&
+        obj.containsKey('context') &&
+        CodeActionContext.canParse(obj['context']);
   }
 }
 
@@ -468,19 +416,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['documentSelector', 'codeActionKinds'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -527,15 +468,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    const validFieldNames = ['range', 'command', 'data'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']);
   }
 }
 
@@ -559,12 +494,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['resolveProvider'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -591,16 +521,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']);
   }
 }
 
@@ -632,19 +555,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['resolveProvider', 'documentSelector'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -687,24 +603,15 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('red') || !map['red'] is num) {
-      return false;
-    }
-    if (!map.containsKey('green') || !map['green'] is num) {
-      return false;
-    }
-    if (!map.containsKey('blue') || !map['blue'] is num) {
-      return false;
-    }
-    if (!map.containsKey('alpha') || !map['alpha'] is num) {
-      return false;
-    }
-    const validFieldNames = ['red', 'green', 'blue', 'alpha'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('red') &&
+        obj['red'] is num &&
+        obj.containsKey('green') &&
+        obj['green'] is num &&
+        obj.containsKey('blue') &&
+        obj['blue'] is num &&
+        obj.containsKey('alpha') &&
+        obj['alpha'] is num;
   }
 }
 
@@ -737,18 +644,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    if (!map.containsKey('color') || !Color.canParse(map['color'])) {
-      return false;
-    }
-    const validFieldNames = ['range', 'color'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']) &&
+        obj.containsKey('color') &&
+        Color.canParse(obj['color']);
   }
 }
 
@@ -796,15 +696,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('label') || !map['label'] is String) {
-      return false;
-    }
-    const validFieldNames = ['label', 'textEdit', 'additionalTextEdits'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('label') &&
+        obj['label'] is String;
   }
 }
 
@@ -847,22 +741,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('color') || !Color.canParse(map['color'])) {
-      return false;
-    }
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'color', 'range'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('color') &&
+        Color.canParse(obj['color']) &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']);
   }
 }
 
@@ -874,12 +759,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = [''];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -921,18 +801,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('title') || !map['title'] is String) {
-      return false;
-    }
-    if (!map.containsKey('command') || !map['command'] is String) {
-      return false;
-    }
-    const validFieldNames = ['title', 'command', 'arguments'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('title') &&
+        obj['title'] is String &&
+        obj.containsKey('command') &&
+        obj['command'] is String;
   }
 }
 
@@ -968,16 +841,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('triggerKind') ||
-        !CompletionTriggerKind.canParse(map['triggerKind'])) {
-      return false;
-    }
-    const validFieldNames = ['triggerKind', 'triggerCharacter'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('triggerKind') &&
+        CompletionTriggerKind.canParse(obj['triggerKind']);
   }
 }
 
@@ -1178,31 +1044,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('label') || !map['label'] is String) {
-      return false;
-    }
-    const validFieldNames = [
-      'label',
-      'kind',
-      'detail',
-      'documentation',
-      'deprecated',
-      'preselect',
-      'sortText',
-      'filterText',
-      'insertText',
-      'insertTextFormat',
-      'textEdit',
-      'additionalTextEdits',
-      'commitCharacters',
-      'command',
-      'data'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('label') &&
+        obj['label'] is String;
   }
 }
 
@@ -1318,21 +1162,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('isIncomplete') || !map['isIncomplete'] is bool) {
-      return false;
-    }
-    if (!map.containsKey('items') ||
-        !(map['items'] is List &&
-            (map['items'].length == 0 ||
-                map['items'].every((item) => CompletionItem.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['isIncomplete', 'items'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('isIncomplete') &&
+        obj['isIncomplete'] is bool &&
+        obj.containsKey('items') &&
+        (obj['items'] is List &&
+            (obj['items'].length == 0 ||
+                obj['items'].every((item) => CompletionItem.canParse(item))));
   }
 }
 
@@ -1367,12 +1203,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['resolveProvider', 'triggerCharacters'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -1417,19 +1248,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('position') || !Position.canParse(map['position'])) {
-      return false;
-    }
-    const validFieldNames = ['context', 'textDocument', 'position'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('position') &&
+        Position.canParse(obj['position']);
   }
 }
 
@@ -1483,23 +1306,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = [
-      'triggerCharacters',
-      'resolveProvider',
-      'documentSelector'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -1570,12 +1382,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['scopeUri', 'section'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -1602,19 +1409,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('items') ||
-        !(map['items'] is List &&
-            (map['items'].length == 0 ||
-                map['items']
-                    .every((item) => ConfigurationItem.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['items'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('items') &&
+        (obj['items'] is List &&
+            (obj['items'].length == 0 ||
+                obj['items']
+                    .every((item) => ConfigurationItem.canParse(item))));
   }
 }
 
@@ -1647,15 +1447,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    const validFieldNames = ['uri', 'options'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String;
   }
 }
 
@@ -1686,12 +1480,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['overwrite', 'ignoreIfExists'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -1724,15 +1513,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    const validFieldNames = ['uri', 'options'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String;
   }
 }
 
@@ -1763,12 +1546,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['recursive', 'ignoreIfNotExists'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -1843,25 +1621,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    if (!map.containsKey('message') || !map['message'] is String) {
-      return false;
-    }
-    const validFieldNames = [
-      'range',
-      'severity',
-      'code',
-      'source',
-      'message',
-      'relatedInformation'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']) &&
+        obj.containsKey('message') &&
+        obj['message'] is String;
   }
 }
 
@@ -1899,18 +1663,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('location') || !Location.canParse(map['location'])) {
-      return false;
-    }
-    if (!map.containsKey('message') || !map['message'] is String) {
-      return false;
-    }
-    const validFieldNames = ['location', 'message'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('location') &&
+        Location.canParse(obj['location']) &&
+        obj.containsKey('message') &&
+        obj['message'] is String;
   }
 }
 
@@ -1976,15 +1733,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('settings') || !true) {
-      return false;
-    }
-    const validFieldNames = ['settings'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> && obj.containsKey('settings') && true;
   }
 }
 
@@ -2027,23 +1776,14 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !VersionedTextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('contentChanges') ||
-        !(map['contentChanges'] is List &&
-            (map['contentChanges'].length == 0 ||
-                map['contentChanges'].every((item) =>
-                    TextDocumentContentChangeEvent.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'contentChanges'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        VersionedTextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('contentChanges') &&
+        (obj['contentChanges'] is List &&
+            (obj['contentChanges'].length == 0 ||
+                obj['contentChanges'].every(
+                    (item) => TextDocumentContentChangeEvent.canParse(item))));
   }
 }
 
@@ -2072,18 +1812,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('changes') ||
-        !(map['changes'] is List &&
-            (map['changes'].length == 0 ||
-                map['changes'].every((item) => FileEvent.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['changes'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('changes') &&
+        (obj['changes'] is List &&
+            (obj['changes'].length == 0 ||
+                obj['changes'].every((item) => FileEvent.canParse(item))));
   }
 }
 
@@ -2115,19 +1848,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('watchers') ||
-        !(map['watchers'] is List &&
-            (map['watchers'].length == 0 ||
-                map['watchers']
-                    .every((item) => FileSystemWatcher.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['watchers'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('watchers') &&
+        (obj['watchers'] is List &&
+            (obj['watchers'].length == 0 ||
+                obj['watchers']
+                    .every((item) => FileSystemWatcher.canParse(item))));
   }
 }
 
@@ -2152,16 +1878,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('event') ||
-        !WorkspaceFoldersChangeEvent.canParse(map['event'])) {
-      return false;
-    }
-    const validFieldNames = ['event'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('event') &&
+        WorkspaceFoldersChangeEvent.canParse(obj['event']);
   }
 }
 
@@ -2188,16 +1907,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']);
   }
 }
 
@@ -2223,16 +1935,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentItem.canParse(map['textDocument'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentItem.canParse(obj['textDocument']);
   }
 }
 
@@ -2267,16 +1972,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'text'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']);
   }
 }
 
@@ -2313,12 +2011,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['language', 'scheme', 'pattern'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -2354,20 +2047,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('options') ||
-        !FormattingOptions.canParse(map['options'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'options'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('options') &&
+        FormattingOptions.canParse(obj['options']);
   }
 }
 
@@ -2402,15 +2086,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    const validFieldNames = ['range', 'kind'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']);
   }
 }
 
@@ -2491,15 +2169,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    const validFieldNames = ['range', 'target', 'data'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']);
   }
 }
 
@@ -2523,12 +2195,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['resolveProvider'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -2555,16 +2222,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']);
   }
 }
 
@@ -2599,19 +2259,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['resolveProvider', 'documentSelector'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -2650,16 +2303,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('firstTriggerCharacter') ||
-        !map['firstTriggerCharacter'] is String) {
-      return false;
-    }
-    const validFieldNames = ['firstTriggerCharacter', 'moreTriggerCharacter'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('firstTriggerCharacter') &&
+        obj['firstTriggerCharacter'] is String;
   }
 }
 
@@ -2714,26 +2360,15 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('position') || !Position.canParse(map['position'])) {
-      return false;
-    }
-    if (!map.containsKey('ch') || !map['ch'] is String) {
-      return false;
-    }
-    if (!map.containsKey('options') ||
-        !FormattingOptions.canParse(map['options'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'position', 'ch', 'options'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('position') &&
+        Position.canParse(obj['position']) &&
+        obj.containsKey('ch') &&
+        obj['ch'] is String &&
+        obj.containsKey('options') &&
+        FormattingOptions.canParse(obj['options']);
   }
 }
 
@@ -2783,27 +2418,14 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('firstTriggerCharacter') ||
-        !map['firstTriggerCharacter'] is String) {
-      return false;
-    }
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = [
-      'firstTriggerCharacter',
-      'moreTriggerCharacter',
-      'documentSelector'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('firstTriggerCharacter') &&
+        obj['firstTriggerCharacter'] is String &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -2847,23 +2469,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    if (!map.containsKey('options') ||
-        !FormattingOptions.canParse(map['options'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'range', 'options'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']) &&
+        obj.containsKey('options') &&
+        FormattingOptions.canParse(obj['options']);
   }
 }
 
@@ -2949,33 +2561,15 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('name') || !map['name'] is String) {
-      return false;
-    }
-    if (!map.containsKey('kind') || !SymbolKind.canParse(map['kind'])) {
-      return false;
-    }
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    if (!map.containsKey('selectionRange') ||
-        !Range.canParse(map['selectionRange'])) {
-      return false;
-    }
-    const validFieldNames = [
-      'name',
-      'detail',
-      'kind',
-      'deprecated',
-      'range',
-      'selectionRange',
-      'children'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('name') &&
+        obj['name'] is String &&
+        obj.containsKey('kind') &&
+        SymbolKind.canParse(obj['kind']) &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']) &&
+        obj.containsKey('selectionRange') &&
+        Range.canParse(obj['selectionRange']);
   }
 }
 
@@ -3002,16 +2596,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']);
   }
 }
 
@@ -3052,18 +2639,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('commands') ||
-        !(map['commands'] is List &&
-            (map['commands'].length == 0 ||
-                map['commands'].every((item) => item is String)))) {
-      return false;
-    }
-    const validFieldNames = ['commands'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('commands') &&
+        (obj['commands'] is List &&
+            (obj['commands'].length == 0 ||
+                obj['commands'].every((item) => item is String)));
   }
 }
 
@@ -3097,15 +2677,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('command') || !map['command'] is String) {
-      return false;
-    }
-    const validFieldNames = ['command', 'arguments'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('command') &&
+        obj['command'] is String;
   }
 }
 
@@ -3134,18 +2708,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('commands') ||
-        !(map['commands'] is List &&
-            (map['commands'].length == 0 ||
-                map['commands'].every((item) => item is String)))) {
-      return false;
-    }
-    const validFieldNames = ['commands'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('commands') &&
+        (obj['commands'] is List &&
+            (obj['commands'].length == 0 ||
+                obj['commands'].every((item) => item is String)));
   }
 }
 
@@ -3265,18 +2832,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    if (!map.containsKey('type') || !map['type'] is num) {
-      return false;
-    }
-    const validFieldNames = ['uri', 'type'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String &&
+        obj.containsKey('type') &&
+        obj['type'] is num;
   }
 }
 
@@ -3311,15 +2871,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('globPattern') || !map['globPattern'] is String) {
-      return false;
-    }
-    const validFieldNames = ['globPattern', 'kind'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('globPattern') &&
+        obj['globPattern'] is String;
   }
 }
 
@@ -3384,24 +2938,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('startLine') || !map['startLine'] is num) {
-      return false;
-    }
-    if (!map.containsKey('endLine') || !map['endLine'] is num) {
-      return false;
-    }
-    const validFieldNames = [
-      'startLine',
-      'startCharacter',
-      'endLine',
-      'endCharacter',
-      'kind'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('startLine') &&
+        obj['startLine'] is num &&
+        obj.containsKey('endLine') &&
+        obj['endLine'] is num;
   }
 }
 
@@ -3465,16 +3006,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']);
   }
 }
 
@@ -3486,12 +3020,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = [''];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -3527,18 +3056,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('tabSize') || !map['tabSize'] is num) {
-      return false;
-    }
-    if (!map.containsKey('insertSpaces') || !map['insertSpaces'] is bool) {
-      return false;
-    }
-    const validFieldNames = ['tabSize', 'insertSpaces'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('tabSize') &&
+        obj['tabSize'] is num &&
+        obj.containsKey('insertSpaces') &&
+        obj['insertSpaces'] is bool;
   }
 }
 
@@ -3590,21 +3112,14 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('contents') ||
-        !(MarkedString.canParse(map['contents']) ||
-            (map['contents'] is List &&
-                (map['contents'].length == 0 ||
-                    map['contents']
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('contents') &&
+        (MarkedString.canParse(obj['contents']) ||
+            (obj['contents'] is List &&
+                (obj['contents'].length == 0 ||
+                    obj['contents']
                         .every((item) => MarkedString.canParse(item)))) ||
-            MarkupContent.canParse(map['contents']))) {
-      return false;
-    }
-    const validFieldNames = ['contents', 'range'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+            MarkupContent.canParse(obj['contents']));
   }
 }
 
@@ -3679,29 +3194,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('processId') || !map['processId'] is num) {
-      return false;
-    }
-    if (!map.containsKey('rootUri') || !map['rootUri'] is String) {
-      return false;
-    }
-    if (!map.containsKey('capabilities') ||
-        !ClientCapabilities.canParse(map['capabilities'])) {
-      return false;
-    }
-    const validFieldNames = [
-      'processId',
-      'rootPath',
-      'rootUri',
-      'initializationOptions',
-      'capabilities',
-      'workspaceFolders'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('processId') &&
+        obj['processId'] is num &&
+        obj.containsKey('rootUri') &&
+        obj['rootUri'] is String &&
+        obj.containsKey('capabilities') &&
+        ClientCapabilities.canParse(obj['capabilities']);
   }
 }
 
@@ -3727,16 +3226,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('capabilities') ||
-        !ServerCapabilities.canParse(map['capabilities'])) {
-      return false;
-    }
-    const validFieldNames = ['capabilities'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('capabilities') &&
+        ServerCapabilities.canParse(obj['capabilities']);
   }
 }
 
@@ -3747,12 +3239,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = [''];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -3823,18 +3310,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    const validFieldNames = ['uri', 'range'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']);
   }
 }
 
@@ -3868,18 +3348,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('type') || !MessageType.canParse(map['type'])) {
-      return false;
-    }
-    if (!map.containsKey('message') || !map['message'] is String) {
-      return false;
-    }
-    const validFieldNames = ['type', 'message'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('type') &&
+        MessageType.canParse(obj['type']) &&
+        obj.containsKey('message') &&
+        obj['message'] is String;
   }
 }
 
@@ -3910,18 +3383,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('language') || !map['language'] is String) {
-      return false;
-    }
-    if (!map.containsKey('value') || !map['value'] is String) {
-      return false;
-    }
-    const validFieldNames = ['language', 'value'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('language') &&
+        obj['language'] is String &&
+        obj.containsKey('value') &&
+        obj['value'] is String;
   }
 }
 
@@ -3979,18 +3445,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('kind') || !MarkupKind.canParse(map['kind'])) {
-      return false;
-    }
-    if (!map.containsKey('value') || !map['value'] is String) {
-      return false;
-    }
-    const validFieldNames = ['kind', 'value'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('kind') &&
+        MarkupKind.canParse(obj['kind']) &&
+        obj.containsKey('value') &&
+        obj['value'] is String;
   }
 }
 
@@ -4053,15 +3512,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('jsonrpc') || !map['jsonrpc'] is String) {
-      return false;
-    }
-    const validFieldNames = ['jsonrpc'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('jsonrpc') &&
+        obj['jsonrpc'] is String;
   }
 }
 
@@ -4086,15 +3539,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('title') || !map['title'] is String) {
-      return false;
-    }
-    const validFieldNames = ['title'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('title') &&
+        obj['title'] is String;
   }
 }
 
@@ -4167,18 +3614,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('method') || !map['method'] is String) {
-      return false;
-    }
-    if (!map.containsKey('jsonrpc') || !map['jsonrpc'] is String) {
-      return false;
-    }
-    const validFieldNames = ['method', 'jsonrpc'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('method') &&
+        obj['method'] is String &&
+        obj.containsKey('jsonrpc') &&
+        obj['jsonrpc'] is String;
   }
 }
 
@@ -4218,15 +3658,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('label') || !map['label'] is String) {
-      return false;
-    }
-    const validFieldNames = ['label', 'documentation'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('label') &&
+        obj['label'] is String;
   }
 }
 
@@ -4266,18 +3700,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('line') || !map['line'] is num) {
-      return false;
-    }
-    if (!map.containsKey('character') || !map['character'] is num) {
-      return false;
-    }
-    const validFieldNames = ['line', 'character'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('line') &&
+        obj['line'] is num &&
+        obj.containsKey('character') &&
+        obj['character'] is num;
   }
 }
 
@@ -4314,22 +3741,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    if (!map.containsKey('diagnostics') ||
-        !(map['diagnostics'] is List &&
-            (map['diagnostics'].length == 0 ||
-                map['diagnostics']
-                    .every((item) => Diagnostic.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['uri', 'diagnostics'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String &&
+        obj.containsKey('diagnostics') &&
+        (obj['diagnostics'] is List &&
+            (obj['diagnostics'].length == 0 ||
+                obj['diagnostics'].every((item) => Diagnostic.canParse(item))));
   }
 }
 
@@ -4362,18 +3780,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('start') || !Position.canParse(map['start'])) {
-      return false;
-    }
-    if (!map.containsKey('end') || !Position.canParse(map['end'])) {
-      return false;
-    }
-    const validFieldNames = ['start', 'end'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('start') &&
+        Position.canParse(obj['start']) &&
+        obj.containsKey('end') &&
+        Position.canParse(obj['end']);
   }
 }
 
@@ -4399,16 +3810,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('includeDeclaration') ||
-        !map['includeDeclaration'] is bool) {
-      return false;
-    }
-    const validFieldNames = ['includeDeclaration'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('includeDeclaration') &&
+        obj['includeDeclaration'] is bool;
   }
 }
 
@@ -4452,23 +3856,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('context') ||
-        !ReferenceContext.canParse(map['context'])) {
-      return false;
-    }
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('position') || !Position.canParse(map['position'])) {
-      return false;
-    }
-    const validFieldNames = ['context', 'textDocument', 'position'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('context') &&
+        ReferenceContext.canParse(obj['context']) &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('position') &&
+        Position.canParse(obj['position']);
   }
 }
 
@@ -4510,18 +3904,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('id') || !map['id'] is String) {
-      return false;
-    }
-    if (!map.containsKey('method') || !map['method'] is String) {
-      return false;
-    }
-    const validFieldNames = ['id', 'method', 'registerOptions'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('id') &&
+        obj['id'] is String &&
+        obj.containsKey('method') &&
+        obj['method'] is String;
   }
 }
 
@@ -4549,19 +3936,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('registrations') ||
-        !(map['registrations'] is List &&
-            (map['registrations'].length == 0 ||
-                map['registrations']
-                    .every((item) => Registration.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['registrations'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('registrations') &&
+        (obj['registrations'] is List &&
+            (obj['registrations'].length == 0 ||
+                obj['registrations']
+                    .every((item) => Registration.canParse(item))));
   }
 }
 
@@ -4602,18 +3982,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('oldUri') || !map['oldUri'] is String) {
-      return false;
-    }
-    if (!map.containsKey('newUri') || !map['newUri'] is String) {
-      return false;
-    }
-    const validFieldNames = ['oldUri', 'newUri', 'options'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('oldUri') &&
+        obj['oldUri'] is String &&
+        obj.containsKey('newUri') &&
+        obj['newUri'] is String;
   }
 }
 
@@ -4645,12 +4018,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['overwrite', 'ignoreIfExists'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -4675,12 +4043,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['prepareProvider'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -4727,22 +4090,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('position') || !Position.canParse(map['position'])) {
-      return false;
-    }
-    if (!map.containsKey('newName') || !map['newName'] is String) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'position', 'newName'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('position') &&
+        Position.canParse(obj['position']) &&
+        obj.containsKey('newName') &&
+        obj['newName'] is String;
   }
 }
 
@@ -4776,19 +4130,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['prepareProvider', 'documentSelector'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -4832,21 +4179,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('id') || !(map['id'] is num || map['id'] is String)) {
-      return false;
-    }
-    if (!map.containsKey('method') || !map['method'] is String) {
-      return false;
-    }
-    if (!map.containsKey('jsonrpc') || !map['jsonrpc'] is String) {
-      return false;
-    }
-    const validFieldNames = ['id', 'method', 'jsonrpc'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('id') &&
+        (obj['id'] is num || obj['id'] is String) &&
+        obj.containsKey('method') &&
+        obj['method'] is String &&
+        obj.containsKey('jsonrpc') &&
+        obj['jsonrpc'] is String;
   }
 }
 
@@ -4923,18 +4262,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('id') || !(map['id'] is num || map['id'] is String)) {
-      return false;
-    }
-    if (!map.containsKey('jsonrpc') || !map['jsonrpc'] is String) {
-      return false;
-    }
-    const validFieldNames = ['id', 'result', 'jsonrpc'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('id') &&
+        (obj['id'] is num || obj['id'] is String) &&
+        obj.containsKey('jsonrpc') &&
+        obj['jsonrpc'] is String;
   }
 }
 
@@ -4959,12 +4291,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['includeText'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -5200,32 +4527,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = [
-      'textDocumentSync',
-      'hoverProvider',
-      'completionProvider',
-      'signatureHelpProvider',
-      'definitionProvider',
-      'referencesProvider',
-      'documentHighlightProvider',
-      'documentSymbolProvider',
-      'workspaceSymbolProvider',
-      'codeActionProvider',
-      'codeLensProvider',
-      'documentFormattingProvider',
-      'documentRangeFormattingProvider',
-      'documentOnTypeFormattingProvider',
-      'renameProvider',
-      'documentLinkProvider',
-      'executeCommandProvider',
-      'supported',
-      'changeNotifications'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -5259,18 +4561,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('type') || !MessageType.canParse(map['type'])) {
-      return false;
-    }
-    if (!map.containsKey('message') || !map['message'] is String) {
-      return false;
-    }
-    const validFieldNames = ['type', 'message'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('type') &&
+        MessageType.canParse(obj['type']) &&
+        obj.containsKey('message') &&
+        obj['message'] is String;
   }
 }
 
@@ -5314,18 +4609,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('type') || !MessageType.canParse(map['type'])) {
-      return false;
-    }
-    if (!map.containsKey('message') || !map['message'] is String) {
-      return false;
-    }
-    const validFieldNames = ['type', 'message', 'actions'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('type') &&
+        MessageType.canParse(obj['type']) &&
+        obj.containsKey('message') &&
+        obj['message'] is String;
   }
 }
 
@@ -5385,23 +4673,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('signatures') ||
-        !(map['signatures'] is List &&
-            (map['signatures'].length == 0 ||
-                map['signatures']
-                    .every((item) => SignatureInformation.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = [
-      'signatures',
-      'activeSignature',
-      'activeParameter'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('signatures') &&
+        (obj['signatures'] is List &&
+            (obj['signatures'].length == 0 ||
+                obj['signatures']
+                    .every((item) => SignatureInformation.canParse(item))));
   }
 }
 
@@ -5429,12 +4706,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['triggerCharacters'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -5474,19 +4746,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['triggerCharacters', 'documentSelector'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -5538,15 +4803,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('label') || !map['label'] is String) {
-      return false;
-    }
-    const validFieldNames = ['label', 'documentation', 'parameters'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('label') &&
+        obj['label'] is String;
   }
 }
 
@@ -5573,12 +4832,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['id'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -5653,27 +4907,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('name') || !map['name'] is String) {
-      return false;
-    }
-    if (!map.containsKey('kind') || !map['kind'] is num) {
-      return false;
-    }
-    if (!map.containsKey('location') || !Location.canParse(map['location'])) {
-      return false;
-    }
-    const validFieldNames = [
-      'name',
-      'kind',
-      'deprecated',
-      'location',
-      'containerName'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('name') &&
+        obj['name'] is String &&
+        obj.containsKey('kind') &&
+        obj['kind'] is num &&
+        obj.containsKey('location') &&
+        Location.canParse(obj['location']);
   }
 }
 
@@ -5794,22 +5034,14 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('syncKind') || !map['syncKind'] is num) {
-      return false;
-    }
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['syncKind', 'documentSelector'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('syncKind') &&
+        obj['syncKind'] is num &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -5861,17 +5093,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = [
-      'dynamicRegistration',
-      'willSave',
-      'willSaveWaitUntil',
-      'didSave'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -5913,15 +5135,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('text') || !map['text'] is String) {
-      return false;
-    }
-    const validFieldNames = ['range', 'rangeLength', 'text'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('text') &&
+        obj['text'] is String;
   }
 }
 
@@ -5959,22 +5175,13 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !VersionedTextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('edits') ||
-        !(map['edits'] is List &&
-            (map['edits'].length == 0 ||
-                map['edits'].every((item) => TextEdit.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'edits'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        VersionedTextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('edits') &&
+        (obj['edits'] is List &&
+            (obj['edits'].length == 0 ||
+                obj['edits'].every((item) => TextEdit.canParse(item))));
   }
 }
 
@@ -5999,15 +5206,9 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    const validFieldNames = ['uri'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String;
   }
 }
 
@@ -6059,24 +5260,15 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    if (!map.containsKey('languageId') || !map['languageId'] is String) {
-      return false;
-    }
-    if (!map.containsKey('version') || !map['version'] is num) {
-      return false;
-    }
-    if (!map.containsKey('text') || !map['text'] is String) {
-      return false;
-    }
-    const validFieldNames = ['uri', 'languageId', 'version', 'text'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String &&
+        obj.containsKey('languageId') &&
+        obj['languageId'] is String &&
+        obj.containsKey('version') &&
+        obj['version'] is num &&
+        obj.containsKey('text') &&
+        obj['text'] is String;
   }
 }
 
@@ -6112,19 +5304,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('position') || !Position.canParse(map['position'])) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'position'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('position') &&
+        Position.canParse(obj['position']);
   }
 }
 
@@ -6150,19 +5334,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['documentSelector'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -6238,19 +5415,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('documentSelector') ||
-        !(map['documentSelector'] is List &&
-            (map['documentSelector'].length == 0 ||
-                map['documentSelector']
-                    .every((item) => DocumentFilter.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['includeText', 'documentSelector'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('documentSelector') &&
+        (obj['documentSelector'] is List &&
+            (obj['documentSelector'].length == 0 ||
+                obj['documentSelector']
+                    .every((item) => DocumentFilter.canParse(item))));
   }
 }
 
@@ -6351,18 +5521,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = [
-      'openClose',
-      'change',
-      'willSave',
-      'willSaveWaitUntil',
-      'save'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -6399,18 +5558,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('range') || !Range.canParse(map['range'])) {
-      return false;
-    }
-    if (!map.containsKey('newText') || !map['newText'] is String) {
-      return false;
-    }
-    const validFieldNames = ['range', 'newText'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('range') &&
+        Range.canParse(obj['range']) &&
+        obj.containsKey('newText') &&
+        obj['newText'] is String;
   }
 }
 
@@ -6446,18 +5598,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('id') || !map['id'] is String) {
-      return false;
-    }
-    if (!map.containsKey('method') || !map['method'] is String) {
-      return false;
-    }
-    const validFieldNames = ['id', 'method'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('id') &&
+        obj['id'] is String &&
+        obj.containsKey('method') &&
+        obj['method'] is String;
   }
 }
 
@@ -6485,19 +5630,12 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('unregisterations') ||
-        !(map['unregisterations'] is List &&
-            (map['unregisterations'].length == 0 ||
-                map['unregisterations']
-                    .every((item) => Unregistration.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['unregisterations'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('unregisterations') &&
+        (obj['unregisterations'] is List &&
+            (obj['unregisterations'].length == 0 ||
+                obj['unregisterations']
+                    .every((item) => Unregistration.canParse(item))));
   }
 }
 
@@ -6539,18 +5677,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('version') || !map['version'] is num) {
-      return false;
-    }
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    const validFieldNames = ['version', 'uri'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('version') &&
+        obj['version'] is num &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String;
   }
 }
 
@@ -6623,19 +5754,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('textDocument') ||
-        !TextDocumentIdentifier.canParse(map['textDocument'])) {
-      return false;
-    }
-    if (!map.containsKey('reason') || !map['reason'] is num) {
-      return false;
-    }
-    const validFieldNames = ['textDocument', 'reason'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('textDocument') &&
+        TextDocumentIdentifier.canParse(obj['textDocument']) &&
+        obj.containsKey('reason') &&
+        obj['reason'] is num;
   }
 }
 
@@ -6692,17 +5815,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = [
-      'applyEdit',
-      'documentChanges',
-      'resourceOperations',
-      'failureHandling'
-    ];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -6754,12 +5867,7 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    const validFieldNames = ['changes', 'documentChanges'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic>;
   }
 }
 
@@ -6794,18 +5902,11 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('uri') || !map['uri'] is String) {
-      return false;
-    }
-    if (!map.containsKey('name') || !map['name'] is String) {
-      return false;
-    }
-    const validFieldNames = ['uri', 'name'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('uri') &&
+        obj['uri'] is String &&
+        obj.containsKey('name') &&
+        obj['name'] is String;
   }
 }
 
@@ -6846,26 +5947,17 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('added') ||
-        !(map['added'] is List &&
-            (map['added'].length == 0 ||
-                map['added']
-                    .every((item) => WorkspaceFolder.canParse(item))))) {
-      return false;
-    }
-    if (!map.containsKey('removed') ||
-        !(map['removed'] is List &&
-            (map['removed'].length == 0 ||
-                map['removed']
-                    .every((item) => WorkspaceFolder.canParse(item))))) {
-      return false;
-    }
-    const validFieldNames = ['added', 'removed'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('added') &&
+        (obj['added'] is List &&
+            (obj['added'].length == 0 ||
+                obj['added']
+                    .every((item) => WorkspaceFolder.canParse(item)))) &&
+        obj.containsKey('removed') &&
+        (obj['removed'] is List &&
+            (obj['removed'].length == 0 ||
+                obj['removed']
+                    .every((item) => WorkspaceFolder.canParse(item))));
   }
 }
 
@@ -6891,14 +5983,8 @@
   }
 
   static bool canParse(Object obj) {
-    if (!obj is Map<String, dynamic>) {
-      return false;
-    }
-    final map = obj as Map<String, dynamic>;
-    if (!map.containsKey('query') || !map['query'] is String) {
-      return false;
-    }
-    const validFieldNames = ['query'];
-    return map.keys.every((k) => validFieldNames.contains(k));
+    return obj is Map<String, dynamic> &&
+        obj.containsKey('query') &&
+        obj['query'] is String;
   }
 }
diff --git a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
index 065a31b..1f96c64 100644
--- a/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
+++ b/pkg/analysis_server/tool/lsp_spec/codegen_dart.dart
@@ -170,34 +170,18 @@
   buffer
     ..writeIndentedln('static bool canParse(Object obj) {')
     ..indent()
-    ..writeIndentedln('if (!obj is Map<String, dynamic>) {')
-    ..indent()
-    ..writeIndentedln('return false;')
-    ..outdent()
-    ..writeIndentedln('}')
-    ..writeIndentedln('final map = obj as Map<String, dynamic>;');
+    ..writeIndentedln('return obj is Map<String, dynamic>');
   // In order to consider this valid for parsing, all fields that may not be
   // undefined must be present and also type check for the correct type.
-  // If these pass, there must also be no fields that are not defined for this
-  // type.
-  final allFields = _getAllFields(interface);
-  final requiredFields = allFields.where((f) => !f.allowsUndefined);
+  final requiredFields =
+      _getAllFields(interface).where((f) => !f.allowsUndefined);
   for (var field in requiredFields) {
-    buffer.writeIndented("if (!map.containsKey('${field.name}') || !");
+    buffer.write("&& obj.containsKey('${field.name}') && ");
     _writeTypeCheckCondition(
-        buffer, "map['${field.name}']", _mapType(field.types));
-    buffer
-      ..writeln(') {')
-      ..indent()
-      ..writeIndentedln('return false;')
-      ..outdent()
-      ..writeIndentedln('}');
+        buffer, "obj['${field.name}']", _mapType(field.types));
   }
-  final fieldNames = allFields.map((f) => f.name).join("', '");
-  buffer.writeIndentedln("const validFieldNames = ['$fieldNames'];");
   buffer
-    ..writeIndentedln(
-        'return map.keys.every((k) => validFieldNames.contains(k));')
+    ..writeln(';')
     ..outdent()
     ..writeIndentedln('}');
 }