// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // // This file has been automatically generated. Please do not edit it manually. // To regenerate the file, use the script // "pkg/analyzer_plugin/tool/spec/generate_all.dart". // ignore_for_file: unnecessary_ignore, duplicate_ignore // ignore_for_file: unnecessary_type_name_in_constructor import 'dart:convert' hide JsonDecoder; import 'package:collection/collection.dart' show QueueList; import 'package:analyzer_plugin/src/protocol/protocol_internal.dart'; import 'package:analyzer_plugin/src/utilities/client_uri_converter.dart'; // ignore_for_file: flutter_style_todos /// AddContentOverlay /// /// { /// "type": "add" /// "content": String /// "version": optional int /// } /// /// Clients may not extend, implement or mix-in this class. class AddContentOverlay implements HasToJson { /// The new content of the file. String content; /// An optional version number for the document. Version numbers allow the /// server to tag edits with the version of the document they apply to which /// can avoid applying edits to documents that have already been updated /// since the edits were computed. /// /// If version numbers are supplied with AddContentOverlay and /// ChangeContentOverlay, they must be increasing (but not necessarily /// consecutive) numbers. int? version; AddContentOverlay(this.content, {this.version}); factory AddContentOverlay.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'AddContentOverlay'", json); } if (json['type'] != 'add') { throw jsonDecoder.mismatch(jsonPath, "equal to 'add'", json); } String content; if (json case {'content': var encodedContent}) { content = jsonDecoder.decodeString('$jsonPath.content', encodedContent); } else { throw jsonDecoder.mismatch(jsonPath, "'content'", json); } int? version; if (json case {'version': var encodedVersion}) { version = jsonDecoder.decodeInt('$jsonPath.version', encodedVersion); } return AddContentOverlay(content, version: version); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['type'] = 'add'; result['content'] = content; if (version case var version?) { result['version'] = version; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is AddContentOverlay) { return content == other.content && version == other.version; } return false; } @override int get hashCode => Object.hash(704418402, content, version); } /// AnalysisError /// /// { /// "severity": AnalysisErrorSeverity /// "type": AnalysisErrorType /// "location": Location /// "message": String /// "correction": optional String /// "code": String /// "url": optional String /// "contextMessages": optional List /// "hasFix": optional bool /// } /// /// Clients may not extend, implement or mix-in this class. class AnalysisError implements HasToJson { /// The severity of the error. AnalysisErrorSeverity severity; /// The type of the error. AnalysisErrorType type; /// The location associated with the error. Location location; /// The message to be displayed for this error. The message should indicate /// what is wrong with the code and why it is wrong. String message; /// The correction message to be displayed for this error. The correction /// message should indicate how the user can fix the error. The field is /// omitted if there is no correction message associated with the error code. String? correction; /// The name, as a string, of the error code associated with this error. String code; /// The URL of a page containing documentation associated with this error. String? url; /// Additional messages associated with this diagnostic that provide context /// to help the user understand the diagnostic. List? contextMessages; /// A hint to indicate to interested clients that this error has an /// associated fix (or fixes). The absence of this field implies there are /// not known to be fixes. Note that since the operation to calculate whether /// fixes apply needs to be performant it is possible that complicated tests /// will be skipped and a false negative returned. For this reason, this /// attribute should be treated as a "hint". Despite the possibility of false /// negatives, no false positives should be returned. If a client sees this /// flag set they can proceed with the confidence that there are in fact /// associated fixes. bool? hasFix; AnalysisError( this.severity, this.type, this.location, this.message, this.code, { this.correction, this.url, this.contextMessages, this.hasFix, }); factory AnalysisError.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'AnalysisError'", json); } AnalysisErrorSeverity severity; if (json case {'severity': var encodedSeverity}) { severity = AnalysisErrorSeverity.fromJson( jsonDecoder, '$jsonPath.severity', encodedSeverity, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'severity'", json); } AnalysisErrorType type; if (json case {'type': var encodedType}) { type = AnalysisErrorType.fromJson( jsonDecoder, '$jsonPath.type', encodedType, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'type'", json); } Location location; if (json case {'location': var encodedLocation}) { location = Location.fromJson( jsonDecoder, '$jsonPath.location', encodedLocation, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'location'", json); } String message; if (json case {'message': var encodedMessage}) { message = jsonDecoder.decodeString('$jsonPath.message', encodedMessage); } else { throw jsonDecoder.mismatch(jsonPath, "'message'", json); } String? correction; if (json case {'correction': var encodedCorrection}) { correction = jsonDecoder.decodeString( '$jsonPath.correction', encodedCorrection, ); } String code; if (json case {'code': var encodedCode}) { code = jsonDecoder.decodeString('$jsonPath.code', encodedCode); } else { throw jsonDecoder.mismatch(jsonPath, "'code'", json); } String? url; if (json case {'url': var encodedUrl}) { url = jsonDecoder.decodeString('$jsonPath.url', encodedUrl); } List? contextMessages; if (json case {'contextMessages': var encodedContextMessages}) { contextMessages = jsonDecoder.decodeList( '$jsonPath.contextMessages', encodedContextMessages, (String jsonPath, Object? json) => DiagnosticMessage.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } bool? hasFix; if (json case {'hasFix': var encodedHasFix}) { hasFix = jsonDecoder.decodeBool('$jsonPath.hasFix', encodedHasFix); } return AnalysisError( severity, type, location, message, code, correction: correction, url: url, contextMessages: contextMessages, hasFix: hasFix, ); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['severity'] = severity.toJson( clientUriConverter: clientUriConverter, ); result['type'] = type.toJson(clientUriConverter: clientUriConverter); result['location'] = location.toJson( clientUriConverter: clientUriConverter, ); result['message'] = message; if (correction case var correction?) { result['correction'] = correction; } result['code'] = code; if (url case var url?) { result['url'] = url; } if (contextMessages case var contextMessages?) { result['contextMessages'] = contextMessages .map( (DiagnosticMessage value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); } if (hasFix case var hasFix?) { result['hasFix'] = hasFix; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is AnalysisError) { return severity == other.severity && type == other.type && location == other.location && message == other.message && correction == other.correction && code == other.code && url == other.url && listEqual( contextMessages, other.contextMessages, (DiagnosticMessage a, DiagnosticMessage b) => a == b, ) && hasFix == other.hasFix; } return false; } @override int get hashCode => Object.hash( severity, type, location, message, correction, code, url, Object.hashAll(contextMessages ?? []), hasFix, ); } /// AnalysisErrorSeverity /// /// enum { /// INFO /// WARNING /// ERROR /// } /// /// Clients may not extend, implement or mix-in this class. enum AnalysisErrorSeverity { INFO, WARNING, ERROR; factory AnalysisErrorSeverity.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'AnalysisErrorSeverity'", json); } @override String toString() => 'AnalysisErrorSeverity.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// AnalysisErrorType /// /// enum { /// CHECKED_MODE_COMPILE_TIME_ERROR /// COMPILE_TIME_ERROR /// HINT /// LINT /// STATIC_TYPE_WARNING /// STATIC_WARNING /// SYNTACTIC_ERROR /// TODO /// } /// /// Clients may not extend, implement or mix-in this class. enum AnalysisErrorType { CHECKED_MODE_COMPILE_TIME_ERROR, COMPILE_TIME_ERROR, HINT, LINT, STATIC_TYPE_WARNING, STATIC_WARNING, SYNTACTIC_ERROR, TODO; factory AnalysisErrorType.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'AnalysisErrorType'", json); } @override String toString() => 'AnalysisErrorType.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// AssistDescription /// /// { /// "id": String /// "message": String /// } /// /// Clients may not extend, implement or mix-in this class. class AssistDescription implements HasToJson { /// The ID. String id; /// The message that is presented to the user, to carry out this assist. String message; AssistDescription(this.id, this.message); factory AssistDescription.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'AssistDescription'", json); } String id; if (json case {'id': var encodedId}) { id = jsonDecoder.decodeString('$jsonPath.id', encodedId); } else { throw jsonDecoder.mismatch(jsonPath, "'id'", json); } String message; if (json case {'message': var encodedMessage}) { message = jsonDecoder.decodeString('$jsonPath.message', encodedMessage); } else { throw jsonDecoder.mismatch(jsonPath, "'message'", json); } return AssistDescription(id, message); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['id'] = id; result['message'] = message; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is AssistDescription) { return id == other.id && message == other.message; } return false; } @override int get hashCode => Object.hash(id, message); } /// ChangeContentOverlay /// /// { /// "type": "change" /// "edits": List /// "version": optional int /// } /// /// Clients may not extend, implement or mix-in this class. class ChangeContentOverlay implements HasToJson { /// The edits to be applied to the file. List edits; /// An optional version number for the document. Version numbers allow the /// server to tag edits with the version of the document they apply to which /// can avoid applying edits to documents that have already been updated /// since the edits were computed. /// /// If version numbers are supplied with AddContentOverlay and /// ChangeContentOverlay, they must be increasing (but not necessarily /// consecutive) numbers. int? version; ChangeContentOverlay(this.edits, {this.version}); factory ChangeContentOverlay.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'ChangeContentOverlay'", json); } if (json['type'] != 'change') { throw jsonDecoder.mismatch(jsonPath, "equal to 'change'", json); } List edits; if (json case {'edits': var encodedEdits}) { edits = jsonDecoder.decodeList( '$jsonPath.edits', encodedEdits, (String jsonPath, Object? json) => SourceEdit.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'edits'", json); } int? version; if (json case {'version': var encodedVersion}) { version = jsonDecoder.decodeInt('$jsonPath.version', encodedVersion); } return ChangeContentOverlay(edits, version: version); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['type'] = 'change'; result['edits'] = edits .map( (SourceEdit value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); if (version case var version?) { result['version'] = version; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is ChangeContentOverlay) { return listEqual( edits, other.edits, (SourceEdit a, SourceEdit b) => a == b, ) && version == other.version; } return false; } @override int get hashCode => Object.hash(873118866, Object.hashAll(edits), version); } /// CompletionSuggestion /// /// { /// "kind": CompletionSuggestionKind /// "relevance": int /// "completion": String /// "displayText": optional String /// "replacementOffset": optional int /// "replacementLength": optional int /// "selectionOffset": int /// "selectionLength": int /// "isDeprecated": bool /// "isPotential": bool /// "docSummary": optional String /// "docComplete": optional String /// "declaringType": optional String /// "defaultArgumentListString": optional String /// "defaultArgumentListTextRanges": optional List /// "element": optional Element /// "returnType": optional String /// "parameterNames": optional List /// "parameterTypes": optional List /// "requiredParameterCount": optional int /// "hasNamedParameters": optional bool /// "parameterName": optional String /// "parameterType": optional String /// "libraryUri": optional String /// "isNotImported": optional bool /// } /// /// Clients may not extend, implement or mix-in this class. class CompletionSuggestion implements HasToJson { /// The kind of element being suggested. CompletionSuggestionKind kind; /// The relevance of this completion suggestion where a higher number /// indicates a higher relevance. int relevance; /// The identifier to be inserted if the suggestion is selected. If the /// suggestion is for a method or function, the client might want to /// additionally insert a template for the parameters. The information /// required in order to do so is contained in other fields. String completion; /// Text to be displayed in, for example, a completion pop-up. This field is /// only defined if the displayed text should be different than the /// completion. Otherwise it is omitted. String? displayText; /// The offset of the start of the text to be replaced. If supplied, this /// should be used in preference to the offset provided on the containing /// completion results. This value may be provided independently of /// replacementLength (for example if only one differs from the completion /// result value). int? replacementOffset; /// The length of the text to be replaced. If supplied, this should be used /// in preference to the offset provided on the containing completion /// results. This value may be provided independently of replacementOffset /// (for example if only one differs from the completion result value). int? replacementLength; /// The offset, relative to the beginning of the completion, of where the /// selection should be placed after insertion. int selectionOffset; /// The number of characters that should be selected after insertion. int selectionLength; /// True if the suggested element is deprecated. bool isDeprecated; /// True if the element is not known to be valid for the target. This happens /// if the type of the target is dynamic. bool isPotential; /// An abbreviated version of the Dartdoc associated with the element being /// suggested. This field is omitted if there is no Dartdoc associated with /// the element. String? docSummary; /// The Dartdoc associated with the element being suggested. This field is /// omitted if there is no Dartdoc associated with the element. String? docComplete; /// The class that declares the element being suggested. This field is /// omitted if the suggested element is not a member of a class. String? declaringType; /// A default String for use in generating argument list source contents on /// the client side. String? defaultArgumentListString; /// Pairs of offsets and lengths describing 'defaultArgumentListString' text /// ranges suitable for use by clients to set up linked edits of default /// argument source contents. For example, given an argument list string 'x, /// y', the corresponding text range [0, 1, 3, 1], indicates two text ranges /// of length 1, starting at offsets 0 and 3. Clients can use these ranges to /// treat the 'x' and 'y' values specially for linked edits. List? defaultArgumentListTextRanges; /// Information about the element reference being suggested. Element? element; /// The return type of the getter, function or method or the type of the /// field being suggested. This field is omitted if the suggested element is /// not a getter, function or method. String? returnType; /// The names of the parameters of the function or method being suggested. /// This field is omitted if the suggested element is not a setter, function /// or method. List? parameterNames; /// The types of the parameters of the function or method being suggested. /// This field is omitted if the parameterNames field is omitted. List? parameterTypes; /// The number of required parameters for the function or method being /// suggested. This field is omitted if the parameterNames field is omitted. int? requiredParameterCount; /// True if the function or method being suggested has at least one named /// parameter. This field is omitted if the parameterNames field is omitted. bool? hasNamedParameters; /// The name of the optional parameter being suggested. This field is omitted /// if the suggestion is not the addition of an optional argument within an /// argument list. String? parameterName; /// The type of the options parameter being suggested. This field is omitted /// if the parameterName field is omitted. String? parameterType; /// This field is omitted if `getSuggestions` was used rather than /// `getSuggestions2`. /// /// This field is omitted if this suggestion corresponds to a locally /// declared element. /// /// If this suggestion corresponds to an already imported element, then this /// field is the URI of a library that provides this element, not the URI of /// the library where the element is declared. /// /// If this suggestion corresponds to an element from a not yet imported /// library, this field is the URI of a library that could be imported to /// make this suggestion accessible in the file where completion was /// requested, such as `package:foo/bar.dart` or /// `file:///home/me/workspace/foo/test/bar_test.dart`. String? libraryUri; /// True if the suggestion is for an element from a not yet imported library. /// This field is omitted if the element is declared locally, or is from /// library is already imported, so that the suggestion can be inserted as /// is, or if `getSuggestions` was used rather than `getSuggestions2`. bool? isNotImported; CompletionSuggestion( this.kind, this.relevance, this.completion, this.selectionOffset, this.selectionLength, this.isDeprecated, this.isPotential, { this.displayText, this.replacementOffset, this.replacementLength, this.docSummary, this.docComplete, this.declaringType, this.defaultArgumentListString, this.defaultArgumentListTextRanges, this.element, this.returnType, this.parameterNames, this.parameterTypes, this.requiredParameterCount, this.hasNamedParameters, this.parameterName, this.parameterType, this.libraryUri, this.isNotImported, }); factory CompletionSuggestion.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'CompletionSuggestion'", json); } CompletionSuggestionKind kind; if (json case {'kind': var encodedKind}) { kind = CompletionSuggestionKind.fromJson( jsonDecoder, '$jsonPath.kind', encodedKind, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'kind'", json); } int relevance; if (json case {'relevance': var encodedRelevance}) { relevance = jsonDecoder.decodeInt( '$jsonPath.relevance', encodedRelevance, ); } else { throw jsonDecoder.mismatch(jsonPath, "'relevance'", json); } String completion; if (json case {'completion': var encodedCompletion}) { completion = jsonDecoder.decodeString( '$jsonPath.completion', encodedCompletion, ); } else { throw jsonDecoder.mismatch(jsonPath, "'completion'", json); } String? displayText; if (json case {'displayText': var encodedDisplayText}) { displayText = jsonDecoder.decodeString( '$jsonPath.displayText', encodedDisplayText, ); } int? replacementOffset; if (json case {'replacementOffset': var encodedReplacementOffset}) { replacementOffset = jsonDecoder.decodeInt( '$jsonPath.replacementOffset', encodedReplacementOffset, ); } int? replacementLength; if (json case {'replacementLength': var encodedReplacementLength}) { replacementLength = jsonDecoder.decodeInt( '$jsonPath.replacementLength', encodedReplacementLength, ); } int selectionOffset; if (json case {'selectionOffset': var encodedSelectionOffset}) { selectionOffset = jsonDecoder.decodeInt( '$jsonPath.selectionOffset', encodedSelectionOffset, ); } else { throw jsonDecoder.mismatch(jsonPath, "'selectionOffset'", json); } int selectionLength; if (json case {'selectionLength': var encodedSelectionLength}) { selectionLength = jsonDecoder.decodeInt( '$jsonPath.selectionLength', encodedSelectionLength, ); } else { throw jsonDecoder.mismatch(jsonPath, "'selectionLength'", json); } bool isDeprecated; if (json case {'isDeprecated': var encodedIsDeprecated}) { isDeprecated = jsonDecoder.decodeBool( '$jsonPath.isDeprecated', encodedIsDeprecated, ); } else { throw jsonDecoder.mismatch(jsonPath, "'isDeprecated'", json); } bool isPotential; if (json case {'isPotential': var encodedIsPotential}) { isPotential = jsonDecoder.decodeBool( '$jsonPath.isPotential', encodedIsPotential, ); } else { throw jsonDecoder.mismatch(jsonPath, "'isPotential'", json); } String? docSummary; if (json case {'docSummary': var encodedDocSummary}) { docSummary = jsonDecoder.decodeString( '$jsonPath.docSummary', encodedDocSummary, ); } String? docComplete; if (json case {'docComplete': var encodedDocComplete}) { docComplete = jsonDecoder.decodeString( '$jsonPath.docComplete', encodedDocComplete, ); } String? declaringType; if (json case {'declaringType': var encodedDeclaringType}) { declaringType = jsonDecoder.decodeString( '$jsonPath.declaringType', encodedDeclaringType, ); } String? defaultArgumentListString; if (json case { 'defaultArgumentListString': var encodedDefaultArgumentListString, }) { defaultArgumentListString = jsonDecoder.decodeString( '$jsonPath.defaultArgumentListString', encodedDefaultArgumentListString, ); } List? defaultArgumentListTextRanges; if (json case { 'defaultArgumentListTextRanges': var encodedDefaultArgumentListTextRanges, }) { defaultArgumentListTextRanges = jsonDecoder.decodeList( '$jsonPath.defaultArgumentListTextRanges', encodedDefaultArgumentListTextRanges, jsonDecoder.decodeInt, ); } Element? element; if (json case {'element': var encodedElement}) { element = Element.fromJson( jsonDecoder, '$jsonPath.element', encodedElement, clientUriConverter: clientUriConverter, ); } String? returnType; if (json case {'returnType': var encodedReturnType}) { returnType = jsonDecoder.decodeString( '$jsonPath.returnType', encodedReturnType, ); } List? parameterNames; if (json case {'parameterNames': var encodedParameterNames}) { parameterNames = jsonDecoder.decodeList( '$jsonPath.parameterNames', encodedParameterNames, jsonDecoder.decodeString, ); } List? parameterTypes; if (json case {'parameterTypes': var encodedParameterTypes}) { parameterTypes = jsonDecoder.decodeList( '$jsonPath.parameterTypes', encodedParameterTypes, jsonDecoder.decodeString, ); } int? requiredParameterCount; if (json case { 'requiredParameterCount': var encodedRequiredParameterCount, }) { requiredParameterCount = jsonDecoder.decodeInt( '$jsonPath.requiredParameterCount', encodedRequiredParameterCount, ); } bool? hasNamedParameters; if (json case {'hasNamedParameters': var encodedHasNamedParameters}) { hasNamedParameters = jsonDecoder.decodeBool( '$jsonPath.hasNamedParameters', encodedHasNamedParameters, ); } String? parameterName; if (json case {'parameterName': var encodedParameterName}) { parameterName = jsonDecoder.decodeString( '$jsonPath.parameterName', encodedParameterName, ); } String? parameterType; if (json case {'parameterType': var encodedParameterType}) { parameterType = jsonDecoder.decodeString( '$jsonPath.parameterType', encodedParameterType, ); } String? libraryUri; if (json case {'libraryUri': var encodedLibraryUri}) { libraryUri = jsonDecoder.decodeString( '$jsonPath.libraryUri', encodedLibraryUri, ); } bool? isNotImported; if (json case {'isNotImported': var encodedIsNotImported}) { isNotImported = jsonDecoder.decodeBool( '$jsonPath.isNotImported', encodedIsNotImported, ); } return CompletionSuggestion( kind, relevance, completion, selectionOffset, selectionLength, isDeprecated, isPotential, displayText: displayText, replacementOffset: replacementOffset, replacementLength: replacementLength, docSummary: docSummary, docComplete: docComplete, declaringType: declaringType, defaultArgumentListString: defaultArgumentListString, defaultArgumentListTextRanges: defaultArgumentListTextRanges, element: element, returnType: returnType, parameterNames: parameterNames, parameterTypes: parameterTypes, requiredParameterCount: requiredParameterCount, hasNamedParameters: hasNamedParameters, parameterName: parameterName, parameterType: parameterType, libraryUri: libraryUri, isNotImported: isNotImported, ); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['kind'] = kind.toJson(clientUriConverter: clientUriConverter); result['relevance'] = relevance; result['completion'] = completion; if (displayText case var displayText?) { result['displayText'] = displayText; } if (replacementOffset case var replacementOffset?) { result['replacementOffset'] = replacementOffset; } if (replacementLength case var replacementLength?) { result['replacementLength'] = replacementLength; } result['selectionOffset'] = selectionOffset; result['selectionLength'] = selectionLength; result['isDeprecated'] = isDeprecated; result['isPotential'] = isPotential; if (docSummary case var docSummary?) { result['docSummary'] = docSummary; } if (docComplete case var docComplete?) { result['docComplete'] = docComplete; } if (declaringType case var declaringType?) { result['declaringType'] = declaringType; } if (defaultArgumentListString case var defaultArgumentListString?) { result['defaultArgumentListString'] = defaultArgumentListString; } if (defaultArgumentListTextRanges case var defaultArgumentListTextRanges?) { result['defaultArgumentListTextRanges'] = defaultArgumentListTextRanges; } if (element case var element?) { result['element'] = element.toJson( clientUriConverter: clientUriConverter, ); } if (returnType case var returnType?) { result['returnType'] = returnType; } if (parameterNames case var parameterNames?) { result['parameterNames'] = parameterNames; } if (parameterTypes case var parameterTypes?) { result['parameterTypes'] = parameterTypes; } if (requiredParameterCount case var requiredParameterCount?) { result['requiredParameterCount'] = requiredParameterCount; } if (hasNamedParameters case var hasNamedParameters?) { result['hasNamedParameters'] = hasNamedParameters; } if (parameterName case var parameterName?) { result['parameterName'] = parameterName; } if (parameterType case var parameterType?) { result['parameterType'] = parameterType; } if (libraryUri case var libraryUri?) { result['libraryUri'] = libraryUri; } if (isNotImported case var isNotImported?) { result['isNotImported'] = isNotImported; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is CompletionSuggestion) { return kind == other.kind && relevance == other.relevance && completion == other.completion && displayText == other.displayText && replacementOffset == other.replacementOffset && replacementLength == other.replacementLength && selectionOffset == other.selectionOffset && selectionLength == other.selectionLength && isDeprecated == other.isDeprecated && isPotential == other.isPotential && docSummary == other.docSummary && docComplete == other.docComplete && declaringType == other.declaringType && defaultArgumentListString == other.defaultArgumentListString && listEqual( defaultArgumentListTextRanges, other.defaultArgumentListTextRanges, (int a, int b) => a == b, ) && element == other.element && returnType == other.returnType && listEqual( parameterNames, other.parameterNames, (String a, String b) => a == b, ) && listEqual( parameterTypes, other.parameterTypes, (String a, String b) => a == b, ) && requiredParameterCount == other.requiredParameterCount && hasNamedParameters == other.hasNamedParameters && parameterName == other.parameterName && parameterType == other.parameterType && libraryUri == other.libraryUri && isNotImported == other.isNotImported; } return false; } @override int get hashCode => Object.hashAll([ kind, relevance, completion, displayText, replacementOffset, replacementLength, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary, docComplete, declaringType, defaultArgumentListString, Object.hashAll(defaultArgumentListTextRanges ?? []), element, returnType, Object.hashAll(parameterNames ?? []), Object.hashAll(parameterTypes ?? []), requiredParameterCount, hasNamedParameters, parameterName, parameterType, libraryUri, isNotImported, ]); } /// CompletionSuggestionKind /// /// enum { /// ARGUMENT_LIST /// IMPORT /// IDENTIFIER /// INVOCATION /// KEYWORD /// NAMED_ARGUMENT /// OPTIONAL_ARGUMENT /// OVERRIDE /// PARAMETER /// PACKAGE_NAME /// } /// /// Clients may not extend, implement or mix-in this class. enum CompletionSuggestionKind { /// A list of arguments for the method or function that is being invoked. For /// this suggestion kind, the completion field is a textual representation of /// the invocation and the parameterNames, parameterTypes, and /// requiredParameterCount attributes are defined. ARGUMENT_LIST, IMPORT, /// The element identifier should be inserted at the completion location. For /// example "someMethod" in `import 'myLib.dart' show someMethod;`. For /// suggestions of this kind, the element attribute is defined and the /// completion field is the element's identifier. IDENTIFIER, /// The element is being invoked at the completion location. For example, /// 'someMethod' in `x.someMethod();`. For suggestions of this kind, the /// element attribute is defined and the completion field is the element's /// identifier. INVOCATION, /// A keyword is being suggested. For suggestions of this kind, the /// completion is the keyword. KEYWORD, /// A named argument for the current call site is being suggested. For /// suggestions of this kind, the completion is the named argument identifier /// including a trailing ':' and a space. NAMED_ARGUMENT, OPTIONAL_ARGUMENT, /// An overriding implementation of a class member is being suggested. OVERRIDE, PARAMETER, /// The name of a pub package is being suggested. PACKAGE_NAME; factory CompletionSuggestionKind.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'CompletionSuggestionKind'", json); } @override String toString() => 'CompletionSuggestionKind.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// DiagnosticMessage /// /// { /// "message": String /// "location": Location /// } /// /// Clients may not extend, implement or mix-in this class. class DiagnosticMessage implements HasToJson { /// The message to be displayed to the user. String message; /// The location associated with or referenced by the message. Clients should /// provide the ability to navigate to the location. Location location; DiagnosticMessage(this.message, this.location); factory DiagnosticMessage.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'DiagnosticMessage'", json); } String message; if (json case {'message': var encodedMessage}) { message = jsonDecoder.decodeString('$jsonPath.message', encodedMessage); } else { throw jsonDecoder.mismatch(jsonPath, "'message'", json); } Location location; if (json case {'location': var encodedLocation}) { location = Location.fromJson( jsonDecoder, '$jsonPath.location', encodedLocation, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'location'", json); } return DiagnosticMessage(message, location); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['message'] = message; result['location'] = location.toJson( clientUriConverter: clientUriConverter, ); return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is DiagnosticMessage) { return message == other.message && location == other.location; } return false; } @override int get hashCode => Object.hash(message, location); } /// Element /// /// { /// "kind": ElementKind /// "name": String /// "location": optional Location /// "flags": int /// "parameters": optional String /// "returnType": optional String /// "typeParameters": optional String /// "aliasedType": optional String /// "extendedType": optional String /// } /// /// Clients may not extend, implement or mix-in this class. class Element implements HasToJson { static const int FLAG_ABSTRACT = 0x01; static const int FLAG_CONST = 0x02; static const int FLAG_FINAL = 0x04; static const int FLAG_STATIC = 0x08; static const int FLAG_PRIVATE = 0x10; static const int FLAG_DEPRECATED = 0x20; static int makeFlags({ bool isAbstract = false, bool isConst = false, bool isFinal = false, bool isStatic = false, bool isPrivate = false, bool isDeprecated = false, }) { var flags = 0; if (isAbstract) flags |= FLAG_ABSTRACT; if (isConst) flags |= FLAG_CONST; if (isFinal) flags |= FLAG_FINAL; if (isStatic) flags |= FLAG_STATIC; if (isPrivate) flags |= FLAG_PRIVATE; if (isDeprecated) flags |= FLAG_DEPRECATED; return flags; } /// The kind of the element. ElementKind kind; /// The name of the element. This is typically used as the label in the /// outline. String name; /// The location of the name in the declaration of the element. Location? location; /// A bit-map containing the following flags: /// /// - 0x01 - set if the element is explicitly or implicitly abstract /// - 0x02 - set if the element was declared to be 'const' /// - 0x04 - set if the element was declared to be 'final' /// - 0x08 - set if the element is a static member of a class or is a /// top-level function or field /// - 0x10 - set if the element is private /// - 0x20 - set if the element is deprecated int flags; /// The parameter list for the element. If the element is not a method or /// function this field will not be defined. If the element doesn't have /// parameters (e.g. getter), this field will not be defined. If the element /// has zero parameters, this field will have a value of "()". String? parameters; /// The return type of the element. If the element is not a method or /// function this field will not be defined. If the element does not have a /// declared return type, this field will contain an empty string. String? returnType; /// The type parameter list for the element. If the element doesn't have type /// parameters, this field will not be defined. String? typeParameters; /// If the element is a type alias, this field is the aliased type. Otherwise /// this field will not be defined. String? aliasedType; /// If the element is an extension, this field is the name of the type that /// is extended. This can be useful to show in UIs for unnamed extension, for /// example "extension on {extendedType}". This field might not be defined /// even for an extension in the case of invalid code. String? extendedType; Element( this.kind, this.name, this.flags, { this.location, this.parameters, this.returnType, this.typeParameters, this.aliasedType, this.extendedType, }); factory Element.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'Element'", json); } ElementKind kind; if (json case {'kind': var encodedKind}) { kind = ElementKind.fromJson( jsonDecoder, '$jsonPath.kind', encodedKind, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'kind'", json); } String name; if (json case {'name': var encodedName}) { name = jsonDecoder.decodeString('$jsonPath.name', encodedName); } else { throw jsonDecoder.mismatch(jsonPath, "'name'", json); } Location? location; if (json case {'location': var encodedLocation}) { location = Location.fromJson( jsonDecoder, '$jsonPath.location', encodedLocation, clientUriConverter: clientUriConverter, ); } int flags; if (json case {'flags': var encodedFlags}) { flags = jsonDecoder.decodeInt('$jsonPath.flags', encodedFlags); } else { throw jsonDecoder.mismatch(jsonPath, "'flags'", json); } String? parameters; if (json case {'parameters': var encodedParameters}) { parameters = jsonDecoder.decodeString( '$jsonPath.parameters', encodedParameters, ); } String? returnType; if (json case {'returnType': var encodedReturnType}) { returnType = jsonDecoder.decodeString( '$jsonPath.returnType', encodedReturnType, ); } String? typeParameters; if (json case {'typeParameters': var encodedTypeParameters}) { typeParameters = jsonDecoder.decodeString( '$jsonPath.typeParameters', encodedTypeParameters, ); } String? aliasedType; if (json case {'aliasedType': var encodedAliasedType}) { aliasedType = jsonDecoder.decodeString( '$jsonPath.aliasedType', encodedAliasedType, ); } String? extendedType; if (json case {'extendedType': var encodedExtendedType}) { extendedType = jsonDecoder.decodeString( '$jsonPath.extendedType', encodedExtendedType, ); } return Element( kind, name, flags, location: location, parameters: parameters, returnType: returnType, typeParameters: typeParameters, aliasedType: aliasedType, extendedType: extendedType, ); } bool get isAbstract => (flags & FLAG_ABSTRACT) != 0; bool get isConst => (flags & FLAG_CONST) != 0; bool get isFinal => (flags & FLAG_FINAL) != 0; bool get isStatic => (flags & FLAG_STATIC) != 0; bool get isPrivate => (flags & FLAG_PRIVATE) != 0; bool get isDeprecated => (flags & FLAG_DEPRECATED) != 0; @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['kind'] = kind.toJson(clientUriConverter: clientUriConverter); result['name'] = name; if (location case var location?) { result['location'] = location.toJson( clientUriConverter: clientUriConverter, ); } result['flags'] = flags; if (parameters case var parameters?) { result['parameters'] = parameters; } if (returnType case var returnType?) { result['returnType'] = returnType; } if (typeParameters case var typeParameters?) { result['typeParameters'] = typeParameters; } if (aliasedType case var aliasedType?) { result['aliasedType'] = aliasedType; } if (extendedType case var extendedType?) { result['extendedType'] = extendedType; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is Element) { return kind == other.kind && name == other.name && location == other.location && flags == other.flags && parameters == other.parameters && returnType == other.returnType && typeParameters == other.typeParameters && aliasedType == other.aliasedType && extendedType == other.extendedType; } return false; } @override int get hashCode => Object.hash( kind, name, location, flags, parameters, returnType, typeParameters, aliasedType, extendedType, ); } /// ElementKind /// /// enum { /// CLASS /// CLASS_TYPE_ALIAS /// COMPILATION_UNIT /// CONSTRUCTOR /// CONSTRUCTOR_INVOCATION /// ENUM /// ENUM_CONSTANT /// EXTENSION /// EXTENSION_TYPE /// FIELD /// FILE /// FUNCTION /// FUNCTION_INVOCATION /// FUNCTION_TYPE_ALIAS /// GETTER /// LABEL /// LIBRARY /// LOCAL_VARIABLE /// METHOD /// MIXIN /// PARAMETER /// PREFIX /// SETTER /// TOP_LEVEL_VARIABLE /// TYPE_ALIAS /// TYPE_PARAMETER /// UNIT_TEST_GROUP /// UNIT_TEST_TEST /// UNKNOWN /// } /// /// Clients may not extend, implement or mix-in this class. enum ElementKind { CLASS, CLASS_TYPE_ALIAS, COMPILATION_UNIT, CONSTRUCTOR, CONSTRUCTOR_INVOCATION, ENUM, ENUM_CONSTANT, EXTENSION, EXTENSION_TYPE, FIELD, FILE, FUNCTION, FUNCTION_INVOCATION, FUNCTION_TYPE_ALIAS, GETTER, LABEL, LIBRARY, LOCAL_VARIABLE, METHOD, MIXIN, PARAMETER, PREFIX, SETTER, TOP_LEVEL_VARIABLE, TYPE_ALIAS, TYPE_PARAMETER, UNIT_TEST_GROUP, UNIT_TEST_TEST, UNKNOWN; factory ElementKind.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'ElementKind'", json); } @override String toString() => 'ElementKind.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// FixDescription /// /// { /// "id": String /// "message": String /// "codes": List /// } /// /// Clients may not extend, implement or mix-in this class. class FixDescription implements HasToJson { /// The ID. String id; /// The message that is presented to the user, to carry out this fix. String message; /// The IDs of the diagnostic codes with which this fix was registered. List codes; FixDescription(this.id, this.message, this.codes); factory FixDescription.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'FixDescription'", json); } String id; if (json case {'id': var encodedId}) { id = jsonDecoder.decodeString('$jsonPath.id', encodedId); } else { throw jsonDecoder.mismatch(jsonPath, "'id'", json); } String message; if (json case {'message': var encodedMessage}) { message = jsonDecoder.decodeString('$jsonPath.message', encodedMessage); } else { throw jsonDecoder.mismatch(jsonPath, "'message'", json); } List codes; if (json case {'codes': var encodedCodes}) { codes = jsonDecoder.decodeList( '$jsonPath.codes', encodedCodes, jsonDecoder.decodeString, ); } else { throw jsonDecoder.mismatch(jsonPath, "'codes'", json); } return FixDescription(id, message, codes); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['id'] = id; result['message'] = message; result['codes'] = codes; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is FixDescription) { return id == other.id && message == other.message && listEqual(codes, other.codes, (String a, String b) => a == b); } return false; } @override int get hashCode => Object.hash(id, message, Object.hashAll(codes)); } /// FoldingKind /// /// enum { /// ANNOTATIONS /// BLOCK /// CLASS_BODY /// COMMENT /// DIRECTIVES /// DOCUMENTATION_COMMENT /// FILE_HEADER /// FUNCTION_BODY /// INVOCATION /// LITERAL /// PARAMETERS /// } /// /// Clients may not extend, implement or mix-in this class. enum FoldingKind { ANNOTATIONS, BLOCK, CLASS_BODY, COMMENT, DIRECTIVES, DOCUMENTATION_COMMENT, FILE_HEADER, FUNCTION_BODY, INVOCATION, LITERAL, PARAMETERS; factory FoldingKind.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'FoldingKind'", json); } @override String toString() => 'FoldingKind.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// FoldingRegion /// /// { /// "kind": FoldingKind /// "offset": int /// "length": int /// } /// /// Clients may not extend, implement or mix-in this class. class FoldingRegion implements HasToJson { /// The kind of the region. FoldingKind kind; /// The offset of the region to be folded. int offset; /// The length of the region to be folded. int length; FoldingRegion(this.kind, this.offset, this.length); factory FoldingRegion.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'FoldingRegion'", json); } FoldingKind kind; if (json case {'kind': var encodedKind}) { kind = FoldingKind.fromJson( jsonDecoder, '$jsonPath.kind', encodedKind, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'kind'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } return FoldingRegion(kind, offset, length); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['kind'] = kind.toJson(clientUriConverter: clientUriConverter); result['offset'] = offset; result['length'] = length; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is FoldingRegion) { return kind == other.kind && offset == other.offset && length == other.length; } return false; } @override int get hashCode => Object.hash(kind, offset, length); } /// HighlightRegion /// /// { /// "type": HighlightRegionType /// "offset": int /// "length": int /// } /// /// Clients may not extend, implement or mix-in this class. class HighlightRegion implements HasToJson { /// The type of highlight associated with the region. HighlightRegionType type; /// The offset of the region to be highlighted. int offset; /// The length of the region to be highlighted. int length; HighlightRegion(this.type, this.offset, this.length); factory HighlightRegion.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'HighlightRegion'", json); } HighlightRegionType type; if (json case {'type': var encodedType}) { type = HighlightRegionType.fromJson( jsonDecoder, '$jsonPath.type', encodedType, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'type'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } return HighlightRegion(type, offset, length); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['type'] = type.toJson(clientUriConverter: clientUriConverter); result['offset'] = offset; result['length'] = length; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is HighlightRegion) { return type == other.type && offset == other.offset && length == other.length; } return false; } @override int get hashCode => Object.hash(type, offset, length); } /// HighlightRegionType /// /// enum { /// ANNOTATION /// BUILT_IN /// CLASS /// COMMENT_BLOCK /// COMMENT_DOCUMENTATION /// COMMENT_END_OF_LINE /// CONSTRUCTOR /// CONSTRUCTOR_TEAR_OFF /// DIRECTIVE /// DYNAMIC_TYPE /// DYNAMIC_LOCAL_VARIABLE_DECLARATION /// DYNAMIC_LOCAL_VARIABLE_REFERENCE /// DYNAMIC_PARAMETER_DECLARATION /// DYNAMIC_PARAMETER_REFERENCE /// ENUM /// ENUM_CONSTANT /// EXTENSION /// EXTENSION_TYPE /// FIELD /// FIELD_STATIC /// FUNCTION /// FUNCTION_DECLARATION /// FUNCTION_TYPE_ALIAS /// GETTER_DECLARATION /// IDENTIFIER_DEFAULT /// IMPORT_PREFIX /// INSTANCE_FIELD_DECLARATION /// INSTANCE_FIELD_REFERENCE /// INSTANCE_GETTER_DECLARATION /// INSTANCE_GETTER_REFERENCE /// INSTANCE_METHOD_DECLARATION /// INSTANCE_METHOD_REFERENCE /// INSTANCE_METHOD_TEAR_OFF /// INSTANCE_SETTER_DECLARATION /// INSTANCE_SETTER_REFERENCE /// INVALID_STRING_ESCAPE /// KEYWORD /// LABEL /// LIBRARY_NAME /// LITERAL_BOOLEAN /// LITERAL_DOUBLE /// LITERAL_INTEGER /// LITERAL_LIST /// LITERAL_MAP /// LITERAL_RECORD /// LITERAL_STRING /// LOCAL_FUNCTION_DECLARATION /// LOCAL_FUNCTION_REFERENCE /// LOCAL_FUNCTION_TEAR_OFF /// LOCAL_VARIABLE /// LOCAL_VARIABLE_DECLARATION /// LOCAL_VARIABLE_REFERENCE /// METHOD /// METHOD_DECLARATION /// METHOD_DECLARATION_STATIC /// METHOD_STATIC /// MIXIN /// PARAMETER /// SETTER_DECLARATION /// TOP_LEVEL_VARIABLE /// PARAMETER_DECLARATION /// PARAMETER_REFERENCE /// STATIC_FIELD_DECLARATION /// STATIC_GETTER_DECLARATION /// STATIC_GETTER_REFERENCE /// STATIC_METHOD_DECLARATION /// STATIC_METHOD_REFERENCE /// STATIC_METHOD_TEAR_OFF /// STATIC_SETTER_DECLARATION /// STATIC_SETTER_REFERENCE /// TOP_LEVEL_FUNCTION_DECLARATION /// TOP_LEVEL_FUNCTION_REFERENCE /// TOP_LEVEL_FUNCTION_TEAR_OFF /// TOP_LEVEL_GETTER_DECLARATION /// TOP_LEVEL_GETTER_REFERENCE /// TOP_LEVEL_SETTER_DECLARATION /// TOP_LEVEL_SETTER_REFERENCE /// TOP_LEVEL_VARIABLE_DECLARATION /// TYPE_ALIAS /// TYPE_NAME_DYNAMIC /// TYPE_PARAMETER /// UNRESOLVED_INSTANCE_MEMBER_REFERENCE /// VALID_STRING_ESCAPE /// } /// /// Clients may not extend, implement or mix-in this class. enum HighlightRegionType { ANNOTATION, /// Deprecated - no longer sent, KEYWORD used instead. BUILT_IN, CLASS, COMMENT_BLOCK, COMMENT_DOCUMENTATION, COMMENT_END_OF_LINE, CONSTRUCTOR, CONSTRUCTOR_TEAR_OFF, DIRECTIVE, /// Deprecated - no longer sent. DYNAMIC_TYPE, DYNAMIC_LOCAL_VARIABLE_DECLARATION, DYNAMIC_LOCAL_VARIABLE_REFERENCE, DYNAMIC_PARAMETER_DECLARATION, DYNAMIC_PARAMETER_REFERENCE, ENUM, ENUM_CONSTANT, EXTENSION, EXTENSION_TYPE, /// Deprecated - no longer sent. FIELD, /// Deprecated - no longer sent. FIELD_STATIC, /// Deprecated - no longer sent. FUNCTION, /// Deprecated - no longer sent. FUNCTION_DECLARATION, FUNCTION_TYPE_ALIAS, /// Deprecated - no longer sent. GETTER_DECLARATION, IDENTIFIER_DEFAULT, IMPORT_PREFIX, INSTANCE_FIELD_DECLARATION, INSTANCE_FIELD_REFERENCE, INSTANCE_GETTER_DECLARATION, INSTANCE_GETTER_REFERENCE, INSTANCE_METHOD_DECLARATION, INSTANCE_METHOD_REFERENCE, INSTANCE_METHOD_TEAR_OFF, INSTANCE_SETTER_DECLARATION, INSTANCE_SETTER_REFERENCE, INVALID_STRING_ESCAPE, KEYWORD, LABEL, LIBRARY_NAME, LITERAL_BOOLEAN, LITERAL_DOUBLE, LITERAL_INTEGER, LITERAL_LIST, LITERAL_MAP, LITERAL_RECORD, LITERAL_STRING, LOCAL_FUNCTION_DECLARATION, LOCAL_FUNCTION_REFERENCE, LOCAL_FUNCTION_TEAR_OFF, /// Deprecated - no longer sent. LOCAL_VARIABLE, LOCAL_VARIABLE_DECLARATION, LOCAL_VARIABLE_REFERENCE, /// Deprecated - no longer sent. METHOD, /// Deprecated - no longer sent. METHOD_DECLARATION, /// Deprecated - no longer sent. METHOD_DECLARATION_STATIC, /// Deprecated - no longer sent. METHOD_STATIC, MIXIN, /// Deprecated - no longer sent. PARAMETER, /// Deprecated - no longer sent. SETTER_DECLARATION, /// Deprecated - no longer sent. TOP_LEVEL_VARIABLE, PARAMETER_DECLARATION, PARAMETER_REFERENCE, STATIC_FIELD_DECLARATION, STATIC_GETTER_DECLARATION, STATIC_GETTER_REFERENCE, STATIC_METHOD_DECLARATION, STATIC_METHOD_REFERENCE, STATIC_METHOD_TEAR_OFF, STATIC_SETTER_DECLARATION, STATIC_SETTER_REFERENCE, TOP_LEVEL_FUNCTION_DECLARATION, TOP_LEVEL_FUNCTION_REFERENCE, TOP_LEVEL_FUNCTION_TEAR_OFF, TOP_LEVEL_GETTER_DECLARATION, TOP_LEVEL_GETTER_REFERENCE, TOP_LEVEL_SETTER_DECLARATION, TOP_LEVEL_SETTER_REFERENCE, TOP_LEVEL_VARIABLE_DECLARATION, TYPE_ALIAS, TYPE_NAME_DYNAMIC, TYPE_PARAMETER, UNRESOLVED_INSTANCE_MEMBER_REFERENCE, VALID_STRING_ESCAPE; factory HighlightRegionType.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'HighlightRegionType'", json); } @override String toString() => 'HighlightRegionType.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// LinkedEditGroup /// /// { /// "positions": List /// "length": int /// "suggestions": List /// } /// /// Clients may not extend, implement or mix-in this class. class LinkedEditGroup implements HasToJson { /// The positions of the regions (after applying the relevant edits) that /// should be edited simultaneously. List positions; /// The length of the regions that should be edited simultaneously. int length; /// Pre-computed suggestions for what every region might want to be changed /// to. List suggestions; LinkedEditGroup(this.positions, this.length, this.suggestions); factory LinkedEditGroup.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'LinkedEditGroup'", json); } List positions; if (json case {'positions': var encodedPositions}) { positions = jsonDecoder.decodeList( '$jsonPath.positions', encodedPositions, (String jsonPath, Object? json) => Position.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'positions'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } List suggestions; if (json case {'suggestions': var encodedSuggestions}) { suggestions = jsonDecoder.decodeList( '$jsonPath.suggestions', encodedSuggestions, (String jsonPath, Object? json) => LinkedEditSuggestion.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'suggestions'", json); } return LinkedEditGroup(positions, length, suggestions); } /// Construct an empty LinkedEditGroup. LinkedEditGroup.empty() : this([], 0, []); @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['positions'] = positions .map( (Position value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); result['length'] = length; result['suggestions'] = suggestions .map( (LinkedEditSuggestion value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); return result; } /// Add a new position and change the length. void addPosition(Position position, int length) { positions.add(position); this.length = length; } /// Add a new suggestion. void addSuggestion(LinkedEditSuggestion suggestion) { suggestions.add(suggestion); } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is LinkedEditGroup) { return listEqual( positions, other.positions, (Position a, Position b) => a == b, ) && length == other.length && listEqual( suggestions, other.suggestions, (LinkedEditSuggestion a, LinkedEditSuggestion b) => a == b, ); } return false; } @override int get hashCode => Object.hash( Object.hashAll(positions), length, Object.hashAll(suggestions), ); } /// LinkedEditSuggestion /// /// { /// "value": String /// "kind": LinkedEditSuggestionKind /// } /// /// Clients may not extend, implement or mix-in this class. class LinkedEditSuggestion implements HasToJson { /// The value that could be used to replace all of the linked edit regions. String value; /// The kind of value being proposed. LinkedEditSuggestionKind kind; LinkedEditSuggestion(this.value, this.kind); factory LinkedEditSuggestion.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'LinkedEditSuggestion'", json); } String value; if (json case {'value': var encodedValue}) { value = jsonDecoder.decodeString('$jsonPath.value', encodedValue); } else { throw jsonDecoder.mismatch(jsonPath, "'value'", json); } LinkedEditSuggestionKind kind; if (json case {'kind': var encodedKind}) { kind = LinkedEditSuggestionKind.fromJson( jsonDecoder, '$jsonPath.kind', encodedKind, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'kind'", json); } return LinkedEditSuggestion(value, kind); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['value'] = value; result['kind'] = kind.toJson(clientUriConverter: clientUriConverter); return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is LinkedEditSuggestion) { return value == other.value && kind == other.kind; } return false; } @override int get hashCode => Object.hash(value, kind); } /// LinkedEditSuggestionKind /// /// enum { /// METHOD /// PARAMETER /// TYPE /// VARIABLE /// } /// /// Clients may not extend, implement or mix-in this class. enum LinkedEditSuggestionKind { METHOD, PARAMETER, TYPE, VARIABLE; factory LinkedEditSuggestionKind.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'LinkedEditSuggestionKind'", json); } @override String toString() => 'LinkedEditSuggestionKind.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// Location /// /// { /// "file": FilePath /// "offset": int /// "length": int /// "startLine": int /// "startColumn": int /// "endLine": optional int /// "endColumn": optional int /// } /// /// Clients may not extend, implement or mix-in this class. class Location implements HasToJson { /// The file containing the range. String file; /// The offset of the range. int offset; /// The length of the range. int length; /// The one-based index of the line containing the first character of the /// range. int startLine; /// The one-based index of the column containing the first character of the /// range. int startColumn; /// The one-based index of the line containing the character immediately /// following the range. int? endLine; /// The one-based index of the column containing the character immediately /// following the range. int? endColumn; Location( this.file, this.offset, this.length, this.startLine, this.startColumn, { this.endLine, this.endColumn, }); factory Location.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'Location'", json); } String file; if (json case {'file': var encodedFile}) { file = clientUriConverter?.fromClientFilePath( jsonDecoder.decodeString('$jsonPath.file', encodedFile), ) ?? jsonDecoder.decodeString('$jsonPath.file', encodedFile); } else { throw jsonDecoder.mismatch(jsonPath, "'file'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } int startLine; if (json case {'startLine': var encodedStartLine}) { startLine = jsonDecoder.decodeInt( '$jsonPath.startLine', encodedStartLine, ); } else { throw jsonDecoder.mismatch(jsonPath, "'startLine'", json); } int startColumn; if (json case {'startColumn': var encodedStartColumn}) { startColumn = jsonDecoder.decodeInt( '$jsonPath.startColumn', encodedStartColumn, ); } else { throw jsonDecoder.mismatch(jsonPath, "'startColumn'", json); } int? endLine; if (json case {'endLine': var encodedEndLine}) { endLine = jsonDecoder.decodeInt('$jsonPath.endLine', encodedEndLine); } int? endColumn; if (json case {'endColumn': var encodedEndColumn}) { endColumn = jsonDecoder.decodeInt( '$jsonPath.endColumn', encodedEndColumn, ); } return Location( file, offset, length, startLine, startColumn, endLine: endLine, endColumn: endColumn, ); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['file'] = clientUriConverter?.toClientFilePath(file) ?? file; result['offset'] = offset; result['length'] = length; result['startLine'] = startLine; result['startColumn'] = startColumn; if (endLine case var endLine?) { result['endLine'] = endLine; } if (endColumn case var endColumn?) { result['endColumn'] = endColumn; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is Location) { return file == other.file && offset == other.offset && length == other.length && startLine == other.startLine && startColumn == other.startColumn && endLine == other.endLine && endColumn == other.endColumn; } return false; } @override int get hashCode => Object.hash( file, offset, length, startLine, startColumn, endLine, endColumn, ); } /// NavigationRegion /// /// { /// "offset": int /// "length": int /// "targets": List /// } /// /// Clients may not extend, implement or mix-in this class. class NavigationRegion implements HasToJson { /// The offset of the region from which the user can navigate. int offset; /// The length of the region from which the user can navigate. int length; /// The indexes of the targets (in the enclosing navigation response) to /// which the given region is bound. By opening the target, clients can /// implement one form of navigation. This list cannot be empty. List targets; NavigationRegion(this.offset, this.length, this.targets); factory NavigationRegion.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'NavigationRegion'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } List targets; if (json case {'targets': var encodedTargets}) { targets = jsonDecoder.decodeList( '$jsonPath.targets', encodedTargets, jsonDecoder.decodeInt, ); } else { throw jsonDecoder.mismatch(jsonPath, "'targets'", json); } return NavigationRegion(offset, length, targets); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['offset'] = offset; result['length'] = length; result['targets'] = targets; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is NavigationRegion) { return offset == other.offset && length == other.length && listEqual(targets, other.targets, (int a, int b) => a == b); } return false; } @override int get hashCode => Object.hash(offset, length, Object.hashAll(targets)); } /// NavigationTarget /// /// { /// "kind": ElementKind /// "fileIndex": int /// "offset": int /// "length": int /// "startLine": int /// "startColumn": int /// "codeOffset": optional int /// "codeLength": optional int /// } /// /// Clients may not extend, implement or mix-in this class. class NavigationTarget implements HasToJson { /// The kind of the element. ElementKind kind; /// The index of the file (in the enclosing navigation response) to navigate /// to. int fileIndex; /// The offset of the name of the target to which the user can navigate. int offset; /// The length of the name of the target to which the user can navigate. int length; /// The one-based index of the line containing the first character of the /// name of the target. int startLine; /// The one-based index of the column containing the first character of the /// name of the target. int startColumn; /// The offset of the target code to which the user can navigate. int? codeOffset; /// The length of the target code to which the user can navigate. int? codeLength; NavigationTarget( this.kind, this.fileIndex, this.offset, this.length, this.startLine, this.startColumn, { this.codeOffset, this.codeLength, }); factory NavigationTarget.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'NavigationTarget'", json); } ElementKind kind; if (json case {'kind': var encodedKind}) { kind = ElementKind.fromJson( jsonDecoder, '$jsonPath.kind', encodedKind, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'kind'", json); } int fileIndex; if (json case {'fileIndex': var encodedFileIndex}) { fileIndex = jsonDecoder.decodeInt( '$jsonPath.fileIndex', encodedFileIndex, ); } else { throw jsonDecoder.mismatch(jsonPath, "'fileIndex'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } int startLine; if (json case {'startLine': var encodedStartLine}) { startLine = jsonDecoder.decodeInt( '$jsonPath.startLine', encodedStartLine, ); } else { throw jsonDecoder.mismatch(jsonPath, "'startLine'", json); } int startColumn; if (json case {'startColumn': var encodedStartColumn}) { startColumn = jsonDecoder.decodeInt( '$jsonPath.startColumn', encodedStartColumn, ); } else { throw jsonDecoder.mismatch(jsonPath, "'startColumn'", json); } int? codeOffset; if (json case {'codeOffset': var encodedCodeOffset}) { codeOffset = jsonDecoder.decodeInt( '$jsonPath.codeOffset', encodedCodeOffset, ); } int? codeLength; if (json case {'codeLength': var encodedCodeLength}) { codeLength = jsonDecoder.decodeInt( '$jsonPath.codeLength', encodedCodeLength, ); } return NavigationTarget( kind, fileIndex, offset, length, startLine, startColumn, codeOffset: codeOffset, codeLength: codeLength, ); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['kind'] = kind.toJson(clientUriConverter: clientUriConverter); result['fileIndex'] = fileIndex; result['offset'] = offset; result['length'] = length; result['startLine'] = startLine; result['startColumn'] = startColumn; if (codeOffset case var codeOffset?) { result['codeOffset'] = codeOffset; } if (codeLength case var codeLength?) { result['codeLength'] = codeLength; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is NavigationTarget) { return kind == other.kind && fileIndex == other.fileIndex && offset == other.offset && length == other.length && startLine == other.startLine && startColumn == other.startColumn && codeOffset == other.codeOffset && codeLength == other.codeLength; } return false; } @override int get hashCode => Object.hash( kind, fileIndex, offset, length, startLine, startColumn, codeOffset, codeLength, ); } /// Occurrences /// /// { /// "element": Element /// "offsets": List /// "length": int /// } /// /// Clients may not extend, implement or mix-in this class. class Occurrences implements HasToJson { /// The element that was referenced. Element element; /// The offsets of the name of the referenced element within the file. List offsets; /// The length of the name of the referenced element. int length; Occurrences(this.element, this.offsets, this.length); factory Occurrences.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'Occurrences'", json); } Element element; if (json case {'element': var encodedElement}) { element = Element.fromJson( jsonDecoder, '$jsonPath.element', encodedElement, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'element'", json); } List offsets; if (json case {'offsets': var encodedOffsets}) { offsets = jsonDecoder.decodeList( '$jsonPath.offsets', encodedOffsets, jsonDecoder.decodeInt, ); } else { throw jsonDecoder.mismatch(jsonPath, "'offsets'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } return Occurrences(element, offsets, length); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['element'] = element.toJson(clientUriConverter: clientUriConverter); result['offsets'] = offsets; result['length'] = length; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is Occurrences) { return element == other.element && listEqual(offsets, other.offsets, (int a, int b) => a == b) && length == other.length; } return false; } @override int get hashCode => Object.hash(element, Object.hashAll(offsets), length); } /// Outline /// /// { /// "element": Element /// "offset": int /// "length": int /// "codeOffset": int /// "codeLength": int /// "children": optional List /// } /// /// Clients may not extend, implement or mix-in this class. class Outline implements HasToJson { /// A description of the element represented by this node. Element element; /// The offset of the first character of the element. This is different than /// the offset in the Element, which is the offset of the name of the /// element. It can be used, for example, to map locations in the file back /// to an outline. int offset; /// The length of the element. int length; /// The offset of the first character of the element code, which is neither /// documentation, nor annotation. int codeOffset; /// The length of the element code. int codeLength; /// The children of the node. The field will be omitted if the node has no /// children. Children are sorted by offset. List? children; Outline( this.element, this.offset, this.length, this.codeOffset, this.codeLength, { this.children, }); factory Outline.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'Outline'", json); } Element element; if (json case {'element': var encodedElement}) { element = Element.fromJson( jsonDecoder, '$jsonPath.element', encodedElement, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'element'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } int codeOffset; if (json case {'codeOffset': var encodedCodeOffset}) { codeOffset = jsonDecoder.decodeInt( '$jsonPath.codeOffset', encodedCodeOffset, ); } else { throw jsonDecoder.mismatch(jsonPath, "'codeOffset'", json); } int codeLength; if (json case {'codeLength': var encodedCodeLength}) { codeLength = jsonDecoder.decodeInt( '$jsonPath.codeLength', encodedCodeLength, ); } else { throw jsonDecoder.mismatch(jsonPath, "'codeLength'", json); } List? children; if (json case {'children': var encodedChildren}) { children = jsonDecoder.decodeList( '$jsonPath.children', encodedChildren, (String jsonPath, Object? json) => Outline.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } return Outline( element, offset, length, codeOffset, codeLength, children: children, ); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['element'] = element.toJson(clientUriConverter: clientUriConverter); result['offset'] = offset; result['length'] = length; result['codeOffset'] = codeOffset; result['codeLength'] = codeLength; if (children case var children?) { result['children'] = children .map( (Outline value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is Outline) { return element == other.element && offset == other.offset && length == other.length && codeOffset == other.codeOffset && codeLength == other.codeLength && listEqual(children, other.children, (Outline a, Outline b) => a == b); } return false; } @override int get hashCode => Object.hash( element, offset, length, codeOffset, codeLength, Object.hashAll(children ?? []), ); } /// ParameterInfo /// /// { /// "kind": ParameterKind /// "name": String /// "type": String /// "defaultValue": optional String /// } /// /// Clients may not extend, implement or mix-in this class. class ParameterInfo implements HasToJson { /// The kind of the parameter. ParameterKind kind; /// The name of the parameter. String name; /// The type of the parameter. String type; /// The default value for this parameter. This value will be omitted if the /// parameter does not have a default value. String? defaultValue; ParameterInfo(this.kind, this.name, this.type, {this.defaultValue}); factory ParameterInfo.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'ParameterInfo'", json); } ParameterKind kind; if (json case {'kind': var encodedKind}) { kind = ParameterKind.fromJson( jsonDecoder, '$jsonPath.kind', encodedKind, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'kind'", json); } String name; if (json case {'name': var encodedName}) { name = jsonDecoder.decodeString('$jsonPath.name', encodedName); } else { throw jsonDecoder.mismatch(jsonPath, "'name'", json); } String type; if (json case {'type': var encodedType}) { type = jsonDecoder.decodeString('$jsonPath.type', encodedType); } else { throw jsonDecoder.mismatch(jsonPath, "'type'", json); } String? defaultValue; if (json case {'defaultValue': var encodedDefaultValue}) { defaultValue = jsonDecoder.decodeString( '$jsonPath.defaultValue', encodedDefaultValue, ); } return ParameterInfo(kind, name, type, defaultValue: defaultValue); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['kind'] = kind.toJson(clientUriConverter: clientUriConverter); result['name'] = name; result['type'] = type; if (defaultValue case var defaultValue?) { result['defaultValue'] = defaultValue; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is ParameterInfo) { return kind == other.kind && name == other.name && type == other.type && defaultValue == other.defaultValue; } return false; } @override int get hashCode => Object.hash(kind, name, type, defaultValue); } /// ParameterKind /// /// enum { /// OPTIONAL_NAMED /// OPTIONAL_POSITIONAL /// REQUIRED_NAMED /// REQUIRED_POSITIONAL /// } /// /// Clients may not extend, implement or mix-in this class. enum ParameterKind { /// An optional named parameter. OPTIONAL_NAMED, /// An optional positional parameter. OPTIONAL_POSITIONAL, /// A required named parameter. REQUIRED_NAMED, /// A required positional parameter. REQUIRED_POSITIONAL; factory ParameterKind.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'ParameterKind'", json); } @override String toString() => 'ParameterKind.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// PluginDetails /// /// { /// "name": String /// "lintRules": List /// "warningRules": List /// "assists": List /// "fixes": List /// } /// /// Clients may not extend, implement or mix-in this class. class PluginDetails implements HasToJson { /// The name of the plugin. String name; /// A list of the IDs of the analysis rules which have been registered as /// lint rules. List lintRules; /// A list of the IDs of the analysis rules which have been registered as /// warning rules. List warningRules; /// A list of the descriptions of registered assists. List assists; /// A list of the descriptions of registered fixes. List fixes; PluginDetails( this.name, this.lintRules, this.warningRules, this.assists, this.fixes, ); factory PluginDetails.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'PluginDetails'", json); } String name; if (json case {'name': var encodedName}) { name = jsonDecoder.decodeString('$jsonPath.name', encodedName); } else { throw jsonDecoder.mismatch(jsonPath, "'name'", json); } List lintRules; if (json case {'lintRules': var encodedLintRules}) { lintRules = jsonDecoder.decodeList( '$jsonPath.lintRules', encodedLintRules, jsonDecoder.decodeString, ); } else { throw jsonDecoder.mismatch(jsonPath, "'lintRules'", json); } List warningRules; if (json case {'warningRules': var encodedWarningRules}) { warningRules = jsonDecoder.decodeList( '$jsonPath.warningRules', encodedWarningRules, jsonDecoder.decodeString, ); } else { throw jsonDecoder.mismatch(jsonPath, "'warningRules'", json); } List assists; if (json case {'assists': var encodedAssists}) { assists = jsonDecoder.decodeList( '$jsonPath.assists', encodedAssists, (String jsonPath, Object? json) => AssistDescription.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'assists'", json); } List fixes; if (json case {'fixes': var encodedFixes}) { fixes = jsonDecoder.decodeList( '$jsonPath.fixes', encodedFixes, (String jsonPath, Object? json) => FixDescription.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'fixes'", json); } return PluginDetails(name, lintRules, warningRules, assists, fixes); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['name'] = name; result['lintRules'] = lintRules; result['warningRules'] = warningRules; result['assists'] = assists .map( (AssistDescription value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); result['fixes'] = fixes .map( (FixDescription value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is PluginDetails) { return name == other.name && listEqual( lintRules, other.lintRules, (String a, String b) => a == b, ) && listEqual( warningRules, other.warningRules, (String a, String b) => a == b, ) && listEqual( assists, other.assists, (AssistDescription a, AssistDescription b) => a == b, ) && listEqual( fixes, other.fixes, (FixDescription a, FixDescription b) => a == b, ); } return false; } @override int get hashCode => Object.hash( name, Object.hashAll(lintRules), Object.hashAll(warningRules), Object.hashAll(assists), Object.hashAll(fixes), ); } /// PluginPrint /// /// { /// "pluginName": String /// "message": String /// "timestamp": int /// } /// /// Clients may not extend, implement or mix-in this class. class PluginPrint implements HasToJson { /// The name of the plugin which called 'print'. String pluginName; /// The message which has been printed. String message; /// The timestamp, in milliseconds since the epoch, of when the message was /// requested to be printed. int timestamp; PluginPrint(this.pluginName, this.message, this.timestamp); factory PluginPrint.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'PluginPrint'", json); } String pluginName; if (json case {'pluginName': var encodedPluginName}) { pluginName = jsonDecoder.decodeString( '$jsonPath.pluginName', encodedPluginName, ); } else { throw jsonDecoder.mismatch(jsonPath, "'pluginName'", json); } String message; if (json case {'message': var encodedMessage}) { message = jsonDecoder.decodeString('$jsonPath.message', encodedMessage); } else { throw jsonDecoder.mismatch(jsonPath, "'message'", json); } int timestamp; if (json case {'timestamp': var encodedTimestamp}) { timestamp = jsonDecoder.decodeInt( '$jsonPath.timestamp', encodedTimestamp, ); } else { throw jsonDecoder.mismatch(jsonPath, "'timestamp'", json); } return PluginPrint(pluginName, message, timestamp); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['pluginName'] = pluginName; result['message'] = message; result['timestamp'] = timestamp; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is PluginPrint) { return pluginName == other.pluginName && message == other.message && timestamp == other.timestamp; } return false; } @override int get hashCode => Object.hash(pluginName, message, timestamp); } /// Position /// /// { /// "file": FilePath /// "offset": int /// } /// /// Clients may not extend, implement or mix-in this class. class Position implements HasToJson { /// The file containing the position. String file; /// The offset of the position. int offset; Position(this.file, this.offset); factory Position.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'Position'", json); } String file; if (json case {'file': var encodedFile}) { file = clientUriConverter?.fromClientFilePath( jsonDecoder.decodeString('$jsonPath.file', encodedFile), ) ?? jsonDecoder.decodeString('$jsonPath.file', encodedFile); } else { throw jsonDecoder.mismatch(jsonPath, "'file'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } return Position(file, offset); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['file'] = clientUriConverter?.toClientFilePath(file) ?? file; result['offset'] = offset; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is Position) { return file == other.file && offset == other.offset; } return false; } @override int get hashCode => Object.hash(file, offset); } /// RefactoringKind /// /// enum { /// CONVERT_GETTER_TO_METHOD /// CONVERT_METHOD_TO_GETTER /// EXTRACT_LOCAL_VARIABLE /// EXTRACT_METHOD /// EXTRACT_WIDGET /// INLINE_LOCAL_VARIABLE /// INLINE_METHOD /// MOVE_FILE /// RENAME /// } /// /// Clients may not extend, implement or mix-in this class. enum RefactoringKind { CONVERT_GETTER_TO_METHOD, CONVERT_METHOD_TO_GETTER, EXTRACT_LOCAL_VARIABLE, EXTRACT_METHOD, EXTRACT_WIDGET, INLINE_LOCAL_VARIABLE, INLINE_METHOD, MOVE_FILE, RENAME; factory RefactoringKind.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'RefactoringKind'", json); } @override String toString() => 'RefactoringKind.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// RefactoringMethodParameter /// /// { /// "id": optional String /// "kind": RefactoringMethodParameterKind /// "type": String /// "name": String /// "parameters": optional String /// } /// /// Clients may not extend, implement or mix-in this class. class RefactoringMethodParameter implements HasToJson { /// The unique identifier of the parameter. Clients may omit this field for /// the parameters they want to add. String? id; /// The kind of the parameter. RefactoringMethodParameterKind kind; /// The type that should be given to the parameter, or the return type of the /// parameter's function type. String type; /// The name that should be given to the parameter. String name; /// The parameter list of the parameter's function type. If the parameter is /// not of a function type, this field will not be defined. If the function /// type has zero parameters, this field will have a value of '()'. String? parameters; RefactoringMethodParameter( this.kind, this.type, this.name, { this.id, this.parameters, }); factory RefactoringMethodParameter.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch( jsonPath, "'RefactoringMethodParameter'", json, ); } String? id; if (json case {'id': var encodedId}) { id = jsonDecoder.decodeString('$jsonPath.id', encodedId); } RefactoringMethodParameterKind kind; if (json case {'kind': var encodedKind}) { kind = RefactoringMethodParameterKind.fromJson( jsonDecoder, '$jsonPath.kind', encodedKind, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'kind'", json); } String type; if (json case {'type': var encodedType}) { type = jsonDecoder.decodeString('$jsonPath.type', encodedType); } else { throw jsonDecoder.mismatch(jsonPath, "'type'", json); } String name; if (json case {'name': var encodedName}) { name = jsonDecoder.decodeString('$jsonPath.name', encodedName); } else { throw jsonDecoder.mismatch(jsonPath, "'name'", json); } String? parameters; if (json case {'parameters': var encodedParameters}) { parameters = jsonDecoder.decodeString( '$jsonPath.parameters', encodedParameters, ); } return RefactoringMethodParameter( kind, type, name, id: id, parameters: parameters, ); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; if (id case var id?) { result['id'] = id; } result['kind'] = kind.toJson(clientUriConverter: clientUriConverter); result['type'] = type; result['name'] = name; if (parameters case var parameters?) { result['parameters'] = parameters; } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is RefactoringMethodParameter) { return id == other.id && kind == other.kind && type == other.type && name == other.name && parameters == other.parameters; } return false; } @override int get hashCode => Object.hash(id, kind, type, name, parameters); } /// RefactoringMethodParameterKind /// /// enum { /// REQUIRED /// POSITIONAL /// NAMED /// } /// /// Clients may not extend, implement or mix-in this class. enum RefactoringMethodParameterKind { REQUIRED, POSITIONAL, NAMED; factory RefactoringMethodParameterKind.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch( jsonPath, "'RefactoringMethodParameterKind'", json, ); } @override String toString() => 'RefactoringMethodParameterKind.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// RefactoringProblem /// /// { /// "severity": RefactoringProblemSeverity /// "message": String /// "location": optional Location /// } /// /// Clients may not extend, implement or mix-in this class. class RefactoringProblem implements HasToJson { /// The severity of the problem being represented. RefactoringProblemSeverity severity; /// A human-readable description of the problem being represented. String message; /// The location of the problem being represented. This field is omitted /// unless there is a specific location associated with the problem (such as /// a location where an element being renamed will be shadowed). Location? location; RefactoringProblem(this.severity, this.message, {this.location}); factory RefactoringProblem.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'RefactoringProblem'", json); } RefactoringProblemSeverity severity; if (json case {'severity': var encodedSeverity}) { severity = RefactoringProblemSeverity.fromJson( jsonDecoder, '$jsonPath.severity', encodedSeverity, clientUriConverter: clientUriConverter, ); } else { throw jsonDecoder.mismatch(jsonPath, "'severity'", json); } String message; if (json case {'message': var encodedMessage}) { message = jsonDecoder.decodeString('$jsonPath.message', encodedMessage); } else { throw jsonDecoder.mismatch(jsonPath, "'message'", json); } Location? location; if (json case {'location': var encodedLocation}) { location = Location.fromJson( jsonDecoder, '$jsonPath.location', encodedLocation, clientUriConverter: clientUriConverter, ); } return RefactoringProblem(severity, message, location: location); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['severity'] = severity.toJson( clientUriConverter: clientUriConverter, ); result['message'] = message; if (location case var location?) { result['location'] = location.toJson( clientUriConverter: clientUriConverter, ); } return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is RefactoringProblem) { return severity == other.severity && message == other.message && location == other.location; } return false; } @override int get hashCode => Object.hash(severity, message, location); } /// RefactoringProblemSeverity /// /// enum { /// INFO /// WARNING /// ERROR /// FATAL /// } /// /// Clients may not extend, implement or mix-in this class. enum RefactoringProblemSeverity { /// A minor code problem. No example, because it is not used yet. INFO, /// A minor code problem. For example names of local variables should be /// camel case and start with a lower case letter. Staring the name of a /// variable with an upper case is OK from the language point of view, but it /// is nice to warn the user. WARNING, /// The refactoring technically can be performed, but there is a logical /// problem. For example the name of a local variable being extracted /// conflicts with another name in the scope, or duplicate parameter names in /// the method being extracted, or a conflict between a parameter name and a /// local variable, etc. In some cases the location of the problem is also /// provided, so the IDE can show user the location and the problem, and let /// the user decide whether they want to perform the refactoring. For example /// the name conflict might be expected, and the user wants to fix it /// afterwards. ERROR, /// A fatal error, which prevents performing the refactoring. For example the /// name of a local variable being extracted is not a valid identifier, or /// selection is not a valid expression. FATAL; factory RefactoringProblemSeverity.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { if (json is String) { try { return values.byName(json); } catch (_) { // Fall through } } throw jsonDecoder.mismatch(jsonPath, "'RefactoringProblemSeverity'", json); } /// Returns the [RefactoringProblemSeverity] with the maximal severity. static RefactoringProblemSeverity? max( RefactoringProblemSeverity? a, RefactoringProblemSeverity? b, ) => maxRefactoringProblemSeverity(a, b); @override String toString() => 'RefactoringProblemSeverity.$name'; String toJson({ClientUriConverter? clientUriConverter}) => name; } /// RemoveContentOverlay /// /// { /// "type": "remove" /// } /// /// Clients may not extend, implement or mix-in this class. class RemoveContentOverlay implements HasToJson { RemoveContentOverlay(); factory RemoveContentOverlay.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'RemoveContentOverlay'", json); } if (json['type'] != 'remove') { throw jsonDecoder.mismatch(jsonPath, "equal to 'remove'", json); } return RemoveContentOverlay(); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['type'] = 'remove'; return result; } @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is RemoveContentOverlay) { return true; } return false; } @override int get hashCode => 114870849; } /// SourceChange /// /// { /// "message": String /// "edits": List /// "linkedEditGroups": List /// "selection": optional Position /// "selectionLength": optional int /// "id": optional String /// } /// /// Clients may not extend, implement or mix-in this class. class SourceChange implements HasToJson { /// A human-readable description of the change to be applied. /// /// If this change includes multiple edits made for different reasons (such /// as during a bulk fix operation), the individual items in `edits` may /// contain more specific descriptions. String message; /// A list of the edits used to effect the change, grouped by file. List edits; /// A list of the linked editing groups used to customize the changes that /// were made. List linkedEditGroups; /// The position that should be selected after the edits have been applied. Position? selection; /// The length of the selection (starting at Position) that should be /// selected after the edits have been applied. int? selectionLength; /// The optional identifier of the change kind. The identifier remains stable /// even if the message changes, or is parameterized. String? id; SourceChange( this.message, { List? edits, List? linkedEditGroups, this.selection, this.selectionLength, this.id, }) : edits = edits ?? [], linkedEditGroups = linkedEditGroups ?? []; factory SourceChange.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'SourceChange'", json); } String message; if (json case {'message': var encodedMessage}) { message = jsonDecoder.decodeString('$jsonPath.message', encodedMessage); } else { throw jsonDecoder.mismatch(jsonPath, "'message'", json); } List edits; if (json case {'edits': var encodedEdits}) { edits = jsonDecoder.decodeList( '$jsonPath.edits', encodedEdits, (String jsonPath, Object? json) => SourceFileEdit.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'edits'", json); } List linkedEditGroups; if (json case {'linkedEditGroups': var encodedLinkedEditGroups}) { linkedEditGroups = jsonDecoder.decodeList( '$jsonPath.linkedEditGroups', encodedLinkedEditGroups, (String jsonPath, Object? json) => LinkedEditGroup.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'linkedEditGroups'", json); } Position? selection; if (json case {'selection': var encodedSelection}) { selection = Position.fromJson( jsonDecoder, '$jsonPath.selection', encodedSelection, clientUriConverter: clientUriConverter, ); } int? selectionLength; if (json case {'selectionLength': var encodedSelectionLength}) { selectionLength = jsonDecoder.decodeInt( '$jsonPath.selectionLength', encodedSelectionLength, ); } String? id; if (json case {'id': var encodedId}) { id = jsonDecoder.decodeString('$jsonPath.id', encodedId); } return SourceChange( message, edits: edits, linkedEditGroups: linkedEditGroups, selection: selection, selectionLength: selectionLength, id: id, ); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['message'] = message; result['edits'] = edits .map( (SourceFileEdit value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); result['linkedEditGroups'] = linkedEditGroups .map( (LinkedEditGroup value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); if (selection case var selection?) { result['selection'] = selection.toJson( clientUriConverter: clientUriConverter, ); } if (selectionLength case var selectionLength?) { result['selectionLength'] = selectionLength; } if (id case var id?) { result['id'] = id; } return result; } /// Adds [edit] to the [FileEdit] for the given [file]. /// /// If [insertBeforeExisting] is `true`, inserts made at the same offset as /// other edits will be inserted such that they appear before them in the /// resulting document. void addEdit( String file, int fileStamp, SourceEdit edit, { bool insertBeforeExisting = false, }) => addEditToSourceChange( this, file, fileStamp, edit, insertBeforeExisting: insertBeforeExisting, ); /// Adds the given [FileEdit]. void addFileEdit(SourceFileEdit edit) { edits.add(edit); } /// Adds the given [LinkedEditGroup]. void addLinkedEditGroup(LinkedEditGroup linkedEditGroup) { linkedEditGroups.add(linkedEditGroup); } /// Returns the [FileEdit] for the given [file], maybe `null`. SourceFileEdit? getFileEdit(String file) => getChangeFileEdit(this, file); @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is SourceChange) { return message == other.message && listEqual( edits, other.edits, (SourceFileEdit a, SourceFileEdit b) => a == b, ) && listEqual( linkedEditGroups, other.linkedEditGroups, (LinkedEditGroup a, LinkedEditGroup b) => a == b, ) && selection == other.selection && selectionLength == other.selectionLength && id == other.id; } return false; } @override int get hashCode => Object.hash( message, Object.hashAll(edits), Object.hashAll(linkedEditGroups), selection, selectionLength, id, ); } /// SourceEdit /// /// { /// "offset": int /// "length": int /// "replacement": String /// "id": optional String /// "description": optional String /// } /// /// Clients may not extend, implement or mix-in this class. class SourceEdit implements HasToJson { /// Get the result of applying a set of [edits] to the given [code]. Edits /// are applied in the order they appear in [edits]. static String applySequence(String code, List edits) => applySequenceOfEdits(code, edits); /// The offset of the region to be modified. int offset; /// The length of the region to be modified. int length; /// The code that is to replace the specified region in the original code. String replacement; /// An identifier that uniquely identifies this source edit from other edits /// in the same response. This field is omitted unless a containing structure /// needs to be able to identify the edit for some reason. /// /// For example, some refactoring operations can produce edits that might not /// be appropriate (referred to as potential edits). Such edits will have an /// id so that they can be referenced. Edits in the same response that do not /// need to be referenced will not have an id. String? id; /// A human readable description of the change made by this edit. /// /// This description should be short and suitable to use as a heading with /// changes grouped by it. For example, a change made as part of a quick-fix /// may use the message "Replace final with var", allowing multiple changes /// and multiple applications of the fix to be grouped together. /// /// This value may be more specific than any value in an enclosing /// `SourceChange.message` which could contain edits made for different /// reasons (such as during a bulk fix operation). String? description; SourceEdit( this.offset, this.length, this.replacement, { this.id, this.description, }); factory SourceEdit.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'SourceEdit'", json); } int offset; if (json case {'offset': var encodedOffset}) { offset = jsonDecoder.decodeInt('$jsonPath.offset', encodedOffset); } else { throw jsonDecoder.mismatch(jsonPath, "'offset'", json); } int length; if (json case {'length': var encodedLength}) { length = jsonDecoder.decodeInt('$jsonPath.length', encodedLength); } else { throw jsonDecoder.mismatch(jsonPath, "'length'", json); } String replacement; if (json case {'replacement': var encodedReplacement}) { replacement = jsonDecoder.decodeString( '$jsonPath.replacement', encodedReplacement, ); } else { throw jsonDecoder.mismatch(jsonPath, "'replacement'", json); } String? id; if (json case {'id': var encodedId}) { id = jsonDecoder.decodeString('$jsonPath.id', encodedId); } String? description; if (json case {'description': var encodedDescription}) { description = jsonDecoder.decodeString( '$jsonPath.description', encodedDescription, ); } return SourceEdit( offset, length, replacement, id: id, description: description, ); } /// The end of the region to be modified. int get end => offset + length; @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['offset'] = offset; result['length'] = length; result['replacement'] = replacement; if (id case var id?) { result['id'] = id; } if (description case var description?) { result['description'] = description; } return result; } /// Get the result of applying the edit to the given [code]. String apply(String code) => applyEdit(code, this); @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is SourceEdit) { return offset == other.offset && length == other.length && replacement == other.replacement && id == other.id && description == other.description; } return false; } @override int get hashCode => Object.hash(offset, length, replacement, id, description); } /// SourceFileEdit /// /// { /// "file": FilePath /// "fileStamp": long /// "edits": List /// } /// /// Clients may not extend, implement or mix-in this class. class SourceFileEdit implements HasToJson { /// The file containing the code to be modified. String file; /// The modification stamp of the file at the moment when the change was /// created, in milliseconds since the "Unix epoch". Will be -1 if the file /// did not exist and should be created. The client may use this field to /// make sure that the file was not changed since then, so it is safe to /// apply the change. int fileStamp; /// A list of the edits used to effect the change. List edits; SourceFileEdit(this.file, this.fileStamp, {List? edits}) : edits = edits ?? QueueList(); factory SourceFileEdit.fromJson( JsonDecoder jsonDecoder, String jsonPath, Object? json, { ClientUriConverter? clientUriConverter, }) { json ??= {}; if (json is! Map) { throw jsonDecoder.mismatch(jsonPath, "'SourceFileEdit'", json); } String file; if (json case {'file': var encodedFile}) { file = clientUriConverter?.fromClientFilePath( jsonDecoder.decodeString('$jsonPath.file', encodedFile), ) ?? jsonDecoder.decodeString('$jsonPath.file', encodedFile); } else { throw jsonDecoder.mismatch(jsonPath, "'file'", json); } int fileStamp; if (json case {'fileStamp': var encodedFileStamp}) { fileStamp = jsonDecoder.decodeInt( '$jsonPath.fileStamp', encodedFileStamp, ); } else { throw jsonDecoder.mismatch(jsonPath, "'fileStamp'", json); } List edits; if (json case {'edits': var encodedEdits}) { edits = jsonDecoder.decodeList( '$jsonPath.edits', encodedEdits, (String jsonPath, Object? json) => SourceEdit.fromJson( jsonDecoder, jsonPath, json, clientUriConverter: clientUriConverter, ), ); } else { throw jsonDecoder.mismatch(jsonPath, "'edits'", json); } return SourceFileEdit(file, fileStamp, edits: edits); } @override Map toJson({ClientUriConverter? clientUriConverter}) { var result = {}; result['file'] = clientUriConverter?.toClientFilePath(file) ?? file; result['fileStamp'] = fileStamp; result['edits'] = edits .map( (SourceEdit value) => value.toJson(clientUriConverter: clientUriConverter), ) .toList(); return result; } /// Adds the given [Edit] to the list. /// /// If [insertBeforeExisting] is `true`, inserts made at the same offset as /// other edits will be inserted such that they appear before them in the /// resulting document. void add(SourceEdit edit, {bool insertBeforeExisting = false}) => addEditForSource(this, edit, insertBeforeExisting: insertBeforeExisting); /// Adds the given [Edit]s. /// /// If [insertBeforeExisting] is `true`, inserts made at the same offset as /// other edits will be inserted such that they appear before them in the /// resulting document. void addAll( Iterable edits, { bool insertBeforeExisting = false, }) => addAllEditsForSource( this, edits, insertBeforeExisting: insertBeforeExisting, ); @override String toString() => json.encode(toJson(clientUriConverter: null)); @override bool operator ==(other) { if (other is SourceFileEdit) { return file == other.file && fileStamp == other.fileStamp && listEqual(edits, other.edits, (SourceEdit a, SourceEdit b) => a == b); } return false; } @override int get hashCode => Object.hash(file, fileStamp, Object.hashAll(edits)); }