<html>
  <head>
    <meta charset="UTF-8"/>
    <title>Analysis Server API Specification</title>
  </head>
  <body>
    <h1>Analysis Server API Specification</h1>
    <h1 style="color:#999999">WORKING DRAFT - Version <version>0.3</version></h1>
    <p>
      This document contains a specification of the API provided by
      the analysis server. The API in this document is currently under
      development and should be expected to change. In some cases
      those changes will be substantial.
    </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>
      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 an
      optional third field. 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. The 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.
    </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>
    <h3>Eventual Consistency</h3>
    <p>
      TBD
    </p>
    <h3>Domains</h3>
    <p>
      For convenience, the API is divided into domains. Each domain is
      specified in a separate section below:
    </p>
    <ul>
      <li><a href="#domain_server">Server</a></li>
      <li><a href="#domain_analysis">Analysis</a></li>
      <li><a href="#domain_completion">Code Completion</a></li>
      <li><a href="#domain_search">Search</a></li>
      <li><a href="#domain_edit">Edit</a></li>
      <li><a href="#domain_execution">Execution</a></li>
    </ul>
    <p>
      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>
    <h3>Command-line Arguments</h3>
    <p>
      The command-line arguments that can be passed to the server.
    </p>
    <h4>Options</h4>
    <blockquote>
    <dl>
      <dt>--no-error-notification</dt>
      <dd>
      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>
    </blockquote>
    <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>
      </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>
        </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.
        </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="reanalyze">
        <p>
          Force the re-analysis of everything contained in the
          existing 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>
      </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 also in one of
          the excluded paths.
        </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 target directories
              that should override the normal package: URI resolution
              mechanism.  The analyzer will behave as though each
              source directory in the map contains a special
              pubspec.yaml file which resolves any package: URI to the
              corresponding path within the target directory.  The
              effect is the same as specifying the target directory as
              a "--package_root" 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="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. 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>
      </request>
      <request method="updateOptions">
        <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="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>
        <p>
          It is only possible to unsubscribe from this notification by
          using the command-line flag --no-error-notification.
        </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="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>
        </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="outline">
            <ref>Outline</ref>
            <p>
              The outline associated with the file.
            </p>
          </field>
        </params>
      </notification>
      <notification event="overrides">
        <p>
          Reports the overridding 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>
        </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="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="getRefactoring">
        <p>
          Get the changes required to perform a refactoring.
        </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="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>
    </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.
            </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.
        </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">
        <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>
    <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>
      <type name="AddContentOverlay">
        <p>
          A directive to begin overlaying the contents of a file.  The
          supplied content will be used for analysis in place of the
          file contents in the filesystem.
        </p>
        <p>
          If this directive is used on a file that already has a file
          content overlay, the old overlay is discarded and replaced
          with the new one.
        </p>
        <object>
          <field name="type" value="add"><ref>String</ref></field>
          <field name="content">
            <ref>String</ref>
            <p>
              The new content of the file.
            </p>
          </field>
        </object>
      </type>
      <type name="AnalysisError">
        <p>
          An indication of an error, warning, or hint that was produced
          by the analysis.
        </p>
        <object>
          <field name="severity">
            <ref>AnalysisErrorSeverity</ref>
            <p>
              The severity of the error.
            </p>
          </field>
          <field name="type">
            <ref>AnalysisErrorType</ref>
            <p>
              The type of the error.
            </p>
          </field>
          <field name="location">
            <ref>Location</ref>
            <p>
              The location associated with the error.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              The message to be displayed for this error. The message
              should indicate what is wrong with the code and why it is
              wrong.
            </p>
          </field>
          <field name="correction" optional="true">
            <ref>String</ref>
            <p>
              The correction message to be displayed for this error. The
              correction message should indicate how the user can fix
              the error. The field is omitted if there is no correction
              message associated with the error code.
            </p>
          </field>
        </object>
      </type>
      <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="AnalysisErrorSeverity">
        <p>
          An enumeration of the possible severities of analysis
          errors.
        </p>
        <enum>
          <value><code>INFO</code></value>
          <value><code>WARNING</code></value>
          <value><code>ERROR</code></value>
        </enum>
      </type>
      <type name="AnalysisErrorType">
        <p>
          An enumeration of the possible types of analysis errors.
        </p>
        <enum>
          <value><code>ANGULAR</code></value>
          <value><code>CHECKED_MODE_COMPILE_TIME_ERROR</code></value>
          <value><code>COMPILE_TIME_ERROR</code></value>
          <value><code>HINT</code></value>
          <value><code>POLYMER</code></value>
          <value><code>STATIC_TYPE_WARNING</code></value>
          <value><code>STATIC_WARNING</code></value>
          <value><code>SYNTACTIC_ERROR</code></value>
          <value><code>TODO</code></value>
        </enum>
      </type>
      <type name="AnalysisOptions">
        <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">
            <ref>bool</ref>
            <p>
              True if the client wants to enable support for the
              proposed async feature.
            </p>
          </field>
          <field name="enableDeferredLoading" optional="true">
            <ref>bool</ref>
            <p>
              True if the client wants to enable support for the
              proposed deferred loading feature.
            </p>
          </field>
          <field name="enableEnums" optional="true">
            <ref>bool</ref>
            <p>
              True if the client wants to enable support for the
              proposed enum feature.
            </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 is hints 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.
        </p>
        <enum>
          <value><code>FOLDING</code></value>
          <value><code>HIGHLIGHTS</code></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="ChangeContentOverlay">
        <p>
          A directive to modify an existing file content overlay. One or more
          ranges of text are deleted from the old file content overlay and
          replaced with new text.
        </p>
        <p>
        The edits are applied in the order in which they occur in the list.
        This means that the offset of each edit must be correct under the
        assumption that all previous edits have been applied.
        </p>
        <p>
          It is an error to use this overlay on a file that does not yet have
          a file content overlay or that has had its overlay removed via
          <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
        </p>
        <p>
          If any of the edits cannot be applied due to its offset or
          length being out of range, an INVALID_OVERLAY_CHANGE error
          will be reported.
        </p>
        <object>
          <field name="type" value="change"><ref>String</ref></field>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              The edits to be applied to the file.
            </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="CompletionRelevance">
        <p>
          An enumeration of the relevance of a completion
          suggestion.
        </p>
        <enum>
          <value><code>LOW</code></value>
          <value><code>DEFAULT</code></value>
          <value><code>HIGH</code></value>
        </enum>
      </type>
      <type name="CompletionSuggestion">
        <p>
          A suggestion for how to complete partially entered text. Many
          of the fields are optional, depending on the kind of element
          being suggested.
        </p>
        <object>
          <field name="kind">
            <ref>CompletionSuggestionKind</ref>
            <p>
              The kind of element being suggested.
            </p>
          </field>
          <field name="relevance">
            <ref>CompletionRelevance</ref>
            <p>
              The relevance of this completion suggestion.
            </p>
          </field>
          <field name="completion">
            <ref>String</ref>
            <p>
              The identifier to be inserted if the suggestion is
              selected. If the suggestion is for a method or function,
              the client might want to additionally insert a template
              for the parameters. The information required in order to
              do so is contained in other fields.
            </p>
          </field>
          <field name="selectionOffset">
            <ref>int</ref>
            <p>
              The offset, relative to the beginning of the completion,
              of where the selection should be placed after insertion.
            </p>
          </field>
          <field name="selectionLength">
            <ref>int</ref>
            <p>
              The number of characters that should be selected after
              insertion.
            </p>
          </field>
          <field name="isDeprecated">
            <ref>bool</ref>
            <p>
              True if the suggested element is deprecated.
            </p>
          </field>
          <field name="isPotential">
            <ref>bool</ref>
            <p>
              True if the element is not known to be valid for the
              target. This happens if the type of the target is dynamic.
            </p>
          </field>
          <field name="docSummary" optional="true">
            <ref>String</ref>
            <p>
              An abbreviated version of the Dartdoc associated with the
              element being suggested, This field is omitted if there is
              no Dartdoc associated with the element.
            </p>
          </field>
          <field name="docComplete" optional="true">
            <ref>String</ref>
            <p>
              The Dartdoc associated with the element being suggested,
              This field is omitted if there is no Dartdoc associated
              with the element.
            </p>
          </field>
          <field name="declaringType" optional="true">
            <ref>String</ref>
            <p>
              The class that declares the element being suggested. This
              field is omitted if the suggested element is not a member
              of a class.
            </p>
          </field>
          <field name="element" optional="true">
            <ref>Element</ref>
            <p>
              Information about the element reference being suggested.
            </p>
          </field>
          <field name="returnType" optional="true">
            <ref>String</ref>
            <p>
              The return type of the getter, function or method being
              suggested. This field is omitted if the suggested element
              is not a getter, function or method.
            </p>
          </field>
          <field name="parameterNames" optional="true">
            <list><ref>String</ref></list>
            <p>
              The names of the parameters of the function or method
              being suggested. This field is omitted if the suggested
              element is not a setter, function or method.
            </p>
          </field>
          <field name="parameterTypes" optional="true">
            <list><ref>String</ref></list>
            <p>
              The types of the parameters of the function or method
              being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="requiredParameterCount" optional="true">
            <ref>int</ref>
            <p>
              The number of required parameters for the function or
              method being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="positionalParameterCount" optional="true">
            <ref>int</ref>
            <p>
              The number of positional parameters for the function or
              method being suggested. This field is omitted if the
              parameterNames field is omitted.
            </p>
          </field>
          <field name="parameterName" optional="true">
            <ref>String</ref>
            <p>
              The name of the optional parameter being suggested. This
              field is omitted if the suggestion is not the addition of
              an optional argument within an argument list.
            </p>
          </field>
          <field name="parameterType" optional="true">
            <ref>String</ref>
            <p>
              The type of the options parameter being suggested. This
              field is omitted if the parameterName field is omitted.
            </p>
          </field>
        </object>
      </type>
      <type name="CompletionSuggestionKind">
        <p>
          An enumeration of the kinds of elements that can be included
          in a completion suggestion.
        </p>
        <enum>
          <value><code>ARGUMENT_LIST</code></value>
          <value><code>CLASS</code></value>
          <value><code>CLASS_ALIAS</code></value>
          <value><code>CONSTRUCTOR</code></value>
          <value><code>FIELD</code></value>
          <value><code>FUNCTION</code></value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value><code>GETTER</code></value>
          <value><code>IMPORT</code></value>
          <value><code>KEYWORD</code></value>
          <value><code>LABEL</code></value>
          <value><code>LIBRARY_PREFIX</code></value>
          <value><code>LOCAL_VARIABLE</code></value>
          <value><code>METHOD</code></value>
          <value><code>METHOD_NAME</code></value>
          <value><code>NAMED_ARGUMENT</code></value>
          <value><code>OPTIONAL_ARGUMENT</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>SETTER</code></value>
          <value><code>TOP_LEVEL_VARIABLE</code></value>
          <value><code>TYPE_PARAMETER</code></value>
        </enum>
      </type>
      <type name="Element">
        <p>
          Information about an element (something that can be declared
          in code).
        </p>
        <object>
          <field name="kind">
            <ref>ElementKind</ref>
            <p>
              The kind of the element.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name of the element. This is typically used as the
              label in the outline.
            </p>
          </field>
          <field name="location" optional="true">
            <ref>Location</ref>
            <p>
              The location of the name in the declaration of the
              element.
            </p>
          </field>
          <field name="flags">
            <ref>int</ref>
            <p>
              A bit-map containing the following flags:
            </p>
            <ul>
              <li>0x01 - set if the element is explicitly or implicitly abstract</li>
              <li>0x02 - set if the element was declared to be ‘const’</li>
              <li>0x04 - set if the element was declared to be ‘final’</li>
              <li>0x08 - set if the element is a static member of a class or is a top-level function or field</li>
              <li>0x10 - set if the element is private</li>
              <li>0x20 - set if the element is deprecated</li>
            </ul>
          </field>
          <field name="parameters" optional="true">
            <ref>String</ref>
            <p>
              The parameter list for the element. If the element is not
              a method or function this field will not be defined. If
              the element has zero parameters, this field will have a
              value of "()".
            </p>
          </field>
          <field name="returnType" optional="true">
            <ref>String</ref>
            <p>
              The return type of the element. If the element is not a
              method or function this field will not be defined. If the
              element does not have a declared return type, this field
              will contain an empty string.
            </p>
          </field>
        </object>
      </type>
      <type name="ElementKind">
        <p>
          An enumeration of the kinds of elements.
        </p>
        <enum>
          <value><code>CLASS</code></value>
          <value><code>CLASS_TYPE_ALIAS</code></value>
          <value><code>COMPILATION_UNIT</code></value>
          <value><code>CONSTRUCTOR</code></value>
          <value><code>FIELD</code></value>
          <value><code>FUNCTION</code></value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value><code>GETTER</code></value>
          <value><code>LABEL</code></value>
          <value><code>LIBRARY</code></value>
          <value><code>LOCAL_VARIABLE</code></value>
          <value><code>METHOD</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>PREFIX</code></value>
          <value><code>SETTER</code></value>
          <value><code>TOP_LEVEL_VARIABLE</code></value>
          <value><code>TYPE_PARAMETER</code></value>
          <value><code>UNIT_TEST_GROUP</code></value>
          <value><code>UNIT_TEST_TEST</code></value>
          <value><code>UNKNOWN</code></value>
        </enum>
      </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="FilePath">
        <ref>String</ref>
        <p>
          The absolute path of a file.
        </p>
      </type>
      <type name="FoldingKind">
        <p>
          An enumeration of the kinds of folding regions.
        </p>
        <enum>
          <value><code>COMMENT</code></value>
          <value><code>CLASS_MEMBER</code></value>
          <value><code>DIRECTIVES</code></value>
          <value><code>DOCUMENTATION_COMMENT</code></value>
          <value><code>TOP_LEVEL_DECLARATION</code></value>
        </enum>
      </type>
      <type name="FoldingRegion">
        <p>
          A description of a region that can be folded.
        </p>
        <object>
          <field name="kind">
            <ref>FoldingKind</ref>
            <p>
              The kind of the region.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be folded.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be folded.
            </p>
          </field>
        </object>
      </type>
      <type name="HighlightRegion">
        <p>
          A description of a region that could have special highlighting
          associated with it.
        </p>
        <object>
          <field name="type">
            <ref>HighlightRegionType</ref>
            <p>
              The type of highlight associated with the region.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be highlighted.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be highlighted.
            </p>
          </field>
        </object>
      </type>
      <type name="HighlightRegionType">
        <p>
          An enumeration of the kinds of highlighting that can be
          applied to files.
        </p>
        <enum>
          <value><code>ANNOTATION</code></value>
          <value><code>BUILT_IN</code></value>
          <value><code>CLASS</code></value>
          <value><code>COMMENT_BLOCK</code></value>
          <value><code>COMMENT_DOCUMENTATION</code></value>
          <value><code>COMMENT_END_OF_LINE</code></value>
          <value><code>CONSTRUCTOR</code></value>
          <value><code>DIRECTIVE</code></value>
          <value><code>DYNAMIC_TYPE</code></value>
          <value><code>ENUM</code></value>
          <value><code>ENUM_CONSTANT</code></value>
          <value><code>FIELD</code></value>
          <value><code>FIELD_STATIC</code></value>
          <value><code>FUNCTION</code></value>
          <value><code>FUNCTION_DECLARATION</code></value>
          <value><code>FUNCTION_TYPE_ALIAS</code></value>
          <value><code>GETTER_DECLARATION</code></value>
          <value><code>IDENTIFIER_DEFAULT</code></value>
          <value><code>IMPORT_PREFIX</code></value>
          <value><code>KEYWORD</code></value>
          <value><code>LABEL</code></value>
          <value><code>LITERAL_BOOLEAN</code></value>
          <value><code>LITERAL_DOUBLE</code></value>
          <value><code>LITERAL_INTEGER</code></value>
          <value><code>LITERAL_LIST</code></value>
          <value><code>LITERAL_MAP</code></value>
          <value><code>LITERAL_STRING</code></value>
          <value><code>LOCAL_VARIABLE</code></value>
          <value><code>LOCAL_VARIABLE_DECLARATION</code></value>
          <value><code>METHOD</code></value>
          <value><code>METHOD_DECLARATION</code></value>
          <value><code>METHOD_DECLARATION_STATIC</code></value>
          <value><code>METHOD_STATIC</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>SETTER_DECLARATION</code></value>
          <value><code>TOP_LEVEL_VARIABLE</code></value>
          <value><code>TYPE_NAME_DYNAMIC</code></value>
          <value><code>TYPE_PARAMETER</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 encompases 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 encompases 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="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="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="LinkedEditGroup">
        <p>
          A collection of positions that should be linked (edited
          simultaneously) for the purposes of updating code after a
          source change. For example, if a set of edits introduced a
          new variable name, the group would contain all of the
          positions of the variable name so that if the client wanted
          to let the user edit the variable name after the operation,
          all occurrences of the name could be edited simultaneously.
        </p>
        <object>
          <field name="positions">
            <list><ref>Position</ref></list>
            <p>
              The positions of the regions that should be edited
              simultaneously.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the regions that should be edited
              simultaneously.
            </p>
          </field>
          <field name="suggestions">
            <list><ref>LinkedEditSuggestion</ref></list>
            <p>
              Pre-computed suggestions for what every region might
              want to be changed to.
            </p>
          </field>
        </object>
      </type>
      <type name="LinkedEditSuggestion">
        <p>
          A suggestion of a value that could be used to replace all of
          the linked edit regions in a LinkedEditGroup.
        </p>
        <object>
          <field name="value">
            <ref>String</ref>
            <p>
              The value that could be used to replace all of the linked
              edit regions.
            </p>
          </field>
          <field name="kind">
            <ref>LinkedEditSuggestionKind</ref>
            <p>
              The kind of value being proposed.
            </p>
          </field>
        </object>
      </type>
      <type name="LinkedEditSuggestionKind">
        <p>
          An enumeration of the kind of values that can be suggested
          for a linked edit.
        </p>
        <enum>
          <value><code>METHOD</code></value>
          <value><code>PARAMETER</code></value>
          <value><code>TYPE</code></value>
          <value><code>VARIABLE</code></value>
        </enum>
      </type>
      <type name="Location">
        <p>
          A location (character range) within a file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the range.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the range.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the range.
            </p>
          </field>
          <field name="startLine">
            <ref>int</ref>
            <p>
              The one-based index of the line containing the first
              character of the range.
            </p>
          </field>
          <field name="startColumn">
            <ref>int</ref>
            <p>
              The one-based index of the column containing the first
              character of the range.
            </p>
          </field>
        </object>
      </type>
      <type name="NavigationRegion">
        <p>
          A description of a region from which the user can navigate to
          the declaration of an element.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region from which the user can navigate.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region from which the user can navigate.
            </p>
          </field>
          <field name="targets">
            <list><ref>Element</ref></list>
            <p>
              The elements to which the given region is bound. By
              opening the declaration of the elements, clients can
              implement one form of navigation.
            </p>
          </field>
        </object>
      </type>
      <type name="Occurrences">
        <p>
          A description of the references to a single element within a
          single file.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              The element that was referenced.
            </p>
          </field>
          <field name="offsets">
            <list><ref>int</ref></list>
            <p>
              The offsets of the name of the referenced element within
              the file.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the name of the referenced element.
            </p>
          </field>
        </object>
      </type>
      <type name="Outline">
        <p>
          An node in the outline structure of a file.
        </p>
        <object>
          <field name="element">
            <ref>Element</ref>
            <p>
              A description of the element represented by this 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 if 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="children" optional="true">
            <list><ref>Outline</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="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="Position">
        <p>
          A position within a file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the position.
            </p>
          </field>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the position.
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringKind">
        <p>
          An enumeration of the kinds of refactorings that can be
          created.
        </p>
        <enum>
          <value><code>CONVERT_GETTER_TO_METHOD</code></value>
          <value><code>CONVERT_METHOD_TO_GETTER</code></value>
          <value><code>EXTRACT_LOCAL_VARIABLE</code></value>
          <value><code>EXTRACT_METHOD</code></value>
          <value><code>INLINE_LOCAL_VARIABLE</code></value>
          <value><code>INLINE_METHOD</code></value>
          <value><code>MOVE_FILE</code></value>
          <value><code>RENAME</code></value>
          <value><code>SORT_MEMBERS</code></value>
        </enum>
      </type>
      <type name="RefactoringMethodParameter">
        <p>
          A description of a parameter in a method refactoring.
        </p>
        <object>
          <field name="id" optional="true">
            <ref>String</ref>
            <p>
              The unique identifier of the parameter.
              Clients may omit this field for the parameters they want to add.
            </p>
          </field>
          <field name="kind">
            <ref>RefactoringMethodParameterKind</ref>
            <p>
              The kind of the parameter.
            </p>
          </field>
          <field name="type">
            <ref>String</ref>
            <p>
              The type that should be given to the parameter, or the return type
              of the parameter's function type.
            </p>
          </field>
          <field name="name">
            <ref>String</ref>
            <p>
              The name that should be given to the parameter.
            </p>
          </field>
          <field name="parameters" optional="true">
            <ref>String</ref>
            <p>
              The parameter list of the parameter's function type.
              If the parameter is not of a function type, this field will
              not be defined. If the function type has zero parameters, this
              field will have a value of "()".
            </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="RefactoringMethodParameterKind">
        <p>
          An enumeration of the kinds of parameters.
        </p>
        <enum>
          <value><code>REQUIRED</code></value>
          <value><code>POSITIONAL</code></value>
          <value><code>NAMED</code></value>
        </enum>
      </type>
      <type name="RefactoringProblem">
        <p>
          A description of a problem related to a refactoring.
        </p>
        <object>
          <field name="severity">
            <ref>RefactoringProblemSeverity</ref>
            <p>
              The severity of the problem being represented.
            </p>
          </field>
          <field name="message">
            <ref>String</ref>
            <p>
              A human-readable description of the problem being
              represented.
            </p>
          </field>
          <field name="location" optional="true">
            <ref>Location</ref>
            <p>
              The location of the problem being represented.
              This field is omitted unless there is a specific location
              associated with the problem (such as a location where an element
              being renamed will be shadowed).
            </p>
          </field>
        </object>
      </type>
      <type name="RefactoringProblemSeverity">
        <p>
          An enumeration of the severities of problems that can be
          returned by the refactoring requests.
        </p>
        <enum>
          <value><code>INFO</code></value>
          <value><code>WARNING</code></value>
          <value><code>ERROR</code></value>
          <value><code>FATAL</code></value>
        </enum>
      </type>
      <type name="RemoveContentOverlay">
        <p>
          A directive to remove an existing file content overlay.
          After processing this directive, the file contents will once
          again be read from the file system.
        </p>
        <p>
          If this directive is used on a file that doesn't currently
          have a content overlay, it has no effect.
        </p>
        <object>
          <field name="type" value="remove"><ref>String</ref></field>
        </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>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>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>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
              configuation.
            </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="SourceChange">
        <p>
          A description of a set of edits that implement a single
          conceptual change.
        </p>
        <object>
          <field name="message">
            <ref>String</ref>
            <p>
              A human-readable description of the change to be applied.
            </p>
          </field>
          <field name="edits">
            <list><ref>SourceFileEdit</ref></list>
            <p>
              A list of the edits used to effect the change, grouped by
              file.
            </p>
          </field>
          <field name="linkedEditGroups">
            <list><ref>LinkedEditGroup</ref></list>
            <p>
              A list of the linked editing groups used to customize
              the changes that were made.
            </p>
          </field>
          <field name="selection" optional="true">
            <ref>Position</ref>
            <p>
              The position that should be selected after the edits
              have been applied.
            </p>
          </field>
        </object>
      </type>
      <type name="SourceEdit">
        <p>
          A description of a single change to a single file.
        </p>
        <object>
          <field name="offset">
            <ref>int</ref>
            <p>
              The offset of the region to be modified.
            </p>
          </field>
          <field name="length">
            <ref>int</ref>
            <p>
              The length of the region to be modified.
            </p>
          </field>
          <field name="replacement">
            <ref>String</ref>
            <p>
              The code that is to replace the specified region in the
              original code.
            </p>
          </field>
          <field name="id" optional="true">
            <ref>String</ref>
            <p>
              An identifier that uniquely identifies this source edit from other
              edits in the same response. This field is omitted unless a
              containing structure needs to be able to identify the edit for
              some reason.
            </p>
            <p>
              For example, some refactoring operations can produce edits that
              might not be appropriate (referred to as potential edits). Such
              edits will have an id so that they can be referenced. Edits in
              the same response that do not need to be referenced will not have
              an id.
            </p>
          </field>
        </object>
      </type>
      <type name="SourceFileEdit">
        <p>
          A description of a set of changes to a single file.
        </p>
        <object>
          <field name="file">
            <ref>FilePath</ref>
            <p>
              The file containing the code to be modified.
            </p>
          </field>
          <field name="fileStamp">
            <ref>long</ref>
            <p>
              The modification stamp of the file at the moment when the change
              was created, in milliseconds since the "Unix epoch". Will be -1 if
              the file did not exist and should be created. The client may use
              this field to make sure that the file was not changed since then,
              so it is safe to apply the change.
            </p>
          </field>
          <field name="edits">
            <list><ref>SourceEdit</ref></list>
            <p>
              A list of the edits used to effect the change.
            </p>
          </field>
        </object>
      </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 a specified
          expression.
        </p>
        <p>
          It is an error if the range contains anything other than a
          complete expression (no partial expressions are allowed).
        </p>
        <feedback>
          <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 offsets[i], then the
              length of that expression is lengths[i].
            </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.
            </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 offsets[i], then the length of that
              expression is lengths[i].
            </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>
      TBD
    </p>
  </body>
</html>
