<!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.18.4</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="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="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="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>
    </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="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="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="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>
    </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="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.
        </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>
