package:analysis_server_plugin/edit/assist/assist.dart:
  Assist (class extends Object, final):
    compareAssists (static method: int Function(Assist, Assist))
    new (constructor: Assist Function(AssistKind, SourceChange))
    change (getter: SourceChange)
    kind (getter: AssistKind)
    toString (method: String Function())
  AssistKind (class extends Object):
    new (const constructor: AssistKind Function(String, int, String))
    id (getter: String)
    message (getter: String)
    priority (getter: int)
    toString (method: String Function())
package:analysis_server_plugin/edit/assist/dart_assist_context.dart:
  DartAssistContext (class extends Object, final):
    new (constructor: DartAssistContext Function(InstrumentationService, ChangeWorkspace, ResolvedLibraryResult, ResolvedUnitResult, int, int))
    instrumentationService (getter: InstrumentationService)
    libraryResult (getter: ResolvedLibraryResult)
    selectionLength (getter: int)
    selectionOffset (getter: int)
    unitResult (getter: ResolvedUnitResult)
    workspace (getter: ChangeWorkspace)
package:analysis_server_plugin/edit/change_builder/change_builder.dart:
  ChangeBuilder (class extends Object, abstract):
    new (constructor: ChangeBuilder Function({String? defaultEol, AnalysisSession session, ChangeWorkspace workspace}))
    defaultEol (getter: String)
    selectionRange (getter: SourceRange?)
    sourceChange (getter: SourceChange)
    addDartFileEdit (method: Future<void> Function(String, FutureOr<void> Function(DartFileEditBuilder), {bool createEditsForImports}))
    addGenericFileEdit (method: Future<void> Function(String, void Function(FileEditBuilder)))
    addYamlFileEdit (method: Future<void> Function(String, void Function(YamlFileEditBuilder)))
    hasEditsFor (method: bool Function(String))
    setSelection (method: void Function(Position))
  ChangeWorkspace (class extends Object, abstract):
    new (constructor: ChangeWorkspace Function())
    resourceProvider (getter: ResourceProvider)
    containsFile (method: bool Function(String))
    getSession (method: AnalysisSession? Function(String))
  DartEditBuilder (class extends Object implements EditBuilder, abstract):
    new (constructor: DartEditBuilder Function())
    addLinkedEdit (method: void Function(String, void Function(DartLinkedEditBuilder)))
    canWriteType (method: bool Function(DartType?, {List<TypeParameterElement>? typeParametersInScope}))
    getIndent (method: String Function(int))
    writeClassDeclaration (method: void Function(String, {Iterable<DartType>? interfaces, bool isAbstract, void Function()? membersWriter, Iterable<DartType>? mixins, String? nameGroupName, DartType? superclass, String? superclassGroupName}))
    writeConstructorDeclaration (method: void Function(String, {ArgumentList? argumentList, void Function()? bodyWriter, String? classNameGroupName, String? constructorName, String? constructorNameGroupName, List<String>? fieldNames, void Function()? initializerWriter, bool isConst, void Function()? parameterWriter}))
    writeFieldDeclaration (method: void Function(String, {bool alwaysWriteType, void Function()? initializerWriter, bool isConst, bool isFinal, bool isStatic, String? nameGroupName, DartType? type, String? typeGroupName, List<TypeParameterElement>? typeParametersInScope}))
    writeFormalParameter (method: void Function(String, {bool isCovariant, bool isRequiredNamed, bool isRequiredType, String? nameGroupName, DartType? type, String? typeGroupName, List<TypeParameterElement>? typeParametersInScope}))
    writeFormalParameters (method: void Function(Iterable<FormalParameterElement>, {bool fillParameterNames, String? groupNamePrefix, bool includeDefaultValues, bool includeParentheses, bool requiredTypes, List<TypeParameterElement>? typeParametersInScope}))
    writeFunctionDeclaration (method: void Function(String, {void Function()? bodyWriter, bool isStatic, String? nameGroupName, void Function()? parameterWriter, DartType? returnType, String? returnTypeGroupName, void Function()? typeParameterWriter, List<TypeParameterElement>? typeParametersInScope}))
    writeGetterDeclaration (method: void Function(String, {bool alwaysWriteType, void Function() bodyWriter, bool isStatic, String nameGroupName, DartType? returnType, String returnTypeGroupName, List<TypeParameterElement>? typeParametersInScope}))
    writeImportedName (method: void Function(List<Uri>, String))
    writeIndent (method: void Function([int]))
    writeLocalVariableDeclaration (method: void Function(String, {void Function()? initializerWriter, bool isConst, bool isFinal, String? nameGroupName, DartType? type, String? typeGroupName}))
    writeMixinDeclaration (method: void Function(String, {Iterable<DartType>? interfaces, void Function()? membersWriter, String? nameGroupName, Iterable<DartType>? superclassConstraints}))
    writeOverride (method: void Function(ExecutableElement, {StringBuffer? displayTextBuffer, bool invokeSuper, bool setSelection}))
    writeParameter (method: void Function(String, {bool isCovariant, bool isRequiredNamed, bool isRequiredType, String? nameGroupName, DartType? type, String? typeGroupName, List<TypeParameterElement>? typeParametersInScope}))
    writeParameterMatchingArgument (method: void Function(Expression, int, Set<String>, {bool isOptional, List<TypeParameterElement>? typeParametersInScope}))
    writeParametersMatchingArguments (method: void Function(ArgumentList, {List<TypeParameterElement>? typeParametersInScope}))
    writeReference (method: void Function(Element))
    writeSetterDeclaration (method: void Function(String, {bool alwaysWriteType, void Function()? bodyWriter, bool isStatic, String? nameGroupName, String parameterName, DartType? parameterType, String? parameterTypeGroupName, List<TypeParameterElement>? typeParametersInScope}))
    writeType (method: bool Function(DartType?, {bool addSupertypeProposals, String? groupName, bool required, bool shouldWriteDynamic, List<TypeParameterElement>? typeParametersInScope}))
    writeTypeParameter (method: void Function(TypeParameterElement, {List<TypeParameterElement>? typeParametersInScope}))
    writeTypeParameters (method: void Function(List<TypeParameterElement>, {List<TypeParameterElement>? typeParametersInScope}))
    writeTypes (method: void Function(Iterable<DartType>?, {String? prefix, bool shouldWriteDynamic}))
  DartFileEditBuilder (class extends Object implements FileEditBuilder, abstract):
    new (constructor: DartFileEditBuilder Function())
    fileHeader= (setter: String)
    requiredImports (getter: List<Uri>)
    addInsertion (method: void Function(int, void Function(DartEditBuilder)))
    addReplacement (method: void Function(SourceRange, void Function(DartEditBuilder)))
    canWriteType (method: bool Function(DartType?, {required int offset, List<TypeParameterElement>? typeParametersInScope}))
    convertFunctionFromAsyncToSync (method: void Function({required FunctionBody body, required TypeProvider typeProvider, required TypeSystem typeSystem}))
    convertFunctionFromSyncToAsync (method: void Function({required FunctionBody body, required TypeProvider typeProvider, required TypeSystem typeSystem}))
    deleteClassMember (method: void Function(ClassMember))
    format (method: void Function(SourceRange))
    importLibrary (method: String Function(Uri, {String? prefix, String? showName, bool useShow}))
    importLibraryElement (method: ImportLibraryElementResult Function(Uri, {String? prefix, String? showName, bool useShow}))
    importsLibrary (method: bool Function(Uri))
    insertCaseClauseAtEnd (method: void Function(void Function(DartEditBuilder), {required Token leftBracket, required Token rightBracket, required Token rightParenthesis, required Token switchKeyword}))
    insertConstructor (method: void Function(CompilationUnitMember, void Function(DartEditBuilder), {bool isNamed}))
    insertField (method: void Function(CompilationUnitMember, void Function(DartEditBuilder)))
    insertGetter (method: void Function(CompilationUnitMember, void Function(DartEditBuilder)))
    insertIntoUnitMember (method: void Function(CompilationUnitMember, void Function(DartEditBuilder), {bool indent, bool Function(ClassMember)? lastMemberFilter}))
    insertMethod (method: void Function(CompilationUnitMember, void Function(DartEditBuilder)))
    replaceTypeWithFuture (method: void Function({required TypeAnnotation typeAnnotation, required TypeProvider typeProvider, required TypeSystem typeSystem}))
    replaceTypeWithFutureArgument (method: void Function({required TypeAnnotation typeAnnotation, required TypeProvider typeProvider, required TypeSystem typeSystem}))
  DartLinkedEditBuilder (class extends Object implements LinkedEditBuilder, abstract):
    new (constructor: DartLinkedEditBuilder Function())
    addSuperTypesAsSuggestions (method: void Function(DartType?))
  EditBuilder (class extends Object, abstract):
    new (constructor: EditBuilder Function())
    addLinkedEdit (method: void Function(String, void Function(LinkedEditBuilder)))
    addSimpleLinkedEdit (method: void Function(String, String, {LinkedEditSuggestionKind kind, List<String> suggestions}))
    selectAll (method: void Function(void Function()))
    selectHere (method: void Function())
    write (method: void Function(String))
    writeln (method: void Function([String]))
  FileEditBuilder (class extends Object, abstract):
    new (constructor: FileEditBuilder Function())
    eol (getter: String)
    addDeletion (method: void Function(SourceRange))
    addInsertion (method: void Function(int, void Function(EditBuilder)))
    addLinkedPosition (method: void Function(SourceRange, String))
    addReplacement (method: void Function(SourceRange, void Function(EditBuilder)))
    addSimpleInsertion (method: void Function(int, String))
    addSimpleReplacement (method: void Function(SourceRange, String))
  ImportLibraryElementResult (class extends Object, abstract):
    new (constructor: ImportLibraryElementResult Function())
    prefix (getter: String?)
  LinkedEditBuilder (class extends Object, abstract):
    new (constructor: LinkedEditBuilder Function())
    addSuggestion (method: void Function(LinkedEditSuggestionKind, String))
    addSuggestions (method: void Function(LinkedEditSuggestionKind, Iterable<String>))
    write (method: void Function(String))
    writeln (method: void Function([String]))
  LinkedEditSuggestionKind (enum):
    METHOD (enum constant: LinkedEditSuggestionKind)
    PARAMETER (enum constant: LinkedEditSuggestionKind)
    TYPE (enum constant: LinkedEditSuggestionKind)
    VARIABLE (enum constant: LinkedEditSuggestionKind)
    values (static const getter: List<LinkedEditSuggestionKind>)
    fromJson (constructor: LinkedEditSuggestionKind Function(JsonDecoder, String, Object?, {ClientUriConverter? clientUriConverter}))
    toJson (method: String Function({ClientUriConverter? clientUriConverter}))
    toString (method: String Function())
  Position (class extends Object implements HasToJson):
    new (constructor: Position Function(String, int))
    fromJson (constructor: Position Function(JsonDecoder, String, Object?, {ClientUriConverter? clientUriConverter}))
    file (getter: String)
    file= (setter: String)
    hashCode (getter: int)
    offset (getter: int)
    offset= (setter: int)
    == (method: bool Function(Object))
    toJson (method: Map<String, Object> Function({ClientUriConverter? clientUriConverter}))
    toString (method: String Function())
  SourceChange (class extends Object implements HasToJson):
    new (constructor: SourceChange Function(String, {List<SourceFileEdit>? edits, String? id, List<LinkedEditGroup>? linkedEditGroups, Position? selection, int? selectionLength}))
    fromJson (constructor: SourceChange Function(JsonDecoder, String, Object?, {ClientUriConverter? clientUriConverter}))
    edits (getter: List<SourceFileEdit>)
    edits= (setter: List<SourceFileEdit>)
    hashCode (getter: int)
    id (getter: String?)
    id= (setter: String?)
    linkedEditGroups (getter: List<LinkedEditGroup>)
    linkedEditGroups= (setter: List<LinkedEditGroup>)
    message (getter: String)
    message= (setter: String)
    selection (getter: Position?)
    selection= (setter: Position?)
    selectionLength (getter: int?)
    selectionLength= (setter: int?)
    == (method: bool Function(Object))
    addEdit (method: void Function(String, int, SourceEdit, {bool insertBeforeExisting}))
    addFileEdit (method: void Function(SourceFileEdit))
    addLinkedEditGroup (method: void Function(LinkedEditGroup))
    getFileEdit (method: SourceFileEdit? Function(String))
    toJson (method: Map<String, Object> Function({ClientUriConverter? clientUriConverter}))
    toString (method: String Function())
  YamlEditBuilder (class extends Object implements EditBuilder, abstract):
    new (constructor: YamlEditBuilder Function())
    addLinkedEdit (method: void Function(String, void Function(YamlLinkedEditBuilder)))
  YamlFileEditBuilder (class extends Object implements FileEditBuilder, abstract):
    new (constructor: YamlFileEditBuilder Function())
    addInsertion (method: void Function(int, void Function(YamlEditBuilder)))
    addReplacement (method: void Function(SourceRange, void Function(YamlEditBuilder)))
  YamlLinkedEditBuilder (class extends Object implements LinkedEditBuilder, abstract):
    new (constructor: YamlLinkedEditBuilder Function())
  ImportPrefixGenerator (type alias for String Function(Uri), deprecated)
package:analysis_server_plugin/edit/correction_utils.dart:
  CorrectionUtils (class extends Object, final):
    new (constructor: CorrectionUtils Function(ParsedUnitResult))
    fromUnitAndContent (constructor: CorrectionUtils Function(CompilationUnit, String))
    endOfLine (getter: String)
    oneIndent (getter: String)
    twoIndents (getter: String)
    findNode (method: AstNode? Function(int))
    getLineContentEnd (method: int Function(int))
    getLineContentStart (method: int Function(int))
    getLineNext (method: int Function(int))
    getLinePrefix (method: String Function(int))
    getLineThis (method: int Function(int))
    getLinesRange (method: SourceRange Function(SourceRange, {bool skipLeadingEmptyLines}))
    getLinesRangeStatements (method: SourceRange Function(List<Statement>))
    getNodePrefix (method: String Function(AstNode))
    getNodeText (method: String Function(AstNode, {bool withLeadingComments}))
    getPrefix (method: String Function(int))
    getRangeText (method: String Function(SourceRange))
    getText (method: String Function(int, int))
    indentSourceLeftRight (method: String Function(String, {bool indentLeft}))
    invertCondition (method: String Function(Expression))
    replaceSourceIndent (method: String Function(String, String, String, {bool ensureTrailingNewline, bool includeLeading}))
    replaceSourceRangeIndent (method: String Function(SourceRange, String, String, {bool ensureTrailingNewline, bool includeLeading}))
  TokenUtils (class extends Object):
    getTokens (static method: List<Token> Function(String, FeatureSet))
    new (constructor: TokenUtils Function())
package:analysis_server_plugin/edit/dart/correction_producer.dart:
  CorrectionApplicability (enum):
    acrossFiles (enum constant: CorrectionApplicability)
    acrossSingleFile (enum constant: CorrectionApplicability)
    automatically (enum constant: CorrectionApplicability)
    automaticallyButOncePerFile (enum constant: CorrectionApplicability)
    singleLocation (enum constant: CorrectionApplicability)
    values (static const getter: List<CorrectionApplicability>)
  CorrectionProducer (class<T extends ParsedUnitResult> extends _AbstractCorrectionProducer<T>, sealed (immediate subtypes: ParsedCorrectionProducer, ResolvedCorrectionProducer)):
    applicability (getter: CorrectionApplicability)
    assistArguments (getter: List<String>?)
    assistKind (getter: AssistKind?)
    canBeAppliedAcrossFiles (getter: bool)
    canBeAppliedAcrossSingleFile (getter: bool)
    canBeAppliedAutomatically (getter: bool)
    coveringNode (getter: AstNode?)
    diagnosticLength (getter: int?)
    diagnosticOffset (getter: int?)
    errorLength (getter: int?, deprecated)
    errorOffset (getter: int?, deprecated)
    fixArguments (getter: List<String>?)
    fixKind (getter: FixKind?)
    multiFixArguments (getter: List<String>?)
    multiFixKind (getter: FixKind?)
    compute (method: Future<void> Function(ChangeBuilder))
  CorrectionProducerContext (class extends Object, final):
    createParsed (static method: CorrectionProducerContext Function({bool applyingBulkFixes, DartFixContext? dartFixContext, Diagnostic? diagnostic, required ParsedLibraryResult libraryResult, int selectionLength, int selectionOffset, required ParsedUnitResult unitResult}))
    createResolved (static method: CorrectionProducerContext Function({bool applyingBulkFixes, DartFixContext? dartFixContext, Diagnostic? diagnostic, required ResolvedLibraryResult libraryResult, int selectionLength, int selectionOffset, required ResolvedUnitResult unitResult}))
    dartFixContext (getter: DartFixContext?)
    node (getter: AstNode)
    path (getter: String)
  CorrectionProducerWithDiagnostic (class extends ResolvedCorrectionProducer, abstract):
    new (constructor: CorrectionProducerWithDiagnostic Function({required CorrectionProducerContext context}))
    diagnostic (getter: Diagnostic)
  MultiCorrectionProducer (class extends _AbstractCorrectionProducer<ResolvedUnitResult>, abstract):
    new (constructor: MultiCorrectionProducer Function({required CorrectionProducerContext context}))
    context (getter: CorrectionProducerContext)
    libraryElement2 (getter: LibraryElement)
    libraryResult (getter: ResolvedLibraryResult)
    producers (getter: Future<List<ResolvedCorrectionProducer>>)
    unitResult (getter: ResolvedUnitResult)
  ParsedCorrectionProducer (class extends CorrectionProducer<ParsedUnitResult>, abstract):
    new (constructor: ParsedCorrectionProducer Function({required CorrectionProducerContext context}))
  ResolvedCorrectionProducer (class extends CorrectionProducer<ResolvedUnitResult>, abstract):
    new (constructor: ResolvedCorrectionProducer Function({required CorrectionProducerContext context}))
    analysisOptions (getter: AnalysisOptions)
    inStaticContext (getter: bool)
    inheritanceManager (getter: InheritanceManager3, deprecated)
    libraryElement2 (getter: LibraryElement)
    libraryResult (getter: ResolvedLibraryResult)
    typeProvider (getter: TypeProvider)
    typeSystem (getter: TypeSystem)
    unitResult (getter: ResolvedUnitResult)
    getClassDeclaration (method: Future<ClassDeclaration?> Function(ClassFragment))
    getDeclarationNodeFromElement (method: Future<CompilationUnitMember?> Function(InstanceElement, {bool includeExtensions}))
    getEnumDeclaration (method: Future<EnumDeclaration?> Function(EnumFragment))
    getExtensionDeclaration (method: Future<ExtensionDeclaration?> Function(ExtensionFragment))
    getExtensionTypeDeclaration (method: Future<ExtensionTypeDeclaration?> Function(ExtensionTypeFragment))
    getMixinDeclaration (method: Future<MixinDeclaration?> Function(MixinFragment))
    getTargetInterfaceElement (method: InterfaceElement? Function(Expression))
    inferUndefinedExpressionType (method: DartType? Function(Expression))
    isEnabled (method: bool Function(Feature))
  StubCorrectionProducerContext (class extends Object implements CorrectionProducerContext, final):
    instance (static getter: StubCorrectionProducerContext)
    noSuchMethod (method: dynamic Function(Invocation))
  _AbstractCorrectionProducer (non-public)
package:analysis_server_plugin/edit/dart/dart_fix_kind_priority.dart:
  DartFixKindPriority (class extends Object, abstract, final):
    ignore (static const getter: int)
    inFile (static const getter: int)
    standard (static const getter: int)
package:analysis_server_plugin/edit/fix/dart_fix_context.dart:
  DartFixContext (class extends Object implements FixContext):
    new (constructor: DartFixContext Function({bool autoTriggered, CorrectionUtils? correctionUtils, required Diagnostic error, required InstrumentationService instrumentationService, required ResolvedLibraryResult libraryResult, required ResolvedUnitResult unitResult, required ChangeWorkspace workspace}))
    autoTriggered (getter: bool)
    correctionUtils (getter: CorrectionUtils)
    diagnostic (getter: Diagnostic)
    error (getter: Diagnostic)
    instrumentationService (getter: InstrumentationService)
    libraryResult (getter: ResolvedLibraryResult)
    unitResult (getter: ResolvedUnitResult)
    workspace (getter: ChangeWorkspace)
    getTopLevelDeclarations (method: Future<Map<LibraryElement, Element>> Function(String))
    librariesWithExtensions (method: Stream<LibraryElement> Function(Name))
package:analysis_server_plugin/edit/fix/fix.dart:
  Fix (class extends Object, final):
    compareFixes (static method: int Function(Fix, Fix))
    new (constructor: Fix Function({required SourceChange change, required FixKind kind}))
    change (getter: SourceChange)
    kind (getter: FixKind)
    toString (method: String Function())
  FixKind (class extends Object):
    new (const constructor: FixKind Function(String, int, String))
    hashCode (getter: int)
    id (getter: String)
    message (getter: String)
    priority (getter: int)
    == (method: bool Function(Object))
    toString (method: String Function())
package:analysis_server_plugin/edit/fix/fix_context.dart:
  FixContext (class extends Object, abstract, interface):
    diagnostic (getter: Diagnostic)
    error (getter: Diagnostic, deprecated)
package:analysis_server_plugin/edit/range_factory.dart:
  range (static getter: RangeFactory)
  RangeFactory (class extends Object):
    new (constructor: RangeFactory Function())
    argumentRange (method: SourceRange Function(ArgumentList, int, int, bool))
    deletionRange (method: SourceRange Function(AstNode, {Token? overrideEnd}))
    diagnostic (method: SourceRange Function(Diagnostic))
    endEnd (method: SourceRange Function(SyntacticEntity, SyntacticEntity))
    endLength (method: SourceRange Function(SyntacticEntity, int))
    endStart (method: SourceRange Function(SyntacticEntity, SyntacticEntity))
    entity (method: SourceRange Function(SyntacticEntity))
    fragmentName (method: SourceRange? Function(Fragment))
    node (method: SourceRange Function(AstNode))
    nodeInList (method: SourceRange Function<T extends AstNode>(NodeList<T>, T))
    nodes (method: SourceRange Function(List<AstNode>))
    offsetBy (method: SourceRange Function(SourceRange, int))
    startEnd (method: SourceRange Function(SyntacticEntity, SyntacticEntity))
    startLength (method: SourceRange Function(SyntacticEntity, int))
    startOffsetEndOffset (method: SourceRange Function(int, int))
    startOffsetLength (method: SourceRange Function(int, int))
    startOffsetStart (method: SourceRange Function(int, SyntacticEntity))
    startStart (method: SourceRange Function(SyntacticEntity, SyntacticEntity))
    token (method: SourceRange Function(Token))
package:analysis_server_plugin/plugin.dart:
  Plugin (class extends Object, abstract):
    new (constructor: Plugin Function())
    name (getter: String)
    register (method: FutureOr<void> Function(PluginRegistry))
    shutDown (method: FutureOr<void> Function())
    start (method: FutureOr<void> Function())
package:analysis_server_plugin/registry.dart:
  PluginRegistry (class extends RegistryBase, abstract):
    new (constructor: PluginRegistry Function())
    registerAssist (method: void Function(CorrectionProducer<ParsedUnitResult> Function({required CorrectionProducerContext context})))
    registerFixForRule (method: void Function(DiagnosticCode, CorrectionProducer<ParsedUnitResult> Function({required CorrectionProducerContext context})))
dart:async:
  Future (referenced)
  FutureOr (referenced)
  Stream (referenced)
dart:core:
  Invocation (referenced)
  Iterable (referenced)
  List (referenced)
  Map (referenced)
  Object (referenced)
  Set (referenced)
  String (referenced)
  StringBuffer (referenced)
  Uri (referenced)
  bool (referenced)
  int (referenced)
package:_fe_analyzer_shared/src/base/errors.dart:
  DiagnosticCode (referenced)
package:_fe_analyzer_shared/src/base/source_range.dart:
  SourceRange (referenced)
package:_fe_analyzer_shared/src/base/syntactic_entity.dart:
  SyntacticEntity (referenced)
package:_fe_analyzer_shared/src/scanner/token.dart:
  Token (referenced)
package:analyzer/dart/analysis/analysis_options.dart:
  AnalysisOptions (referenced)
package:analyzer/dart/analysis/features.dart:
  Feature (referenced)
  FeatureSet (referenced)
package:analyzer/dart/analysis/results.dart:
  ParsedLibraryResult (referenced)
  ParsedUnitResult (referenced)
  ResolvedLibraryResult (referenced)
  ResolvedUnitResult (referenced)
package:analyzer/dart/analysis/session.dart:
  AnalysisSession (referenced)
package:analyzer/dart/element/element.dart:
  ClassFragment (referenced)
  Element (referenced)
  EnumFragment (referenced)
  ExecutableElement (referenced)
  ExtensionFragment (referenced)
  ExtensionTypeFragment (referenced)
  FormalParameterElement (referenced)
  Fragment (referenced)
  InstanceElement (referenced)
  InterfaceElement (referenced)
  LibraryElement (referenced)
  MixinFragment (referenced)
  TypeParameterElement (referenced)
package:analyzer/dart/element/type.dart:
  DartType (referenced)
package:analyzer/dart/element/type_provider.dart:
  TypeProvider (referenced)
package:analyzer/dart/element/type_system.dart:
  TypeSystem (referenced)
package:analyzer/diagnostic/diagnostic.dart:
  Diagnostic (referenced)
package:analyzer/file_system/file_system.dart:
  ResourceProvider (referenced)
package:analyzer/instrumentation/service.dart:
  InstrumentationService (referenced)
package:analyzer/src/dart/ast/ast.dart:
  ArgumentList (referenced)
  AstNode (referenced)
  ClassDeclaration (referenced)
  ClassMember (referenced)
  CompilationUnit (referenced)
  CompilationUnitMember (referenced)
  EnumDeclaration (referenced)
  Expression (referenced)
  ExtensionDeclaration (referenced)
  ExtensionTypeDeclaration (referenced)
  FunctionBody (referenced)
  MixinDeclaration (referenced)
  NodeList (referenced)
  Statement (referenced)
  TypeAnnotation (referenced)
package:analyzer/src/dart/element/inheritance_manager3.dart:
  InheritanceManager3 (referenced)
  Name (referenced)
package:analyzer/src/lint/registry.dart:
  RegistryBase (referenced)
package:analyzer_plugin/protocol/protocol_common.dart:
  LinkedEditGroup (referenced)
  SourceEdit (referenced)
  SourceFileEdit (referenced)
package:analyzer_plugin/src/protocol/protocol_internal.dart:
  HasToJson (referenced)
  JsonDecoder (referenced)
package:analyzer_plugin/src/utilities/client_uri_converter.dart:
  ClientUriConverter (referenced)
