<!doctype html>
<html>
<head>
  <meta charset="UTF-8"/>
  <title>Analysis Server API Specification</title>
</head>
<body>
<h1>Analysis Server API Specification</h1>
<h1 style="color:#999999">Version
  <version>1.20.3</version>
</h1>
<p>
  This document contains a specification of the API provided by the
  analysis server. The API in this document is currently under
  development. Changes to the API will be accompanied by an update to the
  protocol version number according to the principles of semantic
  versioning (<a href="http://semver.org/">semver.org</a>).
</p>
<h2>Overview</h2>
<p>
  The analysis server API is a bi-directional client-server
  API. The API is independent of the transport mechanism used, but
  is heavily influenced by a model in which sockets or character
  streams are used to transport JSON-RPC encoded information.
</p>
<h3>Transport Mechanism</h3>
<p>
  The characters passed to the server are expected to be encoded
  using UTF-8.
</p>
<p>
  When character streams are used as the transport, messages are
  delineated by newlines. This means, in particular, that the JSON
  encoding process must not introduce newlines within a
  message. Note however that newlines are used in this document
  for readability.
</p>
<p>
  It is the client's responsibility to read output from the server to
  avoid its blocking.
</p>
<p>
  To ease interoperability with Lisp-based clients (which may not
  be able to easily distinguish between empty lists, empty maps,
  and null), client-to-server communication is allowed to replace
  any instance of "<tt>{}</tt>" or "<tt>[]</tt>" with null. The
  server will always properly represent empty lists as
  "<tt>[]</tt>" and empty maps as "<tt>{}</tt>".
</p>
<h3>Communication Structure</h3>
<p>
  Clients can make a request of the server and the server will
  provide a response for each request that it receives. While many
  of the requests that can be made by a client are informational
  in nature, we have chosen to always return a response so that
  clients can know whether the request was received and was
  correct.
</p>
<p>
  There is no guarantee concerning the order in which responses
  will be returned, but there is a guarantee that the server will
  process requests in the order in which they are sent as long as
  the transport mechanism also makes this guarantee. Responses can
  be returned in an order that is different from the order in
  which the requests were received because some requests take
  longer to process than others.
</p>
<p>
  Every request is required to have two fields and may have two
  additional optional fields. The first required field is the ‘id’
  field, which is only used by the server to associate a response
  with the request that generated the response. The second
  required field is the ‘method’ field, which is used to determine
  what the server is being requested to do. One optional field is
  the ‘params’ field, whose structure is dependent on the method
  being requested. The structure of this field is described with
  each request for which it is required. The other optional field
  is the 'clientRequestTime' field, which is a number indicating
  the time at which the client made the request (milliseconds
  since epoch). Providing clientRequestTime helps us track
  how responsive analysis server is to client requests
  and better address any issues that occur.
</p>
<p>
  Every response has up to three fields. The first field is the
  ‘id’ field, which is always present and whose value is the
  identifier that was passed to the request that generated the
  response. The second field is the ‘error’ field, which is only
  present if an error was encountered while processing the
  request. The third field is the ‘result’ field, whose structure
  is dependent on the method being responded to, and is described
  with each request that will produce it.
</p>
<p>
  The server can also communicate to the clients by sending a
  notification. The purpose of these notifications is to provide
  information to clients as it becomes available rather than to
  require that clients poll for it. Unless explicitly stated, all
  notifications are designed to return the complete information
  available at the time the notification is sent; clients are not
  required to update previously communicated
  results. Consequently, the server can and should return partial
  results before all results are available. For example, the
  syntactic errors for a file can be returned as soon as the
  syntactic analysis is complete, and both syntactic and semantic
  errors can be returned together at a later time.
</p>
<p>
  Each notification has two fields. The first field is the ‘event’
  field, which identifies the kind of notification. The second
  field is the ‘params’ field, whose structure is dependent on the
  kind of notification being sent. The structure of this field is
  described with each notification.
</p>
<p>
  In order to be backward compatible, clients should ignore fields that were
  not specified in the version of the API on which they were based. Clients
  should also use the server.getVersion request to test that the version of
  the server supports an API before using it.
</p>
<h3>Eventual Consistency</h3>
<p>
  The analysis server satisfies requests under the principle of
  <a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventual
    consistency</a>.
  That is, in some cases it may return responses with the currently available
  results while it's catching up with unprocessed changes.
</p>
<h3>Domains</h3>
<p>
  For convenience, the API is divided into domains. Each domain is specified
  in a separate section below. The specifications of the API’s refer to data
  structures beyond the standard JSON primitives. These data structures are
  documented in the section titled <a href="#types">Types</a>.
</p>
<toc></toc>
<h3>Command-line Arguments</h3>
<p>
  The command-line arguments that can be passed to the server.
</p>
<h4>Options</h4>
<blockquote>
  <dl>
    <dt>--client-id</dt>
    <dd>
      <p>
        Specifies an identifier associated with the client. Used when
        generating error reports.
      </p>
      <p>
        Clients are strongly encouraged to provide this information in
        order to improve the quality of information that can be provided
        to them.
      </p>
    </dd>
  </dl>
  <dl>
    <dt>--client-version</dt>
    <dd>
      <p>
        Specifies the version of the client that is communicating with
        the server. Used when generating error reports.
      </p>
      <p>
        Clients are strongly encouraged to provide this information in
        order to improve the quality of information that can be provided
        to them.
      </p>
    </dd>
  </dl>
  <dl>
    <dt class="deprecated">--no-error-notification</dt>
    <dd>
      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
      Disable notifications about errors (see analysis.error). If this
      flag is not specified then notifications will be sent for all
      errors produced for all files in the actual analysis roots.
    </dd>
  </dl>
  <dl>
    <dt class="deprecated">--no-index</dt>
    <dd>
      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
      This flag used to disable the server from generating an index, but now
      it has no effect.
    </dd>
  </dl>
  <dl>
    <dt class="deprecated">--file-read-mode</dt>
    <dd>
      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
      An enumeration of the ways files can be read from disk. Some clients
      normalize end of line characters which would make the file offset and
      range information incorrect. The default option is <tt>as-is</tt>, but
      can also be set to <tt>normalize-eol-always</tt>. The default option
      (<tt>as-is</tt>) reads files as they are on disk. The
      <tt>normalize-eol-always</tt> option does the following:
      <ul>
        <li>'\r\n' is converted to '\n';</li>
        <li>'\r' by itself is converted to '\n';</li>
        <li>this happens regardless of the OS editor is running on.</li>
      </ul>
    </dd>
  </dl>
</blockquote>
<domains></domains>
<domain name="server">
  <p>
    The server domain contains API’s related to the execution of
    the server.
  </p>
  <request method="getVersion">
    <p>Return the version number of the analysis server.</p>
    <result>
      <field name="version">
        <ref>String</ref>
        <p>The version number of the analysis server.</p>
      </field>
    </result>
  </request>
  <request method="shutdown">
    <p>
      Cleanly shutdown the analysis server. Requests that are
      received after this request will not be processed. Requests
      that were received before this request, but for which a
      response has not yet been sent, will not be responded to. No
      further responses or notifications will be sent after the
      response to this request has been sent.
    </p>
  </request>
  <request method="setSubscriptions">
    <p>
      Subscribe for services. All previous subscriptions are
      replaced by the given set of services.
    </p>
    <p>
      It is an error if any of the elements in the list are not
      valid services. If there is an error, then the current
      subscriptions will remain unchanged.
    </p>
    <params>
      <field name="subscriptions">
        <list>
          <ref>ServerService</ref>
        </list>
        <p>A list of the services being subscribed to.</p>
      </field>
    </params>
  </request>
  <notification event="connected">
    <p>
      Reports that the server is running. This notification is
      issued once after the server has started running but before
      any requests are processed to let the client know that it
      started correctly.
    </p>
    <p>
      It is not possible to subscribe to or unsubscribe from this
      notification.
    </p>
    <params>
      <field name="version">
        <ref>String</ref>
        <p>The version number of the analysis server.</p>
      </field>
      <field name="pid">
        <ref>int</ref>
        <p>The process id of the analysis server process.</p>
      </field>
      <field name="sessionId" optional="true">
        <ref>String</ref>
        <p>The session id for this session.</p>
      </field>
    </params>
  </notification>
  <notification event="error">
    <p>
      Reports that an unexpected error has occurred while
      executing the server. This notification is not used for
      problems with specific requests (which are returned as part
      of the response) but is used for exceptions that occur while
      performing other tasks, such as analysis or preparing
      notifications.
    </p>
    <p>
      It is not possible to subscribe to or unsubscribe from this
      notification.
    </p>
    <params>
      <field name="isFatal">
        <ref>bool</ref>
        <p>
          True if the error is a fatal error, meaning that the
          server will shutdown automatically after sending this
          notification.
        </p>
      </field>
      <field name="message">
        <ref>String</ref>
        <p>
          The error message indicating what kind of error was
          encountered.
        </p>
      </field>
      <field name="stackTrace">
        <ref>String</ref>
        <p>
          The stack trace associated with the generation of the
          error, used for debugging the server.
        </p>
      </field>
    </params>
  </notification>
  <notification event="status">
    <p>
      Reports the current status of the server. Parameters are
      omitted if there has been no change in the status
      represented by that parameter.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"STATUS"</tt> in
      the list of services passed in a server.setSubscriptions
      request.
    </p>
    <params>
      <field name="analysis" optional="true">
        <ref>AnalysisStatus</ref>
        <p>
          The current status of analysis, including whether
          analysis is being performed and if so what is being
          analyzed.
        </p>
      </field>
      <field name="pub" optional="true">
        <ref>PubStatus</ref>
        <p>
          The current status of pub execution, indicating whether we are
          currently running pub.
        </p>
      </field>
    </params>
  </notification>
</domain>
<domain name="analysis">
  <p>
    The analysis domain contains API’s related to the analysis of
    files.
  </p>
  <request method="getErrors">
    <p>
      Return the errors associated with the given file. If the
      errors for the given file have not yet been computed, or the
      most recently computed errors for the given file are out of
      date, then the response for this request will be delayed
      until they have been computed. If some or all of the errors
      for the file cannot be computed, then the subset of the
      errors that can be computed will be returned and the
      response will contain an error to indicate why the errors
      could not be computed. If the content of the file changes after this
      request was received but before a response could be sent, then an
      error of type <tt>CONTENT_MODIFIED</tt> will be generated.
    </p>
    <p>
      This request is intended to be used by clients that cannot
      asynchronously apply updated error information. Clients that
      <b>can</b> apply error information as it becomes available
      should use the information provided by the 'analysis.errors'
      notification.
    </p>
    <p>
      If a request is made for a file which does not exist, or
      which is not currently subject to analysis (e.g. because it
      is not associated with any analysis root specified to
      analysis.setAnalysisRoots), an error of type
      <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file for which errors are being requested.
        </p>
      </field>
    </params>
    <result>
      <field name="errors">
        <list>
          <ref>AnalysisError</ref>
        </list>
        <p>
          The errors associated with the file.
        </p>
      </field>
    </result>
  </request>
  <request method="getHover">
    <p>
      Return the hover information associate with the given
      location. If some or all of the hover information is not
      available at the time this request is processed the
      information will be omitted from the response.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which hover information is being requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset for which hover information is being requested.
        </p>
      </field>
    </params>
    <result>
      <field name="hovers">
        <list>
          <ref>HoverInformation</ref>
        </list>
        <p>
          The hover information associated with the
          location. The list will be empty if no information
          could be determined for the location. The list can
          contain multiple items if the file is being analyzed
          in multiple contexts in conflicting ways (such as a
          part that is included in multiple libraries).
        </p>
      </field>
    </result>
  </request>
  <request method="getImportedElements" experimental="true">
    <p>
      Return a description of all of the elements referenced in a given region
      of a given file that come from imported libraries.
    </p>
    <p>
      If a request is made for a file that does not exist, or that is not
      currently subject to analysis (e.g. because it is not associated with any
      analysis root specified via analysis.setAnalysisRoots), an error of type
      <tt>GET_IMPORTED_ELEMENTS_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which import information is being requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region for which import information is being
          requested.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region for which import information is being
          requested.
        </p>
      </field>
    </params>
    <result>
      <field name="elements">
        <list>
          <ref>ImportedElements</ref>
        </list>
        <p>
          The information about the elements that are referenced in the
          specified region of the specified file that come from imported
          libraries.
        </p>
      </field>
    </result>
  </request>
  <request method="getLibraryDependencies">
    <p>
      Return library dependency information for use in client-side indexing
      and package URI resolution.
    </p>
    <p>
      Clients that are only using the libraries field should consider using the
      analyzedFiles notification instead.
    </p>
    <result>
      <field name="libraries">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the paths of library elements referenced by
          files in existing analysis roots.
        </p>
      </field>
      <field name="packageMap">
        <map>
          <key>
            <ref>String</ref>
          </key>
          <value>
            <map>
              <key>
                <ref>String</ref>
              </key>
              <value>
                <list>
                  <ref>FilePath</ref>
                </list>
              </value>
            </map>
          </value>
        </map>
        <p>
          A mapping from context source roots to package maps which map
          package names to source directories for use in client-side
          package URI resolution.
        </p>
      </field>
    </result>
  </request>
  <request method="getNavigation">
    <p>
      Return the navigation information associated with the given region of
      the given file. If the navigation information for the given file has
      not yet been computed, or the most recently computed navigation
      information for the given file is out of date, then the response for
      this request will be delayed until it has been computed. If the
      content of the file changes after this request was received but before
      a response could be sent, then an error of type
      <tt>CONTENT_MODIFIED</tt> will be generated.
    </p>
    <p>
      If a navigation region overlaps (but extends either before or after)
      the given region of the file it will be included in the result. This
      means that it is theoretically possible to get the same navigation
      region in response to multiple requests. Clients can avoid this by
      always choosing a region that starts at the beginning of a line and
      ends at the end of a (possibly different) line in the file.
    </p>
    <p>
      If a request is made for a file which does not exist, or
      which is not currently subject to analysis (e.g. because it
      is not associated with any analysis root specified to
      analysis.setAnalysisRoots), an error of type
      <tt>GET_NAVIGATION_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which navigation information is being requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region for which navigation information is being
          requested.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region for which navigation information is being
          requested.
        </p>
      </field>
    </params>
    <result>
      <field name="files">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the paths of files that are referenced by the navigation
          targets.
        </p>
      </field>
      <field name="targets">
        <list>
          <ref>NavigationTarget</ref>
        </list>
        <p>
          A list of the navigation targets that are referenced by the
          navigation regions.
        </p>
      </field>
      <field name="regions">
        <list>
          <ref>NavigationRegion</ref>
        </list>
        <p>
          A list of the navigation regions within the requested region of
          the file.
        </p>
      </field>
    </result>
  </request>
  <request method="getReachableSources">
    <p>
      Return the transitive closure of reachable sources for a given file.
    </p>
    <p>
      If a request is made for a file which does not exist, or
      which is not currently subject to analysis (e.g. because it
      is not associated with any analysis root specified to
      analysis.setAnalysisRoots), an error of type
      <tt>GET_REACHABLE_SOURCES_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file for which reachable source information is being requested.
        </p>
      </field>
    </params>
    <result>
      <field name="sources">
        <map>
          <key>
            <ref>String</ref>
          </key>
          <value>
            <list>
              <ref>String</ref>
            </list>
          </value>
        </map>
        <p>
          A mapping from source URIs to directly reachable source URIs. For
          example,
          a file "foo.dart" that imports "bar.dart" would have the corresponding
          mapping
          { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
          further imports
          (or exports) there will be a mapping from the URI "file:///bar.dart"
          to them.
          To check if a specific URI is reachable from a given file, clients can
          check
          for its presence in the resulting key set.
        </p>
      </field>
    </result>
  </request>
  <request method="reanalyze">
    <p>
      Force the re-analysis of everything contained in the specified
      analysis roots. This will cause all previously computed analysis
      results to be discarded and recomputed, and will cause all subscribed
      notifications to be re-sent.
    </p>
    <p>
      If no analysis roots are provided, then all current analysis roots
      will be re-analyzed. If an empty list of analysis roots is provided,
      then nothing will be re-analyzed. If the list contains one or more
      paths that are not currently analysis roots, then an error of type
      <tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
    </p>
    <params>
      <field name="roots" optional="true">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the analysis roots that are to be re-analyzed.
        </p>
      </field>
    </params>
  </request>
  <request method="setAnalysisRoots">
    <p>
      Sets the root paths used to determine which files to analyze. The set
      of files to be analyzed are all of the files in one of the root paths
      that are not either explicitly or implicitly excluded. A file is
      explicitly excluded if it is in one of the excluded paths. A file is
      implicitly excluded if it is in a subdirectory of one of the root
      paths where the name of the subdirectory starts with a period (that
      is, a hidden directory).
    </p>
    <p>
      Note that this request determines the set of requested
      analysis roots. The actual set of analysis roots at any
      given time is the intersection of this set with the set of
      files and directories actually present on the
      filesystem. When the filesystem changes, the actual set of
      analysis roots is automatically updated, but the set of
      requested analysis roots is unchanged. This means that if
      the client sets an analysis root before the root becomes
      visible to server in the filesystem, there is no error; once
      the server sees the root in the filesystem it will start
      analyzing it. Similarly, server will stop analyzing files
      that are removed from the file system but they will remain
      in the set of requested roots.
    </p>
    <p>
      If an included path represents a file, then server will look
      in the directory containing the file for a pubspec.yaml
      file. If none is found, then the parents of the directory
      will be searched until such a file is found or the root of
      the file system is reached. If such a file is found, it will
      be used to resolve package: URI’s within the file.
    </p>
    <params>
      <field name="included">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the files and directories that should be
          analyzed.
        </p>
      </field>
      <field name="excluded">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the files and directories within the
          included directories that should not be analyzed.
        </p>
      </field>
      <field name="packageRoots" optional="true">
        <map>
          <key>
            <ref>FilePath</ref>
          </key>
          <value>
            <ref>FilePath</ref>
          </value>
        </map>
        <p>
          A mapping from source directories to package roots
          that should override the normal package: URI resolution
          mechanism.
        </p>
        <p>
          If a package root is a directory, then
          the analyzer will behave as though the associated
          source directory in the map contains a special
          pubspec.yaml file which resolves any package: URI to the
          corresponding path within that package root directory. The
          effect is the same as specifying the package root directory as
          a "--package_root" parameter to the Dart VM when
          executing any Dart file inside the source directory.
        </p>
        <p>
          If a package root is a file, then the analyzer
          will behave as though that file is a ".packages" file in the
          source directory. The effect is the same as specifying the file
          as a "--packages" parameter to the Dart VM when
          executing any Dart file inside the source directory.
        </p>
        <p>
          Files in any directories that are not overridden by this
          mapping have their package: URI's resolved using the
          normal pubspec.yaml mechanism. If this field is absent,
          or the empty map is specified, that indicates that the
          normal pubspec.yaml mechanism should always be used.
        </p>
      </field>
    </params>
  </request>
  <request method="setGeneralSubscriptions">
    <p>
      Subscribe for general services (that is, services that are not
      specific to individual files). All previous subscriptions are replaced
      by the given set of services.
    </p>
    <p>
      It is an error if any of the elements in the list are not valid
      services. If there is an error, then the current subscriptions will
      remain unchanged.
    </p>
    <params>
      <field name="subscriptions">
        <list>
          <ref>GeneralAnalysisService</ref>
        </list>
        <p>A list of the services being subscribed to.</p>
      </field>
    </params>
  </request>
  <request method="setPriorityFiles">
    <p>
      Set the priority files to the files in the given list. A
      priority file is a file that is given priority when
      scheduling which analysis work to do first. The list
      typically contains those files that are visible to the user
      and those for which analysis results will have the biggest
      impact on the user experience. The order of the files within
      the list is significant: the first file will be given higher
      priority than the second, the second higher priority than
      the third, and so on.
    </p>
    <p>
      Note that this request determines the set of requested
      priority files. The actual set of priority files is the
      intersection of the requested set of priority files with the
      set of files currently subject to analysis. (See
      analysis.setSubscriptions for a description of files that
      are subject to analysis.)
    </p>
    <p>
      If a requested priority file is a directory it is ignored,
      but remains in the set of requested priority files so that
      if it later becomes a file it can be included in the set of
      actual priority files.
    </p>
    <params>
      <field name="files">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The files that are to be a priority for analysis.
        </p>
      </field>
    </params>
  </request>
  <request method="setSubscriptions">
    <p>
      Subscribe for services that are specific to individual files.
      All previous subscriptions are replaced by the current set of
      subscriptions. If a given service is not included as a key in the map
      then no files will be subscribed to the service, exactly as if the
      service had been included in the map with an explicit empty list of
      files.
    </p>
    <p>
      Note that this request determines the set of requested
      subscriptions. The actual set of subscriptions at any given
      time is the intersection of this set with the set of files
      currently subject to analysis. The files currently subject
      to analysis are the set of files contained within an actual
      analysis root but not excluded, plus all of the files
      transitively reachable from those files via import, export
      and part directives. (See analysis.setAnalysisRoots for an
      explanation of how the actual analysis roots are
      determined.) When the actual analysis roots change, the
      actual set of subscriptions is automatically updated, but
      the set of requested subscriptions is unchanged.
    </p>
    <p>
      If a requested subscription is a directory it is ignored,
      but remains in the set of requested subscriptions so that if
      it later becomes a file it can be included in the set of
      actual subscriptions.
    </p>
    <p>
      It is an error if any of the keys in the map are not valid
      services. If there is an error, then the existing
      subscriptions will remain unchanged.
    </p>
    <params>
      <field name="subscriptions">
        <map>
          <key>
            <ref>AnalysisService</ref>
          </key>
          <value>
            <list>
              <ref>FilePath</ref>
            </list>
          </value>
        </map>
        <p>
          A table mapping services to a list of the files being
          subscribed to the service.
        </p>
      </field>
    </params>
  </request>
  <request method="updateContent">
    <p>
      Update the content of one or more files. Files that were
      previously updated but not included in this update remain
      unchanged. This effectively represents an overlay of the
      filesystem. The files whose content is overridden are
      therefore seen by server as being files with the given
      content, even if the files do not exist on the filesystem or
      if the file path represents the path to a directory on the
      filesystem.
    </p>
    <params>
      <field name="files">
        <map>
          <key>
            <ref>FilePath</ref>
          </key>
          <value>
            <union field="type">
              <ref>AddContentOverlay</ref>
              <ref>ChangeContentOverlay</ref>
              <ref>RemoveContentOverlay</ref>
            </union>
          </value>
        </map>
        <p>
          A table mapping the files whose content has changed to a
          description of the content change.
        </p>
      </field>
    </params>
    <result>
    </result>
  </request>
  <request method="updateOptions" deprecated="true">
    <p><b>Deprecated:</b> all of the options can be set by users in
      an analysis options file.</p>
    <p>
      Update the options controlling analysis based on the given
      set of options. Any options that are not included in the
      analysis options will not be changed. If there are options
      in the analysis options that are not valid, they will be
      silently ignored.
    </p>
    <params>
      <field name="options">
        <ref>AnalysisOptions</ref>
        <p>
          The options that are to be used to control analysis.
        </p>
      </field>
    </params>
  </request>
  <notification event="analyzedFiles">
    <p>
      Reports the paths of the files that are being analyzed.
    </p>
    <p>
      This notification is not subscribed to by default. Clients can
      subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the list
      of services passed in an analysis.setGeneralSubscriptions request.
    </p>
    <params>
      <field name="directories">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the paths of the files that are being analyzed.
        </p>
      </field>
    </params>
  </notification>
  <notification event="closingLabels" experimental="true">
    <p>
      Reports closing labels relevant to a given file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"CLOSING_LABELS"</tt>
      in the list of services passed in an
      analysis.setSubscriptions request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file the closing labels relate to.
        </p>
      </field>
      <field name="labels">
        <list>
          <ref>ClosingLabel</ref>
        </list>
        <p>
          Closing labels relevant to the file. Each item
          represents a useful label associated with some range
          with may be useful to display to the user within the editor
          at the end of the range to indicate what construct is closed
          at that location. Closing labels include constructor/method
          calls and List arguments that span multiple lines.
          Note that the ranges that are returned can overlap
          each other because they may be associated with
          constructs that can be nested.
        </p>
      </field>
    </params>
  </notification>
  <notification event="errors">
    <p>
      Reports the errors associated with a given file. The set of
      errors included in the notification is always a complete
      list that supersedes any previously reported errors.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the errors.
        </p>
      </field>
      <field name="errors">
        <list>
          <ref>AnalysisError</ref>
        </list>
        <p>
          The errors contained in the file.
        </p>
      </field>
    </params>
  </notification>
  <notification event="flushResults">
    <p>
      Reports that any analysis results that were previously
      associated with the given files should be considered to be
      invalid because those files are no longer being analyzed,
      either because the analysis root that contained it is no
      longer being analyzed or because the file no longer exists.
    </p>
    <p>
      If a file is included in this notification and at some later
      time a notification with results for the file is received,
      clients should assume that the file is once again being
      analyzed and the information should be processed.
    </p>
    <p>
      It is not possible to subscribe to or unsubscribe from this
      notification.
    </p>
    <params>
      <field name="files">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The files that are no longer being analyzed.
        </p>
      </field>
    </params>
  </notification>
  <notification event="folding">
    <p>
      Reports the folding regions associated with a given
      file. Folding regions can be nested, but will not be
      overlapping. Nesting occurs when a foldable element, such as
      a method, is nested inside another foldable element such as
      a class.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"FOLDING"</tt> in
      the list of services passed in an analysis.setSubscriptions
      request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the folding regions.
        </p>
      </field>
      <field name="regions">
        <list>
          <ref>FoldingRegion</ref>
        </list>
        <p>
          The folding regions contained in the file.
        </p>
      </field>
    </params>
  </notification>
  <notification event="highlights">
    <p>
      Reports the highlight regions associated with a given file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"HIGHLIGHTS"</tt>
      in the list of services passed in an
      analysis.setSubscriptions request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the highlight regions.
        </p>
      </field>
      <field name="regions">
        <list>
          <ref>HighlightRegion</ref>
        </list>
        <p>
          The highlight regions contained in the file. Each
          highlight region represents a particular syntactic or
          semantic meaning associated with some range. Note that
          the highlight regions that are returned can overlap
          other highlight regions if there is more than one
          meaning associated with a particular region.
        </p>
      </field>
    </params>
  </notification>
  <notification event="implemented">
    <p>
      Reports the classes that are implemented or extended and
      class members that are implemented or overridden in a file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
      the list of services passed in an analysis.setSubscriptions
      request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file with which the implementations are associated.
        </p>
      </field>
      <field name="classes">
        <list>
          <ref>ImplementedClass</ref>
        </list>
        <p>
          The classes defined in the file that are implemented or extended.
        </p>
      </field>
      <field name="members">
        <list>
          <ref>ImplementedMember</ref>
        </list>
        <p>
          The member defined in the file that are implemented or overridden.
        </p>
      </field>
    </params>
  </notification>
  <notification event="invalidate">
    <p>
      Reports that the navigation information associated with a region of a
      single file has become invalid and should be re-requested.
    </p>
    <p>
      This notification is not subscribed to by default. Clients can
      subscribe by including the value <tt>"INVALIDATE"</tt> in the list of
      services passed in an analysis.setSubscriptions request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file whose information has been invalidated.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the invalidated region.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the invalidated region.
        </p>
      </field>
      <field name="delta">
        <ref>int</ref>
        <p>
          The delta to be applied to the offsets in information that follows
          the invalidated region in order to update it so that it doesn't
          need to be re-requested.
        </p>
      </field>
    </params>
  </notification>
  <notification event="navigation">
    <p>
      Reports the navigation targets associated with a given file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"NAVIGATION"</tt>
      in the list of services passed in an
      analysis.setSubscriptions request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the navigation regions.
        </p>
      </field>
      <field name="regions">
        <list>
          <ref>NavigationRegion</ref>
        </list>
        <p>
          The navigation regions contained in the file.
          The regions are sorted by their offsets.
          Each navigation region represents a list of targets
          associated with some range. The lists will usually
          contain a single target, but can contain more in the
          case of a part that is included in multiple libraries
          or in Dart code that is compiled against multiple
          versions of a package. Note that the navigation
          regions that are returned do not overlap other
          navigation regions.
        </p>
      </field>
      <field name="targets">
        <list>
          <ref>NavigationTarget</ref>
        </list>
        <p>
          The navigation targets referenced in the file.
          They are referenced by <tt>NavigationRegion</tt>s by their
          index in this array.
        </p>
      </field>
      <field name="files">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The files containing navigation targets referenced in the file.
          They are referenced by <tt>NavigationTarget</tt>s by their
          index in this array.
        </p>
      </field>
    </params>
  </notification>
  <notification event="occurrences">
    <p>
      Reports the occurrences of references to elements within a
      single file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"OCCURRENCES"</tt>
      in the list of services passed in an
      analysis.setSubscriptions request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which the references occur.
        </p>
      </field>
      <field name="occurrences">
        <list>
          <ref>Occurrences</ref>
        </list>
        <p>
          The occurrences of references to elements within the
          file.
        </p>
      </field>
    </params>
  </notification>
  <notification event="outline">
    <p>
      Reports the outline associated with a single file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"OUTLINE"</tt> in
      the list of services passed in an analysis.setSubscriptions
      request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file with which the outline is associated.
        </p>
      </field>
      <field name="kind">
        <ref>FileKind</ref>
        <p>
          The kind of the file.
        </p>
      </field>
      <field name="libraryName" optional="true">
        <ref>String</ref>
        <p>
          The name of the library defined by the file using a "library"
          directive, or referenced by a "part of" directive. If both
          "library" and "part of" directives are present, then the
          "library" directive takes precedence.
          This field will be omitted if the file has neither "library"
          nor "part of" directives.
        </p>
      </field>
      <field name="outline">
        <ref>Outline</ref>
        <p>
          The outline associated with the file.
        </p>
      </field>
    </params>
  </notification>
  <notification event="overrides">
    <p>
      Reports the overriding members in a file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"OVERRIDES"</tt> in
      the list of services passed in an analysis.setSubscriptions
      request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file with which the overrides are associated.
        </p>
      </field>
      <field name="overrides">
        <list>
          <ref>Override</ref>
        </list>
        <p>
          The overrides associated with the file.
        </p>
      </field>
    </params>
  </notification>
</domain>
<domain name="completion">
  <p>
    The code completion domain contains commands related to
    getting code completion suggestions.
  </p>
  <request method="getSuggestions">
    <p>
      Request that completion suggestions for the given offset in
      the given file be returned.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the point at which suggestions are
          to be made.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset within the file at which suggestions are to
          be made.
        </p>
      </field>
    </params>
    <result>
      <field name="id">
        <ref>CompletionId</ref>
        <p>
          The identifier used to associate results with this
          completion request.
        </p>
      </field>
    </result>
  </request>
  <notification event="results">
    <p>
      Reports the completion suggestions that should be presented
      to the user. The set of suggestions included in the
      notification is always a complete list that supersedes any
      previously reported suggestions.
    </p>
    <params>
      <field name="id">
        <ref>CompletionId</ref>
        <p>
          The id associated with the completion.
        </p>
      </field>
      <field name="replacementOffset">
        <ref>int</ref>
        <p>
          The offset of the start of the text to be
          replaced. This will be different than the offset used
          to request the completion suggestions if there was a
          portion of an identifier before the original
          offset. In particular, the replacementOffset will be
          the offset of the beginning of said identifier.
        </p>
      </field>
      <field name="replacementLength">
        <ref>int</ref>
        <p>
          The length of the text to be replaced if the remainder
          of the identifier containing the cursor is to be
          replaced when the suggestion is applied (that is, the
          number of characters in the existing identifier).
        </p>
      </field>
      <field name="results">
        <list>
          <ref>CompletionSuggestion</ref>
        </list>
        <p>
          The completion suggestions being reported. The
          notification contains all possible completions at the
          requested cursor position, even those that do not match
          the characters the user has already typed. This allows
          the client to respond to further keystrokes from the
          user without having to make additional requests.
        </p>
      </field>
      <field name="isLast">
        <ref>bool</ref>
        <p>
          True if this is that last set of results that will be
          returned for the indicated completion.
        </p>
      </field>
    </params>
  </notification>
</domain>
<domain name="search">
  <p>
    The search domain contains commands related to searches that
    can be performed against the code base.
  </p>
  <request method="findElementReferences">
    <p>
      Perform a search for references to the element defined or
      referenced at the given offset in the given file.
    </p>
    <p>
      An identifier is returned immediately, and individual
      results will be returned via the search.results notification
      as they become available.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the declaration of or reference to
          the element used to define the search.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset within the file of the declaration of or
          reference to the element.
        </p>
      </field>
      <field name="includePotential">
        <ref>bool</ref>
        <p>
          True if potential matches are to be included in the
          results.
        </p>
      </field>
    </params>
    <result>
      <field name="id" optional="true">
        <ref>SearchId</ref>
        <p>
          The identifier used to associate results with this
          search request.
        </p>
        <p>
          If no element was found at the given location, this
          field will be absent, and no results will be reported
          via the search.results notification.
        </p>
      </field>
      <field name="element" optional="true">
        <ref>Element</ref>
        <p>
          The element referenced or defined at the given offset
          and whose references will be returned in the search
          results.
        </p>
        <p>
          If no element was found at the given location, this
          field will be absent.
        </p>
      </field>
    </result>
  </request>
  <request method="findMemberDeclarations">
    <p>
      Perform a search for declarations of members whose name is
      equal to the given name.
    </p>
    <p>
      An identifier is returned immediately, and individual
      results will be returned via the search.results notification
      as they become available.
    </p>
    <params>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the declarations to be found.
        </p>
      </field>
    </params>
    <result>
      <field name="id">
        <ref>SearchId</ref>
        <p>
          The identifier used to associate results with this
          search request.
        </p>
      </field>
    </result>
  </request>
  <request method="findMemberReferences">
    <p>
      Perform a search for references to members whose name is
      equal to the given name. This search does not check to see
      that there is a member defined with the given name, so it is
      able to find references to undefined members as well.
    </p>
    <p>
      An identifier is returned immediately, and individual
      results will be returned via the search.results notification
      as they become available.
    </p>
    <params>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the references to be found.
        </p>
      </field>
    </params>
    <result>
      <field name="id">
        <ref>SearchId</ref>
        <p>
          The identifier used to associate results with this
          search request.
        </p>
      </field>
    </result>
  </request>
  <request method="findTopLevelDeclarations">
    <p>
      Perform a search for declarations of top-level elements
      (classes, typedefs, getters, setters, functions and fields)
      whose name matches the given pattern.
    </p>
    <p>
      An identifier is returned immediately, and individual
      results will be returned via the search.results notification
      as they become available.
    </p>
    <params>
      <field name="pattern">
        <ref>String</ref>
        <p>
          The regular expression used to match the names of the
          declarations to be found.
        </p>
      </field>
    </params>
    <result>
      <field name="id">
        <ref>SearchId</ref>
        <p>
          The identifier used to associate results with this
          search request.
        </p>
      </field>
    </result>
  </request>
  <request method="getElementDeclarations" experimental="true">
    <p>
      Return top-level and class member declarations.
    </p>
    <params>
      <field name="file" optional="true">
        <ref>FilePath</ref>
        <p>
          If this field is provided, return only declarations in this file.
          If this field is missing, return declarations in all files.
        </p>
      </field>
      <field name="pattern" optional="true">
        <ref>String</ref>
        <p>
          The regular expression used to match the names of declarations.
          If this field is missing, return all declarations.
        </p>
      </field>
      <field name="maxResults" optional="true">
        <ref>int</ref>
        <p>
          The maximum number of declarations to return.
          If this field is missing, return all matching declarations.
        </p>
      </field>
    </params>
    <result>
      <field name="declarations">
        <list>
          <ref>ElementDeclaration</ref>
        </list>
        <p>
          The list of declarations.
        </p>
      </field>
      <field name="files">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The list of the paths of files with declarations.
        </p>
      </field>
    </result>
  </request>
  <request method="getTypeHierarchy">
    <p>
      Return the type hierarchy of the class declared or
      referenced at the given location.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the declaration or reference to the
          type for which a hierarchy is being requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the name of the type within the file.
        </p>
      </field>
      <field name="superOnly" optional="true">
        <ref>bool</ref>
        <p>
          True if the client is only requesting superclasses and
          interfaces hierarchy.
        </p>
      </field>
    </params>
    <result>
      <field name="hierarchyItems" optional="true">
        <list>
          <ref>TypeHierarchyItem</ref>
        </list>
        <p>
          A list of the types in the requested hierarchy. The
          first element of the list is the item representing the
          type for which the hierarchy was requested. The index of
          other elements of the list is unspecified, but
          correspond to the integers used to reference supertype
          and subtype items within the items.
        </p>
        <p>
          This field will be absent if the code at the given file
          and offset does not represent a type, or if the file has
          not been sufficiently analyzed to allow a type hierarchy
          to be produced.
        </p>
      </field>
    </result>
  </request>
  <notification event="results">
    <p>
      Reports some or all of the results of performing a requested
      search. Unlike other notifications, this notification
      contains search results that should be added to any
      previously received search results associated with the same
      search id.
    </p>
    <params>
      <field name="id">
        <ref>SearchId</ref>
        <p>
          The id associated with the search.
        </p>
      </field>
      <field name="results">
        <list>
          <ref>SearchResult</ref>
        </list>
        <p>
          The search results being reported.
        </p>
      </field>
      <field name="isLast">
        <ref>bool</ref>
        <p>
          True if this is that last set of results that will be
          returned for the indicated search.
        </p>
      </field>
    </params>
  </notification>
</domain>
<domain name="edit">
  <p>
    The edit domain contains commands related to edits that can be
    applied to the code.
  </p>
  <request method="format">
    <p>
      Format the contents of a single file. The currently selected region of
      text is passed in so that the selection can be preserved across the
      formatting operation. The updated selection will be as close to
      matching the original as possible, but whitespace at the beginning or
      end of the selected region will be ignored. If preserving selection
      information is not required, zero (0) can be specified for both the
      selection offset and selection length.
    </p>
    <p>
      If a request is made for a file which does not exist, or which is not
      currently subject to analysis (e.g. because it is not associated with
      any analysis root specified to analysis.setAnalysisRoots), an error of
      type <tt>FORMAT_INVALID_FILE</tt> will be generated. If the source
      contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
      will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the code to be formatted.
        </p>
      </field>
      <field name="selectionOffset">
        <ref>int</ref>
        <p>
          The offset of the current selection in the file.
        </p>
      </field>
      <field name="selectionLength">
        <ref>int</ref>
        <p>
          The length of the current selection in the file.
        </p>
      </field>
      <!--
          <field name="selectionOnly" optional="true">
            <ref>bool</ref>
            <p>
              True if the code to be formatted should be limited to the selected
              text (or the smallest portion of text that encloses the selected
              text that can be formatted).
            </p>
          </field>
          -->
      <field name="lineLength" optional="true">
        <ref>int</ref>
        <p>
          The line length to be used by the formatter.
        </p>
      </field>
    </params>
    <result>
      <field name="edits">
        <list>
          <ref>SourceEdit</ref>
        </list>
        <p>
          The edit(s) to be applied in order to format the code. The list
          will be empty if the code was already formatted (there are no
          changes).
        </p>
      </field>
      <field name="selectionOffset">
        <ref>int</ref>
        <p>
          The offset of the selection after formatting the code.
        </p>
      </field>
      <field name="selectionLength">
        <ref>int</ref>
        <p>
          The length of the selection after formatting the code.
        </p>
      </field>
    </result>
  </request>
  <request method="getAssists">
    <p>
      Return the set of assists that are available at the given
      location. An assist is distinguished from a refactoring
      primarily by the fact that it affects a single file and does
      not require user input in order to be performed.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the code for which assists are being
          requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the code for which assists are being
          requested.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the code for which assists are being
          requested.
        </p>
      </field>
    </params>
    <result>
      <field name="assists">
        <list>
          <ref>SourceChange</ref>
        </list>
        <p>
          The assists that are available at the given location.
        </p>
      </field>
    </result>
  </request>
  <request method="getAvailableRefactorings">
    <p>
      Get a list of the kinds of refactorings that are valid for
      the given selection in the given file.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the code on which the refactoring
          would be based.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the code on which the refactoring would be
          based.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the code on which the refactoring would be
          based.
        </p>
      </field>
    </params>
    <result>
      <field name="kinds">
        <list>
          <ref>RefactoringKind</ref>
        </list>
        <p>
          The kinds of refactorings that are valid for the given
          selection.
        </p>
      </field>
    </result>
  </request>
  <request method="getFixes">
    <p>
      Return the set of fixes that are available for the errors at
      a given offset in a given file.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the errors for which fixes are being
          requested.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset used to select the errors for which fixes
          will be returned.
        </p>
      </field>
    </params>
    <result>
      <field name="fixes">
        <list>
          <ref>AnalysisErrorFixes</ref>
        </list>
        <p>
          The fixes that are available for the errors at the given offset.
        </p>
      </field>
    </result>
  </request>
  <request method="getPostfixCompletion" experimental="true">
    <p>
      Get the changes required to convert the postfix template at the given
      location into the template's expanded form.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the postfix template to be expanded.
        </p>
      </field>
      <field name="key">
        <ref>String</ref>
        <p>
          The unique name that identifies the template in use.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset used to identify the code to which the template will be
          applied.
        </p>
      </field>
    </params>
    <result>
      <field name="change">
        <ref>SourceChange</ref>
        <p>
          The change to be applied in order to complete the statement.
        </p>
      </field>
    </result>
  </request>
  <request method="getRefactoring">
    <p>
      Get the changes required to perform a refactoring.
    </p>
    <p>
      If another refactoring request is received during the processing
      of this one, an error of type <tt>REFACTORING_REQUEST_CANCELLED</tt>
      will be generated.
    </p>
    <params>
      <field name="kind">
        <ref>RefactoringKind</ref>
        <p>
          The kind of refactoring to be performed.
        </p>
      </field>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the code involved in the
          refactoring.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the region involved in the refactoring.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the region involved in the refactoring.
        </p>
      </field>
      <field name="validateOnly">
        <ref>bool</ref>
        <p>
          True if the client is only requesting that the values of
          the options be validated and no change be generated.
        </p>
      </field>
      <field name="options" optional="true">
        <ref>RefactoringOptions</ref>
        <p>
          Data used to provide values provided by the user. The
          structure of the data is dependent on the kind of
          refactoring being performed. The data that is expected is
          documented in the section titled <a
            href="#refactorings">Refactorings</a>, labeled as
          "Options". This field can be omitted if the refactoring
          does not require any options or if the values of those
          options are not known.
        </p>
      </field>
    </params>
    <result>
      <field name="initialProblems">
        <list>
          <ref>RefactoringProblem</ref>
        </list>
        <p>
          The initial status of the refactoring, i.e. problems related to
          the context in which the refactoring is requested.
          The array will be empty if there are no known problems.
        </p>
      </field>
      <field name="optionsProblems">
        <list>
          <ref>RefactoringProblem</ref>
        </list>
        <p>
          The options validation status, i.e. problems in the given options,
          such as light-weight validation of a new name, flags
          compatibility, etc.
          The array will be empty if there are no known problems.
        </p>
      </field>
      <field name="finalProblems">
        <list>
          <ref>RefactoringProblem</ref>
        </list>
        <p>
          The final status of the refactoring, i.e. problems identified in
          the result of a full, potentially expensive validation and / or
          change creation.
          The array will be empty if there are no known problems.
        </p>
      </field>
      <field name="feedback" optional="true">
        <ref>RefactoringFeedback</ref>
        <p>
          Data used to provide feedback to the user. The structure
          of the data is dependent on the kind of refactoring
          being created. The data that is returned is documented
          in the section titled <a
            href="#refactorings">Refactorings</a>, labeled as
          "Feedback".
        </p>
      </field>
      <field name="change" optional="true">
        <ref>SourceChange</ref>
        <p>
          The changes that are to be applied to affect the
          refactoring. This field will be omitted if there are
          problems that prevent a set of changes from being
          computed, such as having no options specified for a
          refactoring that requires them, or if only validation
          was requested.
        </p>
      </field>
      <field name="potentialEdits" optional="true">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The ids of source edits that are not known to be valid. An edit is
          not known to be valid if there was insufficient type information
          for the server to be able to determine whether or not the code
          needs to be modified, such as when a member is being renamed and
          there is a reference to a member from an unknown type. This field
          will be omitted if the change field is omitted or if there are no
          potential edits for the refactoring.
        </p>
      </field>
    </result>
  </request>
  <request method="getStatementCompletion" experimental="true">
    <p>
      Get the changes required to convert the partial statement at the given
      location into a syntactically valid statement. If the current statement
      is already valid the change will insert a newline plus appropriate
      indentation at the end of the line containing the offset.
      If a change that makes the statement valid cannot be determined (perhaps
      because it has not yet been implemented) the statement will be considered
      already valid and the appropriate change returned.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the statement to be completed.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset used to identify the statement to be completed.
        </p>
      </field>
    </params>
    <result>
      <field name="change">
        <ref>SourceChange</ref>
        <p>
          The change to be applied in order to complete the statement.
        </p>
      </field>
      <field name="whitespaceOnly">
        <ref>bool</ref>
        <p>
          Will be true if the change contains nothing but whitespace
          characters, or is empty.
        </p>
      </field>
    </result>
  </request>
  <request method="isPostfixCompletionApplicable" experimental="true">
    <p>
      Determine if the request postfix completion template is applicable at
      the given location in the given file.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the postfix template to be expanded.
        </p>
      </field>
      <field name="key">
        <ref>String</ref>
        <p>
          The unique name that identifies the template in use.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset used to identify the code to which the template will be
          applied.
        </p>
      </field>
    </params>
    <result>
      <field name="value">
        <ref>bool</ref>
        <p>
          True if the template can be expanded at the given location.
        </p>
      </field>
    </result>
  </request>
  <request method="listPostfixCompletionTemplates" experimental="true">
    <p>
      Return a list of all postfix templates currently available.
    </p>
    <result>
      <field name="templates">
        <list>
          <ref>PostfixTemplateDescriptor</ref>
        </list>
        <p>
          The list of available templates.
        </p>
      </field>
    </result>
  </request>
  <request method="importElements" experimental="true">
    <p>
      Return a list of edits that would need to be applied in order to ensure
      that all of the elements in the specified list of imported elements are
      accessible within the library.
    </p>
    <p>
      If a request is made for a file that does not exist, or that is not
      currently subject to analysis (e.g. because it is not associated with any
      analysis root specified via analysis.setAnalysisRoots), an error of type
      <tt>IMPORT_ELEMENTS_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file in which the specified elements are to be made accessible.
        </p>
      </field>
      <field name="elements">
        <list>
          <ref>ImportedElements</ref>
        </list>
        <p>
          The elements to be made accessible in the specified file.
        </p>
      </field>
    </params>
    <result>
      <field name="edit">
        <ref>SourceFileEdit</ref>
        <p>
          The edits to be applied in order to make the specified elements
          accessible. The file to be edited will be the defining compilation
          unit of the library containing the file specified in the request,
          which can be different than the file specified in the request if the
          specified file is a part file.
        </p>
      </field>
    </result>
  </request>
  <request method="sortMembers">
    <p>
      Sort all of the directives, unit and class members
      of the given Dart file.
    </p>
    <p>
      If a request is made for a file that does not exist, does not belong
      to an analysis root or is not a Dart file,
      <tt>SORT_MEMBERS_INVALID_FILE</tt> will be generated.
    </p>
    <p>
      If the Dart file has scan or parse errors,
      <tt>SORT_MEMBERS_PARSE_ERRORS</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The Dart file to sort.
        </p>
      </field>
    </params>
    <result>
      <field name="edit">
        <ref>SourceFileEdit</ref>
        <p>
          The file edit that is to be applied to the given file to effect
          the sorting.
        </p>
      </field>
    </result>
  </request>
  <request method="organizeDirectives">
    <p>
      Organizes all of the directives - removes unused imports and sorts
      directives of the given Dart file according to the
      <a href="https://www.dartlang.org/articles/style-guide/">Dart Style
        Guide</a>.
    </p>
    <p>
      If a request is made for a file that does not exist, does not belong
      to an analysis root or is not a Dart file,
      <tt>FILE_NOT_ANALYZED</tt> will be generated.
    </p>
    <p>
      If directives of the Dart file cannot be organized, for example
      because it has scan or parse errors, or by other reasons,
      <tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
      will provide details about the reason.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The Dart file to organize directives in.
        </p>
      </field>
    </params>
    <result>
      <field name="edit">
        <ref>SourceFileEdit</ref>
        <p>
          The file edit that is to be applied to the given file to effect
          the organizing.
        </p>
      </field>
    </result>
  </request>
</domain>
<domain name="execution">
  <p>
    The execution domain contains commands related to providing an execution
    or debugging experience.
  </p>
  <request method="createContext">
    <p>
      Create an execution context for the executable file with the given
      path. The context that is created will persist until
      execution.deleteContext is used to delete it. Clients, therefore, are
      responsible for managing the lifetime of execution contexts.
    </p>
    <params>
      <field name="contextRoot">
        <ref>FilePath</ref>
        <p>
          The path of the Dart or HTML file that will be launched, or the
          path of the directory containing the file.
        </p>
      </field>
    </params>
    <result>
      <field name="id">
        <ref>ExecutionContextId</ref>
        <p>
          The identifier used to refer to the execution context that was
          created.
        </p>
      </field>
    </result>
  </request>
  <request method="deleteContext">
    <p>
      Delete the execution context with the given identifier. The context id
      is no longer valid after this command. The server is allowed to re-use
      ids when they are no longer valid.
    </p>
    <params>
      <field name="id">
        <ref>ExecutionContextId</ref>
        <p>
          The identifier of the execution context that is to be deleted.
        </p>
      </field>
    </params>
  </request>
  <request method="getSuggestions">
    <p>
      Request completion suggestions for the given runtime context.
    </p>
    <p>
      It might take one or two requests of this type to get completion
      suggestions. The first request should have only "code", "offset",
      and "variables", but not "expressions". If there are sub-expressions that
      can have different runtime types, and are considered to be safe to
      evaluate at runtime (e.g. getters), so using their actual runtime types
      can improve completion results, the server will not include the
      "suggestions" field in the response, and instead will return the
      "expressions" field. The client will use debug API to get current runtime
      types for these sub-expressions and send another request, this time with
      "expressions". If there are no interesting sub-expressions to get
      runtime types for, or when the "expressions" field is provided by the
      client, the server will return "suggestions" in the response.
    </p>
    <params>
      <field name="code">
        <ref>String</ref>
        <p>
          The code to get suggestions in.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset within the code to get suggestions at.
        </p>
      </field>
      <field name="contextFile">
        <ref>FilePath</ref>
        <p>
          The path of the context file, e.g. the file of the current debugger
          frame. The combination of the context file and context offset can
          be used to ensure that all variables of the context are available
          for completion (with their static types).
        </p>
      </field>
      <field name="contextOffset">
        <ref>int</ref>
        <p>
          The offset in the context file, e.g. the line offset in the current
          debugger frame.
        </p>
      </field>
      <field name="variables">
        <list>
          <ref>RuntimeCompletionVariable</ref>
        </list>
        <p>
          The runtime context variables that are potentially referenced in the
          code.
        </p>
      </field>
      <field name="expressions" optional="true">
        <list>
          <ref>RuntimeCompletionExpression</ref>
        </list>
        <p>
          The list of sub-expressions in the code for which the client wants
          to provide runtime types. It does not have to be the full list of
          expressions requested by the server, for missing expressions their
          static types will be used.
        </p>
        <p>
          When this field is omitted, the server will return completion
          suggestions only when there are no interesting sub-expressions in the
          given code. The client may provide an empty list, in this case the
          server will return completion suggestions.
        </p>
      </field>
    </params>
    <result>
      <field name="suggestions" optional="true">
        <list>
          <ref>CompletionSuggestion</ref>
        </list>
        <p>
          The completion suggestions. In contrast to usual completion request,
          suggestions for private elements also will be provided.
        </p>
        <p>
          If there are sub-expressions that can have different runtime types,
          and are considered to be safe to evaluate at runtime (e.g. getters),
          so using their actual runtime types can improve completion results,
          the server omits this field in the response, and instead will return
          the "expressions" field.
        </p>
      </field>
      <field name="expressions" optional="true">
        <list>
          <ref>RuntimeCompletionExpression</ref>
        </list>
        <p>
          The list of sub-expressions in the code for which the server would
          like to know runtime types to provide better completion suggestions.
        </p>
        <p>
          This field is omitted the field "suggestions" is returned.
        </p>
      </field>
    </result>
  </request>
  <request method="mapUri">
    <p>
      Map a URI from the execution context to the file that it corresponds
      to, or map a file to the URI that it corresponds to in the execution
      context.
    </p>
    <p>
      Exactly one of the file and uri fields must be provided. If both
      fields are provided, then an error of type <tt>INVALID_PARAMETER</tt>
      will be generated. Similarly, if neither field is provided, then an
      error of type <tt>INVALID_PARAMETER</tt> will be generated.
    </p>
    <p>
      If the file field is provided and the value is not the path of a file
      (either the file does not exist or the path references something other
      than a file), then an error of type <tt>INVALID_PARAMETER</tt> will
      be generated.
    </p>
    <p>
      If the uri field is provided and the value is not a valid URI or if
      the URI references something that is not a file (either a file that
      does not exist or something other than a file), then an error of type
      <tt>INVALID_PARAMETER</tt> will be generated.
    </p>
    <p>
      If the contextRoot used to create the execution context does not
      exist, then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt> will
      be generated.
    </p>
    <params>
      <field name="id">
        <ref>ExecutionContextId</ref>
        <p>
          The identifier of the execution context in which the URI is to be
          mapped.
        </p>
      </field>
      <field name="file" optional="true">
        <ref>FilePath</ref>
        <p>
          The path of the file to be mapped into a URI.
        </p>
      </field>
      <field name="uri" optional="true">
        <ref>String</ref>
        <p>
          The URI to be mapped into a file path.
        </p>
      </field>
    </params>
    <result>
      <field name="file" optional="true">
        <ref>FilePath</ref>
        <p>
          The file to which the URI was mapped. This field is omitted if the
          uri field was not given in the request.
        </p>
      </field>
      <field name="uri" optional="true">
        <ref>String</ref>
        <p>
          The URI to which the file path was mapped. This field is omitted
          if the file field was not given in the request.
        </p>
      </field>
    </result>
  </request>
  <request method="setSubscriptions" deprecated="true">
    <p>
      <b>Deprecated:</b> the analysis server no longer fires
      <tt>LAUNCH_DATA</tt> events.
    </p>
    <p>
      Subscribe for services. All previous subscriptions are replaced by the
      given set of services.
    </p>
    <p>
      It is an error if any of the elements in the list are not valid
      services. If there is an error, then the current subscriptions will
      remain unchanged.
    </p>
    <params>
      <field name="subscriptions">
        <list>
          <ref>ExecutionService</ref>
        </list>
        <p>
          A list of the services being subscribed to.
        </p>
      </field>
    </params>
  </request>
  <notification event="launchData">
    <p>
      Reports information needed to allow a single file to be launched.
    </p>
    <p>
      This notification is not subscribed to by default. Clients can
      subscribe by including the value "LAUNCH_DATA" in the list of services
      passed in an <tt>execution.setSubscriptions</tt> request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file for which launch data is being provided. This will either
          be a Dart library or an HTML file.
        </p>
      </field>
      <field name="kind" optional="true">
        <ref>ExecutableKind</ref>
        <p>
          The kind of the executable file. This field is omitted if the file
          is not a Dart file.
        </p>
      </field>
      <field name="referencedFiles" optional="true">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          A list of the Dart files that are referenced by the file. This
          field is omitted if the file is not an HTML file.
        </p>
      </field>
    </params>
  </notification>
</domain>
<domain name="diagnostic">
  <p>
    The diagnostic domain contains server diagnostics APIs.
  </p>
  <request method="getDiagnostics">
    <p>Return server diagnostics.</p>
    <result>
      <field name="contexts">
        <list>
          <ref>ContextData</ref>
        </list>
        <p>The list of analysis contexts.</p>
      </field>
    </result>
  </request>
  <request method="getServerPort">
    <p>
      Return the port of the diagnostic web server. If the server is not running
      this call will start the server. If unable to start the diagnostic web
      server,
      this call will return an error of <tt>DEBUG_PORT_COULD_NOT_BE_OPENED</tt>.
    </p>
    <result>
      <field name="port">
        <ref>int</ref>
        <p>The diagnostic server port.</p>
      </field>
    </result>
  </request>
</domain>
<domain name="analytics" experimental="true">
  <p>
    The analytics domain contains APIs related to reporting analytics.
  </p>
  <p>
    This API allows clients to expose a UI option to enable and disable the
    analysis server's reporting of analytics. This value is shared with other
    tools and can change outside of this API; because of this, clients should
    use the analysis server's flag as the system of record. Clients can choose
    to send in additional analytics (see <tt>sendEvent</tt> and
    <tt>sendTiming</tt>) if they so choose. Dart command-line tools provide a
    disclaimer similar to:
    <tt>
      Dart SDK tools anonymously report feature usage statistics and basic crash
      reports to help improve Dart tools over time. See Google's privacy policy:
      https://www.google.com/intl/en/policies/privacy/.
    </tt>
  </p>
  <p>
    The analysis server will send it's own analytics data (for example,
    operations performed, operating system type, SDK version). No data (from the
    analysis server or from clients) will be sent if analytics is disabled.
  </p>
  <request method="isEnabled">
    <p>Query whether analytics is enabled.</p>
    <p>
      This flag controls whether the analysis server sends any analytics data to
      the cloud. If disabled, the analysis server does not send any analytics
      data, and any data sent to it by clients (from <tt>sendEvent</tt> and
      <tt>sendTiming</tt>) will be ignored.
    </p>
    <p>
      The value of this flag can be changed by other tools outside of the
      analysis server's process. When you query the flag, you get the value of
      the flag at a given moment. Clients should not use the value returned to
      decide whether or not to send the <tt>sendEvent</tt> and
      <tt>sendTiming</tt> requests. Those requests should be used
      unconditionally and server will determine whether or not it is appropriate
      to forward the information to the cloud at the time each request is
      received.
    </p>
    <result>
      <field name="enabled">
        <ref>bool</ref>
        <p>Whether sending analytics is enabled or not.</p>
      </field>
    </result>
  </request>
  <request method="enable">
    <p>
      Enable or disable the sending of analytics data. Note that there are other
      ways for users to change this setting, so clients cannot assume that they
      have complete control over this setting. In particular, there is no
      guarantee that the result returned by the <tt>isEnabled</tt> request will
      match the last value set via this request.
    </p>
    <params>
      <field name="value">
        <ref>bool</ref>
        <p>Enable or disable analytics.</p>
      </field>
    </params>
  </request>
  <request method="sendEvent">
    <p>Send information about client events.</p>
    <p>
      Ask the analysis server to include the fact that an action was performed
      in the client as part of the analytics data being sent. The data will only
      be included if the sending of analytics data is enabled at the time the
      request is processed. The action that was performed is indicated by the
      value of the <tt>action</tt> field.
    </p>
    <p>
      The value of the action field should not include the identity of the
      client. The analytics data sent by server will include the client id
      passed in using the <tt>--client-id</tt> command-line argument. The
      request will be ignored if the client id was not provided when server was
      started.
    </p>
    <params>
      <field name="action">
        <ref>String</ref>
        <p>The value used to indicate which action was performed.</p>
      </field>
    </params>
  </request>
  <request method="sendTiming">
    <p>Send timing information for client events (e.g. code completions).</p>
    <p>
      Ask the analysis server to include the fact that a timed event occurred as
      part of the analytics data being sent. The data will only be included if
      the sending of analytics data is enabled at the time the request is
      processed.
    </p>
    <p>
      The value of the event field should not include the identity of the
      client. The analytics data sent by server will include the client id
      passed in using the <tt>--client-id</tt> command-line argument. The
      request will be ignored if the client id was not provided when server was
      started.
    </p>
    <params>
      <field name="event">
        <ref>String</ref>
        <p>The name of the event.</p>
      </field>
      <field name="millis">
        <ref>int</ref>
        <p>The duration of the event in milliseconds.</p>
      </field>
    </params>
  </request>
</domain>
<domain name="kythe" experimental="true">
  <p>
    The kythe domain contains APIs related to generating Dart content in the
    <a href="http://kythe.io/">Kythe</a> format.
  </p>
  <request method="getKytheEntries">
    <p>
      Return the list of <tt>KytheEntry</tt> objects for some file, given the
      current state of the file system populated by "analysis.updateContent".
    </p>
    <p>
      If a request is made for a file that does not exist, or that is not
      currently subject to analysis (e.g. because it is not associated with any
      analysis root specified to analysis.setAnalysisRoots), an error of type
      <tt>GET_KYTHE_ENTRIES_INVALID_FILE</tt> will be generated.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the code for which the Kythe Entry objects are
          being requested.
        </p>
      </field>
    </params>
    <result>
      <field name="entries">
        <list>
          <ref>KytheEntry</ref>
        </list>
        <p>
          The list of <tt>KytheEntry</tt> objects for the queried file.
        </p>
      </field>
      <field name="files">
        <list>
          <ref>FilePath</ref>
        </list>
        <p>
          The set of files paths that were required, but not in the file system,
          to give a complete and accurate Kythe graph for the file. This could
          be due to a referenced file that does not exist or generated files not
          being generated or passed before the call to "getKytheEntries".
        </p>
      </field>
    </result>
  </request>
</domain>
<domain name="flutter" experimental="true">
  <p>
    The analysis domain contains API’s related to Flutter support.
  </p>
  <request method="getChangeAddForDesignTimeConstructor">
    <p>
      Return the change that adds the forDesignTime() constructor for the
      widget class at the given offset.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file containing the code of the class.
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the class in the code.
        </p>
      </field>
    </params>
    <result>
      <field name="change">
        <ref>SourceChange</ref>
        <p>
          The change that adds the forDesignTime() constructor.
          If the change cannot be produced, an error is returned.
        </p>
      </field>
    </result>
  </request>
  <request method="setSubscriptions">
    <p>
      Subscribe for services that are specific to individual files.
      All previous subscriptions are replaced by the current set of
      subscriptions. If a given service is not included as a key in the map
      then no files will be subscribed to the service, exactly as if the
      service had been included in the map with an explicit empty list of
      files.
    </p>
    <p>
      Note that this request determines the set of requested
      subscriptions. The actual set of subscriptions at any given
      time is the intersection of this set with the set of files
      currently subject to analysis. The files currently subject
      to analysis are the set of files contained within an actual
      analysis root but not excluded, plus all of the files
      transitively reachable from those files via import, export
      and part directives. (See analysis.setAnalysisRoots for an
      explanation of how the actual analysis roots are
      determined.) When the actual analysis roots change, the
      actual set of subscriptions is automatically updated, but
      the set of requested subscriptions is unchanged.
    </p>
    <p>
      If a requested subscription is a directory it is ignored,
      but remains in the set of requested subscriptions so that if
      it later becomes a file it can be included in the set of
      actual subscriptions.
    </p>
    <p>
      It is an error if any of the keys in the map are not valid
      services. If there is an error, then the existing
      subscriptions will remain unchanged.
    </p>
    <params>
      <field name="subscriptions">
        <map>
          <key>
            <ref>FlutterService</ref>
          </key>
          <value>
            <list>
              <ref>FilePath</ref>
            </list>
          </value>
        </map>
        <p>
          A table mapping services to a list of the files being
          subscribed to the service.
        </p>
      </field>
    </params>
  </request>
  <notification event="outline" experimental="true">
    <p>
      Reports the Flutter outline associated with a single file.
    </p>
    <p>
      This notification is not subscribed to by default. Clients
      can subscribe by including the value <tt>"OUTLINE"</tt> in
      the list of services passed in an flutter.setSubscriptions
      request.
    </p>
    <params>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The file with which the outline is associated.
        </p>
      </field>
      <field name="outline">
        <ref>FlutterOutline</ref>
        <p>
          The outline associated with the file.
        </p>
      </field>
      <field name="instrumentedCode" optional="true">
        <ref>String</ref>
        <p>
          If the file has Flutter widgets that can be rendered, this field
          has the instrumented content of the file, that allows associating
          widgets with corresponding outline nodes. If there are no widgets
          to render, this field is absent.
        </p>
      </field>
    </params>
  </notification>
</domain>
<types>
  <h2 class="domain"><a name="types">Types</a></h2>
  <p>
    This section contains descriptions of the data types referenced
    in the API’s of the various domains.
  </p>
  <include path="../../../analyzer_plugin/tool/spec/common_types_spec.html"
           import="package:analyzer_plugin/protocol/protocol_common.dart"></include>
  <type name="AnalysisErrorFixes">
    <p>
      A list of fixes associated with a specific error.
    </p>
    <object>
      <field name="error">
        <ref>AnalysisError</ref>
        <p>
          The error with which the fixes are associated.
        </p>
      </field>
      <field name="fixes">
        <list>
          <ref>SourceChange</ref>
        </list>
        <p>
          The fixes associated with the error.
        </p>
      </field>
    </object>
  </type>
  <type name="AnalysisOptions" deprecated="true">
    <p><b>Deprecated:</b> the only reference to this type has been
      deprecated.</p>
    <p>
      A set of options controlling what kind of analysis is to be
      performed. If the value of a field is omitted the value of the
      option will not be changed.
    </p>
    <object>
      <field name="enableAsync" optional="true" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed async feature.
        </p>
      </field>
      <field name="enableDeferredLoading" optional="true" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed deferred loading feature.
        </p>
      </field>
      <field name="enableEnums" optional="true" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed enum feature.
        </p>
      </field>
      <field name="enableNullAwareOperators" optional="true" deprecated="true">
        <ref>bool</ref>
        <p><b>Deprecated:</b> this feature is always enabled.</p>
        <p>
          True if the client wants to enable support for the
          proposed "null aware operators" feature.
        </p>
      </field>
      <field name="enableSuperMixins" optional="true">
        <ref>bool</ref>
        <p>
          True if the client wants to enable support for the
          proposed "less restricted mixins" proposal (DEP 34).
        </p>
      </field>
      <field name="generateDart2jsHints" optional="true">
        <ref>bool</ref>
        <p>
          True if hints that are specific to dart2js should be
          generated. This option is ignored if generateHints is false.
        </p>
      </field>
      <field name="generateHints" optional="true">
        <ref>bool</ref>
        <p>
          True if hints should be generated as part of generating
          errors and warnings.
        </p>
      </field>
      <field name="generateLints" optional="true">
        <ref>bool</ref>
        <p>
          True if lints should be generated as part of generating
          errors and warnings.
        </p>
      </field>
    </object>
  </type>
  <type name="AnalysisService">
    <p>
      An enumeration of the services provided by the analysis domain that
      are related to a specific list of files.
    </p>
    <enum>
      <value><code>CLOSING_LABELS</code></value>
      <value><code>FOLDING</code></value>
      <value><code>HIGHLIGHTS</code></value>
      <value><code>IMPLEMENTED</code></value>
      <value>
        <code>INVALIDATE</code>
        <p>
          This service is not currently implemented and will become a
          GeneralAnalysisService in a future release.
        </p>
      </value>
      <value><code>NAVIGATION</code></value>
      <value><code>OCCURRENCES</code></value>
      <value><code>OUTLINE</code></value>
      <value><code>OVERRIDES</code></value>
    </enum>
  </type>
  <type name="AnalysisStatus">
    <p>
      An indication of the current state of analysis.
    </p>
    <object>
      <field name="isAnalyzing">
        <ref>bool</ref>
        <p>True if analysis is currently being performed.</p>
      </field>
      <field name="analysisTarget" optional="true">
        <ref>String</ref>
        <p>
          The name of the current target of analysis. This field is
          omitted if analyzing is false.
        </p>
      </field>
    </object>
  </type>
  <type name="ClosingLabel">
    <p>
      A label that is associated with a range of code that may be useful to
      render at the end of the range to aid code readability. For example, a
      constructor call that spans multiple lines may result in a closing label
      to allow the constructor type/name to be rendered alongside the closing
      parenthesis.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the construct being labelled.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the whole construct to be labelled.
        </p>
      </field>
      <field name="label">
        <ref>String</ref>
        <p>
          The label associated with this range that should be displayed to the
          user.
        </p>
      </field>
    </object>
  </type>
  <type name="CompletionId">
    <ref>String</ref>
    <p>
      An identifier used to associate completion results with a
      completion request.
    </p>
  </type>
  <type name="ContextData">
    <p>
      Information about an analysis context.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the context.
        </p>
      </field>
      <field name="explicitFileCount">
        <ref>int</ref>
        <p>
          Explicitly analyzed files.
        </p>
      </field>
      <field name="implicitFileCount">
        <ref>int</ref>
        <p>
          Implicitly analyzed files.
        </p>
      </field>
      <field name="workItemQueueLength">
        <ref>int</ref>
        <p>
          The number of work items in the queue.
        </p>
      </field>
      <field name="cacheEntryExceptions">
        <list>
          <ref>String</ref>
        </list>
        <p>
          Exceptions associated with cache entries.
        </p>
      </field>
    </object>
  </type>
  <type name="ElementDeclaration">
    <p>
      A declaration - top-level (class, field, etc) or a class member (method,
      field, etc).
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the declaration.
        </p>
      </field>
      <field name="kind">
        <ref>ElementKind</ref>
        <p>
          The kind of the element that corresponds to the declaration.
        </p>
      </field>
      <field name="fileIndex">
        <ref>int</ref>
        <p>
          The index of the file (in the enclosing response).
        </p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the declaration name in the file.
        </p>
      </field>
      <field name="line">
        <ref>int</ref>
        <p>
          The one-based index of the line containing the declaration name.
        </p>
      </field>
      <field name="column">
        <ref>int</ref>
        <p>
          The one-based index of the column containing the declaration name.
        </p>
      </field>
      <field name="codeOffset">
        <ref>int</ref>
        <p>
          The offset of the first character of the declaration code in the file.
        </p>
      </field>
      <field name="codeLength">
        <ref>int</ref>
        <p>
          The length of the declaration code in the file.
        </p>
      </field>
      <field name="className" optional="true">
        <ref>String</ref>
        <p>
          The name of the class enclosing this declaration. If the declaration
          is not a class member, this field will be absent.
        </p>
      </field>
      <field name="parameters" optional="true">
        <ref>String</ref>
        <p>
          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 "()".

          The value should not be treated as exact presentation of parameters,
          it is just approximation of parameters to give the user general idea.
        </p>
      </field>
    </object>
  </type>
  <type name="ExecutableFile">
    <p>
      A description of an executable file.
    </p>
    <object>
      <field name="file">
        <ref>FilePath</ref>
        <p>
          The path of the executable file.
        </p>
      </field>
      <field name="kind">
        <ref>ExecutableKind</ref>
        <p>
          The kind of the executable file.
        </p>
      </field>
    </object>
  </type>
  <type name="ExecutableKind">
    <p>
      An enumeration of the kinds of executable files.
    </p>
    <enum>
      <value><code>CLIENT</code></value>
      <value><code>EITHER</code></value>
      <value><code>NOT_EXECUTABLE</code></value>
      <value><code>SERVER</code></value>
    </enum>
  </type>
  <type name="ExecutionContextId">
    <ref>String</ref>
    <p>
      The identifier for a execution context.
    </p>
  </type>
  <type name="RuntimeCompletionExpression">
    <p>
      An expression for which we want to know its runtime type.
      In expressions like `a.b.c.where((e) => e.^)` we want to know the
      runtime type of `a.b.c` to enforce it statically at the time when we
      compute completion suggestions, and get better type for `e`.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the expression in the code for completion.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the expression in the code for completion.
        </p>
      </field>
      <field name="type" optional="true">
        <ref>RuntimeCompletionExpressionType</ref>
        <p>
          When the expression is sent from the server to the client, the
          type is omitted. The client should fill the type when it sends the
          request to the server again.
        </p>
      </field>
    </object>
  </type>
  <type name="RuntimeCompletionVariable">
    <p>
      A variable in a runtime context.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the variable.
          The name "this" has a special meaning and is used as an implicit
          target for runtime completion, and in explicit "this" references.
        </p>
      </field>
      <field name="type">
        <ref>RuntimeCompletionExpressionType</ref>
        <p>
          The type of the variable.
        </p>
      </field>
    </object>
  </type>
  <type name="RuntimeCompletionExpressionType">
    <p>
      A type at runtime.
    </p>
    <object>
      <field name="libraryPath" optional="true">
        <ref>FilePath</ref>
        <p>
          The path of the library that has this type.
          Omitted if the type is not declared in any library, e.g. "dynamic",
          or "void".
        </p>
      </field>
      <field name="kind">
        <ref>RuntimeCompletionExpressionTypeKind</ref>
        <p>
          The kind of the type.
        </p>
      </field>
      <field name="name" optional="true">
        <ref>String</ref>
        <p>
          The name of the type. Omitted if the type does not have a name, e.g.
          an inline function type.
        </p>
      </field>
      <field name="typeArguments" optional="true">
        <list>
          <ref>RuntimeCompletionExpressionType</ref>
        </list>
        <p>
          The type arguments of the type.
          Omitted if the type does not have type parameters.
        </p>
      </field>
      <field name="returnType" optional="true">
        <ref>RuntimeCompletionExpressionType</ref>
        <p>
          If the type is a function type, the return type of the function.
          Omitted if the type is not a function type.
        </p>
      </field>
      <field name="parameterTypes" optional="true">
        <list>
          <ref>RuntimeCompletionExpressionType</ref>
        </list>
        <p>
          If the type is a function type, the types of the function parameters
          of all kinds - required, optional positional, and optional named.
          Omitted if the type is not a function type.
        </p>
      </field>
      <field name="parameterNames" optional="true">
        <list>
          <ref>String</ref>
        </list>
        <p>
          If the type is a function type, the names of the function parameters
          of all kinds - required, optional positional, and optional named.
          The names of positional parameters are empty strings.
          Omitted if the type is not a function type.
        </p>
      </field>
    </object>
  </type>
  <type name="RuntimeCompletionExpressionTypeKind">
    <p>
      An enumeration of the kinds of runtime expression types.
    </p>
    <enum>
      <value><code>DYNAMIC</code></value>
      <value><code>FUNCTION</code></value>
      <value><code>INTERFACE</code></value>
    </enum>
  </type>
  <type name="ExecutionService">
    <p>
      An enumeration of the services provided by the execution
      domain.
    </p>
    <enum>
      <value><code>LAUNCH_DATA</code></value>
    </enum>
  </type>
  <type name="FileKind">
    <p>
      An enumeration of the kinds of files.
    </p>
    <enum>
      <value><code>LIBRARY</code></value>
      <value><code>PART</code></value>
    </enum>
  </type>
  <type name="FlutterService" experimental="true">
    <p>
      An enumeration of the services provided by the flutter domain that
      are related to a specific list of files.
    </p>
    <enum>
      <value><code>OUTLINE</code></value>
    </enum>
  </type>
  <type name="FlutterOutline" experimental="true">
    <p>
      An node in the Flutter specific outline structure of a file.
    </p>
    <object>
      <field name="kind">
        <ref>FlutterOutlineKind</ref>
        <p>The kind of the node.</p>
      </field>
      <field name="offset">
        <ref>int</ref>
        <p>
          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.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the element.
        </p>
      </field>
      <field name="codeOffset">
        <ref>int</ref>
        <p>
          The offset of the first character of the element code, which is
          neither documentation, nor annotation.
        </p>
      </field>
      <field name="codeLength">
        <ref>int</ref>
        <p>
          The length of the element code.
        </p>
      </field>
      <field name="label" optional="true">
        <ref>String</ref>
        <p>
          The text label of the node children of the node.
          It is provided for any FlutterOutlineKind.GENERIC node,
          where better information is not available.
        </p>
      </field>
      <field name="dartElement" optional="true">
        <ref>Element</ref>
        <p>
          If this node is a Dart element, the description of it; omitted
          otherwise.
        </p>
      </field>
      <field name="attributes" optional="true">
        <list>
          <ref>FlutterOutlineAttribute</ref>
        </list>
        <p>
          Additional attributes for this node, which might be interesting
          to display on the client. These attributes are usually arguments
          for the instance creation or the invocation that created the widget.
        </p>
      </field>
      <field name="className" optional="true">
        <ref>String</ref>
        <p>
          If the node creates a new class instance, or a reference to an
          instance, this field has the name of the class.
        </p>
      </field>
      <field name="parentAssociationLabel" optional="true">
        <ref>String</ref>
        <p>
          A short text description how this node is associated with the parent
          node. For example "appBar" or "body" in Scaffold.
        </p>
      </field>
      <field name="variableName" optional="true">
        <ref>String</ref>
        <p>
          If FlutterOutlineKind.VARIABLE, the name of the variable.
        </p>
      </field>
      <field name="children" optional="true">
        <list>
          <ref>FlutterOutline</ref>
        </list>
        <p>
          The children of the node. The field will be omitted if the node has no
          children.
        </p>
      </field>
      <field name="id" optional="true">
        <ref>int</ref>
        <p>
          If the node is a widget, and it is instrumented, the unique identifier
          of this widget, that can be used to associate rendering information
          with this node.
        </p>
      </field>
      <field name="isWidgetClass" optional="true">
        <ref>bool</ref>
        <p>
          True if the node is a widget class, so it can potentially be
          rendered, even if it does not yet have the rendering constructor.
          This field is omitted if the node is not a widget class.
        </p>
      </field>
      <field name="renderConstructor" optional="true">
        <ref>String</ref>
        <p>
          If the node is a widget class that can be rendered for IDE, the name
          of the constructor that should be used to instantiate the widget.
          Empty string for default constructor. Absent if the node is not a
          widget class that can be rendered.
        </p>
      </field>
      <field name="stateClassName" optional="true">
        <ref>String</ref>
        <p>
          If the node is a StatefulWidget, and its state class is defined in
          the same file, the name of the state class.
        </p>
      </field>
      <field name="stateOffset" optional="true">
        <ref>int</ref>
        <p>
          If the node is a StatefulWidget that can be rendered, and its state
          class is defined in the same file, the offset of the state class code
          in the file.
        </p>
      </field>
      <field name="stateLength" optional="true">
        <ref>int</ref>
        <p>
          If the node is a StatefulWidget that can be rendered, and its state
          class is defined in the same file, the length of the state class code
          in the file.
        </p>
      </field>
    </object>
  </type>
  <type name="FlutterOutlineAttribute" experimental="true">
    <p>
      An attribute for a FlutterOutline.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the attribute.
        </p>
      </field>
      <field name="label">
        <ref>String</ref>
        <p>
          The label of the attribute value, usually the Dart code.
          It might be quite long, the client should abbreviate as needed.
        </p>
      </field>
      <field name="literalValueBoolean" optional="true">
        <ref>bool</ref>
        <p>
          The boolean literal value of the attribute.
          This field is absent if the value is not a boolean literal.
        </p>
      </field>
      <field name="literalValueInteger" optional="true">
        <ref>int</ref>
        <p>
          The integer literal value of the attribute.
          This field is absent if the value is not an integer literal.
        </p>
      </field>
      <field name="literalValueString" optional="true">
        <ref>String</ref>
        <p>
          The string literal value of the attribute.
          This field is absent if the value is not a string literal.
        </p>
      </field>
    </object>
  </type>
  <type name="FlutterOutlineKind" experimental="true">
    <p>
      An enumeration of the kinds of FlutterOutline elements. The list of kinds
      might be expanded with time, clients must be able to handle new kinds
      in some general way.
    </p>
    <enum>
      <value>
        <code>DART_ELEMENT</code>
        <p>A dart element declaration.</p>
      </value>
      <value>
        <code>GENERIC</code>
        <p>A generic Flutter element, without additional information.</p>
      </value>
      <value>
        <code>NEW_INSTANCE</code>
        <p>A new instance creation.</p>
      </value>
      <value>
        <code>INVOCATION</code>
        <p>An invocation of a method, a top-level function, a function
          expression, etc.</p>
      </value>
      <value>
        <code>VARIABLE</code>
        <p>A reference to a local variable, or a field.</p>
      </value>
      <value>
        <code>PLACEHOLDER</code>
        <p>The parent node has a required Widget. The node works as a
          placeholder child to drop a new Widget to.</p>
      </value>
    </enum>
  </type>
  <type name="GeneralAnalysisService">
    <p>
      An enumeration of the services provided by the analysis domain that are
      general in nature (that is, are not specific to some list of files).
    </p>
    <enum>
      <value><code>ANALYZED_FILES</code></value>
    </enum>
  </type>
  <type name="HoverInformation">
    <p>
      The hover information associated with a specific location.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the range of characters that encompasses the
          cursor position and has the same hover information as the
          cursor position.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the range of characters that encompasses the
          cursor position and has the same hover information as the
          cursor position.
        </p>
      </field>
      <field name="containingLibraryPath" optional="true">
        <ref>String</ref>
        <p>
          The path to the defining compilation unit of the library
          in which the referenced element is declared. This data is
          omitted if there is no referenced element, or if the
          element is declared inside an HTML file.
        </p>
      </field>
      <field name="containingLibraryName" optional="true">
        <ref>String</ref>
        <p>
          The name of the library in which the referenced element is
          declared. This data is omitted if there is no referenced
          element, or if the element is declared inside an HTML
          file.
        </p>
      </field>
      <field name="containingClassDescription" optional="true">
        <ref>String</ref>
        <p>
          A human-readable description of the class declaring the element
          being referenced. This data is omitted if there is no referenced
          element, or if the element is not a class member.
        </p>
      </field>
      <field name="dartdoc" optional="true">
        <ref>String</ref>
        <p>
          The dartdoc associated with the referenced element. Other
          than the removal of the comment delimiters, including
          leading asterisks in the case of a block comment, the
          dartdoc is unprocessed markdown. This data is omitted if
          there is no referenced element, or if the element has no
          dartdoc.
        </p>
      </field>
      <field name="elementDescription" optional="true">
        <ref>String</ref>
        <p>
          A human-readable description of the element being
          referenced. This data is omitted if there is no referenced
          element.
        </p>
      </field>
      <field name="elementKind" optional="true">
        <ref>String</ref>
        <p>
          A human-readable description of the kind of element being
          referenced (such as "class" or "function type
          alias"). This data is omitted if there is no referenced
          element.
        </p>
      </field>
      <field name="isDeprecated" optional="true">
        <ref>bool</ref>
        <p>
          True if the referenced element is deprecated.
        </p>
      </field>
      <field name="parameter" optional="true">
        <ref>String</ref>
        <p>
          A human-readable description of the parameter
          corresponding to the expression being hovered over. This
          data is omitted if the location is not in an argument to a
          function.
        </p>
      </field>
      <field name="propagatedType" optional="true">
        <ref>String</ref>
        <p>
          The name of the propagated type of the expression. This
          data is omitted if the location does not correspond to an
          expression or if there is no propagated type information.
        </p>
      </field>
      <field name="staticType" optional="true">
        <ref>String</ref>
        <p>
          The name of the static type of the expression. This data
          is omitted if the location does not correspond to an
          expression.
        </p>
      </field>
    </object>
  </type>
  <type name="ImplementedClass">
    <p>
      A description of a class that is implemented or extended.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the name of the implemented class.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name of the implemented class.
        </p>
      </field>
    </object>
  </type>
  <type name="ImplementedMember">
    <p>
      A description of a class member that is implemented or overridden.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the name of the implemented member.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name of the implemented member.
        </p>
      </field>
    </object>
  </type>
  <type name="ImportedElements">
    <p>
      A description of the elements that are referenced in a region of a file
      that come from a single imported library.
    </p>
    <object>
      <field name="path">
        <ref>FilePath</ref>
        <p>
          The absolute and normalized path of the file containing the library.
        </p>
      </field>
      <field name="prefix">
        <ref>String</ref>
        <p>
          The prefix that was used when importing the library into the original
          source.
        </p>
      </field>
      <field name="elements">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The names of the elements imported from the library.
        </p>
      </field>
    </object>
  </type>
  <type name="Override">
    <p>
      A description of a member that overrides an inherited member.
    </p>
    <object>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset of the name of the overriding member.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name of the overriding member.
        </p>
      </field>
      <field name="superclassMember" optional="true">
        <ref>OverriddenMember</ref>
        <p>
          The member inherited from a superclass that is overridden
          by the overriding member. The field is omitted if there is
          no superclass member, in which case there must be at least
          one interface member.
        </p>
      </field>
      <field name="interfaceMembers" optional="true">
        <list>
          <ref>OverriddenMember</ref>
        </list>
        <p>
          The members inherited from interfaces that are overridden
          by the overriding member. The field is omitted if there
          are no interface members, in which case there must be a
          superclass member.
        </p>
      </field>
    </object>
  </type>
  <type name="OverriddenMember">
    <p>
      A description of a member that is being overridden.
    </p>
    <object>
      <field name="element">
        <ref>Element</ref>
        <p>
          The element that is being overridden.
        </p>
      </field>
      <field name="className">
        <ref>String</ref>
        <p>
          The name of the class in which the member is defined.
        </p>
      </field>
    </object>
  </type>
  <type name="PostfixTemplateDescriptor">
    <p>
      The description of a postfix completion template.
    </p>
    <object>
      <field name="name">
        <ref>String</ref>
        <p>
          The template name, shown in the UI.
        </p>
      </field>
      <field name="key">
        <ref>String</ref>
        <p>
          The unique template key, not shown in the UI.
        </p>
      </field>
      <field name="example">
        <ref>String</ref>
        <p>
          A short example of the transformation performed when the template is
          applied.
        </p>
      </field>
    </object>
  </type>
  <type name="PubStatus">
    <p>
      An indication of the current state of pub execution.
    </p>
    <object>
      <field name="isListingPackageDirs">
        <ref>bool</ref>
        <p>
          True if the server is currently running pub to produce a list of
          package directories.
        </p>
      </field>
    </object>
  </type>
  <type name="RefactoringFeedback">
    <p>
      An abstract superclass of all refactoring feedbacks.
    </p>
    <object>
    </object>
  </type>
  <type name="RefactoringOptions">
    <p>
      An abstract superclass of all refactoring options.
    </p>
    <object>
    </object>
  </type>
  <type name="RequestError">
    <p>
      An indication of a problem with the execution of the server,
      typically in response to a request.
    </p>
    <object>
      <field name="code">
        <ref>RequestErrorCode</ref>
        <p>
          A code that uniquely identifies the error that occurred.
        </p>
      </field>
      <field name="message">
        <ref>String</ref>
        <p>
          A short description of the error.
        </p>
      </field>
      <field name="stackTrace" optional="true">
        <ref>String</ref>
        <p>
          The stack trace associated with processing the request,
          used for debugging the server.
        </p>
      </field>
    </object>
  </type>
  <type name="RequestErrorCode">
    <p>
      An enumeration of the types of errors that can occur in the
      execution of the server.
    </p>
    <enum>
      <value>
        <code>CONTENT_MODIFIED</code>
        <p>
          An "analysis.getErrors" or "analysis.getNavigation" request could
          not be satisfied because the content of the file changed before
          the requested results could be computed.
        </p>
      </value>
      <value>
        <code>DEBUG_PORT_COULD_NOT_BE_OPENED</code>
        <p>
          The server was unable to open a port for the diagnostic server.
        </p>
      </value>
      <value>
        <code>FILE_NOT_ANALYZED</code>
        <p>
          A request specified a FilePath which does not match a file in
          an analysis root, or the requested operation is not available
          for the file.
        </p>
      </value>
      <value>
        <code>FORMAT_INVALID_FILE</code>
        <p>
          An "edit.format" request specified a FilePath
          which does not match a Dart file in an analysis root.
        </p>
      </value>
      <value>
        <code>FORMAT_WITH_ERRORS</code>
        <p>
          An "edit.format" request specified a file that contains syntax
          errors.
        </p>
      </value>
      <value>
        <code>GET_ERRORS_INVALID_FILE</code>
        <p>
          An "analysis.getErrors" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </value>
      <value>
        <code>GET_IMPORTED_ELEMENTS_INVALID_FILE</code>
        <p>
          An "analysis.getImportedElements" request specified a FilePath that
          does not match a file currently subject to analysis.
        </p>
      </value>
      <value>
        <code>GET_KYTHE_ENTRIES_INVALID_FILE</code>
        <p>
          An "analysis.getKytheEntries" request specified a FilePath that does
          not match a file that is currently subject to analysis.
        </p>
      </value>
      <value>
        <code>GET_NAVIGATION_INVALID_FILE</code>
        <p>
          An "analysis.getNavigation" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </value>
      <value>
        <code>GET_REACHABLE_SOURCES_INVALID_FILE</code>
        <p>
          An "analysis.getReachableSources" request specified a FilePath
          which does not match a file currently subject to
          analysis.
        </p>
      </value>
      <value>
        <code>IMPORT_ELEMENTS_INVALID_FILE</code>
        <p>
          An "edit.importElements" request specified a FilePath that does not
          match a file currently subject to analysis.
        </p>
      </value>
      <value>
        <code>INVALID_ANALYSIS_ROOT</code>
        <p>
          A path passed as an argument to a request (such as
          analysis.reanalyze) is required to be an analysis root, but isn't.
        </p>
      </value>
      <value>
        <code>INVALID_EXECUTION_CONTEXT</code>
        <p>
          The context root used to create an execution context does not
          exist.
        </p>
      </value>
      <value>
        <code>INVALID_FILE_PATH_FORMAT</code>
        <p>
          The format of the given file path is invalid, e.g. is not
          absolute and normalized.
        </p>
      </value>
      <value>
        <code>INVALID_OVERLAY_CHANGE</code>
        <p>
          An "analysis.updateContent" request contained a
          ChangeContentOverlay object which can't be applied, due
          to an edit having an offset or length that is out of
          range.
        </p>
      </value>
      <value>
        <code>INVALID_PARAMETER</code>
        <p>
          One of the method parameters was invalid.
        </p>
      </value>
      <value>
        <code>INVALID_REQUEST</code>
        <p>
          A malformed request was received.
        </p>
      </value>
      <value>
        <code>ORGANIZE_DIRECTIVES_ERROR</code>
        <p>
          An "edit.organizeDirectives" request specified a Dart file that
          cannot be analyzed. The reason is described in the message.
        </p>
      </value>
      <value>
        <code>REFACTORING_REQUEST_CANCELLED</code>
        <p>
          Another refactoring request was received during processing of
          this one.
        </p>
      </value>
      <value>
        <code>SERVER_ALREADY_STARTED</code>
        <p>
          The analysis server has already been started (and hence
          won't accept new connections).
        </p>
        <p>
          This error is included for future expansion; at present
          the analysis server can only speak to one client at a
          time so this error will never occur.
        </p>
      </value>
      <value>
        <code>SERVER_ERROR</code>
        <p>
          An internal error occurred in the analysis server.
          Also see the server.error notification.
        </p>
      </value>
      <value>
        <code>SORT_MEMBERS_INVALID_FILE</code>
        <p>
          An "edit.sortMembers" request specified a FilePath
          which does not match a Dart file in an analysis root.
        </p>
      </value>
      <value>
        <code>SORT_MEMBERS_PARSE_ERRORS</code>
        <p>
          An "edit.sortMembers" request specified a Dart file that has
          scan or parse errors.
        </p>
      </value>
      <value>
        <code>UNANALYZED_PRIORITY_FILES</code>
        <p>
          An "analysis.setPriorityFiles" request includes one or
          more files that are not being analyzed.
        </p>
        <p>
          This is a legacy error; it will be removed before the
          API reaches version 1.0.
        </p>
        <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
      </value>
      <value>
        <code>UNKNOWN_REQUEST</code>
        <p>
          A request was received which the analysis server does
          not recognize, or cannot handle in its current
          configuration.
        </p>
      </value>
      <value>
        <code>UNKNOWN_SOURCE</code>
        <p>
          The analysis server was requested to perform an action
          on a source that does not exist.
        </p>
      </value>
      <value>
        <code>UNSUPPORTED_FEATURE</code>
        <p>
          The analysis server was requested to perform an action
          which is not supported.
        </p>
        <p>
          This is a legacy error; it will be removed before the
          API reaches version 1.0.
        </p>
        <!-- TODO(paulberry): remove this error and the code that
                 generates it. -->
      </value>
    </enum>
  </type>
  <type name="SearchId">
    <ref>String</ref>
    <p>
      An identifier used to associate search results with a search
      request.
    </p>
  </type>
  <type name="SearchResult">
    <p>
      A single result from a search request.
    </p>
    <object>
      <field name="location">
        <ref>Location</ref>
        <p>
          The location of the code that matched the search criteria.
        </p>
      </field>
      <field name="kind">
        <ref>SearchResultKind</ref>
        <p>
          The kind of element that was found or the kind of
          reference that was found.
        </p>
      </field>
      <field name="isPotential">
        <ref>bool</ref>
        <p>
          True if the result is a potential match but cannot be
          confirmed to be a match. For example, if all references to
          a method m defined in some class were requested, and a
          reference to a method m from an unknown class were found,
          it would be marked as being a potential match.
        </p>
      </field>
      <field name="path">
        <list>
          <ref>Element</ref>
        </list>
        <p>
          The elements that contain the result, starting with the
          most immediately enclosing ancestor and ending with the
          library.
        </p>
      </field>
    </object>
  </type>
  <type name="SearchResultKind">
    <p>
      An enumeration of the kinds of search results returned by the
      search domain.
    </p>
    <enum>
      <value>
        <code>DECLARATION</code>
        <p>
          The declaration of an element.
        </p>
      </value>
      <value>
        <code>INVOCATION</code>
        <p>
          The invocation of a function or method.
        </p>
      </value>
      <value>
        <code>READ</code>
        <p>
          A reference to a field, parameter or variable where it is being read.
        </p>
      </value>
      <value>
        <code>READ_WRITE</code>
        <p>
          A reference to a field, parameter or variable where it is being read
          and written.
        </p>
      </value>
      <value>
        <code>REFERENCE</code>
        <p>
          A reference to an element.
        </p>
      </value>
      <value>
        <code>UNKNOWN</code>
        <p>
          Some other kind of search result.
        </p>
      </value>
      <value>
        <code>WRITE</code>
        <p>
          A reference to a field, parameter or variable where it is being
          written.
        </p>
      </value>
    </enum>
  </type>
  <type name="ServerService">
    <p>
      An enumeration of the services provided by the server domain.
    </p>
    <enum>
      <value><code>STATUS</code></value>
    </enum>
  </type>
  <type name="TypeHierarchyItem">
    <p>
      A representation of a class in a type hierarchy.
    </p>
    <object>
      <field name="classElement">
        <ref>Element</ref>
        <p>
          The class element represented by this item.
        </p>
      </field>
      <field name="displayName" optional="true">
        <ref>String</ref>
        <p>
          The name to be displayed for the class. This field will be
          omitted if the display name is the same as the name of the
          element. The display name is different if there is
          additional type information to be displayed, such as type
          arguments.
        </p>
      </field>
      <field name="memberElement" optional="true">
        <ref>Element</ref>
        <p>
          The member in the class corresponding to the member on
          which the hierarchy was requested. This field will be
          omitted if the hierarchy was not requested for a member or
          if the class does not have a corresponding member.
        </p>
      </field>
      <field name="superclass" optional="true">
        <ref>int</ref>
        <p>
          The index of the item representing the superclass of
          this class. This field will be omitted if this item
          represents the class Object.
        </p>
      </field>
      <field name="interfaces">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The indexes of the items representing the interfaces
          implemented by this class. The list will be empty if
          there are no implemented interfaces.
        </p>
      </field>
      <field name="mixins">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The indexes of the items representing the mixins
          referenced by this class. The list will be empty if
          there are no classes mixed in to this class.
        </p>
      </field>
      <field name="subclasses">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The indexes of the items representing the subtypes of
          this class. The list will be empty if there are no
          subtypes or if this item represents a supertype of the
          pivot type.
        </p>
      </field>
    </object>
  </type>
</types>
<refactorings>
  <h2><a name="refactorings">Refactorings</a></h2>
  <p>
    This section contains additional information for each kind of
    refactoring. In addition to a brief description of the
    refactoring, there is a specification of the feedback that is
    provided when a refactoring is requested using the
    edit.getRefactoring request (designed to improve the UX)
    and the options that may be provided to edit.getRefactoring.
  </p>
  <refactoring kind="CONVERT_GETTER_TO_METHOD">
    <p>
      Convert a getter into a method by removing the keyword get
      and adding an empty parameter list.
    </p>
    <p>
      It is an error if the range contains anything other than all
      or part of the name of a single getter.
    </p>
  </refactoring>
  <refactoring kind="CONVERT_METHOD_TO_GETTER">
    <p>
      Convert a method into a getter by adding the keyword get and
      removing the parameter list.
    </p>
    <p>
      It is an error if the range contains anything other than all
      or part of the name of a single method or if the method has
      a non-empty parameter list.
    </p>
  </refactoring>
  <refactoring kind="EXTRACT_LOCAL_VARIABLE">
    <p>
      Create a local variable initialized by the expression that covers
      the specified selection.
    </p>
    <p>
      It is an error if the selection range is not covered by a
      complete expression.
    </p>
    <feedback>
      <field name="coveringExpressionOffsets" optional="true">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The offsets of the expressions that cover the specified
          selection, from the down most to the up most.
        </p>
      </field>
      <field name="coveringExpressionLengths" optional="true">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The lengths of the expressions that cover the specified
          selection, from the down most to the up most.
        </p>
      </field>
      <field name="names">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The proposed names for the local variable.
        </p>
      </field>
      <field name="offsets">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The offsets of the expressions that would be replaced by
          a reference to the variable.
        </p>
      </field>
      <field name="lengths">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The lengths of the expressions that would be replaced by
          a reference to the variable. The lengths correspond to
          the offsets. In other words, for a given expression, if
          the offset of that expression is <tt>offsets[i]</tt>, then
          the length of that expression is <tt>lengths[i]</tt>.
        </p>
      </field>
    </feedback>
    <options>
      <field name="name">
        <ref>String</ref>
        <p>
          The name that the local variable should be given.
        </p>
      </field>
      <field name="extractAll">
        <ref>bool</ref>
        <p>
          True if all occurrences of the expression within the
          scope in which the variable will be defined should be
          replaced by a reference to the local variable. The
          expression used to initiate the refactoring will always
          be replaced.
        </p>
      </field>
    </options>
  </refactoring>
  <refactoring kind="EXTRACT_METHOD">
    <p>
      Create a method whose body is the specified expression or
      list of statements, possibly augmented with a return
      statement.
    </p>
    <p>
      It is an error if the range contains anything other than a
      complete expression (no partial expressions are allowed) or
      a complete sequence of statements.
    </p>
    <feedback>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset to the beginning of the expression or
          statements that will be extracted.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the expression or statements that will be
          extracted.
        </p>
      </field>
      <field name="returnType">
        <ref>String</ref>
        <p>
          The proposed return type for the method.
          If the returned element does not have a declared return type,
          this field will contain an empty string.
        </p>
      </field>
      <field name="names">
        <list>
          <ref>String</ref>
        </list>
        <p>
          The proposed names for the method.
        </p>
      </field>
      <field name="canCreateGetter">
        <ref>bool</ref>
        <p>
          True if a getter could be created rather than a method.
        </p>
      </field>
      <field name="parameters">
        <list>
          <ref>RefactoringMethodParameter</ref>
        </list>
        <p>
          The proposed parameters for the method.
        </p>
      </field>
      <field name="offsets">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The offsets of the expressions or statements that would
          be replaced by an invocation of the method.
        </p>
      </field>
      <field name="lengths">
        <list>
          <ref>int</ref>
        </list>
        <p>
          The lengths of the expressions or statements that would
          be replaced by an invocation of the method. The lengths
          correspond to the offsets. In other words, for a given
          expression (or block of statements), if the offset of
          that expression is <tt>offsets[i]</tt>, then the length
          of that expression is <tt>lengths[i]</tt>.
        </p>
      </field>
    </feedback>
    <options>
      <field name="returnType">
        <ref>String</ref>
        <p>
          The return type that should be defined for the method.
        </p>
      </field>
      <field name="createGetter">
        <ref>bool</ref>
        <p>
          True if a getter should be created rather than a
          method. It is an error if this field is true and the
          list of parameters is non-empty.
        </p>
      </field>
      <field name="name">
        <ref>String</ref>
        <p>
          The name that the method should be given.
        </p>
      </field>
      <field name="parameters">
        <list>
          <ref>RefactoringMethodParameter</ref>
        </list>
        <p>
          The parameters that should be defined for the method.
        </p>
        <p>
          It is an error if a REQUIRED or NAMED parameter follows a
          POSITIONAL parameter.
          It is an error if a REQUIRED or POSITIONAL parameter follows a
          NAMED parameter.
        </p>
        <ul>
          <li>
            To change the order and/or update proposed parameters, add
            parameters with the same identifiers as proposed.
          </li>
          <li>To add new parameters, omit their identifier.</li>
          <li>To remove some parameters, omit them in this list.</li>
        </ul>
      </field>
      <field name="extractAll">
        <ref>bool</ref>
        <p>
          True if all occurrences of the expression or statements
          should be replaced by an invocation of the method. The
          expression or statements used to initiate the
          refactoring will always be replaced.
        </p>
      </field>
    </options>
  </refactoring>
  <refactoring kind="EXTRACT_WIDGET">
    <p>
      Create a new class that extends StatelessWidget, whose build() method is
      the widget creation expression, or a method returning a Flutter widget,
      at the specified offset.
    </p>
    <feedback>
    </feedback>
    <options>
      <field name="name">
        <ref>String</ref>
        <p>
          The name that the widget class should be given.
        </p>
      </field>
    </options>
  </refactoring>
  <refactoring kind="INLINE_LOCAL_VARIABLE">
    <p>
      Inline the initializer expression of a local variable in
      place of any references to that variable.
    </p>
    <p>
      It is an error if the range contains anything other than all
      or part of the name of a single local variable.
    </p>
    <feedback>
      <field name="name">
        <ref>String</ref>
        <p>
          The name of the variable being inlined.
        </p>
      </field>
      <field name="occurrences">
        <ref>int</ref>
        <p>
          The number of times the variable occurs.
        </p>
      </field>
    </feedback>
  </refactoring>
  <refactoring kind="INLINE_METHOD">
    <p>
      Inline a method in place of one or all references to that
      method.
    </p>
    <p>
      It is an error if the range contains anything other than all
      or part of the name of a single method.
    </p>
    <feedback>
      <field name="className" optional="true">
        <ref>String</ref>
        <p>
          The name of the class enclosing the method being inlined.
          If not a class member is being inlined, this field will be absent.
        </p>
      </field>
      <field name="methodName">
        <ref>String</ref>
        <p>
          The name of the method (or function) being inlined.
        </p>
      </field>
      <field name="isDeclaration">
        <ref>bool</ref>
        <p>
          True if the declaration of the method is selected.
          So all references should be inlined.
        </p>
      </field>
    </feedback>
    <options>
      <field name="deleteSource">
        <ref>bool</ref>
        <p>
          True if the method being inlined should be removed.
          It is an error if this field is true and inlineAll is false.
        </p>
      </field>
      <field name="inlineAll">
        <ref>bool</ref>
        <p>
          True if all invocations of the method should be inlined,
          or false if only the invocation site used to create this
          refactoring should be inlined.
        </p>
      </field>
    </options>
  </refactoring>
  <refactoring kind="MOVE_FILE">
    <p>
      Move the given file and update all of the references to that file
      and from it. The move operation is supported in general case - for
      renaming a file in the same folder, moving it to a different folder
      or both.
    </p>
    <p>
      The refactoring must be activated before an actual file moving
      operation is performed.
    </p>
    <p>
      The "offset" and "length" fields from the request are ignored, but the
      file specified in the request specifies the file to be moved.
    </p>
    <options>
      <field name="newFile">
        <ref>FilePath</ref>
        <p>
          The new file path to which the given file is being moved.
        </p>
      </field>
    </options>
  </refactoring>
  <refactoring kind="RENAME">
    <p>
      Rename a given element and all of the references to that
      element.
    </p>
    <p>
      It is an error if the range contains anything other than all
      or part of the name of a single function (including methods,
      getters and setters), variable (including fields, parameters
      and local variables), class or function type.
    </p>
    <feedback>
      <field name="offset">
        <ref>int</ref>
        <p>
          The offset to the beginning of the name selected to be
          renamed, or -1 if the name does not exist yet.
        </p>
      </field>
      <field name="length">
        <ref>int</ref>
        <p>
          The length of the name selected to be renamed.
        </p>
      </field>
      <field name="elementKindName">
        <ref>String</ref>
        <p>
          The human-readable description of the kind of element being
          renamed (such as "class" or "function type
          alias").
        </p>
      </field>
      <field name="oldName">
        <ref>String</ref>
        <p>
          The old name of the element before the refactoring.
        </p>
      </field>
    </feedback>
    <options>
      <field name="newName">
        <ref>String</ref>
        <p>
          The name that the element should have after the
          refactoring.
        </p>
      </field>
    </options>
  </refactoring>
</refactorings>
<h2>Errors</h2>
<p>
  This section contains a list of all of the errors that are
  produced by the server and the data that is returned with each.
</p>
<p>
  TODO: TBD
</p>
<h2 class="domain"><a name="index">Index</a></h2>
<index></index>
</body>
</html>
