GNU bug report logs - #44926
[WIP] Add dart-2.8.4

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: Nicolò Balzarotti <anothersms@HIDDEN>; dated Sat, 28 Nov 2020 18:38:01 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at 44926 <at> debbugs.gnu.org:


Received: (at 44926) by debbugs.gnu.org; 29 Nov 2020 17:40:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 29 12:40:00 2020
Received: from localhost ([127.0.0.1]:52505 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kjQg3-0003vK-HO
	for submit <at> debbugs.gnu.org; Sun, 29 Nov 2020 12:40:00 -0500
Received: from mail-wm1-f51.google.com ([209.85.128.51]:37838)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <anothersms@HIDDEN>) id 1kjQc3-0003kR-TK
 for 44926 <at> debbugs.gnu.org; Sun, 29 Nov 2020 12:35:52 -0500
Received: by mail-wm1-f51.google.com with SMTP id h21so17810811wmb.2
 for <44926 <at> debbugs.gnu.org>; Sun, 29 Nov 2020 09:35:51 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=cWfWKKhMhHJ2GM9SVlNL6YKrOJiIScK4THLuUDEgLvY=;
 b=Clfe7Kd8C7plqsGal9enP+v+sJxRA+6VXWH0JGVVpoOmwHIVw9/2rqMi0NmHABKtec
 TEVczBL4k2EgJyGuIAdxz0k/XGO96zZnsFoqg5GUQzEqEHLdErQ/ytCcf3uKDMbmjfG1
 2ohRJ0x0ZAAfj+UNQW5cGqo+ZSnxHEgmn1ye0WEIWBaWS0RLAqSYz+mX0ca55mpbw9Jy
 KxCEnR3bedGdBGg9ktygG/7RxCR6FzO9yzZL/eZlSBhXOSJ/CbvUEmDkk23WffTG/NCc
 JUmiVpM0xSo7geO0TD77rNUR56aUkmH/A1Jw8TznCP6j2+HO+3BhPMWIuiWNFeFvpY7h
 BK4A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=cWfWKKhMhHJ2GM9SVlNL6YKrOJiIScK4THLuUDEgLvY=;
 b=cVcENTUpgKCA/QrMCoxrqjBzLZSwo99OKO/sS2PK3QEQrED/Cbmci2MNuFsG04nv+Z
 zYXNJM7EWOXDYQbe/uX/CqE3ACqDwwjZW9h1YlUki1eosewyZENisHGGgdYoXKM3sZ6h
 olz2LwnLShsKW1aENvPk/eiwDGJwiU7gpjIaqsuFVabGQTjHH0XRskChqH2y8r8P+LkM
 z3sEp4ylIceC+63w0XW+X1i/p9w3MG7A4utF1OCNJ8yu7dGLbBuPqyyIBafwpD6q2oQk
 9m7tajDasqQ/l3fBdHGNXSlTuHOrQkoFMEr98hiOzzwDAh9GRb9lngdq5seWZsmxoxFy
 f7ZQ==
X-Gm-Message-State: AOAM531UlSR309+dxDSr+s7qYBGMe6Y0JmfFf7Dc/DyQM4IZgCQ6o8R9
 zmCdwfVqZZalneB3EBYSC2wynyi8sb0=
X-Google-Smtp-Source: ABdhPJwze6UUxmh26e5MJVxLVOcmBhFnaaxmZshvd5OiuiwW4yUdJT5KL3psc+v5PmMA9lEgUul65A==
X-Received: by 2002:a1c:4456:: with SMTP id r83mr10830697wma.108.1606671342716; 
 Sun, 29 Nov 2020 09:35:42 -0800 (PST)
Received: from localhost.localdomain
 (host-79-54-131-134.retail.telecomitalia.it. [79.54.131.134])
 by smtp.gmail.com with ESMTPSA id c9sm22613231wrp.73.2020.11.29.09.35.27
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sun, 29 Nov 2020 09:35:38 -0800 (PST)
From: nixo <anothersms@HIDDEN>
X-Google-Original-From: nixo <nicolo@HIDDEN>
To: 44926 <at> debbugs.gnu.org
Subject: [PATCH v2 03/15] gnu: Add dart-2.0.0-dev.8.0.
Date: Sun, 29 Nov 2020 18:34:02 +0100
Message-Id: <20201129173414.8984-3-nicolo@HIDDEN>
X-Mailer: git-send-email 2.29.2
In-Reply-To: <20201129173414.8984-1-nicolo@HIDDEN>
References: <20201129173414.8984-1-nicolo@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Debbugs-Envelope-To: 44926
X-Mailman-Approved-At: Sun, 29 Nov 2020 12:39:57 -0500
Cc: nixo <nicolo@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

* gnu/packages/dart.scm (dart-2.0.0-dev.8.0): New variable.
* gnu/packages/patches (dart-2.0.0-dev.8-disable-analytics.patch): New file.
* gnu/local.mk: Add it.
---
 gnu/local.mk                                  |      1 +
 gnu/packages/dart.scm                         |    391 +-
 .../dart-2.0.0-dev.8-disable-analytics.patch  | 192411 +++++++++++++++
 3 files changed, 192801 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics=
.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 359015415c..ee4ade0139 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -905,6 +905,7 @@ dist_patch_DATA =3D						\
   %D%/packages/patches/cursynth-wave-rand.patch			\
   %D%/packages/patches/cvs-CVE-2017-12836.patch		\
   %D%/packages/patches/cyrus-sasl-ac-try-run-fix.patch		\
+  %D%/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch	\
   %D%/packages/patches/date-output-pkg-config-files.patch	\
   %D%/packages/patches/datefudge-gettimeofday.patch		\
   %D%/packages/patches/dbacl-include-locale.h.patch		\
diff --git a/gnu/packages/dart.scm b/gnu/packages/dart.scm
index f8af8696bc..07e3dcee21 100644
--- a/gnu/packages/dart.scm
+++ b/gnu/packages/dart.scm
@@ -18,10 +18,20 @@
=20
 (define-module (gnu packages dart)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix build utils)
+  #:use-module (guix build-system gnu)
   #:use-module (guix git-download)
   #:use-module (guix packages)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages build-tools)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages golang)
+  #:use-module (gnu packages libunwind)
+  #:use-module (gnu packages ninja)
+  #:use-module (gnu packages nss)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz))
=20
 (define* (dart-pkg name tag hash #:optional
                    (url (string-append
@@ -39,3 +49,380 @@
                         tag)))
     (sha256 (base32 hash))))
=20
+(define-public dart-2.0.0-dev.8.0
+  (package
+    (name "dart")
+    (version "2.0.0-dev.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dart-lang/sdk")
+             (commit version)))
+       (file-name (string-append name "-" version))
+       (sha256
+        (base32
+         "17870yvi4flcraw3ihs694g4r0fmmmj2qmz9n4r311pizxzagjkk"))
+       (modules '((guix build utils)))
+       ;; Delete a folder containing a pre-build windows .dll
+       (snippet
+        '(delete-file-recursively "build/win"))
+       (patches
+        (search-patches "dart-2.0.0-dev.8-disable-analytics.patch"))))
+    (arguments
+     `(#:configure-flags
+       ;; FIXME: Do not hardcode the target? Don't know if when fixed this
+       ;; package will work on other targets
+       (list "host_cpu=3D\"x64\""
+             "target_cpu=3D\"x64\""
+             "dart_target_arch=3D\"x64\""
+             "target_os=3D\"linux\""
+             "dart_runtime_mode=3D\"develop\""
+             "dart_debug=3Dfalse"
+             "is_debug=3Dfalse"
+             "is_release=3Dtrue"
+             "is_product=3Dfalse"
+             "is_clang=3Dfalse"
+             "use_goma=3Dfalse"
+             "goma_dir=3D\"None\""
+             "dart_use_tcmalloc=3Dtrue"
+             "dart_use_fallback_root_certificates=3Dtrue"
+             "dart_zlib_path =3D \"//runtime/bin/zlib\""
+             "dart_platform_sdk=3Dfalse"
+             "is_asan=3Dfalse"
+             "is_msan=3Dfalse"
+             "is_tsan=3Dfalse"
+             "dart_snapshot_kind=3D\"app-jit\"")
+       #:phases
+       (modify-phases %standard-phases
+         ;; no check target.  Tests are available, but I should check how =
to
+         ;; run them
+         (delete 'check)
+         (add-before 'configure 'add-git-revision
+           (lambda _
+             (with-output-to-file "tools/GIT_REVISION"
+               (lambda () (display "0")))))
+         (add-before 'configure 'add-third-party-src
+           ;; Copy some deps to third_party, as required by the build syst=
em
+           ;; TODO: LINK THEM INSTEAD OF COPYING
+           (lambda* (#:key inputs #:allow-other-keys)
+             (use-modules (ice-9 regex) (ice-9 match))
+             ;; place pkg inputs in the right third_party folder
+             ;; (either pkg or pkgtested) based on their input name
+             (define (dart-copy-deps-to-third-party-dir pkgdep)
+               (copy-recursively
+                (assoc-ref inputs pkgdep)
+                (let* ((out "third_party/")
+                       (text
+                        (if (string-match "pkgtested" pkgdep)
+                            (string-append out "pkg_tested/"
+                             (regexp-substitute
+                              #f
+                              (string-match "dart-pkgtested-" pkgdep)
+                              'post))
+                            (string-append out "pkg/"
+                                           (regexp-substitute
+                                            #f
+                                            (string-match "dart-pkg-" pkgd=
ep)
+                                            'post)))))
+                  (if (string-match "-" text)
+                      (regexp-substitute/global
+                       #f "-" text 'pre "_" 'post)
+                      text))))
+             (map (lambda (input)
+                    (let ((pkg (car input)))
+                      ;; Copy only dependencies starting with "dart-"
+                      (when (string-match "dart-" pkg)
+                        (dart-copy-deps-to-third-party-dir pkg))))
+                  inputs)
+             ;; Do the same for other required packages
+             (copy-recursively (assoc-ref inputs "boringssl")
+                               "third_party/boringssl/src")
+             (copy-recursively (assoc-ref inputs "gperftools")
+                               "third_party/tcmalloc/gperftools")
+             (copy-recursively (assoc-ref inputs "root-certificates")
+                               "third_party/root_certificates")
+             (copy-recursively (assoc-ref inputs "zlib")
+                               "third_party/zlib")
+             (copy-recursively (assoc-ref inputs "observatory-pub-packages=
")
+                               "third_party/observatory_pub_packages")))
+         (add-after 'add-third-party-src 'generate-third-party-build-files
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "third_party/boringssl"
+               ;; go requires home to be set
+               (setenv "HOME" "/tmp/")
+               (invoke
+                (string-append (assoc-ref inputs "python") "/bin/python2")
+                "src/util/generate_build_files.py" "gn")
+               (map
+                (lambda (file)
+                  (copy-file
+                   (string-append (assoc-ref inputs "boringssl-gen") "/" f=
ile)
+                   file))
+                '("BUILD.gn" "BUILD.generated.gni")))))
+         (add-before 'configure 'enable-dtags
+           ;; adds the RUNPATH
+           (lambda* (#:key inputs propagated-inputs #:allow-other-keys)
+             (substitute* "build/config/gcc/BUILD.gn"
+               (("disable-new-dtags") "enable-new-dtags"))))
+         (replace 'configure
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (let ((args (string-join configure-flags " ")))
+               (mkdir "out")
+               ;; Generate ninja build files.
+               (invoke "gn" "gen" "out/Release"
+                       (string-append "--args=3D" args))
+               ;; Print the full list of supported arguments as well as
+               ;; their current status for convenience.
+               (format #t "Dumping configure flags...\n")
+               (invoke "gn" "args" "out/Release" "--list"))))
+         (replace 'build
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (invoke "ninja" "all" "-C" "out/Release")))
+         ;; no install phase
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; This should depend on the architecture as before
+               (copy-recursively "out/Release/dart-sdk/" out)))))))
+    (inputs
+     `(("zlib"
+        ,(dart-pkg
+          "zlib" "c3d0a6190f2f8c924a05ab6cc97b8f975bddd33f"
+          "0fr3h9krramy0jclbacjnwbn0lzvjm6b809llhaz56mbd90i4yl4"
+          "https://chromium.googlesource.com/chromium/src/third_party/zlib=
"))
+       ("libunwind" ,libunwind)
+       ("nspr" ,nspr)
+       ("nss" ,nss)
+       ("boringssl"
+        ,(dart-pkg
+          "boringssl" "d519bf6be0b447fb80fbc539d4bff4479b5482a2"
+          "137q647ha8x770wv3jj2kgjv3lj9qjcv191m51vkp3a7zqhhaknv"
+          "https://boringssl.googlesource.com/boringssl"))
+       ("boringssl-gen"
+        ,(dart-pkg "boringssl-gen" "d2b56d1b7657e52eb5a1f075968c773aa3e536=
14"
+                   "1pn2hn0i9fwd27i695q4av3bymm11pmydlbv4hcafslhggq0md19"))
+       ("gperftools"
+        ,(dart-pkg "gperftools" "02eeed29df112728564a5dde6417fa4622b57a06"
+                   "1j5yx7v1g8ljzv5hs2452q736gdf1xm5x9w5d1csm5bjlryxaykm"
+                   "https://github.com/gperftools/gperftools"))
+       ("root-certificates"
+        ,(dart-pkg "root-certificates"
+          "16ef64be64c7dfdff2b9f4b910726e635ccc519e"
+          "1kxadamhz03dlvm3j5xxqjgn0jasgskyjx11ysm3a431ma5j9182"))
+       ("observatory-pub-packages"
+        ,(dart-pkg "observatory-pub-packages"
+                   "4c282bb240b68f407c8c7779a65c68eeb0139dc6"
+                   "0p09r24q37i4hyz3n2j75lx9a252zr81jcynap61nfh415xlcv3z"))
+       ("dart-pkg-args"
+        ,(dart-pkg "args" "0.13.7"
+                   "0y3f1kaplxmanw5gqm84l9wqx2nl1vrk11m8kdqqwc7n73fc4kdl"))
+       ("dart-pkg-async"
+        ,(dart-pkg "async" "2.0.0"
+                   "1r0fqdh633426p2h9ynb126s58l30jj3mj0bzvjigbklam7vfjgc"))
+       ("dart-pkg-barback"
+        ,(dart-pkg "barback" "0.15.2+13"
+                   "0n532b2as62nkzq7w9jaxk6gkl78il1kq3q0s1xgcdazmbzx5fb1"))
+       ("dart-pkg-bazel-worker"
+        ,(dart-pkg "bazel-worker" "v0.1.4"
+                   "1cc4jvx9qba76ws2l7ijr8kvl8yydfak965gwrgb88f2r1qp2q46"))
+       ("dart-pkg-charcode"
+        ,(dart-pkg "charcode" "v1.1.1"
+                   "0907828insqsr0ffyz4n2xns4qc77brnm7zv0a6965b53b84pk8b"))
+       ("dart-pkg-cli-util"
+        ,(dart-pkg "cli-util" "0.1.2+1"
+                   "09nqdkyipnb0734ci554gxrl9cic528mlhfad9wibcg6kx7y6gra"))
+       ("dart-pkg-collection"
+        ,(dart-pkg "collection" "1.14.3"
+                   "1rdgvrj67vj27k2052h5k31xc6rays4p4j27a122c1ikxnb4i3bh"))
+       ("dart-pkg-convert"
+        ,(dart-pkg "convert" "2.0.1"
+                   "1v0b6vgzp6i37jja2d2aim6dmig8xfjhi8b553a1909n5pzqxp2g"))
+       ("dart-pkg-crypto"
+        ,(dart-pkg "crypto" "2.0.2+1"
+                   "12v5rw189vrk2n2ryxkf8qcbdx8hf3bf33i552439lzhz0czkvcq"))
+       ("dart-pkg-csslib"
+        ,(dart-pkg "csslib" "0.14.1"
+                   "0zlmbg6vwwc4cha8l2xv73klwzdqg6b43qmhlca0f62lr7k6014w"))
+       ("dart-pkg-dart2js-info"
+        ,(dart-pkg "dart2js_info" "0.5.5+1"
+                   "05rdp96n9rxkjyw7lmn3a9hlbsaxpdn8wp8qnsfjmqv3i8vcypvj"))
+       ("dart-pkg-dartdoc"
+        ,(dart-pkg "dartdoc" "v0.13.0+3"
+                   "1v85510bvjhllr00hgabvn737bh791x1m14qsv7zbxhqnsy2jafj"))
+       ("dart-pkg-fixnum"
+        ,(dart-pkg "fixnum" "0.10.5"
+                   "01j7sj4mnkaxam1bpmhvlxl817dcck92xzpk66m7qbccm58c0giw"))
+       ("dart-pkg-func"
+        ,(dart-pkg "func" "25eec48146a58967d75330075ab376b3838b18a8"
+                   "0xcfnca5sa5hc62g14xx11qqv9xjamsaqqn1cmldb917qnxb7lkk"))
+       ("dart-pkg-glob"
+        ,(dart-pkg "glob" "1.1.5"
+                   "1lbd7lkxvw0q5zvz2hxvc035mxakmzcq08lwwr25v56s9ybavh93"))
+       ("dart-pkg-html"
+        ,(dart-pkg "html" "0.13.2"
+                   "0w0gn8camhqhclmlf5g1mp03nssl2gyghqkmcz0zrvkicc1d5r1s"))
+       ("dart-pkg-http"
+        ,(dart-pkg "http" "0.11.3+14"
+                   "1a1k8m2gp8a02q9bw40bqj7ad9yx44ap0w4xr7s26lridi7isylc"))
+       ("dart-pkg-http-multi-server"
+        ,(dart-pkg "http_multi_server" "2.0.4"
+                   "09x4alr181p6s3zxqflgmhglglxr4aaaz6ys7pp0r715dq50qz4n"))
+       ("dart-pkg-http-parser"
+        ,(dart-pkg "http-parser" "3.1.1"
+                   "18p8cqanxbxsxk3wwvisgb1bxdy83vkh3l11h0cys7gxrz6z2g12"))
+       ("dart-pkg-http-throttle"
+        ,(dart-pkg "http-throttle" "1.0.1"
+                   "1q0pv1px5rd7zjd799pnq5zcr825ya1yqnxyvdr91rlga621hdbj"))
+       ("dart-pkg-intl"
+        ,(dart-pkg "intl" "0.15.2"
+                   "0vd0a3pqmfs03kf12mmg0rrpian0f35ja0x332mr7cx8h9d7pmqx"))
+       ("dart-pkg-isolate"
+        ,(dart-pkg "isolate" "1.1.0"
+                   "12m97zhm8qwpraf6nyvj1nawssygrwz0zka7843ayj3vxx6j34xr"))
+       ("dart-pkg-json-rpc-2"
+        ,(dart-pkg "json_rpc_2" "2.0.4"
+                   "1q2x6gy7l7agr930k4r6vncfzjcnp43chq9fwxfa0p0nyccnixz3"))
+       ("dart-pkg-linter"
+        ,(dart-pkg "linter" "0.1.39"
+                   "0wfd6bzfny5bis3r2ygj89kyd2gl618x7hk06qp4h9nvbpsvvz0n"))
+       ("dart-pkg-logging"
+        ,(dart-pkg "logging" "0.11.3+1"
+                   "180w376jz2wmfijcfg07ygfpc6i68i4zibw2421xvwcjhi0q07kv"))
+       ("dart-pkg-markdown"
+        ,(dart-pkg "markdown" "0.11.4"
+                   "009qw47k3lrl2fkdn378l41dga493alspywrk3z93yy1pqaf1j5n"))
+       ("dart-pkg-matcher"
+        ,(dart-pkg "matcher" "0.12.1+4"
+                   "1q0hbcc5ys5zpml7blsyj0d1f42w67vr6x19vxg34sra3bv0h2xx"))
+       ("dart-pkg-mime"
+        ,(dart-pkg "mime" "0.9.4"
+                   "1bh4xla0qlaz9cm1qgxqq57l76b2zh5qqk9pax7sc57s79zi1nmz"))
+       ("dart-pkg-mockito"
+        ,(dart-pkg "mockito" "2.0.2"
+                   "1q1zlv3fwfjbmwm141wj19vglx15s8xkqzdsqz9hhv6gg7h45gsl"))
+       ("dart-pkg-mustache4dart"
+        ,(dart-pkg "mustache4dart" "v2.1.0"
+                   "0wsmg2xvpp2h9rqcg65icymh2s9hifq6v700mni65ky33dah9ji1"
+                   "https://github.com/valotas/mustache4dart"))
+       ("dart-pkg-oauth2"
+        ,(dart-pkg "oauth2" "1.1.0"
+                   "1519799j61sdka6p1n6ba768v5a8q4q9w6y957dzqigwaf19p9v5"))
+       ("dart-pkg-path"
+        ,(dart-pkg "path" "1.4.2"
+                   "0ld39rpzla8wd4c2kx1kycdk66cwypklxki58nb18959j2749fbi"))
+       ("dart-pkg-plugin"
+        ,(dart-pkg "plugin" "0.2.0"
+                   "10sgglzpwr9hkdhr6r4d1kvazv49zdhc9cr2asxdk5531347kk9m"))
+       ("dart-pkg-pool"
+        ,(dart-pkg "pool" "1.3.3"
+                   "1cljnzsrbjgkif8rj1vxrzp5rz2xak265pasachdcg4yh2hl0y7d"))
+       ("dart-pkg-protobuf"
+        ,(dart-pkg "protobuf" "0.5.4"
+                   "1wjb8da0da0gda0f83dl2dvl5w4a6gvq5xcg1yrgg3xjs7gzy8dd"))
+       ("dart-pkg-pub"
+        ,(dart-pkg "pub" "cde958f157d3662bf968bcbed05580d5c0355e89"
+                   "1g1cw4c0811l3pvc80fvb7s04shzxvxrcb25195s7kjjfiivgqi4"))
+       ("dart-pkg-pub-semver"
+        ,(dart-pkg "pub-semver" "1.3.2"
+                   "15s6zn2qyyfc5lf8ip5h8j3sq5miz4vrzxbgbwi5vv91d53miia8"))
+       ("dart-pkg-quiver"
+        ,(dart-pkg "quiver" "0.25.0"
+                   "02wqrk266s0ias9lfy7l5dh9ni2r697n3z42h4sgzxy7qg4rip24"
+                   "https://github.com/google/quiver-dart"))
+       ("dart-pkg-resource"
+        ,(dart-pkg "resource" "af5a5bf65511943398146cf146e466e5f0b95cb9"
+                   "1jq4bmg65jrpyqxcvbp87d5qqpgmv5ylfz3w1djzimq5jhr9k4vn"))
+       ("dart-pkg-scheduled-test"
+        ,(dart-pkg "scheduled-test" "0.12.11+1"
+                   "1xk66f68m443yig5672p0dpack2c0kpkyk2d7f8iaq22q5zq7h1w"))
+       ("dart-pkg-shelf"
+        ,(dart-pkg "shelf" "0.6.8"
+                   "0vl4m47yhjvc1nynyzc42bks4mzv877vsy7fbcv9w2fjh05sxhb9"))
+       ("dart-pkg-shelf-packages-handler"
+        ,(dart-pkg "shelf-packages-handler" "1.0.3"
+                   "0iccfa713jyg7bb7fx144i5rl0afyfxvb3pi56igw2gdwklq4yck"))
+       ("dart-pkg-shelf-static"
+        ,(dart-pkg "shelf-static" "0.2.4"
+                   "1gfyjqvv13d3zpnaahv5fi601ag7mr8crm94xawlvgvpqgpl0hsh"))
+       ("dart-pkg-shelf-web-socket"
+        ,(dart-pkg "shelf-web-socket" "0.2.1"
+                   "18krh9bnbshwjjl47k15x9g3r7s5k0yichvn3gdsddjqjgp6vfp8"))
+       ("dart-pkg-source-map-stack-trace"
+        ,(dart-pkg "source-map-stack-trace" "1.1.4"
+                   "1cpyq1vdfc623k8cdx673v2kkv112hzsrsyaxd8dd82v23caglva"))
+       ("dart-pkg-source-maps"
+        ,(dart-pkg "source-maps" "0.10.4"
+                   "11dmncxgv8q40am73dxlxgzkfaanvgc9p3lds77m96mb1k27zbkf"))
+       ("dart-pkg-source-span"
+        ,(dart-pkg "source-span" "1.4.0"
+                   "0gpa15p5rcilgl0paqa7f9fkiks7kyalzl2r0sd37m4cry9cf0vz"))
+       ("dart-pkg-stack-trace"
+        ,(dart-pkg "stack-trace" "1.8.2"
+                   "0n21n2dv371bfcw6q83xwb8x26d1rd49cvx5qzm8mi0006h9frzs"))
+       ("dart-pkg-stream-channel"
+        ,(dart-pkg "stream-channel" "1.6.2"
+                   "02ixi6vsja2cc22jcflp89v5wsbj45fl23p0sgaayqaj6l1jcxm1"))
+       ("dart-pkg-string-scanner"
+        ,(dart-pkg "string-scanner" "1.0.2"
+                   "13hfnc704c9qipcvjinbv1hbq57hs5l2f68kyw282dlrcbbwwksy"))
+       ("dart-pkg-term-glyph"
+        ,(dart-pkg "term-glyph" "1.0.0"
+                   "1nxqg345k2zh0yn498mxxdi7v1q3651z5invv0llfvs17ly2h2pz"))
+       ("dart-pkg-test"
+        ,(dart-pkg "test" "0.12.24+6"
+                   "1xkmvwx30zm5ci1gn53hf6zrxymlq9cn9waa00k3ihxbd64mxg1k"))
+       ("dart-pkg-test-reflective-loader"
+        ,(dart-pkg "test-reflective-loader" "0.1.0"
+                   "1qmbayg6js96lcy9s6grly1y6rh9x5mbyqygnr58zsdypzvhr4hr"))
+       ("dart-pkg-tuple"
+        ,(dart-pkg "tuple" "v1.0.1"
+                   "0khkwq1blc90lgdcy4i8ng4nzppmhg31nziw4sc36axwbwdnpc86"))
+       ("dart-pkg-typed-data"
+        ,(dart-pkg "typed-data" "1.1.3"
+                   "1zr9la34lib0rdfdf0539hdai2j71kf3s4ynsal7hw4pqvkdwi72"))
+       ("dart-pkg-unittest"
+        ,(dart-pkg "test" "0.11.7"
+                   "1xbx2i2glmqlc3cz8x91anhf8d4hsr3bq9j53qliawz8j6q9anf8"))
+       ("dart-pkg-usage"
+        ,(dart-pkg "usage" "3.3.0"
+                   "0r8d0q4ij42c7axclwns61cyrxpmk1qpggqfiqfm5vbmh8gpfm3b"))
+       ("dart-pkg-utf"
+        ,(dart-pkg "utf" "0.9.0+3"
+                   "07jppjvg8bc8plzq910b8ld32l6x35i8qwy0mdqimydjjaslj78f"))
+       ("dart-pkg-watcher"
+        ,(dart-pkg "watcher" "0.9.7+4"
+                   "09jpk98qb5j5250sr9r9ic17gj741yjy1p2j50zzl47a9wydfjly"))
+       ("dart-pkg-web-socket-channel"
+        ,(dart-pkg "web-socket-channel" "1.0.6"
+                   "1phb2n3n6npzwl08nnp1aggcjmvwx516b816q4hsx8w190yr4f86"))
+       ("dart-pkg-yaml"
+        ,(dart-pkg "yaml" "2.1.12"
+                   "0m2xr36vd2v3yirv1jb5v3dncsczn8n34s9fmqcm2ld979b4vanm"))
+       ("dart-pkgtested-dart-style"
+        ,(dart-pkg "dart-style" "1.0.7"
+                   "0qym7z5n4w4jy75fnvcyza3hw0nrm8kli5mv65drr16f8pkr0lcg"))
+       ("dart-pkgtested-package-config"
+        ,(dart-pkg "package-config" "1.0.3"
+                   "03w67nb1dhi2yqb63z1301p88hjws1d8azmw8m5ap4zapqdbhzgn"))
+       ("dart-pkgtested-package-resolver"
+        ,(dart-pkg "package-resolver" "1.0.2+1"
+                   "0qs7zmxjwqqjkq6mqnz8b3rj142hyz1x0v1innh8n3bwmljgp3w9")=
)))
+    (native-inputs
+     `(("python" ,python-2)
+       ("python2-gyp" ,python2-gyp)
+       ("perl" ,perl)
+       ("go" ,go)
+       ("gn" ,gn-for-dart-bootstrap)
+       ("ninja" ,ninja)
+       ("gcc" ,gcc-6)))
+    (build-system gnu-build-system)
+    (home-page "https://dart.dev")
+    (synopsis "The Dart SDK, including the VM, dart2js and core libraries")
+    (description "Dart is a programming language which is:
+@enumerate
+@item Optimized for UI
+@item Supports hot reload
+@item Supported both on desktop and on mobile
+@end")
+    (license license:bsd-3)))
diff --git a/gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch =
b/gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch
new file mode 100644
index 0000000000..763e5503ea
--- /dev/null
+++ b/gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch
@@ -0,0 +1,192411 @@
+From f9843f7af84da47141a2721972c7859cdddfa36f Mon Sep 17 00:00:00 2001
+From: nixo <nicolo@HIDDEN>
+Date: Tue, 24 Nov 2020 16:59:00 +0100
+Subject: [PATCH] disable analytics
+
+---
+ BUILD.gn                                      |     7 -
+ pkg/analysis_server/AUTHORS                   |     6 -
+ pkg/analysis_server/CHANGELOG.md              |     5 -
+ pkg/analysis_server/CONTRIBUTING.md           |    40 -
+ pkg/analysis_server/LICENSE                   |    26 -
+ pkg/analysis_server/README.md                 |    22 -
+ pkg/analysis_server/analysis_options.yaml     |     8 -
+ pkg/analysis_server/benchmark/benchmarks.dart |   239 -
+ .../benchmark/integration/README.md           |    69 -
+ .../benchmark/integration/driver.dart         |   315 -
+ .../integration/input_converter.dart          |   399 -
+ .../instrumentation_input_converter.dart      |   146 -
+ .../benchmark/integration/local_runner.dart   |    91 -
+ .../integration/log_file_input_converter.dart |    82 -
+ .../benchmark/integration/main.dart           |   246 -
+ .../benchmark/integration/operation.dart      |   236 -
+ .../benchmark/perf/analysis_timing_tests.dart |   161 -
+ .../benchmark/perf/benchmark_angular.dart     |   115 -
+ .../benchmark/perf/benchmark_flutter.dart     |   216 -
+ .../benchmark/perf/benchmark_scenario.dart    |   310 -
+ .../benchmark/perf/benchmarks_impl.dart       |   187 -
+ .../perf/completion_timing_tests.dart         |    85 -
+ .../benchmark/perf/memory_tests.dart          |   133 -
+ .../benchmark/perf/performance_tests.dart     |    76 -
+ pkg/analysis_server/benchmark/readme.md       |    35 -
+ pkg/analysis_server/bin/server.dart           |    13 -
+ pkg/analysis_server/doc/api.html              |  4725 -----
+ .../occurrences/occurrences_core.dart         |    17 -
+ .../lib/plugin/edit/assist/assist_core.dart   |    90 -
+ .../lib/plugin/edit/assist/assist_dart.dart   |   107 -
+ .../lib/plugin/edit/fix/fix_core.dart         |    88 -
+ .../lib/plugin/edit/fix/fix_dart.dart         |    73 -
+ .../lib/plugin/protocol/protocol_dart.dart    |   216 -
+ .../lib/protocol/protocol.dart                |   673 -
+ .../lib/protocol/protocol_constants.dart      |   258 -
+ .../lib/protocol/protocol_generated.dart      | 15802 ----------------
+ .../lib/src/analysis_logger.dart              |    55 -
+ .../lib/src/analysis_server.dart              |  1557 --
+ .../lib/src/channel/byte_stream_channel.dart  |   175 -
+ .../lib/src/channel/channel.dart              |   150 -
+ pkg/analysis_server/lib/src/collections.dart  |    71 -
+ .../src/computer/computer_closingLabels.dart  |   105 -
+ .../lib/src/computer/computer_highlights.dart |   737 -
+ .../src/computer/computer_highlights2.dart    |   834 -
+ .../lib/src/computer/computer_hover.dart      |   140 -
+ .../lib/src/computer/computer_outline.dart    |   488 -
+ .../lib/src/computer/computer_overrides.dart  |   237 -
+ .../computer/import_elements_computer.dart    |   433 -
+ .../computer/imported_elements_computer.dart  |   129 -
+ .../lib/src/computer/new_notifications.dart   |    45 -
+ pkg/analysis_server/lib/src/constants.dart    |   100 -
+ .../lib/src/context_manager.dart              |  1817 --
+ .../lib/src/domain_abstract.dart              |    78 -
+ .../lib/src/domain_analysis.dart              |   432 -
+ .../lib/src/domain_analytics.dart             |    60 -
+ .../lib/src/domain_completion.dart            |   298 -
+ .../lib/src/domain_diagnostic.dart            |    75 -
+ .../lib/src/domain_execution.dart             |   147 -
+ pkg/analysis_server/lib/src/domain_kythe.dart |   114 -
+ .../lib/src/domain_server.dart                |    74 -
+ .../domains/analysis/implemented_dart.dart    |    79 -
+ .../src/domains/analysis/navigation_dart.dart |   360 -
+ .../lib/src/domains/analysis/occurrences.dart |    33 -
+ .../domains/analysis/occurrences_dart.dart    |    63 -
+ .../lib/src/edit/edit_domain.dart             |  1062 --
+ .../lib/src/operation/operation_analysis.dart |   164 -
+ .../lib/src/plugin/notification_manager.dart  |   365 -
+ .../lib/src/plugin/plugin_locator.dart        |   105 -
+ .../lib/src/plugin/plugin_manager.dart        |  1102 --
+ .../lib/src/plugin/plugin_watcher.dart        |   134 -
+ .../lib/src/plugin/request_converter.dart     |    46 -
+ .../lib/src/plugin/result_collector.dart      |   124 -
+ .../lib/src/plugin/result_converter.dart      |    46 -
+ .../lib/src/plugin/result_merger.dart         |   846 -
+ .../lib/src/protocol/protocol_internal.dart   |   336 -
+ .../lib/src/protocol_server.dart              |   283 -
+ .../completion/completion_core.dart           |    86 -
+ .../completion/dart/completion_dart.dart      |    97 -
+ .../lib/src/search/element_references.dart    |    93 -
+ .../lib/src/search/search_domain.dart         |   211 -
+ .../lib/src/search/type_hierarchy.dart        |   202 -
+ .../lib/src/server/diagnostic_server.dart     |    16 -
+ .../lib/src/server/driver.dart                |   640 -
+ .../lib/src/server/http_server.dart           |   169 -
+ .../lib/src/server/stdio_server.dart          |    40 -
+ .../services/completion/completion_core.dart  |    75 -
+ .../completion/completion_performance.dart    |   117 -
+ .../completion/dart/arglist_contributor.dart  |   340 -
+ .../dart/combinator_contributor.dart          |    41 -
+ .../completion/dart/common_usage_sorter.dart  |   127 -
+ .../dart/common_usage_sorter.g.dart           |   427 -
+ .../completion/dart/completion_manager.dart   |   278 -
+ .../completion/dart/contribution_sorter.dart  |    24 -
+ .../dart/field_formal_contributor.dart        |    78 -
+ .../dart/imported_reference_contributor.dart  |    86 -
+ .../dart/inherited_reference_contributor.dart |   134 -
+ .../completion/dart/keyword_contributor.dart  |   706 -
+ .../completion/dart/label_contributor.dart    |   156 -
+ .../dart/library_member_contributor.dart      |    73 -
+ .../dart/library_prefix_contributor.dart      |    48 -
+ .../dart/local_constructor_contributor.dart   |   161 -
+ .../dart/local_library_contributor.dart       |   197 -
+ .../dart/local_reference_contributor.dart     |   517 -
+ .../dart/named_constructor_contributor.dart   |    61 -
+ .../completion/dart/override_contributor.dart |   150 -
+ .../dart/static_member_contributor.dart       |   131 -
+ .../completion/dart/suggestion_builder.dart   |   302 -
+ .../dart/type_member_contributor.dart         |   411 -
+ .../completion/dart/uri_contributor.dart      |   242 -
+ .../services/completion/dart/utilities.dart   |   237 -
+ .../dart/variable_name_contributor.dart       |    99 -
+ .../postfix/postfix_completion.dart           |   567 -
+ .../completion/statement/design_notes.md      |   144 -
+ .../statement/statement_completion.dart       |  1237 --
+ .../lib/src/services/correction/assist.dart   |   126 -
+ .../services/correction/assist_internal.dart  |  2617 ---
+ .../lib/src/services/correction/fix.dart      |   260 -
+ .../src/services/correction/fix_internal.dart |  3284 ----
+ .../src/services/correction/levenshtein.dart  |   133 -
+ .../services/correction/name_suggestion.dart  |   238 -
+ .../src/services/correction/namespace.dart    |   183 -
+ .../correction/organize_directives.dart       |   250 -
+ .../correction/selection_analyzer.dart        |   142 -
+ .../src/services/correction/sort_members.dart |   504 -
+ .../services/correction/source_buffer.dart    |    99 -
+ .../correction/statement_analyzer.dart        |   230 -
+ .../lib/src/services/correction/status.dart   |   179 -
+ .../lib/src/services/correction/strings.dart  |   263 -
+ .../lib/src/services/correction/util.dart     |  1530 --
+ .../src/services/kythe/kythe_visitors.dart    |  1407 --
+ .../lib/src/services/kythe/schema.dart        |    82 -
+ .../refactoring/convert_getter_to_method.dart |   127 -
+ .../refactoring/convert_method_to_getter.dart |   143 -
+ .../services/refactoring/extract_local.dart   |   699 -
+ .../services/refactoring/extract_method.dart  |  1350 --
+ .../services/refactoring/inline_local.dart    |   213 -
+ .../services/refactoring/inline_method.dart   |   880 -
+ .../refactoring/naming_conventions.dart       |   263 -
+ .../src/services/refactoring/refactoring.dart |   444 -
+ .../refactoring/refactoring_internal.dart     |   116 -
+ .../lib/src/services/refactoring/rename.dart  |   148 -
+ .../refactoring/rename_class_member.dart      |   345 -
+ .../refactoring/rename_constructor.dart       |   131 -
+ .../services/refactoring/rename_import.dart   |   137 -
+ .../services/refactoring/rename_label.dart    |    45 -
+ .../services/refactoring/rename_library.dart  |    48 -
+ .../services/refactoring/rename_local.dart    |   171 -
+ .../refactoring/rename_unit_member.dart       |   263 -
+ .../src/services/search/element_visitors.dart |    63 -
+ .../lib/src/services/search/hierarchy.dart    |   162 -
+ .../src/services/search/search_engine.dart    |   171 -
+ .../search/search_engine_internal.dart        |   238 -
+ .../lib/src/socket_server.dart                |    90 -
+ .../lib/src/status/ast_writer.dart            |   243 -
+ .../lib/src/status/diagnostics.dart           |  1229 --
+ .../lib/src/status/element_writer.dart        |   179 -
+ pkg/analysis_server/lib/src/status/pages.dart |   189 -
+ .../lib/src/status/tree_writer.dart           |   123 -
+ .../lib/src/utilities/documentation.dart      |    67 -
+ .../lib/src/utilities/flutter.dart            |   267 -
+ .../lib/src/utilities/null_string_sink.dart   |    13 -
+ .../lib/src/utilities/profiling.dart          |    89 -
+ .../lib/src/watch_manager.dart                |   285 -
+ pkg/analysis_server/lib/starter.dart          |    49 -
+ pkg/analysis_server/pubspec.yaml              |    27 -
+ .../test/abstract_context.dart                |   172 -
+ .../test/abstract_single_unit.dart            |   144 -
+ .../test/analysis/get_errors_test.dart        |   150 -
+ .../test/analysis/get_hover_test.dart         |   562 -
+ .../test/analysis/get_navigation_test.dart    |   250 -
+ .../notification_analysis_options_test.dart   |   334 -
+ .../notification_analyzedFiles_test.dart      |   133 -
+ .../notification_closingLabels_test.dart      |   101 -
+ .../analysis/notification_errors_test.dart    |   146 -
+ .../notification_highlights_test.dart         |   960 -
+ .../notification_highlights_test2.dart        |  1111 --
+ .../notification_implemented_test.dart        |   431 -
+ .../notification_navigation_test.dart         |  1031 -
+ .../notification_occurrences_test.dart        |   257 -
+ .../analysis/notification_outline_test.dart   |   135 -
+ .../analysis/notification_overrides_test.dart |   577 -
+ .../test/analysis/reanalyze_test.dart         |    75 -
+ .../analysis/set_priority_files_test.dart     |   131 -
+ .../test/analysis/test_all.dart               |    51 -
+ .../test/analysis/update_content_test.dart    |   266 -
+ .../test/analysis_abstract.dart               |   367 -
+ .../test/analysis_server_test.dart            |   210 -
+ pkg/analysis_server/test/benchmarks_test.dart |    76 -
+ .../channel/byte_stream_channel_test.dart     |   272 -
+ .../test/channel/test_all.dart                |    16 -
+ pkg/analysis_server/test/completion_test.dart |  2517 ---
+ .../test/completion_test_support.dart         |   203 -
+ .../test/context_manager_test.dart            |  2695 ---
+ .../test/domain_analysis_test.dart            |   790 -
+ .../test/domain_completion_test.dart          |   780 -
+ .../test/domain_completion_util.dart          |   123 -
+ .../test/domain_diagnostic_test.dart          |    58 -
+ .../test/domain_execution_test.dart           |   243 -
+ .../test/domain_server_test.dart              |    81 -
+ .../test/edit/assists_test.dart               |   134 -
+ pkg/analysis_server/test/edit/fixes_test.dart |   164 -
+ .../test/edit/format_test.dart                |   125 -
+ .../test/edit/organize_directives_test.dart   |   167 -
+ .../test/edit/postfix_completion_test.dart    |    93 -
+ .../test/edit/refactoring_test.dart           |  2016 --
+ .../test/edit/sort_members_test.dart          |   256 -
+ .../test/edit/statement_completion_test.dart  |   122 -
+ pkg/analysis_server/test/edit/test_all.dart   |    27 -
+ .../analysis/analysis_options_test.dart       |    81 -
+ .../test/integration/analysis/error_test.dart |   100 -
+ .../analysis/get_errors_nonStandard_sdk.dart  |    99 -
+ .../integration/analysis/get_errors_test.dart |    36 -
+ .../integration/analysis/get_hover_test.dart  |   189 -
+ .../analysis/get_imported_elements_test.dart  |   135 -
+ .../get_library_dependencies_test.dart        |    47 -
+ .../analysis/get_navigation_test.dart         |    67 -
+ .../analysis/get_reachable_sources_test.dart  |    49 -
+ .../integration/analysis/highlights_test.dart |   146 -
+ .../analysis/highlights_test2.dart            |   166 -
+ .../test/integration/analysis/lint_test.dart  |    83 -
+ .../integration/analysis/navigation_test.dart |   136 -
+ .../analysis/occurrences_test.dart            |    68 -
+ .../integration/analysis/outline_test.dart    |    84 -
+ .../integration/analysis/overrides_test.dart  |   122 -
+ .../analysis/package_root_test.dart           |    79 -
+ .../analysis/reanalyze_concurrent_test.dart   |    49 -
+ .../integration/analysis/reanalyze_test.dart  |    40 -
+ .../analysis/set_analysis_roots_test.dart     |    32 -
+ .../set_general_subscriptions_test.dart       |    40 -
+ .../analysis/set_priority_files_test.dart     |    30 -
+ .../analysis/set_subscriptions_test.dart      |    32 -
+ .../test/integration/analysis/test_all.dart   |    66 -
+ .../analysis/update_content_list_test.dart    |    52 -
+ .../analysis/update_content_test.dart         |   107 -
+ .../analysis/update_options_test.dart         |    47 -
+ .../integration/analytics/enable_test.dart    |    33 -
+ .../analytics/is_enabled_test.dart            |    26 -
+ .../analytics/send_event_test.dart            |    31 -
+ .../analytics/send_timing_test.dart           |    31 -
+ .../test/integration/analytics/test_all.dart  |    19 -
+ .../completion/get_suggestions_test.dart      |   118 -
+ .../test/integration/completion/test_all.dart |    16 -
+ .../test/integration/coverage.md              |    83 -
+ .../test/integration/coverage_test.dart       |   129 -
+ .../diagnostic/get_diagnostics_test.dart      |    30 -
+ .../diagnostic/get_server_port_test.dart      |    37 -
+ .../test/integration/diagnostic/test_all.dart |    15 -
+ .../test/integration/edit/format_test.dart    |    80 -
+ .../integration/edit/get_assists_test.dart    |    50 -
+ .../edit/get_available_refactorings_test.dart |    37 -
+ .../test/integration/edit/get_fixes_test.dart |    60 -
+ .../edit/get_postfix_completion_test.dart     |    52 -
+ .../edit/get_refactoring_test.dart            |    66 -
+ .../edit/get_statement_completion_test.dart   |    47 -
+ .../edit/import_elements_test.dart            |   139 -
+ ...is_postfix_completion_applicable_test.dart |    41 -
+ ...ist_postfix_completion_templates_test.dart |    41 -
+ .../edit/organize_directives_test.dart        |    76 -
+ .../integration/edit/sort_members_test.dart   |    64 -
+ .../test/integration/edit/test_all.dart       |    38 -
+ .../execution/create_context_test.dart        |    24 -
+ .../execution/delete_context_test.dart        |    43 -
+ .../integration/execution/map_uri_test.dart   |    40 -
+ .../execution/set_subscriptions_test.dart     |    23 -
+ .../test/integration/execution/test_all.dart  |    19 -
+ .../kythe/get_kythe_entries_test.dart         |    39 -
+ .../test/integration/kythe/test_all.dart      |    13 -
+ .../search/find_element_references_test.dart  |    72 -
+ .../search/find_member_declarations_test.dart |    51 -
+ .../search/find_member_references_test.dart   |    52 -
+ .../find_top_level_declarations_test.dart     |    56 -
+ .../search/get_type_hierarchy_test.dart       |   275 -
+ .../test/integration/search/test_all.dart     |    25 -
+ .../integration/server/get_version_test.dart  |    20 -
+ ...et_subscriptions_invalid_service_test.dart |    30 -
+ .../server/set_subscriptions_test.dart        |    64 -
+ .../integration/server/shutdown_test.dart     |    31 -
+ .../test/integration/server/status_test.dart  |    50 -
+ .../test/integration/server/test_all.dart     |    25 -
+ .../support/integration_test_methods.dart     |  2240 ---
+ .../support/integration_tests.dart            |  1003 -
+ .../support/protocol_matchers.dart            |  2644 ---
+ .../test/integration/test_all.dart            |    35 -
+ pkg/analysis_server/test/mock_sdk.dart        |   438 -
+ pkg/analysis_server/test/mocks.dart           |   320 -
+ .../test/plugin/protocol_dart_test.dart       |   461 -
+ pkg/analysis_server/test/plugin/test_all.dart |    16 -
+ .../test/protocol_server_test.dart            |   196 -
+ pkg/analysis_server/test/protocol_test.dart   |   270 -
+ .../test/search/abstract_search_domain.dart   |   113 -
+ .../test/search/element_references_test.dart  |   674 -
+ .../test/search/member_declarations_test.dart |   157 -
+ .../test/search/member_references_test.dart   |   114 -
+ .../test/search/search_result_test.dart       |    55 -
+ pkg/analysis_server/test/search/test_all.dart |    26 -
+ .../search/top_level_declarations_test.dart   |    82 -
+ .../test/search/type_hierarchy_test.dart      |  1055 --
+ .../dart/arglist_contributor_test.dart        |  1019 -
+ .../dart/combinator_contributor_test.dart     |   153 -
+ .../dart/common_usage_sorter_test.dart        |   148 -
+ .../dart/completion_contributor_util.dart     |   589 -
+ .../dart/completion_manager_test.dart         |    91 -
+ .../dart/field_formal_contributor_test.dart   |   197 -
+ .../imported_reference_contributor_test.dart  |  4294 -----
+ .../inherited_reference_contributor_test.dart |   607 -
+ .../dart/keyword_contributor_test.dart        |  1826 --
+ .../dart/label_contributor_test.dart          |   320 -
+ .../dart/library_member_contributor_test.dart |   251 -
+ .../dart/library_prefix_contributor_test.dart |   329 -
+ .../local_constructor_contributor_test.dart   |  3975 ----
+ .../dart/local_library_contributor_test.dart  |   282 -
+ .../local_reference_contributor_test.dart     |  4585 -----
+ .../named_constructor_contributor_test.dart   |   171 -
+ .../dart/override_contributor_test.dart       |   112 -
+ .../dart/static_member_contributor_test.dart  |   285 -
+ .../services/completion/dart/test_all.dart    |    52 -
+ .../dart/type_member_contributor_test.dart    |  4027 ----
+ .../completion/dart/uri_contributor_test.dart |   682 -
+ .../dart/variable_name_contributor_test.dart  |   244 -
+ .../postfix/postfix_completion_test.dart      |   709 -
+ .../services/completion/postfix/test_all.dart |    13 -
+ .../statement/statement_completion_test.dart  |  1912 --
+ .../completion/statement/test_all.dart        |    13 -
+ .../test/services/completion/test_all.dart    |    17 -
+ .../test/services/correction/assist_test.dart |  4443 -----
+ .../test/services/correction/change_test.dart |   296 -
+ .../test/services/correction/fix_test.dart    |  6753 -------
+ .../services/correction/levenshtein_test.dart |    66 -
+ .../correction/name_suggestion_test.dart      |   369 -
+ .../correction/organize_directives_test.dart  |   321 -
+ .../correction/sort_members_test.dart         |   810 -
+ .../test/services/correction/status_test.dart |   235 -
+ .../services/correction/strings_test.dart     |   175 -
+ .../test/services/correction/test_all.dart    |    32 -
+ .../test/services/correction/util_test.dart   |   252 -
+ .../test/services/linter/linter_test.dart     |    79 -
+ .../test/services/linter/test_all.dart        |    13 -
+ .../refactoring/abstract_refactoring.dart     |   175 -
+ .../services/refactoring/abstract_rename.dart |    75 -
+ .../convert_getter_to_method_test.dart        |   163 -
+ .../convert_method_to_getter_test.dart        |   215 -
+ .../refactoring/extract_local_test.dart       |  1346 --
+ .../refactoring/extract_method_test.dart      |  2886 ---
+ .../refactoring/inline_local_test.dart        |   639 -
+ .../refactoring/inline_method_test.dart       |  1761 --
+ .../refactoring/naming_conventions_test.dart  |   754 -
+ .../refactoring/rename_class_member_test.dart |   894 -
+ .../refactoring/rename_constructor_test.dart  |   249 -
+ .../refactoring/rename_import_test.dart       |   230 -
+ .../refactoring/rename_label_test.dart        |    83 -
+ .../refactoring/rename_library_test.dart      |    91 -
+ .../refactoring/rename_local_test.dart        |   545 -
+ .../refactoring/rename_unit_member_test.dart  |   607 -
+ .../test/services/refactoring/test_all.dart   |    40 -
+ .../test/services/search/hierarchy_test.dart  |   362 -
+ .../services/search/search_engine_test.dart   |   422 -
+ .../test/services/search/test_all.dart        |    18 -
+ .../test/services/test_all.dart               |    21 -
+ .../test/socket_server_test.dart              |   142 -
+ .../computer/closingLabels_computer_test.dart |   346 -
+ .../import_elements_computer_test.dart        |   343 -
+ .../imported_elements_computer_test.dart      |   400 -
+ .../src/computer/outline_computer_test.dart   |  1022 -
+ .../test/src/computer/test_all.dart           |    20 -
+ .../test/src/domain_abstract_test.dart        |   105 -
+ .../src/plugin/notification_manager_test.dart |   511 -
+ .../test/src/plugin/plugin_locator_test.dart  |    96 -
+ .../test/src/plugin/plugin_manager_test.dart  |   918 -
+ .../test/src/plugin/plugin_watcher_test.dart  |   187 -
+ .../src/plugin/protocol_test_utilities.dart   |   192 -
+ .../src/plugin/request_converter_test.dart    |    82 -
+ .../src/plugin/result_collector_test.dart     |   110 -
+ .../src/plugin/result_converter_test.dart     |   128 -
+ .../test/src/plugin/result_merger_test.dart   |   738 -
+ .../test/src/plugin/test_all.dart             |    27 -
+ pkg/analysis_server/test/src/test_all.dart    |    24 -
+ .../test/src/utilities/flutter_test.dart      |   156 -
+ .../test/src/utilities/flutter_util.dart      |   205 -
+ .../test/src/utilities/profiling_test.dart    |    30 -
+ .../test/src/utilities/test_all.dart          |    15 -
+ .../test/src/watch_manager_test.dart          |   350 -
+ .../test/stress/replay/operation.dart         |    80 -
+ .../test/stress/replay/replay.dart            |   707 -
+ .../test/stress/utilities/git.dart            |   551 -
+ .../test/stress/utilities/logger.dart         |    49 -
+ .../test/stress/utilities/server.dart         |  1081 --
+ pkg/analysis_server/test/test_all.dart        |    61 -
+ .../timing/completion/completion_simple.dart  |   111 -
+ .../test/timing/timing_framework.dart         |   312 -
+ .../tool/instrumentation/log/log.dart         |  1195 --
+ .../tool/instrumentation/log_viewer.dart      |   129 -
+ .../tool/instrumentation/page/log_page.dart   |   331 -
+ .../instrumentation/page/page_writer.dart     |   317 -
+ .../tool/instrumentation/page/stats_page.dart |   265 -
+ .../tool/instrumentation/page/task_page.dart  |   168 -
+ .../tool/instrumentation/server.dart          |   238 -
+ pkg/analysis_server/tool/spec/api.dart        |   528 -
+ .../tool/spec/check_all_test.dart             |    23 -
+ .../tool/spec/codegen_analysis_server.dart    |   137 -
+ .../tool/spec/codegen_dart.dart               |    49 -
+ .../tool/spec/codegen_dart_protocol.dart      |  1326 --
+ .../tool/spec/codegen_inttest_methods.dart    |   275 -
+ .../tool/spec/codegen_java.dart               |   301 -
+ .../tool/spec/codegen_java_types.dart         |   744 -
+ .../tool/spec/codegen_matchers.dart           |   191 -
+ .../tool/spec/codegen_protocol_constants.dart |   170 -
+ pkg/analysis_server/tool/spec/from_html.dart  |   609 -
+ .../tool/spec/generate_all.dart               |    40 -
+ pkg/analysis_server/tool/spec/generate_files  |    61 -
+ .../spec/generated/java/AnalysisServer.java   |   757 -
+ .../java/types/AddContentOverlay.java         |   132 -
+ .../generated/java/types/AnalysisError.java   |   251 -
+ .../java/types/AnalysisErrorFixes.java        |   138 -
+ .../java/types/AnalysisErrorSeverity.java     |    32 -
+ .../java/types/AnalysisErrorType.java         |    42 -
+ .../generated/java/types/AnalysisOptions.java |   287 -
+ .../generated/java/types/AnalysisService.java |    49 -
+ .../generated/java/types/AnalysisStatus.java  |   136 -
+ .../java/types/ChangeContentOverlay.java      |   142 -
+ .../generated/java/types/ClosingLabel.java    |   156 -
+ .../java/types/CompletionSuggestion.java      |   574 -
+ .../java/types/CompletionSuggestionKind.java  |    64 -
+ .../generated/java/types/ContextData.java     |   195 -
+ .../spec/generated/java/types/Element.java    |   297 -
+ .../generated/java/types/ElementKind.java     |    76 -
+ .../generated/java/types/ExecutableFile.java  |   134 -
+ .../generated/java/types/ExecutableKind.java  |    34 -
+ .../java/types/ExecutionService.java          |    28 -
+ .../types/ExtractLocalVariableFeedback.java   |   221 -
+ .../types/ExtractLocalVariableOptions.java    |   152 -
+ .../java/types/ExtractMethodFeedback.java     |   272 -
+ .../java/types/ExtractMethodOptions.java      |   261 -
+ .../spec/generated/java/types/FileKind.java   |    30 -
+ .../generated/java/types/FoldingKind.java     |    36 -
+ .../generated/java/types/FoldingRegion.java   |   153 -
+ .../java/types/GeneralAnalysisService.java    |    29 -
+ .../generated/java/types/HighlightRegion.java |   157 -
+ .../java/types/HighlightRegionType.java       |   319 -
+ .../java/types/HoverInformation.java          |   372 -
+ .../java/types/ImplementedClass.java          |   134 -
+ .../java/types/ImplementedMember.java         |   134 -
+ .../java/types/ImportedElements.java          |   158 -
+ .../types/InlineLocalVariableFeedback.java    |   132 -
+ .../java/types/InlineMethodFeedback.java      |   155 -
+ .../java/types/InlineMethodOptions.java       |   152 -
+ .../spec/generated/java/types/KytheEntry.java |   202 -
+ .../spec/generated/java/types/KytheVName.java |   200 -
+ .../generated/java/types/LinkedEditGroup.java |   165 -
+ .../java/types/LinkedEditSuggestion.java      |   135 -
+ .../java/types/LinkedEditSuggestionKind.java  |    34 -
+ .../spec/generated/java/types/Location.java   |   191 -
+ .../generated/java/types/MoveFileOptions.java |   120 -
+ .../java/types/NavigationRegion.java          |   179 -
+ .../java/types/NavigationTarget.java          |   220 -
+ .../generated/java/types/Occurrences.java     |   166 -
+ .../spec/generated/java/types/Outline.java    |   207 -
+ .../java/types/OverriddenMember.java          |   134 -
+ .../generated/java/types/OverrideMember.java  |   186 -
+ .../spec/generated/java/types/Position.java   |   134 -
+ .../java/types/PostfixTemplateDescriptor.java |   153 -
+ .../spec/generated/java/types/PubStatus.java  |   115 -
+ .../java/types/RefactoringFeedback.java       |    85 -
+ .../generated/java/types/RefactoringKind.java |    44 -
+ .../types/RefactoringMethodParameter.java     |   242 -
+ .../types/RefactoringMethodParameterKind.java |    32 -
+ .../java/types/RefactoringOptions.java        |    85 -
+ .../java/types/RefactoringProblem.java        |   159 -
+ .../types/RefactoringProblemSeverity.java     |    55 -
+ .../java/types/RemoveContentOverlay.java      |   113 -
+ .../generated/java/types/RenameFeedback.java  |   172 -
+ .../generated/java/types/RenameOptions.java   |   120 -
+ .../generated/java/types/RequestError.java    |   155 -
+ .../java/types/RequestErrorCode.java          |   182 -
+ .../generated/java/types/SearchResult.java    |   182 -
+ .../java/types/SearchResultKind.java          |    61 -
+ .../generated/java/types/ServerService.java   |    28 -
+ .../generated/java/types/SourceChange.java    |   182 -
+ .../spec/generated/java/types/SourceEdit.java |   186 -
+ .../generated/java/types/SourceFileEdit.java  |   163 -
+ .../java/types/TypeHierarchyItem.java         |   271 -
+ .../tool/spec/implied_types.dart              |    89 -
+ pkg/analysis_server/tool/spec/spec_input.html |  3975 ----
+ pkg/analysis_server/tool/spec/to_html.dart    |   831 -
+ pkg/analysis_server_client/CHANGELOG.md       |     5 -
+ pkg/analysis_server_client/LICENSE            |    26 -
+ pkg/analysis_server_client/README.md          |    13 -
+ .../lib/analysis_server_client.dart           |   101 -
+ pkg/analysis_server_client/pubspec.yaml       |    13 -
+ .../test/analysis_server_client_test.dart     |    97 -
+ pkg/analyzer/README.md                        |     2 -
+ pkg/analyzer/lib/src/codegen/tools.dart       |     2 -
+ pkg/analyzer_cli/lib/src/driver.dart          |    58 +-
+ pkg/analyzer_cli/lib/src/options.dart         |    55 +-
+ pkg/analyzer_cli/pubspec.yaml                 |     1 -
+ pkg/analyzer_cli/test/options_test.dart       |    23 -
+ .../support/integration_test_methods.dart     |   815 -
+ .../support/integration_tests.dart            |    15 -
+ pkg/front_end/testing.json                    |     1 -
+ pkg/microlytics/example/simple.dart           |    26 -
+ pkg/microlytics/lib/channels.dart             |    53 -
+ pkg/microlytics/lib/html_channels.dart        |    14 -
+ pkg/microlytics/lib/io_channels.dart          |    20 -
+ pkg/microlytics/lib/microlytics.dart          |    57 -
+ pkg/microlytics/pubspec.yaml                  |     8 -
+ .../test/dart_microlytics_test.dart           |   114 -
+ pkg/microlytics/test/test_channel.dart        |    19 -
+ pkg/pkg.status                                |    15 -
+ pkg/telemetry/LICENSE                         |    26 -
+ pkg/telemetry/README.md                       |    51 -
+ pkg/telemetry/analysis_options.yaml           |    10 -
+ pkg/telemetry/lib/crash_reporting.dart        |    94 -
+ pkg/telemetry/lib/telemetry.dart              |   126 -
+ pkg/telemetry/pubspec.yaml                    |    16 -
+ pkg/telemetry/test/crash_reporting_test.dart  |    41 -
+ pkg/telemetry/test/telemetry_test.dart        |    31 -
+ runtime/observatory/lib/app.dart              |     3 +-
+ .../observatory/lib/src/app/analytics.dart    |    31 -
+ runtime/observatory/observatory_sources.gni   |     1 -
+ sdk/BUILD.gn                                  |    11 -
+ tests/lib/analyzer/analyze_library.status     |     1 -
+ tools/bots/dartdoc_footer.html                |    13 -
+ tools/bots/test_matrix.json                   |    30 -
+ tools/bots/try_benchmarks.sh                  |     1 -
+ utils/analysis_server/.gitignore              |     3 -
+ utils/analysis_server/BUILD.gn                |    10 -
+ 525 files changed, 8 insertions(+), 187921 deletions(-)
+ delete mode 100644 pkg/analysis_server/AUTHORS
+ delete mode 100644 pkg/analysis_server/CHANGELOG.md
+ delete mode 100644 pkg/analysis_server/CONTRIBUTING.md
+ delete mode 100644 pkg/analysis_server/LICENSE
+ delete mode 100644 pkg/analysis_server/README.md
+ delete mode 100644 pkg/analysis_server/analysis_options.yaml
+ delete mode 100644 pkg/analysis_server/benchmark/benchmarks.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/README.md
+ delete mode 100644 pkg/analysis_server/benchmark/integration/driver.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/input_conver=
ter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/instrumentat=
ion_input_converter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/local_runner=
.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/log_file_inp=
ut_converter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/main.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/operation.da=
rt
+ delete mode 100644 pkg/analysis_server/benchmark/perf/analysis_timing_tes=
ts.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_angular.d=
art
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_flutter.d=
art
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_scenario.=
dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/completion_timing_t=
ests.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/memory_tests.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/performance_tests.d=
art
+ delete mode 100644 pkg/analysis_server/benchmark/readme.md
+ delete mode 100644 pkg/analysis_server/bin/server.dart
+ delete mode 100644 pkg/analysis_server/doc/api.html
+ delete mode 100644 pkg/analysis_server/lib/plugin/analysis/occurrences/oc=
currences_core.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/assist/assist_core=
.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/assist/assist_dart=
.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/protocol/protocol_dart.=
dart
+ delete mode 100644 pkg/analysis_server/lib/protocol/protocol.dart
+ delete mode 100644 pkg/analysis_server/lib/protocol/protocol_constants.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/protocol/protocol_generated.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/analysis_logger.dart
+ delete mode 100644 pkg/analysis_server/lib/src/analysis_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/channel/byte_stream_channe=
l.dart
+ delete mode 100644 pkg/analysis_server/lib/src/channel/channel.dart
+ delete mode 100644 pkg/analysis_server/lib/src/collections.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_closingL=
abels.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_highligh=
ts.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_highligh=
ts2.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_hover.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_outline.=
dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_override=
s.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/import_elements_c=
omputer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/imported_elements=
_computer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/new_notifications=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/constants.dart
+ delete mode 100644 pkg/analysis_server/lib/src/context_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_abstract.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_analysis.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_analytics.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_completion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_diagnostic.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_execution.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_kythe.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/implement=
ed_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/navigatio=
n_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/occurrenc=
es.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/occurrenc=
es_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/edit/edit_domain.dart
+ delete mode 100644 pkg/analysis_server/lib/src/operation/operation_analys=
is.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/notification_manage=
r.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/plugin_locator.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/plugin_watcher.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/request_converter.d=
art
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_collector.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_converter.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_merger.dart
+ delete mode 100644 pkg/analysis_server/lib/src/protocol/protocol_internal=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/protocol_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/provisional/completion/com=
pletion_core.dart
+ delete mode 100644 pkg/analysis_server/lib/src/provisional/completion/dar=
t/completion_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/search/element_references.=
dart
+ delete mode 100644 pkg/analysis_server/lib/src/search/search_domain.dart
+ delete mode 100644 pkg/analysis_server/lib/src/search/type_hierarchy.dart
+ delete mode 100644 pkg/analysis_server/lib/src/server/diagnostic_server.d=
art
+ delete mode 100644 pkg/analysis_server/lib/src/server/driver.dart
+ delete mode 100644 pkg/analysis_server/lib/src/server/http_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/server/stdio_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/comple=
tion_core.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/comple=
tion_performance.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/a=
rglist_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ombinator_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ommon_usage_sorter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ommon_usage_sorter.g.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ompletion_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ontribution_sorter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/f=
ield_formal_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/i=
mported_reference_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/i=
nherited_reference_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/k=
eyword_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
abel_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ibrary_member_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ibrary_prefix_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ocal_constructor_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ocal_library_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ocal_reference_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/n=
amed_constructor_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/o=
verride_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/s=
tatic_member_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/s=
uggestion_builder.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/t=
ype_member_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/u=
ri_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/u=
tilities.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/v=
ariable_name_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/postfi=
x/postfix_completion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/statem=
ent/design_notes.md
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/statem=
ent/statement_completion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/assist=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/assist=
_internal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/fix.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/fix_in=
ternal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/levens=
htein.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/name_s=
uggestion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/namesp=
ace.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/organi=
ze_directives.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/select=
ion_analyzer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/sort_m=
embers.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/source=
_buffer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/statem=
ent_analyzer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/status=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/string=
s.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/util.d=
art
+ delete mode 100644 pkg/analysis_server/lib/src/services/kythe/kythe_visit=
ors.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/kythe/schema.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/conve=
rt_getter_to_method.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/conve=
rt_method_to_getter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/extra=
ct_local.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/extra=
ct_method.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/inlin=
e_local.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/inlin=
e_method.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/namin=
g_conventions.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/refac=
toring.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/refac=
toring_internal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_class_member.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_constructor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_import.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_label.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_library.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_local.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_unit_member.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/element_vi=
sitors.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/hierarchy.=
dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/search_eng=
ine.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/search_eng=
ine_internal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/socket_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/ast_writer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/diagnostics.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/element_writer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/pages.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/tree_writer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/documentation.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/flutter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/null_string_sink=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/profiling.dart
+ delete mode 100644 pkg/analysis_server/lib/src/watch_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/starter.dart
+ delete mode 100644 pkg/analysis_server/pubspec.yaml
+ delete mode 100644 pkg/analysis_server/test/abstract_context.dart
+ delete mode 100644 pkg/analysis_server/test/abstract_single_unit.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/get_errors_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/get_hover_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/get_navigation_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_analysi=
s_options_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_analyze=
dFiles_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_closing=
Labels_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_errors_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_highlig=
hts_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_highlig=
hts_test2.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_impleme=
nted_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_navigat=
ion_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_occurre=
nces_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_outline=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_overrid=
es_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/reanalyze_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/set_priority_files_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/update_content_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/analysis_abstract.dart
+ delete mode 100644 pkg/analysis_server/test/analysis_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/benchmarks_test.dart
+ delete mode 100644 pkg/analysis_server/test/channel/byte_stream_channel_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/channel/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/completion_test_support.dart
+ delete mode 100644 pkg/analysis_server/test/context_manager_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_analysis_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_completion_util.dart
+ delete mode 100644 pkg/analysis_server/test/domain_diagnostic_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_execution_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/assists_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/fixes_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/format_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/organize_directives_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/edit/postfix_completion_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/edit/refactoring_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/sort_members_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/statement_completion_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/edit/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/analysis=
_options_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/error_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_erro=
rs_nonStandard_sdk.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_erro=
rs_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_hove=
r_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_impo=
rted_elements_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_libr=
ary_dependencies_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_navi=
gation_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_reac=
hable_sources_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/highligh=
ts_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/highligh=
ts_test2.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/lint_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/navigati=
on_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/occurren=
ces_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/outline_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/override=
s_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/package_=
root_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/reanalyz=
e_concurrent_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/reanalyz=
e_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_anal=
ysis_roots_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_gene=
ral_subscriptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_prio=
rity_files_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_subs=
criptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/test_all=
.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/update_c=
ontent_list_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/update_c=
ontent_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/update_o=
ptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/enable_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/is_enab=
led_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/send_ev=
ent_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/send_ti=
ming_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/test_al=
l.dart
+ delete mode 100644 pkg/analysis_server/test/integration/completion/get_su=
ggestions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/completion/test_a=
ll.dart
+ delete mode 100644 pkg/analysis_server/test/integration/coverage.md
+ delete mode 100644 pkg/analysis_server/test/integration/coverage_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/diagnostic/get_di=
agnostics_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/diagnostic/get_se=
rver_port_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/diagnostic/test_a=
ll.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/format_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_assists_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_availabl=
e_refactorings_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_fixes_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_postfix_=
completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_refactor=
ing_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_statemen=
t_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/import_eleme=
nts_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/is_postfix_c=
ompletion_applicable_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/list_postfix=
_completion_templates_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/organize_dir=
ectives_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/sort_members=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/create_=
context_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/delete_=
context_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/map_uri=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/set_sub=
scriptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/test_al=
l.dart
+ delete mode 100644 pkg/analysis_server/test/integration/kythe/get_kythe_e=
ntries_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/kythe/test_all.da=
rt
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_eleme=
nt_references_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_membe=
r_declarations_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_membe=
r_references_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_top_l=
evel_declarations_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/get_type_h=
ierarchy_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/test_all.d=
art
+ delete mode 100644 pkg/analysis_server/test/integration/server/get_versio=
n_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/set_subscr=
iptions_invalid_service_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/set_subscr=
iptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/shutdown_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/status_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/test_all.d=
art
+ delete mode 100644 pkg/analysis_server/test/integration/support/integrati=
on_test_methods.dart
+ delete mode 100644 pkg/analysis_server/test/integration/support/integrati=
on_tests.dart
+ delete mode 100644 pkg/analysis_server/test/integration/support/protocol_=
matchers.dart
+ delete mode 100644 pkg/analysis_server/test/integration/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/mock_sdk.dart
+ delete mode 100644 pkg/analysis_server/test/mocks.dart
+ delete mode 100644 pkg/analysis_server/test/plugin/protocol_dart_test.dart
+ delete mode 100644 pkg/analysis_server/test/plugin/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/protocol_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/protocol_test.dart
+ delete mode 100644 pkg/analysis_server/test/search/abstract_search_domain=
.dart
+ delete mode 100644 pkg/analysis_server/test/search/element_references_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/search/member_declarations_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/search/member_references_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/search/search_result_test.dart
+ delete mode 100644 pkg/analysis_server/test/search/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/search/top_level_declarations=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/search/type_hierarchy_test.da=
rt
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/argl=
ist_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comb=
inator_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comm=
on_usage_sorter_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comp=
letion_contributor_util.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comp=
letion_manager_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/fiel=
d_formal_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/impo=
rted_reference_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/inhe=
rited_reference_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/keyw=
ord_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/labe=
l_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/libr=
ary_member_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/libr=
ary_prefix_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/loca=
l_constructor_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/loca=
l_library_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/loca=
l_reference_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/name=
d_constructor_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/over=
ride_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/stat=
ic_member_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/test=
_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/type=
_member_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/uri_=
contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/vari=
able_name_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/postfix/p=
ostfix_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/postfix/t=
est_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/statement=
/statement_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/statement=
/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/test_all.=
dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/assist_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/change_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/fix_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/levenshte=
in_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/name_sugg=
estion_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/organize_=
directives_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/sort_memb=
ers_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/status_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/strings_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/test_all.=
dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/util_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/services/linter/linter_test.d=
art
+ delete mode 100644 pkg/analysis_server/test/services/linter/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/abstract=
_refactoring.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/abstract=
_rename.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/convert_=
getter_to_method_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/convert_=
method_to_getter_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/extract_=
local_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/extract_=
method_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/inline_l=
ocal_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/inline_m=
ethod_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/naming_c=
onventions_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_c=
lass_member_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_c=
onstructor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_i=
mport_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_l=
abel_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_l=
ibrary_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_l=
ocal_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_u=
nit_member_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/test_all=
.dart
+ delete mode 100644 pkg/analysis_server/test/services/search/hierarchy_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/services/search/search_engine=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/search/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/socket_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/closingLabels_co=
mputer_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/import_elements_=
computer_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/imported_element=
s_computer_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/outline_computer=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/domain_abstract_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/notification_manag=
er_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/plugin_locator_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/plugin_manager_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/plugin_watcher_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/protocol_test_util=
ities.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/request_converter_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/result_collector_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/result_converter_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/result_merger_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/utilities/flutter_test.da=
rt
+ delete mode 100644 pkg/analysis_server/test/src/utilities/flutter_util.da=
rt
+ delete mode 100644 pkg/analysis_server/test/src/utilities/profiling_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/src/utilities/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/watch_manager_test.dart
+ delete mode 100644 pkg/analysis_server/test/stress/replay/operation.dart
+ delete mode 100644 pkg/analysis_server/test/stress/replay/replay.dart
+ delete mode 100644 pkg/analysis_server/test/stress/utilities/git.dart
+ delete mode 100644 pkg/analysis_server/test/stress/utilities/logger.dart
+ delete mode 100644 pkg/analysis_server/test/stress/utilities/server.dart
+ delete mode 100644 pkg/analysis_server/test/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/timing/completion/completion_=
simple.dart
+ delete mode 100644 pkg/analysis_server/test/timing/timing_framework.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/log/log.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/log_viewer.da=
rt
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/log_page=
.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/page_wri=
ter.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/stats_pa=
ge.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/task_pag=
e.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/server.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/api.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/check_all_test.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_analysis_server.=
dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_dart.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_dart_protocol.da=
rt
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_inttest_methods.=
dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_java.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_java_types.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_matchers.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_protocol_constan=
ts.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/from_html.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/generate_all.dart
+ delete mode 100755 pkg/analysis_server/tool/spec/generate_files
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/AnalysisS=
erver.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Add=
ContentOverlay.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisError.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisErrorFixes.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisErrorSeverity.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisErrorType.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisStatus.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Cha=
ngeContentOverlay.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Clo=
singLabel.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Com=
pletionSuggestion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Com=
pletionSuggestionKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Con=
textData.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ele=
ment.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ele=
mentKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Exe=
cutableFile.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Exe=
cutableKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Exe=
cutionService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractLocalVariableFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractLocalVariableOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractMethodFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractMethodOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Fil=
eKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Fol=
dingKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Fol=
dingRegion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Gen=
eralAnalysisService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Hig=
hlightRegion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Hig=
hlightRegionType.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Hov=
erInformation.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Imp=
lementedClass.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Imp=
lementedMember.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Imp=
ortedElements.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Inl=
ineLocalVariableFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Inl=
ineMethodFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Inl=
ineMethodOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Kyt=
heEntry.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Kyt=
heVName.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Lin=
kedEditGroup.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Lin=
kedEditSuggestion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Lin=
kedEditSuggestionKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Loc=
ation.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Mov=
eFileOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Nav=
igationRegion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Nav=
igationTarget.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Occ=
urrences.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Out=
line.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ove=
rriddenMember.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ove=
rrideMember.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Pos=
ition.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Pos=
tfixTemplateDescriptor.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Pub=
Status.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringMethodParameter.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringMethodParameterKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringProblem.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringProblemSeverity.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Rem=
oveContentOverlay.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ren=
ameFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ren=
ameOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Req=
uestError.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Req=
uestErrorCode.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sea=
rchResult.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sea=
rchResultKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ser=
verService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sou=
rceChange.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sou=
rceEdit.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sou=
rceFileEdit.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Typ=
eHierarchyItem.java
+ delete mode 100644 pkg/analysis_server/tool/spec/implied_types.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/spec_input.html
+ delete mode 100644 pkg/analysis_server/tool/spec/to_html.dart
+ delete mode 100644 pkg/analysis_server_client/CHANGELOG.md
+ delete mode 100644 pkg/analysis_server_client/LICENSE
+ delete mode 100644 pkg/analysis_server_client/README.md
+ delete mode 100644 pkg/analysis_server_client/lib/analysis_server_client.=
dart
+ delete mode 100644 pkg/analysis_server_client/pubspec.yaml
+ delete mode 100644 pkg/analysis_server_client/test/analysis_server_client=
_test.dart
+ delete mode 100644 pkg/analyzer_plugin/test/integration/support/integrati=
on_test_methods.dart
+ delete mode 100644 pkg/microlytics/example/simple.dart
+ delete mode 100644 pkg/microlytics/lib/channels.dart
+ delete mode 100644 pkg/microlytics/lib/html_channels.dart
+ delete mode 100644 pkg/microlytics/lib/io_channels.dart
+ delete mode 100644 pkg/microlytics/lib/microlytics.dart
+ delete mode 100644 pkg/microlytics/pubspec.yaml
+ delete mode 100644 pkg/microlytics/test/dart_microlytics_test.dart
+ delete mode 100644 pkg/microlytics/test/test_channel.dart
+ delete mode 100644 pkg/telemetry/LICENSE
+ delete mode 100644 pkg/telemetry/README.md
+ delete mode 100644 pkg/telemetry/analysis_options.yaml
+ delete mode 100644 pkg/telemetry/lib/crash_reporting.dart
+ delete mode 100644 pkg/telemetry/lib/telemetry.dart
+ delete mode 100644 pkg/telemetry/pubspec.yaml
+ delete mode 100644 pkg/telemetry/test/crash_reporting_test.dart
+ delete mode 100644 pkg/telemetry/test/telemetry_test.dart
+ delete mode 100644 runtime/observatory/lib/src/app/analytics.dart
+ delete mode 100644 utils/analysis_server/.gitignore
+ delete mode 100644 utils/analysis_server/BUILD.gn
+
+diff --git a/BUILD.gn b/BUILD.gn
+index 80e3bdd3757..0f7746d8c92 100644
+--- a/BUILD.gn
++++ b/BUILD.gn
+@@ -21,7 +21,6 @@ group("most") {
+     testonly =3D true
+   }
+   deps =3D [
+-    ":analysis_server",
+     ":create_sdk",
+     ":dart2js",
+     ":dartanalyzer",
+@@ -107,12 +106,6 @@ group("dartfmt") {
+   ]
+ }
+=20
+-group("analysis_server") {
+-  deps =3D [
+-    "utils/analysis_server",
+-  ]
+-}
+-
+ # This is the target that is built on the dart2js build bots.
+ # It must depend on anything that is required by the dart2js
+ # test suites.
+diff --git a/pkg/analysis_server/AUTHORS b/pkg/analysis_server/AUTHORS
+deleted file mode 100644
+index e8063a8cd6e..00000000000
+--- a/pkg/analysis_server/AUTHORS
++++ /dev/null
+@@ -1,6 +0,0 @@
+-# Below is a list of people and organizations that have contributed
+-# to the project. Names should be added to the list like so:
+-#
+-#   Name/Organization <email address>
+-
+-Google Inc.
+diff --git a/pkg/analysis_server/CHANGELOG.md b/pkg/analysis_server/CHANGE=
LOG.md
+deleted file mode 100644
+index 2a2d63cf8e6..00000000000
+--- a/pkg/analysis_server/CHANGELOG.md
++++ /dev/null
+@@ -1,5 +0,0 @@
+-# Changelog
+-
+-## 0.0.1
+-
+-- Initial version
+diff --git a/pkg/analysis_server/CONTRIBUTING.md b/pkg/analysis_server/CON=
TRIBUTING.md
+deleted file mode 100644
+index 242f214b5e7..00000000000
+--- a/pkg/analysis_server/CONTRIBUTING.md
++++ /dev/null
+@@ -1,40 +0,0 @@
+-## Contributing
+-
+-Contributions welcome! Please follow the guide in [Contributing][contribu=
ting].
+-
+-## Building
+-
+-If you want to build Dart yourself, here is a guide to
+-[getting the source, preparing your machine to build the SDK, and
+-building][building].
+-
+-There are more documents on our [wiki](https://github.com/dart-lang/sdk/w=
iki).
+-Once set up to build the SDK, run:
+-
+-```
+-./tools/build.py -mrelease create_sdk
+-```
+-
+-## Running tests
+-
+-To run analyzer tests:
+-
+-```
+-./tools/test.py -mrelease pkg/analyzer/test/
+-```
+-
+-To run all analysis server tests:
+-
+-```
+-./tools/test.py -mrelease pkg/analysis_server/test/
+-```
+-
+-To run just the analysis server integration tests:
+-
+-```
+-./tools/test.py -mrelease pkg/analysis_server/test/integration/
+-```
+-
+-
+-[building]: https://github.com/dart-lang/sdk/wiki/Building
+-[contributing]: https://github.com/dart-lang/sdk/wiki/Contributing
+diff --git a/pkg/analysis_server/LICENSE b/pkg/analysis_server/LICENSE
+deleted file mode 100644
+index 5c60afea399..00000000000
+--- a/pkg/analysis_server/LICENSE
++++ /dev/null
+@@ -1,26 +0,0 @@
+-Copyright 2014, the Dart project authors. All rights reserved.
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are
+-met:
+-
+-    * Redistributions of source code must retain the above copyright
+-      notice, this list of conditions and the following disclaimer.
+-    * Redistributions in binary form must reproduce the above
+-      copyright notice, this list of conditions and the following
+-      disclaimer in the documentation and/or other materials provided
+-      with the distribution.
+-    * Neither the name of Google Inc. nor the names of its
+-      contributors may be used to endorse or promote products derived
+-      from this software without specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+diff --git a/pkg/analysis_server/README.md b/pkg/analysis_server/README.md
+deleted file mode 100644
+index d596f5c47af..00000000000
+--- a/pkg/analysis_server/README.md
++++ /dev/null
+@@ -1,22 +0,0 @@
+-# analysis_server
+-
+-A long-running process that provides analysis results to other tools.
+-
+-The analysis server is designed to provide on-going analysis of one or mo=
re code
+-bases as those code bases are changing.
+-
+-## Using the server
+-
+-The analysis server is not intended to be used stand-alone, and therefore=
 does
+-not have a human-friendly user interface.
+-
+-Clients (typically tools, such as an editor) are expected to run the anal=
ysis
+-server in a separate process and communicate with it using a JSON protoco=
l. The
+-protocol is specified in the file [`analysis_server/doc/api.html`][api].
+-
+-## Features and bugs
+-
+-Please file feature requests and bugs at the [issue tracker][tracker].
+-
+-[tracker]: https://github.com/dart-lang/sdk/issues
+-[api]: https://htmlpreview.github.io/?https://github.com/dart-lang/sdk/bl=
ob/master/pkg/analysis_server/doc/api.html
+diff --git a/pkg/analysis_server/analysis_options.yaml b/pkg/analysis_serv=
er/analysis_options.yaml
+deleted file mode 100644
+index 9bacf2b50aa..00000000000
+--- a/pkg/analysis_server/analysis_options.yaml
++++ /dev/null
+@@ -1,8 +0,0 @@
+-analyzer:
+-  strong-mode: true
+-linter:
+-  rules:
+-    - empty_constructor_bodies
+-    - empty_statements
+-    - unnecessary_brace_in_string_interps
+-    - valid_regexps
+diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_=
server/benchmark/benchmarks.dart
+deleted file mode 100644
+index 63eb6720e32..00000000000
+--- a/pkg/analysis_server/benchmark/benchmarks.dart
++++ /dev/null
+@@ -1,239 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-import 'dart:math' as math;
+-
+-import 'package:analyzer/file_system/file_system.dart';
+-import 'package:analyzer/file_system/physical_file_system.dart';
+-import 'package:args/command_runner.dart';
+-import 'package:intl/intl.dart';
+-import 'package:path/path.dart' as path;
+-
+-import 'perf/benchmarks_impl.dart';
+-
+-Future main(List<String> args) async {
+-  final List<Benchmark> benchmarks =3D [
+-    new ColdAnalysisBenchmark(),
+-    new AnalysisBenchmark()
+-  ];
+-
+-  CommandRunner runner =3D new CommandRunner(
+-      'benchmark', 'A benchmark runner for the analysis server.');
+-  runner.addCommand(new ListCommand(benchmarks));
+-  runner.addCommand(new RunCommand(benchmarks));
+-  runner.run(args);
+-}
+-
+-class ListCommand extends Command {
+-  final List<Benchmark> benchmarks;
+-
+-  ListCommand(this.benchmarks) {
+-    argParser.addFlag('machine',
+-        negatable: false, help: 'Emit the list of benchmarks as json.');
+-  }
+-
+-  @override
+-  String get name =3D> 'list';
+-
+-  @override
+-  String get description =3D> 'List available benchmarks.';
+-
+-  @override
+-  String get invocation =3D> '${runner.executableName} $name';
+-
+-  void run() {
+-    if (argResults['machine']) {
+-      final Map map =3D {
+-        'benchmarks': benchmarks.map((b) =3D> b.toJson()).toList()
+-      };
+-      print(new JsonEncoder.withIndent('  ').convert(map));
+-    } else {
+-      for (Benchmark benchmark in benchmarks) {
+-        print('${benchmark.id}: ${benchmark.description}');
+-      }
+-    }
+-  }
+-}
+-
+-class RunCommand extends Command {
+-  final List<Benchmark> benchmarks;
+-
+-  RunCommand(this.benchmarks) {
+-    argParser.addFlag('quick',
+-        negatable: false,
+-        help: 'Run a quick version of the benchmark. This is not useful f=
or '
+-            'gathering accurate times,\nbut can be used to validate that =
the '
+-            'benchmark works.');
+-    argParser.addFlag('preview-dart-2',
+-        negatable: false,
+-        help: 'Benchmark against the Dart 2.0 front end implementation.');
+-    argParser.addOption('repeat',
+-        defaultsTo: '10', help: 'The number of times to repeat the benchm=
ark.');
+-  }
+-
+-  @override
+-  String get name =3D> 'run';
+-
+-  @override
+-  String get description =3D> 'Run a given benchmark.';
+-
+-  @override
+-  String get invocation =3D> '${runner.executableName} $name <benchmark-i=
d>';
+-
+-  Future run() async {
+-    if (argResults.rest.isEmpty) {
+-      printUsage();
+-      exit(1);
+-    }
+-
+-    final String benchmarkId =3D argResults.rest.first;
+-    final int repeatCount =3D int.parse(argResults['repeat']);
+-    final bool quick =3D argResults['quick'];
+-    final bool previewDart2 =3D argResults['preview-dart-2'];
+-
+-    final Benchmark benchmark =3D
+-        benchmarks.firstWhere((b) =3D> b.id =3D=3D benchmarkId, orElse: (=
) {
+-      print("Benchmark '$benchmarkId' not found.");
+-      exit(1);
+-    });
+-
+-    int actualIterations =3D repeatCount;
+-    if (benchmark.maxIterations > 0) {
+-      actualIterations =3D math.min(benchmark.maxIterations, repeatCount);
+-    }
+-
+-    try {
+-      BenchMarkResult result;
+-      Stopwatch time =3D new Stopwatch()..start();
+-      print('Running $benchmarkId $actualIterations times...');
+-
+-      for (int iteration =3D 0; iteration < actualIterations; iteration++=
) {
+-        BenchMarkResult newResult =3D await benchmark.run(
+-          quick: quick,
+-          previewDart2: previewDart2,
+-        );
+-        print('  $newResult');
+-        result =3D result =3D=3D null ? newResult : result.combine(newRes=
ult);
+-      }
+-
+-      time.stop();
+-      print('Finished in ${time.elapsed.inSeconds} seconds.\n');
+-      Map m =3D {'benchmark': benchmarkId, 'result': result.toJson()};
+-      print(JSON.encode(m));
+-    } catch (error, st) {
+-      print('$benchmarkId threw exception: $error');
+-      print(st);
+-      exit(1);
+-    }
+-  }
+-}
+-
+-abstract class Benchmark {
+-  final String id;
+-  final String description;
+-  final bool enabled;
+-
+-  /// One of 'memory', 'cpu', or 'group'.
+-  final String kind;
+-
+-  Benchmark(this.id, this.description, {this.enabled: true, this.kind: 'c=
pu'});
+-
+-  Future<BenchMarkResult> run({bool quick: false, bool previewDart2: fals=
e});
+-
+-  int get maxIterations =3D> 0;
+-
+-  Map toJson() =3D>
+-      {'id': id, 'description': description, 'enabled': enabled, 'kind': =
kind};
+-
+-  String toString() =3D> '$id: $description';
+-}
+-
+-class BenchMarkResult {
+-  static final NumberFormat nf =3D new NumberFormat.decimalPattern();
+-
+-  /// One of 'bytes', 'micros', or 'compound'.
+-  final String kindName;
+-
+-  final int value;
+-
+-  BenchMarkResult(this.kindName, this.value);
+-
+-  BenchMarkResult combine(BenchMarkResult other) {
+-    return new BenchMarkResult(kindName, math.min(value, other.value));
+-  }
+-
+-  Map toJson() =3D> {kindName: value};
+-
+-  String toString() =3D> '$kindName: ${nf.format(value)}';
+-}
+-
+-class CompoundBenchMarkResult extends BenchMarkResult {
+-  final String name;
+-
+-  CompoundBenchMarkResult(this.name) : super('compound', 0);
+-
+-  Map<String, BenchMarkResult> results =3D {};
+-
+-  void add(String name, BenchMarkResult result) {
+-    results[name] =3D result;
+-  }
+-
+-  BenchMarkResult combine(BenchMarkResult other) {
+-    BenchMarkResult _combine(BenchMarkResult a, BenchMarkResult b) {
+-      if (a =3D=3D null) return b;
+-      if (b =3D=3D null) return a;
+-      return a.combine(b);
+-    }
+-
+-    CompoundBenchMarkResult o =3D other as CompoundBenchMarkResult;
+-
+-    CompoundBenchMarkResult combined =3D new CompoundBenchMarkResult(name=
);
+-    List<String> keys =3D
+-        (new Set()..addAll(results.keys)..addAll(o.results.keys)).toList(=
);
+-
+-    for (String key in keys) {
+-      combined.add(key, _combine(results[key], o.results[key]));
+-    }
+-
+-    return combined;
+-  }
+-
+-  Map toJson() {
+-    Map m =3D {};
+-    for (String key in results.keys) {
+-      m['$name-$key'] =3D results[key].toJson();
+-    }
+-    return m;
+-  }
+-
+-  String toString() =3D> '${toJson()}';
+-}
+-
+-List<String> getProjectRoots({bool quick: false}) {
+-  String script =3D Platform.script.toFilePath(windows: Platform.isWindow=
s);
+-  String pkgPath =3D path.normalize(path.join(path.dirname(script), '..',=
 '..'));
+-  return <String>[path.join(pkgPath, quick ? 'meta' : 'analysis_server')];
+-}
+-
+-String get analysisServerSrcPath {
+-  String script =3D Platform.script.toFilePath(windows: Platform.isWindow=
s);
+-  String pkgPath =3D path.normalize(path.join(path.dirname(script), '..',=
 '..'));
+-  return path.join(pkgPath, 'analysis_server');
+-}
+-
+-void deleteServerCache() {
+-  // ~/.dartServer/.analysis-driver/
+-  ResourceProvider resourceProvider =3D PhysicalResourceProvider.INSTANCE;
+-  Folder stateLocation =3D resourceProvider.getStateLocation('.analysis-d=
river');
+-  try {
+-    if (stateLocation.exists) {
+-      stateLocation.delete();
+-    }
+-  } catch (e) {
+-    // ignore any exception
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/README.md b/pkg/ana=
lysis_server/benchmark/integration/README.md
+deleted file mode 100644
+index 9955c11ce06..00000000000
+--- a/pkg/analysis_server/benchmark/integration/README.md
++++ /dev/null
+@@ -1,69 +0,0 @@
+-# Running Benchmarks
+-
+-There are two entry points for running benchmarks:
+-* **main.dart** - a general Dart application for running performance benc=
hmarks
+-* **local_runner.dart** - an example Dart application
+-which sets up the local environment
+-and then calls main.dart to run performance benchmarks
+-
+-## local_runner.dart
+-
+-This Dart application is one example for running performance benchmarks.
+-When run, this application 1) extracts a branch from a git repository
+-into a temporary directory, and 2) creates a symlink to the out or xcodeb=
uild
+-directory for proper package-root package resolution.
+-Once setup is complete, this applications calls main.dart
+-
+-The required command line arguments are
+-* **gitDir** =3D a path to the git repository containing the initial targ=
et source
+-* **branch** =3D the branch containing the initial target source
+-* **inputFile** =3D the instrumentation or log file
+-
+-Additional arguments are passed directly to main.dart.
+-For example, if the log was recorded on one machine and is played back on=
 another,
+-then you might need to specify -m<oldSrcPath>,<newSrcPath>
+-to map the source paths for playback.
+-When specifying additional arguments, any occurrences of @tmpSrcDir@
+-will be replaced with the absolute path of the temporary directory
+-into which the source was extracted.
+-
+-## main.dart
+-
+-This Dart application reads an instrumentation or local log file produced=
 by
+-analysis server, "replays" that interaction with the analysis server,
+-compares the notifications and responses with what was recorded in the lo=
g,
+-and produces a report. It assumes that the environment for playback has
+-already been setup.
+-The required command line arguments are
+-*  **-i, --input             <filePath>**
+-The input file specifying how this client should interact with the server.
+-If the input file name is "stdin", then the instructions are read from st=
din.
+-*  **-m, --map               <oldSrcPath>,<newSrcPath>**
+-This option defines a mapping from the original source directory <oldSrcP=
ath>
+-when the instrumentation or log file was generated
+-to the target source directory <newSrcPath> used during performance testi=
ng.
+-Multiple mappings can be specified.
+-WARNING: The contents of the target directory will be modified
+-*  **-t, --tmpSrcDir         <dirPath>**
+-The temporary directory containing source used during performance measure=
ment.
+-WARNING: The contents of the target directory will be modified
+-*  **-d, --diagnosticPort** localhost port on which server
+-                            will provide diagnostic web pages
+-*  **-v, --verbose**        Verbose logging
+-*  **--vv**                 Extra verbose logging
+-*  **-h, --help**           Print this help information
+-
+-For each request recorded in the input file,
+-the application sends a corresponding request to the analysis server
+-and waits up to 60 seconds for a response to that request.
+-If a response in not received in that time, then the application exits.
+-Any responses that are received are compared with the recorded response.
+-
+-For each analysis-complete notification recorded in the input file,
+-the application waits for the corresponding analysis-complete notification
+-from the running analysis server.
+-While it is waiting for an analysis-complete notification,
+-the application monitors the stream of notifications.
+-If there is a period of more than 60 seconds during which no communication
+-is received from the server, the application assumes that the server is h=
ung
+-and exits.
+diff --git a/pkg/analysis_server/benchmark/integration/driver.dart b/pkg/a=
nalysis_server/benchmark/integration/driver.dart
+deleted file mode 100644
+index da928396139..00000000000
+--- a/pkg/analysis_server/benchmark/integration/driver.dart
++++ /dev/null
+@@ -1,315 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:math' show max, sqrt;
+-
+-import 'package:logging/logging.dart';
+-
+-import '../../test/integration/support/integration_test_methods.dart';
+-import '../../test/integration/support/integration_tests.dart';
+-import 'operation.dart';
+-
+-final SPACE =3D ' '.codeUnitAt(0);
+-
+-void _printColumn(StringBuffer sb, String text, int keyLen,
+-    {bool rightJustified: false}) {
+-  if (!rightJustified) {
+-    sb.write(text);
+-    sb.write(',');
+-  }
+-  for (int i =3D text.length; i < keyLen; ++i) {
+-    sb.writeCharCode(SPACE);
+-  }
+-  if (rightJustified) {
+-    sb.write(text);
+-    sb.write(',');
+-  }
+-  sb.writeCharCode(SPACE);
+-}
+-
+-/**
+- * [Driver] launches and manages an instance of analysis server,
+- * reads a stream of operations, sends requests to analysis server
+- * based upon those operations, and evaluates the results.
+- */
+-class Driver extends IntegrationTestMixin {
+-  /**
+-   * The amount of time to give the server to respond to a shutdown reque=
st
+-   * before forcibly terminating it.
+-   */
+-  static const Duration SHUTDOWN_TIMEOUT =3D const Duration(seconds: 5);
+-
+-  final Logger logger =3D new Logger('Driver');
+-
+-  /**
+-   * The diagnostic port for Analysis Server or `null` if none.
+-   */
+-  final int diagnosticPort;
+-
+-  /**
+-   * A flag indicating whether the server is running.
+-   */
+-  bool running =3D false;
+-
+-  @override
+-  Server server;
+-
+-  /**
+-   * The results collected while running analysis server.
+-   */
+-  final Results results =3D new Results();
+-
+-  /**
+-   * The [Completer] for [runComplete].
+-   */
+-  Completer<Results> _runCompleter =3D new Completer<Results>();
+-
+-  Driver({this.diagnosticPort});
+-
+-  /**
+-   * Return a [Future] that completes with the [Results] of running
+-   * the analysis server once all operations have been performed.
+-   */
+-  Future<Results> get runComplete =3D> _runCompleter.future;
+-
+-  /**
+-   * Perform the given operation.
+-   * Return a [Future] that completes when the next operation can be perf=
ormed,
+-   * or `null` if the next operation can be performed immediately
+-   */
+-  Future perform(Operation op) {
+-    return op.perform(this);
+-  }
+-
+-  /**
+-   * Send a command to the server.  An 'id' will be automatically assigne=
d.
+-   * The returned [Future] will be completed when the server acknowledges=
 the
+-   * command with a response.  If the server acknowledges the command wit=
h a
+-   * normal (non-error) response, the future will be completed with the '=
result'
+-   * field from the response.  If the server acknowledges the command wit=
h an
+-   * error response, the future will be completed with an error.
+-   */
+-  Future<Map<String, dynamic>> send(
+-      String method, Map<String, dynamic> params) {
+-    return server.send(method, params);
+-  }
+-
+-  /**
+-   * Launch the analysis server.
+-   * Return a [Future] that completes when analysis server has started.
+-   */
+-  Future startServer() async {
+-    logger.log(Level.FINE, 'starting server');
+-    initializeInttestMixin();
+-    server =3D new Server();
+-    Completer serverConnected =3D new Completer();
+-    onServerConnected.listen((_) {
+-      logger.log(Level.FINE, 'connected to server');
+-      serverConnected.complete();
+-    });
+-    running =3D true;
+-    return server
+-        .start(diagnosticPort: diagnosticPort /*profileServer: true*/)
+-        .then((params) {
+-      server.listenToOutput(dispatchNotification);
+-      server.exitCode.then((_) {
+-        logger.log(Level.FINE, 'server stopped');
+-        running =3D false;
+-        _resultsReady();
+-      });
+-      return serverConnected.future;
+-    });
+-  }
+-
+-  /**
+-   * Shutdown the analysis server if it is running.
+-   */
+-  Future stopServer([Duration timeout =3D SHUTDOWN_TIMEOUT]) async {
+-    if (running) {
+-      logger.log(Level.FINE, 'requesting server shutdown');
+-      // Give the server a short time to comply with the shutdown request=
; if it
+-      // doesn't exit, then forcibly terminate it.
+-      sendServerShutdown();
+-      await server.exitCode.timeout(timeout, onTimeout: () {
+-        return server.kill('server failed to exit');
+-      });
+-    }
+-    _resultsReady();
+-  }
+-
+-  /**
+-   * If not already complete, signal the completer with the collected res=
ults.
+-   */
+-  void _resultsReady() {
+-    if (!_runCompleter.isCompleted) {
+-      _runCompleter.complete(results);
+-    }
+-  }
+-}
+-
+-/**
+- * [Measurement] tracks elapsed time for a given operation.
+- */
+-class Measurement {
+-  final String tag;
+-  final bool notification;
+-  final List<Duration> elapsedTimes =3D new List<Duration>();
+-  int errorCount =3D 0;
+-  int unexpectedResultCount =3D 0;
+-
+-  Measurement(this.tag, this.notification);
+-
+-  int get count =3D> elapsedTimes.length;
+-
+-  void printSummary(int keyLen) {
+-    int count =3D 0;
+-    Duration maxTime =3D elapsedTimes[0];
+-    Duration minTime =3D elapsedTimes[0];
+-    int totalTimeMicros =3D 0;
+-    for (Duration elapsed in elapsedTimes) {
+-      ++count;
+-      int timeMicros =3D elapsed.inMicroseconds;
+-      maxTime =3D maxTime.compareTo(elapsed) > 0 ? maxTime : elapsed;
+-      minTime =3D minTime.compareTo(elapsed) < 0 ? minTime : elapsed;
+-      totalTimeMicros +=3D timeMicros;
+-    }
+-    int meanTime =3D (totalTimeMicros / count).round();
+-    List<Duration> sorted =3D elapsedTimes.toList()..sort();
+-    Duration time90th =3D sorted[(sorted.length * 0.90).round() - 1];
+-    Duration time99th =3D sorted[(sorted.length * 0.99).round() - 1];
+-    int differenceFromMeanSquared =3D 0;
+-    for (Duration elapsed in elapsedTimes) {
+-      int timeMicros =3D elapsed.inMicroseconds;
+-      int differenceFromMean =3D timeMicros - meanTime;
+-      differenceFromMeanSquared +=3D differenceFromMean * differenceFromM=
ean;
+-    }
+-    double variance =3D differenceFromMeanSquared / count;
+-    int standardDeviation =3D sqrt(variance).round();
+-
+-    StringBuffer sb =3D new StringBuffer();
+-    _printColumn(sb, tag, keyLen);
+-    _printColumn(sb, count.toString(), 6, rightJustified: true);
+-    _printColumn(sb, errorCount.toString(), 6, rightJustified: true);
+-    _printColumn(sb, unexpectedResultCount.toString(), 6, rightJustified:=
 true);
+-    _printDuration(sb, new Duration(microseconds: meanTime));
+-    _printDuration(sb, time90th);
+-    _printDuration(sb, time99th);
+-    _printDuration(sb, new Duration(microseconds: standardDeviation));
+-    _printDuration(sb, minTime);
+-    _printDuration(sb, maxTime);
+-    _printDuration(sb, new Duration(microseconds: totalTimeMicros));
+-    print(sb.toString());
+-  }
+-
+-  void record(bool success, Duration elapsed) {
+-    if (!success) {
+-      ++errorCount;
+-    }
+-    elapsedTimes.add(elapsed);
+-  }
+-
+-  void recordUnexpectedResults() {
+-    ++unexpectedResultCount;
+-  }
+-
+-  void _printDuration(StringBuffer sb, Duration duration) {
+-    _printColumn(sb, duration.inMilliseconds.toString(), 15,
+-        rightJustified: true);
+-  }
+-}
+-
+-/**
+- * [Results] contains information gathered by [Driver]
+- * while running the analysis server
+- */
+-class Results {
+-  Map<String, Measurement> measurements =3D new Map<String, Measurement>(=
);
+-
+-  /**
+-   * Display results on stdout.
+-   */
+-  void printResults() {
+-    print('');
+-    print('=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D');
+-    print('');
+-    List<String> keys =3D measurements.keys.toList()..sort();
+-    int keyLen =3D keys.fold(0, (int len, String key) =3D> max(len, key.l=
ength));
+-    _printGroupHeader('Request/Response', keyLen);
+-    int totalCount =3D 0;
+-    int totalErrorCount =3D 0;
+-    int totalUnexpectedResultCount =3D 0;
+-    for (String tag in keys) {
+-      Measurement m =3D measurements[tag];
+-      if (!m.notification) {
+-        m.printSummary(keyLen);
+-        totalCount +=3D m.count;
+-        totalErrorCount +=3D m.errorCount;
+-        totalUnexpectedResultCount +=3D m.unexpectedResultCount;
+-      }
+-    }
+-    _printTotals(
+-        keyLen, totalCount, totalErrorCount, totalUnexpectedResultCount);
+-    print('');
+-    _printGroupHeader('Notifications', keyLen);
+-    for (String tag in keys) {
+-      Measurement m =3D measurements[tag];
+-      if (m.notification) {
+-        m.printSummary(keyLen);
+-      }
+-    }
+-
+-    /// TODO(danrubel) *** print warnings if driver caches are not empty =
****
+-    print('''
+-
+-(1) uxr =3D UneXpected Results or responses received from the server
+-          that do not match the recorded response for that request.
+-(2) all times in milliseconds''');
+-  }
+-
+-  /**
+-   * Record the elapsed time for the given operation.
+-   */
+-  void record(String tag, Duration elapsed,
+-      {bool notification: false, bool success: true}) {
+-    Measurement measurement =3D measurements[tag];
+-    if (measurement =3D=3D null) {
+-      measurement =3D new Measurement(tag, notification);
+-      measurements[tag] =3D measurement;
+-    }
+-    measurement.record(success, elapsed);
+-  }
+-
+-  void recordUnexpectedResults(String tag) {
+-    measurements[tag].recordUnexpectedResults();
+-  }
+-
+-  void _printGroupHeader(String groupName, int keyLen) {
+-    StringBuffer sb =3D new StringBuffer();
+-    _printColumn(sb, groupName, keyLen);
+-    _printColumn(sb, 'count', 6, rightJustified: true);
+-    _printColumn(sb, 'error', 6, rightJustified: true);
+-    _printColumn(sb, 'uxr(1)', 6, rightJustified: true);
+-    sb.write('  ');
+-    _printColumn(sb, 'mean(2)', 15);
+-    _printColumn(sb, '90th', 15);
+-    _printColumn(sb, '99th', 15);
+-    _printColumn(sb, 'std-dev', 15);
+-    _printColumn(sb, 'minimum', 15);
+-    _printColumn(sb, 'maximum', 15);
+-    _printColumn(sb, 'total', 15);
+-    print(sb.toString());
+-  }
+-
+-  void _printTotals(int keyLen, int totalCount, int totalErrorCount,
+-      int totalUnexpectedResultCount) {
+-    StringBuffer sb =3D new StringBuffer();
+-    _printColumn(sb, 'Totals', keyLen);
+-    _printColumn(sb, totalCount.toString(), 6, rightJustified: true);
+-    _printColumn(sb, totalErrorCount.toString(), 6, rightJustified: true);
+-    _printColumn(sb, totalUnexpectedResultCount.toString(), 6,
+-        rightJustified: true);
+-    print(sb.toString());
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/input_converter.dar=
t b/pkg/analysis_server/benchmark/integration/input_converter.dart
+deleted file mode 100644
+index 70999d504aa..00000000000
+--- a/pkg/analysis_server/benchmark/integration/input_converter.dart
++++ /dev/null
+@@ -1,399 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-
+-import 'package:analysis_server/protocol/protocol.dart';
+-import 'package:analysis_server/protocol/protocol_constants.dart';
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-import 'package:logging/logging.dart';
+-import 'package:path/path.dart' as path;
+-
+-import 'instrumentation_input_converter.dart';
+-import 'log_file_input_converter.dart';
+-import 'operation.dart';
+-
+-/**
+- * Common input converter superclass for sharing implementation.
+- */
+-abstract class CommonInputConverter extends Converter<String, Operation> {
+-  static final ERROR_PREFIX =3D 'Server responded with an error: ';
+-  final Logger logger =3D new Logger('InstrumentationInputConverter');
+-  final Set<String> eventsSeen =3D new Set<String>();
+-
+-  /**
+-   * A mapping from request/response id to request json
+-   * for those requests for which a response has not been processed.
+-   */
+-  final Map<String, dynamic> requestMap =3D {};
+-
+-  /**
+-   * A mapping from request/response id to a completer
+-   * for those requests for which a response has not been processed.
+-   * The completer is called with the actual json response
+-   * when it becomes available.
+-   */
+-  final Map<String, Completer> responseCompleters =3D {};
+-
+-  /**
+-   * A mapping from request/response id to the actual response result
+-   * for those responses that have not been processed.
+-   */
+-  final Map<String, dynamic> responseMap =3D {};
+-
+-  /**
+-   * A mapping of current overlay content
+-   * parallel to what is in the analysis server
+-   * so that we can update the file system.
+-   */
+-  final Map<String, String> overlays =3D {};
+-
+-  /**
+-   * The prefix used to determine if a request parameter is a file path.
+-   */
+-  final String rootPrefix =3D path.rootPrefix(path.current);
+-
+-  /**
+-   * A mapping of source path prefixes
+-   * from location where instrumentation or log file was generated
+-   * to the target location of the source using during performance measur=
ement.
+-   */
+-  final PathMap srcPathMap;
+-
+-  /**
+-   * The root directory for all source being modified
+-   * during performance measurement.
+-   */
+-  final String tmpSrcDirPath;
+-
+-  CommonInputConverter(this.tmpSrcDirPath, this.srcPathMap);
+-
+-  Map<String, dynamic> asMap(dynamic value) =3D> value as Map<String, dyn=
amic>;
+-
+-  /**
+-   * Return an operation for the notification or `null` if none.
+-   */
+-  Operation convertNotification(Map<String, dynamic> json) {
+-    String event =3D json['event'];
+-    if (event =3D=3D SERVER_NOTIFICATION_STATUS) {
+-      // {"event":"server.status","params":{"analysis":{"isAnalyzing":fal=
se}}}
+-      Map<String, dynamic> params =3D asMap(json['params']);
+-      if (params !=3D null) {
+-        Map<String, dynamic> analysis =3D asMap(params['analysis']);
+-        if (analysis !=3D null && analysis['isAnalyzing'] =3D=3D false) {
+-          return new WaitForAnalysisCompleteOperation();
+-        }
+-      }
+-    }
+-    if (event =3D=3D SERVER_NOTIFICATION_CONNECTED) {
+-      // {"event":"server.connected","params":{"version":"1.7.0"}}
+-      return new StartServerOperation();
+-    }
+-    if (eventsSeen.add(event)) {
+-      logger.log(Level.INFO, 'Ignored notification: $event\n  $json');
+-    }
+-    return null;
+-  }
+-
+-  /**
+-   * Return an operation for the request or `null` if none.
+-   */
+-  Operation convertRequest(Map<String, dynamic> origJson) {
+-    Map<String, dynamic> json =3D asMap(translateSrcPaths(origJson));
+-    requestMap[json['id']] =3D json;
+-    String method =3D json['method'];
+-    // Sanity check operations that modify source
+-    // to ensure that the operation is on source in temp space
+-    if (method =3D=3D ANALYSIS_REQUEST_UPDATE_CONTENT) {
+-      // Track overlays in parallel with the analysis server
+-      // so that when an overlay is removed, the file can be updated on d=
isk
+-      Request request =3D new Request.fromJson(json);
+-      var params =3D new AnalysisUpdateContentParams.fromRequest(request);
+-      params.files.forEach((String filePath, change) {
+-        if (change is AddContentOverlay) {
+-          String content =3D change.content;
+-          if (content =3D=3D null) {
+-            throw 'expected new overlay content\n$json';
+-          }
+-          overlays[filePath] =3D content;
+-        } else if (change is ChangeContentOverlay) {
+-          String content =3D overlays[filePath];
+-          if (content =3D=3D null) {
+-            throw 'expected cached overlay content\n$json';
+-          }
+-          overlays[filePath] =3D SourceEdit.applySequence(content, change=
.edits);
+-        } else if (change is RemoveContentOverlay) {
+-          String content =3D overlays.remove(filePath);
+-          if (content =3D=3D null) {
+-            throw 'expected cached overlay content\n$json';
+-          }
+-          if (!path.isWithin(tmpSrcDirPath, filePath)) {
+-            throw 'found path referencing source outside temp space\n$fil=
ePath\n$json';
+-          }
+-          new File(filePath).writeAsStringSync(content);
+-        } else {
+-          throw 'unknown overlay change $change\n$json';
+-        }
+-      });
+-      return new RequestOperation(this, json);
+-    }
+-    // Track performance for completion notifications
+-    if (method =3D=3D COMPLETION_REQUEST_GET_SUGGESTIONS) {
+-      return new CompletionRequestOperation(this, json);
+-    }
+-    // TODO(danrubel) replace this with code
+-    // that just forwards the translated request
+-    if (method =3D=3D ANALYSIS_REQUEST_GET_HOVER ||
+-        method =3D=3D ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS ||
+-        method =3D=3D ANALYSIS_REQUEST_SET_PRIORITY_FILES ||
+-        method =3D=3D ANALYSIS_REQUEST_SET_SUBSCRIPTIONS ||
+-        method =3D=3D ANALYSIS_REQUEST_UPDATE_OPTIONS ||
+-        method =3D=3D EDIT_REQUEST_GET_ASSISTS ||
+-        method =3D=3D EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS ||
+-        method =3D=3D EDIT_REQUEST_GET_FIXES ||
+-        method =3D=3D EDIT_REQUEST_GET_REFACTORING ||
+-        method =3D=3D EDIT_REQUEST_SORT_MEMBERS ||
+-        method =3D=3D EXECUTION_REQUEST_CREATE_CONTEXT ||
+-        method =3D=3D EXECUTION_REQUEST_DELETE_CONTEXT ||
+-        method =3D=3D EXECUTION_REQUEST_MAP_URI ||
+-        method =3D=3D EXECUTION_REQUEST_SET_SUBSCRIPTIONS ||
+-        method =3D=3D SEARCH_REQUEST_FIND_ELEMENT_REFERENCES ||
+-        method =3D=3D SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS ||
+-        method =3D=3D SERVER_REQUEST_GET_VERSION ||
+-        method =3D=3D SERVER_REQUEST_SET_SUBSCRIPTIONS) {
+-      return new RequestOperation(this, json);
+-    }
+-    throw 'unknown request: $method\n  $json';
+-  }
+-
+-  /**
+-   * Return an operation for the recorded/expected response.
+-   */
+-  Operation convertResponse(Map<String, dynamic> json) {
+-    return new ResponseOperation(this, asMap(requestMap.remove(json['id']=
)),
+-        asMap(translateSrcPaths(json)));
+-  }
+-
+-  void logOverlayContent() {
+-    logger.log(Level.WARNING, '${overlays.length} overlays');
+-    List<String> allPaths =3D overlays.keys.toList()..sort();
+-    for (String filePath in allPaths) {
+-      logger.log(Level.WARNING, 'overlay $filePath\n${overlays[filePath]}=
');
+-    }
+-  }
+-
+-  /**
+-   * Process an error response from the server by either
+-   * completing the associated completer in the [responseCompleters]
+-   * or stashing it in [responseMap] if no completer exists.
+-   */
+-  void processErrorResponse(String id, exception) {
+-    var result =3D exception;
+-    if (exception is UnimplementedError) {
+-      if (exception.message.startsWith(ERROR_PREFIX)) {
+-        result =3D JSON.decode(exception.message.substring(ERROR_PREFIX.l=
ength));
+-      }
+-    }
+-    processResponseResult(id, result);
+-  }
+-
+-  /**
+-   * Process the expected response by completing the given completer
+-   * with the result if it has already been received,
+-   * or caching the completer to be completed when the server
+-   * returns the associated result.
+-   * Return a future that completes when the response is received
+-   * or `null` if the response has already been received
+-   * and the completer completed.
+-   */
+-  Future processExpectedResponse(String id, Completer completer) {
+-    if (responseMap.containsKey(id)) {
+-      logger.log(Level.INFO, 'processing cached response $id');
+-      completer.complete(responseMap.remove(id));
+-      return null;
+-    } else {
+-      logger.log(Level.INFO, 'waiting for response $id');
+-      responseCompleters[id] =3D completer;
+-      return completer.future;
+-    }
+-  }
+-
+-  /**
+-   * Process a success response result from the server by either
+-   * completing the associated completer in the [responseCompleters]
+-   * or stashing it in [responseMap] if no completer exists.
+-   * The response result may be `null`.
+-   */
+-  void processResponseResult(String id, result) {
+-    Completer completer =3D responseCompleters[id];
+-    if (completer !=3D null) {
+-      logger.log(Level.INFO, 'processing response $id');
+-      completer.complete(result);
+-    } else {
+-      logger.log(Level.INFO, 'caching response $id');
+-      responseMap[id] =3D result;
+-    }
+-  }
+-
+-  /**
+-   * Recursively translate source paths in the specified JSON to reference
+-   * the temporary source used during performance measurement rather than
+-   * the original source when the instrumentation or log file was generat=
ed.
+-   */
+-  translateSrcPaths(json) {
+-    if (json is String) {
+-      return srcPathMap.translate(json);
+-    }
+-    if (json is List) {
+-      List result =3D [];
+-      for (int i =3D 0; i < json.length; ++i) {
+-        result.add(translateSrcPaths(json[i]));
+-      }
+-      return result;
+-    }
+-    if (json is Map) {
+-      Map<String, dynamic> result =3D new Map<String, dynamic>();
+-      json.forEach((origKey, value) {
+-        result[translateSrcPaths(origKey)] =3D translateSrcPaths(value);
+-      });
+-      return result;
+-    }
+-    return json;
+-  }
+-}
+-
+-/**
+- * [InputConverter] converts an input stream
+- * into a series of operations to be sent to the analysis server.
+- * The input stream can be either an instrumentation or log file.
+- */
+-class InputConverter extends Converter<String, Operation> {
+-  final Logger logger =3D new Logger('InputConverter');
+-
+-  /**
+-   * A mapping of source path prefixes
+-   * from location where instrumentation or log file was generated
+-   * to the target location of the source using during performance measur=
ement.
+-   */
+-  final PathMap srcPathMap;
+-
+-  /**
+-   * The root directory for all source being modified
+-   * during performance measurement.
+-   */
+-  final String tmpSrcDirPath;
+-
+-  /**
+-   * The number of lines read before the underlying converter was determi=
ned
+-   * or the end of file was reached.
+-   */
+-  int headerLineCount =3D 0;
+-
+-  /**
+-   * The underlying converter used to translate lines into operations
+-   * or `null` if it has not yet been determined.
+-   */
+-  Converter<String, Operation> converter;
+-
+-  /**
+-   * [active] is `true` if converting lines to operations
+-   * or `false` if an exception has occurred.
+-   */
+-  bool active =3D true;
+-
+-  InputConverter(this.tmpSrcDirPath, this.srcPathMap);
+-
+-  @override
+-  Operation convert(String line) {
+-    if (!active) {
+-      return null;
+-    }
+-    if (converter !=3D null) {
+-      try {
+-        return converter.convert(line);
+-      } catch (e) {
+-        active =3D false;
+-        rethrow;
+-      }
+-    }
+-    if (headerLineCount =3D=3D 20) {
+-      throw 'Failed to determine input file format';
+-    }
+-    if (InstrumentationInputConverter.isFormat(line)) {
+-      converter =3D new InstrumentationInputConverter(tmpSrcDirPath, srcP=
athMap);
+-    } else if (LogFileInputConverter.isFormat(line)) {
+-      converter =3D new LogFileInputConverter(tmpSrcDirPath, srcPathMap);
+-    }
+-    if (converter !=3D null) {
+-      return converter.convert(line);
+-    }
+-    logger.log(Level.INFO, 'skipped input line: $line');
+-    return null;
+-  }
+-
+-  @override
+-  _InputSink startChunkedConversion(outSink) {
+-    return new _InputSink(this, outSink);
+-  }
+-}
+-
+-/**
+- * A container of [PathMapEntry]s used to translate a source path in the =
log
+- * before it is sent to the analysis server.
+- */
+-class PathMap {
+-  final List<PathMapEntry> entries =3D [];
+-
+-  void add(String oldSrcPrefix, String newSrcPrefix) {
+-    entries.add(new PathMapEntry(oldSrcPrefix, newSrcPrefix));
+-  }
+-
+-  String translate(String original) {
+-    String result =3D original;
+-    for (PathMapEntry entry in entries) {
+-      result =3D entry.translate(result);
+-    }
+-    return result;
+-  }
+-}
+-
+-/**
+- * An entry in [PathMap] used to translate a source path in the log
+- * before it is sent to the analysis server.
+- */
+-class PathMapEntry {
+-  final String oldSrcPrefix;
+-  final String newSrcPrefix;
+-
+-  PathMapEntry(this.oldSrcPrefix, this.newSrcPrefix);
+-
+-  String translate(String original) {
+-    return original.startsWith(oldSrcPrefix)
+-        ? '$newSrcPrefix${original.substring(oldSrcPrefix.length)}'
+-        : original;
+-  }
+-}
+-
+-class _InputSink extends ChunkedConversionSink<String> {
+-  final Converter<String, Operation> converter;
+-  final outSink;
+-
+-  _InputSink(this.converter, this.outSink);
+-
+-  @override
+-  void add(String line) {
+-    Operation op =3D converter.convert(line);
+-    if (op !=3D null) {
+-      outSink.add(op);
+-    }
+-  }
+-
+-  @override
+-  void close() {
+-    outSink.close();
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/instrumentation_inp=
ut_converter.dart b/pkg/analysis_server/benchmark/integration/instrumentati=
on_input_converter.dart
+deleted file mode 100644
+index 7a875942643..00000000000
+--- a/pkg/analysis_server/benchmark/integration/instrumentation_input_conv=
erter.dart
++++ /dev/null
+@@ -1,146 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:convert';
+-
+-import 'package:analyzer/exception/exception.dart';
+-import 'package:analyzer/instrumentation/instrumentation.dart';
+-import 'package:logging/logging.dart';
+-
+-import 'input_converter.dart';
+-import 'operation.dart';
+-
+-final int COLON =3D ':'.codeUnitAt(0);
+-
+-/**
+- * [InstrumentationInputConverter] converts an instrumentation stream
+- * into a series of operations to be sent to the analysis server.
+- */
+-class InstrumentationInputConverter extends CommonInputConverter {
+-  final Set<String> codesSeen =3D new Set<String>();
+-
+-  /**
+-   * [readBuffer] holds the contents of the file being read from disk
+-   * as recorded in the instrumentation log
+-   * or `null` if not converting a "Read" entry.
+-   */
+-  StringBuffer readBuffer =3D null;
+-
+-  InstrumentationInputConverter(String tmpSrcDirPath, PathMap srcPathMap)
+-      : super(tmpSrcDirPath, srcPathMap);
+-
+-  @override
+-  Operation convert(String line) {
+-    List<String> fields;
+-    try {
+-      fields =3D _parseFields(line);
+-      if (fields.length < 2) {
+-        if (readBuffer !=3D null) {
+-          readBuffer.writeln(fields.length =3D=3D 1 ? fields[0] : '');
+-          return null;
+-        }
+-        throw 'Failed to process line:\n$line';
+-      }
+-      if (readBuffer !=3D null) {
+-        readBuffer =3D null;
+-      }
+-    } catch (e, s) {
+-      throw new AnalysisException(
+-          'Failed to parse line\n$line', new CaughtException(e, s));
+-    }
+-    // int timeStamp =3D int.parse(fields[0], onError: (_) =3D> -1);
+-    String opCode =3D fields[1];
+-    if (opCode =3D=3D InstrumentationService.TAG_NOTIFICATION) {
+-      return convertNotification(decodeJson(line, fields[2]));
+-    } else if (opCode =3D=3D 'Read') {
+-      // 1434096943209:Read:/some/file/path:1434095535000:<file content>
+-      //String filePath =3D fields[2];
+-      readBuffer =3D new StringBuffer(fields.length > 4 ? fields[4] : '');
+-      return null;
+-    } else if (opCode =3D=3D InstrumentationService.TAG_REQUEST) {
+-      return convertRequest(decodeJson(line, fields[2]));
+-    } else if (opCode =3D=3D InstrumentationService.TAG_RESPONSE) {
+-      // 1434096937454:Res:{"id"::"0","result"::{"version"::"1.7.0"}}
+-      return convertResponse(decodeJson(line, fields[2]));
+-    } else if (opCode =3D=3D InstrumentationService.TAG_ANALYSIS_TASK) {
+-      // 1434096943208:Task:/Users/
+-      return null;
+-    } else if (opCode =3D=3D InstrumentationService.TAG_LOG_ENTRY) {
+-      // 1434096937454:Res:{"id"::"0","result"::{"version"::"1.7.0"}}
+-      return null;
+-    } else if (opCode =3D=3D InstrumentationService.TAG_PERFORMANCE) {
+-      //1434096960092:Perf:analysis_full:16884:context_id=3D0
+-      return null;
+-    } else if (opCode =3D=3D InstrumentationService.TAG_SUBPROCESS_START)=
 {
+-      // 1434096938634:SPStart:0:/Users/da
+-      return null;
+-    } else if (opCode =3D=3D InstrumentationService.TAG_SUBPROCESS_RESULT=
) {
+-      // 1434096939068:SPResult:0:0:"{\"packages\"::{\"rpi_lidar\"::\"/Us=
ers
+-      return null;
+-    } else if (opCode =3D=3D InstrumentationService.TAG_VERSION) {
+-      // 1434096937358:Ver:1421765742287333878467:org.dartlang.dartplugin
+-      return null;
+-    } else if (opCode =3D=3D InstrumentationService.TAG_WATCH_EVENT) {
+-      // 1434097460414:Watch:/some/file/path
+-      return null;
+-    }
+-    if (codesSeen.add(opCode)) {
+-      logger.log(
+-          Level.WARNING, 'Ignored instrumentation op code: $opCode\n  $li=
ne');
+-    }
+-    return null;
+-  }
+-
+-  Map<String, dynamic> decodeJson(String line, String text) {
+-    try {
+-      return asMap(JSON.decode(text));
+-    } catch (e, s) {
+-      throw new AnalysisException(
+-          'Failed to decode JSON: $text\n$line', new CaughtException(e, s=
));
+-    }
+-  }
+-
+-  /**
+-   * Determine if the given line is from an instrumentation file.
+-   * For example:
+-   * `1433175833005:Ver:1421765742287333878467:org.dartlang.dartplugin:0.=
0.0:1.6.2:1.11.0-edge.131698`
+-   */
+-  static bool isFormat(String line) {
+-    List<String> fields =3D _parseFields(line);
+-    if (fields.length < 2) return false;
+-    int timeStamp =3D int.parse(fields[0], onError: (_) =3D> -1);
+-    String opCode =3D fields[1];
+-    return timeStamp > 0 && opCode =3D=3D 'Ver';
+-  }
+-
+-  /**
+-   * Extract fields from the given [line].
+-   */
+-  static List<String> _parseFields(String line) {
+-    List<String> fields =3D new List<String>();
+-    int index =3D 0;
+-    StringBuffer sb =3D new StringBuffer();
+-    while (index < line.length) {
+-      int code =3D line.codeUnitAt(index);
+-      if (code =3D=3D COLON) {
+-        // Embedded colons are doubled
+-        int next =3D index + 1;
+-        if (next < line.length && line.codeUnitAt(next) =3D=3D COLON) {
+-          sb.write(':');
+-          ++index;
+-        } else {
+-          fields.add(sb.toString());
+-          sb.clear();
+-        }
+-      } else {
+-        sb.writeCharCode(code);
+-      }
+-      ++index;
+-    }
+-    if (sb.isNotEmpty) {
+-      fields.add(sb.toString());
+-    }
+-    return fields;
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/local_runner.dart b=
/pkg/analysis_server/benchmark/integration/local_runner.dart
+deleted file mode 100644
+index 28ef5bb9136..00000000000
+--- a/pkg/analysis_server/benchmark/integration/local_runner.dart
++++ /dev/null
+@@ -1,91 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:io';
+-
+-import 'package:path/path.dart';
+-
+-import 'main.dart' as performance;
+-
+-// Local driver for performance measurement
+-
+-main(List<String> args) {
+-  /*
+-   * Parse arguments
+-   */
+-  if (args.length < 3) printHelp('Expected 3 arguments');
+-  var gitDir =3D new Directory(args[0]);
+-  if (!gitDir.existsSync()) printHelp('${gitDir.path} does not exist');
+-  if (!new Directory(join(gitDir.path, '.git')).existsSync())
+-    printHelp('${gitDir.path} does not appear to be a local git repositor=
y');
+-  var branch =3D args[1];
+-  var inputFile =3D new File(args[2]);
+-  if (!inputFile.existsSync()) printHelp('${inputFile.path} does not exis=
t');
+-  /*
+-   * Create a new temp directory
+-   */
+-  var tmpDir =3D new Directory(
+-      join(Directory.systemTemp.path, 'analysis_server_perf_target'));
+-  if (!tmpDir.path.contains('tmp')) throw 'invalid tmp directory\n  $tmpD=
ir';
+-  print('Extracting target analysis environment into\n  ${tmpDir.path}');
+-  if (tmpDir.existsSync()) tmpDir.deleteSync(recursive: true);
+-  tmpDir.createSync(recursive: true);
+-  /*
+-   * Setup the initial target source in the temp directory
+-   */
+-  var tarFilePath =3D join(tmpDir.path, 'targetSrc.tar');
+-  var result =3D Process.runSync('git', ['archive', branch, '-o', tarFile=
Path],
+-      workingDirectory: gitDir.path);
+-  if (result.exitCode !=3D 0) throw 'failed to obtain target source: $res=
ult';
+-  var tmpSrcDirPath =3D join(tmpDir.path, 'targetSrc');
+-  new Directory(tmpSrcDirPath).createSync();
+-  result =3D Process.runSync('tar', ['-xf', tarFilePath],
+-      workingDirectory: tmpSrcDirPath);
+-  if (result.exitCode !=3D 0) throw 'failed to extract target source: $re=
sult';
+-  /*
+-   * Symlink the out or xcodebuild directory
+-   */
+-  var outDirName =3D 'out';
+-  if (!new Directory(join(gitDir.path, outDirName)).existsSync()) {
+-    outDirName =3D 'xcodebuild';
+-  }
+-  if (!new Directory(join(gitDir.path, outDirName)).existsSync()) {
+-    throw 'failed to find out or xcodebuild directory';
+-  }
+-  result =3D Process.runSync('ln',
+-      ['-s', join(gitDir.path, outDirName), join(tmpSrcDirPath, outDirNam=
e)]);
+-  if (result.exitCode !=3D 0) throw 'failed to link out or xcodebuild: $r=
esult';
+-  /*
+-   * Collect arguments
+-   */
+-  var perfArgs =3D [
+-    '-i${inputFile.path}',
+-    '-t$tmpSrcDirPath',
+-  ];
+-  for (int index =3D 3; index < args.length; ++index) {
+-    perfArgs.add(args[index].replaceAll('@tmpSrcDir@', tmpSrcDirPath));
+-  }
+-  perfArgs.add('-m${gitDir.path},$tmpSrcDirPath');
+-  /*
+-   * Launch the performance analysis tool
+-   */
+-  performance.main(perfArgs);
+-}
+-
+-/// Print help and exit
+-void printHelp([String errMsg]) {
+-  if (errMsg !=3D null) {
+-    print('');
+-    print('Error: $errMsg');
+-    print('');
+-  }
+-  print('''Required arguments: <gitDir> <branch> <inputFile>
+-gitDir =3D a path to the git repository containing the initial target sou=
rce
+-branch =3D the branch containing the initial target source
+-inputFile =3D the instrumentation or log file
+-
+-Optional arguments:''');
+-  print(performance.argParser.usage);
+-  exit(1);
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/log_file_input_conv=
erter.dart b/pkg/analysis_server/benchmark/integration/log_file_input_conve=
rter.dart
+deleted file mode 100644
+index 79d3d6e955c..00000000000
+--- a/pkg/analysis_server/benchmark/integration/log_file_input_converter.d=
art
++++ /dev/null
+@@ -1,82 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:convert';
+-
+-import 'package:analyzer/exception/exception.dart';
+-import 'package:logging/logging.dart';
+-
+-import 'input_converter.dart';
+-import 'operation.dart';
+-
+-const CONNECTED_MSG_FRAGMENT =3D ' <=3D {"event":"server.connected"';
+-const RECEIVED_FRAGMENT =3D ' <=3D {';
+-const SENT_FRAGMENT =3D ' =3D> {';
+-final int NINE =3D '9'.codeUnitAt(0);
+-final int ZERO =3D '0'.codeUnitAt(0);
+-
+-/**
+- * [LogFileInputConverter] converts a log file stream
+- * into a series of operations to be sent to the analysis server.
+- */
+-class LogFileInputConverter extends CommonInputConverter {
+-  LogFileInputConverter(String tmpSrcDirPath, PathMap srcPathMap)
+-      : super(tmpSrcDirPath, srcPathMap);
+-
+-  @override
+-  Operation convert(String line) {
+-    try {
+-      String timeStampString =3D _parseTimeStamp(line);
+-      String data =3D line.substring(timeStampString.length);
+-      if (data.startsWith(RECEIVED_FRAGMENT)) {
+-        Map<String, dynamic> json =3D asMap(JSON.decode(data.substring(4)=
));
+-        if (json.containsKey('event')) {
+-          return convertNotification(json);
+-        } else {
+-          return convertResponse(json);
+-        }
+-      } else if (data.startsWith(SENT_FRAGMENT)) {
+-        Map<String, dynamic> json =3D asMap(JSON.decode(data.substring(4)=
));
+-        if (json.containsKey('method')) {
+-          return convertRequest(json);
+-        }
+-        return null;
+-      }
+-      logger.log(Level.INFO, 'unknown input line: $line');
+-      return null;
+-    } catch (e, s) {
+-      throw new AnalysisException(
+-          'Failed to parse line\n  $line', new CaughtException(e, s));
+-    }
+-  }
+-
+-  /**
+-   * Determine if the given line is from an instrumentation file.
+-   * For example:
+-   * `1428347977499 <=3D {"event":"server.connected","params":{"version":=
"1.6.0"}}`
+-   */
+-  static bool isFormat(String line) {
+-    String timeStampString =3D _parseTimeStamp(line);
+-    int start =3D timeStampString.length;
+-    int end =3D start + CONNECTED_MSG_FRAGMENT.length;
+-    return (10 < start && end < line.length) &&
+-        line.substring(start, end) =3D=3D CONNECTED_MSG_FRAGMENT;
+-  }
+-
+-  /**
+-   * Parse the given line and return the millisecond timestamp or `null`
+-   * if it cannot be determined.
+-   */
+-  static String _parseTimeStamp(String line) {
+-    int index =3D 0;
+-    while (index < line.length) {
+-      int code =3D line.codeUnitAt(index);
+-      if (code < ZERO || NINE < code) {
+-        return line.substring(0, index);
+-      }
+-      ++index;
+-    }
+-    return line;
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/main.dart b/pkg/ana=
lysis_server/benchmark/integration/main.dart
+deleted file mode 100644
+index 0760b171fab..00000000000
+--- a/pkg/analysis_server/benchmark/integration/main.dart
++++ /dev/null
+@@ -1,246 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-
+-import 'package:args/args.dart';
+-import 'package:logging/logging.dart';
+-import 'package:path/path.dart' as path;
+-
+-import 'driver.dart';
+-import 'input_converter.dart';
+-import 'operation.dart';
+-
+-/**
+- * Launch and interact with the analysis server.
+- */
+-main(List<String> rawArgs) {
+-  Logger logger =3D new Logger('Performance Measurement Client');
+-  logger.onRecord.listen((LogRecord rec) {
+-    print(rec.message);
+-  });
+-  PerfArgs args =3D parseArgs(rawArgs);
+-
+-  Driver driver =3D new Driver(diagnosticPort: args.diagnosticPort);
+-  Stream<Operation> stream =3D openInput(args);
+-  StreamSubscription<Operation> subscription;
+-  subscription =3D stream.listen((Operation op) {
+-    Future future =3D driver.perform(op);
+-    if (future !=3D null) {
+-      logger.log(Level.FINE, 'pausing operations for ${op.runtimeType}');
+-      subscription.pause(future.then((_) {
+-        logger.log(Level.FINE, 'resuming operations');
+-      }));
+-    }
+-  }, onDone: () {
+-    subscription.cancel();
+-    driver.stopServer(SHUTDOWN_TIMEOUT);
+-  }, onError: (e, s) {
+-    subscription.cancel();
+-    logger.log(Level.SEVERE, '$e\n$s');
+-    driver.stopServer(SHUTDOWN_TIMEOUT);
+-  });
+-  driver.runComplete.then((Results results) {
+-    results.printResults();
+-  }).whenComplete(() {
+-    return subscription.cancel();
+-  });
+-}
+-
+-const DIAGNOSTIC_PORT_OPTION =3D 'diagnosticPort';
+-const HELP_CMDLINE_OPTION =3D 'help';
+-const INPUT_CMDLINE_OPTION =3D 'input';
+-const MAP_OPTION =3D 'map';
+-
+-/**
+- * The amount of time to give the server to respond to a shutdown request
+- * before forcibly terminating it.
+- */
+-const Duration SHUTDOWN_TIMEOUT =3D const Duration(seconds: 25);
+-
+-const TMP_SRC_DIR_OPTION =3D 'tmpSrcDir';
+-const VERBOSE_CMDLINE_OPTION =3D 'verbose';
+-const VERY_VERBOSE_CMDLINE_OPTION =3D 'vv';
+-
+-ArgParser _argParser;
+-
+-ArgParser get argParser {
+-  _argParser =3D new ArgParser();
+-
+-  _argParser.addOption(INPUT_CMDLINE_OPTION,
+-      abbr: 'i',
+-      help: '<filePath>\n'
+-          'The input file specifying how this client should interact with=
 the server.\n'
+-          'If the input file name is "stdin", then the instructions are r=
ead from standard input.');
+-  _argParser.addOption(MAP_OPTION,
+-      abbr: 'm',
+-      allowMultiple: true,
+-      splitCommas: false,
+-      help: '<oldSrcPath>,<newSrcPath>\n'
+-          'This option defines a mapping from the original source directo=
ry <oldSrcPath>\n'
+-          'when the instrumentation or log file was generated\n'
+-          'to the target source directory <newSrcPath> used during perfor=
mance testing.\n'
+-          'Multiple mappings can be specified.\n'
+-          'WARNING: The contents of the target directory will be modified=
');
+-  _argParser.addOption(TMP_SRC_DIR_OPTION,
+-      abbr: 't',
+-      help: '<dirPath>\n'
+-          'The temporary directory containing source used during performa=
nce measurement.\n'
+-          'WARNING: The contents of the target directory will be modified=
');
+-  _argParser.addOption(DIAGNOSTIC_PORT_OPTION,
+-      abbr: 'd',
+-      help: 'localhost port on which server will provide diagnostic web p=
ages');
+-  _argParser.addFlag(VERBOSE_CMDLINE_OPTION,
+-      abbr: 'v', help: 'Verbose logging', negatable: false);
+-  _argParser.addFlag(VERY_VERBOSE_CMDLINE_OPTION,
+-      help: 'Extra verbose logging', negatable: false);
+-  _argParser.addFlag(HELP_CMDLINE_OPTION,
+-      abbr: 'h', help: 'Print this help information', negatable: false);
+-  return _argParser;
+-}
+-
+-/**
+- * Open and return the input stream specifying how this client
+- * should interact with the analysis server.
+- */
+-Stream<Operation> openInput(PerfArgs args) {
+-  var logger =3D new Logger('openInput');
+-  Stream<List<int>> inputRaw;
+-  if (args.inputPath =3D=3D 'stdin') {
+-    inputRaw =3D stdin;
+-  } else {
+-    inputRaw =3D new File(args.inputPath).openRead();
+-  }
+-  for (PathMapEntry entry in args.srcPathMap.entries) {
+-    logger.log(
+-        Level.INFO,
+-        'mapping source path\n'
+-        '  from ${entry.oldSrcPrefix}\n  to   ${entry.newSrcPrefix}');
+-  }
+-  logger.log(Level.INFO, 'tmpSrcDir: ${args.tmpSrcDirPath}');
+-  return inputRaw
+-      .transform(SYSTEM_ENCODING.decoder)
+-      .transform(new LineSplitter())
+-      .transform(new InputConverter(args.tmpSrcDirPath, args.srcPathMap));
+-}
+-
+-/**
+- * Parse the command line arguments.
+- */
+-PerfArgs parseArgs(List<String> rawArgs) {
+-  ArgResults args;
+-  PerfArgs perfArgs =3D new PerfArgs();
+-  try {
+-    args =3D argParser.parse(rawArgs);
+-  } on Exception catch (e) {
+-    print(e);
+-    printHelp();
+-    exit(1);
+-  }
+-
+-  bool showHelp =3D args[HELP_CMDLINE_OPTION] || args.rest.isNotEmpty;
+-
+-  bool isMissing(key) =3D> args[key] =3D=3D null || args[key].isEmpty;
+-
+-  perfArgs.inputPath =3D args[INPUT_CMDLINE_OPTION];
+-  if (isMissing(INPUT_CMDLINE_OPTION)) {
+-    print('missing $INPUT_CMDLINE_OPTION argument');
+-    showHelp =3D true;
+-  }
+-
+-  for (String pair in args[MAP_OPTION]) {
+-    if (pair is String) {
+-      int index =3D pair.indexOf(',');
+-      if (index !=3D -1 && pair.indexOf(',', index + 1) =3D=3D -1) {
+-        String oldSrcPrefix =3D _withTrailingSeparator(pair.substring(0, =
index));
+-        String newSrcPrefix =3D _withTrailingSeparator(pair.substring(ind=
ex + 1));
+-        if (new Directory(newSrcPrefix).existsSync()) {
+-          perfArgs.srcPathMap.add(oldSrcPrefix, newSrcPrefix);
+-          continue;
+-        }
+-      }
+-    }
+-    print('must specifiy $MAP_OPTION <oldSrcPath>,<newSrcPath>');
+-    showHelp =3D true;
+-  }
+-
+-  perfArgs.tmpSrcDirPath =3D _withTrailingSeparator(args[TMP_SRC_DIR_OPTI=
ON]);
+-  if (isMissing(TMP_SRC_DIR_OPTION)) {
+-    print('missing $TMP_SRC_DIR_OPTION argument');
+-    showHelp =3D true;
+-  }
+-
+-  String portText =3D args[DIAGNOSTIC_PORT_OPTION];
+-  if (portText !=3D null) {
+-    perfArgs.diagnosticPort =3D int.parse(portText, onError: (s) {
+-      print('invalid $DIAGNOSTIC_PORT_OPTION: $s');
+-      showHelp =3D true;
+-    });
+-  }
+-
+-  if (args[VERY_VERBOSE_CMDLINE_OPTION] || rawArgs.contains('-vv')) {
+-    Logger.root.level =3D Level.FINE;
+-  } else if (args[VERBOSE_CMDLINE_OPTION]) {
+-    Logger.root.level =3D Level.INFO;
+-  } else {
+-    Logger.root.level =3D Level.WARNING;
+-  }
+-
+-  if (showHelp) {
+-    printHelp();
+-    exit(1);
+-  }
+-
+-  return perfArgs;
+-}
+-
+-void printHelp() {
+-  print('');
+-  print('Launch and interact with the AnalysisServer');
+-  print('');
+-  print(argParser.usage);
+-}
+-
+-/**
+- * Ensure that the given path has a trailing separator
+- */
+-String _withTrailingSeparator(String dirPath) {
+-  if (dirPath !=3D null && dirPath.length > 4) {
+-    if (!dirPath.endsWith(path.separator)) {
+-      return '$dirPath${path.separator}';
+-    }
+-  }
+-  return dirPath;
+-}
+-
+-/**
+- * The performance measurement arguments specified on the command line.
+- */
+-class PerfArgs {
+-  /**
+-   * The file path of the instrumentation or log file
+-   * used to drive performance measurement,
+-   * or 'stdin' if this information should be read from standard input.
+-   */
+-  String inputPath;
+-
+-  /**
+-   * A mapping from the original source directory
+-   * when the instrumentation or log file was generated
+-   * to the target source directory used during performance testing.
+-   */
+-  final PathMap srcPathMap =3D new PathMap();
+-
+-  /**
+-   * The temporary directory containing source used during performance me=
asurement.
+-   */
+-  String tmpSrcDirPath;
+-
+-  /**
+-   * The diagnostic port for Analysis Server or `null` if none.
+-   */
+-  int diagnosticPort;
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/operation.dart b/pk=
g/analysis_server/benchmark/integration/operation.dart
+deleted file mode 100644
+index 75cf2a7edc9..00000000000
+--- a/pkg/analysis_server/benchmark/integration/operation.dart
++++ /dev/null
+@@ -1,236 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:logging/logging.dart';
+-
+-import 'driver.dart';
+-import 'input_converter.dart';
+-
+-/**
+- * A [CompletionRequestOperation] tracks response time along with
+- * the first and last completion notifications.
+- */
+-class CompletionRequestOperation extends RequestOperation {
+-  Driver driver;
+-  StreamSubscription<CompletionResultsParams> subscription;
+-  String notificationId;
+-  Stopwatch stopwatch;
+-  bool firstNotification =3D true;
+-
+-  CompletionRequestOperation(
+-      CommonInputConverter converter, Map<String, dynamic> json)
+-      : super(converter, json);
+-
+-  @override
+-  Future perform(Driver driver) {
+-    this.driver =3D driver;
+-    subscription =3D driver.onCompletionResults.listen(processNotificatio=
n);
+-    return super.perform(driver);
+-  }
+-
+-  void processNotification(CompletionResultsParams event) {
+-    if (event.id =3D=3D notificationId) {
+-      Duration elapsed =3D stopwatch.elapsed;
+-      if (firstNotification) {
+-        firstNotification =3D false;
+-        driver.results.record('completion notification first', elapsed,
+-            notification: true);
+-      }
+-      if (event.isLast) {
+-        subscription.cancel();
+-        driver.results.record('completion notification last', elapsed,
+-            notification: true);
+-      }
+-    }
+-  }
+-
+-  @override
+-  void processResult(
+-      String id, Map<String, dynamic> result, Stopwatch stopwatch) {
+-    notificationId =3D result['id'];
+-    this.stopwatch =3D stopwatch;
+-    super.processResult(id, result, stopwatch);
+-  }
+-}
+-
+-/**
+- * An [Operation] represents an action such as sending a request to the s=
erver.
+- */
+-abstract class Operation {
+-  Future perform(Driver driver);
+-}
+-
+-/**
+- * A [RequestOperation] sends a [JSON] request to the server.
+- */
+-class RequestOperation extends Operation {
+-  final CommonInputConverter converter;
+-  final Map<String, dynamic> json;
+-
+-  RequestOperation(this.converter, this.json);
+-
+-  @override
+-  Future perform(Driver driver) {
+-    Stopwatch stopwatch =3D new Stopwatch();
+-    String originalId =3D json['id'];
+-    String method =3D json['method'];
+-    json['clientRequestTime'] =3D new DateTime.now().millisecondsSinceEpo=
ch;
+-    driver.logger.log(Level.FINE, 'Sending request: $method\n  $json');
+-    stopwatch.start();
+-
+-    void recordResult(bool success, result) {
+-      Duration elapsed =3D stopwatch.elapsed;
+-      driver.results.record(method, elapsed, success: success);
+-      driver.logger
+-          .log(Level.FINE, 'Response received: $method : $elapsed\n  $res=
ult');
+-    }
+-
+-    driver
+-        .send(method, converter.asMap(json['params']))
+-        .then((Map<String, dynamic> result) {
+-      recordResult(true, result);
+-      processResult(originalId, result, stopwatch);
+-    }).catchError((exception) {
+-      recordResult(false, exception);
+-      converter.processErrorResponse(originalId, exception);
+-    });
+-    return null;
+-  }
+-
+-  void processResult(
+-      String id, Map<String, dynamic> result, Stopwatch stopwatch) {
+-    converter.processResponseResult(id, result);
+-  }
+-}
+-
+-/**
+- * A [ResponseOperation] waits for a [JSON] response from the server.
+- */
+-class ResponseOperation extends Operation {
+-  static final Duration responseTimeout =3D new Duration(seconds: 60);
+-  final CommonInputConverter converter;
+-  final Map<String, dynamic> requestJson;
+-  final Map<String, dynamic> responseJson;
+-  final Completer completer =3D new Completer();
+-  Driver driver;
+-
+-  ResponseOperation(this.converter, this.requestJson, this.responseJson) {
+-    completer.future.then(_processResult).timeout(responseTimeout);
+-  }
+-
+-  @override
+-  Future perform(Driver driver) {
+-    this.driver =3D driver;
+-    return converter.processExpectedResponse(responseJson['id'], complete=
r);
+-  }
+-
+-  bool _equal(expectedResult, actualResult) {
+-    if (expectedResult is Map && actualResult is Map) {
+-      if (expectedResult.length =3D=3D actualResult.length) {
+-        return expectedResult.keys.every((key) {
+-          return key =3D=3D
+-                  'fileStamp' || // fileStamp values will not be the same=
 across runs
+-              _equal(expectedResult[key], actualResult[key]);
+-        });
+-      }
+-    } else if (expectedResult is List && actualResult is List) {
+-      if (expectedResult.length =3D=3D actualResult.length) {
+-        for (int i =3D 0; i < expectedResult.length; ++i) {
+-          if (!_equal(expectedResult[i], actualResult[i])) {
+-            return false;
+-          }
+-        }
+-        return true;
+-      }
+-    }
+-    return expectedResult =3D=3D actualResult;
+-  }
+-
+-  /**
+-   * Compare the expected and actual server response result.
+-   */
+-  void _processResult(actualResult) {
+-    var expectedResult =3D responseJson['result'];
+-    if (!_equal(expectedResult, actualResult)) {
+-      var expectedError =3D responseJson['error'];
+-      String format(value) {
+-        String text =3D '\n$value';
+-        if (text.endsWith('\n')) {
+-          text =3D text.substring(0, text.length - 1);
+-        }
+-        return text.replaceAll('\n', '\n  ');
+-      }
+-
+-      String message =3D 'Request:${format(requestJson)}\n'
+-          'expected result:${format(expectedResult)}\n'
+-          'expected error:${format(expectedError)}\n'
+-          'but received:${format(actualResult)}';
+-      driver.results.recordUnexpectedResults(requestJson['method']);
+-      converter.logOverlayContent();
+-      if (expectedError =3D=3D null) {
+-        converter.logger.log(Level.SEVERE, message);
+-      } else {
+-        throw message;
+-      }
+-    }
+-  }
+-}
+-
+-class StartServerOperation extends Operation {
+-  @override
+-  Future perform(Driver driver) {
+-    return driver.startServer();
+-  }
+-}
+-
+-class WaitForAnalysisCompleteOperation extends Operation {
+-  @override
+-  Future perform(Driver driver) {
+-    DateTime start =3D new DateTime.now();
+-    driver.logger.log(Level.FINE, 'waiting for analysis to complete');
+-    StreamSubscription<ServerStatusParams> subscription;
+-    Timer timer;
+-    Completer completer =3D new Completer();
+-    bool isAnalyzing =3D false;
+-    subscription =3D driver.onServerStatus.listen((ServerStatusParams par=
ams) {
+-      if (params.analysis !=3D null) {
+-        if (params.analysis.isAnalyzing) {
+-          isAnalyzing =3D true;
+-        } else {
+-          subscription.cancel();
+-          timer.cancel();
+-          DateTime end =3D new DateTime.now();
+-          Duration delta =3D end.difference(start);
+-          driver.logger.log(Level.FINE, 'analysis complete after $delta');
+-          completer.complete();
+-          driver.results.record('analysis complete', delta, notification:=
 true);
+-        }
+-      }
+-    });
+-    timer =3D new Timer.periodic(new Duration(milliseconds: 20), (_) {
+-      if (!isAnalyzing) {
+-        // TODO (danrubel) revisit this once source change requests are i=
mplemented
+-        subscription.cancel();
+-        timer.cancel();
+-        driver.logger.log(Level.INFO, 'analysis never started');
+-        completer.complete();
+-        return;
+-      }
+-      // Timeout if no communication received within the last 60 seconds.
+-      double currentTime =3D driver.server.currentElapseTime;
+-      double lastTime =3D driver.server.lastCommunicationTime;
+-      if (currentTime - lastTime > 60) {
+-        subscription.cancel();
+-        timer.cancel();
+-        String message =3D 'gave up waiting for analysis to complete';
+-        driver.logger.log(Level.WARNING, message);
+-        completer.completeError(message);
+-      }
+-    });
+-    return completer.future;
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart=
 b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
+deleted file mode 100644
+index 79330458007..00000000000
+--- a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
++++ /dev/null
+@@ -1,161 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:args/args.dart';
+-import 'package:test/test.dart';
+-
+-import 'performance_tests.dart';
+-
+-/**
+- * Pass in the directory of the source to be analyzed as option `--source=
`,
+- * optionally specify a priority file with `--priority` and the specific
+- * test to run with `--metric`.  If no test is specified, the default is
+- * `analysis`.
+- */
+-main(List<String> arguments) {
+-  ArgParser parser =3D _createArgParser();
+-  var args =3D parser.parse(arguments);
+-  if (args[SOURCE_OPTION] =3D=3D null) {
+-    print('path to source directory must be specified');
+-    exit(1);
+-  }
+-  source =3D args[SOURCE_OPTION];
+-  priorityFile =3D args[PRIORITY_FILE_OPTION];
+-  List names =3D args[METRIC_NAME_OPTION] as List;
+-  for (var name in names) {
+-    metricNames.add(name as String);
+-  }
+-
+-  var test;
+-
+-  if (metricNames.isEmpty) {
+-    test =3D new AnalysisTimingTest();
+-  } else {
+-    test =3D new SubscriptionTimingTest();
+-  }
+-
+-  Future.wait(<Future>[test.test_timing()]);
+-}
+-
+-const DEFAULT_METRIC =3D 'analysis';
+-const METRIC_NAME_OPTION =3D 'metric';
+-const PRIORITY_FILE_OPTION =3D 'priority';
+-const SOURCE_OPTION =3D 'source';
+-
+-final metricNames =3D <String>[];
+-String priorityFile;
+-String source;
+-
+-ArgParser _createArgParser() =3D> new ArgParser()
+-  ..addOption(METRIC_NAME_OPTION,
+-      help: 'metric name (defaults to `analysis`)', allowMultiple: true)
+-  ..addOption(SOURCE_OPTION, help: 'full path to source directory for ana=
lysis')
+-  ..addOption(PRIORITY_FILE_OPTION,
+-      help: '(optional) full path to a priority file');
+-
+-/**
+- * AnalysisTimingTest measures the time taken by the analysis server to f=
ully analyze
+- * the given directory. Measurement is started after setting the analysis=
 root, and
+- * analysis is considered complete on receiving the `"isAnalyzing": false=
` message
+- * from the analysis server.
+- */
+-class AnalysisTimingTest extends AbstractTimingTest {
+-  Future test_timing() async {
+-    // Set root after subscribing to avoid empty notifications.
+-    await init(source);
+-
+-    setAnalysisRoot();
+-    stopwatch.start();
+-    await analysisFinished;
+-    print('analysis completed in ${stopwatch.elapsed}');
+-
+-    await shutdown();
+-  }
+-}
+-
+-class Metric {
+-  List<Duration> timings =3D <Duration>[];
+-  Stream eventStream;
+-  AnalysisService service;
+-  String name;
+-  Metric(this.name, this.service, this.eventStream);
+-  String toString() =3D> '$name: $service, ${eventStream.runtimeType}, $t=
imings';
+-}
+-
+-/**
+- * SubscriptionTimingTest measures the time taken by the analysis server =
to return
+- * information for navigation, semantic highlighting, outline, get occurr=
ences,
+- * overrides, folding and implemented. These timings are wrt to the speci=
fied priority file
+- * - the file that is currently opened and has focus in the editor. Measu=
re the time from
+- * when the client subscribes for the notifications till there is a respo=
nse from the server.
+- * Does not wait for analysis to be complete before subscribing for notif=
ications.
+- */
+-class SubscriptionTimingTest extends AbstractTimingTest {
+-  List<Metric> _metrics;
+-
+-  List<Metric> get metrics =3D> _metrics ??=3D metricNames.map(getMetric)=
.toList();
+-
+-  Metric getMetric(String name) {
+-    switch (name) {
+-      case 'folding':
+-        return new Metric(name, AnalysisService.FOLDING, onAnalysisFoldin=
g);
+-      case 'highlighting':
+-        return new Metric(
+-            name, AnalysisService.HIGHLIGHTS, onAnalysisHighlights);
+-      case 'implemented':
+-        return new Metric(
+-            name, AnalysisService.IMPLEMENTED, onAnalysisImplemented);
+-      case 'navigation':
+-        return new Metric(
+-            name, AnalysisService.NAVIGATION, onAnalysisNavigation);
+-      case 'outline':
+-        return new Metric(name, AnalysisService.OUTLINE, onAnalysisOutlin=
e);
+-      case 'occurences':
+-        return new Metric(
+-            name, AnalysisService.OCCURRENCES, onAnalysisOccurrences);
+-      case 'overrides':
+-        return new Metric(name, AnalysisService.OVERRIDES, onAnalysisOver=
rides);
+-    }
+-    print('no metric found for $name');
+-    exit(1);
+-    return null; // Won't get here.
+-  }
+-
+-  Future test_timing() async {
+-//   debugStdio();
+-
+-    expect(metrics, isNotEmpty);
+-    expect(priorityFile, isNotNull,
+-        reason: 'A priority file must be specified for '
+-            '${metrics.first.name} testing.');
+-
+-    await init(source);
+-    stopwatch.start();
+-
+-    metrics.forEach((Metric m) =3D> m.eventStream.listen((_) {
+-          m.timings.add(
+-              new Duration(milliseconds: stopwatch.elapsed.inMilliseconds=
));
+-        }));
+-
+-    var subscriptions =3D <AnalysisService, List<String>>{};
+-    metrics.forEach((Metric m) =3D> subscriptions[m.service] =3D [priorit=
yFile]);
+-
+-    sendAnalysisSetSubscriptions(subscriptions);
+-
+-    // Set root after subscribing to avoid empty notifications.
+-    setAnalysisRoot();
+-
+-    sendAnalysisSetPriorityFiles([priorityFile]);
+-
+-    await analysisFinished;
+-    print('analysis completed in ${stopwatch.elapsed}');
+-    metrics.forEach((Metric m) =3D> print('${m.name} timings: ${m.timings=
}'));
+-
+-    await shutdown();
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_angular.dart b/p=
kg/analysis_server/benchmark/perf/benchmark_angular.dart
+deleted file mode 100644
+index c93138d86ba..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmark_angular.dart
++++ /dev/null
+@@ -1,115 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'benchmark_scenario.dart';
+-import 'memory_tests.dart';
+-
+-main(List<String> args) async {
+-  int length =3D args.length;
+-  if (length < 1) {
+-    print(
+-        'Usage: dart benchmark_local.dart path_to_np8080 (an example ngda=
rt project)'
+-        ' [benchmark_id]');
+-    return;
+-  }
+-  paths =3D new PathHolder(projectPath: args[0]);
+-  String id =3D args.length >=3D 2 ? args[1] : null;
+-  if (id =3D=3D null) {
+-    for (String id in benchmarks.keys) {
+-      BenchmarkFunction benchmark =3D benchmarks[id];
+-      await benchmark(id);
+-    }
+-  } else {
+-    BenchmarkFunction benchmark =3D benchmarks[id];
+-    if (benchmark !=3D null) {
+-      benchmark(id);
+-    }
+-  }
+-}
+-
+-const Map<String, BenchmarkFunction> benchmarks =3D
+-    const <String, BenchmarkFunction>{
+-  'ng-initialAnalysis': run_ng_initialAnalysis,
+-  'ng-change-dart': run_ng_change_dart,
+-  'ng-change-html': run_ng_change_html,
+-  'ng-memory-initialAnalysis': run_ng_memory_initialAnalysis,
+-};
+-
+-PathHolder paths;
+-
+-Future run_ng_change_dart(String id) async {
+-  String description =3D r'''
+-1. Open 'packages/np8080'.
+-2. Add an @Output to the class
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+-      roots: [paths.packageNp8080],
+-      file: paths.editorDart,
+-      fileChange: new FileChange(
+-          afterStr: 'showPreview =3D false;',
+-          insertStr: '@Output() EventEmitter<int> myEventEmitter;'),
+-      numOfRepeats: 10);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_change_html(String id) async {
+-  String description =3D r'''
+-1. Open 'packages/np8080'.
+-2. Change the contents of a mustache
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+-      roots: [paths.packageNp8080],
+-      file: paths.editorHtml,
+-      fileChange: new FileChange(
+-          afterStr: 'note.lastModified', afterStrBack: 4, insertStr: 'New=
Name'),
+-      numOfRepeats: 4);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_initialAnalysis(String id) async {
+-  String description =3D r'''
+-1. Start server, set 'package/np8080' analysis roots.
+-2. Measure the time to finish initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+-  List<int> times =3D await BenchmarkScenario.start_waitInitialAnalysis_s=
hutdown(
+-      roots: [paths.packageNp8080], numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_memory_initialAnalysis(String id) async {
+-  String description =3D r'''
+-1. Start server, set 'package/np8080' as the analysis root.
+-2. Measure the memory usage after finishing initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+-  List<int> sizes =3D await AnalysisServerMemoryUsageTest
+-      .start_waitInitialAnalysis_shutdown(
+-          roots: <String>[paths.packageNp8080], numOfRepeats: 3);
+-  printMemoryResults(id, description, sizes);
+-}
+-
+-typedef BenchmarkFunction(String id);
+-
+-class PathHolder {
+-  String editorHtml;
+-  String editorDart;
+-  String packageNp8080;
+-
+-  PathHolder({String projectPath}) {
+-    editorHtml =3D '$projectPath/lib/editor/editor_component.html';
+-    editorDart =3D '$projectPath/lib/editor/editor_component.dart';
+-    packageNp8080 =3D projectPath;
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart b/p=
kg/analysis_server/benchmark/perf/benchmark_flutter.dart
+deleted file mode 100644
+index 2e47a2b3bf8..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart
++++ /dev/null
+@@ -1,216 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-
+-import 'benchmark_scenario.dart';
+-import 'memory_tests.dart';
+-
+-main(List<String> args) async {
+-  int length =3D args.length;
+-  if (length < 1) {
+-    print('Usage: dart benchmark_local.dart path_to_flutter_checkout'
+-        ' [benchmark_id]');
+-    return;
+-  }
+-  paths =3D new PathHolder(flutterPath: args[0]);
+-  String id =3D args.length >=3D 2 ? args[1] : null;
+-  if (id =3D=3D null) {
+-    for (String id in benchmarks.keys) {
+-      BenchmarkFunction benchmark =3D benchmarks[id];
+-      await benchmark(id);
+-    }
+-  } else {
+-    BenchmarkFunction benchmark =3D benchmarks[id];
+-    if (benchmark !=3D null) {
+-      benchmark(id);
+-    }
+-  }
+-}
+-
+-const Map<String, BenchmarkFunction> benchmarks =3D
+-    const <String, BenchmarkFunction>{
+-  'flutter-initialAnalysis-1': run_flutter_initialAnalysis_1,
+-  'flutter-initialAnalysis-2': run_flutter_initialAnalysis_2,
+-  'flutter-change-1': run_flutter_change_1,
+-  'flutter-change-2': run_flutter_change_2,
+-  'flutter-completion-1': run_flutter_completion_1,
+-  'flutter-completion-2': run_flutter_completion_2,
+-  'flutter-refactoring-1': run_flutter_refactoring_1,
+-  'flutter-memory-initialAnalysis-1': run_flutter_memory_initialAnalysis_=
1,
+-  'flutter-memory-initialAnalysis-2': run_flutter_memory_initialAnalysis_=
2,
+-};
+-
+-PathHolder paths;
+-
+-Future run_flutter_change_1(String id) async {
+-  String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change a method body in lib/src/painting/colors.dart
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+-      roots: [paths.packageFlutter],
+-      file: '${paths.packageFlutter}/lib/src/painting/colors.dart',
+-      fileChange: new FileChange(
+-          afterStr: 'final double h =3D hue % 360;', insertStr: 'print(12=
345);'),
+-      numOfRepeats: 10);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_change_2(String id) async {
+-  String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change the name of a public method in lib/src/painting/colors.dart
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+-      roots: [paths.packageFlutter],
+-      file: '${paths.packageFlutter}/lib/src/painting/colors.dart',
+-      fileChange: new FileChange(
+-          afterStr: 'withValue(dou', afterStrBack: 4, insertStr: 'NewName=
'),
+-      numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_completion_1(String id) async {
+-  String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change a method body in packages/flutter/lib/src/material/button.dart
+-3. Request code completion in this method and measure time to get results.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  String completionMarker =3D 'print(12345);';
+-  List<int> times =3D await new BenchmarkScenario()
+-      .waitAnalyze_change_getCompletion(
+-          roots: [paths.packageFlutter],
+-          file: '${paths.packageFlutter}/lib/src/material/button.dart',
+-          fileChange: new FileChange(
+-              afterStr: 'Widget build(BuildContext context) {',
+-              insertStr: completionMarker),
+-          completeAfterStr: completionMarker,
+-          numOfRepeats: 10);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_completion_2(String id) async {
+-  String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change the name of a public method in lib/src/rendering/layer.dart
+-3. Request code completion in this method and measure time to get results.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  List<int> times =3D await new BenchmarkScenario()
+-      .waitAnalyze_change_getCompletion(
+-          roots: [paths.packageFlutter],
+-          file: '${paths.packageFlutter}/lib/src/rendering/layer.dart',
+-          fileChange: new FileChange(
+-              replaceWhat: 'void removeAllChildren() {',
+-              replaceWith: 'void removeAllChildren2() {print(12345);paren=
t.'),
+-          completeAfterStr: 'print(12345);parent.',
+-          numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_initialAnalysis_1(String id) async {
+-  String description =3D r'''
+-1. Start server, set 'hello_world' analysis root.
+-2. Measure the time to finish initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+-  List<int> times =3D await BenchmarkScenario.start_waitInitialAnalysis_s=
hutdown(
+-      roots: [paths.exampleHelloWorld], numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_initialAnalysis_2(String id) async {
+-  String description =3D r'''
+-1. Start server, set 'hello_world' and 'flutter_gallery' analysis roots.
+-2. Measure the time to finish initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+-  List<int> times =3D await BenchmarkScenario.start_waitInitialAnalysis_s=
hutdown(
+-      roots: [paths.exampleHelloWorld, paths.exampleGallery], numOfRepeat=
s: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_memory_initialAnalysis_1(String id) async {
+-  String description =3D r'''
+-1. Start server, set 'packages/flutter' as the analysis root.
+-2. Measure the memory usage after finishing initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+-  List<int> sizes =3D await AnalysisServerMemoryUsageTest
+-      .start_waitInitialAnalysis_shutdown(
+-          roots: <String>[paths.packageFlutter], numOfRepeats: 3);
+-  printMemoryResults(id, description, sizes);
+-}
+-
+-Future run_flutter_memory_initialAnalysis_2(String id) async {
+-  String description =3D r'''
+-1. Start server, set 'packages/flutter' and 'packages/flutter_markdown' a=
nalysis roots.
+-2. Measure the memory usage after finishing initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+-  List<int> sizes =3D await AnalysisServerMemoryUsageTest
+-      .start_waitInitialAnalysis_shutdown(
+-          roots: <String>[paths.packageFlutter, paths.packageMarkdown],
+-          numOfRepeats: 3);
+-  printMemoryResults(id, description, sizes);
+-}
+-
+-Future run_flutter_refactoring_1(String id) async {
+-  String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change the name of a public method in lib/src/rendering/layer.dart
+-3. Request rename refactoring for `getSourcesWithFullName` and measure ti=
me to get results.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  List<int> times =3D await new BenchmarkScenario()
+-      .waitAnalyze_change_getRefactoring(
+-          roots: [paths.packageFlutter],
+-          file: '${paths.packageFlutter}/lib/src/rendering/layer.dart',
+-          fileChange: new FileChange(
+-              replaceWhat: 'void removeAllChildren() {',
+-              replaceWith: 'void removeAllChildren2() {'),
+-          refactoringAtStr: 'addToScene(ui.SceneBuilder builder',
+-          refactoringKind: RefactoringKind.RENAME,
+-          refactoringOptions: new RenameOptions('addToScene2'),
+-          numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-typedef BenchmarkFunction(String id);
+-
+-class PathHolder {
+-  String exampleHelloWorld;
+-  String exampleGallery;
+-  String exampleStocks;
+-  String packageFlutter;
+-  String packageMarkdown;
+-  String packageSprites;
+-
+-  PathHolder({String flutterPath}) {
+-    exampleHelloWorld =3D '$flutterPath/examples/hello_world';
+-    exampleGallery =3D '$flutterPath/examples/flutter_gallery';
+-    exampleStocks =3D '$flutterPath/examples/stocks';
+-    packageFlutter =3D '$flutterPath/packages/flutter';
+-    packageMarkdown =3D '$flutterPath/packages/flutter_markdown';
+-    packageSprites =3D '$flutterPath/packages/flutter_sprites';
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_scenario.dart b/=
pkg/analysis_server/benchmark/perf/benchmark_scenario.dart
+deleted file mode 100644
+index 930bc0e7cd3..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmark_scenario.dart
++++ /dev/null
+@@ -1,310 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-import 'dart:math';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-import 'package:test/test.dart';
+-
+-import '../../test/integration/support/integration_tests.dart';
+-import 'performance_tests.dart';
+-
+-void printBenchmarkResults(String id, String description, List<int> times=
) {
+-  int minTime =3D times.fold(1 << 20, min);
+-  String now =3D new DateTime.now().toUtc().toIso8601String();
+-  print('$now =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D $id');
+-  print('times: $times');
+-  print('min_time: $minTime');
+-  print(description.trim());
+-  print('--------------------');
+-  print('');
+-  print('');
+-}
+-
+-class BenchmarkScenario extends AbstractTimingTest {
+-  /**
+-   * Init.
+-   *  - Start Analysis Server.
+-   *  - Set the analysis [roots].
+-   *  - Wait for analysis to complete.
+-   *  - Make [file] the priority file.
+-   *
+-   * Measurement.
+-   *  - Change the [file] according to the [fileChange].
+-   *  - Record the time to finish analysis.
+-   *
+-   * Repeat.
+-   *  - Undo changes to the [file].
+-   *  - Repeat measurement [numOfRepeats] times.
+-   */
+-  Future<List<int>> waitAnalyze_change_analyze(
+-      {List<String> roots,
+-      String file,
+-      FileChange fileChange,
+-      int numOfRepeats}) async {
+-    outOfTestExpect(roots, isNotNull, reason: 'roots');
+-    outOfTestExpect(file, isNotNull, reason: 'file');
+-    outOfTestExpect(fileChange, isNotNull, reason: 'fileChange');
+-    outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+-    // Initialize Analysis Server.
+-    await super.setUp();
+-    await subscribeToStatusNotifications();
+-    // Set roots and analyze.
+-    await sendAnalysisSetAnalysisRoots(roots, []);
+-    await analysisFinished;
+-    // Make the file priority.
+-    await sendAnalysisSetPriorityFiles([file]);
+-    // Repeat.
+-    List<int> times =3D <int>[];
+-    for (int i =3D 0; i < numOfRepeats; i++) {
+-      // Update and wait for analysis.
+-      Stopwatch stopwatch =3D new Stopwatch()..start();
+-      await _applyFileChange(file, fileChange);
+-      await analysisFinished;
+-      times.add(stopwatch.elapsed.inMilliseconds);
+-      // Remove the overlay and analyze.
+-      await sendAnalysisUpdateContent({file: new RemoveContentOverlay()});
+-      await analysisFinished;
+-    }
+-    // Done.
+-    await shutdown();
+-    return times;
+-  }
+-
+-  /**
+-   * Init.
+-   * 1. Start Analysis Server.
+-   * 2. Set the analysis [roots].
+-   * 3. Wait for analysis to complete.
+-   * 4. Make [file] the priority file.
+-   *
+-   * Measurement.
+-   * 5. Change the [file] according to the [fileChange].
+-   * 6. Request [completeAfterStr] in the updated file content.
+-   * 7. Record the time to get completion results.
+-   * 8. Undo changes to the [file] and analyze.
+-   * 9. Go to (5).
+-   */
+-  Future<List<int>> waitAnalyze_change_getCompletion(
+-      {List<String> roots,
+-      String file,
+-      FileChange fileChange,
+-      String completeAfterStr,
+-      int numOfRepeats}) async {
+-    outOfTestExpect(roots, isNotNull, reason: 'roots');
+-    outOfTestExpect(file, isNotNull, reason: 'file');
+-    outOfTestExpect(fileChange, isNotNull, reason: 'fileChange');
+-    outOfTestExpect(completeAfterStr, isNotNull, reason: 'completeAfterSt=
r');
+-    outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+-    // Initialize Analysis Server.
+-    await super.setUp();
+-    await subscribeToStatusNotifications();
+-    // Set roots and analyze.
+-    await sendAnalysisSetAnalysisRoots(roots, []);
+-    await analysisFinished;
+-    // Make the file priority.
+-    await sendAnalysisSetPriorityFiles([file]);
+-    // Repeat.
+-    List<int> times =3D <int>[];
+-    for (int i =3D 0; i < numOfRepeats; i++) {
+-      String updatedContent =3D await _applyFileChange(file, fileChange);
+-      // Measure completion time.
+-      int completionOffset =3D
+-          _indexOfEnd(file, updatedContent, completeAfterStr);
+-      Duration completionDuration =3D
+-          await _measureCompletionTime(file, completionOffset);
+-      times.add(completionDuration.inMilliseconds);
+-      // Remove the overlay and analyze.
+-      await sendAnalysisUpdateContent({file: new RemoveContentOverlay()});
+-      await analysisFinished;
+-    }
+-    // Done.
+-    await shutdown();
+-    return times;
+-  }
+-
+-  /**
+-   * Init.
+-   * 1. Start Analysis Server.
+-   * 2. Set the analysis [roots].
+-   * 3. Wait for analysis to complete.
+-   * 4. Make [file] the priority file.
+-   *
+-   * Measurement.
+-   * 5. Change the [file] according to the [fileChange].
+-   * 6. Request [refactoringAtStr] in the updated file content.
+-   * 7. Record the time to get refactoring.
+-   * 8. Undo changes to the [file] and analyze.
+-   * 9. Go to (5).
+-   */
+-  Future<List<int>> waitAnalyze_change_getRefactoring(
+-      {List<String> roots,
+-      String file,
+-      FileChange fileChange,
+-      String refactoringAtStr,
+-      RefactoringKind refactoringKind,
+-      RefactoringOptions refactoringOptions,
+-      int numOfRepeats}) async {
+-    outOfTestExpect(roots, isNotNull, reason: 'roots');
+-    outOfTestExpect(file, isNotNull, reason: 'file');
+-    outOfTestExpect(fileChange, isNotNull, reason: 'fileChange');
+-    outOfTestExpect(refactoringAtStr, isNotNull, reason: 'refactoringAtSt=
r');
+-    outOfTestExpect(refactoringKind, isNotNull, reason: 'refactoringKind'=
);
+-    outOfTestExpect(refactoringOptions, isNotNull,
+-        reason: 'refactoringOptions');
+-    outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+-    // Initialize Analysis Server.
+-    await super.setUp();
+-    await subscribeToStatusNotifications();
+-    // Set roots and analyze.
+-    await sendAnalysisSetAnalysisRoots(roots, []);
+-    await analysisFinished;
+-    // Make the file priority.
+-    await sendAnalysisSetPriorityFiles([file]);
+-    // Repeat.
+-    List<int> times =3D <int>[];
+-    for (int i =3D 0; i < numOfRepeats; i++) {
+-      String updatedContent =3D await _applyFileChange(file, fileChange);
+-      // Measure time to get refactoring.
+-      int refactoringOffset =3D _indexOf(file, updatedContent, refactorin=
gAtStr);
+-      Duration refactoringDuration =3D await _measureRefactoringTime(
+-          file, refactoringOffset, refactoringKind, refactoringOptions);
+-      times.add(refactoringDuration.inMilliseconds);
+-      // Remove the overlay and analyze.
+-      await sendAnalysisUpdateContent({file: new RemoveContentOverlay()});
+-      await analysisFinished;
+-    }
+-    // Done.
+-    await shutdown();
+-    return times;
+-  }
+-
+-  /**
+-   * Compute updated content of the [file] as described by [desc], add ov=
erlay
+-   * for the [file], and return the updated content.
+-   */
+-  Future<String> _applyFileChange(String file, FileChange desc) async {
+-    String originalContent =3D _getFileContent(file);
+-    String updatedContent;
+-    if (desc.afterStr !=3D null) {
+-      int offset =3D _indexOfEnd(file, originalContent, desc.afterStr);
+-      offset -=3D desc.afterStrBack;
+-      updatedContent =3D originalContent.substring(0, offset) +
+-          desc.insertStr +
+-          originalContent.substring(offset);
+-    } else if (desc.replaceWhat !=3D null) {
+-      int offset =3D _indexOf(file, originalContent, desc.replaceWhat);
+-      updatedContent =3D originalContent.substring(0, offset) +
+-          desc.replaceWith +
+-          originalContent.substring(offset + desc.replaceWhat.length);
+-    }
+-    await sendAnalysisUpdateContent(
+-        {file: new AddContentOverlay(updatedContent)});
+-    return updatedContent;
+-  }
+-
+-  Future<Duration> _measureCompletionTime(String file, int offset) async {
+-    Stopwatch stopwatch =3D new Stopwatch();
+-    stopwatch.start();
+-    Completer<Duration> completer =3D new Completer<Duration>();
+-    var completionSubscription =3D onCompletionResults.listen((_) {
+-      completer.complete(stopwatch.elapsed);
+-    });
+-    try {
+-      await sendCompletionGetSuggestions(file, offset);
+-      return await completer.future;
+-    } finally {
+-      completionSubscription.cancel();
+-    }
+-  }
+-
+-  Future<Duration> _measureRefactoringTime(
+-      String file,
+-      int offset,
+-      RefactoringKind refactoringKind,
+-      RefactoringOptions refactoringOptions) async {
+-    Stopwatch stopwatch =3D new Stopwatch();
+-    stopwatch.start();
+-    await sendEditGetRefactoring(refactoringKind, file, offset, 0, false,
+-        options: refactoringOptions);
+-    return stopwatch.elapsed;
+-  }
+-
+-  /**
+-   *  1. Start Analysis Server.
+-   *  2. Set the analysis [roots].
+-   *  3. Wait for analysis to complete.
+-   *  4. Record the time to finish analysis.
+-   *  5. Shutdown.
+-   *  6. Go to (1).
+-   */
+-  static Future<List<int>> start_waitInitialAnalysis_shutdown(
+-      {List<String> roots, int numOfRepeats}) async {
+-    outOfTestExpect(roots, isNotNull, reason: 'roots');
+-    outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+-    // Repeat.
+-    List<int> times =3D <int>[];
+-    for (int i =3D 0; i < numOfRepeats; i++) {
+-      BenchmarkScenario instance =3D new BenchmarkScenario();
+-      // Initialize Analysis Server.
+-      await instance.setUp();
+-      await instance.subscribeToStatusNotifications();
+-      // Set roots and analyze.
+-      Stopwatch stopwatch =3D new Stopwatch()..start();
+-      await instance.sendAnalysisSetAnalysisRoots(roots, []);
+-      await instance.analysisFinished;
+-      times.add(stopwatch.elapsed.inMilliseconds);
+-      // Stop the server.
+-      await instance.shutdown();
+-    }
+-    return times;
+-  }
+-
+-  static String _getFileContent(String path) {
+-    File file =3D new File(path);
+-    outOfTestExpect(file.existsSync(), isTrue,
+-        reason: 'File $path does not exist.');
+-    return file.readAsStringSync();
+-  }
+-
+-  /**
+-   * Return the index of [what] in [where] in the [file], fail if not fou=
nd.
+-   */
+-  static int _indexOf(String file, String where, String what) {
+-    int index =3D where.indexOf(what);
+-    outOfTestExpect(index, isNot(-1), reason: 'Cannot find |$what| in $fi=
le.');
+-    return index;
+-  }
+-
+-  /**
+-   * Return the end index if [what] in [where] in the [file], fail if not=
 found.
+-   */
+-  static int _indexOfEnd(String file, String where, String what) {
+-    return _indexOf(file, where, what) + what.length;
+-  }
+-}
+-
+-class FileChange {
+-  final String afterStr;
+-  final int afterStrBack;
+-  final String insertStr;
+-  final String replaceWhat;
+-  final String replaceWith;
+-
+-  FileChange(
+-      {this.afterStr,
+-      this.afterStrBack: 0,
+-      this.insertStr,
+-      this.replaceWhat,
+-      this.replaceWith}) {
+-    if (afterStr !=3D null) {
+-      outOfTestExpect(insertStr, isNotNull, reason: 'insertStr');
+-    } else if (replaceWhat !=3D null) {
+-      outOfTestExpect(replaceWith, isNotNull, reason: 'replaceWith');
+-    }
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart b/pkg=
/analysis_server/benchmark/perf/benchmarks_impl.dart
+deleted file mode 100644
+index 9a42862f084..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
++++ /dev/null
+@@ -1,187 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:analysis_server/src/protocol_server.dart';
+-import 'package:path/path.dart' as path;
+-
+-import '../../test/integration/support/integration_tests.dart';
+-import '../benchmarks.dart';
+-import 'memory_tests.dart';
+-
+-/// benchmarks:
+-///   - analysis-server-cold-analysis
+-///   - analysis-server-cold-memory
+-class ColdAnalysisBenchmark extends Benchmark {
+-  ColdAnalysisBenchmark()
+-      : super(
+-            'analysis-server-cold',
+-            'Analysis server benchmarks of a large project on start-up, n=
o '
+-            'existing driver cache.',
+-            kind: 'group');
+-
+-  int get maxIterations =3D> 3;
+-
+-  @override
+-  Future<BenchMarkResult> run(
+-      {bool quick: false, bool previewDart2: false}) async {
+-    if (!quick) {
+-      deleteServerCache();
+-    }
+-
+-    Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+-    AnalysisServerMemoryUsageTest test =3D new AnalysisServerMemoryUsageT=
est();
+-    await test.setUp(previewDart2: previewDart2);
+-    await test.subscribeToStatusNotifications();
+-    await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick)=
, []);
+-    await test.analysisFinished;
+-
+-    stopwatch.stop();
+-    int usedBytes =3D test.getMemoryUsage();
+-
+-    CompoundBenchMarkResult result =3D new CompoundBenchMarkResult(id);
+-    result.add('analysis',
+-        new BenchMarkResult('micros', stopwatch.elapsedMicroseconds));
+-    result.add('memory', new BenchMarkResult('bytes', usedBytes));
+-
+-    await test.shutdown();
+-
+-    return result;
+-  }
+-}
+-
+-/// benchmarks:
+-///   - analysis-server-warm-analysis
+-///   - analysis-server-warm-memory
+-///   - analysis-server-edit
+-///   - analysis-server-completion
+-class AnalysisBenchmark extends Benchmark {
+-  AnalysisBenchmark()
+-      : super(
+-            'analysis-server',
+-            'Analysis server benchmarks of a large project, with an exist=
ing '
+-            'driver cache.',
+-            kind: 'group');
+-
+-  @override
+-  Future<BenchMarkResult> run(
+-      {bool quick: false, bool previewDart2: false}) async {
+-    Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+-    AnalysisServerMemoryUsageTest test =3D new AnalysisServerMemoryUsageT=
est();
+-    await test.setUp(previewDart2: previewDart2);
+-    await test.subscribeToStatusNotifications();
+-    await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick)=
, []);
+-    await test.analysisFinished;
+-
+-    stopwatch.stop();
+-    int usedBytes =3D test.getMemoryUsage();
+-
+-    CompoundBenchMarkResult result =3D new CompoundBenchMarkResult(id);
+-    result.add('warm-analysis',
+-        new BenchMarkResult('micros', stopwatch.elapsedMicroseconds));
+-    result.add('warm-memory', new BenchMarkResult('bytes', usedBytes));
+-
+-    if (!quick) {
+-      // change timing
+-      final int editMicros =3D await _calcEditTiming(test);
+-      result.add('edit', new BenchMarkResult('micros', editMicros));
+-
+-      // code completion
+-      final int completionMicros =3D await _calcCompletionTiming(test);
+-      result.add('completion', new BenchMarkResult('micros', completionMi=
cros));
+-    }
+-
+-    await test.shutdown();
+-
+-    return result;
+-  }
+-
+-  Future<int> _calcEditTiming(
+-      AbstractAnalysisServerIntegrationTest test) async {
+-    const int kGroupCount =3D 5;
+-
+-    final String filePath =3D
+-        path.join(analysisServerSrcPath, 'lib/src/analysis_server.dart');
+-    String contents =3D new File(filePath).readAsStringSync();
+-
+-    await test
+-        .sendAnalysisUpdateContent({filePath: new AddContentOverlay(conte=
nts)});
+-
+-    final Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+-    for (int i =3D 0; i < kGroupCount; i++) {
+-      int startIndex =3D i * (contents.length ~/ (kGroupCount + 2));
+-      int index =3D contents.indexOf(';', startIndex);
+-      contents =3D contents.substring(0, index + 1) +
+-          ' ' +
+-          contents.substring(index + 1);
+-      test.sendAnalysisUpdateContent(
+-          {filePath: new AddContentOverlay(contents)});
+-      await test.analysisFinished;
+-    }
+-
+-    stopwatch.stop();
+-
+-    return stopwatch.elapsedMicroseconds ~/ kGroupCount;
+-  }
+-
+-  Future<int> _calcCompletionTiming(
+-      AbstractAnalysisServerIntegrationTest test) async {
+-    const int kGroupCount =3D 10;
+-
+-    final String filePath =3D
+-        path.join(analysisServerSrcPath, 'lib/src/analysis_server.dart');
+-    String contents =3D new File(filePath).readAsStringSync();
+-
+-    await test
+-        .sendAnalysisUpdateContent({filePath: new AddContentOverlay(conte=
nts)});
+-
+-    int completionCount =3D 0;
+-    final Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+-    Future _complete(int offset) async {
+-      CompletionGetSuggestionsResult result =3D
+-          await test.sendCompletionGetSuggestions(filePath, offset);
+-
+-      Future<CompletionResultsParams> future =3D test.onCompletionResults
+-          .where((CompletionResultsParams params) =3D>
+-              params.id =3D=3D result.id && params.isLast)
+-          .first;
+-      await future;
+-
+-      completionCount++;
+-    }
+-
+-    for (int i =3D 0; i < kGroupCount; i++) {
+-      int startIndex =3D i * (contents.length ~/ (kGroupCount + 2));
+-      // Look for a line with a period in it that ends with a semi-colon.
+-      int index =3D
+-          contents.indexOf(new RegExp(r'\..*;$', multiLine: true), startI=
ndex);
+-
+-      await _complete(index - 10);
+-      await _complete(index - 1);
+-      await _complete(index);
+-      await _complete(index + 1);
+-      await _complete(index + 10);
+-
+-      if (i + 1 < kGroupCount) {
+-        // mutate
+-        index =3D contents.indexOf(';', index);
+-        contents =3D contents.substring(0, index + 1) +
+-            ' ' +
+-            contents.substring(index + 1);
+-        await test.sendAnalysisUpdateContent(
+-            {filePath: new AddContentOverlay(contents)});
+-      }
+-    }
+-
+-    stopwatch.stop();
+-
+-    return stopwatch.elapsedMicroseconds ~/ completionCount;
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/completion_timing_tests.da=
rt b/pkg/analysis_server/benchmark/perf/completion_timing_tests.dart
+deleted file mode 100644
+index 0a1204195b9..00000000000
+--- a/pkg/analysis_server/benchmark/perf/completion_timing_tests.dart
++++ /dev/null
+@@ -1,85 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:args/args.dart';
+-import 'package:test/test.dart';
+-
+-import 'performance_tests.dart';
+-
+-const COMPLETION_OFFSET =3D 'offset';
+-const PRIORITY_FILE_OPTION =3D 'priority';
+-const SOURCE_OPTION =3D 'source';
+-
+-/**
+- * Pass in the directory of the source to be analyzed as option `--source=
`,
+- * specify a priority file with `--priority` and an offset for completions
+- * with a `--offset`.
+- */
+-main(List<String> arguments) async {
+-  ArgParser parser =3D _createArgParser();
+-  var args =3D parser.parse(arguments);
+-  if (args[SOURCE_OPTION] =3D=3D null) {
+-    print('path to source directory must be specified');
+-    exit(1);
+-  }
+-
+-  int offset =3D int.parse(args[COMPLETION_OFFSET]);
+-  String priorityFile =3D args[PRIORITY_FILE_OPTION];
+-  String source =3D args[SOURCE_OPTION];
+-
+-  CompletionTimingTest test =3D
+-      new CompletionTimingTest(offset, priorityFile, source);
+-  await test.test_timing();
+-}
+-
+-ArgParser _createArgParser() =3D> new ArgParser()
+-  ..addOption(SOURCE_OPTION, help: 'full path to source directory for ana=
lysis')
+-  ..addOption(PRIORITY_FILE_OPTION, help: 'full path to a priority file')
+-  ..addOption(COMPLETION_OFFSET, help: 'offset in file for code completio=
ns');
+-
+-/**
+- * CompletionTimingTest measures the time taken for the analysis server t=
o respond with
+- * completion suggestions for a given file and offset. The time measured =
starts when
+- * the analysis root is set and is done when the completion suggestions a=
re received
+- * from the server. The test does not wait for analysis to be complete be=
fore asking for
+- * completions.
+- */
+-class CompletionTimingTest extends AbstractTimingTest {
+-  final int offset;
+-  final String priorityFile;
+-  final String source;
+-
+-  List<Duration> timings =3D <Duration>[];
+-
+-  CompletionTimingTest(this.offset, this.priorityFile, this.source);
+-
+-  Future test_timing() async {
+-//    debugStdio();
+-
+-    expect(priorityFile, isNotNull,
+-        reason: 'A priority file must be specified for completion testing=
.');
+-    expect(offset, isNotNull,
+-        reason: 'An offset must be specified for completion testing.');
+-
+-    await init(source);
+-    stopwatch.start();
+-
+-    onCompletionResults.listen((_) {
+-      timings.add(new Duration(milliseconds: stopwatch.elapsed.inMillisec=
onds));
+-    });
+-
+-    setAnalysisRoot();
+-    sendAnalysisSetPriorityFiles([priorityFile]);
+-    sendCompletionGetSuggestions(priorityFile, offset);
+-
+-    await analysisFinished;
+-
+-    print('analysis completed in ${stopwatch.elapsed}');
+-    print('completion received at : $timings');
+-    await shutdown();
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/memory_tests.dart b/pkg/an=
alysis_server/benchmark/perf/memory_tests.dart
+deleted file mode 100644
+index 1971bf575ec..00000000000
+--- a/pkg/analysis_server/benchmark/perf/memory_tests.dart
++++ /dev/null
+@@ -1,133 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-import 'dart:math';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:test/test.dart';
+-
+-import '../../test/integration/support/integration_tests.dart';
+-
+-void printMemoryResults(String id, String description, List<int> sizes) {
+-  int minMemory =3D sizes.fold(sizes.first, min);
+-  int maxMemory =3D sizes.fold(sizes.first, max);
+-  String now =3D new DateTime.now().toUtc().toIso8601String();
+-  print('$now =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D $id');
+-  print('memory: $sizes');
+-  print('min_memory: $minMemory');
+-  print('max_memory: $maxMemory');
+-  print(description.trim());
+-  print('--------------------');
+-  print('');
+-  print('');
+-}
+-
+-/**
+- * Base class for analysis server memory usage tests.
+- */
+-class AnalysisServerMemoryUsageTest
+-    extends AbstractAnalysisServerIntegrationTest {
+-  static const int vmServicePort =3D 12345;
+-
+-  int getMemoryUsage() {
+-    ProcessResult result =3D _run('curl', <String>[
+-      'localhost:$vmServicePort/_getAllocationProfile\?isolateId=3Disolat=
es/root\&gc=3Dfull'
+-    ]);
+-    Map json =3D JSON.decode(result.stdout);
+-    Map heaps =3D json['result']['heaps'];
+-    int newSpace =3D heaps['new']['used'];
+-    int oldSpace =3D heaps['old']['used'];
+-    return newSpace + oldSpace;
+-  }
+-
+-  /**
+-   * Send the server an 'analysis.setAnalysisRoots' command directing it =
to
+-   * analyze [sourceDirectory].
+-   */
+-  Future setAnalysisRoot() =3D>
+-      sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
+-
+-  /**
+-   * The server is automatically started before every test.
+-   */
+-  @override
+-  Future setUp({bool previewDart2: false}) {
+-    onAnalysisErrors.listen((AnalysisErrorsParams params) {
+-      currentAnalysisErrors[params.file] =3D params.errors;
+-    });
+-    onServerError.listen((ServerErrorParams params) {
+-      // A server error should never happen during an integration test.
+-      fail('${params.message}\n${params.stackTrace}');
+-    });
+-    Completer serverConnected =3D new Completer();
+-    onServerConnected.listen((_) {
+-      outOfTestExpect(serverConnected.isCompleted, isFalse);
+-      serverConnected.complete();
+-    });
+-    return startServer(
+-      servicesPort: vmServicePort,
+-      previewDart2: previewDart2,
+-    ).then((_) {
+-      server.listenToOutput(dispatchNotification);
+-      server.exitCode.then((_) {
+-        skipShutdown =3D true;
+-      });
+-      return serverConnected.future;
+-    });
+-  }
+-
+-  /**
+-   * After every test, the server is stopped.
+-   */
+-  Future shutdown() async =3D> await shutdownIfNeeded();
+-
+-  /**
+-   * Enable [ServerService.STATUS] notifications so that [analysisFinishe=
d]
+-   * can be used.
+-   */
+-  Future subscribeToStatusNotifications() async {
+-    await sendServerSetSubscriptions([ServerService.STATUS]);
+-  }
+-
+-  /**
+-   * Synchronously run the given [executable] with the given [arguments].=
 Return
+-   * the result of running the process.
+-   */
+-  ProcessResult _run(String executable, List<String> arguments) {
+-    return Process.runSync(executable, arguments,
+-        stderrEncoding: UTF8, stdoutEncoding: UTF8);
+-  }
+-
+-  /**
+-   *  1. Start Analysis Server.
+-   *  2. Set the analysis [roots].
+-   *  3. Wait for analysis to complete.
+-   *  4. Record the heap size after analysis is finished.
+-   *  5. Shutdown.
+-   *  6. Go to (1).
+-   */
+-  static Future<List<int>> start_waitInitialAnalysis_shutdown(
+-      {List<String> roots, int numOfRepeats}) async {
+-    outOfTestExpect(roots, isNotNull, reason: 'roots');
+-    outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+-    // Repeat.
+-    List<int> sizes =3D <int>[];
+-    for (int i =3D 0; i < numOfRepeats; i++) {
+-      AnalysisServerMemoryUsageTest test =3D new AnalysisServerMemoryUsag=
eTest();
+-      // Initialize Analysis Server.
+-      await test.setUp();
+-      await test.subscribeToStatusNotifications();
+-      // Set roots and analyze.
+-      await test.sendAnalysisSetAnalysisRoots(roots, []);
+-      await test.analysisFinished;
+-      sizes.add(test.getMemoryUsage());
+-      // Stop the server.
+-      await test.shutdown();
+-    }
+-    return sizes;
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/performance_tests.dart b/p=
kg/analysis_server/benchmark/perf/performance_tests.dart
+deleted file mode 100644
+index 540678ca652..00000000000
+--- a/pkg/analysis_server/benchmark/perf/performance_tests.dart
++++ /dev/null
+@@ -1,76 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:test/test.dart';
+-
+-import '../../test/integration/support/integration_tests.dart';
+-
+-/**
+- * Base class for analysis server performance tests.
+- */
+-abstract class AbstractAnalysisServerPerformanceTest
+-    extends AbstractAnalysisServerIntegrationTest {
+-  /**
+-   * Stopwatch for timing results;
+-   */
+-  Stopwatch stopwatch =3D new Stopwatch();
+-
+-  /**
+-   * Send the server an 'analysis.setAnalysisRoots' command directing it =
to
+-   * analyze [sourceDirectory].
+-   */
+-  Future setAnalysisRoot() =3D>
+-      sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
+-
+-  /**
+-   * The server is automatically started before every test.
+-   */
+-  @override
+-  Future setUp() {
+-    onAnalysisErrors.listen((AnalysisErrorsParams params) {
+-      currentAnalysisErrors[params.file] =3D params.errors;
+-    });
+-    onServerError.listen((ServerErrorParams params) {
+-      // A server error should never happen during an integration test.
+-      fail('${params.message}\n${params.stackTrace}');
+-    });
+-    Completer serverConnected =3D new Completer();
+-    onServerConnected.listen((_) {
+-      outOfTestExpect(serverConnected.isCompleted, isFalse);
+-      serverConnected.complete();
+-    });
+-    return startServer(checked: false).then((_) {
+-      server.listenToOutput(dispatchNotification);
+-      server.exitCode.then((_) {
+-        skipShutdown =3D true;
+-      });
+-      return serverConnected.future;
+-    });
+-  }
+-
+-  /**
+-   * After every test, the server is stopped.
+-   */
+-  Future shutdown() async =3D> await shutdownIfNeeded();
+-
+-  /**
+-   * Enable [ServerService.STATUS] notifications so that [analysisFinishe=
d]
+-   * can be used.
+-   */
+-  Future subscribeToStatusNotifications() async {
+-    await sendServerSetSubscriptions([ServerService.STATUS]);
+-  }
+-}
+-
+-class AbstractTimingTest extends AbstractAnalysisServerPerformanceTest {
+-  Future init(String source) async {
+-    await super.setUp();
+-    sourceDirectory =3D new Directory(source);
+-    return subscribeToStatusNotifications();
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/readme.md b/pkg/analysis_server=
/benchmark/readme.md
+deleted file mode 100644
+index 24eb7ece492..00000000000
+--- a/pkg/analysis_server/benchmark/readme.md
++++ /dev/null
+@@ -1,35 +0,0 @@
+-# Analysis Server Benchmarks
+-
+-## How to run the benchmarks
+-
+-To see a list of all available benchmarks, run:
+-
+-```
+-dart benchmark/benchmarks.dart list
+-```
+-
+-To run an individual benchmark, run:
+-
+-```
+-dart benchmark/benchmarks.dart run <benchmark-id>
+-```
+-
+-## How they're tested
+-
+-In order to make sure that our benchmarks don't regress in terms of their
+-ability to run, we create one unit test per benchmark, and run those tests
+-as part of our normal CI test suite.
+-
+-To save time on the CI, we only run one iteration of each benchmark
+-(`--repeat=3D1`), and we run the benchmark on a smaller data set (`--quic=
k`).
+-
+-See `test/benchmark_test.dart`.
+-
+-## To add a new benchmark
+-
+-Register the new benchmark in the `main()` method of benchmark/benchmarks=
.dart.
+-
+-## On the bots
+-
+-Our benchmarks run on a continuous performance testing system. Currently,=
 the
+-benchmarks need to be manually registered ahead of time.
+diff --git a/pkg/analysis_server/bin/server.dart b/pkg/analysis_server/bin=
/server.dart
+deleted file mode 100644
+index f0d075f6f8d..00000000000
+--- a/pkg/analysis_server/bin/server.dart
++++ /dev/null
+@@ -1,13 +0,0 @@
+-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'package:analysis_server/starter.dart';
+-
+-/**
+- * Create and run an analysis server.
+- */
+-void main(List<String> args) {
+-  ServerStarter starter =3D new ServerStarter();
+-  starter.start(args);
+-}
+diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/ap=
i.html
+deleted file mode 100644
+index 6528f6d2a99..00000000000
+--- a/pkg/analysis_server/doc/api.html
++++ /dev/null
+@@ -1,4725 +0,0 @@
+-<!DOCTYPE html><html><head>
+-  <meta charset=3D"UTF-8">
+-  <title>Analysis Server API Specification</title>
+-<link rel=3D"stylesheet" href=3D"https://fonts.googleapis.com/css?family=
=3DSource+Code+Pro|Roboto:500,400italic,300,400" type=3D"text/css"><style>b=
ody {
+-  font-family: 'Roboto', sans-serif;
+-  max-width: 800px;
+-  margin: 0 auto;
+-  padding: 0 16px;
+-  font-size: 16px;
+-  line-height: 1.5;
+-  color: #111;
+-  background-color: #fdfdfd;
+-  font-weight: 300;
+-  -webkit-font-smoothing: auto;
+-}
+-
+-h2, h3, h4, h5 {
+-  margin-bottom: 0;
+-}
+-
+-h2.domain {
+-  border-bottom: 1px solid rgb(200, 200, 200);
+-  margin-bottom: 0.5em;
+-}
+-
+-h4 {
+-  font-size: 18px;
+-}
+-
+-h5 {
+-  font-size: 16px;
+-}
+-
+-p {
+-  margin-top: 0;
+-}
+-
+-pre {
+-  margin: 0;
+-  font-family: 'Source Code Pro', monospace;
+-  font-size: 15px;
+-}
+-
+-div.box {
+-  background-color: rgb(240, 245, 240);
+-  border-radius: 4px;
+-  padding: 4px 12px;
+-  margin: 16px 0;
+-}
+-
+-div.hangingIndent {
+-  padding-left: 3em;
+-  text-indent: -3em;
+-}
+-
+-dl dt {
+-  font-weight: bold;
+-}
+-
+-dl dd {
+-  margin-left: 16px;
+-}
+-
+-dt {
+-  margin-top: 1em;
+-}
+-
+-dt.notification {
+-  font-weight: bold;
+-}
+-
+-dt.refactoring {
+-  font-weight: bold;
+-}
+-
+-dt.request {
+-  font-weight: bold;
+-}
+-
+-dt.typeDefinition {
+-  font-weight: bold;
+-}
+-
+-a {
+-  text-decoration: none;
+-}
+-
+-a:focus, a:hover {
+-  text-decoration: underline;
+-}
+-
+-.deprecated {
+-  text-decoration: line-through;
+-}
+-
+-/* Styles for index */
+-
+-.subindex ul {
+-  padding-left: 0;
+-  margin-left: 0;
+-
+-  -webkit-margin-before: 0;
+-  -webkit-margin-start: 0;
+-  -webkit-padding-start: 0;
+-
+-  list-style-type: none;
+-}
+-</style></head>
+-<body>
+-<h1>Analysis Server API Specification</h1>
+-<h1 style=3D"color:#999999">Version
+-  1.18.4
+-</h1>
+-<p>
+-  This document contains a specification of the API provided by the
+-  analysis server. The API in this document is currently under
+-  development. Changes to the API will be accompanied by an update to the
+-  protocol version number according to the principles of semantic
+-  versioning (<a href=3D"http://semver.org/">semver.org</a>).
+-</p>
+-<h2>Overview</h2>
+-<p>
+-  The analysis server API is a bi-directional client-server
+-  API. The API is independent of the transport mechanism used, but
+-  is heavily influenced by a model in which sockets or character
+-  streams are used to transport JSON-RPC encoded information.
+-</p>
+-<h3>Transport Mechanism</h3>
+-<p>
+-  The characters passed to the server are expected to be encoded
+-  using UTF-8.
+-</p>
+-<p>
+-  When character streams are used as the transport, messages are
+-  delineated by newlines. This means, in particular, that the JSON
+-  encoding process must not introduce newlines within a
+-  message. Note however that newlines are used in this document
+-  for readability.
+-</p>
+-<p>
+-  It is the client's responsibility to read output from the server to
+-  avoid its blocking.
+-</p>
+-<p>
+-  To ease interoperability with Lisp-based clients (which may not
+-  be able to easily distinguish between empty lists, empty maps,
+-  and null), client-to-server communication is allowed to replace
+-  any instance of "<tt>{}</tt>" or "<tt>[]</tt>" with null. The
+-  server will always properly represent empty lists as
+-  "<tt>[]</tt>" and empty maps as "<tt>{}</tt>".
+-</p>
+-<h3>Communication Structure</h3>
+-<p>
+-  Clients can make a request of the server and the server will
+-  provide a response for each request that it receives. While many
+-  of the requests that can be made by a client are informational
+-  in nature, we have chosen to always return a response so that
+-  clients can know whether the request was received and was
+-  correct.
+-</p>
+-<p>
+-  There is no guarantee concerning the order in which responses
+-  will be returned, but there is a guarantee that the server will
+-  process requests in the order in which they are sent as long as
+-  the transport mechanism also makes this guarantee. Responses can
+-  be returned in an order that is different from the order in
+-  which the requests were received because some requests take
+-  longer to process than others.
+-</p>
+-<p>
+-  Every request is required to have two fields and may have two
+-  additional optional fields. The first required field is the =E2=80=98id=
=E2=80=99
+-  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 =E2=80=98method=E2=80=99 field, which is used to =
determine
+-  what the server is being requested to do. One optional field is
+-  the =E2=80=98params=E2=80=99 field, whose structure is dependent on the=
 method
+-  being requested. The structure of this field is described with
+-  each request for which it is required. The other optional field
+-  is the 'clientRequestTime' field, which is a number indicating
+-  the time at which the client made the request (milliseconds
+-  since epoch). Providing clientRequestTime helps us track
+-  how responsive analysis server is to client requests
+-  and better address any issues that occur.
+-</p>
+-<p>
+-  Every response has up to three fields. The first field is the
+-  =E2=80=98id=E2=80=99 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 =E2=80=98error=E2=80=99 field, which =
is only
+-  present if an error was encountered while processing the
+-  request. The third field is the =E2=80=98result=E2=80=99 field, whose s=
tructure
+-  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 =E2=80=98event=
=E2=80=99
+-  field, which identifies the kind of notification. The second
+-  field is the =E2=80=98params=E2=80=99 field, whose structure is depende=
nt on the
+-  kind of notification being sent. The structure of this field is
+-  described with each notification.
+-</p>
+-<p>
+-  In order to be backward compatible, clients should ignore fields that w=
ere
+-  not specified in the version of the API on which they were based. Clien=
ts
+-  should also use the server.getVersion request to test that the version =
of
+-  the server supports an API before using it.
+-</p>
+-<h3>Eventual Consistency</h3>
+-<p>
+-  The analysis server satisfies requests under the principle of
+-  <a href=3D"https://en.wikipedia.org/wiki/Eventual_consistency">eventual
+-    consistency</a>.
+-  That is, in some cases it may return responses with the currently avail=
able
+-  results while it's catching up with unprocessed changes.
+-</p>
+-<h3>Domains</h3>
+-<p>
+-  For convenience, the API is divided into domains. Each domain is specif=
ied
+-  in a separate section below. The specifications of the API=E2=80=99s re=
fer to data
+-  structures beyond the standard JSON primitives. These data structures a=
re
+-  documented in the section titled <a href=3D"#types">Types</a>.
+-</p>
+-
+-<p><a href=3D"#domain_server">Server</a></p><ul><li><a href=3D"#request_s=
erver.getVersion">server.getVersion</a></li>
+-<li><a href=3D"#request_server.shutdown">server.shutdown</a></li>
+-<li><a href=3D"#request_server.setSubscriptions">server.setSubscriptions<=
/a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_analysis">Analysis</a></p><ul><li><a href=3D"#reque=
st_analysis.getErrors">analysis.getErrors</a></li>
+-<li><a href=3D"#request_analysis.getHover">analysis.getHover</a></li>
+-<li><a href=3D"#request_analysis.getLibraryDependencies">analysis.getLibr=
aryDependencies</a></li>
+-<li><a href=3D"#request_analysis.getNavigation">analysis.getNavigation</a=
></li>
+-<li><a href=3D"#request_analysis.getReachableSources">analysis.getReachab=
leSources</a></li>
+-<li><a href=3D"#request_analysis.reanalyze">analysis.reanalyze</a></li>
+-<li><a href=3D"#request_analysis.setAnalysisRoots">analysis.setAnalysisRo=
ots</a></li>
+-<li><a href=3D"#request_analysis.setGeneralSubscriptions">analysis.setGen=
eralSubscriptions</a></li>
+-<li><a href=3D"#request_analysis.setPriorityFiles">analysis.setPriorityFi=
les</a></li>
+-<li><a href=3D"#request_analysis.setSubscriptions">analysis.setSubscripti=
ons</a></li>
+-<li><a href=3D"#request_analysis.updateContent">analysis.updateContent</a=
></li>
+-<li><a class=3D"deprecated" href=3D"#request_analysis.updateOptions">anal=
ysis.updateOptions</a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_completion">Completion</a></p><ul><li><a href=3D"#r=
equest_completion.getSuggestions">completion.getSuggestions</a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_search">Search</a></p><ul><li><a href=3D"#request_s=
earch.findElementReferences">search.findElementReferences</a></li>
+-<li><a href=3D"#request_search.findMemberDeclarations">search.findMemberD=
eclarations</a></li>
+-<li><a href=3D"#request_search.findMemberReferences">search.findMemberRef=
erences</a></li>
+-<li><a href=3D"#request_search.findTopLevelDeclarations">search.findTopLe=
velDeclarations</a></li>
+-<li><a href=3D"#request_search.getTypeHierarchy">search.getTypeHierarchy<=
/a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_edit">Edit</a></p><ul><li><a href=3D"#request_edit.=
format">edit.format</a></li>
+-<li><a href=3D"#request_edit.getAssists">edit.getAssists</a></li>
+-<li><a href=3D"#request_edit.getAvailableRefactorings">edit.getAvailableR=
efactorings</a></li>
+-<li><a href=3D"#request_edit.getFixes">edit.getFixes</a></li>
+-<li><a href=3D"#request_edit.getRefactoring">edit.getRefactoring</a></li>
+-<li><a href=3D"#request_edit.sortMembers">edit.sortMembers</a></li>
+-<li><a href=3D"#request_edit.organizeDirectives">edit.organizeDirectives<=
/a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_execution">Execution</a></p><ul><li><a href=3D"#req=
uest_execution.createContext">execution.createContext</a></li>
+-<li><a href=3D"#request_execution.deleteContext">execution.deleteContext<=
/a></li>
+-<li><a href=3D"#request_execution.mapUri">execution.mapUri</a></li>
+-<li><a class=3D"deprecated" href=3D"#request_execution.setSubscriptions">=
execution.setSubscriptions</a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_diagnostic">Diagnostic</a></p><ul><li><a href=3D"#r=
equest_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></li>
+-<li><a href=3D"#request_diagnostic.getServerPort">diagnostic.getServerPor=
t</a></li>
+-</ul>
+-
+-<h3>Command-line Arguments</h3>
+-<p>
+-  The command-line arguments that can be passed to the server.
+-</p>
+-<h4>Options</h4>
+-<blockquote>
+-  <dl>
+-    <dt>--client-id</dt>
+-    <dd>
+-      <p>
+-        Specifies an identifier associated with the client. Used when
+-        generating error reports.
+-      </p>
+-      <p>
+-        Clients are strongly encouraged to provide this information in
+-        order to improve the quality of information that can be provided
+-        to them.
+-      </p>
+-    </dd>
+-  </dl>
+-  <dl>
+-    <dt>--client-version</dt>
+-    <dd>
+-      <p>
+-        Specifies the version of the client that is communicating with
+-        the server. Used when generating error reports.
+-      </p>
+-      <p>
+-        Clients are strongly encouraged to provide this information in
+-        order to improve the quality of information that can be provided
+-        to them.
+-      </p>
+-    </dd>
+-  </dl>
+-  <dl>
+-    <dt class=3D"deprecated">--no-error-notification</dt>
+-    <dd>
+-      <p><b>Deprecated:</b> clients should no longer pass this option in<=
/p>
+-      Disable notifications about errors (see analysis.error). If this
+-      flag is not specified then notifications will be sent for all
+-      errors produced for all files in the actual analysis roots.
+-    </dd>
+-  </dl>
+-  <dl>
+-    <dt class=3D"deprecated">--no-index</dt>
+-    <dd>
+-      <p><b>Deprecated:</b> clients should no longer pass this option in<=
/p>
+-      This flag used to disable the server from generating an index, but =
now
+-      it has no effect.
+-    </dd>
+-  </dl>
+-  <dl>
+-    <dt class=3D"deprecated">--file-read-mode</dt>
+-    <dd>
+-      <p><b>Deprecated:</b> clients should no longer pass this option in<=
/p>
+-      An enumeration of the ways files can be read from disk. Some clients
+-      normalize end of line characters which would make the file offset a=
nd
+-      range information incorrect. The default option is <tt>as-is</tt>, =
but
+-      can also be set to <tt>normalize-eol-always</tt>. The default option
+-      (<tt>as-is</tt>) reads files as they are on disk. The
+-      <tt>normalize-eol-always</tt> option does the following:
+-      <ul>
+-        <li>'\r\n' is converted to '\n';</li>
+-        <li>'\r' by itself is converted to '\n';</li>
+-        <li>this happens regardless of the OS editor is running on.</li>
+-      </ul>
+-    </dd>
+-  </dl>
+-</blockquote>
+-<h1>Domains</h1>
+-<h2 class=3D"domain"><a name=3D"domain_server">server domain</a></h2>
+-  <p>
+-    The server domain contains API=E2=80=99s related to the execution of
+-    the server.
+-  </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_server.getV=
ersion">server.getVersion</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "server.getVersion"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>version</b>": String
+-  }
+-}</pre></div>
+-    <p>Return the version number of the analysis server.</p>
+-=20=20=20=20
+-  <h4>returns:</h4><dl><dt class=3D"field"><b>version: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>The version number of the analysis server.</p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_server.shut=
down">server.shutdown</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "server.shutdown"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <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>
+-  </dd><dt class=3D"request"><a name=3D"request_server.setSubscriptions">=
server.setSubscriptions</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "server.setSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": List&lt;<a href=3D"#type_ServerService">Serve=
rService</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: List&lt;<=
a href=3D"#type_ServerService">ServerService</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>A list of the services being subscribed to.</p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_server.connected">server.connected</a></dt><d=
d><div class=3D"box"><pre>notification: {
+-  "event": "server.connected"
+-  "params": {
+-    "<b>version</b>": String
+-    "<b>pid</b>": int
+-    "<b>sessionId</b>": <span style=3D"color:#999999">optional</span> Str=
ing
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>version: String</b></dt>=
<dd>
+-=20=20=20=20=20=20=20=20
+-        <p>The version number of the analysis server.</p>
+-      </dd><dt class=3D"field"><b>pid: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>The process id of the analysis server process.</p>
+-      </dd><dt class=3D"field"><b>sessionId: String<span style=3D"color:#=
999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>The session id for this session.</p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_s=
erver.error">server.error</a></dt><dd><div class=3D"box"><pre>notification:=
 {
+-  "event": "server.error"
+-  "params": {
+-    "<b>isFatal</b>": bool
+-    "<b>message</b>": String
+-    "<b>stackTrace</b>": String
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>isFatal: bool</b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the error is a fatal error, meaning that the
+-          server will shutdown automatically after sending this
+-          notification.
+-        </p>
+-      </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The error message indicating what kind of error was
+-          encountered.
+-        </p>
+-      </dd><dt class=3D"field"><b>stackTrace: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The stack trace associated with the generation of the
+-          error, used for debugging the server.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_s=
erver.status">server.status</a></dt><dd><div class=3D"box"><pre>notificatio=
n: {
+-  "event": "server.status"
+-  "params": {
+-    "<b>analysis</b>": <span style=3D"color:#999999">optional</span> <a h=
ref=3D"#type_AnalysisStatus">AnalysisStatus</a>
+-    "<b>pub</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_PubStatus">PubStatus</a>
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>analysis: <a href=3D"#ty=
pe_AnalysisStatus">AnalysisStatus</a><span style=3D"color:#999999"> (option=
al)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The current status of analysis, including whether
+-          analysis is being performed and if so what is being
+-          analyzed.
+-        </p>
+-      </dd><dt class=3D"field"><b>pub: <a href=3D"#type_PubStatus">PubSta=
tus</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The current status of pub execution, indicating whether we are
+-          currently running pub.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_analysis">analysis domain</a></h2>
+-  <p>
+-    The analysis domain contains API=E2=80=99s related to the analysis of
+-    files.
+-  </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_analysis.ge=
tErrors">analysis.getErrors</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getErrors"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>errors</b>": List&lt;<a href=3D"#type_AnalysisError">AnalysisErro=
r</a>&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return the errors associated with the given file. If the
+-      errors for the given file have not yet been computed, or the
+-      most recently computed errors for the given file are out of
+-      date, then the response for this request will be delayed
+-      until they have been computed. If some or all of the errors
+-      for the file cannot be computed, then the subset of the
+-      errors that can be computed will be returned and the
+-      response will contain an error to indicate why the errors
+-      could not be computed. If the content of the file changes after this
+-      request was received but before a response could be sent, then an
+-      error of type <tt>CONTENT_MODIFIED</tt> will be generated.
+-    </p>
+-    <p>
+-      This request is intended to be used by clients that cannot
+-      asynchronously apply updated error information. Clients that
+-      <b>can</b> apply error information as it becomes available
+-      should use the information provided by the 'analysis.errors'
+-      notification.
+-    </p>
+-    <p>
+-      If a request is made for a file which does not exist, or
+-      which is not currently subject to analysis (e.g. because it
+-      is not associated with any analysis root specified to
+-      analysis.setAnalysisRoots), an error of type
+-      <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file for which errors are being requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>errors: List&=
lt;<a href=3D"#type_AnalysisError">AnalysisError</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The errors associated with the file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tHover">analysis.getHover</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getHover"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>hovers</b>": List&lt;<a href=3D"#type_HoverInformation">HoverInfo=
rmation</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file in which hover information is being requested.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset for which hover information is being requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>hovers: List&=
lt;<a href=3D"#type_HoverInformation">HoverInformation</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tLibraryDependencies">analysis.getLibraryDependencies</a></dt><dd><div clas=
s=3D"box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getLibraryDependencies"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>libraries</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>&g=
t;
+-    "<b>packageMap</b>": Map&lt;String, Map&lt;String, List&lt;<a href=3D=
"#type_FilePath">FilePath</a>&gt;&gt;&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return library dependency information for use in client-side indexi=
ng
+-      and package URI resolution.
+-    </p>
+-    <p>
+-      Clients that are only using the libraries field should consider usi=
ng the
+-      analyzedFiles notification instead.
+-    </p>
+-=20=20=20=20
+-  <h4>returns:</h4><dl><dt class=3D"field"><b>libraries: List&lt;<a href=
=3D"#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the paths of library elements referenced by
+-          files in existing analysis roots.
+-        </p>
+-      </dd><dt class=3D"field"><b>packageMap: Map&lt;String, Map&lt;Strin=
g, List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;&gt;&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A mapping from context source roots to package maps which map
+-          package names to source directories for use in client-side
+-          package URI resolution.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tNavigation">analysis.getNavigation</a></dt><dd><div class=3D"box"><pre>req=
uest: {
+-  "id": String
+-  "method": "analysis.getNavigation"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>files</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-    "<b>targets</b>": List&lt;<a href=3D"#type_NavigationTarget">Navigati=
onTarget</a>&gt;
+-    "<b>regions</b>": List&lt;<a href=3D"#type_NavigationRegion">Navigati=
onRegion</a>&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return the navigation information associated with the given region =
of
+-      the given file. If the navigation information for the given file has
+-      not yet been computed, or the most recently computed navigation
+-      information for the given file is out of date, then the response for
+-      this request will be delayed until it has been computed. If the
+-      content of the file changes after this request was received but bef=
ore
+-      a response could be sent, then an error of type
+-      <tt>CONTENT_MODIFIED</tt> will be generated.
+-    </p>
+-    <p>
+-      If a navigation region overlaps (but extends either before or after)
+-      the given region of the file it will be included in the result. This
+-      means that it is theoretically possible to get the same navigation
+-      region in response to multiple requests. Clients can avoid this by
+-      always choosing a region that starts at the beginning of a line and
+-      ends at the end of a (possibly different) line in the file.
+-    </p>
+-    <p>
+-      If a request is made for a file which does not exist, or
+-      which is not currently subject to analysis (e.g. because it
+-      is not associated with any analysis root specified to
+-      analysis.setAnalysisRoots), an error of type
+-      <tt>GET_NAVIGATION_INVALID_FILE</tt> will be generated.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file in which navigation information is being requested.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the region for which navigation information is be=
ing
+-          requested.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the region for which navigation information is be=
ing
+-          requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>files: List&l=
t;<a href=3D"#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the paths of files that are referenced by the navigat=
ion
+-          targets.
+-        </p>
+-      </dd><dt class=3D"field"><b>targets: List&lt;<a href=3D"#type_Navig=
ationTarget">NavigationTarget</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the navigation targets that are referenced by the
+-          navigation regions.
+-        </p>
+-      </dd><dt class=3D"field"><b>regions: List&lt;<a href=3D"#type_Navig=
ationRegion">NavigationRegion</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the navigation regions within the requested region of
+-          the file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tReachableSources">analysis.getReachableSources</a></dt><dd><div class=3D"b=
ox"><pre>request: {
+-  "id": String
+-  "method": "analysis.getReachableSources"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>sources</b>": Map&lt;String, List&lt;String&gt;&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return the transitive closure of reachable sources for a given file.
+-    </p>
+-    <p>
+-      If a request is made for a file which does not exist, or
+-      which is not currently subject to analysis (e.g. because it
+-      is not associated with any analysis root specified to
+-      analysis.setAnalysisRoots), an error of type
+-      <tt>GET_REACHABLE_SOURCES_INVALID_FILE</tt> will be generated.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file for which reachable source information is being reques=
ted.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>sources: Map&=
lt;String, List&lt;String&gt;&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A mapping from source URIs to directly reachable source URIs. F=
or
+-          example,
+-          a file "foo.dart" that imports "bar.dart" would have the corres=
ponding
+-          mapping
+-          { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
+-          further imports
+-          (or exports) there will be a mapping from the URI "file:///bar.=
dart"
+-          to them.
+-          To check if a specific URI is reachable from a given file, clie=
nts can
+-          check
+-          for its presence in the resulting key set.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.re=
analyze">analysis.reanalyze</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "analysis.reanalyze"
+-  "params": {
+-    "<b>roots</b>": <span style=3D"color:#999999">optional</span> List&lt=
;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <p>
+-      Force the re-analysis of everything contained in the specified
+-      analysis roots. This will cause all previously computed analysis
+-      results to be discarded and recomputed, and will cause all subscrib=
ed
+-      notifications to be re-sent.
+-    </p>
+-    <p>
+-      If no analysis roots are provided, then all current analysis roots
+-      will be re-analyzed. If an empty list of analysis roots is provided,
+-      then nothing will be re-analyzed. If the list contains one or more
+-      paths that are not currently analysis roots, then an error of type
+-      <tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>roots: List&lt;<a href=
=3D"#type_FilePath">FilePath</a>&gt;<span style=3D"color:#999999"> (optiona=
l)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the analysis roots that are to be re-analyzed.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tAnalysisRoots">analysis.setAnalysisRoots</a></dt><dd><div class=3D"box"><p=
re>request: {
+-  "id": String
+-  "method": "analysis.setAnalysisRoots"
+-  "params": {
+-    "<b>included</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-    "<b>excluded</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-    "<b>packageRoots</b>": <span style=3D"color:#999999">optional</span> =
Map&lt;<a href=3D"#type_FilePath">FilePath</a>, <a href=3D"#type_FilePath">=
FilePath</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <p>
+-      Sets the root paths used to determine which files to analyze. The s=
et
+-      of files to be analyzed are all of the files in one of the root pat=
hs
+-      that are not either explicitly or implicitly excluded. A file is
+-      explicitly excluded if it is in one of the excluded paths. A file is
+-      implicitly excluded if it is in a subdirectory of one of the root
+-      paths where the name of the subdirectory starts with a period (that
+-      is, a hidden directory).
+-    </p>
+-    <p>
+-      Note that this request determines the set of requested
+-      analysis roots. The actual set of analysis roots at any
+-      given time is the intersection of this set with the set of
+-      files and directories actually present on the
+-      filesystem. When the filesystem changes, the actual set of
+-      analysis roots is automatically updated, but the set of
+-      requested analysis roots is unchanged. This means that if
+-      the client sets an analysis root before the root becomes
+-      visible to server in the filesystem, there is no error; once
+-      the server sees the root in the filesystem it will start
+-      analyzing it. Similarly, server will stop analyzing files
+-      that are removed from the file system but they will remain
+-      in the set of requested roots.
+-    </p>
+-    <p>
+-      If an included path represents a file, then server will look
+-      in the directory containing the file for a pubspec.yaml
+-      file. If none is found, then the parents of the directory
+-      will be searched until such a file is found or the root of
+-      the file system is reached. If such a file is found, it will
+-      be used to resolve package: URI=E2=80=99s within the file.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>included: List&lt;<a hre=
f=3D"#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the files and directories that should be
+-          analyzed.
+-        </p>
+-      </dd><dt class=3D"field"><b>excluded: List&lt;<a href=3D"#type_File=
Path">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the files and directories within the
+-          included directories that should not be analyzed.
+-        </p>
+-      </dd><dt class=3D"field"><b>packageRoots: Map&lt;<a href=3D"#type_F=
ilePath">FilePath</a>, <a href=3D"#type_FilePath">FilePath</a>&gt;<span sty=
le=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A mapping from source directories to package roots
+-          that should override the normal package: URI resolution
+-          mechanism.
+-        </p>
+-        <p>
+-          If a package root is a directory, then
+-          the analyzer will behave as though the associated
+-          source directory in the map contains a special
+-          pubspec.yaml file which resolves any package: URI to the
+-          corresponding path within that package root directory. The
+-          effect is the same as specifying the package root directory as
+-          a "--package_root" parameter to the Dart VM when
+-          executing any Dart file inside the source directory.
+-        </p>
+-        <p>
+-          If a package root is a file, then the analyzer
+-          will behave as though that file is a ".packages" file in the
+-          source directory. The effect is the same as specifying the file
+-          as a "--packages" parameter to the Dart VM when
+-          executing any Dart file inside the source directory.
+-        </p>
+-        <p>
+-          Files in any directories that are not overridden by this
+-          mapping have their package: URI's resolved using the
+-          normal pubspec.yaml mechanism. If this field is absent,
+-          or the empty map is specified, that indicates that the
+-          normal pubspec.yaml mechanism should always be used.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tGeneralSubscriptions">analysis.setGeneralSubscriptions</a></dt><dd><div cl=
ass=3D"box"><pre>request: {
+-  "id": String
+-  "method": "analysis.setGeneralSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": List&lt;<a href=3D"#type_GeneralAnalysisServi=
ce">GeneralAnalysisService</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <p>
+-      Subscribe for general services (that is, services that are not
+-      specific to individual files). All previous subscriptions are repla=
ced
+-      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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: List&lt;<=
a href=3D"#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt;</b><=
/dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>A list of the services being subscribed to.</p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tPriorityFiles">analysis.setPriorityFiles</a></dt><dd><div class=3D"box"><p=
re>request: {
+-  "id": String
+-  "method": "analysis.setPriorityFiles"
+-  "params": {
+-    "<b>files</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>files: List&lt;<a href=
=3D"#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The files that are to be a priority for analysis.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tSubscriptions">analysis.setSubscriptions</a></dt><dd><div class=3D"box"><p=
re>request: {
+-  "id": String
+-  "method": "analysis.setSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": Map&lt;<a href=3D"#type_AnalysisService">Anal=
ysisService</a>, List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <p>
+-      Subscribe for services that are specific to individual files.
+-      All previous subscriptions are replaced by the current set of
+-      subscriptions. If a given service is not included as a key in the m=
ap
+-      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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: Map&lt;<a=
 href=3D"#type_AnalysisService">AnalysisService</a>, List&lt;<a href=3D"#ty=
pe_FilePath">FilePath</a>&gt;&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A table mapping services to a list of the files being
+-          subscribed to the service.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.up=
dateContent">analysis.updateContent</a></dt><dd><div class=3D"box"><pre>req=
uest: {
+-  "id": String
+-  "method": "analysis.updateContent"
+-  "params": {
+-    "<b>files</b>": Map&lt;<a href=3D"#type_FilePath">FilePath</a>, <a hr=
ef=3D"#type_AddContentOverlay">AddContentOverlay</a> | <a href=3D"#type_Cha=
ngeContentOverlay">ChangeContentOverlay</a> | <a href=3D"#type_RemoveConten=
tOverlay">RemoveContentOverlay</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>files: Map&lt;<a href=3D=
"#type_FilePath">FilePath</a>, <a href=3D"#type_AddContentOverlay">AddConte=
ntOverlay</a> | <a href=3D"#type_ChangeContentOverlay">ChangeContentOverlay=
</a> | <a href=3D"#type_RemoveContentOverlay">RemoveContentOverlay</a>&gt;<=
/b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A table mapping the files whose content has changed to a
+-          description of the content change.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl></dl></dd><dt class=3D"request depre=
cated"><a name=3D"request_analysis.updateOptions">analysis.updateOptions</a=
></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "analysis.updateOptions"
+-  "params": {
+-    "<b>options</b>": <a href=3D"#type_AnalysisOptions">AnalysisOptions</=
a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <p><b>Deprecated:</b> all of the options can be set by users in
+-      an analysis options file.</p>
+-    <p>
+-      Update the options controlling analysis based on the given
+-      set of options. Any options that are not included in the
+-      analysis options will not be changed. If there are options
+-      in the analysis options that are not valid, they will be
+-      silently ignored.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>options: <a href=3D"#typ=
e_AnalysisOptions">AnalysisOptions</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The options that are to be used to control analysis.
+-        </p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_analysis.analyzedFiles">analysis.analyzedFile=
s</a></dt><dd><div class=3D"box"><pre>notification: {
+-  "event": "analysis.analyzedFiles"
+-  "params": {
+-    "<b>directories</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>=
&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Reports the paths of the files that are being analyzed.
+-    </p>
+-    <p>
+-      This notification is not subscribed to by default. Clients can
+-      subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the l=
ist
+-      of services passed in an analysis.setGeneralSubscriptions request.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>directories: List&lt;<a =
href=3D"#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the paths of the files that are being analyzed.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.errors">analysis.errors</a></dt><dd><div class=3D"box"><pre>notific=
ation: {
+-  "event": "analysis.errors"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>errors</b>": List&lt;<a href=3D"#type_AnalysisError">AnalysisErro=
r</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the errors.
+-        </p>
+-      </dd><dt class=3D"field"><b>errors: List&lt;<a href=3D"#type_Analys=
isError">AnalysisError</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The errors contained in the file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.flushResults">analysis.flushResults</a></dt><dd><div class=3D"box">=
<pre>notification: {
+-  "event": "analysis.flushResults"
+-  "params": {
+-    "<b>files</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>files: List&lt;<a href=
=3D"#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The files that are no longer being analyzed.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.folding">analysis.folding</a></dt><dd><div class=3D"box"><pre>notif=
ication: {
+-  "event": "analysis.folding"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>regions</b>": List&lt;<a href=3D"#type_FoldingRegion">FoldingRegi=
on</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the folding regions.
+-        </p>
+-      </dd><dt class=3D"field"><b>regions: List&lt;<a href=3D"#type_Foldi=
ngRegion">FoldingRegion</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The folding regions contained in the file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.highlights">analysis.highlights</a></dt><dd><div class=3D"box"><pre=
>notification: {
+-  "event": "analysis.highlights"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>regions</b>": List&lt;<a href=3D"#type_HighlightRegion">Highlight=
Region</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the highlight regions.
+-        </p>
+-      </dd><dt class=3D"field"><b>regions: List&lt;<a href=3D"#type_Highl=
ightRegion">HighlightRegion</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.implemented">analysis.implemented</a></dt><dd><div class=3D"box"><p=
re>notification: {
+-  "event": "analysis.implemented"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>classes</b>": List&lt;<a href=3D"#type_ImplementedClass">Implemen=
tedClass</a>&gt;
+-    "<b>members</b>": List&lt;<a href=3D"#type_ImplementedMember">Impleme=
ntedMember</a>&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Reports the classes that are implemented or extended and
+-      class members that are implemented or overridden in a file.
+-    </p>
+-    <p>
+-      This notification is not subscribed to by default. Clients
+-      can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
+-      the list of services passed in an analysis.setSubscriptions
+-      request.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file with which the implementations are associated.
+-        </p>
+-      </dd><dt class=3D"field"><b>classes: List&lt;<a href=3D"#type_Imple=
mentedClass">ImplementedClass</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The classes defined in the file that are implemented or extende=
d.
+-        </p>
+-      </dd><dt class=3D"field"><b>members: List&lt;<a href=3D"#type_Imple=
mentedMember">ImplementedMember</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The member defined in the file that are implemented or overridd=
en.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.invalidate">analysis.invalidate</a></dt><dd><div class=3D"box"><pre=
>notification: {
+-  "event": "analysis.invalidate"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-    "<b>delta</b>": int
+-  }
+-}</pre></div>
+-    <p>
+-      Reports that the navigation information associated with a region of=
 a
+-      single file has become invalid and should be re-requested.
+-    </p>
+-    <p>
+-      This notification is not subscribed to by default. Clients can
+-      subscribe by including the value <tt>"INVALIDATE"</tt> in the list =
of
+-      services passed in an analysis.setSubscriptions request.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file whose information has been invalidated.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the invalidated region.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the invalidated region.
+-        </p>
+-      </dd><dt class=3D"field"><b>delta: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The delta to be applied to the offsets in information that foll=
ows
+-          the invalidated region in order to update it so that it doesn't
+-          need to be re-requested.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.navigation">analysis.navigation</a></dt><dd><div class=3D"box"><pre=
>notification: {
+-  "event": "analysis.navigation"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>regions</b>": List&lt;<a href=3D"#type_NavigationRegion">Navigati=
onRegion</a>&gt;
+-    "<b>targets</b>": List&lt;<a href=3D"#type_NavigationTarget">Navigati=
onTarget</a>&gt;
+-    "<b>files</b>": List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the navigation regions.
+-        </p>
+-      </dd><dt class=3D"field"><b>regions: List&lt;<a href=3D"#type_Navig=
ationRegion">NavigationRegion</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>targets: List&lt;<a href=3D"#type_Navig=
ationTarget">NavigationTarget</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The navigation targets referenced in the file.
+-          They are referenced by <tt>NavigationRegion</tt>s by their
+-          index in this array.
+-        </p>
+-      </dd><dt class=3D"field"><b>files: List&lt;<a href=3D"#type_FilePat=
h">FilePath</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The files containing navigation targets referenced in the file.
+-          They are referenced by <tt>NavigationTarget</tt>s by their
+-          index in this array.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.occurrences">analysis.occurrences</a></dt><dd><div class=3D"box"><p=
re>notification: {
+-  "event": "analysis.occurrences"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>occurrences</b>": List&lt;<a href=3D"#type_Occurrences">Occurrenc=
es</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file in which the references occur.
+-        </p>
+-      </dd><dt class=3D"field"><b>occurrences: List&lt;<a href=3D"#type_O=
ccurrences">Occurrences</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The occurrences of references to elements within the
+-          file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.outline">analysis.outline</a></dt><dd><div class=3D"box"><pre>notif=
ication: {
+-  "event": "analysis.outline"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>kind</b>": <a href=3D"#type_FileKind">FileKind</a>
+-    "<b>libraryName</b>": <span style=3D"color:#999999">optional</span> S=
tring
+-    "<b>outline</b>": <a href=3D"#type_Outline">Outline</a>
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file with which the outline is associated.
+-        </p>
+-      </dd><dt class=3D"field"><b>kind: <a href=3D"#type_FileKind">FileKi=
nd</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of the file.
+-        </p>
+-      </dd><dt class=3D"field"><b>libraryName: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the library defined by the file using a "library"
+-          directive, or referenced by a "part of" directive. If both
+-          "library" and "part of" directives are present, then the
+-          "library" directive takes precedence.
+-          This field will be omitted if the file has neither "library"
+-          nor "part of" directives.
+-        </p>
+-      </dd><dt class=3D"field"><b>outline: <a href=3D"#type_Outline">Outl=
ine</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The outline associated with the file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.overrides">analysis.overrides</a></dt><dd><div class=3D"box"><pre>n=
otification: {
+-  "event": "analysis.overrides"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>overrides</b>": List&lt;<a href=3D"#type_Override">Override</a>&g=
t;
+-  }
+-}</pre></div>
+-    <p>
+-      Reports the overriding members in a file.
+-    </p>
+-    <p>
+-      This notification is not subscribed to by default. Clients
+-      can subscribe by including the value <tt>"OVERRIDES"</tt> in
+-      the list of services passed in an analysis.setSubscriptions
+-      request.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file with which the overrides are associated.
+-        </p>
+-      </dd><dt class=3D"field"><b>overrides: List&lt;<a href=3D"#type_Ove=
rride">Override</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The overrides associated with the file.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_completion">completion domain</a><=
/h2>
+-  <p>
+-    The code completion domain contains commands related to
+-    getting code completion suggestions.
+-  </p>
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_completion.=
getSuggestions">completion.getSuggestions</a></dt><dd><div class=3D"box"><p=
re>request: {
+-  "id": String
+-  "method": "completion.getSuggestions"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href=3D"#type_CompletionId">CompletionId</a>
+-  }
+-}</pre></div>
+-    <p>
+-      Request that completion suggestions for the given offset in
+-      the given file be returned.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the point at which suggestions are
+-          to be made.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset within the file at which suggestions are to
+-          be made.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_CompletionId">CompletionId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The identifier used to associate results with this
+-          completion request.
+-        </p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_completion.results">completion.results</a></d=
t><dd><div class=3D"box"><pre>notification: {
+-  "event": "completion.results"
+-  "params": {
+-    "<b>id</b>": <a href=3D"#type_CompletionId">CompletionId</a>
+-    "<b>replacementOffset</b>": int
+-    "<b>replacementLength</b>": int
+-    "<b>results</b>": List&lt;<a href=3D"#type_CompletionSuggestion">Comp=
letionSuggestion</a>&gt;
+-    "<b>isLast</b>": bool
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Com=
pletionId">CompletionId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The id associated with the completion.
+-        </p>
+-      </dd><dt class=3D"field"><b>replacementOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>replacementLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>results: List&lt;<a href=3D"#type_Compl=
etionSuggestion">CompletionSuggestion</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>isLast: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if this is that last set of results that will be
+-          returned for the indicated completion.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_search">search domain</a></h2>
+-  <p>
+-    The search domain contains commands related to searches that
+-    can be performed against the code base.
+-  </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_search.find=
ElementReferences">search.findElementReferences</a></dt><dd><div class=3D"b=
ox"><pre>request: {
+-  "id": String
+-  "method": "search.findElementReferences"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>includePotential</b>": bool
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <span style=3D"color:#999999">optional</span> <a href=3D=
"#type_SearchId">SearchId</a>
+-    "<b>element</b>": <span style=3D"color:#999999">optional</span> <a hr=
ef=3D"#type_Element">Element</a>
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the declaration of or reference to
+-          the element used to define the search.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset within the file of the declaration of or
+-          reference to the element.
+-        </p>
+-      </dd><dt class=3D"field"><b>includePotential: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if potential matches are to be included in the
+-          results.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a><span style=3D"color:#999999"> (optional)</=
span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>element: <a href=3D"#type_Element">Elem=
ent</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.find=
MemberDeclarations">search.findMemberDeclarations</a></dt><dd><div class=3D=
"box"><pre>request: {
+-  "id": String
+-  "method": "search.findMemberDeclarations"
+-  "params": {
+-    "<b>name</b>": String
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the declarations to be found.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The identifier used to associate results with this
+-          search request.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.find=
MemberReferences">search.findMemberReferences</a></dt><dd><div class=3D"box=
"><pre>request: {
+-  "id": String
+-  "method": "search.findMemberReferences"
+-  "params": {
+-    "<b>name</b>": String
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the references to be found.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The identifier used to associate results with this
+-          search request.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.find=
TopLevelDeclarations">search.findTopLevelDeclarations</a></dt><dd><div clas=
s=3D"box"><pre>request: {
+-  "id": String
+-  "method": "search.findTopLevelDeclarations"
+-  "params": {
+-    "<b>pattern</b>": String
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>pattern: String</b></dt>=
<dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The regular expression used to match the names of the
+-          declarations to be found.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The identifier used to associate results with this
+-          search request.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.getT=
ypeHierarchy">search.getTypeHierarchy</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+-  "id": String
+-  "method": "search.getTypeHierarchy"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>superOnly</b>": <span style=3D"color:#999999">optional</span> bool
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>hierarchyItems</b>": <span style=3D"color:#999999">optional</span=
> List&lt;<a href=3D"#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return the type hierarchy of the class declared or
+-      referenced at the given location.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the declaration or reference to the
+-          type for which a hierarchy is being requested.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the name of the type within the file.
+-        </p>
+-      </dd><dt class=3D"field"><b>superOnly: bool<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the client is only requesting superclasses and
+-          interfaces hierarchy.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>hierarchyItem=
s: List&lt;<a href=3D"#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;<sp=
an style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_search.results">search.results</a></dt><dd><d=
iv class=3D"box"><pre>notification: {
+-  "event": "search.results"
+-  "params": {
+-    "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+-    "<b>results</b>": List&lt;<a href=3D"#type_SearchResult">SearchResult=
</a>&gt;
+-    "<b>isLast</b>": bool
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Sea=
rchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The id associated with the search.
+-        </p>
+-      </dd><dt class=3D"field"><b>results: List&lt;<a href=3D"#type_Searc=
hResult">SearchResult</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The search results being reported.
+-        </p>
+-      </dd><dt class=3D"field"><b>isLast: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if this is that last set of results that will be
+-          returned for the indicated search.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_edit">edit domain</a></h2>
+-  <p>
+-    The edit domain contains commands related to edits that can be
+-    applied to the code.
+-  </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_edit.format=
">edit.format</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "edit.format"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>selectionOffset</b>": int
+-    "<b>selectionLength</b>": int
+-    "<b>lineLength</b>": <span style=3D"color:#999999">optional</span> int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>edits</b>": List&lt;<a href=3D"#type_SourceEdit">SourceEdit</a>&g=
t;
+-    "<b>selectionOffset</b>": int
+-    "<b>selectionLength</b>": int
+-  }
+-}</pre></div>
+-    <p>
+-      Format the contents of a single file. The currently selected region=
 of
+-      text is passed in so that the selection can be preserved across the
+-      formatting operation. The updated selection will be as close to
+-      matching the original as possible, but whitespace at the beginning =
or
+-      end of the selected region will be ignored. If preserving selection
+-      information is not required, zero (0) can be specified for both the
+-      selection offset and selection length.
+-    </p>
+-    <p>
+-      If a request is made for a file which does not exist, or which is n=
ot
+-      currently subject to analysis (e.g. because it is not associated wi=
th
+-      any analysis root specified to analysis.setAnalysisRoots), an error=
 of
+-      type <tt>FORMAT_INVALID_FILE</tt> will be generated. If the source
+-      contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
+-      will be generated.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the code to be formatted.
+-        </p>
+-      </dd><dt class=3D"field"><b>selectionOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the current selection in the file.
+-        </p>
+-      </dd><dt class=3D"field"><b>selectionLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the current selection in the file.
+-        </p>
+-      </dd><dt class=3D"field"><b>lineLength: int<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The line length to be used by the formatter.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>edits: List&l=
t;<a href=3D"#type_SourceEdit">SourceEdit</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The edit(s) to be applied in order to format the code. The list
+-          will be empty if the code was already formatted (there are no
+-          changes).
+-        </p>
+-      </dd><dt class=3D"field"><b>selectionOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the selection after formatting the code.
+-        </p>
+-      </dd><dt class=3D"field"><b>selectionLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the selection after formatting the code.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getAss=
ists">edit.getAssists</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "edit.getAssists"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>assists</b>": List&lt;<a href=3D"#type_SourceChange">SourceChange=
</a>&gt;
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the code for which assists are being
+-          requested.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the code for which assists are being
+-          requested.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the code for which assists are being
+-          requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>assists: List=
&lt;<a href=3D"#type_SourceChange">SourceChange</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The assists that are available at the given location.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getAva=
ilableRefactorings">edit.getAvailableRefactorings</a></dt><dd><div class=3D=
"box"><pre>request: {
+-  "id": String
+-  "method": "edit.getAvailableRefactorings"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>kinds</b>": List&lt;<a href=3D"#type_RefactoringKind">Refactoring=
Kind</a>&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Get a list of the kinds of refactorings that are valid for
+-      the given selection in the given file.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the code on which the refactoring
+-          would be based.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the code on which the refactoring would be
+-          based.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the code on which the refactoring would be
+-          based.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>kinds: List&l=
t;<a href=3D"#type_RefactoringKind">RefactoringKind</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kinds of refactorings that are valid for the given
+-          selection.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getFix=
es">edit.getFixes</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "edit.getFixes"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>fixes</b>": List&lt;<a href=3D"#type_AnalysisErrorFixes">Analysis=
ErrorFixes</a>&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return the set of fixes that are available for the errors at
+-      a given offset in a given file.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the errors for which fixes are being
+-          requested.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset used to select the errors for which fixes
+-          will be returned.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>fixes: List&l=
t;<a href=3D"#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt;</b></dt><=
dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The fixes that are available for the errors at the given offset.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getRef=
actoring">edit.getRefactoring</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "edit.getRefactoring"
+-  "params": {
+-    "<b>kind</b>": <a href=3D"#type_RefactoringKind">RefactoringKind</a>
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-    "<b>validateOnly</b>": bool
+-    "<b>options</b>": <span style=3D"color:#999999">optional</span> <a hr=
ef=3D"#type_RefactoringOptions">RefactoringOptions</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>initialProblems</b>": List&lt;<a href=3D"#type_RefactoringProblem=
">RefactoringProblem</a>&gt;
+-    "<b>optionsProblems</b>": List&lt;<a href=3D"#type_RefactoringProblem=
">RefactoringProblem</a>&gt;
+-    "<b>finalProblems</b>": List&lt;<a href=3D"#type_RefactoringProblem">=
RefactoringProblem</a>&gt;
+-    "<b>feedback</b>": <span style=3D"color:#999999">optional</span> <a h=
ref=3D"#type_RefactoringFeedback">RefactoringFeedback</a>
+-    "<b>change</b>": <span style=3D"color:#999999">optional</span> <a hre=
f=3D"#type_SourceChange">SourceChange</a>
+-    "<b>potentialEdits</b>": <span style=3D"color:#999999">optional</span=
> List&lt;String&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Get the changes required to perform a refactoring.
+-    </p>
+-    <p>
+-      If another refactoring request is received during the processing
+-      of this one, an error of type <tt>REFACTORING_REQUEST_CANCELLED</tt>
+-      will be generated.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>kind: <a href=3D"#type_R=
efactoringKind">RefactoringKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of refactoring to be performed.
+-        </p>
+-      </dd><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePa=
th</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the code involved in the
+-          refactoring.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the region involved in the refactoring.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the region involved in the refactoring.
+-        </p>
+-      </dd><dt class=3D"field"><b>validateOnly: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the client is only requesting that the values of
+-          the options be validated and no change be generated.
+-        </p>
+-      </dd><dt class=3D"field"><b>options: <a href=3D"#type_RefactoringOp=
tions">RefactoringOptions</a><span style=3D"color:#999999"> (optional)</spa=
n></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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=3D"#refactorings">Refa=
ctorings</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>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>initialProble=
ms: List&lt;<a href=3D"#type_RefactoringProblem">RefactoringProblem</a>&gt;=
</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>optionsProblems: List&lt;<a href=3D"#ty=
pe_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The options validation status, i.e. problems in the given optio=
ns,
+-          such as light-weight validation of a new name, flags
+-          compatibility, etc.
+-          The array will be empty if there are no known problems.
+-        </p>
+-      </dd><dt class=3D"field"><b>finalProblems: List&lt;<a href=3D"#type=
_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>feedback: <a href=3D"#type_RefactoringF=
eedback">RefactoringFeedback</a><span style=3D"color:#999999"> (optional)</=
span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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=3D"#refactorings">Refactorings</a=
>, labeled as
+-          "Feedback".
+-        </p>
+-      </dd><dt class=3D"field"><b>change: <a href=3D"#type_SourceChange">=
SourceChange</a><span style=3D"color:#999999"> (optional)</span></b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>potentialEdits: List&lt;String&gt;<span=
 style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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 fie=
ld
+-          will be omitted if the change field is omitted or if there are =
no
+-          potential edits for the refactoring.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.sortMe=
mbers">edit.sortMembers</a></dt><dd><div class=3D"box"><pre>request: {
+-  "id": String
+-  "method": "edit.sortMembers"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>edit</b>": <a href=3D"#type_SourceFileEdit">SourceFileEdit</a>
+-  }
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The Dart file to sort.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>edit: <a href=
=3D"#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file edit that is to be applied to the given file to effect
+-          the sorting.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.organi=
zeDirectives">edit.organizeDirectives</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+-  "id": String
+-  "method": "edit.organizeDirectives"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>edit</b>": <a href=3D"#type_SourceFileEdit">SourceFileEdit</a>
+-  }
+-}</pre></div>
+-    <p>
+-      Organizes all of the directives - removes unused imports and sorts
+-      directives of the given Dart file according to the
+-      <a href=3D"https://www.dartlang.org/articles/style-guide/">Dart Sty=
le
+-        Guide</a>.
+-    </p>
+-    <p>
+-      If a request is made for a file that does not exist, does not belong
+-      to an analysis root or is not a Dart file,
+-      <tt>FILE_NOT_ANALYZED</tt> will be generated.
+-    </p>
+-    <p>
+-      If directives of the Dart file cannot be organized, for example
+-      because it has scan or parse errors, or by other reasons,
+-      <tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
+-      will provide details about the reason.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The Dart file to organize directives in.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>edit: <a href=
=3D"#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file edit that is to be applied to the given file to effect
+-          the organizing.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_execution">execution domain</a></h=
2>
+-  <p>
+-    The execution domain contains commands related to providing an execut=
ion
+-    or debugging experience.
+-  </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_execution.c=
reateContext">execution.createContext</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+-  "id": String
+-  "method": "execution.createContext"
+-  "params": {
+-    "<b>contextRoot</b>": <a href=3D"#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href=3D"#type_ExecutionContextId">ExecutionContextId<=
/a>
+-  }
+-}</pre></div>
+-    <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, a=
re
+-      responsible for managing the lifetime of execution contexts.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>contextRoot: <a href=3D"=
#type_FilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The path of the Dart or HTML file that will be launched, or the
+-          path of the directory containing the file.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The identifier used to refer to the execution context that was
+-          created.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_execution.d=
eleteContext">execution.deleteContext</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+-  "<b>id</b>": String
+-  "method": "execution.deleteContext"
+-  "params": {
+-    "<b>id</b>": <a href=3D"#type_ExecutionContextId">ExecutionContextId<=
/a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <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>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Exe=
cutionContextId">ExecutionContextId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The identifier of the execution context that is to be deleted.
+-        </p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_execution.m=
apUri">execution.mapUri</a></dt><dd><div class=3D"box"><pre>request: {
+-  "<b>id</b>": String
+-  "method": "execution.mapUri"
+-  "params": {
+-    "<b>id</b>": <a href=3D"#type_ExecutionContextId">ExecutionContextId<=
/a>
+-    "<b>file</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_FilePath">FilePath</a>
+-    "<b>uri</b>": <span style=3D"color:#999999">optional</span> String
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>file</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_FilePath">FilePath</a>
+-    "<b>uri</b>": <span style=3D"color:#999999">optional</span> String
+-  }
+-}</pre></div>
+-    <p>
+-      Map a URI from the execution context to the file that it corresponds
+-      to, or map a file to the URI that it corresponds to in the execution
+-      context.
+-    </p>
+-    <p>
+-      Exactly one of the file and uri fields must be provided. If both
+-      fields are provided, then an error of type <tt>INVALID_PARAMETER</t=
t>
+-      will be generated. Similarly, if neither field is provided, then an
+-      error of type <tt>INVALID_PARAMETER</tt> will be generated.
+-    </p>
+-    <p>
+-      If the file field is provided and the value is not the path of a fi=
le
+-      (either the file does not exist or the path references something ot=
her
+-      than a file), then an error of type <tt>INVALID_PARAMETER</tt> will
+-      be generated.
+-    </p>
+-    <p>
+-      If the uri field is provided and the value is not a valid URI or if
+-      the URI references something that is not a file (either a file that
+-      does not exist or something other than a file), then an error of ty=
pe
+-      <tt>INVALID_PARAMETER</tt> will be generated.
+-    </p>
+-    <p>
+-      If the contextRoot used to create the execution context does not
+-      exist, then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt> will
+-      be generated.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Exe=
cutionContextId">ExecutionContextId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The identifier of the execution context in which the URI is to =
be
+-          mapped.
+-        </p>
+-      </dd><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePa=
th</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The path of the file to be mapped into a URI.
+-        </p>
+-      </dd><dt class=3D"field"><b>uri: String<span style=3D"color:#999999=
"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The URI to be mapped into a file path.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>file: <a href=
=3D"#type_FilePath">FilePath</a><span style=3D"color:#999999"> (optional)</=
span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file to which the URI was mapped. This field is omitted if =
the
+-          uri field was not given in the request.
+-        </p>
+-      </dd><dt class=3D"field"><b>uri: String<span style=3D"color:#999999=
"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"request deprecated"><a name=3D"request_=
execution.setSubscriptions">execution.setSubscriptions</a></dt><dd><div cla=
ss=3D"box"><pre>request: {
+-  "id": String
+-  "method": "execution.setSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": List&lt;<a href=3D"#type_ExecutionService">Ex=
ecutionService</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+-    <p>
+-      <b>Deprecated:</b> the analysis server no longer fires
+-      <tt>LAUNCH_DATA</tt> events.
+-    </p>
+-    <p>
+-      Subscribe for services. All previous subscriptions are replaced by =
the
+-      given set of services.
+-    </p>
+-    <p>
+-      It is an error if any of the elements in the list are not valid
+-      services. If there is an error, then the current subscriptions will
+-      remain unchanged.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: List&lt;<=
a href=3D"#type_ExecutionService">ExecutionService</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the services being subscribed to.
+-        </p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_execution.launchData">execution.launchData</a=
></dt><dd><div class=3D"box"><pre>notification: {
+-  "event": "execution.launchData"
+-  "params": {
+-    "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+-    "<b>kind</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_ExecutableKind">ExecutableKind</a>
+-    "<b>referencedFiles</b>": <span style=3D"color:#999999">optional</spa=
n> List&lt;<a href=3D"#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre></div>
+-    <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 servi=
ces
+-      passed in an <tt>execution.setSubscriptions</tt> request.
+-    </p>
+-=20=20=20=20
+-  <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file for which launch data is being provided. This will eit=
her
+-          be a Dart library or an HTML file.
+-        </p>
+-      </dd><dt class=3D"field"><b>kind: <a href=3D"#type_ExecutableKind">=
ExecutableKind</a><span style=3D"color:#999999"> (optional)</span></b></dt>=
<dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of the executable file. This field is omitted if the f=
ile
+-          is not a Dart file.
+-        </p>
+-      </dd><dt class=3D"field"><b>referencedFiles: List&lt;<a href=3D"#ty=
pe_FilePath">FilePath</a>&gt;<span style=3D"color:#999999"> (optional)</spa=
n></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_diagnostic">diagnostic domain</a><=
/h2>
+-  <p>
+-    The diagnostic domain contains server diagnostics APIs.
+-  </p>
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_diagnostic.=
getDiagnostics">diagnostic.getDiagnostics</a></dt><dd><div class=3D"box"><p=
re>request: {
+-  "id": String
+-  "method": "diagnostic.getDiagnostics"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>contexts</b>": List&lt;<a href=3D"#type_ContextData">ContextData<=
/a>&gt;
+-  }
+-}</pre></div>
+-    <p>Return server diagnostics.</p>
+-=20=20=20=20
+-  <h4>returns:</h4><dl><dt class=3D"field"><b>contexts: List&lt;<a href=
=3D"#type_ContextData">ContextData</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>The list of analysis contexts.</p>
+-      </dd></dl></dd><dt class=3D"request"><a name=3D"request_diagnostic.=
getServerPort">diagnostic.getServerPort</a></dt><dd><div class=3D"box"><pre=
>request: {
+-  "id": String
+-  "method": "diagnostic.getServerPort"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-  "result": {
+-    "<b>port</b>": int
+-  }
+-}</pre></div>
+-    <p>
+-      Return the port of the diagnostic web server. If the server is not =
running
+-      this call will start the server. If unable to start the diagnostic =
web
+-      server,
+-      this call will return an error of <tt>DEBUG_PORT_COULD_NOT_BE_OPENE=
D</tt>.
+-    </p>
+-=20=20=20=20
+-  <h4>returns:</h4><dl><dt class=3D"field"><b>port: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>The diagnostic server port.</p>
+-      </dd></dl></dd></dl>
+-
+-
+-
+-  <h2 class=3D"domain"><a name=3D"types">Types</a></h2>
+-  <p>
+-    This section contains descriptions of the data types referenced
+-    in the API=E2=80=99s of the various domains.
+-  </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<dl><dt class=3D"typeDefinition"><a name=3D"type_AddContentOverlay">AddCo=
ntentOverlay: object</a></dt><dd>
+-    <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>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>type =3D "add"</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-      </dd><dt class=3D"field"><b>content: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The new content of the file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sError">AnalysisError: object</a></dt><dd>
+-    <p>
+-      An indication of an error, warning, or hint that was produced by the
+-      analysis.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>severity: <a href=3D"#type_AnalysisErrorSeve=
rity">AnalysisErrorSeverity</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The severity of the error.
+-        </p>
+-      </dd><dt class=3D"field"><b>type: <a href=3D"#type_AnalysisErrorTyp=
e">AnalysisErrorType</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The type of the error.
+-        </p>
+-      </dd><dt class=3D"field"><b>location: <a href=3D"#type_Location">Lo=
cation</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The location associated with the error.
+-        </p>
+-      </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>correction: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The correction message to be displayed for this error. The corr=
ection
+-          message should indicate how the user can fix the error. The fie=
ld is
+-          omitted if there is no correction message associated with the e=
rror
+-          code.
+-        </p>
+-      </dd><dt class=3D"field"><b>code: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name, as a string, of the error code associated with this e=
rror.
+-        </p>
+-      </dd><dt class=3D"field"><b>hasFix: bool<span style=3D"color:#99999=
9"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A hint to indicate to interested clients that this error has an
+-          associated fix (or fixes). The absence of this field implies th=
ere
+-          are not known to be fixes. Note that since the operation to cal=
culate
+-          whether fixes apply needs to be performant it is possible that
+-          complicated tests will be skipped and a false negative returned=
. For
+-          this reason, this attribute should be treated as a "hint". Desp=
ite the
+-          possibility of false negatives, no false positives should be re=
turned.
+-          If a client sees this flag set they can proceed with the confid=
ence
+-          that there are in fact associated fixes.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sErrorFixes">AnalysisErrorFixes: object</a></dt><dd>
+-    <p>
+-      A list of fixes associated with a specific error.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>error: <a href=3D"#type_AnalysisError">Analy=
sisError</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The error with which the fixes are associated.
+-        </p>
+-      </dd><dt class=3D"field"><b>fixes: List&lt;<a href=3D"#type_SourceC=
hange">SourceChange</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The fixes associated with the error.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sErrorSeverity">AnalysisErrorSeverity: String</a></dt><dd>
+-    <p>
+-      An enumeration of the possible severities of analysis errors.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">INFO</dt><dt class=3D"value">WARNING</dt><dt cl=
ass=3D"value">ERROR</dt></dl></dd><dt class=3D"typeDefinition"><a name=3D"t=
ype_AnalysisErrorType">AnalysisErrorType: String</a></dt><dd>
+-    <p>
+-      An enumeration of the possible types of analysis errors.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">CHECKED_MODE_COMPILE_TIME_ERROR</dt><dt class=
=3D"value">COMPILE_TIME_ERROR</dt><dt class=3D"value">HINT</dt><dt class=3D=
"value">LINT</dt><dt class=3D"value">STATIC_TYPE_WARNING</dt><dt class=3D"v=
alue">STATIC_WARNING</dt><dt class=3D"value">SYNTACTIC_ERROR</dt><dt class=
=3D"value">TODO</dt></dl></dd><dt class=3D"typeDefinition deprecated"><a na=
me=3D"type_AnalysisOptions">AnalysisOptions: object</a></dt><dd>
+-    <p><b>Deprecated:</b> the only reference to this type has been
+-      deprecated.</p>
+-    <p>
+-      A set of options controlling what kind of analysis is to be
+-      performed. If the value of a field is omitted the value of the
+-      option will not be changed.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b><span class=3D"deprecated">enableAsync</span=
>: bool<span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p><b>Deprecated:</b> this feature is always enabled.</p>
+-        <p>
+-          True if the client wants to enable support for the
+-          proposed async feature.
+-        </p>
+-      </dd><dt class=3D"field"><b><span class=3D"deprecated">enableDeferr=
edLoading</span>: bool<span style=3D"color:#999999"> (optional)</span></b><=
/dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p><b>Deprecated:</b> this feature is always enabled.</p>
+-        <p>
+-          True if the client wants to enable support for the
+-          proposed deferred loading feature.
+-        </p>
+-      </dd><dt class=3D"field"><b><span class=3D"deprecated">enableEnums<=
/span>: bool<span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p><b>Deprecated:</b> this feature is always enabled.</p>
+-        <p>
+-          True if the client wants to enable support for the
+-          proposed enum feature.
+-        </p>
+-      </dd><dt class=3D"field"><b><span class=3D"deprecated">enableNullAw=
areOperators</span>: bool<span style=3D"color:#999999"> (optional)</span></=
b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p><b>Deprecated:</b> this feature is always enabled.</p>
+-        <p>
+-          True if the client wants to enable support for the
+-          proposed "null aware operators" feature.
+-        </p>
+-      </dd><dt class=3D"field"><b>enableSuperMixins: bool<span style=3D"c=
olor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the client wants to enable support for the
+-          proposed "less restricted mixins" proposal (DEP 34).
+-        </p>
+-      </dd><dt class=3D"field"><b>generateDart2jsHints: bool<span style=
=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if hints that are specific to dart2js should be
+-          generated. This option is ignored if generateHints is false.
+-        </p>
+-      </dd><dt class=3D"field"><b>generateHints: bool<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if hints should be generated as part of generating
+-          errors and warnings.
+-        </p>
+-      </dd><dt class=3D"field"><b>generateLints: bool<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if lints should be generated as part of generating
+-          errors and warnings.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sService">AnalysisService: String</a></dt><dd>
+-    <p>
+-      An enumeration of the services provided by the analysis domain that
+-      are related to a specific list of files.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">CLOSING_LABELS</dt><dt class=3D"value">FOLDING<=
/dt><dt class=3D"value">HIGHLIGHTS</dt><dt class=3D"value">IMPLEMENTED</dt>=
<dt class=3D"value">INVALIDATE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          This service is not currently implemented and will become a
+-          GeneralAnalysisService in a future release.
+-        </p>
+-      </dd><dt class=3D"value">NAVIGATION</dt><dt class=3D"value">OCCURRE=
NCES</dt><dt class=3D"value">OUTLINE</dt><dt class=3D"value">OVERRIDES</dt>=
</dl></dd><dt class=3D"typeDefinition"><a name=3D"type_AnalysisStatus">Anal=
ysisStatus: object</a></dt><dd>
+-    <p>
+-      An indication of the current state of analysis.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>isAnalyzing: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>True if analysis is currently being performed.</p>
+-      </dd><dt class=3D"field"><b>analysisTarget: String<span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the current target of analysis. This field is
+-          omitted if analyzing is false.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_ChangeC=
ontentOverlay">ChangeContentOverlay: object</a></dt><dd>
+-    <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 assump=
tion
+-      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=3D"#type_RemoveContentOverlay">RemoveContentOverlay</a>.
+-    </p>
+-    <p>
+-      If any of the edits cannot be applied due to its offset or length b=
eing
+-      out of range, an <tt>INVALID_OVERLAY_CHANGE</tt> error will be repo=
rted.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>type =3D "change"</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-      </dd><dt class=3D"field"><b>edits: List&lt;<a href=3D"#type_SourceE=
dit">SourceEdit</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The edits to be applied to the file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Closing=
Label">ClosingLabel: object</a></dt><dd>
+-    <p>
+-      A label that is associated with a range of code that may be useful =
to
+-      render at the end of the range to aid code readability. For example=
, a
+-      constructor call that spans multiple lines may result in a closing =
label
+-      to allow the constructor type/name to be rendered alongside the clo=
sing
+-      parenthesis.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the construct being labelled.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the whole construct to be labelled.
+-        </p>
+-      </dd><dt class=3D"field"><b>label: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The label associated with this range that should be displayed t=
o the
+-          user.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Complet=
ionId">CompletionId: String</a></dt><dd>
+-=20=20=20=20
+-    <p>
+-      An identifier used to associate completion results with a
+-      completion request.
+-    </p>
+-  </dd><dt class=3D"typeDefinition"><a name=3D"type_CompletionSuggestion"=
>CompletionSuggestion: object</a></dt><dd>
+-    <p>
+-      A suggestion for how to complete partially entered text. Many of the
+-      fields are optional, depending on the kind of element being suggest=
ed.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>kind: <a href=3D"#type_CompletionSuggestionK=
ind">CompletionSuggestionKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of element being suggested.
+-        </p>
+-      </dd><dt class=3D"field"><b>relevance: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The relevance of this completion suggestion where a higher numb=
er
+-          indicates a higher relevance.
+-        </p>
+-      </dd><dt class=3D"field"><b>completion: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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 informat=
ion
+-          required in order to do so is contained in other fields.
+-        </p>
+-      </dd><dt class=3D"field"><b>selectionOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset, relative to the beginning of the completion, of whe=
re the
+-          selection should be placed after insertion.
+-        </p>
+-      </dd><dt class=3D"field"><b>selectionLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The number of characters that should be selected after insertio=
n.
+-        </p>
+-      </dd><dt class=3D"field"><b>isDeprecated: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the suggested element is deprecated.
+-        </p>
+-      </dd><dt class=3D"field"><b>isPotential: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the element is not known to be valid for the target. Th=
is
+-          happens if the type of the target is dynamic.
+-        </p>
+-      </dd><dt class=3D"field"><b>docSummary: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An abbreviated version of the Dartdoc associated with the eleme=
nt
+-          being suggested, This field is omitted if there is no Dartdoc
+-          associated with the element.
+-        </p>
+-      </dd><dt class=3D"field"><b>docComplete: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The Dartdoc associated with the element being suggested. This f=
ield is
+-          omitted if there is no Dartdoc associated with the element.
+-        </p>
+-      </dd><dt class=3D"field"><b>declaringType: String<span style=3D"col=
or:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>defaultArgumentListString: String<span =
style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A default String for use in generating argument list source con=
tents
+-          on the client side.
+-        </p>
+-      </dd><dt class=3D"field"><b>defaultArgumentListTextRanges: List&lt;=
int&gt;<span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Pairs of offsets and lengths describing 'defaultArgumentListStr=
ing'
+-          text ranges suitable for use by clients to set up linked edits =
of
+-          default argument source contents. For example, given an argumen=
t list
+-          string 'x, y', the corresponding text range [0, 1, 3, 1], indic=
ates
+-          two text ranges of length 1, starting at offsets 0 and 3. Clien=
ts can
+-          use these ranges to treat the 'x' and 'y' values specially for =
linked
+-          edits.
+-        </p>
+-      </dd><dt class=3D"field"><b>element: <a href=3D"#type_Element">Elem=
ent</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Information about the element reference being suggested.
+-        </p>
+-      </dd><dt class=3D"field"><b>returnType: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The return type of the getter, function or method or the type o=
f the
+-          field being suggested. This field is omitted if the suggested e=
lement
+-          is not a getter, function or method.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameterNames: List&lt;String&gt;<span=
 style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The names of the parameters of the function or method being sug=
gested.
+-          This field is omitted if the suggested element is not a setter,
+-          function or method.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameterTypes: List&lt;String&gt;<span=
 style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The types of the parameters of the function or method being sug=
gested.
+-          This field is omitted if the parameterNames field is omitted.
+-        </p>
+-      </dd><dt class=3D"field"><b>requiredParameterCount: int<span style=
=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The number of required parameters for the function or method be=
ing
+-          suggested. This field is omitted if the parameterNames field is
+-          omitted.
+-        </p>
+-      </dd><dt class=3D"field"><b>hasNamedParameters: bool<span style=3D"=
color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the function or method being suggested has at least one=
 named
+-          parameter. This field is omitted if the parameterNames field is
+-          omitted.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameterName: String<span style=3D"col=
or:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the optional parameter being suggested. This field =
is
+-          omitted if the suggestion is not the addition of an optional ar=
gument
+-          within an argument list.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameterType: String<span style=3D"col=
or:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The type of the options parameter being suggested. This field is
+-          omitted if the parameterName field is omitted.
+-        </p>
+-      </dd><dt class=3D"field"><b>importUri: String<span style=3D"color:#=
999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The import to be added if the suggestion is out of scope and ne=
eds
+-          an import to be added to be in scope.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Complet=
ionSuggestionKind">CompletionSuggestionKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of elements that can be included in a
+-      completion suggestion.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">ARGUMENT_LIST</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of arguments for the method or function that is being
+-          invoked. For this suggestion kind, the completion field is a
+-          textual representation of the invocation and the parameterNames,
+-          parameterTypes, and requiredParameterCount attributes are defin=
ed.
+-        </p>
+-      </dd><dt class=3D"value">IMPORT</dt><dt class=3D"value">IDENTIFIER<=
/dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The element identifier should be inserted at the completion
+-          location. For example "someMethod" in <tt>import 'myLib.dart' s=
how
+-          someMethod;</tt>. For suggestions of this kind, the element
+-          attribute is defined and the completion field is the element's
+-          identifier.
+-        </p>
+-      </dd><dt class=3D"value">INVOCATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The element is being invoked at the completion location. For
+-          example, 'someMethod' in <tt>x.someMethod();</tt>. For suggesti=
ons
+-          of this kind, the element attribute is defined and the completi=
on
+-          field is the element's identifier.
+-        </p>
+-      </dd><dt class=3D"value">KEYWORD</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A keyword is being suggested. For suggestions of this kind, the
+-          completion is the keyword.
+-        </p>
+-      </dd><dt class=3D"value">NAMED_ARGUMENT</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A named argument for the current call site is being suggested. =
For
+-          suggestions of this kind, the completion is the named argument
+-          identifier including a trailing ':' and a space.
+-        </p>
+-      </dd><dt class=3D"value">OPTIONAL_ARGUMENT</dt><dt class=3D"value">=
PARAMETER</dt></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Contex=
tData">ContextData: object</a></dt><dd>
+-    <p>
+-      Information about an analysis context.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the context.
+-        </p>
+-      </dd><dt class=3D"field"><b>explicitFileCount: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Explicitly analyzed files.
+-        </p>
+-      </dd><dt class=3D"field"><b>implicitFileCount: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Implicitly analyzed files.
+-        </p>
+-      </dd><dt class=3D"field"><b>workItemQueueLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The number of work items in the queue.
+-        </p>
+-      </dd><dt class=3D"field"><b>cacheEntryExceptions: List&lt;String&gt=
;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Exceptions associated with cache entries.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Element=
">Element: object</a></dt><dd>
+-    <p>
+-      Information about an element (something that can be declared in cod=
e).
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>kind: <a href=3D"#type_ElementKind">ElementK=
ind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of the element.
+-        </p>
+-      </dd><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the element. This is typically used as the label in=
 the
+-          outline.
+-        </p>
+-      </dd><dt class=3D"field"><b>location: <a href=3D"#type_Location">Lo=
cation</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The location of the name in the declaration of the element.
+-        </p>
+-      </dd><dt class=3D"field"><b>flags: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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 =E2=80=98const=
=E2=80=99
+-          </li>
+-          <li>
+-            0x04 - set if the element was declared to be =E2=80=98final=
=E2=80=99
+-          </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>
+-      </dd><dt class=3D"field"><b>parameters: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The parameter list for the element. If the element is not a met=
hod or
+-          function this field will not be defined. If the element doesn't=
 have
+-          parameters (e.g. getter), this field will not be defined. If the
+-          element has zero parameters, this field will have a value of "(=
)".
+-        </p>
+-      </dd><dt class=3D"field"><b>returnType: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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 no=
t have
+-          a declared return type, this field will contain an empty string.
+-        </p>
+-      </dd><dt class=3D"field"><b>typeParameters: String<span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The type parameter list for the element. If the element doesn't=
 have
+-          type parameters, this field will not be defined.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Element=
Kind">ElementKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of elements.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">CLASS</dt><dt class=3D"value">CLASS_TYPE_ALIAS<=
/dt><dt class=3D"value">COMPILATION_UNIT</dt><dt class=3D"value">CONSTRUCTO=
R</dt><dt class=3D"value">CONSTRUCTOR_INVOCATION</dt><dt class=3D"value">EN=
UM</dt><dt class=3D"value">ENUM_CONSTANT</dt><dt class=3D"value">FIELD</dt>=
<dt class=3D"value">FILE</dt><dt class=3D"value">FUNCTION</dt><dt class=3D"=
value">FUNCTION_INVOCATION</dt><dt class=3D"value">FUNCTION_TYPE_ALIAS</dt>=
<dt class=3D"value">GETTER</dt><dt class=3D"value">LABEL</dt><dt class=3D"v=
alue">LIBRARY</dt><dt class=3D"value">LOCAL_VARIABLE</dt><dt class=3D"value=
">METHOD</dt><dt class=3D"value">PARAMETER</dt><dt class=3D"value">PREFIX</=
dt><dt class=3D"value">SETTER</dt><dt class=3D"value">TOP_LEVEL_VARIABLE</d=
t><dt class=3D"value">TYPE_PARAMETER</dt><dt class=3D"value">UNIT_TEST_GROU=
P</dt><dt class=3D"value">UNIT_TEST_TEST</dt><dt class=3D"value">UNKNOWN</d=
t></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_ExecutableFile">Ex=
ecutableFile: object</a></dt><dd>
+-    <p>
+-      A description of an executable file.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The path of the executable file.
+-        </p>
+-      </dd><dt class=3D"field"><b>kind: <a href=3D"#type_ExecutableKind">=
ExecutableKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of the executable file.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Executa=
bleKind">ExecutableKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of executable files.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">CLIENT</dt><dt class=3D"value">EITHER</dt><dt c=
lass=3D"value">NOT_EXECUTABLE</dt><dt class=3D"value">SERVER</dt></dl></dd>=
<dt class=3D"typeDefinition"><a name=3D"type_ExecutionContextId">ExecutionC=
ontextId: String</a></dt><dd>
+-=20=20=20=20
+-    <p>
+-      The identifier for a execution context.
+-    </p>
+-  </dd><dt class=3D"typeDefinition"><a name=3D"type_ExecutionService">Exe=
cutionService: String</a></dt><dd>
+-    <p>
+-      An enumeration of the services provided by the execution
+-      domain.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">LAUNCH_DATA</dt></dl></dd><dt class=3D"typeDefi=
nition"><a name=3D"type_FileKind">FileKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of files.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">LIBRARY</dt><dt class=3D"value">PART</dt></dl><=
/dd><dt class=3D"typeDefinition"><a name=3D"type_FilePath">FilePath: String=
</a></dt><dd>
+-=20=20=20=20
+-    <p>
+-      The absolute, normalized path of a file.
+-    </p>
+-    <p>
+-      If the format of a file path in a request is not valid, e.g. the pa=
th is
+-      not absolute or is not normalized, then an error of type
+-      <tt>INVALID_FILE_PATH_FORMAT</tt> will be generated.
+-    </p>
+-  </dd><dt class=3D"typeDefinition"><a name=3D"type_FoldingKind">FoldingK=
ind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of folding regions.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">COMMENT</dt><dt class=3D"value">CLASS_MEMBER</d=
t><dt class=3D"value">DIRECTIVES</dt><dt class=3D"value">DOCUMENTATION_COMM=
ENT</dt><dt class=3D"value">TOP_LEVEL_DECLARATION</dt></dl></dd><dt class=
=3D"typeDefinition"><a name=3D"type_FoldingRegion">FoldingRegion: object</a=
></dt><dd>
+-    <p>
+-      A description of a region that can be folded.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>kind: <a href=3D"#type_FoldingKind">FoldingK=
ind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of the region.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the region to be folded.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the region to be folded.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_General=
AnalysisService">GeneralAnalysisService: String</a></dt><dd>
+-    <p>
+-      An enumeration of the services provided by the analysis domain that=
 are
+-      general in nature (that is, are not specific to some list of files).
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">ANALYZED_FILES</dt></dl></dd><dt class=3D"typeD=
efinition"><a name=3D"type_HighlightRegion">HighlightRegion: object</a></dt=
><dd>
+-    <p>
+-      A description of a region that could have special highlighting asso=
ciated
+-      with it.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>type: <a href=3D"#type_HighlightRegionType">=
HighlightRegionType</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The type of highlight associated with the region.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the region to be highlighted.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the region to be highlighted.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Highlig=
htRegionType">HighlightRegionType: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of highlighting that can be applied to =
files.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">ANNOTATION</dt><dt class=3D"value">BUILT_IN</dt=
><dt class=3D"value">CLASS</dt><dt class=3D"value">COMMENT_BLOCK</dt><dt cl=
ass=3D"value">COMMENT_DOCUMENTATION</dt><dt class=3D"value">COMMENT_END_OF_=
LINE</dt><dt class=3D"value">CONSTRUCTOR</dt><dt class=3D"value">DIRECTIVE<=
/dt><dt class=3D"value">DYNAMIC_TYPE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">DYNAMIC_LOCAL_VARIABLE_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">DYNAMIC_LOCAL_VARIABLE_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">DYNAMIC_PARAMETER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">DYNAMIC_PARAMETER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">ENUM</dt><dt class=3D"value">ENUM_CONSTANT=
</dt><dt class=3D"value">FIELD</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">FIELD_STATIC</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">FUNCTION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">FUNCTION_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">FUNCTION_TYPE_ALIAS</dt><dt class=3D"value=
">GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">IDENTIFIER_DEFAULT</dt><dt class=3D"value"=
>IMPORT_PREFIX</dt><dt class=3D"value">INSTANCE_FIELD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INSTANCE_FIELD_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INSTANCE_GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INSTANCE_GETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INSTANCE_METHOD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INSTANCE_METHOD_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INSTANCE_SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INSTANCE_SETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">INVALID_STRING_ESCAPE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">KEYWORD</dt><dt class=3D"value">LABEL</dt>=
<dt class=3D"value">LIBRARY_NAME</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">LITERAL_BOOLEAN</dt><dt class=3D"value">LI=
TERAL_DOUBLE</dt><dt class=3D"value">LITERAL_INTEGER</dt><dt class=3D"value=
">LITERAL_LIST</dt><dt class=3D"value">LITERAL_MAP</dt><dt class=3D"value">=
LITERAL_STRING</dt><dt class=3D"value">LOCAL_FUNCTION_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">LOCAL_FUNCTION_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">LOCAL_VARIABLE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">LOCAL_VARIABLE_DECLARATION</dt><dt class=
=3D"value">LOCAL_VARIABLE_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">METHOD</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">METHOD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">METHOD_DECLARATION_STATIC</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">METHOD_STATIC</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">PARAMETER</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_VARIABLE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class=3D"value">PARAMETER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">PARAMETER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">STATIC_FIELD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">STATIC_GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">STATIC_GETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">STATIC_METHOD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">STATIC_METHOD_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">STATIC_SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">STATIC_SETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_FUNCTION_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_FUNCTION_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_GETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_SETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TOP_LEVEL_VARIABLE_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">TYPE_NAME_DYNAMIC</dt><dt class=3D"value">=
TYPE_PARAMETER</dt><dt class=3D"value">UNRESOLVED_INSTANCE_MEMBER_REFERENCE=
</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class=3D"value">VALID_STRING_ESCAPE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>Only for version 2 of highlight.</p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_HoverIn=
formation">HoverInformation: object</a></dt><dd>
+-    <p>
+-      The hover information associated with a specific location.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the range of characters that encompasses the
+-          cursor position and has the same hover information as the
+-          cursor position.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the range of characters that encompasses the
+-          cursor position and has the same hover information as the
+-          cursor position.
+-        </p>
+-      </dd><dt class=3D"field"><b>containingLibraryPath: String<span styl=
e=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>containingLibraryName: String<span styl=
e=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>containingClassDescription: String<span=
 style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A human-readable description of the class declaring the element
+-          being referenced. This data is omitted if there is no referenced
+-          element, or if the element is not a class member.
+-        </p>
+-      </dd><dt class=3D"field"><b>dartdoc: String<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>elementDescription: String<span style=
=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A human-readable description of the element being
+-          referenced. This data is omitted if there is no referenced
+-          element.
+-        </p>
+-      </dd><dt class=3D"field"><b>elementKind: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>isDeprecated: bool<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the referenced element is deprecated.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameter: String<span style=3D"color:#=
999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>propagatedType: String<span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>staticType: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the static type of the expression. This data
+-          is omitted if the location does not correspond to an
+-          expression.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Impleme=
ntedClass">ImplementedClass: object</a></dt><dd>
+-    <p>
+-      A description of a class that is implemented or extended.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the name of the implemented class.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the name of the implemented class.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Impleme=
ntedMember">ImplementedMember: object</a></dt><dd>
+-    <p>
+-      A description of a class member that is implemented or overridden.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the name of the implemented member.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the name of the implemented member.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Importe=
dElements">ImportedElements: object</a></dt><dd>
+-    <p>
+-      A description of the elements that are referenced in a region of a =
file
+-      that come from a single imported library.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>path: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The absolute and normalized path of the file containing the lib=
rary.
+-        </p>
+-      </dd><dt class=3D"field"><b>prefix: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The prefix that was used when importing the library into the or=
iginal
+-          source.
+-        </p>
+-      </dd><dt class=3D"field"><b>elements: List&lt;String&gt;</b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The names of the elements imported from the library.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_KytheEn=
try">KytheEntry: object</a></dt><dd>
+-    <p>
+-      This object matches the format and documentation of the Entry object
+-      documented in the
+-      <a href=3D"https://kythe.io/docs/kythe-storage.html#_entry">Kythe S=
torage
+-        Model</a>.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>source: <a href=3D"#type_KytheVName">KytheVN=
ame</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The ticket of the source node.
+-        </p>
+-      </dd><dt class=3D"field"><b>kind: String<span style=3D"color:#99999=
9"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An edge label. The schema defines which labels are meaningful.
+-        </p>
+-      </dd><dt class=3D"field"><b>target: <a href=3D"#type_KytheVName">Ky=
theVName</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The ticket of the target node.
+-        </p>
+-      </dd><dt class=3D"field"><b>fact: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A fact label. The schema defines which fact labels are meaningf=
ul.
+-        </p>
+-      </dd><dt class=3D"field"><b>value: List&lt;int&gt;<span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The <tt>String</tt> value of the fact.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_KytheVN=
ame">KytheVName: object</a></dt><dd>
+-    <p>
+-      This object matches the format and documentation of the Vector-Name=
 object
+-      documented in the
+-      <a href=3D"https://kythe.io/docs/kythe-storage.html#_a_id_termvname=
_a_vector_name_strong_vname_strong">Kythe
+-        Storage Model</a>.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>signature: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An opaque signature generated by the analyzer.
+-        </p>
+-      </dd><dt class=3D"field"><b>corpus: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The corpus of source code this <tt>KytheVName</tt> belongs to.
+-          Loosely, a corpus is a collection of related files, such as the
+-          contents of a given source repository.
+-        </p>
+-      </dd><dt class=3D"field"><b>root: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A corpus-specific root label, typically a directory path or pro=
ject
+-          identifier, denoting a distinct subset of the corpus. This may =
also be
+-          used to designate virtual collections like generated files.
+-        </p>
+-      </dd><dt class=3D"field"><b>path: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A path-structured label describing the =E2=80=9Clocation=E2=80=
=9D of the named object
+-          relative to the corpus and the root.
+-        </p>
+-      </dd><dt class=3D"field"><b>language: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The language this name belongs to.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_LinkedE=
ditGroup">LinkedEditGroup: object</a></dt><dd>
+-    <p>
+-      A collection of positions that should be linked (edited simultaneou=
sly)
+-      for the purposes of updating code after a source change. For exampl=
e, if a
+-      set of edits introduced a new variable name, the group would contai=
n 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 occurrence=
s of
+-      the name could be edited simultaneously.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>positions: List&lt;<a href=3D"#type_Position=
">Position</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The positions of the regions that should be edited simultaneous=
ly.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the regions that should be edited simultaneously.
+-        </p>
+-      </dd><dt class=3D"field"><b>suggestions: List&lt;<a href=3D"#type_L=
inkedEditSuggestion">LinkedEditSuggestion</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Pre-computed suggestions for what every region might want to be
+-          changed to.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_LinkedE=
ditSuggestion">LinkedEditSuggestion: object</a></dt><dd>
+-    <p>
+-      A suggestion of a value that could be used to replace all of the li=
nked
+-      edit regions in a <a href=3D"#type_LinkedEditGroup">LinkedEditGroup=
</a>.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>value: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The value that could be used to replace all of the linked edit
+-          regions.
+-        </p>
+-      </dd><dt class=3D"field"><b>kind: <a href=3D"#type_LinkedEditSugges=
tionKind">LinkedEditSuggestionKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of value being proposed.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_LinkedE=
ditSuggestionKind">LinkedEditSuggestionKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kind of values that can be suggested for a li=
nked
+-      edit.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">METHOD</dt><dt class=3D"value">PARAMETER</dt><d=
t class=3D"value">TYPE</dt><dt class=3D"value">VARIABLE</dt></dl></dd><dt c=
lass=3D"typeDefinition"><a name=3D"type_Location">Location: object</a></dt>=
<dd>
+-    <p>
+-      A location (character range) within a file.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the range.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the range.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the range.
+-        </p>
+-      </dd><dt class=3D"field"><b>startLine: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The one-based index of the line containing the first character =
of the
+-          range.
+-        </p>
+-      </dd><dt class=3D"field"><b>startColumn: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The one-based index of the column containing the first characte=
r of
+-          the range.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Navigat=
ionRegion">NavigationRegion: object</a></dt><dd>
+-    <p>
+-      A description of a region from which the user can navigate to the
+-      declaration of an element.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the region from which the user can navigate.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the region from which the user can navigate.
+-        </p>
+-      </dd><dt class=3D"field"><b>targets: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The indexes of the targets (in the enclosing navigation respons=
e) to
+-          which the given region is bound. By opening the target, clients=
 can
+-          implement one form of navigation. This list cannot be empty.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Navigat=
ionTarget">NavigationTarget: object</a></dt><dd>
+-    <p>
+-      A description of a target to which the user can navigate.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>kind: <a href=3D"#type_ElementKind">ElementK=
ind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of the element.
+-        </p>
+-      </dd><dt class=3D"field"><b>fileIndex: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The index of the file (in the enclosing navigation response) to
+-          navigate to.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the region to which the user can navigate.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the region to which the user can navigate.
+-        </p>
+-      </dd><dt class=3D"field"><b>startLine: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The one-based index of the line containing the first character =
of the
+-          region.
+-        </p>
+-      </dd><dt class=3D"field"><b>startColumn: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The one-based index of the column containing the first characte=
r of
+-          the region.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Occurre=
nces">Occurrences: object</a></dt><dd>
+-    <p>
+-      A description of the references to a single element within a single=
 file.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>element: <a href=3D"#type_Element">Element</=
a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The element that was referenced.
+-        </p>
+-      </dd><dt class=3D"field"><b>offsets: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offsets of the name of the referenced element within the fi=
le.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the name of the referenced element.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Outline=
">Outline: object</a></dt><dd>
+-    <p>
+-      An node in the outline structure of a file.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>element: <a href=3D"#type_Element">Element</=
a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A description of the element represented by this node.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the first character of the element. This is diffe=
rent
+-          than the offset in the Element, which is the offset of the name=
 of the
+-          element. It can be used, for example, to map locations in the f=
ile
+-          back to an outline.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the element.
+-        </p>
+-      </dd><dt class=3D"field"><b>children: List&lt;<a href=3D"#type_Outl=
ine">Outline</a>&gt;<span style=3D"color:#999999"> (optional)</span></b></d=
t><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The children of the node. The field will be omitted if the node=
 has no
+-          children.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Overrid=
denMember">OverriddenMember: object</a></dt><dd>
+-    <p>
+-      A description of a member that is being overridden.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>element: <a href=3D"#type_Element">Element</=
a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The element that is being overridden.
+-        </p>
+-      </dd><dt class=3D"field"><b>className: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the class in which the member is defined.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Overrid=
e">Override: object</a></dt><dd>
+-    <p>
+-      A description of a member that overrides an inherited member.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the name of the overriding member.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the name of the overriding member.
+-        </p>
+-      </dd><dt class=3D"field"><b>superclassMember: <a href=3D"#type_Over=
riddenMember">OverriddenMember</a><span style=3D"color:#999999"> (optional)=
</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>interfaceMembers: List&lt;<a href=3D"#t=
ype_OverriddenMember">OverriddenMember</a>&gt;<span style=3D"color:#999999"=
> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Positio=
n">Position: object</a></dt><dd>
+-    <p>
+-      A position within a file.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the position.
+-        </p>
+-      </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the position.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Postfix=
TemplateDescriptor">PostfixTemplateDescriptor: object</a></dt><dd>
+-    <p>
+-      The description of a postfix completion template.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The template name, shown in the UI.
+-        </p>
+-      </dd><dt class=3D"field"><b>key: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The unique template key, not shown in the UI.
+-        </p>
+-      </dd><dt class=3D"field"><b>example: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A short example of the transformation performed when the templa=
te is
+-          applied.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_PubStat=
us">PubStatus: object</a></dt><dd>
+-    <p>
+-      An indication of the current state of pub execution.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>isListingPackageDirs: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the server is currently running pub to produce a list of
+-          package directories.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Refacto=
ringFeedback">RefactoringFeedback: object</a></dt><dd>
+-    <p>
+-      An abstract superclass of all refactoring feedbacks.
+-    </p>
+-=20=20=20=20
+-  <dl></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RefactoringK=
ind">RefactoringKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of refactorings that can be created.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">CONVERT_GETTER_TO_METHOD</dt><dt class=3D"value=
">CONVERT_METHOD_TO_GETTER</dt><dt class=3D"value">EXTRACT_LOCAL_VARIABLE</=
dt><dt class=3D"value">EXTRACT_METHOD</dt><dt class=3D"value">INLINE_LOCAL_=
VARIABLE</dt><dt class=3D"value">INLINE_METHOD</dt><dt class=3D"value">MOVE=
_FILE</dt><dt class=3D"value">RENAME</dt><dt class=3D"value">SORT_MEMBERS</=
dt></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RefactoringMethod=
Parameter">RefactoringMethodParameter: object</a></dt><dd>
+-=20=20=20=20
+-    <p>
+-      A description of a parameter in a method refactoring.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>id: String<span style=3D"color:#999999"> (op=
tional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The unique identifier of the parameter. Clients may omit this f=
ield
+-          for the parameters they want to add.
+-        </p>
+-      </dd><dt class=3D"field"><b>kind: <a href=3D"#type_RefactoringMetho=
dParameterKind">RefactoringMethodParameterKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of the parameter.
+-        </p>
+-      </dd><dt class=3D"field"><b>type: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The type that should be given to the parameter, or the return t=
ype of
+-          the parameter's function type.
+-        </p>
+-      </dd><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name that should be given to the parameter.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameters: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The parameter list of the parameter's function type. If the par=
ameter
+-          is not of a function type, this field will not be defined. If t=
he
+-          function type has zero parameters, this field will have a value=
 of
+-          '()'.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Refacto=
ringMethodParameterKind">RefactoringMethodParameterKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of parameters.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">REQUIRED</dt><dt class=3D"value">POSITIONAL</dt=
><dt class=3D"value">NAMED</dt></dl></dd><dt class=3D"typeDefinition"><a na=
me=3D"type_RefactoringOptions">RefactoringOptions: object</a></dt><dd>
+-    <p>
+-      An abstract superclass of all refactoring options.
+-    </p>
+-=20=20=20=20
+-  <dl></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RefactoringP=
roblem">RefactoringProblem: object</a></dt><dd>
+-    <p>
+-      A description of a problem related to a refactoring.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>severity: <a href=3D"#type_RefactoringProble=
mSeverity">RefactoringProblemSeverity</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The severity of the problem being represented.
+-        </p>
+-      </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A human-readable description of the problem being represented.
+-        </p>
+-      </dd><dt class=3D"field"><b>location: <a href=3D"#type_Location">Lo=
cation</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The location of the problem being represented. This field is om=
itted
+-          unless there is a specific location associated with the problem=
 (such
+-          as a location where an element being renamed will be shadowed).
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Refacto=
ringProblemSeverity">RefactoringProblemSeverity: String</a></dt><dd>
+-    <p>
+-      An enumeration of the severities of problems that can be returned b=
y the
+-      refactoring requests.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">INFO</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A minor code problem. No example, because it is not used yet.
+-        </p>
+-      </dd><dt class=3D"value">WARNING</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A minor code problem. For example names of local variables shou=
ld be
+-          camel case and start with a lower case letter. Staring the name=
 of a
+-          variable with an upper case is OK from the language point of vi=
ew, but
+-          it is nice to warn the user.
+-        </p>
+-      </dd><dt class=3D"value">ERROR</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The refactoring technically can be performed, but there is a lo=
gical
+-          problem. For example the name of a local variable being extract=
ed
+-          conflicts with another name in the scope, or duplicate paramete=
r names
+-          in the method being extracted, or a conflict between a paramete=
r name
+-          and a local variable, etc. In some cases the location of the pr=
oblem
+-          is also provided, so the IDE can show user the location and the
+-          problem, and let the user decide whether they want to perform t=
he
+-          refactoring. For example the name conflict might be expected, a=
nd the
+-          user wants to fix it afterwards.
+-        </p>
+-      </dd><dt class=3D"value">FATAL</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A fatal error, which prevents performing the refactoring. For e=
xample
+-          the name of a local variable being extracted is not a valid
+-          identifier, or selection is not a valid expression.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RemoveC=
ontentOverlay">RemoveContentOverlay: object</a></dt><dd>
+-    <p>
+-      A directive to remove an existing file content overlay. After proce=
ssing
+-      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 c=
ontent
+-      overlay, it has no effect.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>type =3D "remove"</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Request=
Error">RequestError: object</a></dt><dd>
+-    <p>
+-      An indication of a problem with the execution of the server,
+-      typically in response to a request.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>code: <a href=3D"#type_RequestErrorCode">Req=
uestErrorCode</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A code that uniquely identifies the error that occurred.
+-        </p>
+-      </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A short description of the error.
+-        </p>
+-      </dd><dt class=3D"field"><b>stackTrace: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The stack trace associated with processing the request,
+-          used for debugging the server.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Request=
ErrorCode">RequestErrorCode: String</a></dt><dd>
+-    <p>
+-      An enumeration of the types of errors that can occur in the
+-      execution of the server.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">CONTENT_MODIFIED</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "analysis.getErrors" or "analysis.getNavigation" request cou=
ld
+-          not be satisfied because the content of the file changed before
+-          the requested results could be computed.
+-        </p>
+-      </dd><dt class=3D"value">DEBUG_PORT_COULD_NOT_BE_OPENED</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The server was unable to open a port for the diagnostic server.
+-        </p>
+-      </dd><dt class=3D"value">FILE_NOT_ANALYZED</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A request specified a FilePath which does not match a file in
+-          an analysis root, or the requested operation is not available
+-          for the file.
+-        </p>
+-      </dd><dt class=3D"value">FORMAT_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "edit.format" request specified a FilePath
+-          which does not match a Dart file in an analysis root.
+-        </p>
+-      </dd><dt class=3D"value">FORMAT_WITH_ERRORS</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "edit.format" request specified a file that contains syntax
+-          errors.
+-        </p>
+-      </dd><dt class=3D"value">GET_ERRORS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "analysis.getErrors" request specified a FilePath
+-          which does not match a file currently subject to
+-          analysis.
+-        </p>
+-      </dd><dt class=3D"value">GET_IMPORTED_ELEMENTS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "analysis.getImportedElements" request specified a FilePath =
that
+-          does not match a file currently subject to analysis.
+-        </p>
+-      </dd><dt class=3D"value">GET_KYTHE_ENTRIES_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "analysis.getKytheEntries" request specified a FilePath that=
 does
+-          not match a file that is currently subject to analysis.
+-        </p>
+-      </dd><dt class=3D"value">GET_NAVIGATION_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "analysis.getNavigation" request specified a FilePath
+-          which does not match a file currently subject to
+-          analysis.
+-        </p>
+-      </dd><dt class=3D"value">GET_REACHABLE_SOURCES_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "analysis.getReachableSources" request specified a FilePath
+-          which does not match a file currently subject to
+-          analysis.
+-        </p>
+-      </dd><dt class=3D"value">IMPORT_ELEMENTS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "edit.importElements" request specified a FilePath that does=
 not
+-          match a file currently subject to analysis.
+-        </p>
+-      </dd><dt class=3D"value">INVALID_ANALYSIS_ROOT</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A path passed as an argument to a request (such as
+-          analysis.reanalyze) is required to be an analysis root, but isn=
't.
+-        </p>
+-      </dd><dt class=3D"value">INVALID_EXECUTION_CONTEXT</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The context root used to create an execution context does not
+-          exist.
+-        </p>
+-      </dd><dt class=3D"value">INVALID_FILE_PATH_FORMAT</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The format of the given file path is invalid, e.g. is not
+-          absolute and normalized.
+-        </p>
+-      </dd><dt class=3D"value">INVALID_OVERLAY_CHANGE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"value">INVALID_PARAMETER</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          One of the method parameters was invalid.
+-        </p>
+-      </dd><dt class=3D"value">INVALID_REQUEST</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A malformed request was received.
+-        </p>
+-      </dd><dt class=3D"value">ORGANIZE_DIRECTIVES_ERROR</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "edit.organizeDirectives" request specified a Dart file that
+-          cannot be analyzed. The reason is described in the message.
+-        </p>
+-      </dd><dt class=3D"value">REFACTORING_REQUEST_CANCELLED</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Another refactoring request was received during processing of
+-          this one.
+-        </p>
+-      </dd><dt class=3D"value">SERVER_ALREADY_STARTED</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"value">SERVER_ERROR</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An internal error occurred in the analysis server.
+-          Also see the server.error notification.
+-        </p>
+-      </dd><dt class=3D"value">SORT_MEMBERS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "edit.sortMembers" request specified a FilePath
+-          which does not match a Dart file in an analysis root.
+-        </p>
+-      </dd><dt class=3D"value">SORT_MEMBERS_PARSE_ERRORS</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An "edit.sortMembers" request specified a Dart file that has
+-          scan or parse errors.
+-        </p>
+-      </dd><dt class=3D"value">UNANALYZED_PRIORITY_FILES</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-=20=20=20=20=20=20=20=20
+-      </dd><dt class=3D"value">UNKNOWN_REQUEST</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A request was received which the analysis server does
+-          not recognize, or cannot handle in its current
+-          configuration.
+-        </p>
+-      </dd><dt class=3D"value">UNKNOWN_SOURCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The analysis server was requested to perform an action
+-          on a source that does not exist.
+-        </p>
+-      </dd><dt class=3D"value">UNSUPPORTED_FEATURE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-=20=20=20=20=20=20=20=20
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SearchI=
d">SearchId: String</a></dt><dd>
+-=20=20=20=20
+-    <p>
+-      An identifier used to associate search results with a search
+-      request.
+-    </p>
+-  </dd><dt class=3D"typeDefinition"><a name=3D"type_SearchResult">SearchR=
esult: object</a></dt><dd>
+-    <p>
+-      A single result from a search request.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>location: <a href=3D"#type_Location">Locatio=
n</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The location of the code that matched the search criteria.
+-        </p>
+-      </dd><dt class=3D"field"><b>kind: <a href=3D"#type_SearchResultKind=
">SearchResultKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The kind of element that was found or the kind of
+-          reference that was found.
+-        </p>
+-      </dd><dt class=3D"field"><b>isPotential: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>path: List&lt;<a href=3D"#type_Element"=
>Element</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The elements that contain the result, starting with the
+-          most immediately enclosing ancestor and ending with the
+-          library.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SearchR=
esultKind">SearchResultKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of search results returned by the
+-      search domain.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The declaration of an element.
+-        </p>
+-      </dd><dt class=3D"value">INVOCATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The invocation of a function or method.
+-        </p>
+-      </dd><dt class=3D"value">READ</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A reference to a field, parameter or variable where it is being=
 read.
+-        </p>
+-      </dd><dt class=3D"value">READ_WRITE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A reference to a field, parameter or variable where it is being=
 read
+-          and written.
+-        </p>
+-      </dd><dt class=3D"value">REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A reference to an element.
+-        </p>
+-      </dd><dt class=3D"value">UNKNOWN</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          Some other kind of search result.
+-        </p>
+-      </dd><dt class=3D"value">WRITE</dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A reference to a field, parameter or variable where it is being
+-          written.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_ServerS=
ervice">ServerService: String</a></dt><dd>
+-    <p>
+-      An enumeration of the services provided by the server domain.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"value">STATUS</dt></dl></dd><dt class=3D"typeDefinitio=
n"><a name=3D"type_SourceChange">SourceChange: object</a></dt><dd>
+-    <p>
+-      A description of a set of edits that implement a single conceptual =
change.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A human-readable description of the change to be applied.
+-        </p>
+-      </dd><dt class=3D"field"><b>edits: List&lt;<a href=3D"#type_SourceF=
ileEdit">SourceFileEdit</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the edits used to effect the change, grouped by file.
+-        </p>
+-      </dd><dt class=3D"field"><b>linkedEditGroups: List&lt;<a href=3D"#t=
ype_LinkedEditGroup">LinkedEditGroup</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the linked editing groups used to customize the chang=
es that
+-          were made.
+-        </p>
+-      </dd><dt class=3D"field"><b>selection: <a href=3D"#type_Position">P=
osition</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The position that should be selected after the edits have been
+-          applied.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SourceE=
dit">SourceEdit: object</a></dt><dd>
+-    <p>
+-      A description of a single change to a single file.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset of the region to be modified.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the region to be modified.
+-        </p>
+-      </dd><dt class=3D"field"><b>replacement: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The code that is to replace the specified region in the origina=
l code.
+-        </p>
+-      </dd><dt class=3D"field"><b>id: String<span style=3D"color:#999999"=
> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          An identifier that uniquely identifies this source edit from ot=
her
+-          edits in the same response. This field is omitted unless a cont=
aining
+-          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 re=
sponse
+-          that do not need to be referenced will not have an id.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SourceF=
ileEdit">SourceFileEdit: object</a></dt><dd>
+-    <p>
+-      A description of a set of changes to a single file.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The file containing the code to be modified.
+-        </p>
+-      </dd><dt class=3D"field"><b><span class=3D"deprecated">fileStamp</s=
pan>: long</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The modification stamp of the file at the moment when the chang=
e 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 th=
is
+-          field to make sure that the file was not changed since then, so=
 it is
+-          safe to apply the change.
+-        </p>
+-      </dd><dt class=3D"field"><b>edits: List&lt;<a href=3D"#type_SourceE=
dit">SourceEdit</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          A list of the edits used to effect the change.
+-        </p>
+-      </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_TypeHie=
rarchyItem">TypeHierarchyItem: object</a></dt><dd>
+-    <p>
+-      A representation of a class in a type hierarchy.
+-    </p>
+-=20=20=20=20
+-  <dl><dt class=3D"field"><b>classElement: <a href=3D"#type_Element">Elem=
ent</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The class element represented by this item.
+-        </p>
+-      </dd><dt class=3D"field"><b>displayName: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>memberElement: <a href=3D"#type_Element=
">Element</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>superclass: int<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>interfaces: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>mixins: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>subclasses: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd></dl>
+-
+-  <h2><a name=3D"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>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<dl><dt class=3D"refactoring">CONVERT_GETTER_TO_METHOD</dt><dd>
+-    <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>
+-  <h4>Feedback:</h4><p>none</p><h4>Options:</h4><p>none</p></dd><dt class=
=3D"refactoring">CONVERT_METHOD_TO_GETTER</dt><dd>
+-    <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>
+-  <h4>Feedback:</h4><p>none</p><h4>Options:</h4><p>none</p></dd><dt class=
=3D"refactoring">EXTRACT_LOCAL_VARIABLE</dt><dd>
+-    <p>
+-      Create a local variable initialized by the expression that covers
+-      the specified selection.
+-    </p>
+-    <p>
+-      It is an error if the selection range is not covered by a
+-      complete expression.
+-    </p>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>Feedback:</h4><dl><dt class=3D"field"><b>coveringExpressionOffsets:=
 List&lt;int&gt;<span style=3D"color:#999999"> (optional)</span></b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offsets of the expressions that cover the specified
+-          selection, from the down most to the up most.
+-        </p>
+-      </dd><dt class=3D"field"><b>coveringExpressionLengths: List&lt;int&=
gt;<span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The lengths of the expressions that cover the specified
+-          selection, from the down most to the up most.
+-        </p>
+-      </dd><dt class=3D"field"><b>names: List&lt;String&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The proposed names for the local variable.
+-        </p>
+-      </dd><dt class=3D"field"><b>offsets: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offsets of the expressions that would be replaced by
+-          a reference to the variable.
+-        </p>
+-      </dd><dt class=3D"field"><b>lengths: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The lengths of the expressions that would be replaced by
+-          a reference to the variable. The lengths correspond to
+-          the offsets. In other words, for a given expression, if
+-          the offset of that expression is <tt>offsets[i]</tt>, then
+-          the length of that expression is <tt>lengths[i]</tt>.
+-        </p>
+-      </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>name: String<=
/b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name that the local variable should be given.
+-        </p>
+-      </dd><dt class=3D"field"><b>extractAll: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"refactoring">EXTRACT_METHOD</dt><dd>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>Feedback:</h4><dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset to the beginning of the expression or
+-          statements that will be extracted.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the expression or statements that will be
+-          extracted.
+-        </p>
+-      </dd><dt class=3D"field"><b>returnType: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The proposed return type for the method.
+-          If the returned element does not have a declared return type,
+-          this field will contain an empty string.
+-        </p>
+-      </dd><dt class=3D"field"><b>names: List&lt;String&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The proposed names for the method.
+-        </p>
+-      </dd><dt class=3D"field"><b>canCreateGetter: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if a getter could be created rather than a method.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameters: List&lt;<a href=3D"#type_Re=
factoringMethodParameter">RefactoringMethodParameter</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The proposed parameters for the method.
+-        </p>
+-      </dd><dt class=3D"field"><b>offsets: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offsets of the expressions or statements that would
+-          be replaced by an invocation of the method.
+-        </p>
+-      </dd><dt class=3D"field"><b>lengths: List&lt;int&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The lengths of the expressions or statements that would
+-          be replaced by an invocation of the method. The lengths
+-          correspond to the offsets. In other words, for a given
+-          expression (or block of statements), if the offset of
+-          that expression is <tt>offsets[i]</tt>, then the length
+-          of that expression is <tt>lengths[i]</tt>.
+-        </p>
+-      </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>returnType: S=
tring</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The return type that should be defined for the method.
+-        </p>
+-      </dd><dt class=3D"field"><b>createGetter: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name that the method should be given.
+-        </p>
+-      </dd><dt class=3D"field"><b>parameters: List&lt;<a href=3D"#type_Re=
factoringMethodParameter">RefactoringMethodParameter</a>&gt;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd><dt class=3D"field"><b>extractAll: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"refactoring">INLINE_LOCAL_VARIABLE</dt>=
<dd>
+-    <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>
+-=20=20=20=20
+-  <h4>Feedback:</h4><dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the variable being inlined.
+-        </p>
+-      </dd><dt class=3D"field"><b>occurrences: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The number of times the variable occurs.
+-        </p>
+-      </dd></dl><h4>Options:</h4><p>none</p></dd><dt class=3D"refactoring=
">INLINE_METHOD</dt><dd>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>Feedback:</h4><dl><dt class=3D"field"><b>className: String<span sty=
le=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the class enclosing the method being inlined.
+-          If not a class member is being inlined, this field will be abse=
nt.
+-        </p>
+-      </dd><dt class=3D"field"><b>methodName: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name of the method (or function) being inlined.
+-        </p>
+-      </dd><dt class=3D"field"><b>isDeclaration: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the declaration of the method is selected.
+-          So all references should be inlined.
+-        </p>
+-      </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>deleteSource:=
 bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          True if the method being inlined should be removed.
+-          It is an error if this field is true and inlineAll is false.
+-        </p>
+-      </dd><dt class=3D"field"><b>inlineAll: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <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>
+-      </dd></dl></dd><dt class=3D"refactoring">MOVE_FILE</dt><dd>
+-    <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>
+-=20=20=20=20
+-  <h4>Feedback:</h4><p>none</p><h4>Options:</h4><dl><dt class=3D"field"><=
b>newFile: <a href=3D"#type_FilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The new file path to which the given file is being moved.
+-        </p>
+-      </dd></dl></dd><dt class=3D"refactoring">RENAME</dt><dd>
+-    <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>
+-=20=20=20=20
+-=20=20=20=20
+-  <h4>Feedback:</h4><dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The offset to the beginning of the name selected to be
+-          renamed.
+-        </p>
+-      </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The length of the name selected to be renamed.
+-        </p>
+-      </dd><dt class=3D"field"><b>elementKindName: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The human-readable description of the kind of element being
+-          renamed (such as "class" or "function type
+-          alias").
+-        </p>
+-      </dd><dt class=3D"field"><b>oldName: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The old name of the element before the refactoring.
+-        </p>
+-      </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>newName: Stri=
ng</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+-        <p>
+-          The name that the element should have after the
+-          refactoring.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2>Errors</h2>
+-<p>
+-  This section contains a list of all of the errors that are
+-  produced by the server and the data that is returned with each.
+-</p>
+-<p>
+-  TODO: TBD
+-</p>
+-<h2 class=3D"domain"><a name=3D"index">Index</a></h2>
+-<h3>Domains</h3><h4>server (<a href=3D"#domain_server">=E2=86=91</a>)</h4=
><div class=3D"subindex"><h5>Requests</h5><ul><li><a href=3D"#request_serve=
r.getVersion">getVersion</a></li><li><a href=3D"#request_server.shutdown">s=
hutdown</a></li><li><a href=3D"#request_server.setSubscriptions">setSubscri=
ptions</a></li></ul><h5>Notifications</h5><div class=3D"subindex"><ul><li><=
a href=3D"#notification_server.connected">connected</a></li><li><a href=3D"=
#notification_server.error">error</a></li><li><a href=3D"#notification_serv=
er.status">status</a></li></ul></div></div><h4>analysis (<a href=3D"#domain=
_analysis">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Requests</h5><ul>=
<li><a href=3D"#request_analysis.getErrors">getErrors</a></li><li><a href=
=3D"#request_analysis.getHover">getHover</a></li><li><a href=3D"#request_an=
alysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href=
=3D"#request_analysis.getNavigation">getNavigation</a></li><li><a href=3D"#=
request_analysis.getReachableSources">getReachableSources</a></li><li><a hr=
ef=3D"#request_analysis.reanalyze">reanalyze</a></li><li><a href=3D"#reques=
t_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href=3D"#reque=
st_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a=
 href=3D"#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><=
a href=3D"#request_analysis.setSubscriptions">setSubscriptions</a></li><li>=
<a href=3D"#request_analysis.updateContent">updateContent</a></li><li><a hr=
ef=3D"#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notif=
ications</h5><div class=3D"subindex"><ul><li><a href=3D"#notification_analy=
sis.analyzedFiles">analyzedFiles</a></li><li><a href=3D"#notification_analy=
sis.closingLabels">closingLabels</a></li><li><a href=3D"#notification_analy=
sis.errors">errors</a></li><li><a href=3D"#notification_analysis.flushResul=
ts">flushResults</a></li><li><a href=3D"#notification_analysis.folding">fol=
ding</a></li><li><a href=3D"#notification_analysis.highlights">highlights</=
a></li><li><a href=3D"#notification_analysis.implemented">implemented</a></=
li><li><a href=3D"#notification_analysis.invalidate">invalidate</a></li><li=
><a href=3D"#notification_analysis.navigation">navigation</a></li><li><a hr=
ef=3D"#notification_analysis.occurrences">occurrences</a></li><li><a href=
=3D"#notification_analysis.outline">outline</a></li><li><a href=3D"#notific=
ation_analysis.overrides">overrides</a></li></ul></div></div><h4>completion=
 (<a href=3D"#domain_completion">=E2=86=91</a>)</h4><div class=3D"subindex"=
><h5>Requests</h5><ul><li><a href=3D"#request_completion.getSuggestions">ge=
tSuggestions</a></li></ul><h5>Notifications</h5><div class=3D"subindex"><ul=
><li><a href=3D"#notification_completion.results">results</a></li></ul></di=
v></div><h4>search (<a href=3D"#domain_search">=E2=86=91</a>)</h4><div clas=
s=3D"subindex"><h5>Requests</h5><ul><li><a href=3D"#request_search.findElem=
entReferences">findElementReferences</a></li><li><a href=3D"#request_search=
.findMemberDeclarations">findMemberDeclarations</a></li><li><a href=3D"#req=
uest_search.findMemberReferences">findMemberReferences</a></li><li><a href=
=3D"#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a><=
/li><li><a href=3D"#request_search.getTypeHierarchy">getTypeHierarchy</a></=
li></ul><h5>Notifications</h5><div class=3D"subindex"><ul><li><a href=3D"#n=
otification_search.results">results</a></li></ul></div></div><h4>edit (<a h=
ref=3D"#domain_edit">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Request=
s</h5><ul><li><a href=3D"#request_edit.format">format</a></li><li><a href=
=3D"#request_edit.getAssists">getAssists</a></li><li><a href=3D"#request_ed=
it.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href=
=3D"#request_edit.getFixes">getFixes</a></li><li><a href=3D"#request_edit.g=
etRefactoring">getRefactoring</a></li><li><a href=3D"#request_edit.sortMemb=
ers">sortMembers</a></li><li><a href=3D"#request_edit.organizeDirectives">o=
rganizeDirectives</a></li></ul></div><h4>execution (<a href=3D"#domain_exec=
ution">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Requests</h5><ul><li>=
<a href=3D"#request_execution.createContext">createContext</a></li><li><a h=
ref=3D"#request_execution.deleteContext">deleteContext</a></li><li><a href=
=3D"#request_execution.mapUri">mapUri</a></li><li><a href=3D"#request_execu=
tion.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5>=
<div class=3D"subindex"><ul><li><a href=3D"#notification_execution.launchDa=
ta">launchData</a></li></ul></div></div><h4>diagnostic (<a href=3D"#domain_=
diagnostic">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Requests</h5><ul=
><li><a href=3D"#request_diagnostic.getDiagnostics">getDiagnostics</a></li>=
<li><a href=3D"#request_diagnostic.getServerPort">getServerPort</a></li></u=
l></div><h3>Types (<a href=3D"#types">=E2=86=91</a>)</h3><div class=3D"subi=
ndex"><ul><li><a href=3D"#type_AddContentOverlay">AddContentOverlay</a></li=
><li><a href=3D"#type_AnalysisError">AnalysisError</a></li><li><a href=3D"#=
type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href=3D"#type_An=
alysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href=3D"#type_Ana=
lysisErrorType">AnalysisErrorType</a></li><li><a href=3D"#type_AnalysisOpti=
ons">AnalysisOptions</a></li><li><a href=3D"#type_AnalysisService">Analysis=
Service</a></li><li><a href=3D"#type_AnalysisStatus">AnalysisStatus</a></li=
><li><a href=3D"#type_ChangeContentOverlay">ChangeContentOverlay</a></li><l=
i><a href=3D"#type_ClosingLabel">ClosingLabel</a></li><li><a href=3D"#type_=
CompletionId">CompletionId</a></li><li><a href=3D"#type_CompletionSuggestio=
n">CompletionSuggestion</a></li><li><a href=3D"#type_CompletionSuggestionKi=
nd">CompletionSuggestionKind</a></li><li><a href=3D"#type_ContextData">Cont=
extData</a></li><li><a href=3D"#type_Element">Element</a></li><li><a href=
=3D"#type_ElementKind">ElementKind</a></li><li><a href=3D"#type_ExecutableF=
ile">ExecutableFile</a></li><li><a href=3D"#type_ExecutableKind">Executable=
Kind</a></li><li><a href=3D"#type_ExecutionContextId">ExecutionContextId</a=
></li><li><a href=3D"#type_ExecutionService">ExecutionService</a></li><li><=
a href=3D"#type_FileKind">FileKind</a></li><li><a href=3D"#type_FilePath">F=
ilePath</a></li><li><a href=3D"#type_FoldingKind">FoldingKind</a></li><li><=
a href=3D"#type_FoldingRegion">FoldingRegion</a></li><li><a href=3D"#type_G=
eneralAnalysisService">GeneralAnalysisService</a></li><li><a href=3D"#type_=
HighlightRegion">HighlightRegion</a></li><li><a href=3D"#type_HighlightRegi=
onType">HighlightRegionType</a></li><li><a href=3D"#type_HoverInformation">=
HoverInformation</a></li><li><a href=3D"#type_ImplementedClass">Implemented=
Class</a></li><li><a href=3D"#type_ImplementedMember">ImplementedMember</a>=
</li><li><a href=3D"#type_ImportedElements">ImportedElements</a></li><li><a=
 href=3D"#type_KytheEntry">KytheEntry</a></li><li><a href=3D"#type_KytheVNa=
me">KytheVName</a></li><li><a href=3D"#type_LinkedEditGroup">LinkedEditGrou=
p</a></li><li><a href=3D"#type_LinkedEditSuggestion">LinkedEditSuggestion</=
a></li><li><a href=3D"#type_LinkedEditSuggestionKind">LinkedEditSuggestionK=
ind</a></li><li><a href=3D"#type_Location">Location</a></li><li><a href=3D"=
#type_NavigationRegion">NavigationRegion</a></li><li><a href=3D"#type_Navig=
ationTarget">NavigationTarget</a></li><li><a href=3D"#type_Occurrences">Occ=
urrences</a></li><li><a href=3D"#type_Outline">Outline</a></li><li><a href=
=3D"#type_OverriddenMember">OverriddenMember</a></li><li><a href=3D"#type_O=
verride">Override</a></li><li><a href=3D"#type_Position">Position</a></li><=
li><a href=3D"#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a=
></li><li><a href=3D"#type_PubStatus">PubStatus</a></li><li><a href=3D"#typ=
e_RefactoringFeedback">RefactoringFeedback</a></li><li><a href=3D"#type_Ref=
actoringKind">RefactoringKind</a></li><li><a href=3D"#type_RefactoringMetho=
dParameter">RefactoringMethodParameter</a></li><li><a href=3D"#type_Refacto=
ringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href=
=3D"#type_RefactoringOptions">RefactoringOptions</a></li><li><a href=3D"#ty=
pe_RefactoringProblem">RefactoringProblem</a></li><li><a href=3D"#type_Refa=
ctoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href=3D"#=
type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href=3D"#typ=
e_RequestError">RequestError</a></li><li><a href=3D"#type_RequestErrorCode"=
>RequestErrorCode</a></li><li><a href=3D"#type_SearchId">SearchId</a></li><=
li><a href=3D"#type_SearchResult">SearchResult</a></li><li><a href=3D"#type=
_SearchResultKind">SearchResultKind</a></li><li><a href=3D"#type_ServerServ=
ice">ServerService</a></li><li><a href=3D"#type_SourceChange">SourceChange<=
/a></li><li><a href=3D"#type_SourceEdit">SourceEdit</a></li><li><a href=3D"=
#type_SourceFileEdit">SourceFileEdit</a></li><li><a href=3D"#type_TypeHiera=
rchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href=3D=
"#refactorings">=E2=86=91</a>)</h3><div class=3D"subindex"><ul><li><a href=
=3D"#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li=
><li><a href=3D"#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GE=
TTER</a></li><li><a href=3D"#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LO=
CAL_VARIABLE</a></li><li><a href=3D"#refactoring_EXTRACT_METHOD">EXTRACT_ME=
THOD</a></li><li><a href=3D"#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCA=
L_VARIABLE</a></li><li><a href=3D"#refactoring_INLINE_METHOD">INLINE_METHOD=
</a></li><li><a href=3D"#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a hr=
ef=3D"#refactoring_RENAME">RENAME</a></li></ul></div>
+-
+-
+-</body></html>
+\ No newline at end of file
+diff --git a/pkg/analysis_server/lib/plugin/analysis/occurrences/occurrenc=
es_core.dart b/pkg/analysis_server/lib/plugin/analysis/occurrences/occurren=
ces_core.dart
+deleted file mode 100644
+index 22a85fd8135..00000000000
+--- a/pkg/analysis_server/lib/plugin/analysis/occurrences/occurrences_core=
.dart
++++ /dev/null
+@@ -1,17 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'package:analyzer_plugin/protocol/protocol_common.dart' show Occur=
rences;
+-
+-/**
+- * An object used to record occurrences into.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class OccurrencesCollector {
+-  /**
+-   * Record a new element occurrences.
+-   */
+-  void addOccurrences(Occurrences occurrences);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/assist/assist_core.dart b=
/pkg/analysis_server/lib/plugin/edit/assist/assist_core.dart
+deleted file mode 100644
+index f4d1e6254e5..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/assist/assist_core.dart
++++ /dev/null
+@@ -1,90 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer/src/generated/source.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart'
+-    show SourceChange;
+-import 'package:analyzer_plugin/utilities/assist/assist.dart';
+-
+-/**
+- * A description of a single proposed assist.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Assist {
+-  /**
+-   * An empty list of assists.
+-   */
+-  static const List<Assist> EMPTY_LIST =3D const <Assist>[];
+-
+-  /**
+-   * A comparator that can be used to sort assists by their relevance. Th=
e most
+-   * relevant assists will be sorted before assists with a lower relevanc=
e.
+-   */
+-  static final Comparator<Assist> SORT_BY_RELEVANCE =3D
+-      (Assist firstAssist, Assist secondAssist) =3D>
+-          firstAssist.kind.priority - secondAssist.kind.priority;
+-
+-  /**
+-   * A description of the assist being proposed.
+-   */
+-  final AssistKind kind;
+-
+-  /**
+-   * The change to be made in order to apply the assist.
+-   */
+-  final SourceChange change;
+-
+-  /**
+-   * Initialize a newly created assist to have the given [kind] and [chan=
ge].
+-   */
+-  Assist(this.kind, this.change);
+-
+-  @override
+-  String toString() {
+-    return 'Assist(kind=3D$kind, change=3D$change)';
+-  }
+-}
+-
+-/**
+- * An object used to provide context information for [AssistContributor]s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class AssistContext {
+-  /**
+-   * The analysis driver used to access analysis results.
+-   */
+-  AnalysisDriver get analysisDriver;
+-
+-  /**
+-   * The length of the selection.
+-   */
+-  int get selectionLength;
+-
+-  /**
+-   * The start of the selection.
+-   */
+-  int get selectionOffset;
+-
+-  /**
+-   * The source to get assists in.
+-   */
+-  Source get source;
+-}
+-
+-/**
+- * An object used to produce assists for a specific location.
+- *
+- * Clients may implement this class when implementing plugins.
+- */
+-abstract class AssistContributor {
+-  /**
+-   * Completes with a list of assists for the given [context].
+-   */
+-  Future<List<Assist>> computeAssists(AssistContext context);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart b=
/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
+deleted file mode 100644
+index 44198cd69d3..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
++++ /dev/null
+@@ -1,107 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
+-import 'package:analyzer/dart/ast/ast.dart';
+-import 'package:analyzer/src/dart/analysis/ast_provider_driver.dart';
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer/src/dart/element/ast_provider.dart';
+-import 'package:analyzer/src/generated/engine.dart';
+-import 'package:analyzer/src/generated/source.dart';
+-
+-/**
+- * An object used to provide context information for [DartAssistContribut=
or]s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class DartAssistContext {
+-  /**
+-   * The analysis driver used to access analysis results.
+-   */
+-  AnalysisDriver get analysisDriver;
+-
+-  /**
+-   * The provider for parsed or resolved ASTs.
+-   */
+-  AstProvider get astProvider;
+-
+-  /**
+-   * The length of the selection.
+-   */
+-  int get selectionLength;
+-
+-  /**
+-   * The start of the selection.
+-   */
+-  int get selectionOffset;
+-
+-  /**
+-   * The source to get assists in.
+-   */
+-  Source get source;
+-
+-  /**
+-   * The [CompilationUnit] to compute assists in.
+-   */
+-  CompilationUnit get unit;
+-}
+-
+-/**
+- * An [AssistContributor] that can be used to contribute assists for Dart=
 files.
+- *
+- * Clients may extend this class when implementing plugins.
+- */
+-abstract class DartAssistContributor implements AssistContributor {
+-  @override
+-  Future<List<Assist>> computeAssists(AssistContext context) async {
+-    AnalysisDriver driver =3D context.analysisDriver;
+-    Source source =3D context.source;
+-    if (!AnalysisEngine.isDartFileName(source.fullName)) {
+-      return Assist.EMPTY_LIST;
+-    }
+-    CompilationUnit unit =3D (await driver.getResult(source.fullName)).un=
it;
+-    if (unit =3D=3D null) {
+-      return Assist.EMPTY_LIST;
+-    }
+-    DartAssistContext dartContext =3D new _DartAssistContextImpl(
+-        new AstProviderForDriver(driver), context, unit);
+-    return internalComputeAssists(dartContext);
+-  }
+-
+-  /**
+-   * Completes with a list of assists for the given [context].
+-   */
+-  Future<List<Assist>> internalComputeAssists(DartAssistContext context);
+-}
+-
+-/**
+- * The implementation of [DartAssistContext].
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class _DartAssistContextImpl implements DartAssistContext {
+-  @override
+-  final AstProvider astProvider;
+-
+-  final AssistContext _context;
+-
+-  @override
+-  final CompilationUnit unit;
+-
+-  _DartAssistContextImpl(this.astProvider, this._context, this.unit);
+-
+-  @override
+-  AnalysisDriver get analysisDriver =3D> _context.analysisDriver;
+-
+-  @override
+-  int get selectionLength =3D> _context.selectionLength;
+-
+-  @override
+-  int get selectionOffset =3D> _context.selectionOffset;
+-
+-  @override
+-  Source get source =3D> _context.source;
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart b/pkg/a=
nalysis_server/lib/plugin/edit/fix/fix_core.dart
+deleted file mode 100644
+index 91a813f8214..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart
++++ /dev/null
+@@ -1,88 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analyzer/error/error.dart';
+-import 'package:analyzer/file_system/file_system.dart';
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart'
+-    show SourceChange;
+-import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+-
+-/**
+- * A description of a single proposed fix for some problem.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Fix {
+-  /**
+-   * An empty list of fixes.
+-   */
+-  static const List<Fix> EMPTY_LIST =3D const <Fix>[];
+-
+-  /**
+-   * A comparator that can be used to sort fixes by their relevance. The =
most
+-   * relevant fixes will be sorted before fixes with a lower relevance.
+-   */
+-  static final Comparator<Fix> SORT_BY_RELEVANCE =3D
+-      (Fix firstFix, Fix secondFix) =3D>
+-          firstFix.kind.priority - secondFix.kind.priority;
+-
+-  /**
+-   * A description of the fix being proposed.
+-   */
+-  final FixKind kind;
+-
+-  /**
+-   * The change to be made in order to apply the fix.
+-   */
+-  final SourceChange change;
+-
+-  /**
+-   * Initialize a newly created fix to have the given [kind] and [change].
+-   */
+-  Fix(this.kind, this.change);
+-
+-  @override
+-  String toString() {
+-    return 'Fix(kind=3D$kind, change=3D$change)';
+-  }
+-}
+-
+-/**
+- * An object used to provide context information for [FixContributor]s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class FixContext {
+-  /**
+-   * The analysis driver used to access analysis results.
+-   */
+-  AnalysisDriver get analysisDriver;
+-
+-  /**
+-   * The error to fix, should be reported by the given [analysisDriver].
+-   */
+-  AnalysisError get error;
+-
+-  /**
+-   * The [ResourceProvider] to access files and folders.
+-   */
+-  ResourceProvider get resourceProvider;
+-}
+-
+-/**
+- * An object used to produce fixes for a specific error. Fix contributors=
 are
+- * long-lived objects and must not retain any state between invocations of
+- * [computeFixes].
+- *
+- * Clients may implement this class when implementing plugins.
+- */
+-abstract class FixContributor {
+-  /**
+-   * Return a list of fixes for the given [context].
+-   */
+-  Future<List<Fix>> computeFixes(FixContext context);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart b/pkg/a=
nalysis_server/lib/plugin/edit/fix/fix_dart.dart
+deleted file mode 100644
+index e5b0f1f5625..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart
++++ /dev/null
+@@ -1,73 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
+-import 'package:analysis_server/src/services/correction/fix_internal.dart'
+-    show DartFixContextImpl;
+-import 'package:analyzer/dart/ast/ast.dart';
+-import 'package:analyzer/src/dart/analysis/ast_provider_driver.dart';
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer/src/dart/analysis/top_level_declaration.dart';
+-import 'package:analyzer/src/dart/element/ast_provider.dart';
+-import 'package:analyzer/src/generated/engine.dart';
+-import 'package:analyzer/src/generated/source.dart';
+-
+-/**
+- * Complete with top-level declarations with the given [name].
+- */
+-typedef Future<List<TopLevelDeclarationInSource>> GetTopLevelDeclarations(
+-    String name);
+-
+-/**
+- * An object used to provide context information for [DartFixContributor]=
s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class DartFixContext implements FixContext {
+-  /**
+-   * The provider for parsed or resolved ASTs.
+-   */
+-  AstProvider get astProvider;
+-
+-  /**
+-   * The function to get top-level declarations from.
+-   */
+-  GetTopLevelDeclarations get getTopLevelDeclarations;
+-
+-  /**
+-   * The [CompilationUnit] to compute fixes in.
+-   */
+-  CompilationUnit get unit;
+-}
+-
+-/**
+- * A [FixContributor] that can be used to contribute fixes for errors in =
Dart
+- * files.
+- *
+- * Clients may extend this class when implementing plugins.
+- */
+-abstract class DartFixContributor implements FixContributor {
+-  @override
+-  Future<List<Fix>> computeFixes(FixContext context) async {
+-    AnalysisDriver driver =3D context.analysisDriver;
+-    Source source =3D context.error.source;
+-    if (!AnalysisEngine.isDartFileName(source.fullName)) {
+-      return Fix.EMPTY_LIST;
+-    }
+-    CompilationUnit unit =3D (await driver.getResult(source.fullName)).un=
it;
+-    if (unit =3D=3D null) {
+-      return Fix.EMPTY_LIST;
+-    }
+-    DartFixContext dartContext =3D
+-        new DartFixContextImpl(context, new AstProviderForDriver(driver),=
 unit);
+-    return internalComputeFixes(dartContext);
+-  }
+-
+-  /**
+-   * Return a list of fixes for the given [context].
+-   */
+-  Future<List<Fix>> internalComputeFixes(DartFixContext context);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/=
pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+deleted file mode 100644
+index 10272553807..00000000000
+--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
++++ /dev/null
+@@ -1,216 +0,0 @@
+-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-/**
+- * Utilities for converting Dart entities into analysis server's protocol
+- * entities.
+- */
+-import 'package:analysis_server/src/protocol_server.dart';
+-import 'package:analyzer/dart/element/element.dart' as engine;
+-import 'package:analyzer/src/generated/utilities_dart.dart' as engine;
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-
+-/**
+- * Return a protocol [Element] corresponding to the given [engine.Element=
].
+- */
+-Element convertElement(engine.Element element) {
+-  String name =3D element.displayName;
+-  String elementTypeParameters =3D _getTypeParametersString(element);
+-  String elementParameters =3D _getParametersString(element);
+-  String elementReturnType =3D getReturnTypeString(element);
+-  ElementKind kind =3D convertElementToElementKind(element);
+-  return new Element(
+-      kind,
+-      name,
+-      Element.makeFlags(
+-          isPrivate: element.isPrivate,
+-          isDeprecated: element.isDeprecated,
+-          isAbstract: _isAbstract(element),
+-          isConst: _isConst(element),
+-          isFinal: _isFinal(element),
+-          isStatic: _isStatic(element)),
+-      location: newLocation_fromElement(element),
+-      typeParameters: elementTypeParameters,
+-      parameters: elementParameters,
+-      returnType: elementReturnType);
+-}
+-
+-/**
+- * Return a protocol [ElementKind] corresponding to the given
+- * [engine.ElementKind].
+- *
+- * This does not take into account that an instance of [ClassElement] can=
 be an
+- * enum and an instance of [FieldElement] can be an enum constant.
+- * Use [convertElementToElementKind] where possible.
+- */
+-ElementKind convertElementKind(engine.ElementKind kind) {
+-  if (kind =3D=3D engine.ElementKind.CLASS) {
+-    return ElementKind.CLASS;
+-  }
+-  if (kind =3D=3D engine.ElementKind.COMPILATION_UNIT) {
+-    return ElementKind.COMPILATION_UNIT;
+-  }
+-  if (kind =3D=3D engine.ElementKind.CONSTRUCTOR) {
+-    return ElementKind.CONSTRUCTOR;
+-  }
+-  if (kind =3D=3D engine.ElementKind.FIELD) {
+-    return ElementKind.FIELD;
+-  }
+-  if (kind =3D=3D engine.ElementKind.FUNCTION) {
+-    return ElementKind.FUNCTION;
+-  }
+-  if (kind =3D=3D engine.ElementKind.FUNCTION_TYPE_ALIAS) {
+-    return ElementKind.FUNCTION_TYPE_ALIAS;
+-  }
+-  if (kind =3D=3D engine.ElementKind.GETTER) {
+-    return ElementKind.GETTER;
+-  }
+-  if (kind =3D=3D engine.ElementKind.LABEL) {
+-    return ElementKind.LABEL;
+-  }
+-  if (kind =3D=3D engine.ElementKind.LIBRARY) {
+-    return ElementKind.LIBRARY;
+-  }
+-  if (kind =3D=3D engine.ElementKind.LOCAL_VARIABLE) {
+-    return ElementKind.LOCAL_VARIABLE;
+-  }
+-  if (kind =3D=3D engine.ElementKind.METHOD) {
+-    return ElementKind.METHOD;
+-  }
+-  if (kind =3D=3D engine.ElementKind.PARAMETER) {
+-    return ElementKind.PARAMETER;
+-  }
+-  if (kind =3D=3D engine.ElementKind.PREFIX) {
+-    return ElementKind.PREFIX;
+-  }
+-  if (kind =3D=3D engine.ElementKind.SETTER) {
+-    return ElementKind.SETTER;
+-  }
+-  if (kind =3D=3D engine.ElementKind.TOP_LEVEL_VARIABLE) {
+-    return ElementKind.TOP_LEVEL_VARIABLE;
+-  }
+-  if (kind =3D=3D engine.ElementKind.TYPE_PARAMETER) {
+-    return ElementKind.TYPE_PARAMETER;
+-  }
+-  return ElementKind.UNKNOWN;
+-}
+-
+-/**
+- * Return an [ElementKind] corresponding to the given [engine.Element].
+- */
+-ElementKind convertElementToElementKind(engine.Element element) {
+-  if (element is engine.ClassElement && element.isEnum) {
+-    return ElementKind.ENUM;
+-  }
+-  if (element is engine.FieldElement &&
+-      element.isEnumConstant &&
+-      // MyEnum.values and MyEnum.one.index return isEnumConstant =3D true
+-      // so these additional checks are necessary.
+-      // TODO(danrubel) MyEnum.values is constant, but is a list
+-      // so should it return isEnumConstant =3D true?
+-      // MyEnum.one.index is final but *not* constant
+-      // so should it return isEnumConstant =3D true?
+-      // Or should we return ElementKind.ENUM_CONSTANT here
+-      // in either or both of these cases?
+-      element.type !=3D null &&
+-      element.type.element =3D=3D element.enclosingElement) {
+-    return ElementKind.ENUM_CONSTANT;
+-  }
+-  return convertElementKind(element.kind);
+-}
+-
+-String _getParametersString(engine.Element element) {
+-  // TODO(scheglov) expose the corresponding feature from ExecutableEleme=
nt
+-  List<engine.ParameterElement> parameters;
+-  if (element is engine.ExecutableElement) {
+-    // valid getters don't have parameters
+-    if (element.kind =3D=3D engine.ElementKind.GETTER &&
+-        element.parameters.isEmpty) {
+-      return null;
+-    }
+-    parameters =3D element.parameters;
+-  } else if (element is engine.FunctionTypeAliasElement) {
+-    parameters =3D element.parameters;
+-  } else {
+-    return null;
+-  }
+-  StringBuffer sb =3D new StringBuffer();
+-  String closeOptionalString =3D '';
+-  for (engine.ParameterElement parameter in parameters) {
+-    if (sb.isNotEmpty) {
+-      sb.write(', ');
+-    }
+-    if (closeOptionalString.isEmpty) {
+-      engine.ParameterKind kind =3D parameter.parameterKind;
+-      if (kind =3D=3D engine.ParameterKind.NAMED) {
+-        sb.write('{');
+-        closeOptionalString =3D '}';
+-      }
+-      if (kind =3D=3D engine.ParameterKind.POSITIONAL) {
+-        sb.write('[');
+-        closeOptionalString =3D ']';
+-      }
+-    }
+-    parameter.appendToWithoutDelimiters(sb);
+-  }
+-  sb.write(closeOptionalString);
+-  return '(' + sb.toString() + ')';
+-}
+-
+-String _getTypeParametersString(engine.Element element) {
+-  List<engine.TypeParameterElement> typeParameters;
+-  if (element is engine.ClassElement) {
+-    typeParameters =3D element.typeParameters;
+-  } else if (element is engine.FunctionTypeAliasElement) {
+-    typeParameters =3D element.typeParameters;
+-  }
+-  if (typeParameters =3D=3D null || typeParameters.isEmpty) {
+-    return null;
+-  }
+-  return '<${typeParameters.join(', ')}>';
+-}
+-
+-bool _isAbstract(engine.Element element) {
+-  // TODO(scheglov) add isAbstract to Element API
+-  if (element is engine.ClassElement) {
+-    return element.isAbstract;
+-  }
+-  if (element is engine.MethodElement) {
+-    return element.isAbstract;
+-  }
+-  if (element is engine.PropertyAccessorElement) {
+-    return element.isAbstract;
+-  }
+-  return false;
+-}
+-
+-bool _isConst(engine.Element element) {
+-  // TODO(scheglov) add isConst to Element API
+-  if (element is engine.ConstructorElement) {
+-    return element.isConst;
+-  }
+-  if (element is engine.VariableElement) {
+-    return element.isConst;
+-  }
+-  return false;
+-}
+-
+-bool _isFinal(engine.Element element) {
+-  // TODO(scheglov) add isFinal to Element API
+-  if (element is engine.VariableElement) {
+-    return element.isFinal;
+-  }
+-  return false;
+-}
+-
+-bool _isStatic(engine.Element element) {
+-  // TODO(scheglov) add isStatic to Element API
+-  if (element is engine.ExecutableElement) {
+-    return element.isStatic;
+-  }
+-  if (element is engine.PropertyInducingElement) {
+-    return element.isStatic;
+-  }
+-  return false;
+-}
+diff --git a/pkg/analysis_server/lib/protocol/protocol.dart b/pkg/analysis=
_server/lib/protocol/protocol.dart
+deleted file mode 100644
+index df989b1d9f5..00000000000
+--- a/pkg/analysis_server/lib/protocol/protocol.dart
++++ /dev/null
+@@ -1,673 +0,0 @@
+-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-/**
+- * Support for client code that needs to interact with the requests, resp=
onses
+- * and notifications that are part of the analysis server's wire protocol.
+- */
+-import 'dart:convert' hide JsonDecoder;
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analysis_server/src/protocol/protocol_internal.dart';
+-
+-export 'package:analyzer_plugin/protocol/protocol.dart' show Enum;
+-
+-/**
+- * A [RequestHandler] that supports [startup] and [shutdown] methods.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class DomainHandler implements RequestHandler {
+-  /**
+-   * Perform any operations associated with the shutdown of the domain. I=
t is
+-   * not guaranteed that this method will be called. If it is, it will be
+-   * called after the last [Request] has been made.
+-   */
+-  void shutdown() {}
+-
+-  /**
+-   * Perform any operations associated with the startup of the domain. Th=
is
+-   * will be called before the first [Request].
+-   */
+-  void startup() {}
+-}
+-
+-/**
+- * A notification that can be sent from the server about an event that oc=
curred.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Notification {
+-  /**
+-   * The name of the JSON attribute containing the name of the event that
+-   * triggered the notification.
+-   */
+-  static const String EVENT =3D 'event';
+-
+-  /**
+-   * The name of the JSON attribute containing the result values.
+-   */
+-  static const String PARAMS =3D 'params';
+-
+-  /**
+-   * The name of the event that triggered the notification.
+-   */
+-  final String event;
+-
+-  /**
+-   * A table mapping the names of notification parameters to their values=
, or
+-   * `null` if there are no notification parameters.
+-   */
+-  final Map<String, Object> params;
+-
+-  /**
+-   * Initialize a newly created [Notification] to have the given [event] =
name.
+-   * If [params] is provided, it will be used as the params; otherwise no
+-   * params will be used.
+-   */
+-  Notification(this.event, [this.params]);
+-
+-  /**
+-   * Initialize a newly created instance based on the given JSON data.
+-   */
+-  factory Notification.fromJson(Map json) {
+-    return new Notification(json[Notification.EVENT],
+-        json[Notification.PARAMS] as Map<String, Object>);
+-  }
+-
+-  /**
+-   * Return a table representing the structure of the Json object that wi=
ll be
+-   * sent to the client to represent this response.
+-   */
+-  Map<String, Object> toJson() {
+-    Map<String, Object> jsonObject =3D {};
+-    jsonObject[EVENT] =3D event;
+-    if (params !=3D null) {
+-      jsonObject[PARAMS] =3D params;
+-    }
+-    return jsonObject;
+-  }
+-}
+-
+-/**
+- * A request that was received from the client.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Request {
+-  /**
+-   * The name of the JSON attribute containing the id of the request.
+-   */
+-  static const String ID =3D 'id';
+-
+-  /**
+-   * The name of the JSON attribute containing the name of the request.
+-   */
+-  static const String METHOD =3D 'method';
+-
+-  /**
+-   * The name of the JSON attribute containing the request parameters.
+-   */
+-  static const String PARAMS =3D 'params';
+-
+-  /**
+-   * The name of the optional JSON attribute indicating the time (millise=
conds
+-   * since epoch) at which the client made the request.
+-   */
+-  static const String CLIENT_REQUEST_TIME =3D 'clientRequestTime';
+-
+-  /**
+-   * The unique identifier used to identify this request.
+-   */
+-  final String id;
+-
+-  /**
+-   * The method being requested.
+-   */
+-  final String method;
+-
+-  /**
+-   * A table mapping the names of request parameters to their values.
+-   */
+-  final Map<String, Object> params;
+-
+-  /**
+-   * The time (milliseconds since epoch) at which the client made the req=
uest
+-   * or `null` if this information is not provided by the client.
+-   */
+-  final int clientRequestTime;
+-
+-  /**
+-   * Initialize a newly created [Request] to have the given [id] and [met=
hod]
+-   * name. If [params] is supplied, it is used as the "params" map for the
+-   * request. Otherwise an empty "params" map is allocated.
+-   */
+-  Request(this.id, this.method,
+-      [Map<String, Object> params, this.clientRequestTime])
+-      : params =3D params ?? <String, Object>{};
+-
+-  /**
+-   * Return a request parsed from the given json, or `null` if the [data]=
 is
+-   * not a valid json representation of a request. The [data] is expected=
 to
+-   * have the following format:
+-   *
+-   *   {
+-   *     'clientRequestTime': millisecondsSinceEpoch
+-   *     'id': String,
+-   *     'method': methodName,
+-   *     'params': {
+-   *       paramter_name: value
+-   *     }
+-   *   }
+-   *
+-   * where both the parameters and clientRequestTime are optional.
+-   *
+-   * The parameters can contain any number of name/value pairs. The
+-   * clientRequestTime must be an int representing the time at which the =
client
+-   * issued the request (milliseconds since epoch).
+-   */
+-  factory Request.fromJson(Map<String, Object> result) {
+-    var id =3D result[Request.ID];
+-    var method =3D result[Request.METHOD];
+-    if (id is! String || method is! String) {
+-      return null;
+-    }
+-    var time =3D result[Request.CLIENT_REQUEST_TIME];
+-    if (time !=3D null && time is! int) {
+-      return null;
+-    }
+-    var params =3D result[Request.PARAMS];
+-    if (params is Map || params =3D=3D null) {
+-      return new Request(id, method, params as Map<String, Object>, time);
+-    } else {
+-      return null;
+-    }
+-  }
+-
+-  /**
+-   * Return a request parsed from the given [data], or `null` if the [dat=
a] is
+-   * not a valid json representation of a request. The [data] is expected=
 to
+-   * have the following format:
+-   *
+-   *   {
+-   *     'clientRequestTime': millisecondsSinceEpoch
+-   *     'id': String,
+-   *     'method': methodName,
+-   *     'params': {
+-   *       paramter_name: value
+-   *     }
+-   *   }
+-   *
+-   * where both the parameters and clientRequestTime are optional.
+-   *
+-   * The parameters can contain any number of name/value pairs. The
+-   * clientRequestTime must be an int representing the time at which the =
client
+-   * issued the request (milliseconds since epoch).
+-   */
+-  factory Request.fromString(String data) {
+-    try {
+-      var result =3D JSON.decode(data);
+-      if (result is Map) {
+-        return new Request.fromJson(result as Map<String, dynamic>);
+-      }
+-      return null;
+-    } catch (exception) {
+-      return null;
+-    }
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return id.hashCode;
+-  }
+-
+-  @override
+-  bool operator =3D=3D(Object other) {
+-    return other is Request &&
+-        id =3D=3D other.id &&
+-        method =3D=3D other.method &&
+-        clientRequestTime =3D=3D other.clientRequestTime &&
+-        _equalMaps(params, other.params);
+-  }
+-
+-  /**
+-   * Return a table representing the structure of the Json object that wi=
ll be
+-   * sent to the client to represent this response.
+-   */
+-  Map<String, Object> toJson() {
+-    Map<String, Object> jsonObject =3D <String, Object>{};
+-    jsonObject[ID] =3D id;
+-    jsonObject[METHOD] =3D method;
+-    if (params.isNotEmpty) {
+-      jsonObject[PARAMS] =3D params;
+-    }
+-    if (clientRequestTime !=3D null) {
+-      jsonObject[CLIENT_REQUEST_TIME] =3D clientRequestTime;
+-    }
+-    return jsonObject;
+-  }
+-
+-  bool _equalLists(List first, List second) {
+-    if (first =3D=3D null) {
+-      return second =3D=3D null;
+-    }
+-    if (second =3D=3D null) {
+-      return false;
+-    }
+-    int length =3D first.length;
+-    if (length !=3D second.length) {
+-      return false;
+-    }
+-    for (int i =3D 0; i < length; i++) {
+-      if (!_equalObjects(first[i], second[i])) {
+-        return false;
+-      }
+-    }
+-    return true;
+-  }
+-
+-  bool _equalMaps(Map first, Map second) {
+-    if (first =3D=3D null) {
+-      return second =3D=3D null;
+-    }
+-    if (second =3D=3D null) {
+-      return false;
+-    }
+-    if (first.length !=3D second.length) {
+-      return false;
+-    }
+-    for (var key in first.keys) {
+-      if (!second.containsKey(key)) {
+-        return false;
+-      }
+-      if (!_equalObjects(first[key], second[key])) {
+-        return false;
+-      }
+-    }
+-    return true;
+-  }
+-
+-  bool _equalObjects(Object first, Object second) {
+-    if (first =3D=3D null) {
+-      return second =3D=3D null;
+-    }
+-    if (second =3D=3D null) {
+-      return false;
+-    }
+-    if (first is Map) {
+-      if (second is Map) {
+-        return _equalMaps(first, second);
+-      }
+-      return false;
+-    }
+-    if (first is List) {
+-      if (second is List) {
+-        return _equalLists(first, second);
+-      }
+-      return false;
+-    }
+-    return first =3D=3D second;
+-  }
+-}
+-
+-/**
+- * An exception that occurred during the handling of a request that requi=
res
+- * that an error be returned to the client.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RequestFailure implements Exception {
+-  /**
+-   * The response to be returned as a result of the failure.
+-   */
+-  final Response response;
+-
+-  /**
+-   * Initialize a newly created exception to return the given reponse.
+-   */
+-  RequestFailure(this.response);
+-}
+-
+-/**
+- * An object that can handle requests and produce responses for them.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class RequestHandler {
+-  /**
+-   * Attempt to handle the given [request]. If the request is not recogni=
zed by
+-   * this handler, return `null` so that other handlers will be given a c=
hance
+-   * to handle it. Otherwise, return the response that should be passed b=
ack to
+-   * the client.
+-   */
+-  Response handleRequest(Request request);
+-}
+-
+-/**
+- * A response to a request.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Response {
+-  /**
+-   * The [Response] instance that is returned when a real [Response] cann=
ot
+-   * be provided at the moment.
+-   */
+-  static final Response DELAYED_RESPONSE =3D new Response('DELAYED_RESPON=
SE');
+-
+-  /**
+-   * The name of the JSON attribute containing the id of the request for =
which
+-   * this is a response.
+-   */
+-  static const String ID =3D 'id';
+-
+-  /**
+-   * The name of the JSON attribute containing the error message.
+-   */
+-  static const String ERROR =3D 'error';
+-
+-  /**
+-   * The name of the JSON attribute containing the result values.
+-   */
+-  static const String RESULT =3D 'result';
+-
+-  /**
+-   * The unique identifier used to identify the request that this respons=
e is
+-   * associated with.
+-   */
+-  final String id;
+-
+-  /**
+-   * The error that was caused by attempting to handle the request, or `n=
ull` if
+-   * there was no error.
+-   */
+-  final RequestError error;
+-
+-  /**
+-   * A table mapping the names of result fields to their values.  Should =
be
+-   * `null` if there is no result to send.
+-   */
+-  Map<String, Object> result;
+-
+-  /**
+-   * Initialize a newly created instance to represent a response to a req=
uest
+-   * with the given [id].  If [_result] is provided, it will be used as t=
he
+-   * result; otherwise an empty result will be used.  If an [error] is pr=
ovided
+-   * then the response will represent an error condition.
+-   */
+-  Response(this.id, {Map<String, Object> result, this.error}) : result =
=3D result;
+-
+-  /**
+-   * Create and return the `DEBUG_PORT_COULD_NOT_BE_OPENED` error respons=
e.
+-   */
+-  Response.debugPortCouldNotBeOpened(Request request, dynamic error)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.DEBUG_PORT_COULD_NOT_BE_OPENED, '$error'=
));
+-
+-  /**
+-   * Initialize a newly created instance to represent the FILE_NOT_ANALYZ=
ED
+-   * error condition.
+-   */
+-  Response.fileNotAnalyzed(Request request, String file)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.FILE_NOT_ANALYZED,
+-                'File is not analyzed: $file.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the FORMAT_INVALID_=
FILE
+-   * error condition.
+-   */
+-  Response.formatInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.FORMAT_INVALID_FILE,
+-                'Error during `edit.format`: invalid file.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the FORMAT_WITH_ERR=
OR
+-   * error condition.
+-   */
+-  Response.formatWithErrors(Request request)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.FORMAT_WITH_ERRORS,
+-                'Error during `edit.format`: source contains syntax error=
s.'));
+-
+-  /**
+-   * Initialize a newly created instance based on the given JSON data.
+-   */
+-  factory Response.fromJson(Map json) {
+-    try {
+-      Object id =3D json[Response.ID];
+-      if (id is! String) {
+-        return null;
+-      }
+-      Object error =3D json[Response.ERROR];
+-      RequestError decodedError;
+-      if (error is Map) {
+-        decodedError =3D new RequestError.fromJson(
+-            new ResponseDecoder(null), '.error', error);
+-      }
+-      Object result =3D json[Response.RESULT];
+-      Map<String, Object> decodedResult;
+-      if (result is Map) {
+-        decodedResult =3D result as Map<String, Object>;
+-      }
+-      return new Response(id, error: decodedError, result: decodedResult);
+-    } catch (exception) {
+-      return null;
+-    }
+-  }
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * GET_ERRORS_INVALID_FILE error condition.
+-   */
+-  Response.getErrorsInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.GET_ERRORS_INVALID_F=
ILE,
+-                'Error during `analysis.getErrors`: invalid file.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * GET_IMPORTED_ELEMENTS_INVALID_FILE error condition.
+-   */
+-  Response.getImportedElementsInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.GET_IMPORTED_ELEMENTS_INVALID_FILE,
+-                'Error during `analysis.getImportedElements`: invalid fil=
e.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * GET_KYTHE_ENTRIES_INVALID_FILE error condition.
+-   */
+-  Response.getKytheEntriesInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.GET_KYTHE_ENTRIES_INVALID_FILE,
+-                'Error during `analysis.getKytheEntries`: invalid file.')=
);
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * GET_NAVIGATION_INVALID_FILE error condition.
+-   */
+-  Response.getNavigationInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.GET_NAVIGATION_INVALID_FILE,
+-                'Error during `analysis.getNavigation`: invalid file.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * GET_REACHABLE_SOURCES_INVALID_FILE error condition.
+-   */
+-  Response.getReachableSourcesInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.GET_REACHABLE_SOURCES_INVALID_FILE,
+-                'Error during `analysis.getReachableSources`: invalid fil=
e.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * IMPORT_ELEMENTS_INVALID_FILE error condition.
+-   */
+-  Response.importElementsInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.IMPORT_ELEMENTS_INVALID_FILE,
+-                'Error during `edit.importElements`: invalid file.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by an analysis.reanalyze [request] that specifies an analysis root t=
hat is
+-   * not in the current list of analysis roots.
+-   */
+-  Response.invalidAnalysisRoot(Request request, String rootPath)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.INVALID_ANALYSIS_ROO=
T,
+-                "Invalid analysis root: $rootPath"));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by a [request] that specifies an execution context whose context roo=
t does
+-   * not exist.
+-   */
+-  Response.invalidExecutionContext(Request request, String contextId)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.INVALID_EXECUTION_CO=
NTEXT,
+-                "Invalid execution context: $contextId"));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * INVALID_FILE_PATH_FORMAT error condition.
+-   */
+-  Response.invalidFilePathFormat(Request request, path)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.INVALID_FILE_PATH_FO=
RMAT,
+-                'Invalid file path format: $path'));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by a [request] that had invalid parameter.  [path] is the path to the
+-   * invalid parameter, in Javascript notation (e.g. "foo.bar" means that=
 the
+-   * parameter "foo" contained a key "bar" whose value was the wrong type=
).
+-   * [expectation] is a description of the type of data that was expected.
+-   */
+-  Response.invalidParameter(Request request, String path, String expectat=
ion)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.INVALID_PARAMETER,
+-                "Invalid parameter '$path'. $expectation."));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by a malformed request.
+-   */
+-  Response.invalidRequestFormat()
+-      : this('',
+-            error: new RequestError(
+-                RequestErrorCode.INVALID_REQUEST, 'Invalid request'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * ORGANIZE_DIRECTIVES_ERROR error condition.
+-   */
+-  Response.organizeDirectivesError(Request request, String message)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.ORGANIZE_DIRECTIVES_ERROR, message));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * REFACTORING_REQUEST_CANCELLED error condition.
+-   */
+-  Response.refactoringRequestCancelled(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.REFACTORING_REQUEST_CANCELLED,
+-                'The `edit.getRefactoring` request was cancelled.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the SERVER_ERROR er=
ror
+-   * condition.
+-   */
+-  factory Response.serverError(Request request, exception, stackTrace) {
+-    RequestError error =3D
+-        new RequestError(RequestErrorCode.SERVER_ERROR, exception.toStrin=
g());
+-    if (stackTrace !=3D null) {
+-      error.stackTrace =3D stackTrace.toString();
+-    }
+-    return new Response(request.id, error: error);
+-  }
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * SORT_MEMBERS_INVALID_FILE error condition.
+-   */
+-  Response.sortMembersInvalidFile(Request request)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.SORT_MEMBERS_INVALID=
_FILE,
+-                'Error during `edit.sortMembers`: invalid file.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent the
+-   * SORT_MEMBERS_PARSE_ERRORS error condition.
+-   */
+-  Response.sortMembersParseErrors(Request request, int numErrors)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.SORT_MEMBERS_PARSE_E=
RRORS,
+-                'Error during `edit.sortMembers`: file has $numErrors sca=
n/parse errors.'));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by a `analysis.setPriorityFiles` [request] that includes one or more=
 files
+-   * that are not being analyzed.
+-   */
+-  Response.unanalyzedPriorityFiles(String requestId, String fileNames)
+-      : this(requestId,
+-            error: new RequestError(RequestErrorCode.UNANALYZED_PRIORITY_=
FILES,
+-                "Unanalyzed files cannot be a priority: '$fileNames'"));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by a [request] that cannot be handled by any known handlers.
+-   */
+-  Response.unknownRequest(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.UNKNOWN_REQUEST, 'Unknown request'));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by a [request] referencing a source that does not exist.
+-   */
+-  Response.unknownSource(Request request)
+-      : this(request.id,
+-            error: new RequestError(
+-                RequestErrorCode.UNKNOWN_SOURCE, 'Unknown source'));
+-
+-  /**
+-   * Initialize a newly created instance to represent an error condition =
caused
+-   * by a [request] for a service that is not supported.
+-   */
+-  Response.unsupportedFeature(String requestId, String message)
+-      : this(requestId,
+-            error: new RequestError(
+-                RequestErrorCode.UNSUPPORTED_FEATURE, message));
+-
+-  /**
+-   * Return a table representing the structure of the Json object that wi=
ll be
+-   * sent to the client to represent this response.
+-   */
+-  Map<String, Object> toJson() {
+-    Map<String, Object> jsonObject =3D <String, Object>{};
+-    jsonObject[ID] =3D id;
+-    if (error !=3D null) {
+-      jsonObject[ERROR] =3D error.toJson();
+-    }
+-    if (result !=3D null) {
+-      jsonObject[RESULT] =3D result;
+-    }
+-    return jsonObject;
+-  }
+-}
+diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pk=
g/analysis_server/lib/protocol/protocol_constants.dart
+deleted file mode 100644
+index 9ff059c1f58..00000000000
+--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
++++ /dev/null
+@@ -1,258 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-//
+-// This file has been automatically generated.  Please do not edit it man=
ually.
+-// To regenerate the file, use the script
+-// "pkg/analysis_server/tool/spec/generate_files".
+-
+-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES =3D 'analysis.analyzedF=
iles';
+-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES =3D 'direct=
ories';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS =3D 'analysis.closingLa=
bels';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_LABELS =3D 'labels';
+-const String ANALYSIS_NOTIFICATION_ERRORS =3D 'analysis.errors';
+-const String ANALYSIS_NOTIFICATION_ERRORS_ERRORS =3D 'errors';
+-const String ANALYSIS_NOTIFICATION_ERRORS_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS =3D 'analysis.flushResul=
ts';
+-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS_FILES =3D 'files';
+-const String ANALYSIS_NOTIFICATION_FOLDING =3D 'analysis.folding';
+-const String ANALYSIS_NOTIFICATION_FOLDING_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_FOLDING_REGIONS =3D 'regions';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS =3D 'analysis.highlights';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_REGIONS =3D 'regions';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED =3D 'analysis.implemented';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_CLASSES =3D 'classes';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_MEMBERS =3D 'members';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE =3D 'analysis.invalidate';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_DELTA =3D 'delta';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_LENGTH =3D 'length';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_OFFSET =3D 'offset';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION =3D 'analysis.navigation';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILES =3D 'files';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_REGIONS =3D 'regions';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_TARGETS =3D 'targets';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES =3D 'analysis.occurrences';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES_OCCURRENCES =3D 'occurrenc=
es';
+-const String ANALYSIS_NOTIFICATION_OUTLINE =3D 'analysis.outline';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_KIND =3D 'kind';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_LIBRARY_NAME =3D 'libraryName';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_OUTLINE =3D 'outline';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES =3D 'analysis.overrides';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES_OVERRIDES =3D 'overrides';
+-const String ANALYSIS_REQUEST_GET_ERRORS =3D 'analysis.getErrors';
+-const String ANALYSIS_REQUEST_GET_ERRORS_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_HOVER =3D 'analysis.getHover';
+-const String ANALYSIS_REQUEST_GET_HOVER_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_HOVER_OFFSET =3D 'offset';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS =3D
+-    'analysis.getImportedElements';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_LENGTH =3D 'length';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_OFFSET =3D 'offset';
+-const String ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES =3D
+-    'analysis.getLibraryDependencies';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION =3D 'analysis.getNavigation';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_LENGTH =3D 'length';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_OFFSET =3D 'offset';
+-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES =3D
+-    'analysis.getReachableSources';
+-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_REANALYZE =3D 'analysis.reanalyze';
+-const String ANALYSIS_REQUEST_REANALYZE_ROOTS =3D 'roots';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS =3D 'analysis.setAnalysi=
sRoots';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_EXCLUDED =3D 'excluded';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED =3D 'included';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_PACKAGE_ROOTS =3D 'packa=
geRoots';
+-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS =3D
+-    'analysis.setGeneralSubscriptions';
+-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS_SUBSCRIPTIONS =3D
+-    'subscriptions';
+-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES =3D 'analysis.setPriorit=
yFiles';
+-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES =3D 'files';
+-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS =3D 'analysis.setSubscrip=
tions';
+-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =3D 'subscr=
iptions';
+-const String ANALYSIS_REQUEST_UPDATE_CONTENT =3D 'analysis.updateContent';
+-const String ANALYSIS_REQUEST_UPDATE_CONTENT_FILES =3D 'files';
+-const String ANALYSIS_REQUEST_UPDATE_OPTIONS =3D 'analysis.updateOptions';
+-const String ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS =3D 'options';
+-const String ANALYSIS_RESPONSE_GET_ERRORS_ERRORS =3D 'errors';
+-const String ANALYSIS_RESPONSE_GET_HOVER_HOVERS =3D 'hovers';
+-const String ANALYSIS_RESPONSE_GET_IMPORTED_ELEMENTS_ELEMENTS =3D 'elemen=
ts';
+-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_LIBRARIES =3D 'li=
braries';
+-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_PACKAGE_MAP =3D
+-    'packageMap';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_FILES =3D 'files';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_REGIONS =3D 'regions';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_TARGETS =3D 'targets';
+-const String ANALYSIS_RESPONSE_GET_REACHABLE_SOURCES_SOURCES =3D 'sources=
';
+-const String ANALYTICS_REQUEST_ENABLE =3D 'analytics.enable';
+-const String ANALYTICS_REQUEST_ENABLE_VALUE =3D 'value';
+-const String ANALYTICS_REQUEST_IS_ENABLED =3D 'analytics.isEnabled';
+-const String ANALYTICS_REQUEST_SEND_EVENT =3D 'analytics.sendEvent';
+-const String ANALYTICS_REQUEST_SEND_EVENT_ACTION =3D 'action';
+-const String ANALYTICS_REQUEST_SEND_TIMING =3D 'analytics.sendTiming';
+-const String ANALYTICS_REQUEST_SEND_TIMING_EVENT =3D 'event';
+-const String ANALYTICS_REQUEST_SEND_TIMING_MILLIS =3D 'millis';
+-const String ANALYTICS_RESPONSE_IS_ENABLED_ENABLED =3D 'enabled';
+-const String COMPLETION_NOTIFICATION_RESULTS =3D 'completion.results';
+-const String COMPLETION_NOTIFICATION_RESULTS_ID =3D 'id';
+-const String COMPLETION_NOTIFICATION_RESULTS_IS_LAST =3D 'isLast';
+-const String COMPLETION_NOTIFICATION_RESULTS_REPLACEMENT_LENGTH =3D
+-    'replacementLength';
+-const String COMPLETION_NOTIFICATION_RESULTS_REPLACEMENT_OFFSET =3D
+-    'replacementOffset';
+-const String COMPLETION_NOTIFICATION_RESULTS_RESULTS =3D 'results';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS =3D 'completion.getSugges=
tions';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS_FILE =3D 'file';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS_OFFSET =3D 'offset';
+-const String COMPLETION_RESPONSE_GET_SUGGESTIONS_ID =3D 'id';
+-const String DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS =3D 'diagnostic.getDiagno=
stics';
+-const String DIAGNOSTIC_REQUEST_GET_SERVER_PORT =3D 'diagnostic.getServer=
Port';
+-const String DIAGNOSTIC_RESPONSE_GET_DIAGNOSTICS_CONTEXTS =3D 'contexts';
+-const String DIAGNOSTIC_RESPONSE_GET_SERVER_PORT_PORT =3D 'port';
+-const String EDIT_REQUEST_FORMAT =3D 'edit.format';
+-const String EDIT_REQUEST_FORMAT_FILE =3D 'file';
+-const String EDIT_REQUEST_FORMAT_LINE_LENGTH =3D 'lineLength';
+-const String EDIT_REQUEST_FORMAT_SELECTION_LENGTH =3D 'selectionLength';
+-const String EDIT_REQUEST_FORMAT_SELECTION_OFFSET =3D 'selectionOffset';
+-const String EDIT_REQUEST_GET_ASSISTS =3D 'edit.getAssists';
+-const String EDIT_REQUEST_GET_ASSISTS_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_ASSISTS_LENGTH =3D 'length';
+-const String EDIT_REQUEST_GET_ASSISTS_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS =3D
+-    'edit.getAvailableRefactorings';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_LENGTH =3D 'length';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_FIXES =3D 'edit.getFixes';
+-const String EDIT_REQUEST_GET_FIXES_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_FIXES_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION =3D 'edit.getPostfixComp=
letion';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_KEY =3D 'key';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_REFACTORING =3D 'edit.getRefactoring';
+-const String EDIT_REQUEST_GET_REFACTORING_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_REFACTORING_KIND =3D 'kind';
+-const String EDIT_REQUEST_GET_REFACTORING_LENGTH =3D 'length';
+-const String EDIT_REQUEST_GET_REFACTORING_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_REFACTORING_OPTIONS =3D 'options';
+-const String EDIT_REQUEST_GET_REFACTORING_VALIDATE_ONLY =3D 'validateOnly=
';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION =3D
+-    'edit.getStatementCompletion';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS =3D 'edit.importElements';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS_ELEMENTS =3D 'elements';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS_FILE =3D 'file';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE =3D
+-    'edit.isPostfixCompletionApplicable';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_FILE =3D 'file=
';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_KEY =3D 'key';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_OFFSET =3D 'of=
fset';
+-const String EDIT_REQUEST_LIST_POSTFIX_COMPLETION_TEMPLATES =3D
+-    'edit.listPostfixCompletionTemplates';
+-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES =3D 'edit.organizeDirective=
s';
+-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES_FILE =3D 'file';
+-const String EDIT_REQUEST_SORT_MEMBERS =3D 'edit.sortMembers';
+-const String EDIT_REQUEST_SORT_MEMBERS_FILE =3D 'file';
+-const String EDIT_RESPONSE_FORMAT_EDITS =3D 'edits';
+-const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH =3D 'selectionLength';
+-const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET =3D 'selectionOffset';
+-const String EDIT_RESPONSE_GET_ASSISTS_ASSISTS =3D 'assists';
+-const String EDIT_RESPONSE_GET_AVAILABLE_REFACTORINGS_KINDS =3D 'kinds';
+-const String EDIT_RESPONSE_GET_FIXES_FIXES =3D 'fixes';
+-const String EDIT_RESPONSE_GET_POSTFIX_COMPLETION_CHANGE =3D 'change';
+-const String EDIT_RESPONSE_GET_REFACTORING_CHANGE =3D 'change';
+-const String EDIT_RESPONSE_GET_REFACTORING_FEEDBACK =3D 'feedback';
+-const String EDIT_RESPONSE_GET_REFACTORING_FINAL_PROBLEMS =3D 'finalProbl=
ems';
+-const String EDIT_RESPONSE_GET_REFACTORING_INITIAL_PROBLEMS =3D 'initialP=
roblems';
+-const String EDIT_RESPONSE_GET_REFACTORING_OPTIONS_PROBLEMS =3D 'optionsP=
roblems';
+-const String EDIT_RESPONSE_GET_REFACTORING_POTENTIAL_EDITS =3D 'potential=
Edits';
+-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_CHANGE =3D 'change';
+-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_WHITESPACE_ONLY =3D
+-    'whitespaceOnly';
+-const String EDIT_RESPONSE_IMPORT_ELEMENTS_EDIT =3D 'edit';
+-const String EDIT_RESPONSE_IS_POSTFIX_COMPLETION_APPLICABLE_VALUE =3D 'va=
lue';
+-const String EDIT_RESPONSE_LIST_POSTFIX_COMPLETION_TEMPLATES_TEMPLATES =3D
+-    'templates';
+-const String EDIT_RESPONSE_ORGANIZE_DIRECTIVES_EDIT =3D 'edit';
+-const String EDIT_RESPONSE_SORT_MEMBERS_EDIT =3D 'edit';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA =3D 'execution.launchData=
';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_FILE =3D 'file';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_KIND =3D 'kind';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_REFERENCED_FILES =3D
+-    'referencedFiles';
+-const String EXECUTION_REQUEST_CREATE_CONTEXT =3D 'execution.createContex=
t';
+-const String EXECUTION_REQUEST_CREATE_CONTEXT_CONTEXT_ROOT =3D 'contextRo=
ot';
+-const String EXECUTION_REQUEST_DELETE_CONTEXT =3D 'execution.deleteContex=
t';
+-const String EXECUTION_REQUEST_DELETE_CONTEXT_ID =3D 'id';
+-const String EXECUTION_REQUEST_MAP_URI =3D 'execution.mapUri';
+-const String EXECUTION_REQUEST_MAP_URI_FILE =3D 'file';
+-const String EXECUTION_REQUEST_MAP_URI_ID =3D 'id';
+-const String EXECUTION_REQUEST_MAP_URI_URI =3D 'uri';
+-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS =3D 'execution.setSubscr=
iptions';
+-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =3D
+-    'subscriptions';
+-const String EXECUTION_RESPONSE_CREATE_CONTEXT_ID =3D 'id';
+-const String EXECUTION_RESPONSE_MAP_URI_FILE =3D 'file';
+-const String EXECUTION_RESPONSE_MAP_URI_URI =3D 'uri';
+-const String KYTHE_REQUEST_GET_KYTHE_ENTRIES =3D 'kythe.getKytheEntries';
+-const String KYTHE_REQUEST_GET_KYTHE_ENTRIES_FILE =3D 'file';
+-const String KYTHE_RESPONSE_GET_KYTHE_ENTRIES_ENTRIES =3D 'entries';
+-const String KYTHE_RESPONSE_GET_KYTHE_ENTRIES_FILES =3D 'files';
+-const String SEARCH_NOTIFICATION_RESULTS =3D 'search.results';
+-const String SEARCH_NOTIFICATION_RESULTS_ID =3D 'id';
+-const String SEARCH_NOTIFICATION_RESULTS_IS_LAST =3D 'isLast';
+-const String SEARCH_NOTIFICATION_RESULTS_RESULTS =3D 'results';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES =3D
+-    'search.findElementReferences';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_FILE =3D 'file';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_INCLUDE_POTENTIAL =3D
+-    'includePotential';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_OFFSET =3D 'offset';
+-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS =3D
+-    'search.findMemberDeclarations';
+-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS_NAME =3D 'name';
+-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES =3D
+-    'search.findMemberReferences';
+-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES_NAME =3D 'name';
+-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS =3D
+-    'search.findTopLevelDeclarations';
+-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS_PATTERN =3D 'patt=
ern';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY =3D 'search.getTypeHierarc=
hy';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_FILE =3D 'file';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_OFFSET =3D 'offset';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_SUPER_ONLY =3D 'superOnly';
+-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ELEMENT =3D 'element=
';
+-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ID =3D 'id';
+-const String SEARCH_RESPONSE_FIND_MEMBER_DECLARATIONS_ID =3D 'id';
+-const String SEARCH_RESPONSE_FIND_MEMBER_REFERENCES_ID =3D 'id';
+-const String SEARCH_RESPONSE_FIND_TOP_LEVEL_DECLARATIONS_ID =3D 'id';
+-const String SEARCH_RESPONSE_GET_TYPE_HIERARCHY_HIERARCHY_ITEMS =3D
+-    'hierarchyItems';
+-const String SERVER_NOTIFICATION_CONNECTED =3D 'server.connected';
+-const String SERVER_NOTIFICATION_CONNECTED_PID =3D 'pid';
+-const String SERVER_NOTIFICATION_CONNECTED_SESSION_ID =3D 'sessionId';
+-const String SERVER_NOTIFICATION_CONNECTED_VERSION =3D 'version';
+-const String SERVER_NOTIFICATION_ERROR =3D 'server.error';
+-const String SERVER_NOTIFICATION_ERROR_IS_FATAL =3D 'isFatal';
+-const String SERVER_NOTIFICATION_ERROR_MESSAGE =3D 'message';
+-const String SERVER_NOTIFICATION_ERROR_STACK_TRACE =3D 'stackTrace';
+-const String SERVER_NOTIFICATION_STATUS =3D 'server.status';
+-const String SERVER_NOTIFICATION_STATUS_ANALYSIS =3D 'analysis';
+-const String SERVER_NOTIFICATION_STATUS_PUB =3D 'pub';
+-const String SERVER_REQUEST_GET_VERSION =3D 'server.getVersion';
+-const String SERVER_REQUEST_SET_SUBSCRIPTIONS =3D 'server.setSubscription=
s';
+-const String SERVER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =3D 'subscrip=
tions';
+-const String SERVER_REQUEST_SHUTDOWN =3D 'server.shutdown';
+-const String SERVER_RESPONSE_GET_VERSION_VERSION =3D 'version';
+diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pk=
g/analysis_server/lib/protocol/protocol_generated.dart
+deleted file mode 100644
+index 20400573c49..00000000000
+--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
++++ /dev/null
+@@ -1,15802 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-//
+-// This file has been automatically generated.  Please do not edit it man=
ually.
+-// To regenerate the file, use the script
+-// "pkg/analysis_server/tool/spec/generate_files".
+-
+-import 'dart:convert' hide JsonDecoder;
+-
+-import 'package:analyzer/src/generated/utilities_general.dart';
+-import 'package:analysis_server/protocol/protocol.dart';
+-import 'package:analysis_server/src/protocol/protocol_internal.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-
+-/**
+- * analysis.analyzedFiles params
+- *
+- * {
+- *   "directories": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisAnalyzedFilesParams implements HasToJson {
+-  List<String> _directories;
+-
+-  /**
+-   * A list of the paths of the files that are being analyzed.
+-   */
+-  List<String> get directories =3D> _directories;
+-
+-  /**
+-   * A list of the paths of the files that are being analyzed.
+-   */
+-  void set directories(List<String> value) {
+-    assert(value !=3D null);
+-    this._directories =3D value;
+-  }
+-
+-  AnalysisAnalyzedFilesParams(List<String> directories) {
+-    this.directories =3D directories;
+-  }
+-
+-  factory AnalysisAnalyzedFilesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<String> directories;
+-      if (json.containsKey("directories")) {
+-        directories =3D jsonDecoder.decodeList(jsonPath + ".directories",
+-            json["directories"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "directories");
+-      }
+-      return new AnalysisAnalyzedFilesParams(directories);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.analyzedFiles params", json);
+-    }
+-  }
+-
+-  factory AnalysisAnalyzedFilesParams.fromNotification(
+-      Notification notification) {
+-    return new AnalysisAnalyzedFilesParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["directories"] =3D directories;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.analyzedFiles", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisAnalyzedFilesParams) {
+-      return listEqual(
+-          directories, other.directories, (String a, String b) =3D> a =3D=
=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, directories.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.closingLabels params
+- *
+- * {
+- *   "file": FilePath
+- *   "labels": List<ClosingLabel>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisClosingLabelsParams implements HasToJson {
+-  String _file;
+-
+-  List<ClosingLabel> _labels;
+-
+-  /**
+-   * The file the closing labels relate to.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file the closing labels relate to.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * Closing labels relevant to the file. Each item represents a useful l=
abel
+-   * associated with some range with may be useful to display to the user
+-   * within the editor at the end of the range to indicate what construct=
 is
+-   * closed at that location. Closing labels include constructor/method c=
alls
+-   * and List arguments that span multiple lines. Note that the ranges th=
at are
+-   * returned can overlap each other because they may be associated with
+-   * constructs that can be nested.
+-   */
+-  List<ClosingLabel> get labels =3D> _labels;
+-
+-  /**
+-   * Closing labels relevant to the file. Each item represents a useful l=
abel
+-   * associated with some range with may be useful to display to the user
+-   * within the editor at the end of the range to indicate what construct=
 is
+-   * closed at that location. Closing labels include constructor/method c=
alls
+-   * and List arguments that span multiple lines. Note that the ranges th=
at are
+-   * returned can overlap each other because they may be associated with
+-   * constructs that can be nested.
+-   */
+-  void set labels(List<ClosingLabel> value) {
+-    assert(value !=3D null);
+-    this._labels =3D value;
+-  }
+-
+-  AnalysisClosingLabelsParams(String file, List<ClosingLabel> labels) {
+-    this.file =3D file;
+-    this.labels =3D labels;
+-  }
+-
+-  factory AnalysisClosingLabelsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<ClosingLabel> labels;
+-      if (json.containsKey("labels")) {
+-        labels =3D jsonDecoder.decodeList(
+-            jsonPath + ".labels",
+-            json["labels"],
+-            (String jsonPath, Object json) =3D>
+-                new ClosingLabel.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "labels");
+-      }
+-      return new AnalysisClosingLabelsParams(file, labels);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.closingLabels params", json);
+-    }
+-  }
+-
+-  factory AnalysisClosingLabelsParams.fromNotification(
+-      Notification notification) {
+-    return new AnalysisClosingLabelsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["labels"] =3D
+-        labels.map((ClosingLabel value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.closingLabels", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisClosingLabelsParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(
+-              labels, other.labels, (ClosingLabel a, ClosingLabel b) =3D>=
 a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, labels.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * AnalysisErrorFixes
+- *
+- * {
+- *   "error": AnalysisError
+- *   "fixes": List<SourceChange>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisErrorFixes implements HasToJson {
+-  AnalysisError _error;
+-
+-  List<SourceChange> _fixes;
+-
+-  /**
+-   * The error with which the fixes are associated.
+-   */
+-  AnalysisError get error =3D> _error;
+-
+-  /**
+-   * The error with which the fixes are associated.
+-   */
+-  void set error(AnalysisError value) {
+-    assert(value !=3D null);
+-    this._error =3D value;
+-  }
+-
+-  /**
+-   * The fixes associated with the error.
+-   */
+-  List<SourceChange> get fixes =3D> _fixes;
+-
+-  /**
+-   * The fixes associated with the error.
+-   */
+-  void set fixes(List<SourceChange> value) {
+-    assert(value !=3D null);
+-    this._fixes =3D value;
+-  }
+-
+-  AnalysisErrorFixes(AnalysisError error, {List<SourceChange> fixes}) {
+-    this.error =3D error;
+-    if (fixes =3D=3D null) {
+-      this.fixes =3D <SourceChange>[];
+-    } else {
+-      this.fixes =3D fixes;
+-    }
+-  }
+-
+-  factory AnalysisErrorFixes.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      AnalysisError error;
+-      if (json.containsKey("error")) {
+-        error =3D new AnalysisError.fromJson(
+-            jsonDecoder, jsonPath + ".error", json["error"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "error");
+-      }
+-      List<SourceChange> fixes;
+-      if (json.containsKey("fixes")) {
+-        fixes =3D jsonDecoder.decodeList(
+-            jsonPath + ".fixes",
+-            json["fixes"],
+-            (String jsonPath, Object json) =3D>
+-                new SourceChange.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "fixes");
+-      }
+-      return new AnalysisErrorFixes(error, fixes: fixes);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorFixes", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["error"] =3D error.toJson();
+-    result["fixes"] =3D
+-        fixes.map((SourceChange value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisErrorFixes) {
+-      return error =3D=3D other.error &&
+-          listEqual(
+-              fixes, other.fixes, (SourceChange a, SourceChange b) =3D> a=
 =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, error.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, fixes.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.errors params
+- *
+- * {
+- *   "file": FilePath
+- *   "errors": List<AnalysisError>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisErrorsParams implements HasToJson {
+-  String _file;
+-
+-  List<AnalysisError> _errors;
+-
+-  /**
+-   * The file containing the errors.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the errors.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The errors contained in the file.
+-   */
+-  List<AnalysisError> get errors =3D> _errors;
+-
+-  /**
+-   * The errors contained in the file.
+-   */
+-  void set errors(List<AnalysisError> value) {
+-    assert(value !=3D null);
+-    this._errors =3D value;
+-  }
+-
+-  AnalysisErrorsParams(String file, List<AnalysisError> errors) {
+-    this.file =3D file;
+-    this.errors =3D errors;
+-  }
+-
+-  factory AnalysisErrorsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<AnalysisError> errors;
+-      if (json.containsKey("errors")) {
+-        errors =3D jsonDecoder.decodeList(
+-            jsonPath + ".errors",
+-            json["errors"],
+-            (String jsonPath, Object json) =3D>
+-                new AnalysisError.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "errors");
+-      }
+-      return new AnalysisErrorsParams(file, errors);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.errors params", json=
);
+-    }
+-  }
+-
+-  factory AnalysisErrorsParams.fromNotification(Notification notification=
) {
+-    return new AnalysisErrorsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["errors"] =3D
+-        errors.map((AnalysisError value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.errors", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisErrorsParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(errors, other.errors,
+-              (AnalysisError a, AnalysisError b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, errors.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.flushResults params
+- *
+- * {
+- *   "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisFlushResultsParams implements HasToJson {
+-  List<String> _files;
+-
+-  /**
+-   * The files that are no longer being analyzed.
+-   */
+-  List<String> get files =3D> _files;
+-
+-  /**
+-   * The files that are no longer being analyzed.
+-   */
+-  void set files(List<String> value) {
+-    assert(value !=3D null);
+-    this._files =3D value;
+-  }
+-
+-  AnalysisFlushResultsParams(List<String> files) {
+-    this.files =3D files;
+-  }
+-
+-  factory AnalysisFlushResultsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files =3D jsonDecoder.decodeList(
+-            jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "files");
+-      }
+-      return new AnalysisFlushResultsParams(files);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.flushResults params", json);
+-    }
+-  }
+-
+-  factory AnalysisFlushResultsParams.fromNotification(
+-      Notification notification) {
+-    return new AnalysisFlushResultsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["files"] =3D files;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.flushResults", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisFlushResultsParams) {
+-      return listEqual(files, other.files, (String a, String b) =3D> a =
=3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.folding params
+- *
+- * {
+- *   "file": FilePath
+- *   "regions": List<FoldingRegion>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisFoldingParams implements HasToJson {
+-  String _file;
+-
+-  List<FoldingRegion> _regions;
+-
+-  /**
+-   * The file containing the folding regions.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the folding regions.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The folding regions contained in the file.
+-   */
+-  List<FoldingRegion> get regions =3D> _regions;
+-
+-  /**
+-   * The folding regions contained in the file.
+-   */
+-  void set regions(List<FoldingRegion> value) {
+-    assert(value !=3D null);
+-    this._regions =3D value;
+-  }
+-
+-  AnalysisFoldingParams(String file, List<FoldingRegion> regions) {
+-    this.file =3D file;
+-    this.regions =3D regions;
+-  }
+-
+-  factory AnalysisFoldingParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<FoldingRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions =3D jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =3D>
+-                new FoldingRegion.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "regions");
+-      }
+-      return new AnalysisFoldingParams(file, regions);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.folding params", jso=
n);
+-    }
+-  }
+-
+-  factory AnalysisFoldingParams.fromNotification(Notification notificatio=
n) {
+-    return new AnalysisFoldingParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["regions"] =3D
+-        regions.map((FoldingRegion value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.folding", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisFoldingParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(regions, other.regions,
+-              (FoldingRegion a, FoldingRegion b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getErrors params
+- *
+- * {
+- *   "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetErrorsParams implements RequestParams {
+-  String _file;
+-
+-  /**
+-   * The file for which errors are being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file for which errors are being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  AnalysisGetErrorsParams(String file) {
+-    this.file =3D file;
+-  }
+-
+-  factory AnalysisGetErrorsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      return new AnalysisGetErrorsParams(file);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors params", j=
son);
+-    }
+-  }
+-
+-  factory AnalysisGetErrorsParams.fromRequest(Request request) {
+-    return new AnalysisGetErrorsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getErrors", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetErrorsParams) {
+-      return file =3D=3D other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getErrors result
+- *
+- * {
+- *   "errors": List<AnalysisError>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetErrorsResult implements ResponseResult {
+-  List<AnalysisError> _errors;
+-
+-  /**
+-   * The errors associated with the file.
+-   */
+-  List<AnalysisError> get errors =3D> _errors;
+-
+-  /**
+-   * The errors associated with the file.
+-   */
+-  void set errors(List<AnalysisError> value) {
+-    assert(value !=3D null);
+-    this._errors =3D value;
+-  }
+-
+-  AnalysisGetErrorsResult(List<AnalysisError> errors) {
+-    this.errors =3D errors;
+-  }
+-
+-  factory AnalysisGetErrorsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<AnalysisError> errors;
+-      if (json.containsKey("errors")) {
+-        errors =3D jsonDecoder.decodeList(
+-            jsonPath + ".errors",
+-            json["errors"],
+-            (String jsonPath, Object json) =3D>
+-                new AnalysisError.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "errors");
+-      }
+-      return new AnalysisGetErrorsResult(errors);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors result", j=
son);
+-    }
+-  }
+-
+-  factory AnalysisGetErrorsResult.fromResponse(Response response) {
+-    return new AnalysisGetErrorsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["errors"] =3D
+-        errors.map((AnalysisError value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetErrorsResult) {
+-      return listEqual(
+-          errors, other.errors, (AnalysisError a, AnalysisError b) =3D> a=
 =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, errors.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getHover params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetHoverParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  /**
+-   * The file in which hover information is being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file in which hover information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset for which hover information is being requested.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset for which hover information is being requested.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  AnalysisGetHoverParams(String file, int offset) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-  }
+-
+-  factory AnalysisGetHoverParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new AnalysisGetHoverParams(file, offset);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover params", js=
on);
+-    }
+-  }
+-
+-  factory AnalysisGetHoverParams.fromRequest(Request request) {
+-    return new AnalysisGetHoverParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getHover", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetHoverParams) {
+-      return file =3D=3D other.file && offset =3D=3D other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getHover result
+- *
+- * {
+- *   "hovers": List<HoverInformation>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetHoverResult implements ResponseResult {
+-  List<HoverInformation> _hovers;
+-
+-  /**
+-   * 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 con=
texts
+-   * in conflicting ways (such as a part that is included in multiple
+-   * libraries).
+-   */
+-  List<HoverInformation> get hovers =3D> _hovers;
+-
+-  /**
+-   * 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 con=
texts
+-   * in conflicting ways (such as a part that is included in multiple
+-   * libraries).
+-   */
+-  void set hovers(List<HoverInformation> value) {
+-    assert(value !=3D null);
+-    this._hovers =3D value;
+-  }
+-
+-  AnalysisGetHoverResult(List<HoverInformation> hovers) {
+-    this.hovers =3D hovers;
+-  }
+-
+-  factory AnalysisGetHoverResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<HoverInformation> hovers;
+-      if (json.containsKey("hovers")) {
+-        hovers =3D jsonDecoder.decodeList(
+-            jsonPath + ".hovers",
+-            json["hovers"],
+-            (String jsonPath, Object json) =3D>
+-                new HoverInformation.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "hovers");
+-      }
+-      return new AnalysisGetHoverResult(hovers);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover result", js=
on);
+-    }
+-  }
+-
+-  factory AnalysisGetHoverResult.fromResponse(Response response) {
+-    return new AnalysisGetHoverResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["hovers"] =3D
+-        hovers.map((HoverInformation value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetHoverResult) {
+-      return listEqual(hovers, other.hovers,
+-          (HoverInformation a, HoverInformation b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, hovers.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getImportedElements params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- *   "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetImportedElementsParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  int _length;
+-
+-  /**
+-   * The file in which import information is being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file in which import information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the region for which import information is being reque=
sted.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the region for which import information is being reque=
sted.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the region for which import information is being reque=
sted.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the region for which import information is being reque=
sted.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  AnalysisGetImportedElementsParams(String file, int offset, int length) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.length =3D length;
+-  }
+-
+-  factory AnalysisGetImportedElementsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      return new AnalysisGetImportedElementsParams(file, offset, length);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getImportedElements params", json);
+-    }
+-  }
+-
+-  factory AnalysisGetImportedElementsParams.fromRequest(Request request) {
+-    return new AnalysisGetImportedElementsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getImportedElements", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetImportedElementsParams) {
+-      return file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          length =3D=3D other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getImportedElements result
+- *
+- * {
+- *   "elements": List<ImportedElements>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetImportedElementsResult implements ResponseResult {
+-  List<ImportedElements> _elements;
+-
+-  /**
+-   * The information about the elements that are referenced in the specif=
ied
+-   * region of the specified file that come from imported libraries.
+-   */
+-  List<ImportedElements> get elements =3D> _elements;
+-
+-  /**
+-   * The information about the elements that are referenced in the specif=
ied
+-   * region of the specified file that come from imported libraries.
+-   */
+-  void set elements(List<ImportedElements> value) {
+-    assert(value !=3D null);
+-    this._elements =3D value;
+-  }
+-
+-  AnalysisGetImportedElementsResult(List<ImportedElements> elements) {
+-    this.elements =3D elements;
+-  }
+-
+-  factory AnalysisGetImportedElementsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<ImportedElements> elements;
+-      if (json.containsKey("elements")) {
+-        elements =3D jsonDecoder.decodeList(
+-            jsonPath + ".elements",
+-            json["elements"],
+-            (String jsonPath, Object json) =3D>
+-                new ImportedElements.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "elements");
+-      }
+-      return new AnalysisGetImportedElementsResult(elements);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getImportedElements result", json);
+-    }
+-  }
+-
+-  factory AnalysisGetImportedElementsResult.fromResponse(Response respons=
e) {
+-    return new AnalysisGetImportedElementsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["elements"] =3D
+-        elements.map((ImportedElements value) =3D> value.toJson()).toList=
();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetImportedElementsResult) {
+-      return listEqual(elements, other.elements,
+-          (ImportedElements a, ImportedElements b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, elements.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getLibraryDependencies params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetLibraryDependenciesParams implements RequestParams {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getLibraryDependencies", null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetLibraryDependenciesParams) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 246577680;
+-  }
+-}
+-
+-/**
+- * analysis.getLibraryDependencies result
+- *
+- * {
+- *   "libraries": List<FilePath>
+- *   "packageMap": Map<String, Map<String, List<FilePath>>>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetLibraryDependenciesResult implements ResponseResult {
+-  List<String> _libraries;
+-
+-  Map<String, Map<String, List<String>>> _packageMap;
+-
+-  /**
+-   * A list of the paths of library elements referenced by files in exist=
ing
+-   * analysis roots.
+-   */
+-  List<String> get libraries =3D> _libraries;
+-
+-  /**
+-   * A list of the paths of library elements referenced by files in exist=
ing
+-   * analysis roots.
+-   */
+-  void set libraries(List<String> value) {
+-    assert(value !=3D null);
+-    this._libraries =3D value;
+-  }
+-
+-  /**
+-   * A mapping from context source roots to package maps which map package
+-   * names to source directories for use in client-side package URI resol=
ution.
+-   */
+-  Map<String, Map<String, List<String>>> get packageMap =3D> _packageMap;
+-
+-  /**
+-   * A mapping from context source roots to package maps which map package
+-   * names to source directories for use in client-side package URI resol=
ution.
+-   */
+-  void set packageMap(Map<String, Map<String, List<String>>> value) {
+-    assert(value !=3D null);
+-    this._packageMap =3D value;
+-  }
+-
+-  AnalysisGetLibraryDependenciesResult(List<String> libraries,
+-      Map<String, Map<String, List<String>>> packageMap) {
+-    this.libraries =3D libraries;
+-    this.packageMap =3D packageMap;
+-  }
+-
+-  factory AnalysisGetLibraryDependenciesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<String> libraries;
+-      if (json.containsKey("libraries")) {
+-        libraries =3D jsonDecoder.decodeList(jsonPath + ".libraries",
+-            json["libraries"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "libraries");
+-      }
+-      Map<String, Map<String, List<String>>> packageMap;
+-      if (json.containsKey("packageMap")) {
+-        packageMap =3D jsonDecoder.decodeMap(
+-            jsonPath + ".packageMap", json["packageMap"],
+-            valueDecoder: (String jsonPath, Object json) =3D>
+-                jsonDecoder.decodeMap(jsonPath, json,
+-                    valueDecoder: (String jsonPath, Object json) =3D> jso=
nDecoder
+-                        .decodeList(jsonPath, json, jsonDecoder.decodeStr=
ing)));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "packageMap");
+-      }
+-      return new AnalysisGetLibraryDependenciesResult(libraries, packageM=
ap);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getLibraryDependencies result", json);
+-    }
+-  }
+-
+-  factory AnalysisGetLibraryDependenciesResult.fromResponse(Response resp=
onse) {
+-    return new AnalysisGetLibraryDependenciesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["libraries"] =3D libraries;
+-    result["packageMap"] =3D packageMap;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetLibraryDependenciesResult) {
+-      return listEqual(
+-              libraries, other.libraries, (String a, String b) =3D> a =3D=
=3D b) &&
+-          mapEqual(
+-              packageMap,
+-              other.packageMap,
+-              (Map<String, List<String>> a, Map<String, List<String>> b) =
=3D>
+-                  mapEqual(
+-                      a,
+-                      b,
+-                      (List<String> a, List<String> b) =3D>
+-                          listEqual(a, b, (String a, String b) =3D> a =3D=
=3D b)));
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, libraries.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, packageMap.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getNavigation params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- *   "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetNavigationParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  int _length;
+-
+-  /**
+-   * The file in which navigation information is being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file in which navigation information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the region for which navigation information is being
+-   * requested.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the region for which navigation information is being
+-   * requested.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the region for which navigation information is being
+-   * requested.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the region for which navigation information is being
+-   * requested.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  AnalysisGetNavigationParams(String file, int offset, int length) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.length =3D length;
+-  }
+-
+-  factory AnalysisGetNavigationParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      return new AnalysisGetNavigationParams(file, offset, length);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getNavigation params", json);
+-    }
+-  }
+-
+-  factory AnalysisGetNavigationParams.fromRequest(Request request) {
+-    return new AnalysisGetNavigationParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getNavigation", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetNavigationParams) {
+-      return file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          length =3D=3D other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getNavigation result
+- *
+- * {
+- *   "files": List<FilePath>
+- *   "targets": List<NavigationTarget>
+- *   "regions": List<NavigationRegion>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetNavigationResult implements ResponseResult {
+-  List<String> _files;
+-
+-  List<NavigationTarget> _targets;
+-
+-  List<NavigationRegion> _regions;
+-
+-  /**
+-   * A list of the paths of files that are referenced by the navigation
+-   * targets.
+-   */
+-  List<String> get files =3D> _files;
+-
+-  /**
+-   * A list of the paths of files that are referenced by the navigation
+-   * targets.
+-   */
+-  void set files(List<String> value) {
+-    assert(value !=3D null);
+-    this._files =3D value;
+-  }
+-
+-  /**
+-   * A list of the navigation targets that are referenced by the navigati=
on
+-   * regions.
+-   */
+-  List<NavigationTarget> get targets =3D> _targets;
+-
+-  /**
+-   * A list of the navigation targets that are referenced by the navigati=
on
+-   * regions.
+-   */
+-  void set targets(List<NavigationTarget> value) {
+-    assert(value !=3D null);
+-    this._targets =3D value;
+-  }
+-
+-  /**
+-   * A list of the navigation regions within the requested region of the =
file.
+-   */
+-  List<NavigationRegion> get regions =3D> _regions;
+-
+-  /**
+-   * A list of the navigation regions within the requested region of the =
file.
+-   */
+-  void set regions(List<NavigationRegion> value) {
+-    assert(value !=3D null);
+-    this._regions =3D value;
+-  }
+-
+-  AnalysisGetNavigationResult(List<String> files,
+-      List<NavigationTarget> targets, List<NavigationRegion> regions) {
+-    this.files =3D files;
+-    this.targets =3D targets;
+-    this.regions =3D regions;
+-  }
+-
+-  factory AnalysisGetNavigationResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files =3D jsonDecoder.decodeList(
+-            jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "files");
+-      }
+-      List<NavigationTarget> targets;
+-      if (json.containsKey("targets")) {
+-        targets =3D jsonDecoder.decodeList(
+-            jsonPath + ".targets",
+-            json["targets"],
+-            (String jsonPath, Object json) =3D>
+-                new NavigationTarget.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "targets");
+-      }
+-      List<NavigationRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions =3D jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =3D>
+-                new NavigationRegion.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "regions");
+-      }
+-      return new AnalysisGetNavigationResult(files, targets, regions);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getNavigation result", json);
+-    }
+-  }
+-
+-  factory AnalysisGetNavigationResult.fromResponse(Response response) {
+-    return new AnalysisGetNavigationResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["files"] =3D files;
+-    result["targets"] =3D
+-        targets.map((NavigationTarget value) =3D> value.toJson()).toList(=
);
+-    result["regions"] =3D
+-        regions.map((NavigationRegion value) =3D> value.toJson()).toList(=
);
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetNavigationResult) {
+-      return listEqual(files, other.files, (String a, String b) =3D> a =
=3D=3D b) &&
+-          listEqual(targets, other.targets,
+-              (NavigationTarget a, NavigationTarget b) =3D> a =3D=3D b) &&
+-          listEqual(regions, other.regions,
+-              (NavigationRegion a, NavigationRegion b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, targets.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getReachableSources params
+- *
+- * {
+- *   "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetReachableSourcesParams implements RequestParams {
+-  String _file;
+-
+-  /**
+-   * The file for which reachable source information is being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file for which reachable source information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  AnalysisGetReachableSourcesParams(String file) {
+-    this.file =3D file;
+-  }
+-
+-  factory AnalysisGetReachableSourcesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      return new AnalysisGetReachableSourcesParams(file);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getReachableSources params", json);
+-    }
+-  }
+-
+-  factory AnalysisGetReachableSourcesParams.fromRequest(Request request) {
+-    return new AnalysisGetReachableSourcesParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getReachableSources", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetReachableSourcesParams) {
+-      return file =3D=3D other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.getReachableSources result
+- *
+- * {
+- *   "sources": Map<String, List<String>>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetReachableSourcesResult implements ResponseResult {
+-  Map<String, List<String>> _sources;
+-
+-  /**
+-   * A mapping from source URIs to directly reachable source URIs. For ex=
ample,
+-   * a file "foo.dart" that imports "bar.dart" would have the correspondi=
ng
+-   * mapping { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart"=
 has
+-   * further imports (or exports) there will be a mapping from the URI
+-   * "file:///bar.dart" to them. To check if a specific URI is reachable =
from a
+-   * given file, clients can check for its presence in the resulting key =
set.
+-   */
+-  Map<String, List<String>> get sources =3D> _sources;
+-
+-  /**
+-   * A mapping from source URIs to directly reachable source URIs. For ex=
ample,
+-   * a file "foo.dart" that imports "bar.dart" would have the correspondi=
ng
+-   * mapping { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart"=
 has
+-   * further imports (or exports) there will be a mapping from the URI
+-   * "file:///bar.dart" to them. To check if a specific URI is reachable =
from a
+-   * given file, clients can check for its presence in the resulting key =
set.
+-   */
+-  void set sources(Map<String, List<String>> value) {
+-    assert(value !=3D null);
+-    this._sources =3D value;
+-  }
+-
+-  AnalysisGetReachableSourcesResult(Map<String, List<String>> sources) {
+-    this.sources =3D sources;
+-  }
+-
+-  factory AnalysisGetReachableSourcesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      Map<String, List<String>> sources;
+-      if (json.containsKey("sources")) {
+-        sources =3D jsonDecoder.decodeMap(jsonPath + ".sources", json["so=
urces"],
+-            valueDecoder: (String jsonPath, Object json) =3D> jsonDecoder
+-                .decodeList(jsonPath, json, jsonDecoder.decodeString));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "sources");
+-      }
+-      return new AnalysisGetReachableSourcesResult(sources);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getReachableSources result", json);
+-    }
+-  }
+-
+-  factory AnalysisGetReachableSourcesResult.fromResponse(Response respons=
e) {
+-    return new AnalysisGetReachableSourcesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["sources"] =3D sources;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisGetReachableSourcesResult) {
+-      return mapEqual(
+-          sources,
+-          other.sources,
+-          (List<String> a, List<String> b) =3D>
+-              listEqual(a, b, (String a, String b) =3D> a =3D=3D b));
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, sources.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.highlights params
+- *
+- * {
+- *   "file": FilePath
+- *   "regions": List<HighlightRegion>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisHighlightsParams implements HasToJson {
+-  String _file;
+-
+-  List<HighlightRegion> _regions;
+-
+-  /**
+-   * The file containing the highlight regions.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the highlight regions.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The highlight regions contained in the file. Each highlight region
+-   * represents a particular syntactic or semantic meaning associated wit=
h 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.
+-   */
+-  List<HighlightRegion> get regions =3D> _regions;
+-
+-  /**
+-   * The highlight regions contained in the file. Each highlight region
+-   * represents a particular syntactic or semantic meaning associated wit=
h 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.
+-   */
+-  void set regions(List<HighlightRegion> value) {
+-    assert(value !=3D null);
+-    this._regions =3D value;
+-  }
+-
+-  AnalysisHighlightsParams(String file, List<HighlightRegion> regions) {
+-    this.file =3D file;
+-    this.regions =3D regions;
+-  }
+-
+-  factory AnalysisHighlightsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<HighlightRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions =3D jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =3D>
+-                new HighlightRegion.fromJson(jsonDecoder, jsonPath, json)=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "regions");
+-      }
+-      return new AnalysisHighlightsParams(file, regions);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.highlights params", =
json);
+-    }
+-  }
+-
+-  factory AnalysisHighlightsParams.fromNotification(Notification notifica=
tion) {
+-    return new AnalysisHighlightsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["regions"] =3D
+-        regions.map((HighlightRegion value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.highlights", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisHighlightsParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(regions, other.regions,
+-              (HighlightRegion a, HighlightRegion b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.implemented params
+- *
+- * {
+- *   "file": FilePath
+- *   "classes": List<ImplementedClass>
+- *   "members": List<ImplementedMember>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisImplementedParams implements HasToJson {
+-  String _file;
+-
+-  List<ImplementedClass> _classes;
+-
+-  List<ImplementedMember> _members;
+-
+-  /**
+-   * The file with which the implementations are associated.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file with which the implementations are associated.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The classes defined in the file that are implemented or extended.
+-   */
+-  List<ImplementedClass> get classes =3D> _classes;
+-
+-  /**
+-   * The classes defined in the file that are implemented or extended.
+-   */
+-  void set classes(List<ImplementedClass> value) {
+-    assert(value !=3D null);
+-    this._classes =3D value;
+-  }
+-
+-  /**
+-   * The member defined in the file that are implemented or overridden.
+-   */
+-  List<ImplementedMember> get members =3D> _members;
+-
+-  /**
+-   * The member defined in the file that are implemented or overridden.
+-   */
+-  void set members(List<ImplementedMember> value) {
+-    assert(value !=3D null);
+-    this._members =3D value;
+-  }
+-
+-  AnalysisImplementedParams(String file, List<ImplementedClass> classes,
+-      List<ImplementedMember> members) {
+-    this.file =3D file;
+-    this.classes =3D classes;
+-    this.members =3D members;
+-  }
+-
+-  factory AnalysisImplementedParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<ImplementedClass> classes;
+-      if (json.containsKey("classes")) {
+-        classes =3D jsonDecoder.decodeList(
+-            jsonPath + ".classes",
+-            json["classes"],
+-            (String jsonPath, Object json) =3D>
+-                new ImplementedClass.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "classes");
+-      }
+-      List<ImplementedMember> members;
+-      if (json.containsKey("members")) {
+-        members =3D jsonDecoder.decodeList(
+-            jsonPath + ".members",
+-            json["members"],
+-            (String jsonPath, Object json) =3D>
+-                new ImplementedMember.fromJson(jsonDecoder, jsonPath, jso=
n));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "members");
+-      }
+-      return new AnalysisImplementedParams(file, classes, members);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.implemented params",=
 json);
+-    }
+-  }
+-
+-  factory AnalysisImplementedParams.fromNotification(
+-      Notification notification) {
+-    return new AnalysisImplementedParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["classes"] =3D
+-        classes.map((ImplementedClass value) =3D> value.toJson()).toList(=
);
+-    result["members"] =3D
+-        members.map((ImplementedMember value) =3D> value.toJson()).toList=
();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.implemented", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisImplementedParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(classes, other.classes,
+-              (ImplementedClass a, ImplementedClass b) =3D> a =3D=3D b) &&
+-          listEqual(members, other.members,
+-              (ImplementedMember a, ImplementedMember b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, classes.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, members.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.invalidate params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- *   "length": int
+- *   "delta": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisInvalidateParams implements HasToJson {
+-  String _file;
+-
+-  int _offset;
+-
+-  int _length;
+-
+-  int _delta;
+-
+-  /**
+-   * The file whose information has been invalidated.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file whose information has been invalidated.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the invalidated region.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the invalidated region.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the invalidated region.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the invalidated region.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  /**
+-   * The delta to be applied to the offsets in information that follows t=
he
+-   * invalidated region in order to update it so that it doesn't need to =
be
+-   * re-requested.
+-   */
+-  int get delta =3D> _delta;
+-
+-  /**
+-   * The delta to be applied to the offsets in information that follows t=
he
+-   * invalidated region in order to update it so that it doesn't need to =
be
+-   * re-requested.
+-   */
+-  void set delta(int value) {
+-    assert(value !=3D null);
+-    this._delta =3D value;
+-  }
+-
+-  AnalysisInvalidateParams(String file, int offset, int length, int delta=
) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.length =3D length;
+-    this.delta =3D delta;
+-  }
+-
+-  factory AnalysisInvalidateParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      int delta;
+-      if (json.containsKey("delta")) {
+-        delta =3D jsonDecoder.decodeInt(jsonPath + ".delta", json["delta"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "delta");
+-      }
+-      return new AnalysisInvalidateParams(file, offset, length, delta);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.invalidate params", =
json);
+-    }
+-  }
+-
+-  factory AnalysisInvalidateParams.fromNotification(Notification notifica=
tion) {
+-    return new AnalysisInvalidateParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    result["delta"] =3D delta;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.invalidate", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisInvalidateParams) {
+-      return file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          length =3D=3D other.length &&
+-          delta =3D=3D other.delta;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, delta.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.navigation params
+- *
+- * {
+- *   "file": FilePath
+- *   "regions": List<NavigationRegion>
+- *   "targets": List<NavigationTarget>
+- *   "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisNavigationParams implements HasToJson {
+-  String _file;
+-
+-  List<NavigationRegion> _regions;
+-
+-  List<NavigationTarget> _targets;
+-
+-  List<String> _files;
+-
+-  /**
+-   * The file containing the navigation regions.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the navigation regions.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * 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 ret=
urned
+-   * do not overlap other navigation regions.
+-   */
+-  List<NavigationRegion> get regions =3D> _regions;
+-
+-  /**
+-   * 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 ret=
urned
+-   * do not overlap other navigation regions.
+-   */
+-  void set regions(List<NavigationRegion> value) {
+-    assert(value !=3D null);
+-    this._regions =3D value;
+-  }
+-
+-  /**
+-   * The navigation targets referenced in the file. They are referenced by
+-   * NavigationRegions by their index in this array.
+-   */
+-  List<NavigationTarget> get targets =3D> _targets;
+-
+-  /**
+-   * The navigation targets referenced in the file. They are referenced by
+-   * NavigationRegions by their index in this array.
+-   */
+-  void set targets(List<NavigationTarget> value) {
+-    assert(value !=3D null);
+-    this._targets =3D value;
+-  }
+-
+-  /**
+-   * The files containing navigation targets referenced in the file. They=
 are
+-   * referenced by NavigationTargets by their index in this array.
+-   */
+-  List<String> get files =3D> _files;
+-
+-  /**
+-   * The files containing navigation targets referenced in the file. They=
 are
+-   * referenced by NavigationTargets by their index in this array.
+-   */
+-  void set files(List<String> value) {
+-    assert(value !=3D null);
+-    this._files =3D value;
+-  }
+-
+-  AnalysisNavigationParams(String file, List<NavigationRegion> regions,
+-      List<NavigationTarget> targets, List<String> files) {
+-    this.file =3D file;
+-    this.regions =3D regions;
+-    this.targets =3D targets;
+-    this.files =3D files;
+-  }
+-
+-  factory AnalysisNavigationParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<NavigationRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions =3D jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =3D>
+-                new NavigationRegion.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "regions");
+-      }
+-      List<NavigationTarget> targets;
+-      if (json.containsKey("targets")) {
+-        targets =3D jsonDecoder.decodeList(
+-            jsonPath + ".targets",
+-            json["targets"],
+-            (String jsonPath, Object json) =3D>
+-                new NavigationTarget.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "targets");
+-      }
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files =3D jsonDecoder.decodeList(
+-            jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "files");
+-      }
+-      return new AnalysisNavigationParams(file, regions, targets, files);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.navigation params", =
json);
+-    }
+-  }
+-
+-  factory AnalysisNavigationParams.fromNotification(Notification notifica=
tion) {
+-    return new AnalysisNavigationParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["regions"] =3D
+-        regions.map((NavigationRegion value) =3D> value.toJson()).toList(=
);
+-    result["targets"] =3D
+-        targets.map((NavigationTarget value) =3D> value.toJson()).toList(=
);
+-    result["files"] =3D files;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.navigation", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisNavigationParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(regions, other.regions,
+-              (NavigationRegion a, NavigationRegion b) =3D> a =3D=3D b) &&
+-          listEqual(targets, other.targets,
+-              (NavigationTarget a, NavigationTarget b) =3D> a =3D=3D b) &&
+-          listEqual(files, other.files, (String a, String b) =3D> a =3D=
=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, targets.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.occurrences params
+- *
+- * {
+- *   "file": FilePath
+- *   "occurrences": List<Occurrences>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOccurrencesParams implements HasToJson {
+-  String _file;
+-
+-  List<Occurrences> _occurrences;
+-
+-  /**
+-   * The file in which the references occur.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file in which the references occur.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The occurrences of references to elements within the file.
+-   */
+-  List<Occurrences> get occurrences =3D> _occurrences;
+-
+-  /**
+-   * The occurrences of references to elements within the file.
+-   */
+-  void set occurrences(List<Occurrences> value) {
+-    assert(value !=3D null);
+-    this._occurrences =3D value;
+-  }
+-
+-  AnalysisOccurrencesParams(String file, List<Occurrences> occurrences) {
+-    this.file =3D file;
+-    this.occurrences =3D occurrences;
+-  }
+-
+-  factory AnalysisOccurrencesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<Occurrences> occurrences;
+-      if (json.containsKey("occurrences")) {
+-        occurrences =3D jsonDecoder.decodeList(
+-            jsonPath + ".occurrences",
+-            json["occurrences"],
+-            (String jsonPath, Object json) =3D>
+-                new Occurrences.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "occurrences");
+-      }
+-      return new AnalysisOccurrencesParams(file, occurrences);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.occurrences params",=
 json);
+-    }
+-  }
+-
+-  factory AnalysisOccurrencesParams.fromNotification(
+-      Notification notification) {
+-    return new AnalysisOccurrencesParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["occurrences"] =3D
+-        occurrences.map((Occurrences value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.occurrences", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisOccurrencesParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(occurrences, other.occurrences,
+-              (Occurrences a, Occurrences b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, occurrences.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * AnalysisOptions
+- *
+- * {
+- *   "enableAsync": optional bool
+- *   "enableDeferredLoading": optional bool
+- *   "enableEnums": optional bool
+- *   "enableNullAwareOperators": optional bool
+- *   "enableSuperMixins": optional bool
+- *   "generateDart2jsHints": optional bool
+- *   "generateHints": optional bool
+- *   "generateLints": optional bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOptions implements HasToJson {
+-  bool _enableAsync;
+-
+-  bool _enableDeferredLoading;
+-
+-  bool _enableEnums;
+-
+-  bool _enableNullAwareOperators;
+-
+-  bool _enableSuperMixins;
+-
+-  bool _generateDart2jsHints;
+-
+-  bool _generateHints;
+-
+-  bool _generateLints;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed async fe=
ature.
+-   */
+-  bool get enableAsync =3D> _enableAsync;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed async fe=
ature.
+-   */
+-  void set enableAsync(bool value) {
+-    this._enableAsync =3D value;
+-  }
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed deferred
+-   * loading feature.
+-   */
+-  bool get enableDeferredLoading =3D> _enableDeferredLoading;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed deferred
+-   * loading feature.
+-   */
+-  void set enableDeferredLoading(bool value) {
+-    this._enableDeferredLoading =3D value;
+-  }
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed enum fea=
ture.
+-   */
+-  bool get enableEnums =3D> _enableEnums;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed enum fea=
ture.
+-   */
+-  void set enableEnums(bool value) {
+-    this._enableEnums =3D value;
+-  }
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed "null aw=
are
+-   * operators" feature.
+-   */
+-  bool get enableNullAwareOperators =3D> _enableNullAwareOperators;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed "null aw=
are
+-   * operators" feature.
+-   */
+-  void set enableNullAwareOperators(bool value) {
+-    this._enableNullAwareOperators =3D value;
+-  }
+-
+-  /**
+-   * True if the client wants to enable support for the proposed "less
+-   * restricted mixins" proposal (DEP 34).
+-   */
+-  bool get enableSuperMixins =3D> _enableSuperMixins;
+-
+-  /**
+-   * True if the client wants to enable support for the proposed "less
+-   * restricted mixins" proposal (DEP 34).
+-   */
+-  void set enableSuperMixins(bool value) {
+-    this._enableSuperMixins =3D value;
+-  }
+-
+-  /**
+-   * True if hints that are specific to dart2js should be generated. This
+-   * option is ignored if generateHints is false.
+-   */
+-  bool get generateDart2jsHints =3D> _generateDart2jsHints;
+-
+-  /**
+-   * True if hints that are specific to dart2js should be generated. This
+-   * option is ignored if generateHints is false.
+-   */
+-  void set generateDart2jsHints(bool value) {
+-    this._generateDart2jsHints =3D value;
+-  }
+-
+-  /**
+-   * True if hints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  bool get generateHints =3D> _generateHints;
+-
+-  /**
+-   * True if hints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  void set generateHints(bool value) {
+-    this._generateHints =3D value;
+-  }
+-
+-  /**
+-   * True if lints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  bool get generateLints =3D> _generateLints;
+-
+-  /**
+-   * True if lints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  void set generateLints(bool value) {
+-    this._generateLints =3D value;
+-  }
+-
+-  AnalysisOptions(
+-      {bool enableAsync,
+-      bool enableDeferredLoading,
+-      bool enableEnums,
+-      bool enableNullAwareOperators,
+-      bool enableSuperMixins,
+-      bool generateDart2jsHints,
+-      bool generateHints,
+-      bool generateLints}) {
+-    this.enableAsync =3D enableAsync;
+-    this.enableDeferredLoading =3D enableDeferredLoading;
+-    this.enableEnums =3D enableEnums;
+-    this.enableNullAwareOperators =3D enableNullAwareOperators;
+-    this.enableSuperMixins =3D enableSuperMixins;
+-    this.generateDart2jsHints =3D generateDart2jsHints;
+-    this.generateHints =3D generateHints;
+-    this.generateLints =3D generateLints;
+-  }
+-
+-  factory AnalysisOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool enableAsync;
+-      if (json.containsKey("enableAsync")) {
+-        enableAsync =3D jsonDecoder.decodeBool(
+-            jsonPath + ".enableAsync", json["enableAsync"]);
+-      }
+-      bool enableDeferredLoading;
+-      if (json.containsKey("enableDeferredLoading")) {
+-        enableDeferredLoading =3D jsonDecoder.decodeBool(
+-            jsonPath + ".enableDeferredLoading", json["enableDeferredLoad=
ing"]);
+-      }
+-      bool enableEnums;
+-      if (json.containsKey("enableEnums")) {
+-        enableEnums =3D jsonDecoder.decodeBool(
+-            jsonPath + ".enableEnums", json["enableEnums"]);
+-      }
+-      bool enableNullAwareOperators;
+-      if (json.containsKey("enableNullAwareOperators")) {
+-        enableNullAwareOperators =3D jsonDecoder.decodeBool(
+-            jsonPath + ".enableNullAwareOperators",
+-            json["enableNullAwareOperators"]);
+-      }
+-      bool enableSuperMixins;
+-      if (json.containsKey("enableSuperMixins")) {
+-        enableSuperMixins =3D jsonDecoder.decodeBool(
+-            jsonPath + ".enableSuperMixins", json["enableSuperMixins"]);
+-      }
+-      bool generateDart2jsHints;
+-      if (json.containsKey("generateDart2jsHints")) {
+-        generateDart2jsHints =3D jsonDecoder.decodeBool(
+-            jsonPath + ".generateDart2jsHints", json["generateDart2jsHint=
s"]);
+-      }
+-      bool generateHints;
+-      if (json.containsKey("generateHints")) {
+-        generateHints =3D jsonDecoder.decodeBool(
+-            jsonPath + ".generateHints", json["generateHints"]);
+-      }
+-      bool generateLints;
+-      if (json.containsKey("generateLints")) {
+-        generateLints =3D jsonDecoder.decodeBool(
+-            jsonPath + ".generateLints", json["generateLints"]);
+-      }
+-      return new AnalysisOptions(
+-          enableAsync: enableAsync,
+-          enableDeferredLoading: enableDeferredLoading,
+-          enableEnums: enableEnums,
+-          enableNullAwareOperators: enableNullAwareOperators,
+-          enableSuperMixins: enableSuperMixins,
+-          generateDart2jsHints: generateDart2jsHints,
+-          generateHints: generateHints,
+-          generateLints: generateLints);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "AnalysisOptions", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    if (enableAsync !=3D null) {
+-      result["enableAsync"] =3D enableAsync;
+-    }
+-    if (enableDeferredLoading !=3D null) {
+-      result["enableDeferredLoading"] =3D enableDeferredLoading;
+-    }
+-    if (enableEnums !=3D null) {
+-      result["enableEnums"] =3D enableEnums;
+-    }
+-    if (enableNullAwareOperators !=3D null) {
+-      result["enableNullAwareOperators"] =3D enableNullAwareOperators;
+-    }
+-    if (enableSuperMixins !=3D null) {
+-      result["enableSuperMixins"] =3D enableSuperMixins;
+-    }
+-    if (generateDart2jsHints !=3D null) {
+-      result["generateDart2jsHints"] =3D generateDart2jsHints;
+-    }
+-    if (generateHints !=3D null) {
+-      result["generateHints"] =3D generateHints;
+-    }
+-    if (generateLints !=3D null) {
+-      result["generateLints"] =3D generateLints;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisOptions) {
+-      return enableAsync =3D=3D other.enableAsync &&
+-          enableDeferredLoading =3D=3D other.enableDeferredLoading &&
+-          enableEnums =3D=3D other.enableEnums &&
+-          enableNullAwareOperators =3D=3D other.enableNullAwareOperators =
&&
+-          enableSuperMixins =3D=3D other.enableSuperMixins &&
+-          generateDart2jsHints =3D=3D other.generateDart2jsHints &&
+-          generateHints =3D=3D other.generateHints &&
+-          generateLints =3D=3D other.generateLints;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, enableAsync.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, enableDeferredLoading.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, enableEnums.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, enableNullAwareOperators.hashCo=
de);
+-    hash =3D JenkinsSmiHash.combine(hash, enableSuperMixins.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, generateDart2jsHints.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, generateHints.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, generateLints.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.outline params
+- *
+- * {
+- *   "file": FilePath
+- *   "kind": FileKind
+- *   "libraryName": optional String
+- *   "outline": Outline
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOutlineParams implements HasToJson {
+-  String _file;
+-
+-  FileKind _kind;
+-
+-  String _libraryName;
+-
+-  Outline _outline;
+-
+-  /**
+-   * The file with which the outline is associated.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file with which the outline is associated.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The kind of the file.
+-   */
+-  FileKind get kind =3D> _kind;
+-
+-  /**
+-   * The kind of the file.
+-   */
+-  void set kind(FileKind value) {
+-    assert(value !=3D null);
+-    this._kind =3D value;
+-  }
+-
+-  /**
+-   * The name of the library defined by the file using a "library" direct=
ive,
+-   * or referenced by a "part of" directive. If both "library" and "part =
of"
+-   * directives are present, then the "library" directive takes precedenc=
e.
+-   * This field will be omitted if the file has neither "library" nor "pa=
rt of"
+-   * directives.
+-   */
+-  String get libraryName =3D> _libraryName;
+-
+-  /**
+-   * The name of the library defined by the file using a "library" direct=
ive,
+-   * or referenced by a "part of" directive. If both "library" and "part =
of"
+-   * directives are present, then the "library" directive takes precedenc=
e.
+-   * This field will be omitted if the file has neither "library" nor "pa=
rt of"
+-   * directives.
+-   */
+-  void set libraryName(String value) {
+-    this._libraryName =3D value;
+-  }
+-
+-  /**
+-   * The outline associated with the file.
+-   */
+-  Outline get outline =3D> _outline;
+-
+-  /**
+-   * The outline associated with the file.
+-   */
+-  void set outline(Outline value) {
+-    assert(value !=3D null);
+-    this._outline =3D value;
+-  }
+-
+-  AnalysisOutlineParams(String file, FileKind kind, Outline outline,
+-      {String libraryName}) {
+-    this.file =3D file;
+-    this.kind =3D kind;
+-    this.libraryName =3D libraryName;
+-    this.outline =3D outline;
+-  }
+-
+-  factory AnalysisOutlineParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      FileKind kind;
+-      if (json.containsKey("kind")) {
+-        kind =3D new FileKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kind");
+-      }
+-      String libraryName;
+-      if (json.containsKey("libraryName")) {
+-        libraryName =3D jsonDecoder.decodeString(
+-            jsonPath + ".libraryName", json["libraryName"]);
+-      }
+-      Outline outline;
+-      if (json.containsKey("outline")) {
+-        outline =3D new Outline.fromJson(
+-            jsonDecoder, jsonPath + ".outline", json["outline"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "outline");
+-      }
+-      return new AnalysisOutlineParams(file, kind, outline,
+-          libraryName: libraryName);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.outline params", jso=
n);
+-    }
+-  }
+-
+-  factory AnalysisOutlineParams.fromNotification(Notification notificatio=
n) {
+-    return new AnalysisOutlineParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["kind"] =3D kind.toJson();
+-    if (libraryName !=3D null) {
+-      result["libraryName"] =3D libraryName;
+-    }
+-    result["outline"] =3D outline.toJson();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.outline", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisOutlineParams) {
+-      return file =3D=3D other.file &&
+-          kind =3D=3D other.kind &&
+-          libraryName =3D=3D other.libraryName &&
+-          outline =3D=3D other.outline;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, libraryName.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, outline.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.overrides params
+- *
+- * {
+- *   "file": FilePath
+- *   "overrides": List<Override>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOverridesParams implements HasToJson {
+-  String _file;
+-
+-  List<Override> _overrides;
+-
+-  /**
+-   * The file with which the overrides are associated.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file with which the overrides are associated.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The overrides associated with the file.
+-   */
+-  List<Override> get overrides =3D> _overrides;
+-
+-  /**
+-   * The overrides associated with the file.
+-   */
+-  void set overrides(List<Override> value) {
+-    assert(value !=3D null);
+-    this._overrides =3D value;
+-  }
+-
+-  AnalysisOverridesParams(String file, List<Override> overrides) {
+-    this.file =3D file;
+-    this.overrides =3D overrides;
+-  }
+-
+-  factory AnalysisOverridesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<Override> overrides;
+-      if (json.containsKey("overrides")) {
+-        overrides =3D jsonDecoder.decodeList(
+-            jsonPath + ".overrides",
+-            json["overrides"],
+-            (String jsonPath, Object json) =3D>
+-                new Override.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "overrides");
+-      }
+-      return new AnalysisOverridesParams(file, overrides);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.overrides params", j=
son);
+-    }
+-  }
+-
+-  factory AnalysisOverridesParams.fromNotification(Notification notificat=
ion) {
+-    return new AnalysisOverridesParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["overrides"] =3D
+-        overrides.map((Override value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.overrides", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisOverridesParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(
+-              overrides, other.overrides, (Override a, Override b) =3D> a=
 =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, overrides.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.reanalyze params
+- *
+- * {
+- *   "roots": optional List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisReanalyzeParams implements RequestParams {
+-  List<String> _roots;
+-
+-  /**
+-   * A list of the analysis roots that are to be re-analyzed.
+-   */
+-  List<String> get roots =3D> _roots;
+-
+-  /**
+-   * A list of the analysis roots that are to be re-analyzed.
+-   */
+-  void set roots(List<String> value) {
+-    this._roots =3D value;
+-  }
+-
+-  AnalysisReanalyzeParams({List<String> roots}) {
+-    this.roots =3D roots;
+-  }
+-
+-  factory AnalysisReanalyzeParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<String> roots;
+-      if (json.containsKey("roots")) {
+-        roots =3D jsonDecoder.decodeList(
+-            jsonPath + ".roots", json["roots"], jsonDecoder.decodeString);
+-      }
+-      return new AnalysisReanalyzeParams(roots: roots);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.reanalyze params", j=
son);
+-    }
+-  }
+-
+-  factory AnalysisReanalyzeParams.fromRequest(Request request) {
+-    return new AnalysisReanalyzeParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    if (roots !=3D null) {
+-      result["roots"] =3D roots;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.reanalyze", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisReanalyzeParams) {
+-      return listEqual(roots, other.roots, (String a, String b) =3D> a =
=3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, roots.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.reanalyze result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisReanalyzeResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisReanalyzeResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 846803925;
+-  }
+-}
+-
+-/**
+- * AnalysisService
+- *
+- * enum {
+- *   CLOSING_LABELS
+- *   FOLDING
+- *   HIGHLIGHTS
+- *   IMPLEMENTED
+- *   INVALIDATE
+- *   NAVIGATION
+- *   OCCURRENCES
+- *   OUTLINE
+- *   OVERRIDES
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisService implements Enum {
+-  static const AnalysisService CLOSING_LABELS =3D
+-      const AnalysisService._("CLOSING_LABELS");
+-
+-  static const AnalysisService FOLDING =3D const AnalysisService._("FOLDI=
NG");
+-
+-  static const AnalysisService HIGHLIGHTS =3D
+-      const AnalysisService._("HIGHLIGHTS");
+-
+-  static const AnalysisService IMPLEMENTED =3D
+-      const AnalysisService._("IMPLEMENTED");
+-
+-  /**
+-   * This service is not currently implemented and will become a
+-   * GeneralAnalysisService in a future release.
+-   */
+-  static const AnalysisService INVALIDATE =3D
+-      const AnalysisService._("INVALIDATE");
+-
+-  static const AnalysisService NAVIGATION =3D
+-      const AnalysisService._("NAVIGATION");
+-
+-  static const AnalysisService OCCURRENCES =3D
+-      const AnalysisService._("OCCURRENCES");
+-
+-  static const AnalysisService OUTLINE =3D const AnalysisService._("OUTLI=
NE");
+-
+-  static const AnalysisService OVERRIDES =3D const AnalysisService._("OVE=
RRIDES");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<AnalysisService> VALUES =3D const <AnalysisService>[
+-    CLOSING_LABELS,
+-    FOLDING,
+-    HIGHLIGHTS,
+-    IMPLEMENTED,
+-    INVALIDATE,
+-    NAVIGATION,
+-    OCCURRENCES,
+-    OUTLINE,
+-    OVERRIDES
+-  ];
+-
+-  @override
+-  final String name;
+-
+-  const AnalysisService._(this.name);
+-
+-  factory AnalysisService(String name) {
+-    switch (name) {
+-      case "CLOSING_LABELS":
+-        return CLOSING_LABELS;
+-      case "FOLDING":
+-        return FOLDING;
+-      case "HIGHLIGHTS":
+-        return HIGHLIGHTS;
+-      case "IMPLEMENTED":
+-        return IMPLEMENTED;
+-      case "INVALIDATE":
+-        return INVALIDATE;
+-      case "NAVIGATION":
+-        return NAVIGATION;
+-      case "OCCURRENCES":
+-        return OCCURRENCES;
+-      case "OUTLINE":
+-        return OUTLINE;
+-      case "OVERRIDES":
+-        return OVERRIDES;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory AnalysisService.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new AnalysisService(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "AnalysisService", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "AnalysisService.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * analysis.setAnalysisRoots params
+- *
+- * {
+- *   "included": List<FilePath>
+- *   "excluded": List<FilePath>
+- *   "packageRoots": optional Map<FilePath, FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetAnalysisRootsParams implements RequestParams {
+-  List<String> _included;
+-
+-  List<String> _excluded;
+-
+-  Map<String, String> _packageRoots;
+-
+-  /**
+-   * A list of the files and directories that should be analyzed.
+-   */
+-  List<String> get included =3D> _included;
+-
+-  /**
+-   * A list of the files and directories that should be analyzed.
+-   */
+-  void set included(List<String> value) {
+-    assert(value !=3D null);
+-    this._included =3D value;
+-  }
+-
+-  /**
+-   * A list of the files and directories within the included directories =
that
+-   * should not be analyzed.
+-   */
+-  List<String> get excluded =3D> _excluded;
+-
+-  /**
+-   * A list of the files and directories within the included directories =
that
+-   * should not be analyzed.
+-   */
+-  void set excluded(List<String> value) {
+-    assert(value !=3D null);
+-    this._excluded =3D value;
+-  }
+-
+-  /**
+-   * A mapping from source directories to package roots that should overr=
ide
+-   * the normal package: URI resolution mechanism.
+-   *
+-   * If a package root is a directory, then the analyzer will behave as t=
hough
+-   * the associated source directory in the map contains a special pubspe=
c.yaml
+-   * file which resolves any package: URI to the corresponding path withi=
n that
+-   * package root directory. The effect is the same as specifying the pac=
kage
+-   * root directory as a "--package_root" parameter to the Dart VM when
+-   * executing any Dart file inside the source directory.
+-   *
+-   * If a package root is a file, then the analyzer will behave as though=
 that
+-   * file is a ".packages" file in the source directory. The effect is th=
e same
+-   * as specifying the file as a "--packages" parameter to the Dart VM wh=
en
+-   * executing any Dart file inside the source directory.
+-   *
+-   * Files in any directories that are not overridden by this mapping have
+-   * their package: URI's resolved using the normal pubspec.yaml mechanis=
m. If
+-   * this field is absent, or the empty map is specified, that indicates =
that
+-   * the normal pubspec.yaml mechanism should always be used.
+-   */
+-  Map<String, String> get packageRoots =3D> _packageRoots;
+-
+-  /**
+-   * A mapping from source directories to package roots that should overr=
ide
+-   * the normal package: URI resolution mechanism.
+-   *
+-   * If a package root is a directory, then the analyzer will behave as t=
hough
+-   * the associated source directory in the map contains a special pubspe=
c.yaml
+-   * file which resolves any package: URI to the corresponding path withi=
n that
+-   * package root directory. The effect is the same as specifying the pac=
kage
+-   * root directory as a "--package_root" parameter to the Dart VM when
+-   * executing any Dart file inside the source directory.
+-   *
+-   * If a package root is a file, then the analyzer will behave as though=
 that
+-   * file is a ".packages" file in the source directory. The effect is th=
e same
+-   * as specifying the file as a "--packages" parameter to the Dart VM wh=
en
+-   * executing any Dart file inside the source directory.
+-   *
+-   * Files in any directories that are not overridden by this mapping have
+-   * their package: URI's resolved using the normal pubspec.yaml mechanis=
m. If
+-   * this field is absent, or the empty map is specified, that indicates =
that
+-   * the normal pubspec.yaml mechanism should always be used.
+-   */
+-  void set packageRoots(Map<String, String> value) {
+-    this._packageRoots =3D value;
+-  }
+-
+-  AnalysisSetAnalysisRootsParams(List<String> included, List<String> excl=
uded,
+-      {Map<String, String> packageRoots}) {
+-    this.included =3D included;
+-    this.excluded =3D excluded;
+-    this.packageRoots =3D packageRoots;
+-  }
+-
+-  factory AnalysisSetAnalysisRootsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<String> included;
+-      if (json.containsKey("included")) {
+-        included =3D jsonDecoder.decodeList(
+-            jsonPath + ".included", json["included"], jsonDecoder.decodeS=
tring);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "included");
+-      }
+-      List<String> excluded;
+-      if (json.containsKey("excluded")) {
+-        excluded =3D jsonDecoder.decodeList(
+-            jsonPath + ".excluded", json["excluded"], jsonDecoder.decodeS=
tring);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "excluded");
+-      }
+-      Map<String, String> packageRoots;
+-      if (json.containsKey("packageRoots")) {
+-        packageRoots =3D jsonDecoder.decodeMap(
+-            jsonPath + ".packageRoots", json["packageRoots"],
+-            valueDecoder: jsonDecoder.decodeString);
+-      }
+-      return new AnalysisSetAnalysisRootsParams(included, excluded,
+-          packageRoots: packageRoots);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.setAnalysisRoots params", json);
+-    }
+-  }
+-
+-  factory AnalysisSetAnalysisRootsParams.fromRequest(Request request) {
+-    return new AnalysisSetAnalysisRootsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["included"] =3D included;
+-    result["excluded"] =3D excluded;
+-    if (packageRoots !=3D null) {
+-      result["packageRoots"] =3D packageRoots;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setAnalysisRoots", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetAnalysisRootsParams) {
+-      return listEqual(
+-              included, other.included, (String a, String b) =3D> a =3D=
=3D b) &&
+-          listEqual(excluded, other.excluded, (String a, String b) =3D> a=
 =3D=3D b) &&
+-          mapEqual(
+-              packageRoots, other.packageRoots, (String a, String b) =3D>=
 a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, included.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, excluded.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, packageRoots.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.setAnalysisRoots result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetAnalysisRootsResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetAnalysisRootsResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 866004753;
+-  }
+-}
+-
+-/**
+- * analysis.setGeneralSubscriptions params
+- *
+- * {
+- *   "subscriptions": List<GeneralAnalysisService>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetGeneralSubscriptionsParams implements RequestParams {
+-  List<GeneralAnalysisService> _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  List<GeneralAnalysisService> get subscriptions =3D> _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  void set subscriptions(List<GeneralAnalysisService> value) {
+-    assert(value !=3D null);
+-    this._subscriptions =3D value;
+-  }
+-
+-  AnalysisSetGeneralSubscriptionsParams(
+-      List<GeneralAnalysisService> subscriptions) {
+-    this.subscriptions =3D subscriptions;
+-  }
+-
+-  factory AnalysisSetGeneralSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<GeneralAnalysisService> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions =3D jsonDecoder.decodeList(
+-            jsonPath + ".subscriptions",
+-            json["subscriptions"],
+-            (String jsonPath, Object json) =3D>
+-                new GeneralAnalysisService.fromJson(
+-                    jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+-      }
+-      return new AnalysisSetGeneralSubscriptionsParams(subscriptions);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.setGeneralSubscriptions params", json);
+-    }
+-  }
+-
+-  factory AnalysisSetGeneralSubscriptionsParams.fromRequest(Request reque=
st) {
+-    return new AnalysisSetGeneralSubscriptionsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["subscriptions"] =3D subscriptions
+-        .map((GeneralAnalysisService value) =3D> value.toJson())
+-        .toList();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setGeneralSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetGeneralSubscriptionsParams) {
+-      return listEqual(subscriptions, other.subscriptions,
+-          (GeneralAnalysisService a, GeneralAnalysisService b) =3D> a =3D=
=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.setGeneralSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetGeneralSubscriptionsResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetGeneralSubscriptionsResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 386759562;
+-  }
+-}
+-
+-/**
+- * analysis.setPriorityFiles params
+- *
+- * {
+- *   "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetPriorityFilesParams implements RequestParams {
+-  List<String> _files;
+-
+-  /**
+-   * The files that are to be a priority for analysis.
+-   */
+-  List<String> get files =3D> _files;
+-
+-  /**
+-   * The files that are to be a priority for analysis.
+-   */
+-  void set files(List<String> value) {
+-    assert(value !=3D null);
+-    this._files =3D value;
+-  }
+-
+-  AnalysisSetPriorityFilesParams(List<String> files) {
+-    this.files =3D files;
+-  }
+-
+-  factory AnalysisSetPriorityFilesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files =3D jsonDecoder.decodeList(
+-            jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "files");
+-      }
+-      return new AnalysisSetPriorityFilesParams(files);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.setPriorityFiles params", json);
+-    }
+-  }
+-
+-  factory AnalysisSetPriorityFilesParams.fromRequest(Request request) {
+-    return new AnalysisSetPriorityFilesParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["files"] =3D files;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setPriorityFiles", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetPriorityFilesParams) {
+-      return listEqual(files, other.files, (String a, String b) =3D> a =
=3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.setPriorityFiles result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetPriorityFilesResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetPriorityFilesResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 330050055;
+-  }
+-}
+-
+-/**
+- * analysis.setSubscriptions params
+- *
+- * {
+- *   "subscriptions": Map<AnalysisService, List<FilePath>>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetSubscriptionsParams implements RequestParams {
+-  Map<AnalysisService, List<String>> _subscriptions;
+-
+-  /**
+-   * A table mapping services to a list of the files being subscribed to =
the
+-   * service.
+-   */
+-  Map<AnalysisService, List<String>> get subscriptions =3D> _subscription=
s;
+-
+-  /**
+-   * A table mapping services to a list of the files being subscribed to =
the
+-   * service.
+-   */
+-  void set subscriptions(Map<AnalysisService, List<String>> value) {
+-    assert(value !=3D null);
+-    this._subscriptions =3D value;
+-  }
+-
+-  AnalysisSetSubscriptionsParams(
+-      Map<AnalysisService, List<String>> subscriptions) {
+-    this.subscriptions =3D subscriptions;
+-  }
+-
+-  factory AnalysisSetSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      Map<AnalysisService, List<String>> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions =3D jsonDecoder.decodeMap(
+-            jsonPath + ".subscriptions", json["subscriptions"],
+-            keyDecoder: (String jsonPath, Object json) =3D>
+-                new AnalysisService.fromJson(jsonDecoder, jsonPath, json),
+-            valueDecoder: (String jsonPath, Object json) =3D> jsonDecoder
+-                .decodeList(jsonPath, json, jsonDecoder.decodeString));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+-      }
+-      return new AnalysisSetSubscriptionsParams(subscriptions);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.setSubscriptions params", json);
+-    }
+-  }
+-
+-  factory AnalysisSetSubscriptionsParams.fromRequest(Request request) {
+-    return new AnalysisSetSubscriptionsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["subscriptions"] =3D mapMap(subscriptions,
+-        keyCallback: (AnalysisService value) =3D> value.toJson());
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetSubscriptionsParams) {
+-      return mapEqual(
+-          subscriptions,
+-          other.subscriptions,
+-          (List<String> a, List<String> b) =3D>
+-              listEqual(a, b, (String a, String b) =3D> a =3D=3D b));
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.setSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetSubscriptionsResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisSetSubscriptionsResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 218088493;
+-  }
+-}
+-
+-/**
+- * AnalysisStatus
+- *
+- * {
+- *   "isAnalyzing": bool
+- *   "analysisTarget": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisStatus implements HasToJson {
+-  bool _isAnalyzing;
+-
+-  String _analysisTarget;
+-
+-  /**
+-   * True if analysis is currently being performed.
+-   */
+-  bool get isAnalyzing =3D> _isAnalyzing;
+-
+-  /**
+-   * True if analysis is currently being performed.
+-   */
+-  void set isAnalyzing(bool value) {
+-    assert(value !=3D null);
+-    this._isAnalyzing =3D value;
+-  }
+-
+-  /**
+-   * The name of the current target of analysis. This field is omitted if
+-   * analyzing is false.
+-   */
+-  String get analysisTarget =3D> _analysisTarget;
+-
+-  /**
+-   * The name of the current target of analysis. This field is omitted if
+-   * analyzing is false.
+-   */
+-  void set analysisTarget(String value) {
+-    this._analysisTarget =3D value;
+-  }
+-
+-  AnalysisStatus(bool isAnalyzing, {String analysisTarget}) {
+-    this.isAnalyzing =3D isAnalyzing;
+-    this.analysisTarget =3D analysisTarget;
+-  }
+-
+-  factory AnalysisStatus.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool isAnalyzing;
+-      if (json.containsKey("isAnalyzing")) {
+-        isAnalyzing =3D jsonDecoder.decodeBool(
+-            jsonPath + ".isAnalyzing", json["isAnalyzing"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isAnalyzing");
+-      }
+-      String analysisTarget;
+-      if (json.containsKey("analysisTarget")) {
+-        analysisTarget =3D jsonDecoder.decodeString(
+-            jsonPath + ".analysisTarget", json["analysisTarget"]);
+-      }
+-      return new AnalysisStatus(isAnalyzing, analysisTarget: analysisTarg=
et);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "AnalysisStatus", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["isAnalyzing"] =3D isAnalyzing;
+-    if (analysisTarget !=3D null) {
+-      result["analysisTarget"] =3D analysisTarget;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisStatus) {
+-      return isAnalyzing =3D=3D other.isAnalyzing &&
+-          analysisTarget =3D=3D other.analysisTarget;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, isAnalyzing.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, analysisTarget.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.updateContent params
+- *
+- * {
+- *   "files": Map<FilePath, AddContentOverlay | ChangeContentOverlay | Re=
moveContentOverlay>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateContentParams implements RequestParams {
+-  Map<String, dynamic> _files;
+-
+-  /**
+-   * A table mapping the files whose content has changed to a description=
 of
+-   * the content change.
+-   */
+-  Map<String, dynamic> get files =3D> _files;
+-
+-  /**
+-   * A table mapping the files whose content has changed to a description=
 of
+-   * the content change.
+-   */
+-  void set files(Map<String, dynamic> value) {
+-    assert(value !=3D null);
+-    this._files =3D value;
+-  }
+-
+-  AnalysisUpdateContentParams(Map<String, dynamic> files) {
+-    this.files =3D files;
+-  }
+-
+-  factory AnalysisUpdateContentParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      Map<String, dynamic> files;
+-      if (json.containsKey("files")) {
+-        files =3D jsonDecoder.decodeMap(jsonPath + ".files", json["files"=
],
+-            valueDecoder: (String jsonPath, Object json) =3D>
+-                jsonDecoder.decodeUnion(jsonPath, json, "type", {
+-                  "add": (String jsonPath, Object json) =3D>
+-                      new AddContentOverlay.fromJson(
+-                          jsonDecoder, jsonPath, json),
+-                  "change": (String jsonPath, Object json) =3D>
+-                      new ChangeContentOverlay.fromJson(
+-                          jsonDecoder, jsonPath, json),
+-                  "remove": (String jsonPath, Object json) =3D>
+-                      new RemoveContentOverlay.fromJson(
+-                          jsonDecoder, jsonPath, json)
+-                }));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "files");
+-      }
+-      return new AnalysisUpdateContentParams(files);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.updateContent params", json);
+-    }
+-  }
+-
+-  factory AnalysisUpdateContentParams.fromRequest(Request request) {
+-    return new AnalysisUpdateContentParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["files"] =3D
+-        mapMap(files, valueCallback: (dynamic value) =3D> value.toJson());
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.updateContent", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisUpdateContentParams) {
+-      return mapEqual(files, other.files, (dynamic a, dynamic b) =3D> a =
=3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.updateContent result
+- *
+- * {
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateContentResult implements ResponseResult {
+-  AnalysisUpdateContentResult();
+-
+-  factory AnalysisUpdateContentResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      return new AnalysisUpdateContentResult();
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.updateContent result", json);
+-    }
+-  }
+-
+-  factory AnalysisUpdateContentResult.fromResponse(Response response) {
+-    return new AnalysisUpdateContentResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisUpdateContentResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.updateOptions params
+- *
+- * {
+- *   "options": AnalysisOptions
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateOptionsParams implements RequestParams {
+-  AnalysisOptions _options;
+-
+-  /**
+-   * The options that are to be used to control analysis.
+-   */
+-  AnalysisOptions get options =3D> _options;
+-
+-  /**
+-   * The options that are to be used to control analysis.
+-   */
+-  void set options(AnalysisOptions value) {
+-    assert(value !=3D null);
+-    this._options =3D value;
+-  }
+-
+-  AnalysisUpdateOptionsParams(AnalysisOptions options) {
+-    this.options =3D options;
+-  }
+-
+-  factory AnalysisUpdateOptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      AnalysisOptions options;
+-      if (json.containsKey("options")) {
+-        options =3D new AnalysisOptions.fromJson(
+-            jsonDecoder, jsonPath + ".options", json["options"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "options");
+-      }
+-      return new AnalysisUpdateOptionsParams(options);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.updateOptions params", json);
+-    }
+-  }
+-
+-  factory AnalysisUpdateOptionsParams.fromRequest(Request request) {
+-    return new AnalysisUpdateOptionsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["options"] =3D options.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.updateOptions", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisUpdateOptionsParams) {
+-      return options =3D=3D other.options;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, options.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.updateOptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateOptionsResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalysisUpdateOptionsResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 179689467;
+-  }
+-}
+-
+-/**
+- * analytics.enable params
+- *
+- * {
+- *   "value": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsEnableParams implements RequestParams {
+-  bool _value;
+-
+-  /**
+-   * Enable or disable analytics.
+-   */
+-  bool get value =3D> _value;
+-
+-  /**
+-   * Enable or disable analytics.
+-   */
+-  void set value(bool value) {
+-    assert(value !=3D null);
+-    this._value =3D value;
+-  }
+-
+-  AnalyticsEnableParams(bool value) {
+-    this.value =3D value;
+-  }
+-
+-  factory AnalyticsEnableParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool value;
+-      if (json.containsKey("value")) {
+-        value =3D jsonDecoder.decodeBool(jsonPath + ".value", json["value=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "value");
+-      }
+-      return new AnalyticsEnableParams(value);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analytics.enable params", jso=
n);
+-    }
+-  }
+-
+-  factory AnalyticsEnableParams.fromRequest(Request request) {
+-    return new AnalyticsEnableParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["value"] =3D value;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.enable", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsEnableParams) {
+-      return value =3D=3D other.value;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, value.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analytics.enable result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsEnableResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsEnableResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 237990792;
+-  }
+-}
+-
+-/**
+- * analytics.isEnabled params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsIsEnabledParams implements RequestParams {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.isEnabled", null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsIsEnabledParams) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 57215544;
+-  }
+-}
+-
+-/**
+- * analytics.isEnabled result
+- *
+- * {
+- *   "enabled": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsIsEnabledResult implements ResponseResult {
+-  bool _enabled;
+-
+-  /**
+-   * Whether sending analytics is enabled or not.
+-   */
+-  bool get enabled =3D> _enabled;
+-
+-  /**
+-   * Whether sending analytics is enabled or not.
+-   */
+-  void set enabled(bool value) {
+-    assert(value !=3D null);
+-    this._enabled =3D value;
+-  }
+-
+-  AnalyticsIsEnabledResult(bool enabled) {
+-    this.enabled =3D enabled;
+-  }
+-
+-  factory AnalyticsIsEnabledResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool enabled;
+-      if (json.containsKey("enabled")) {
+-        enabled =3D
+-            jsonDecoder.decodeBool(jsonPath + ".enabled", json["enabled"]=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "enabled");
+-      }
+-      return new AnalyticsIsEnabledResult(enabled);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analytics.isEnabled result", =
json);
+-    }
+-  }
+-
+-  factory AnalyticsIsEnabledResult.fromResponse(Response response) {
+-    return new AnalyticsIsEnabledResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["enabled"] =3D enabled;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsIsEnabledResult) {
+-      return enabled =3D=3D other.enabled;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, enabled.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analytics.sendEvent params
+- *
+- * {
+- *   "action": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendEventParams implements RequestParams {
+-  String _action;
+-
+-  /**
+-   * The value used to indicate which action was performed.
+-   */
+-  String get action =3D> _action;
+-
+-  /**
+-   * The value used to indicate which action was performed.
+-   */
+-  void set action(String value) {
+-    assert(value !=3D null);
+-    this._action =3D value;
+-  }
+-
+-  AnalyticsSendEventParams(String action) {
+-    this.action =3D action;
+-  }
+-
+-  factory AnalyticsSendEventParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String action;
+-      if (json.containsKey("action")) {
+-        action =3D jsonDecoder.decodeString(jsonPath + ".action", json["a=
ction"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "action");
+-      }
+-      return new AnalyticsSendEventParams(action);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analytics.sendEvent params", =
json);
+-    }
+-  }
+-
+-  factory AnalyticsSendEventParams.fromRequest(Request request) {
+-    return new AnalyticsSendEventParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["action"] =3D action;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.sendEvent", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsSendEventParams) {
+-      return action =3D=3D other.action;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, action.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analytics.sendEvent result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendEventResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsSendEventResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 227063188;
+-  }
+-}
+-
+-/**
+- * analytics.sendTiming params
+- *
+- * {
+- *   "event": String
+- *   "millis": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendTimingParams implements RequestParams {
+-  String _event;
+-
+-  int _millis;
+-
+-  /**
+-   * The name of the event.
+-   */
+-  String get event =3D> _event;
+-
+-  /**
+-   * The name of the event.
+-   */
+-  void set event(String value) {
+-    assert(value !=3D null);
+-    this._event =3D value;
+-  }
+-
+-  /**
+-   * The duration of the event in milliseconds.
+-   */
+-  int get millis =3D> _millis;
+-
+-  /**
+-   * The duration of the event in milliseconds.
+-   */
+-  void set millis(int value) {
+-    assert(value !=3D null);
+-    this._millis =3D value;
+-  }
+-
+-  AnalyticsSendTimingParams(String event, int millis) {
+-    this.event =3D event;
+-    this.millis =3D millis;
+-  }
+-
+-  factory AnalyticsSendTimingParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String event;
+-      if (json.containsKey("event")) {
+-        event =3D jsonDecoder.decodeString(jsonPath + ".event", json["eve=
nt"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "event");
+-      }
+-      int millis;
+-      if (json.containsKey("millis")) {
+-        millis =3D jsonDecoder.decodeInt(jsonPath + ".millis", json["mill=
is"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "millis");
+-      }
+-      return new AnalyticsSendTimingParams(event, millis);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analytics.sendTiming params",=
 json);
+-    }
+-  }
+-
+-  factory AnalyticsSendTimingParams.fromRequest(Request request) {
+-    return new AnalyticsSendTimingParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["event"] =3D event;
+-    result["millis"] =3D millis;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.sendTiming", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsSendTimingParams) {
+-      return event =3D=3D other.event && millis =3D=3D other.millis;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, event.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, millis.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analytics.sendTiming result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendTimingResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is AnalyticsSendTimingResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 875010924;
+-  }
+-}
+-
+-/**
+- * ClosingLabel
+- *
+- * {
+- *   "offset": int
+- *   "length": int
+- *   "label": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ClosingLabel implements HasToJson {
+-  int _offset;
+-
+-  int _length;
+-
+-  String _label;
+-
+-  /**
+-   * The offset of the construct being labelled.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the construct being labelled.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the whole construct to be labelled.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the whole construct to be labelled.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  /**
+-   * The label associated with this range that should be displayed to the=
 user.
+-   */
+-  String get label =3D> _label;
+-
+-  /**
+-   * The label associated with this range that should be displayed to the=
 user.
+-   */
+-  void set label(String value) {
+-    assert(value !=3D null);
+-    this._label =3D value;
+-  }
+-
+-  ClosingLabel(int offset, int length, String label) {
+-    this.offset =3D offset;
+-    this.length =3D length;
+-    this.label =3D label;
+-  }
+-
+-  factory ClosingLabel.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String label;
+-      if (json.containsKey("label")) {
+-        label =3D jsonDecoder.decodeString(jsonPath + ".label", json["lab=
el"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "label");
+-      }
+-      return new ClosingLabel(offset, length, label);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "ClosingLabel", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    result["label"] =3D label;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ClosingLabel) {
+-      return offset =3D=3D other.offset &&
+-          length =3D=3D other.length &&
+-          label =3D=3D other.label;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, label.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * completion.getSuggestions params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class CompletionGetSuggestionsParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  /**
+-   * The file containing the point at which suggestions are to be made.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the point at which suggestions are to be made.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset within the file at which suggestions are to be made.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset within the file at which suggestions are to be made.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  CompletionGetSuggestionsParams(String file, int offset) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-  }
+-
+-  factory CompletionGetSuggestionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new CompletionGetSuggestionsParams(file, offset);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "completion.getSuggestions params", json);
+-    }
+-  }
+-
+-  factory CompletionGetSuggestionsParams.fromRequest(Request request) {
+-    return new CompletionGetSuggestionsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "completion.getSuggestions", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is CompletionGetSuggestionsParams) {
+-      return file =3D=3D other.file && offset =3D=3D other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * completion.getSuggestions result
+- *
+- * {
+- *   "id": CompletionId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class CompletionGetSuggestionsResult implements ResponseResult {
+-  String _id;
+-
+-  /**
+-   * The identifier used to associate results with this completion reques=
t.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier used to associate results with this completion reques=
t.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  CompletionGetSuggestionsResult(String id) {
+-    this.id =3D id;
+-  }
+-
+-  factory CompletionGetSuggestionsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      return new CompletionGetSuggestionsResult(id);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "completion.getSuggestions result", json);
+-    }
+-  }
+-
+-  factory CompletionGetSuggestionsResult.fromResponse(Response response) {
+-    return new CompletionGetSuggestionsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is CompletionGetSuggestionsResult) {
+-      return id =3D=3D other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * completion.results params
+- *
+- * {
+- *   "id": CompletionId
+- *   "replacementOffset": int
+- *   "replacementLength": int
+- *   "results": List<CompletionSuggestion>
+- *   "isLast": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class CompletionResultsParams implements HasToJson {
+-  String _id;
+-
+-  int _replacementOffset;
+-
+-  int _replacementLength;
+-
+-  List<CompletionSuggestion> _results;
+-
+-  bool _isLast;
+-
+-  /**
+-   * The id associated with the completion.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The id associated with the completion.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  /**
+-   * The offset of the start of the text to be replaced. This will be dif=
ferent
+-   * 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 identi=
fier.
+-   */
+-  int get replacementOffset =3D> _replacementOffset;
+-
+-  /**
+-   * The offset of the start of the text to be replaced. This will be dif=
ferent
+-   * 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 identi=
fier.
+-   */
+-  void set replacementOffset(int value) {
+-    assert(value !=3D null);
+-    this._replacementOffset =3D value;
+-  }
+-
+-  /**
+-   * The length of the text to be replaced if the remainder of the identi=
fier
+-   * containing the cursor is to be replaced when the suggestion is appli=
ed
+-   * (that is, the number of characters in the existing identifier).
+-   */
+-  int get replacementLength =3D> _replacementLength;
+-
+-  /**
+-   * The length of the text to be replaced if the remainder of the identi=
fier
+-   * containing the cursor is to be replaced when the suggestion is appli=
ed
+-   * (that is, the number of characters in the existing identifier).
+-   */
+-  void set replacementLength(int value) {
+-    assert(value !=3D null);
+-    this._replacementLength =3D value;
+-  }
+-
+-  /**
+-   * The completion suggestions being reported. The notification contains=
 all
+-   * possible completions at the requested cursor position, even those th=
at 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.
+-   */
+-  List<CompletionSuggestion> get results =3D> _results;
+-
+-  /**
+-   * The completion suggestions being reported. The notification contains=
 all
+-   * possible completions at the requested cursor position, even those th=
at 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.
+-   */
+-  void set results(List<CompletionSuggestion> value) {
+-    assert(value !=3D null);
+-    this._results =3D value;
+-  }
+-
+-  /**
+-   * True if this is that last set of results that will be returned for t=
he
+-   * indicated completion.
+-   */
+-  bool get isLast =3D> _isLast;
+-
+-  /**
+-   * True if this is that last set of results that will be returned for t=
he
+-   * indicated completion.
+-   */
+-  void set isLast(bool value) {
+-    assert(value !=3D null);
+-    this._isLast =3D value;
+-  }
+-
+-  CompletionResultsParams(String id, int replacementOffset,
+-      int replacementLength, List<CompletionSuggestion> results, bool isL=
ast) {
+-    this.id =3D id;
+-    this.replacementOffset =3D replacementOffset;
+-    this.replacementLength =3D replacementLength;
+-    this.results =3D results;
+-    this.isLast =3D isLast;
+-  }
+-
+-  factory CompletionResultsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      int replacementOffset;
+-      if (json.containsKey("replacementOffset")) {
+-        replacementOffset =3D jsonDecoder.decodeInt(
+-            jsonPath + ".replacementOffset", json["replacementOffset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "replacementOffset");
+-      }
+-      int replacementLength;
+-      if (json.containsKey("replacementLength")) {
+-        replacementLength =3D jsonDecoder.decodeInt(
+-            jsonPath + ".replacementLength", json["replacementLength"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "replacementLength");
+-      }
+-      List<CompletionSuggestion> results;
+-      if (json.containsKey("results")) {
+-        results =3D jsonDecoder.decodeList(
+-            jsonPath + ".results",
+-            json["results"],
+-            (String jsonPath, Object json) =3D>
+-                new CompletionSuggestion.fromJson(jsonDecoder, jsonPath, =
json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "results");
+-      }
+-      bool isLast;
+-      if (json.containsKey("isLast")) {
+-        isLast =3D jsonDecoder.decodeBool(jsonPath + ".isLast", json["isL=
ast"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isLast");
+-      }
+-      return new CompletionResultsParams(
+-          id, replacementOffset, replacementLength, results, isLast);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "completion.results params", j=
son);
+-    }
+-  }
+-
+-  factory CompletionResultsParams.fromNotification(Notification notificat=
ion) {
+-    return new CompletionResultsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    result["replacementOffset"] =3D replacementOffset;
+-    result["replacementLength"] =3D replacementLength;
+-    result["results"] =3D
+-        results.map((CompletionSuggestion value) =3D> value.toJson()).toL=
ist();
+-    result["isLast"] =3D isLast;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("completion.results", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is CompletionResultsParams) {
+-      return id =3D=3D other.id &&
+-          replacementOffset =3D=3D other.replacementOffset &&
+-          replacementLength =3D=3D other.replacementLength &&
+-          listEqual(results, other.results,
+-              (CompletionSuggestion a, CompletionSuggestion b) =3D> a =3D=
=3D b) &&
+-          isLast =3D=3D other.isLast;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, replacementOffset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, replacementLength.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, results.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, isLast.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ContextData
+- *
+- * {
+- *   "name": String
+- *   "explicitFileCount": int
+- *   "implicitFileCount": int
+- *   "workItemQueueLength": int
+- *   "cacheEntryExceptions": List<String>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ContextData implements HasToJson {
+-  String _name;
+-
+-  int _explicitFileCount;
+-
+-  int _implicitFileCount;
+-
+-  int _workItemQueueLength;
+-
+-  List<String> _cacheEntryExceptions;
+-
+-  /**
+-   * The name of the context.
+-   */
+-  String get name =3D> _name;
+-
+-  /**
+-   * The name of the context.
+-   */
+-  void set name(String value) {
+-    assert(value !=3D null);
+-    this._name =3D value;
+-  }
+-
+-  /**
+-   * Explicitly analyzed files.
+-   */
+-  int get explicitFileCount =3D> _explicitFileCount;
+-
+-  /**
+-   * Explicitly analyzed files.
+-   */
+-  void set explicitFileCount(int value) {
+-    assert(value !=3D null);
+-    this._explicitFileCount =3D value;
+-  }
+-
+-  /**
+-   * Implicitly analyzed files.
+-   */
+-  int get implicitFileCount =3D> _implicitFileCount;
+-
+-  /**
+-   * Implicitly analyzed files.
+-   */
+-  void set implicitFileCount(int value) {
+-    assert(value !=3D null);
+-    this._implicitFileCount =3D value;
+-  }
+-
+-  /**
+-   * The number of work items in the queue.
+-   */
+-  int get workItemQueueLength =3D> _workItemQueueLength;
+-
+-  /**
+-   * The number of work items in the queue.
+-   */
+-  void set workItemQueueLength(int value) {
+-    assert(value !=3D null);
+-    this._workItemQueueLength =3D value;
+-  }
+-
+-  /**
+-   * Exceptions associated with cache entries.
+-   */
+-  List<String> get cacheEntryExceptions =3D> _cacheEntryExceptions;
+-
+-  /**
+-   * Exceptions associated with cache entries.
+-   */
+-  void set cacheEntryExceptions(List<String> value) {
+-    assert(value !=3D null);
+-    this._cacheEntryExceptions =3D value;
+-  }
+-
+-  ContextData(String name, int explicitFileCount, int implicitFileCount,
+-      int workItemQueueLength, List<String> cacheEntryExceptions) {
+-    this.name =3D name;
+-    this.explicitFileCount =3D explicitFileCount;
+-    this.implicitFileCount =3D implicitFileCount;
+-    this.workItemQueueLength =3D workItemQueueLength;
+-    this.cacheEntryExceptions =3D cacheEntryExceptions;
+-  }
+-
+-  factory ContextData.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      int explicitFileCount;
+-      if (json.containsKey("explicitFileCount")) {
+-        explicitFileCount =3D jsonDecoder.decodeInt(
+-            jsonPath + ".explicitFileCount", json["explicitFileCount"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "explicitFileCount");
+-      }
+-      int implicitFileCount;
+-      if (json.containsKey("implicitFileCount")) {
+-        implicitFileCount =3D jsonDecoder.decodeInt(
+-            jsonPath + ".implicitFileCount", json["implicitFileCount"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "implicitFileCount");
+-      }
+-      int workItemQueueLength;
+-      if (json.containsKey("workItemQueueLength")) {
+-        workItemQueueLength =3D jsonDecoder.decodeInt(
+-            jsonPath + ".workItemQueueLength", json["workItemQueueLength"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "workItemQueueLength");
+-      }
+-      List<String> cacheEntryExceptions;
+-      if (json.containsKey("cacheEntryExceptions")) {
+-        cacheEntryExceptions =3D jsonDecoder.decodeList(
+-            jsonPath + ".cacheEntryExceptions",
+-            json["cacheEntryExceptions"],
+-            jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "cacheEntryExceptions");
+-      }
+-      return new ContextData(name, explicitFileCount, implicitFileCount,
+-          workItemQueueLength, cacheEntryExceptions);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "ContextData", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["name"] =3D name;
+-    result["explicitFileCount"] =3D explicitFileCount;
+-    result["implicitFileCount"] =3D implicitFileCount;
+-    result["workItemQueueLength"] =3D workItemQueueLength;
+-    result["cacheEntryExceptions"] =3D cacheEntryExceptions;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ContextData) {
+-      return name =3D=3D other.name &&
+-          explicitFileCount =3D=3D other.explicitFileCount &&
+-          implicitFileCount =3D=3D other.implicitFileCount &&
+-          workItemQueueLength =3D=3D other.workItemQueueLength &&
+-          listEqual(cacheEntryExceptions, other.cacheEntryExceptions,
+-              (String a, String b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, explicitFileCount.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, implicitFileCount.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, workItemQueueLength.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, cacheEntryExceptions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * convertGetterToMethod feedback
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertGetterToMethodFeedback extends RefactoringFeedback
+-    implements HasToJson {
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ConvertGetterToMethodFeedback) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 616032599;
+-  }
+-}
+-
+-/**
+- * convertGetterToMethod options
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertGetterToMethodOptions extends RefactoringOptions
+-    implements HasToJson {
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ConvertGetterToMethodOptions) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 488848400;
+-  }
+-}
+-
+-/**
+- * convertMethodToGetter feedback
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertMethodToGetterFeedback extends RefactoringFeedback
+-    implements HasToJson {
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ConvertMethodToGetterFeedback) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 165291526;
+-  }
+-}
+-
+-/**
+- * convertMethodToGetter options
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertMethodToGetterOptions extends RefactoringOptions
+-    implements HasToJson {
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ConvertMethodToGetterOptions) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 27952290;
+-  }
+-}
+-
+-/**
+- * diagnostic.getDiagnostics params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetDiagnosticsParams implements RequestParams {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "diagnostic.getDiagnostics", null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is DiagnosticGetDiagnosticsParams) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 587526202;
+-  }
+-}
+-
+-/**
+- * diagnostic.getDiagnostics result
+- *
+- * {
+- *   "contexts": List<ContextData>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetDiagnosticsResult implements ResponseResult {
+-  List<ContextData> _contexts;
+-
+-  /**
+-   * The list of analysis contexts.
+-   */
+-  List<ContextData> get contexts =3D> _contexts;
+-
+-  /**
+-   * The list of analysis contexts.
+-   */
+-  void set contexts(List<ContextData> value) {
+-    assert(value !=3D null);
+-    this._contexts =3D value;
+-  }
+-
+-  DiagnosticGetDiagnosticsResult(List<ContextData> contexts) {
+-    this.contexts =3D contexts;
+-  }
+-
+-  factory DiagnosticGetDiagnosticsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<ContextData> contexts;
+-      if (json.containsKey("contexts")) {
+-        contexts =3D jsonDecoder.decodeList(
+-            jsonPath + ".contexts",
+-            json["contexts"],
+-            (String jsonPath, Object json) =3D>
+-                new ContextData.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "contexts");
+-      }
+-      return new DiagnosticGetDiagnosticsResult(contexts);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "diagnostic.getDiagnostics result", json);
+-    }
+-  }
+-
+-  factory DiagnosticGetDiagnosticsResult.fromResponse(Response response) {
+-    return new DiagnosticGetDiagnosticsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["contexts"] =3D
+-        contexts.map((ContextData value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is DiagnosticGetDiagnosticsResult) {
+-      return listEqual(
+-          contexts, other.contexts, (ContextData a, ContextData b) =3D> a=
 =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, contexts.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * diagnostic.getServerPort params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetServerPortParams implements RequestParams {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "diagnostic.getServerPort", null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is DiagnosticGetServerPortParams) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 367508704;
+-  }
+-}
+-
+-/**
+- * diagnostic.getServerPort result
+- *
+- * {
+- *   "port": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetServerPortResult implements ResponseResult {
+-  int _port;
+-
+-  /**
+-   * The diagnostic server port.
+-   */
+-  int get port =3D> _port;
+-
+-  /**
+-   * The diagnostic server port.
+-   */
+-  void set port(int value) {
+-    assert(value !=3D null);
+-    this._port =3D value;
+-  }
+-
+-  DiagnosticGetServerPortResult(int port) {
+-    this.port =3D port;
+-  }
+-
+-  factory DiagnosticGetServerPortResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int port;
+-      if (json.containsKey("port")) {
+-        port =3D jsonDecoder.decodeInt(jsonPath + ".port", json["port"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "port");
+-      }
+-      return new DiagnosticGetServerPortResult(port);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "diagnostic.getServerPort result", json);
+-    }
+-  }
+-
+-  factory DiagnosticGetServerPortResult.fromResponse(Response response) {
+-    return new DiagnosticGetServerPortResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["port"] =3D port;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is DiagnosticGetServerPortResult) {
+-      return port =3D=3D other.port;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, port.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.format params
+- *
+- * {
+- *   "file": FilePath
+- *   "selectionOffset": int
+- *   "selectionLength": int
+- *   "lineLength": optional int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditFormatParams implements RequestParams {
+-  String _file;
+-
+-  int _selectionOffset;
+-
+-  int _selectionLength;
+-
+-  int _lineLength;
+-
+-  /**
+-   * The file containing the code to be formatted.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the code to be formatted.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the current selection in the file.
+-   */
+-  int get selectionOffset =3D> _selectionOffset;
+-
+-  /**
+-   * The offset of the current selection in the file.
+-   */
+-  void set selectionOffset(int value) {
+-    assert(value !=3D null);
+-    this._selectionOffset =3D value;
+-  }
+-
+-  /**
+-   * The length of the current selection in the file.
+-   */
+-  int get selectionLength =3D> _selectionLength;
+-
+-  /**
+-   * The length of the current selection in the file.
+-   */
+-  void set selectionLength(int value) {
+-    assert(value !=3D null);
+-    this._selectionLength =3D value;
+-  }
+-
+-  /**
+-   * The line length to be used by the formatter.
+-   */
+-  int get lineLength =3D> _lineLength;
+-
+-  /**
+-   * The line length to be used by the formatter.
+-   */
+-  void set lineLength(int value) {
+-    this._lineLength =3D value;
+-  }
+-
+-  EditFormatParams(String file, int selectionOffset, int selectionLength,
+-      {int lineLength}) {
+-    this.file =3D file;
+-    this.selectionOffset =3D selectionOffset;
+-    this.selectionLength =3D selectionLength;
+-    this.lineLength =3D lineLength;
+-  }
+-
+-  factory EditFormatParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int selectionOffset;
+-      if (json.containsKey("selectionOffset")) {
+-        selectionOffset =3D jsonDecoder.decodeInt(
+-            jsonPath + ".selectionOffset", json["selectionOffset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "selectionOffset");
+-      }
+-      int selectionLength;
+-      if (json.containsKey("selectionLength")) {
+-        selectionLength =3D jsonDecoder.decodeInt(
+-            jsonPath + ".selectionLength", json["selectionLength"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "selectionLength");
+-      }
+-      int lineLength;
+-      if (json.containsKey("lineLength")) {
+-        lineLength =3D
+-            jsonDecoder.decodeInt(jsonPath + ".lineLength", json["lineLen=
gth"]);
+-      }
+-      return new EditFormatParams(file, selectionOffset, selectionLength,
+-          lineLength: lineLength);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.format params", json);
+-    }
+-  }
+-
+-  factory EditFormatParams.fromRequest(Request request) {
+-    return new EditFormatParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["selectionOffset"] =3D selectionOffset;
+-    result["selectionLength"] =3D selectionLength;
+-    if (lineLength !=3D null) {
+-      result["lineLength"] =3D lineLength;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.format", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditFormatParams) {
+-      return file =3D=3D other.file &&
+-          selectionOffset =3D=3D other.selectionOffset &&
+-          selectionLength =3D=3D other.selectionLength &&
+-          lineLength =3D=3D other.lineLength;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, selectionLength.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, lineLength.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.format result
+- *
+- * {
+- *   "edits": List<SourceEdit>
+- *   "selectionOffset": int
+- *   "selectionLength": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditFormatResult implements ResponseResult {
+-  List<SourceEdit> _edits;
+-
+-  int _selectionOffset;
+-
+-  int _selectionLength;
+-
+-  /**
+-   * The edit(s) to be applied in order to format the code. The list will=
 be
+-   * empty if the code was already formatted (there are no changes).
+-   */
+-  List<SourceEdit> get edits =3D> _edits;
+-
+-  /**
+-   * The edit(s) to be applied in order to format the code. The list will=
 be
+-   * empty if the code was already formatted (there are no changes).
+-   */
+-  void set edits(List<SourceEdit> value) {
+-    assert(value !=3D null);
+-    this._edits =3D value;
+-  }
+-
+-  /**
+-   * The offset of the selection after formatting the code.
+-   */
+-  int get selectionOffset =3D> _selectionOffset;
+-
+-  /**
+-   * The offset of the selection after formatting the code.
+-   */
+-  void set selectionOffset(int value) {
+-    assert(value !=3D null);
+-    this._selectionOffset =3D value;
+-  }
+-
+-  /**
+-   * The length of the selection after formatting the code.
+-   */
+-  int get selectionLength =3D> _selectionLength;
+-
+-  /**
+-   * The length of the selection after formatting the code.
+-   */
+-  void set selectionLength(int value) {
+-    assert(value !=3D null);
+-    this._selectionLength =3D value;
+-  }
+-
+-  EditFormatResult(
+-      List<SourceEdit> edits, int selectionOffset, int selectionLength) {
+-    this.edits =3D edits;
+-    this.selectionOffset =3D selectionOffset;
+-    this.selectionLength =3D selectionLength;
+-  }
+-
+-  factory EditFormatResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<SourceEdit> edits;
+-      if (json.containsKey("edits")) {
+-        edits =3D jsonDecoder.decodeList(
+-            jsonPath + ".edits",
+-            json["edits"],
+-            (String jsonPath, Object json) =3D>
+-                new SourceEdit.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "edits");
+-      }
+-      int selectionOffset;
+-      if (json.containsKey("selectionOffset")) {
+-        selectionOffset =3D jsonDecoder.decodeInt(
+-            jsonPath + ".selectionOffset", json["selectionOffset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "selectionOffset");
+-      }
+-      int selectionLength;
+-      if (json.containsKey("selectionLength")) {
+-        selectionLength =3D jsonDecoder.decodeInt(
+-            jsonPath + ".selectionLength", json["selectionLength"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "selectionLength");
+-      }
+-      return new EditFormatResult(edits, selectionOffset, selectionLength=
);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.format result", json);
+-    }
+-  }
+-
+-  factory EditFormatResult.fromResponse(Response response) {
+-    return new EditFormatResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["edits"] =3D edits.map((SourceEdit value) =3D> value.toJson())=
.toList();
+-    result["selectionOffset"] =3D selectionOffset;
+-    result["selectionLength"] =3D selectionLength;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditFormatResult) {
+-      return listEqual(
+-              edits, other.edits, (SourceEdit a, SourceEdit b) =3D> a =3D=
=3D b) &&
+-          selectionOffset =3D=3D other.selectionOffset &&
+-          selectionLength =3D=3D other.selectionLength;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, edits.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, selectionLength.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getAssists params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- *   "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAssistsParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  int _length;
+-
+-  /**
+-   * The file containing the code for which assists are being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the code for which assists are being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the code for which assists are being requested.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the code for which assists are being requested.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the code for which assists are being requested.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the code for which assists are being requested.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  EditGetAssistsParams(String file, int offset, int length) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.length =3D length;
+-  }
+-
+-  factory EditGetAssistsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      return new EditGetAssistsParams(file, offset, length);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists params", json=
);
+-    }
+-  }
+-
+-  factory EditGetAssistsParams.fromRequest(Request request) {
+-    return new EditGetAssistsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getAssists", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetAssistsParams) {
+-      return file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          length =3D=3D other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getAssists result
+- *
+- * {
+- *   "assists": List<SourceChange>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAssistsResult implements ResponseResult {
+-  List<SourceChange> _assists;
+-
+-  /**
+-   * The assists that are available at the given location.
+-   */
+-  List<SourceChange> get assists =3D> _assists;
+-
+-  /**
+-   * The assists that are available at the given location.
+-   */
+-  void set assists(List<SourceChange> value) {
+-    assert(value !=3D null);
+-    this._assists =3D value;
+-  }
+-
+-  EditGetAssistsResult(List<SourceChange> assists) {
+-    this.assists =3D assists;
+-  }
+-
+-  factory EditGetAssistsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<SourceChange> assists;
+-      if (json.containsKey("assists")) {
+-        assists =3D jsonDecoder.decodeList(
+-            jsonPath + ".assists",
+-            json["assists"],
+-            (String jsonPath, Object json) =3D>
+-                new SourceChange.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "assists");
+-      }
+-      return new EditGetAssistsResult(assists);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists result", json=
);
+-    }
+-  }
+-
+-  factory EditGetAssistsResult.fromResponse(Response response) {
+-    return new EditGetAssistsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["assists"] =3D
+-        assists.map((SourceChange value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetAssistsResult) {
+-      return listEqual(
+-          assists, other.assists, (SourceChange a, SourceChange b) =3D> a=
 =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, assists.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getAvailableRefactorings params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- *   "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAvailableRefactoringsParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  int _length;
+-
+-  /**
+-   * The file containing the code on which the refactoring would be based.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the code on which the refactoring would be based.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the code on which the refactoring would be based.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the code on which the refactoring would be based.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the code on which the refactoring would be based.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the code on which the refactoring would be based.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  EditGetAvailableRefactoringsParams(String file, int offset, int length)=
 {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.length =3D length;
+-  }
+-
+-  factory EditGetAvailableRefactoringsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      return new EditGetAvailableRefactoringsParams(file, offset, length);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.getAvailableRefactorings params", json);
+-    }
+-  }
+-
+-  factory EditGetAvailableRefactoringsParams.fromRequest(Request request)=
 {
+-    return new EditGetAvailableRefactoringsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getAvailableRefactorings", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetAvailableRefactoringsParams) {
+-      return file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          length =3D=3D other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getAvailableRefactorings result
+- *
+- * {
+- *   "kinds": List<RefactoringKind>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAvailableRefactoringsResult implements ResponseResult {
+-  List<RefactoringKind> _kinds;
+-
+-  /**
+-   * The kinds of refactorings that are valid for the given selection.
+-   */
+-  List<RefactoringKind> get kinds =3D> _kinds;
+-
+-  /**
+-   * The kinds of refactorings that are valid for the given selection.
+-   */
+-  void set kinds(List<RefactoringKind> value) {
+-    assert(value !=3D null);
+-    this._kinds =3D value;
+-  }
+-
+-  EditGetAvailableRefactoringsResult(List<RefactoringKind> kinds) {
+-    this.kinds =3D kinds;
+-  }
+-
+-  factory EditGetAvailableRefactoringsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<RefactoringKind> kinds;
+-      if (json.containsKey("kinds")) {
+-        kinds =3D jsonDecoder.decodeList(
+-            jsonPath + ".kinds",
+-            json["kinds"],
+-            (String jsonPath, Object json) =3D>
+-                new RefactoringKind.fromJson(jsonDecoder, jsonPath, json)=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kinds");
+-      }
+-      return new EditGetAvailableRefactoringsResult(kinds);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.getAvailableRefactorings result", json);
+-    }
+-  }
+-
+-  factory EditGetAvailableRefactoringsResult.fromResponse(Response respon=
se) {
+-    return new EditGetAvailableRefactoringsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["kinds"] =3D
+-        kinds.map((RefactoringKind value) =3D> value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetAvailableRefactoringsResult) {
+-      return listEqual(
+-          kinds, other.kinds, (RefactoringKind a, RefactoringKind b) =3D>=
 a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, kinds.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getFixes params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetFixesParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  /**
+-   * The file containing the errors for which fixes are being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the errors for which fixes are being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset used to select the errors for which fixes will be returne=
d.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset used to select the errors for which fixes will be returne=
d.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  EditGetFixesParams(String file, int offset) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-  }
+-
+-  factory EditGetFixesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new EditGetFixesParams(file, offset);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes params", json);
+-    }
+-  }
+-
+-  factory EditGetFixesParams.fromRequest(Request request) {
+-    return new EditGetFixesParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getFixes", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetFixesParams) {
+-      return file =3D=3D other.file && offset =3D=3D other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getFixes result
+- *
+- * {
+- *   "fixes": List<AnalysisErrorFixes>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetFixesResult implements ResponseResult {
+-  List<AnalysisErrorFixes> _fixes;
+-
+-  /**
+-   * The fixes that are available for the errors at the given offset.
+-   */
+-  List<AnalysisErrorFixes> get fixes =3D> _fixes;
+-
+-  /**
+-   * The fixes that are available for the errors at the given offset.
+-   */
+-  void set fixes(List<AnalysisErrorFixes> value) {
+-    assert(value !=3D null);
+-    this._fixes =3D value;
+-  }
+-
+-  EditGetFixesResult(List<AnalysisErrorFixes> fixes) {
+-    this.fixes =3D fixes;
+-  }
+-
+-  factory EditGetFixesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<AnalysisErrorFixes> fixes;
+-      if (json.containsKey("fixes")) {
+-        fixes =3D jsonDecoder.decodeList(
+-            jsonPath + ".fixes",
+-            json["fixes"],
+-            (String jsonPath, Object json) =3D>
+-                new AnalysisErrorFixes.fromJson(jsonDecoder, jsonPath, js=
on));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "fixes");
+-      }
+-      return new EditGetFixesResult(fixes);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes result", json);
+-    }
+-  }
+-
+-  factory EditGetFixesResult.fromResponse(Response response) {
+-    return new EditGetFixesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["fixes"] =3D
+-        fixes.map((AnalysisErrorFixes value) =3D> value.toJson()).toList(=
);
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetFixesResult) {
+-      return listEqual(fixes, other.fixes,
+-          (AnalysisErrorFixes a, AnalysisErrorFixes b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, fixes.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getPostfixCompletion params
+- *
+- * {
+- *   "file": FilePath
+- *   "key": String
+- *   "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetPostfixCompletionParams implements RequestParams {
+-  String _file;
+-
+-  String _key;
+-
+-  int _offset;
+-
+-  /**
+-   * The file containing the postfix template to be expanded.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the postfix template to be expanded.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  String get key =3D> _key;
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  void set key(String value) {
+-    assert(value !=3D null);
+-    this._key =3D value;
+-  }
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  EditGetPostfixCompletionParams(String file, String key, int offset) {
+-    this.file =3D file;
+-    this.key =3D key;
+-    this.offset =3D offset;
+-  }
+-
+-  factory EditGetPostfixCompletionParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      String key;
+-      if (json.containsKey("key")) {
+-        key =3D jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "key");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new EditGetPostfixCompletionParams(file, key, offset);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.getPostfixCompletion params", json);
+-    }
+-  }
+-
+-  factory EditGetPostfixCompletionParams.fromRequest(Request request) {
+-    return new EditGetPostfixCompletionParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["key"] =3D key;
+-    result["offset"] =3D offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getPostfixCompletion", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetPostfixCompletionParams) {
+-      return file =3D=3D other.file && key =3D=3D other.key && offset =3D=
=3D other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, key.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getPostfixCompletion result
+- *
+- * {
+- *   "change": SourceChange
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetPostfixCompletionResult implements ResponseResult {
+-  SourceChange _change;
+-
+-  /**
+-   * The change to be applied in order to complete the statement.
+-   */
+-  SourceChange get change =3D> _change;
+-
+-  /**
+-   * The change to be applied in order to complete the statement.
+-   */
+-  void set change(SourceChange value) {
+-    assert(value !=3D null);
+-    this._change =3D value;
+-  }
+-
+-  EditGetPostfixCompletionResult(SourceChange change) {
+-    this.change =3D change;
+-  }
+-
+-  factory EditGetPostfixCompletionResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      SourceChange change;
+-      if (json.containsKey("change")) {
+-        change =3D new SourceChange.fromJson(
+-            jsonDecoder, jsonPath + ".change", json["change"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "change");
+-      }
+-      return new EditGetPostfixCompletionResult(change);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.getPostfixCompletion result", json);
+-    }
+-  }
+-
+-  factory EditGetPostfixCompletionResult.fromResponse(Response response) {
+-    return new EditGetPostfixCompletionResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["change"] =3D change.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetPostfixCompletionResult) {
+-      return change =3D=3D other.change;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, change.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getRefactoring params
+- *
+- * {
+- *   "kind": RefactoringKind
+- *   "file": FilePath
+- *   "offset": int
+- *   "length": int
+- *   "validateOnly": bool
+- *   "options": optional RefactoringOptions
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetRefactoringParams implements RequestParams {
+-  RefactoringKind _kind;
+-
+-  String _file;
+-
+-  int _offset;
+-
+-  int _length;
+-
+-  bool _validateOnly;
+-
+-  RefactoringOptions _options;
+-
+-  /**
+-   * The kind of refactoring to be performed.
+-   */
+-  RefactoringKind get kind =3D> _kind;
+-
+-  /**
+-   * The kind of refactoring to be performed.
+-   */
+-  void set kind(RefactoringKind value) {
+-    assert(value !=3D null);
+-    this._kind =3D value;
+-  }
+-
+-  /**
+-   * The file containing the code involved in the refactoring.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the code involved in the refactoring.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the region involved in the refactoring.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the region involved in the refactoring.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the region involved in the refactoring.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the region involved in the refactoring.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  /**
+-   * True if the client is only requesting that the values of the options=
 be
+-   * validated and no change be generated.
+-   */
+-  bool get validateOnly =3D> _validateOnly;
+-
+-  /**
+-   * True if the client is only requesting that the values of the options=
 be
+-   * validated and no change be generated.
+-   */
+-  void set validateOnly(bool value) {
+-    assert(value !=3D null);
+-    this._validateOnly =3D value;
+-  }
+-
+-  /**
+-   * Data used to provide values provided by the user. The structure of t=
he
+-   * data is dependent on the kind of refactoring being performed. The da=
ta
+-   * that is expected is documented in the section titled Refactorings, l=
abeled
+-   * 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.
+-   */
+-  RefactoringOptions get options =3D> _options;
+-
+-  /**
+-   * Data used to provide values provided by the user. The structure of t=
he
+-   * data is dependent on the kind of refactoring being performed. The da=
ta
+-   * that is expected is documented in the section titled Refactorings, l=
abeled
+-   * 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.
+-   */
+-  void set options(RefactoringOptions value) {
+-    this._options =3D value;
+-  }
+-
+-  EditGetRefactoringParams(RefactoringKind kind, String file, int offset,
+-      int length, bool validateOnly,
+-      {RefactoringOptions options}) {
+-    this.kind =3D kind;
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.length =3D length;
+-    this.validateOnly =3D validateOnly;
+-    this.options =3D options;
+-  }
+-
+-  factory EditGetRefactoringParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      RefactoringKind kind;
+-      if (json.containsKey("kind")) {
+-        kind =3D new RefactoringKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kind");
+-      }
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      bool validateOnly;
+-      if (json.containsKey("validateOnly")) {
+-        validateOnly =3D jsonDecoder.decodeBool(
+-            jsonPath + ".validateOnly", json["validateOnly"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "validateOnly");
+-      }
+-      RefactoringOptions options;
+-      if (json.containsKey("options")) {
+-        options =3D new RefactoringOptions.fromJson(
+-            jsonDecoder, jsonPath + ".options", json["options"], kind);
+-      }
+-      return new EditGetRefactoringParams(
+-          kind, file, offset, length, validateOnly,
+-          options: options);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring params", =
json);
+-    }
+-  }
+-
+-  factory EditGetRefactoringParams.fromRequest(Request request) {
+-    var params =3D new EditGetRefactoringParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-    REQUEST_ID_REFACTORING_KINDS[request.id] =3D params.kind;
+-    return params;
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["kind"] =3D kind.toJson();
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    result["validateOnly"] =3D validateOnly;
+-    if (options !=3D null) {
+-      result["options"] =3D options.toJson();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getRefactoring", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetRefactoringParams) {
+-      return kind =3D=3D other.kind &&
+-          file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          length =3D=3D other.length &&
+-          validateOnly =3D=3D other.validateOnly &&
+-          options =3D=3D other.options;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, validateOnly.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, options.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getRefactoring result
+- *
+- * {
+- *   "initialProblems": List<RefactoringProblem>
+- *   "optionsProblems": List<RefactoringProblem>
+- *   "finalProblems": List<RefactoringProblem>
+- *   "feedback": optional RefactoringFeedback
+- *   "change": optional SourceChange
+- *   "potentialEdits": optional List<String>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetRefactoringResult implements ResponseResult {
+-  List<RefactoringProblem> _initialProblems;
+-
+-  List<RefactoringProblem> _optionsProblems;
+-
+-  List<RefactoringProblem> _finalProblems;
+-
+-  RefactoringFeedback _feedback;
+-
+-  SourceChange _change;
+-
+-  List<String> _potentialEdits;
+-
+-  /**
+-   * The initial status of the refactoring, i.e. problems related to the
+-   * context in which the refactoring is requested. The array will be emp=
ty if
+-   * there are no known problems.
+-   */
+-  List<RefactoringProblem> get initialProblems =3D> _initialProblems;
+-
+-  /**
+-   * The initial status of the refactoring, i.e. problems related to the
+-   * context in which the refactoring is requested. The array will be emp=
ty if
+-   * there are no known problems.
+-   */
+-  void set initialProblems(List<RefactoringProblem> value) {
+-    assert(value !=3D null);
+-    this._initialProblems =3D value;
+-  }
+-
+-  /**
+-   * The options validation status, i.e. problems in the given options, s=
uch as
+-   * light-weight validation of a new name, flags compatibility, etc. The=
 array
+-   * will be empty if there are no known problems.
+-   */
+-  List<RefactoringProblem> get optionsProblems =3D> _optionsProblems;
+-
+-  /**
+-   * The options validation status, i.e. problems in the given options, s=
uch as
+-   * light-weight validation of a new name, flags compatibility, etc. The=
 array
+-   * will be empty if there are no known problems.
+-   */
+-  void set optionsProblems(List<RefactoringProblem> value) {
+-    assert(value !=3D null);
+-    this._optionsProblems =3D value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  List<RefactoringProblem> get finalProblems =3D> _finalProblems;
+-
+-  /**
+-   * 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.
+-   */
+-  void set finalProblems(List<RefactoringProblem> value) {
+-    assert(value !=3D null);
+-    this._finalProblems =3D value;
+-  }
+-
+-  /**
+-   * 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 Refactorings, labeled as
+-   * "Feedback".
+-   */
+-  RefactoringFeedback get feedback =3D> _feedback;
+-
+-  /**
+-   * 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 Refactorings, labeled as
+-   * "Feedback".
+-   */
+-  void set feedback(RefactoringFeedback value) {
+-    this._feedback =3D value;
+-  }
+-
+-  /**
+-   * The changes that are to be applied to affect the refactoring. This f=
ield
+-   * will be omitted if there are problems that prevent a set of changes =
from
+-   * being computed, such as having no options specified for a refactorin=
g that
+-   * requires them, or if only validation was requested.
+-   */
+-  SourceChange get change =3D> _change;
+-
+-  /**
+-   * The changes that are to be applied to affect the refactoring. This f=
ield
+-   * will be omitted if there are problems that prevent a set of changes =
from
+-   * being computed, such as having no options specified for a refactorin=
g that
+-   * requires them, or if only validation was requested.
+-   */
+-  void set change(SourceChange value) {
+-    this._change =3D value;
+-  }
+-
+-  /**
+-   * The ids of source edits that are not known to be valid. An edit is n=
ot
+-   * 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 refe=
rence
+-   * 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 refactor=
ing.
+-   */
+-  List<String> get potentialEdits =3D> _potentialEdits;
+-
+-  /**
+-   * The ids of source edits that are not known to be valid. An edit is n=
ot
+-   * 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 refe=
rence
+-   * 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 refactor=
ing.
+-   */
+-  void set potentialEdits(List<String> value) {
+-    this._potentialEdits =3D value;
+-  }
+-
+-  EditGetRefactoringResult(
+-      List<RefactoringProblem> initialProblems,
+-      List<RefactoringProblem> optionsProblems,
+-      List<RefactoringProblem> finalProblems,
+-      {RefactoringFeedback feedback,
+-      SourceChange change,
+-      List<String> potentialEdits}) {
+-    this.initialProblems =3D initialProblems;
+-    this.optionsProblems =3D optionsProblems;
+-    this.finalProblems =3D finalProblems;
+-    this.feedback =3D feedback;
+-    this.change =3D change;
+-    this.potentialEdits =3D potentialEdits;
+-  }
+-
+-  factory EditGetRefactoringResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<RefactoringProblem> initialProblems;
+-      if (json.containsKey("initialProblems")) {
+-        initialProblems =3D jsonDecoder.decodeList(
+-            jsonPath + ".initialProblems",
+-            json["initialProblems"],
+-            (String jsonPath, Object json) =3D>
+-                new RefactoringProblem.fromJson(jsonDecoder, jsonPath, js=
on));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "initialProblems");
+-      }
+-      List<RefactoringProblem> optionsProblems;
+-      if (json.containsKey("optionsProblems")) {
+-        optionsProblems =3D jsonDecoder.decodeList(
+-            jsonPath + ".optionsProblems",
+-            json["optionsProblems"],
+-            (String jsonPath, Object json) =3D>
+-                new RefactoringProblem.fromJson(jsonDecoder, jsonPath, js=
on));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "optionsProblems");
+-      }
+-      List<RefactoringProblem> finalProblems;
+-      if (json.containsKey("finalProblems")) {
+-        finalProblems =3D jsonDecoder.decodeList(
+-            jsonPath + ".finalProblems",
+-            json["finalProblems"],
+-            (String jsonPath, Object json) =3D>
+-                new RefactoringProblem.fromJson(jsonDecoder, jsonPath, js=
on));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "finalProblems");
+-      }
+-      RefactoringFeedback feedback;
+-      if (json.containsKey("feedback")) {
+-        feedback =3D new RefactoringFeedback.fromJson(
+-            jsonDecoder, jsonPath + ".feedback", json["feedback"], json);
+-      }
+-      SourceChange change;
+-      if (json.containsKey("change")) {
+-        change =3D new SourceChange.fromJson(
+-            jsonDecoder, jsonPath + ".change", json["change"]);
+-      }
+-      List<String> potentialEdits;
+-      if (json.containsKey("potentialEdits")) {
+-        potentialEdits =3D jsonDecoder.decodeList(jsonPath + ".potentialE=
dits",
+-            json["potentialEdits"], jsonDecoder.decodeString);
+-      }
+-      return new EditGetRefactoringResult(
+-          initialProblems, optionsProblems, finalProblems,
+-          feedback: feedback, change: change, potentialEdits: potentialEd=
its);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring result", =
json);
+-    }
+-  }
+-
+-  factory EditGetRefactoringResult.fromResponse(Response response) {
+-    return new EditGetRefactoringResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["initialProblems"] =3D initialProblems
+-        .map((RefactoringProblem value) =3D> value.toJson())
+-        .toList();
+-    result["optionsProblems"] =3D optionsProblems
+-        .map((RefactoringProblem value) =3D> value.toJson())
+-        .toList();
+-    result["finalProblems"] =3D finalProblems
+-        .map((RefactoringProblem value) =3D> value.toJson())
+-        .toList();
+-    if (feedback !=3D null) {
+-      result["feedback"] =3D feedback.toJson();
+-    }
+-    if (change !=3D null) {
+-      result["change"] =3D change.toJson();
+-    }
+-    if (potentialEdits !=3D null) {
+-      result["potentialEdits"] =3D potentialEdits;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetRefactoringResult) {
+-      return listEqual(initialProblems, other.initialProblems,
+-              (RefactoringProblem a, RefactoringProblem b) =3D> a =3D=3D =
b) &&
+-          listEqual(optionsProblems, other.optionsProblems,
+-              (RefactoringProblem a, RefactoringProblem b) =3D> a =3D=3D =
b) &&
+-          listEqual(finalProblems, other.finalProblems,
+-              (RefactoringProblem a, RefactoringProblem b) =3D> a =3D=3D =
b) &&
+-          feedback =3D=3D other.feedback &&
+-          change =3D=3D other.change &&
+-          listEqual(potentialEdits, other.potentialEdits,
+-              (String a, String b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, initialProblems.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, optionsProblems.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, finalProblems.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, feedback.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, change.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, potentialEdits.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getStatementCompletion params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetStatementCompletionParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  /**
+-   * The file containing the statement to be completed.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the statement to be completed.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset used to identify the statement to be completed.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset used to identify the statement to be completed.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  EditGetStatementCompletionParams(String file, int offset) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-  }
+-
+-  factory EditGetStatementCompletionParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new EditGetStatementCompletionParams(file, offset);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.getStatementCompletion params", json);
+-    }
+-  }
+-
+-  factory EditGetStatementCompletionParams.fromRequest(Request request) {
+-    return new EditGetStatementCompletionParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getStatementCompletion", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetStatementCompletionParams) {
+-      return file =3D=3D other.file && offset =3D=3D other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.getStatementCompletion result
+- *
+- * {
+- *   "change": SourceChange
+- *   "whitespaceOnly": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetStatementCompletionResult implements ResponseResult {
+-  SourceChange _change;
+-
+-  bool _whitespaceOnly;
+-
+-  /**
+-   * The change to be applied in order to complete the statement.
+-   */
+-  SourceChange get change =3D> _change;
+-
+-  /**
+-   * The change to be applied in order to complete the statement.
+-   */
+-  void set change(SourceChange value) {
+-    assert(value !=3D null);
+-    this._change =3D value;
+-  }
+-
+-  /**
+-   * Will be true if the change contains nothing but whitespace character=
s, or
+-   * is empty.
+-   */
+-  bool get whitespaceOnly =3D> _whitespaceOnly;
+-
+-  /**
+-   * Will be true if the change contains nothing but whitespace character=
s, or
+-   * is empty.
+-   */
+-  void set whitespaceOnly(bool value) {
+-    assert(value !=3D null);
+-    this._whitespaceOnly =3D value;
+-  }
+-
+-  EditGetStatementCompletionResult(SourceChange change, bool whitespaceOn=
ly) {
+-    this.change =3D change;
+-    this.whitespaceOnly =3D whitespaceOnly;
+-  }
+-
+-  factory EditGetStatementCompletionResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      SourceChange change;
+-      if (json.containsKey("change")) {
+-        change =3D new SourceChange.fromJson(
+-            jsonDecoder, jsonPath + ".change", json["change"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "change");
+-      }
+-      bool whitespaceOnly;
+-      if (json.containsKey("whitespaceOnly")) {
+-        whitespaceOnly =3D jsonDecoder.decodeBool(
+-            jsonPath + ".whitespaceOnly", json["whitespaceOnly"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "whitespaceOnly");
+-      }
+-      return new EditGetStatementCompletionResult(change, whitespaceOnly);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.getStatementCompletion result", json);
+-    }
+-  }
+-
+-  factory EditGetStatementCompletionResult.fromResponse(Response response=
) {
+-    return new EditGetStatementCompletionResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["change"] =3D change.toJson();
+-    result["whitespaceOnly"] =3D whitespaceOnly;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditGetStatementCompletionResult) {
+-      return change =3D=3D other.change && whitespaceOnly =3D=3D other.wh=
itespaceOnly;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, change.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, whitespaceOnly.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.importElements params
+- *
+- * {
+- *   "file": FilePath
+- *   "elements": List<ImportedElements>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditImportElementsParams implements RequestParams {
+-  String _file;
+-
+-  List<ImportedElements> _elements;
+-
+-  /**
+-   * The file in which the specified elements are to be made accessible.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file in which the specified elements are to be made accessible.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The elements to be made accessible in the specified file.
+-   */
+-  List<ImportedElements> get elements =3D> _elements;
+-
+-  /**
+-   * The elements to be made accessible in the specified file.
+-   */
+-  void set elements(List<ImportedElements> value) {
+-    assert(value !=3D null);
+-    this._elements =3D value;
+-  }
+-
+-  EditImportElementsParams(String file, List<ImportedElements> elements) {
+-    this.file =3D file;
+-    this.elements =3D elements;
+-  }
+-
+-  factory EditImportElementsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<ImportedElements> elements;
+-      if (json.containsKey("elements")) {
+-        elements =3D jsonDecoder.decodeList(
+-            jsonPath + ".elements",
+-            json["elements"],
+-            (String jsonPath, Object json) =3D>
+-                new ImportedElements.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "elements");
+-      }
+-      return new EditImportElementsParams(file, elements);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.importElements params", =
json);
+-    }
+-  }
+-
+-  factory EditImportElementsParams.fromRequest(Request request) {
+-    return new EditImportElementsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["elements"] =3D
+-        elements.map((ImportedElements value) =3D> value.toJson()).toList=
();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.importElements", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditImportElementsParams) {
+-      return file =3D=3D other.file &&
+-          listEqual(elements, other.elements,
+-              (ImportedElements a, ImportedElements b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, elements.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.importElements result
+- *
+- * {
+- *   "edit": SourceFileEdit
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditImportElementsResult implements ResponseResult {
+-  SourceFileEdit _edit;
+-
+-  /**
+-   * The edits to be applied in order to make the specified elements
+-   * accessible. The file to be edited will be the defining compilation u=
nit of
+-   * the library containing the file specified in the request, which can =
be
+-   * different than the file specified in the request if the specified fi=
le is
+-   * a part file.
+-   */
+-  SourceFileEdit get edit =3D> _edit;
+-
+-  /**
+-   * The edits to be applied in order to make the specified elements
+-   * accessible. The file to be edited will be the defining compilation u=
nit of
+-   * the library containing the file specified in the request, which can =
be
+-   * different than the file specified in the request if the specified fi=
le is
+-   * a part file.
+-   */
+-  void set edit(SourceFileEdit value) {
+-    assert(value !=3D null);
+-    this._edit =3D value;
+-  }
+-
+-  EditImportElementsResult(SourceFileEdit edit) {
+-    this.edit =3D edit;
+-  }
+-
+-  factory EditImportElementsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      SourceFileEdit edit;
+-      if (json.containsKey("edit")) {
+-        edit =3D new SourceFileEdit.fromJson(
+-            jsonDecoder, jsonPath + ".edit", json["edit"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "edit");
+-      }
+-      return new EditImportElementsResult(edit);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.importElements result", =
json);
+-    }
+-  }
+-
+-  factory EditImportElementsResult.fromResponse(Response response) {
+-    return new EditImportElementsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["edit"] =3D edit.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditImportElementsResult) {
+-      return edit =3D=3D other.edit;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, edit.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.isPostfixCompletionApplicable params
+- *
+- * {
+- *   "file": FilePath
+- *   "key": String
+- *   "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditIsPostfixCompletionApplicableParams implements RequestParams {
+-  String _file;
+-
+-  String _key;
+-
+-  int _offset;
+-
+-  /**
+-   * The file containing the postfix template to be expanded.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the postfix template to be expanded.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  String get key =3D> _key;
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  void set key(String value) {
+-    assert(value !=3D null);
+-    this._key =3D value;
+-  }
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  EditIsPostfixCompletionApplicableParams(String file, String key, int of=
fset) {
+-    this.file =3D file;
+-    this.key =3D key;
+-    this.offset =3D offset;
+-  }
+-
+-  factory EditIsPostfixCompletionApplicableParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      String key;
+-      if (json.containsKey("key")) {
+-        key =3D jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "key");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new EditIsPostfixCompletionApplicableParams(file, key, offse=
t);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.isPostfixCompletionApplicable params", json);
+-    }
+-  }
+-
+-  factory EditIsPostfixCompletionApplicableParams.fromRequest(Request req=
uest) {
+-    return new EditIsPostfixCompletionApplicableParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["key"] =3D key;
+-    result["offset"] =3D offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.isPostfixCompletionApplicable", toJson()=
);
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditIsPostfixCompletionApplicableParams) {
+-      return file =3D=3D other.file && key =3D=3D other.key && offset =3D=
=3D other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, key.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.isPostfixCompletionApplicable result
+- *
+- * {
+- *   "value": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditIsPostfixCompletionApplicableResult implements ResponseResult {
+-  bool _value;
+-
+-  /**
+-   * True if the template can be expanded at the given location.
+-   */
+-  bool get value =3D> _value;
+-
+-  /**
+-   * True if the template can be expanded at the given location.
+-   */
+-  void set value(bool value) {
+-    assert(value !=3D null);
+-    this._value =3D value;
+-  }
+-
+-  EditIsPostfixCompletionApplicableResult(bool value) {
+-    this.value =3D value;
+-  }
+-
+-  factory EditIsPostfixCompletionApplicableResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool value;
+-      if (json.containsKey("value")) {
+-        value =3D jsonDecoder.decodeBool(jsonPath + ".value", json["value=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "value");
+-      }
+-      return new EditIsPostfixCompletionApplicableResult(value);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.isPostfixCompletionApplicable result", json);
+-    }
+-  }
+-
+-  factory EditIsPostfixCompletionApplicableResult.fromResponse(
+-      Response response) {
+-    return new EditIsPostfixCompletionApplicableResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["value"] =3D value;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditIsPostfixCompletionApplicableResult) {
+-      return value =3D=3D other.value;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, value.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.listPostfixCompletionTemplates params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditListPostfixCompletionTemplatesParams implements RequestParams {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.listPostfixCompletionTemplates", null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditListPostfixCompletionTemplatesParams) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 690713107;
+-  }
+-}
+-
+-/**
+- * edit.listPostfixCompletionTemplates result
+- *
+- * {
+- *   "templates": List<PostfixTemplateDescriptor>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditListPostfixCompletionTemplatesResult implements ResponseResult {
+-  List<PostfixTemplateDescriptor> _templates;
+-
+-  /**
+-   * The list of available templates.
+-   */
+-  List<PostfixTemplateDescriptor> get templates =3D> _templates;
+-
+-  /**
+-   * The list of available templates.
+-   */
+-  void set templates(List<PostfixTemplateDescriptor> value) {
+-    assert(value !=3D null);
+-    this._templates =3D value;
+-  }
+-
+-  EditListPostfixCompletionTemplatesResult(
+-      List<PostfixTemplateDescriptor> templates) {
+-    this.templates =3D templates;
+-  }
+-
+-  factory EditListPostfixCompletionTemplatesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<PostfixTemplateDescriptor> templates;
+-      if (json.containsKey("templates")) {
+-        templates =3D jsonDecoder.decodeList(
+-            jsonPath + ".templates",
+-            json["templates"],
+-            (String jsonPath, Object json) =3D>
+-                new PostfixTemplateDescriptor.fromJson(
+-                    jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "templates");
+-      }
+-      return new EditListPostfixCompletionTemplatesResult(templates);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.listPostfixCompletionTemplates result", json);
+-    }
+-  }
+-
+-  factory EditListPostfixCompletionTemplatesResult.fromResponse(
+-      Response response) {
+-    return new EditListPostfixCompletionTemplatesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["templates"] =3D templates
+-        .map((PostfixTemplateDescriptor value) =3D> value.toJson())
+-        .toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditListPostfixCompletionTemplatesResult) {
+-      return listEqual(templates, other.templates,
+-          (PostfixTemplateDescriptor a, PostfixTemplateDescriptor b) =3D>=
 a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, templates.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.organizeDirectives params
+- *
+- * {
+- *   "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditOrganizeDirectivesParams implements RequestParams {
+-  String _file;
+-
+-  /**
+-   * The Dart file to organize directives in.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The Dart file to organize directives in.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  EditOrganizeDirectivesParams(String file) {
+-    this.file =3D file;
+-  }
+-
+-  factory EditOrganizeDirectivesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      return new EditOrganizeDirectivesParams(file);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.organizeDirectives params", json);
+-    }
+-  }
+-
+-  factory EditOrganizeDirectivesParams.fromRequest(Request request) {
+-    return new EditOrganizeDirectivesParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.organizeDirectives", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditOrganizeDirectivesParams) {
+-      return file =3D=3D other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.organizeDirectives result
+- *
+- * {
+- *   "edit": SourceFileEdit
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditOrganizeDirectivesResult implements ResponseResult {
+-  SourceFileEdit _edit;
+-
+-  /**
+-   * The file edit that is to be applied to the given file to effect the
+-   * organizing.
+-   */
+-  SourceFileEdit get edit =3D> _edit;
+-
+-  /**
+-   * The file edit that is to be applied to the given file to effect the
+-   * organizing.
+-   */
+-  void set edit(SourceFileEdit value) {
+-    assert(value !=3D null);
+-    this._edit =3D value;
+-  }
+-
+-  EditOrganizeDirectivesResult(SourceFileEdit edit) {
+-    this.edit =3D edit;
+-  }
+-
+-  factory EditOrganizeDirectivesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      SourceFileEdit edit;
+-      if (json.containsKey("edit")) {
+-        edit =3D new SourceFileEdit.fromJson(
+-            jsonDecoder, jsonPath + ".edit", json["edit"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "edit");
+-      }
+-      return new EditOrganizeDirectivesResult(edit);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.organizeDirectives result", json);
+-    }
+-  }
+-
+-  factory EditOrganizeDirectivesResult.fromResponse(Response response) {
+-    return new EditOrganizeDirectivesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["edit"] =3D edit.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditOrganizeDirectivesResult) {
+-      return edit =3D=3D other.edit;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, edit.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.sortMembers params
+- *
+- * {
+- *   "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditSortMembersParams implements RequestParams {
+-  String _file;
+-
+-  /**
+-   * The Dart file to sort.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The Dart file to sort.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  EditSortMembersParams(String file) {
+-    this.file =3D file;
+-  }
+-
+-  factory EditSortMembersParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      return new EditSortMembersParams(file);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers params", jso=
n);
+-    }
+-  }
+-
+-  factory EditSortMembersParams.fromRequest(Request request) {
+-    return new EditSortMembersParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.sortMembers", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditSortMembersParams) {
+-      return file =3D=3D other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * edit.sortMembers result
+- *
+- * {
+- *   "edit": SourceFileEdit
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditSortMembersResult implements ResponseResult {
+-  SourceFileEdit _edit;
+-
+-  /**
+-   * The file edit that is to be applied to the given file to effect the
+-   * sorting.
+-   */
+-  SourceFileEdit get edit =3D> _edit;
+-
+-  /**
+-   * The file edit that is to be applied to the given file to effect the
+-   * sorting.
+-   */
+-  void set edit(SourceFileEdit value) {
+-    assert(value !=3D null);
+-    this._edit =3D value;
+-  }
+-
+-  EditSortMembersResult(SourceFileEdit edit) {
+-    this.edit =3D edit;
+-  }
+-
+-  factory EditSortMembersResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      SourceFileEdit edit;
+-      if (json.containsKey("edit")) {
+-        edit =3D new SourceFileEdit.fromJson(
+-            jsonDecoder, jsonPath + ".edit", json["edit"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "edit");
+-      }
+-      return new EditSortMembersResult(edit);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers result", jso=
n);
+-    }
+-  }
+-
+-  factory EditSortMembersResult.fromResponse(Response response) {
+-    return new EditSortMembersResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["edit"] =3D edit.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is EditSortMembersResult) {
+-      return edit =3D=3D other.edit;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, edit.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ExecutableFile
+- *
+- * {
+- *   "file": FilePath
+- *   "kind": ExecutableKind
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutableFile implements HasToJson {
+-  String _file;
+-
+-  ExecutableKind _kind;
+-
+-  /**
+-   * The path of the executable file.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The path of the executable file.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The kind of the executable file.
+-   */
+-  ExecutableKind get kind =3D> _kind;
+-
+-  /**
+-   * The kind of the executable file.
+-   */
+-  void set kind(ExecutableKind value) {
+-    assert(value !=3D null);
+-    this._kind =3D value;
+-  }
+-
+-  ExecutableFile(String file, ExecutableKind kind) {
+-    this.file =3D file;
+-    this.kind =3D kind;
+-  }
+-
+-  factory ExecutableFile.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      ExecutableKind kind;
+-      if (json.containsKey("kind")) {
+-        kind =3D new ExecutableKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kind");
+-      }
+-      return new ExecutableFile(file, kind);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "ExecutableFile", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["kind"] =3D kind.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutableFile) {
+-      return file =3D=3D other.file && kind =3D=3D other.kind;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ExecutableKind
+- *
+- * enum {
+- *   CLIENT
+- *   EITHER
+- *   NOT_EXECUTABLE
+- *   SERVER
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutableKind implements Enum {
+-  static const ExecutableKind CLIENT =3D const ExecutableKind._("CLIENT");
+-
+-  static const ExecutableKind EITHER =3D const ExecutableKind._("EITHER");
+-
+-  static const ExecutableKind NOT_EXECUTABLE =3D
+-      const ExecutableKind._("NOT_EXECUTABLE");
+-
+-  static const ExecutableKind SERVER =3D const ExecutableKind._("SERVER");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<ExecutableKind> VALUES =3D const <ExecutableKind>[
+-    CLIENT,
+-    EITHER,
+-    NOT_EXECUTABLE,
+-    SERVER
+-  ];
+-
+-  @override
+-  final String name;
+-
+-  const ExecutableKind._(this.name);
+-
+-  factory ExecutableKind(String name) {
+-    switch (name) {
+-      case "CLIENT":
+-        return CLIENT;
+-      case "EITHER":
+-        return EITHER;
+-      case "NOT_EXECUTABLE":
+-        return NOT_EXECUTABLE;
+-      case "SERVER":
+-        return SERVER;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory ExecutableKind.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new ExecutableKind(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "ExecutableKind", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "ExecutableKind.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * execution.createContext params
+- *
+- * {
+- *   "contextRoot": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionCreateContextParams implements RequestParams {
+-  String _contextRoot;
+-
+-  /**
+-   * The path of the Dart or HTML file that will be launched, or the path=
 of
+-   * the directory containing the file.
+-   */
+-  String get contextRoot =3D> _contextRoot;
+-
+-  /**
+-   * The path of the Dart or HTML file that will be launched, or the path=
 of
+-   * the directory containing the file.
+-   */
+-  void set contextRoot(String value) {
+-    assert(value !=3D null);
+-    this._contextRoot =3D value;
+-  }
+-
+-  ExecutionCreateContextParams(String contextRoot) {
+-    this.contextRoot =3D contextRoot;
+-  }
+-
+-  factory ExecutionCreateContextParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String contextRoot;
+-      if (json.containsKey("contextRoot")) {
+-        contextRoot =3D jsonDecoder.decodeString(
+-            jsonPath + ".contextRoot", json["contextRoot"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "contextRoot");
+-      }
+-      return new ExecutionCreateContextParams(contextRoot);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "execution.createContext params", json);
+-    }
+-  }
+-
+-  factory ExecutionCreateContextParams.fromRequest(Request request) {
+-    return new ExecutionCreateContextParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["contextRoot"] =3D contextRoot;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.createContext", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionCreateContextParams) {
+-      return contextRoot =3D=3D other.contextRoot;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, contextRoot.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * execution.createContext result
+- *
+- * {
+- *   "id": ExecutionContextId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionCreateContextResult implements ResponseResult {
+-  String _id;
+-
+-  /**
+-   * The identifier used to refer to the execution context that was creat=
ed.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier used to refer to the execution context that was creat=
ed.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  ExecutionCreateContextResult(String id) {
+-    this.id =3D id;
+-  }
+-
+-  factory ExecutionCreateContextResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      return new ExecutionCreateContextResult(id);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "execution.createContext result", json);
+-    }
+-  }
+-
+-  factory ExecutionCreateContextResult.fromResponse(Response response) {
+-    return new ExecutionCreateContextResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionCreateContextResult) {
+-      return id =3D=3D other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * execution.deleteContext params
+- *
+- * {
+- *   "id": ExecutionContextId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionDeleteContextParams implements RequestParams {
+-  String _id;
+-
+-  /**
+-   * The identifier of the execution context that is to be deleted.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier of the execution context that is to be deleted.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  ExecutionDeleteContextParams(String id) {
+-    this.id =3D id;
+-  }
+-
+-  factory ExecutionDeleteContextParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      return new ExecutionDeleteContextParams(id);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "execution.deleteContext params", json);
+-    }
+-  }
+-
+-  factory ExecutionDeleteContextParams.fromRequest(Request request) {
+-    return new ExecutionDeleteContextParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.deleteContext", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionDeleteContextParams) {
+-      return id =3D=3D other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * execution.deleteContext result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionDeleteContextResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionDeleteContextResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 479954425;
+-  }
+-}
+-
+-/**
+- * execution.launchData params
+- *
+- * {
+- *   "file": FilePath
+- *   "kind": optional ExecutableKind
+- *   "referencedFiles": optional List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionLaunchDataParams implements HasToJson {
+-  String _file;
+-
+-  ExecutableKind _kind;
+-
+-  List<String> _referencedFiles;
+-
+-  /**
+-   * The file for which launch data is being provided. This will either b=
e a
+-   * Dart library or an HTML file.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file for which launch data is being provided. This will either b=
e a
+-   * Dart library or an HTML file.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The kind of the executable file. This field is omitted if the file i=
s not
+-   * a Dart file.
+-   */
+-  ExecutableKind get kind =3D> _kind;
+-
+-  /**
+-   * The kind of the executable file. This field is omitted if the file i=
s not
+-   * a Dart file.
+-   */
+-  void set kind(ExecutableKind value) {
+-    this._kind =3D value;
+-  }
+-
+-  /**
+-   * A list of the Dart files that are referenced by the file. This field=
 is
+-   * omitted if the file is not an HTML file.
+-   */
+-  List<String> get referencedFiles =3D> _referencedFiles;
+-
+-  /**
+-   * A list of the Dart files that are referenced by the file. This field=
 is
+-   * omitted if the file is not an HTML file.
+-   */
+-  void set referencedFiles(List<String> value) {
+-    this._referencedFiles =3D value;
+-  }
+-
+-  ExecutionLaunchDataParams(String file,
+-      {ExecutableKind kind, List<String> referencedFiles}) {
+-    this.file =3D file;
+-    this.kind =3D kind;
+-    this.referencedFiles =3D referencedFiles;
+-  }
+-
+-  factory ExecutionLaunchDataParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      ExecutableKind kind;
+-      if (json.containsKey("kind")) {
+-        kind =3D new ExecutableKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      }
+-      List<String> referencedFiles;
+-      if (json.containsKey("referencedFiles")) {
+-        referencedFiles =3D jsonDecoder.decodeList(jsonPath + ".reference=
dFiles",
+-            json["referencedFiles"], jsonDecoder.decodeString);
+-      }
+-      return new ExecutionLaunchDataParams(file,
+-          kind: kind, referencedFiles: referencedFiles);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "execution.launchData params",=
 json);
+-    }
+-  }
+-
+-  factory ExecutionLaunchDataParams.fromNotification(
+-      Notification notification) {
+-    return new ExecutionLaunchDataParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    if (kind !=3D null) {
+-      result["kind"] =3D kind.toJson();
+-    }
+-    if (referencedFiles !=3D null) {
+-      result["referencedFiles"] =3D referencedFiles;
+-    }
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("execution.launchData", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionLaunchDataParams) {
+-      return file =3D=3D other.file &&
+-          kind =3D=3D other.kind &&
+-          listEqual(referencedFiles, other.referencedFiles,
+-              (String a, String b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, referencedFiles.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * execution.mapUri params
+- *
+- * {
+- *   "id": ExecutionContextId
+- *   "file": optional FilePath
+- *   "uri": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionMapUriParams implements RequestParams {
+-  String _id;
+-
+-  String _file;
+-
+-  String _uri;
+-
+-  /**
+-   * The identifier of the execution context in which the URI is to be ma=
pped.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier of the execution context in which the URI is to be ma=
pped.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  /**
+-   * The path of the file to be mapped into a URI.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The path of the file to be mapped into a URI.
+-   */
+-  void set file(String value) {
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The URI to be mapped into a file path.
+-   */
+-  String get uri =3D> _uri;
+-
+-  /**
+-   * The URI to be mapped into a file path.
+-   */
+-  void set uri(String value) {
+-    this._uri =3D value;
+-  }
+-
+-  ExecutionMapUriParams(String id, {String file, String uri}) {
+-    this.id =3D id;
+-    this.file =3D file;
+-    this.uri =3D uri;
+-  }
+-
+-  factory ExecutionMapUriParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      }
+-      String uri;
+-      if (json.containsKey("uri")) {
+-        uri =3D jsonDecoder.decodeString(jsonPath + ".uri", json["uri"]);
+-      }
+-      return new ExecutionMapUriParams(id, file: file, uri: uri);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri params", jso=
n);
+-    }
+-  }
+-
+-  factory ExecutionMapUriParams.fromRequest(Request request) {
+-    return new ExecutionMapUriParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    if (file !=3D null) {
+-      result["file"] =3D file;
+-    }
+-    if (uri !=3D null) {
+-      result["uri"] =3D uri;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.mapUri", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionMapUriParams) {
+-      return id =3D=3D other.id && file =3D=3D other.file && uri =3D=3D o=
ther.uri;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, uri.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * execution.mapUri result
+- *
+- * {
+- *   "file": optional FilePath
+- *   "uri": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionMapUriResult implements ResponseResult {
+-  String _file;
+-
+-  String _uri;
+-
+-  /**
+-   * The file to which the URI was mapped. This field is omitted if the u=
ri
+-   * field was not given in the request.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file to which the URI was mapped. This field is omitted if the u=
ri
+-   * field was not given in the request.
+-   */
+-  void set file(String value) {
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The URI to which the file path was mapped. This field is omitted if =
the
+-   * file field was not given in the request.
+-   */
+-  String get uri =3D> _uri;
+-
+-  /**
+-   * The URI to which the file path was mapped. This field is omitted if =
the
+-   * file field was not given in the request.
+-   */
+-  void set uri(String value) {
+-    this._uri =3D value;
+-  }
+-
+-  ExecutionMapUriResult({String file, String uri}) {
+-    this.file =3D file;
+-    this.uri =3D uri;
+-  }
+-
+-  factory ExecutionMapUriResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      }
+-      String uri;
+-      if (json.containsKey("uri")) {
+-        uri =3D jsonDecoder.decodeString(jsonPath + ".uri", json["uri"]);
+-      }
+-      return new ExecutionMapUriResult(file: file, uri: uri);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri result", jso=
n);
+-    }
+-  }
+-
+-  factory ExecutionMapUriResult.fromResponse(Response response) {
+-    return new ExecutionMapUriResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    if (file !=3D null) {
+-      result["file"] =3D file;
+-    }
+-    if (uri !=3D null) {
+-      result["uri"] =3D uri;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionMapUriResult) {
+-      return file =3D=3D other.file && uri =3D=3D other.uri;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, uri.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ExecutionService
+- *
+- * enum {
+- *   LAUNCH_DATA
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionService implements Enum {
+-  static const ExecutionService LAUNCH_DATA =3D
+-      const ExecutionService._("LAUNCH_DATA");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<ExecutionService> VALUES =3D const <ExecutionService>[
+-    LAUNCH_DATA
+-  ];
+-
+-  @override
+-  final String name;
+-
+-  const ExecutionService._(this.name);
+-
+-  factory ExecutionService(String name) {
+-    switch (name) {
+-      case "LAUNCH_DATA":
+-        return LAUNCH_DATA;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory ExecutionService.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new ExecutionService(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "ExecutionService", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "ExecutionService.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * execution.setSubscriptions params
+- *
+- * {
+- *   "subscriptions": List<ExecutionService>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionSetSubscriptionsParams implements RequestParams {
+-  List<ExecutionService> _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  List<ExecutionService> get subscriptions =3D> _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  void set subscriptions(List<ExecutionService> value) {
+-    assert(value !=3D null);
+-    this._subscriptions =3D value;
+-  }
+-
+-  ExecutionSetSubscriptionsParams(List<ExecutionService> subscriptions) {
+-    this.subscriptions =3D subscriptions;
+-  }
+-
+-  factory ExecutionSetSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<ExecutionService> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions =3D jsonDecoder.decodeList(
+-            jsonPath + ".subscriptions",
+-            json["subscriptions"],
+-            (String jsonPath, Object json) =3D>
+-                new ExecutionService.fromJson(jsonDecoder, jsonPath, json=
));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+-      }
+-      return new ExecutionSetSubscriptionsParams(subscriptions);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "execution.setSubscriptions params", json);
+-    }
+-  }
+-
+-  factory ExecutionSetSubscriptionsParams.fromRequest(Request request) {
+-    return new ExecutionSetSubscriptionsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["subscriptions"] =3D
+-        subscriptions.map((ExecutionService value) =3D> value.toJson()).t=
oList();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.setSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionSetSubscriptionsParams) {
+-      return listEqual(subscriptions, other.subscriptions,
+-          (ExecutionService a, ExecutionService b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * execution.setSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionSetSubscriptionsResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExecutionSetSubscriptionsResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 287678780;
+-  }
+-}
+-
+-/**
+- * extractLocalVariable feedback
+- *
+- * {
+- *   "coveringExpressionOffsets": optional List<int>
+- *   "coveringExpressionLengths": optional List<int>
+- *   "names": List<String>
+- *   "offsets": List<int>
+- *   "lengths": List<int>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractLocalVariableFeedback extends RefactoringFeedback {
+-  List<int> _coveringExpressionOffsets;
+-
+-  List<int> _coveringExpressionLengths;
+-
+-  List<String> _names;
+-
+-  List<int> _offsets;
+-
+-  List<int> _lengths;
+-
+-  /**
+-   * The offsets of the expressions that cover the specified selection, f=
rom
+-   * the down most to the up most.
+-   */
+-  List<int> get coveringExpressionOffsets =3D> _coveringExpressionOffsets;
+-
+-  /**
+-   * The offsets of the expressions that cover the specified selection, f=
rom
+-   * the down most to the up most.
+-   */
+-  void set coveringExpressionOffsets(List<int> value) {
+-    this._coveringExpressionOffsets =3D value;
+-  }
+-
+-  /**
+-   * The lengths of the expressions that cover the specified selection, f=
rom
+-   * the down most to the up most.
+-   */
+-  List<int> get coveringExpressionLengths =3D> _coveringExpressionLengths;
+-
+-  /**
+-   * The lengths of the expressions that cover the specified selection, f=
rom
+-   * the down most to the up most.
+-   */
+-  void set coveringExpressionLengths(List<int> value) {
+-    this._coveringExpressionLengths =3D value;
+-  }
+-
+-  /**
+-   * The proposed names for the local variable.
+-   */
+-  List<String> get names =3D> _names;
+-
+-  /**
+-   * The proposed names for the local variable.
+-   */
+-  void set names(List<String> value) {
+-    assert(value !=3D null);
+-    this._names =3D value;
+-  }
+-
+-  /**
+-   * The offsets of the expressions that would be replaced by a reference=
 to
+-   * the variable.
+-   */
+-  List<int> get offsets =3D> _offsets;
+-
+-  /**
+-   * The offsets of the expressions that would be replaced by a reference=
 to
+-   * the variable.
+-   */
+-  void set offsets(List<int> value) {
+-    assert(value !=3D null);
+-    this._offsets =3D value;
+-  }
+-
+-  /**
+-   * 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], th=
en the
+-   * length of that expression is lengths[i].
+-   */
+-  List<int> get lengths =3D> _lengths;
+-
+-  /**
+-   * 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], th=
en the
+-   * length of that expression is lengths[i].
+-   */
+-  void set lengths(List<int> value) {
+-    assert(value !=3D null);
+-    this._lengths =3D value;
+-  }
+-
+-  ExtractLocalVariableFeedback(
+-      List<String> names, List<int> offsets, List<int> lengths,
+-      {List<int> coveringExpressionOffsets,
+-      List<int> coveringExpressionLengths}) {
+-    this.coveringExpressionOffsets =3D coveringExpressionOffsets;
+-    this.coveringExpressionLengths =3D coveringExpressionLengths;
+-    this.names =3D names;
+-    this.offsets =3D offsets;
+-    this.lengths =3D lengths;
+-  }
+-
+-  factory ExtractLocalVariableFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<int> coveringExpressionOffsets;
+-      if (json.containsKey("coveringExpressionOffsets")) {
+-        coveringExpressionOffsets =3D jsonDecoder.decodeList(
+-            jsonPath + ".coveringExpressionOffsets",
+-            json["coveringExpressionOffsets"],
+-            jsonDecoder.decodeInt);
+-      }
+-      List<int> coveringExpressionLengths;
+-      if (json.containsKey("coveringExpressionLengths")) {
+-        coveringExpressionLengths =3D jsonDecoder.decodeList(
+-            jsonPath + ".coveringExpressionLengths",
+-            json["coveringExpressionLengths"],
+-            jsonDecoder.decodeInt);
+-      }
+-      List<String> names;
+-      if (json.containsKey("names")) {
+-        names =3D jsonDecoder.decodeList(
+-            jsonPath + ".names", json["names"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "names");
+-      }
+-      List<int> offsets;
+-      if (json.containsKey("offsets")) {
+-        offsets =3D jsonDecoder.decodeList(
+-            jsonPath + ".offsets", json["offsets"], jsonDecoder.decodeInt=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offsets");
+-      }
+-      List<int> lengths;
+-      if (json.containsKey("lengths")) {
+-        lengths =3D jsonDecoder.decodeList(
+-            jsonPath + ".lengths", json["lengths"], jsonDecoder.decodeInt=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "lengths");
+-      }
+-      return new ExtractLocalVariableFeedback(names, offsets, lengths,
+-          coveringExpressionOffsets: coveringExpressionOffsets,
+-          coveringExpressionLengths: coveringExpressionLengths);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "extractLocalVariable feedback", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    if (coveringExpressionOffsets !=3D null) {
+-      result["coveringExpressionOffsets"] =3D coveringExpressionOffsets;
+-    }
+-    if (coveringExpressionLengths !=3D null) {
+-      result["coveringExpressionLengths"] =3D coveringExpressionLengths;
+-    }
+-    result["names"] =3D names;
+-    result["offsets"] =3D offsets;
+-    result["lengths"] =3D lengths;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExtractLocalVariableFeedback) {
+-      return listEqual(coveringExpressionOffsets,
+-              other.coveringExpressionOffsets, (int a, int b) =3D> a =3D=
=3D b) &&
+-          listEqual(coveringExpressionLengths, other.coveringExpressionLe=
ngths,
+-              (int a, int b) =3D> a =3D=3D b) &&
+-          listEqual(names, other.names, (String a, String b) =3D> a =3D=
=3D b) &&
+-          listEqual(offsets, other.offsets, (int a, int b) =3D> a =3D=3D =
b) &&
+-          listEqual(lengths, other.lengths, (int a, int b) =3D> a =3D=3D =
b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, coveringExpressionOffsets.hashC=
ode);
+-    hash =3D JenkinsSmiHash.combine(hash, coveringExpressionLengths.hashC=
ode);
+-    hash =3D JenkinsSmiHash.combine(hash, names.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offsets.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, lengths.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * extractLocalVariable options
+- *
+- * {
+- *   "name": String
+- *   "extractAll": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractLocalVariableOptions extends RefactoringOptions {
+-  String _name;
+-
+-  bool _extractAll;
+-
+-  /**
+-   * The name that the local variable should be given.
+-   */
+-  String get name =3D> _name;
+-
+-  /**
+-   * The name that the local variable should be given.
+-   */
+-  void set name(String value) {
+-    assert(value !=3D null);
+-    this._name =3D value;
+-  }
+-
+-  /**
+-   * 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 lo=
cal
+-   * variable. The expression used to initiate the refactoring will alway=
s be
+-   * replaced.
+-   */
+-  bool get extractAll =3D> _extractAll;
+-
+-  /**
+-   * 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 lo=
cal
+-   * variable. The expression used to initiate the refactoring will alway=
s be
+-   * replaced.
+-   */
+-  void set extractAll(bool value) {
+-    assert(value !=3D null);
+-    this._extractAll =3D value;
+-  }
+-
+-  ExtractLocalVariableOptions(String name, bool extractAll) {
+-    this.name =3D name;
+-    this.extractAll =3D extractAll;
+-  }
+-
+-  factory ExtractLocalVariableOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      bool extractAll;
+-      if (json.containsKey("extractAll")) {
+-        extractAll =3D jsonDecoder.decodeBool(
+-            jsonPath + ".extractAll", json["extractAll"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "extractAll");
+-      }
+-      return new ExtractLocalVariableOptions(name, extractAll);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "extractLocalVariable options", json);
+-    }
+-  }
+-
+-  factory ExtractLocalVariableOptions.fromRefactoringParams(
+-      EditGetRefactoringParams refactoringParams, Request request) {
+-    return new ExtractLocalVariableOptions.fromJson(
+-        new RequestDecoder(request), "options", refactoringParams.options=
);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["name"] =3D name;
+-    result["extractAll"] =3D extractAll;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExtractLocalVariableOptions) {
+-      return name =3D=3D other.name && extractAll =3D=3D other.extractAll;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, extractAll.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * extractMethod feedback
+- *
+- * {
+- *   "offset": int
+- *   "length": int
+- *   "returnType": String
+- *   "names": List<String>
+- *   "canCreateGetter": bool
+- *   "parameters": List<RefactoringMethodParameter>
+- *   "offsets": List<int>
+- *   "lengths": List<int>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractMethodFeedback extends RefactoringFeedback {
+-  int _offset;
+-
+-  int _length;
+-
+-  String _returnType;
+-
+-  List<String> _names;
+-
+-  bool _canCreateGetter;
+-
+-  List<RefactoringMethodParameter> _parameters;
+-
+-  List<int> _offsets;
+-
+-  List<int> _lengths;
+-
+-  /**
+-   * The offset to the beginning of the expression or statements that wil=
l be
+-   * extracted.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset to the beginning of the expression or statements that wil=
l be
+-   * extracted.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the expression or statements that will be extracted.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the expression or statements that will be extracted.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  /**
+-   * The proposed return type for the method. If the returned element doe=
s not
+-   * have a declared return type, this field will contain an empty string.
+-   */
+-  String get returnType =3D> _returnType;
+-
+-  /**
+-   * The proposed return type for the method. If the returned element doe=
s not
+-   * have a declared return type, this field will contain an empty string.
+-   */
+-  void set returnType(String value) {
+-    assert(value !=3D null);
+-    this._returnType =3D value;
+-  }
+-
+-  /**
+-   * The proposed names for the method.
+-   */
+-  List<String> get names =3D> _names;
+-
+-  /**
+-   * The proposed names for the method.
+-   */
+-  void set names(List<String> value) {
+-    assert(value !=3D null);
+-    this._names =3D value;
+-  }
+-
+-  /**
+-   * True if a getter could be created rather than a method.
+-   */
+-  bool get canCreateGetter =3D> _canCreateGetter;
+-
+-  /**
+-   * True if a getter could be created rather than a method.
+-   */
+-  void set canCreateGetter(bool value) {
+-    assert(value !=3D null);
+-    this._canCreateGetter =3D value;
+-  }
+-
+-  /**
+-   * The proposed parameters for the method.
+-   */
+-  List<RefactoringMethodParameter> get parameters =3D> _parameters;
+-
+-  /**
+-   * The proposed parameters for the method.
+-   */
+-  void set parameters(List<RefactoringMethodParameter> value) {
+-    assert(value !=3D null);
+-    this._parameters =3D value;
+-  }
+-
+-  /**
+-   * The offsets of the expressions or statements that would be replaced =
by an
+-   * invocation of the method.
+-   */
+-  List<int> get offsets =3D> _offsets;
+-
+-  /**
+-   * The offsets of the expressions or statements that would be replaced =
by an
+-   * invocation of the method.
+-   */
+-  void set offsets(List<int> value) {
+-    assert(value !=3D null);
+-    this._offsets =3D value;
+-  }
+-
+-  /**
+-   * 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 offse=
t of
+-   * that expression is offsets[i], then the length of that expression is
+-   * lengths[i].
+-   */
+-  List<int> get lengths =3D> _lengths;
+-
+-  /**
+-   * 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 offse=
t of
+-   * that expression is offsets[i], then the length of that expression is
+-   * lengths[i].
+-   */
+-  void set lengths(List<int> value) {
+-    assert(value !=3D null);
+-    this._lengths =3D value;
+-  }
+-
+-  ExtractMethodFeedback(
+-      int offset,
+-      int length,
+-      String returnType,
+-      List<String> names,
+-      bool canCreateGetter,
+-      List<RefactoringMethodParameter> parameters,
+-      List<int> offsets,
+-      List<int> lengths) {
+-    this.offset =3D offset;
+-    this.length =3D length;
+-    this.returnType =3D returnType;
+-    this.names =3D names;
+-    this.canCreateGetter =3D canCreateGetter;
+-    this.parameters =3D parameters;
+-    this.offsets =3D offsets;
+-    this.lengths =3D lengths;
+-  }
+-
+-  factory ExtractMethodFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String returnType;
+-      if (json.containsKey("returnType")) {
+-        returnType =3D jsonDecoder.decodeString(
+-            jsonPath + ".returnType", json["returnType"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "returnType");
+-      }
+-      List<String> names;
+-      if (json.containsKey("names")) {
+-        names =3D jsonDecoder.decodeList(
+-            jsonPath + ".names", json["names"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "names");
+-      }
+-      bool canCreateGetter;
+-      if (json.containsKey("canCreateGetter")) {
+-        canCreateGetter =3D jsonDecoder.decodeBool(
+-            jsonPath + ".canCreateGetter", json["canCreateGetter"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "canCreateGetter");
+-      }
+-      List<RefactoringMethodParameter> parameters;
+-      if (json.containsKey("parameters")) {
+-        parameters =3D jsonDecoder.decodeList(
+-            jsonPath + ".parameters",
+-            json["parameters"],
+-            (String jsonPath, Object json) =3D>
+-                new RefactoringMethodParameter.fromJson(
+-                    jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "parameters");
+-      }
+-      List<int> offsets;
+-      if (json.containsKey("offsets")) {
+-        offsets =3D jsonDecoder.decodeList(
+-            jsonPath + ".offsets", json["offsets"], jsonDecoder.decodeInt=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offsets");
+-      }
+-      List<int> lengths;
+-      if (json.containsKey("lengths")) {
+-        lengths =3D jsonDecoder.decodeList(
+-            jsonPath + ".lengths", json["lengths"], jsonDecoder.decodeInt=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "lengths");
+-      }
+-      return new ExtractMethodFeedback(offset, length, returnType, names,
+-          canCreateGetter, parameters, offsets, lengths);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "extractMethod feedback", json=
);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    result["returnType"] =3D returnType;
+-    result["names"] =3D names;
+-    result["canCreateGetter"] =3D canCreateGetter;
+-    result["parameters"] =3D parameters
+-        .map((RefactoringMethodParameter value) =3D> value.toJson())
+-        .toList();
+-    result["offsets"] =3D offsets;
+-    result["lengths"] =3D lengths;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExtractMethodFeedback) {
+-      return offset =3D=3D other.offset &&
+-          length =3D=3D other.length &&
+-          returnType =3D=3D other.returnType &&
+-          listEqual(names, other.names, (String a, String b) =3D> a =3D=
=3D b) &&
+-          canCreateGetter =3D=3D other.canCreateGetter &&
+-          listEqual(
+-              parameters,
+-              other.parameters,
+-              (RefactoringMethodParameter a, RefactoringMethodParameter b=
) =3D>
+-                  a =3D=3D b) &&
+-          listEqual(offsets, other.offsets, (int a, int b) =3D> a =3D=3D =
b) &&
+-          listEqual(lengths, other.lengths, (int a, int b) =3D> a =3D=3D =
b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, returnType.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, names.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, canCreateGetter.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, parameters.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offsets.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, lengths.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * extractMethod options
+- *
+- * {
+- *   "returnType": String
+- *   "createGetter": bool
+- *   "name": String
+- *   "parameters": List<RefactoringMethodParameter>
+- *   "extractAll": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractMethodOptions extends RefactoringOptions {
+-  String _returnType;
+-
+-  bool _createGetter;
+-
+-  String _name;
+-
+-  List<RefactoringMethodParameter> _parameters;
+-
+-  bool _extractAll;
+-
+-  /**
+-   * The return type that should be defined for the method.
+-   */
+-  String get returnType =3D> _returnType;
+-
+-  /**
+-   * The return type that should be defined for the method.
+-   */
+-  void set returnType(String value) {
+-    assert(value !=3D null);
+-    this._returnType =3D value;
+-  }
+-
+-  /**
+-   * True if a getter should be created rather than a method. It is an er=
ror if
+-   * this field is true and the list of parameters is non-empty.
+-   */
+-  bool get createGetter =3D> _createGetter;
+-
+-  /**
+-   * True if a getter should be created rather than a method. It is an er=
ror if
+-   * this field is true and the list of parameters is non-empty.
+-   */
+-  void set createGetter(bool value) {
+-    assert(value !=3D null);
+-    this._createGetter =3D value;
+-  }
+-
+-  /**
+-   * The name that the method should be given.
+-   */
+-  String get name =3D> _name;
+-
+-  /**
+-   * The name that the method should be given.
+-   */
+-  void set name(String value) {
+-    assert(value !=3D null);
+-    this._name =3D value;
+-  }
+-
+-  /**
+-   * The parameters that should be defined for the method.
+-   *
+-   * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL
+-   * parameter. It is an error if a REQUIRED or POSITIONAL parameter foll=
ows a
+-   * NAMED parameter.
+-   *
+-   * - To change the order and/or update proposed parameters, add paramet=
ers
+-   *   with the same identifiers as proposed.
+-   * - To add new parameters, omit their identifier.
+-   * - To remove some parameters, omit them in this list.
+-   */
+-  List<RefactoringMethodParameter> get parameters =3D> _parameters;
+-
+-  /**
+-   * The parameters that should be defined for the method.
+-   *
+-   * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL
+-   * parameter. It is an error if a REQUIRED or POSITIONAL parameter foll=
ows a
+-   * NAMED parameter.
+-   *
+-   * - To change the order and/or update proposed parameters, add paramet=
ers
+-   *   with the same identifiers as proposed.
+-   * - To add new parameters, omit their identifier.
+-   * - To remove some parameters, omit them in this list.
+-   */
+-  void set parameters(List<RefactoringMethodParameter> value) {
+-    assert(value !=3D null);
+-    this._parameters =3D value;
+-  }
+-
+-  /**
+-   * True if all occurrences of the expression or statements should be re=
placed
+-   * by an invocation of the method. The expression or statements used to
+-   * initiate the refactoring will always be replaced.
+-   */
+-  bool get extractAll =3D> _extractAll;
+-
+-  /**
+-   * True if all occurrences of the expression or statements should be re=
placed
+-   * by an invocation of the method. The expression or statements used to
+-   * initiate the refactoring will always be replaced.
+-   */
+-  void set extractAll(bool value) {
+-    assert(value !=3D null);
+-    this._extractAll =3D value;
+-  }
+-
+-  ExtractMethodOptions(String returnType, bool createGetter, String name,
+-      List<RefactoringMethodParameter> parameters, bool extractAll) {
+-    this.returnType =3D returnType;
+-    this.createGetter =3D createGetter;
+-    this.name =3D name;
+-    this.parameters =3D parameters;
+-    this.extractAll =3D extractAll;
+-  }
+-
+-  factory ExtractMethodOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String returnType;
+-      if (json.containsKey("returnType")) {
+-        returnType =3D jsonDecoder.decodeString(
+-            jsonPath + ".returnType", json["returnType"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "returnType");
+-      }
+-      bool createGetter;
+-      if (json.containsKey("createGetter")) {
+-        createGetter =3D jsonDecoder.decodeBool(
+-            jsonPath + ".createGetter", json["createGetter"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "createGetter");
+-      }
+-      String name;
+-      if (json.containsKey("name")) {
+-        name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      List<RefactoringMethodParameter> parameters;
+-      if (json.containsKey("parameters")) {
+-        parameters =3D jsonDecoder.decodeList(
+-            jsonPath + ".parameters",
+-            json["parameters"],
+-            (String jsonPath, Object json) =3D>
+-                new RefactoringMethodParameter.fromJson(
+-                    jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "parameters");
+-      }
+-      bool extractAll;
+-      if (json.containsKey("extractAll")) {
+-        extractAll =3D jsonDecoder.decodeBool(
+-            jsonPath + ".extractAll", json["extractAll"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "extractAll");
+-      }
+-      return new ExtractMethodOptions(
+-          returnType, createGetter, name, parameters, extractAll);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "extractMethod options", json);
+-    }
+-  }
+-
+-  factory ExtractMethodOptions.fromRefactoringParams(
+-      EditGetRefactoringParams refactoringParams, Request request) {
+-    return new ExtractMethodOptions.fromJson(
+-        new RequestDecoder(request), "options", refactoringParams.options=
);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["returnType"] =3D returnType;
+-    result["createGetter"] =3D createGetter;
+-    result["name"] =3D name;
+-    result["parameters"] =3D parameters
+-        .map((RefactoringMethodParameter value) =3D> value.toJson())
+-        .toList();
+-    result["extractAll"] =3D extractAll;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ExtractMethodOptions) {
+-      return returnType =3D=3D other.returnType &&
+-          createGetter =3D=3D other.createGetter &&
+-          name =3D=3D other.name &&
+-          listEqual(
+-              parameters,
+-              other.parameters,
+-              (RefactoringMethodParameter a, RefactoringMethodParameter b=
) =3D>
+-                  a =3D=3D b) &&
+-          extractAll =3D=3D other.extractAll;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, returnType.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, createGetter.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, parameters.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, extractAll.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * FileKind
+- *
+- * enum {
+- *   LIBRARY
+- *   PART
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class FileKind implements Enum {
+-  static const FileKind LIBRARY =3D const FileKind._("LIBRARY");
+-
+-  static const FileKind PART =3D const FileKind._("PART");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<FileKind> VALUES =3D const <FileKind>[LIBRARY, PART];
+-
+-  @override
+-  final String name;
+-
+-  const FileKind._(this.name);
+-
+-  factory FileKind(String name) {
+-    switch (name) {
+-      case "LIBRARY":
+-        return LIBRARY;
+-      case "PART":
+-        return PART;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory FileKind.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new FileKind(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "FileKind", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "FileKind.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * GeneralAnalysisService
+- *
+- * enum {
+- *   ANALYZED_FILES
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class GeneralAnalysisService implements Enum {
+-  static const GeneralAnalysisService ANALYZED_FILES =3D
+-      const GeneralAnalysisService._("ANALYZED_FILES");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<GeneralAnalysisService> VALUES =3D
+-      const <GeneralAnalysisService>[ANALYZED_FILES];
+-
+-  @override
+-  final String name;
+-
+-  const GeneralAnalysisService._(this.name);
+-
+-  factory GeneralAnalysisService(String name) {
+-    switch (name) {
+-      case "ANALYZED_FILES":
+-        return ANALYZED_FILES;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory GeneralAnalysisService.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new GeneralAnalysisService(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "GeneralAnalysisService", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "GeneralAnalysisService.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * HoverInformation
+- *
+- * {
+- *   "offset": int
+- *   "length": int
+- *   "containingLibraryPath": optional String
+- *   "containingLibraryName": optional String
+- *   "containingClassDescription": optional String
+- *   "dartdoc": optional String
+- *   "elementDescription": optional String
+- *   "elementKind": optional String
+- *   "isDeprecated": optional bool
+- *   "parameter": optional String
+- *   "propagatedType": optional String
+- *   "staticType": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class HoverInformation implements HasToJson {
+-  int _offset;
+-
+-  int _length;
+-
+-  String _containingLibraryPath;
+-
+-  String _containingLibraryName;
+-
+-  String _containingClassDescription;
+-
+-  String _dartdoc;
+-
+-  String _elementDescription;
+-
+-  String _elementKind;
+-
+-  bool _isDeprecated;
+-
+-  String _parameter;
+-
+-  String _propagatedType;
+-
+-  String _staticType;
+-
+-  /**
+-   * The offset of the range of characters that encompasses the cursor po=
sition
+-   * and has the same hover information as the cursor position.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the range of characters that encompasses the cursor po=
sition
+-   * and has the same hover information as the cursor position.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the range of characters that encompasses the cursor po=
sition
+-   * and has the same hover information as the cursor position.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the range of characters that encompasses the cursor po=
sition
+-   * and has the same hover information as the cursor position.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  /**
+-   * 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 fil=
e.
+-   */
+-  String get containingLibraryPath =3D> _containingLibraryPath;
+-
+-  /**
+-   * 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 fil=
e.
+-   */
+-  void set containingLibraryPath(String value) {
+-    this._containingLibraryPath =3D value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get containingLibraryName =3D> _containingLibraryName;
+-
+-  /**
+-   * 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.
+-   */
+-  void set containingLibraryName(String value) {
+-    this._containingLibraryName =3D value;
+-  }
+-
+-  /**
+-   * A human-readable description of the class declaring the element being
+-   * referenced. This data is omitted if there is no referenced element, =
or if
+-   * the element is not a class member.
+-   */
+-  String get containingClassDescription =3D> _containingClassDescription;
+-
+-  /**
+-   * A human-readable description of the class declaring the element being
+-   * referenced. This data is omitted if there is no referenced element, =
or if
+-   * the element is not a class member.
+-   */
+-  void set containingClassDescription(String value) {
+-    this._containingClassDescription =3D value;
+-  }
+-
+-  /**
+-   * The dartdoc associated with the referenced element. Other than the r=
emoval
+-   * of the comment delimiters, including leading asterisks in the case o=
f a
+-   * block comment, the dartdoc is unprocessed markdown. This data is omi=
tted
+-   * if there is no referenced element, or if the element has no dartdoc.
+-   */
+-  String get dartdoc =3D> _dartdoc;
+-
+-  /**
+-   * The dartdoc associated with the referenced element. Other than the r=
emoval
+-   * of the comment delimiters, including leading asterisks in the case o=
f a
+-   * block comment, the dartdoc is unprocessed markdown. This data is omi=
tted
+-   * if there is no referenced element, or if the element has no dartdoc.
+-   */
+-  void set dartdoc(String value) {
+-    this._dartdoc =3D value;
+-  }
+-
+-  /**
+-   * A human-readable description of the element being referenced. This d=
ata is
+-   * omitted if there is no referenced element.
+-   */
+-  String get elementDescription =3D> _elementDescription;
+-
+-  /**
+-   * A human-readable description of the element being referenced. This d=
ata is
+-   * omitted if there is no referenced element.
+-   */
+-  void set elementDescription(String value) {
+-    this._elementDescription =3D value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get elementKind =3D> _elementKind;
+-
+-  /**
+-   * 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.
+-   */
+-  void set elementKind(String value) {
+-    this._elementKind =3D value;
+-  }
+-
+-  /**
+-   * True if the referenced element is deprecated.
+-   */
+-  bool get isDeprecated =3D> _isDeprecated;
+-
+-  /**
+-   * True if the referenced element is deprecated.
+-   */
+-  void set isDeprecated(bool value) {
+-    this._isDeprecated =3D value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get parameter =3D> _parameter;
+-
+-  /**
+-   * 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.
+-   */
+-  void set parameter(String value) {
+-    this._parameter =3D value;
+-  }
+-
+-  /**
+-   * The name of the propagated type of the expression. This data is omit=
ted if
+-   * the location does not correspond to an expression or if there is no
+-   * propagated type information.
+-   */
+-  String get propagatedType =3D> _propagatedType;
+-
+-  /**
+-   * The name of the propagated type of the expression. This data is omit=
ted if
+-   * the location does not correspond to an expression or if there is no
+-   * propagated type information.
+-   */
+-  void set propagatedType(String value) {
+-    this._propagatedType =3D value;
+-  }
+-
+-  /**
+-   * The name of the static type of the expression. This data is omitted =
if the
+-   * location does not correspond to an expression.
+-   */
+-  String get staticType =3D> _staticType;
+-
+-  /**
+-   * The name of the static type of the expression. This data is omitted =
if the
+-   * location does not correspond to an expression.
+-   */
+-  void set staticType(String value) {
+-    this._staticType =3D value;
+-  }
+-
+-  HoverInformation(int offset, int length,
+-      {String containingLibraryPath,
+-      String containingLibraryName,
+-      String containingClassDescription,
+-      String dartdoc,
+-      String elementDescription,
+-      String elementKind,
+-      bool isDeprecated,
+-      String parameter,
+-      String propagatedType,
+-      String staticType}) {
+-    this.offset =3D offset;
+-    this.length =3D length;
+-    this.containingLibraryPath =3D containingLibraryPath;
+-    this.containingLibraryName =3D containingLibraryName;
+-    this.containingClassDescription =3D containingClassDescription;
+-    this.dartdoc =3D dartdoc;
+-    this.elementDescription =3D elementDescription;
+-    this.elementKind =3D elementKind;
+-    this.isDeprecated =3D isDeprecated;
+-    this.parameter =3D parameter;
+-    this.propagatedType =3D propagatedType;
+-    this.staticType =3D staticType;
+-  }
+-
+-  factory HoverInformation.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String containingLibraryPath;
+-      if (json.containsKey("containingLibraryPath")) {
+-        containingLibraryPath =3D jsonDecoder.decodeString(
+-            jsonPath + ".containingLibraryPath", json["containingLibraryP=
ath"]);
+-      }
+-      String containingLibraryName;
+-      if (json.containsKey("containingLibraryName")) {
+-        containingLibraryName =3D jsonDecoder.decodeString(
+-            jsonPath + ".containingLibraryName", json["containingLibraryN=
ame"]);
+-      }
+-      String containingClassDescription;
+-      if (json.containsKey("containingClassDescription")) {
+-        containingClassDescription =3D jsonDecoder.decodeString(
+-            jsonPath + ".containingClassDescription",
+-            json["containingClassDescription"]);
+-      }
+-      String dartdoc;
+-      if (json.containsKey("dartdoc")) {
+-        dartdoc =3D
+-            jsonDecoder.decodeString(jsonPath + ".dartdoc", json["dartdoc=
"]);
+-      }
+-      String elementDescription;
+-      if (json.containsKey("elementDescription")) {
+-        elementDescription =3D jsonDecoder.decodeString(
+-            jsonPath + ".elementDescription", json["elementDescription"]);
+-      }
+-      String elementKind;
+-      if (json.containsKey("elementKind")) {
+-        elementKind =3D jsonDecoder.decodeString(
+-            jsonPath + ".elementKind", json["elementKind"]);
+-      }
+-      bool isDeprecated;
+-      if (json.containsKey("isDeprecated")) {
+-        isDeprecated =3D jsonDecoder.decodeBool(
+-            jsonPath + ".isDeprecated", json["isDeprecated"]);
+-      }
+-      String parameter;
+-      if (json.containsKey("parameter")) {
+-        parameter =3D jsonDecoder.decodeString(
+-            jsonPath + ".parameter", json["parameter"]);
+-      }
+-      String propagatedType;
+-      if (json.containsKey("propagatedType")) {
+-        propagatedType =3D jsonDecoder.decodeString(
+-            jsonPath + ".propagatedType", json["propagatedType"]);
+-      }
+-      String staticType;
+-      if (json.containsKey("staticType")) {
+-        staticType =3D jsonDecoder.decodeString(
+-            jsonPath + ".staticType", json["staticType"]);
+-      }
+-      return new HoverInformation(offset, length,
+-          containingLibraryPath: containingLibraryPath,
+-          containingLibraryName: containingLibraryName,
+-          containingClassDescription: containingClassDescription,
+-          dartdoc: dartdoc,
+-          elementDescription: elementDescription,
+-          elementKind: elementKind,
+-          isDeprecated: isDeprecated,
+-          parameter: parameter,
+-          propagatedType: propagatedType,
+-          staticType: staticType);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "HoverInformation", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    if (containingLibraryPath !=3D null) {
+-      result["containingLibraryPath"] =3D containingLibraryPath;
+-    }
+-    if (containingLibraryName !=3D null) {
+-      result["containingLibraryName"] =3D containingLibraryName;
+-    }
+-    if (containingClassDescription !=3D null) {
+-      result["containingClassDescription"] =3D containingClassDescription;
+-    }
+-    if (dartdoc !=3D null) {
+-      result["dartdoc"] =3D dartdoc;
+-    }
+-    if (elementDescription !=3D null) {
+-      result["elementDescription"] =3D elementDescription;
+-    }
+-    if (elementKind !=3D null) {
+-      result["elementKind"] =3D elementKind;
+-    }
+-    if (isDeprecated !=3D null) {
+-      result["isDeprecated"] =3D isDeprecated;
+-    }
+-    if (parameter !=3D null) {
+-      result["parameter"] =3D parameter;
+-    }
+-    if (propagatedType !=3D null) {
+-      result["propagatedType"] =3D propagatedType;
+-    }
+-    if (staticType !=3D null) {
+-      result["staticType"] =3D staticType;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is HoverInformation) {
+-      return offset =3D=3D other.offset &&
+-          length =3D=3D other.length &&
+-          containingLibraryPath =3D=3D other.containingLibraryPath &&
+-          containingLibraryName =3D=3D other.containingLibraryName &&
+-          containingClassDescription =3D=3D other.containingClassDescript=
ion &&
+-          dartdoc =3D=3D other.dartdoc &&
+-          elementDescription =3D=3D other.elementDescription &&
+-          elementKind =3D=3D other.elementKind &&
+-          isDeprecated =3D=3D other.isDeprecated &&
+-          parameter =3D=3D other.parameter &&
+-          propagatedType =3D=3D other.propagatedType &&
+-          staticType =3D=3D other.staticType;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, containingLibraryPath.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, containingLibraryName.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, containingClassDescription.hash=
Code);
+-    hash =3D JenkinsSmiHash.combine(hash, dartdoc.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, elementDescription.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, elementKind.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, isDeprecated.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, parameter.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, propagatedType.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, staticType.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ImplementedClass
+- *
+- * {
+- *   "offset": int
+- *   "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ImplementedClass implements HasToJson {
+-  int _offset;
+-
+-  int _length;
+-
+-  /**
+-   * The offset of the name of the implemented class.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the name of the implemented class.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the name of the implemented class.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the name of the implemented class.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  ImplementedClass(int offset, int length) {
+-    this.offset =3D offset;
+-    this.length =3D length;
+-  }
+-
+-  factory ImplementedClass.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      return new ImplementedClass(offset, length);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "ImplementedClass", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ImplementedClass) {
+-      return offset =3D=3D other.offset && length =3D=3D other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ImplementedMember
+- *
+- * {
+- *   "offset": int
+- *   "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ImplementedMember implements HasToJson {
+-  int _offset;
+-
+-  int _length;
+-
+-  /**
+-   * The offset of the name of the implemented member.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the name of the implemented member.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the name of the implemented member.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the name of the implemented member.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  ImplementedMember(int offset, int length) {
+-    this.offset =3D offset;
+-    this.length =3D length;
+-  }
+-
+-  factory ImplementedMember.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      return new ImplementedMember(offset, length);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "ImplementedMember", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ImplementedMember) {
+-      return offset =3D=3D other.offset && length =3D=3D other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ImportedElements
+- *
+- * {
+- *   "path": FilePath
+- *   "prefix": String
+- *   "elements": List<String>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ImportedElements implements HasToJson {
+-  String _path;
+-
+-  String _prefix;
+-
+-  List<String> _elements;
+-
+-  /**
+-   * The absolute and normalized path of the file containing the library.
+-   */
+-  String get path =3D> _path;
+-
+-  /**
+-   * The absolute and normalized path of the file containing the library.
+-   */
+-  void set path(String value) {
+-    assert(value !=3D null);
+-    this._path =3D value;
+-  }
+-
+-  /**
+-   * The prefix that was used when importing the library into the original
+-   * source.
+-   */
+-  String get prefix =3D> _prefix;
+-
+-  /**
+-   * The prefix that was used when importing the library into the original
+-   * source.
+-   */
+-  void set prefix(String value) {
+-    assert(value !=3D null);
+-    this._prefix =3D value;
+-  }
+-
+-  /**
+-   * The names of the elements imported from the library.
+-   */
+-  List<String> get elements =3D> _elements;
+-
+-  /**
+-   * The names of the elements imported from the library.
+-   */
+-  void set elements(List<String> value) {
+-    assert(value !=3D null);
+-    this._elements =3D value;
+-  }
+-
+-  ImportedElements(String path, String prefix, List<String> elements) {
+-    this.path =3D path;
+-    this.prefix =3D prefix;
+-    this.elements =3D elements;
+-  }
+-
+-  factory ImportedElements.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String path;
+-      if (json.containsKey("path")) {
+-        path =3D jsonDecoder.decodeString(jsonPath + ".path", json["path"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "path");
+-      }
+-      String prefix;
+-      if (json.containsKey("prefix")) {
+-        prefix =3D jsonDecoder.decodeString(jsonPath + ".prefix", json["p=
refix"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "prefix");
+-      }
+-      List<String> elements;
+-      if (json.containsKey("elements")) {
+-        elements =3D jsonDecoder.decodeList(
+-            jsonPath + ".elements", json["elements"], jsonDecoder.decodeS=
tring);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "elements");
+-      }
+-      return new ImportedElements(path, prefix, elements);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "ImportedElements", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["path"] =3D path;
+-    result["prefix"] =3D prefix;
+-    result["elements"] =3D elements;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ImportedElements) {
+-      return path =3D=3D other.path &&
+-          prefix =3D=3D other.prefix &&
+-          listEqual(elements, other.elements, (String a, String b) =3D> a=
 =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, path.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, prefix.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, elements.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * inlineLocalVariable feedback
+- *
+- * {
+- *   "name": String
+- *   "occurrences": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineLocalVariableFeedback extends RefactoringFeedback {
+-  String _name;
+-
+-  int _occurrences;
+-
+-  /**
+-   * The name of the variable being inlined.
+-   */
+-  String get name =3D> _name;
+-
+-  /**
+-   * The name of the variable being inlined.
+-   */
+-  void set name(String value) {
+-    assert(value !=3D null);
+-    this._name =3D value;
+-  }
+-
+-  /**
+-   * The number of times the variable occurs.
+-   */
+-  int get occurrences =3D> _occurrences;
+-
+-  /**
+-   * The number of times the variable occurs.
+-   */
+-  void set occurrences(int value) {
+-    assert(value !=3D null);
+-    this._occurrences =3D value;
+-  }
+-
+-  InlineLocalVariableFeedback(String name, int occurrences) {
+-    this.name =3D name;
+-    this.occurrences =3D occurrences;
+-  }
+-
+-  factory InlineLocalVariableFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      int occurrences;
+-      if (json.containsKey("occurrences")) {
+-        occurrences =3D jsonDecoder.decodeInt(
+-            jsonPath + ".occurrences", json["occurrences"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "occurrences");
+-      }
+-      return new InlineLocalVariableFeedback(name, occurrences);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "inlineLocalVariable feedback", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["name"] =3D name;
+-    result["occurrences"] =3D occurrences;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is InlineLocalVariableFeedback) {
+-      return name =3D=3D other.name && occurrences =3D=3D other.occurrenc=
es;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, occurrences.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * inlineLocalVariable options
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineLocalVariableOptions extends RefactoringOptions
+-    implements HasToJson {
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is InlineLocalVariableOptions) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 540364977;
+-  }
+-}
+-
+-/**
+- * inlineMethod feedback
+- *
+- * {
+- *   "className": optional String
+- *   "methodName": String
+- *   "isDeclaration": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineMethodFeedback extends RefactoringFeedback {
+-  String _className;
+-
+-  String _methodName;
+-
+-  bool _isDeclaration;
+-
+-  /**
+-   * The name of the class enclosing the method being inlined. If not a c=
lass
+-   * member is being inlined, this field will be absent.
+-   */
+-  String get className =3D> _className;
+-
+-  /**
+-   * The name of the class enclosing the method being inlined. If not a c=
lass
+-   * member is being inlined, this field will be absent.
+-   */
+-  void set className(String value) {
+-    this._className =3D value;
+-  }
+-
+-  /**
+-   * The name of the method (or function) being inlined.
+-   */
+-  String get methodName =3D> _methodName;
+-
+-  /**
+-   * The name of the method (or function) being inlined.
+-   */
+-  void set methodName(String value) {
+-    assert(value !=3D null);
+-    this._methodName =3D value;
+-  }
+-
+-  /**
+-   * True if the declaration of the method is selected. So all references
+-   * should be inlined.
+-   */
+-  bool get isDeclaration =3D> _isDeclaration;
+-
+-  /**
+-   * True if the declaration of the method is selected. So all references
+-   * should be inlined.
+-   */
+-  void set isDeclaration(bool value) {
+-    assert(value !=3D null);
+-    this._isDeclaration =3D value;
+-  }
+-
+-  InlineMethodFeedback(String methodName, bool isDeclaration,
+-      {String className}) {
+-    this.className =3D className;
+-    this.methodName =3D methodName;
+-    this.isDeclaration =3D isDeclaration;
+-  }
+-
+-  factory InlineMethodFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String className;
+-      if (json.containsKey("className")) {
+-        className =3D jsonDecoder.decodeString(
+-            jsonPath + ".className", json["className"]);
+-      }
+-      String methodName;
+-      if (json.containsKey("methodName")) {
+-        methodName =3D jsonDecoder.decodeString(
+-            jsonPath + ".methodName", json["methodName"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "methodName");
+-      }
+-      bool isDeclaration;
+-      if (json.containsKey("isDeclaration")) {
+-        isDeclaration =3D jsonDecoder.decodeBool(
+-            jsonPath + ".isDeclaration", json["isDeclaration"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isDeclaration");
+-      }
+-      return new InlineMethodFeedback(methodName, isDeclaration,
+-          className: className);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "inlineMethod feedback", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    if (className !=3D null) {
+-      result["className"] =3D className;
+-    }
+-    result["methodName"] =3D methodName;
+-    result["isDeclaration"] =3D isDeclaration;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is InlineMethodFeedback) {
+-      return className =3D=3D other.className &&
+-          methodName =3D=3D other.methodName &&
+-          isDeclaration =3D=3D other.isDeclaration;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, className.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, methodName.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, isDeclaration.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * inlineMethod options
+- *
+- * {
+- *   "deleteSource": bool
+- *   "inlineAll": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineMethodOptions extends RefactoringOptions {
+-  bool _deleteSource;
+-
+-  bool _inlineAll;
+-
+-  /**
+-   * True if the method being inlined should be removed. It is an error i=
f this
+-   * field is true and inlineAll is false.
+-   */
+-  bool get deleteSource =3D> _deleteSource;
+-
+-  /**
+-   * True if the method being inlined should be removed. It is an error i=
f this
+-   * field is true and inlineAll is false.
+-   */
+-  void set deleteSource(bool value) {
+-    assert(value !=3D null);
+-    this._deleteSource =3D value;
+-  }
+-
+-  /**
+-   * True if all invocations of the method should be inlined, or false if=
 only
+-   * the invocation site used to create this refactoring should be inline=
d.
+-   */
+-  bool get inlineAll =3D> _inlineAll;
+-
+-  /**
+-   * True if all invocations of the method should be inlined, or false if=
 only
+-   * the invocation site used to create this refactoring should be inline=
d.
+-   */
+-  void set inlineAll(bool value) {
+-    assert(value !=3D null);
+-    this._inlineAll =3D value;
+-  }
+-
+-  InlineMethodOptions(bool deleteSource, bool inlineAll) {
+-    this.deleteSource =3D deleteSource;
+-    this.inlineAll =3D inlineAll;
+-  }
+-
+-  factory InlineMethodOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool deleteSource;
+-      if (json.containsKey("deleteSource")) {
+-        deleteSource =3D jsonDecoder.decodeBool(
+-            jsonPath + ".deleteSource", json["deleteSource"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "deleteSource");
+-      }
+-      bool inlineAll;
+-      if (json.containsKey("inlineAll")) {
+-        inlineAll =3D
+-            jsonDecoder.decodeBool(jsonPath + ".inlineAll", json["inlineA=
ll"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "inlineAll");
+-      }
+-      return new InlineMethodOptions(deleteSource, inlineAll);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "inlineMethod options", json);
+-    }
+-  }
+-
+-  factory InlineMethodOptions.fromRefactoringParams(
+-      EditGetRefactoringParams refactoringParams, Request request) {
+-    return new InlineMethodOptions.fromJson(
+-        new RequestDecoder(request), "options", refactoringParams.options=
);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["deleteSource"] =3D deleteSource;
+-    result["inlineAll"] =3D inlineAll;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is InlineMethodOptions) {
+-      return deleteSource =3D=3D other.deleteSource && inlineAll =3D=3D o=
ther.inlineAll;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, deleteSource.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, inlineAll.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * kythe.getKytheEntries params
+- *
+- * {
+- *   "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class KytheGetKytheEntriesParams implements RequestParams {
+-  String _file;
+-
+-  /**
+-   * The file containing the code for which the Kythe Entry objects are b=
eing
+-   * requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the code for which the Kythe Entry objects are b=
eing
+-   * requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  KytheGetKytheEntriesParams(String file) {
+-    this.file =3D file;
+-  }
+-
+-  factory KytheGetKytheEntriesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      return new KytheGetKytheEntriesParams(file);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "kythe.getKytheEntries params", json);
+-    }
+-  }
+-
+-  factory KytheGetKytheEntriesParams.fromRequest(Request request) {
+-    return new KytheGetKytheEntriesParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "kythe.getKytheEntries", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is KytheGetKytheEntriesParams) {
+-      return file =3D=3D other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * kythe.getKytheEntries result
+- *
+- * {
+- *   "entries": List<KytheEntry>
+- *   "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class KytheGetKytheEntriesResult implements ResponseResult {
+-  List<KytheEntry> _entries;
+-
+-  List<String> _files;
+-
+-  /**
+-   * The list of KytheEntry objects for the queried file.
+-   */
+-  List<KytheEntry> get entries =3D> _entries;
+-
+-  /**
+-   * The list of KytheEntry objects for the queried file.
+-   */
+-  void set entries(List<KytheEntry> value) {
+-    assert(value !=3D null);
+-    this._entries =3D value;
+-  }
+-
+-  /**
+-   * The set of files paths that were required, but not in the file syste=
m, to
+-   * give a complete and accurate Kythe graph for the file. This could be=
 due
+-   * to a referenced file that does not exist or generated files not being
+-   * generated or passed before the call to "getKytheEntries".
+-   */
+-  List<String> get files =3D> _files;
+-
+-  /**
+-   * The set of files paths that were required, but not in the file syste=
m, to
+-   * give a complete and accurate Kythe graph for the file. This could be=
 due
+-   * to a referenced file that does not exist or generated files not being
+-   * generated or passed before the call to "getKytheEntries".
+-   */
+-  void set files(List<String> value) {
+-    assert(value !=3D null);
+-    this._files =3D value;
+-  }
+-
+-  KytheGetKytheEntriesResult(List<KytheEntry> entries, List<String> files=
) {
+-    this.entries =3D entries;
+-    this.files =3D files;
+-  }
+-
+-  factory KytheGetKytheEntriesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<KytheEntry> entries;
+-      if (json.containsKey("entries")) {
+-        entries =3D jsonDecoder.decodeList(
+-            jsonPath + ".entries",
+-            json["entries"],
+-            (String jsonPath, Object json) =3D>
+-                new KytheEntry.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "entries");
+-      }
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files =3D jsonDecoder.decodeList(
+-            jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "files");
+-      }
+-      return new KytheGetKytheEntriesResult(entries, files);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "kythe.getKytheEntries result", json);
+-    }
+-  }
+-
+-  factory KytheGetKytheEntriesResult.fromResponse(Response response) {
+-    return new KytheGetKytheEntriesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["entries"] =3D
+-        entries.map((KytheEntry value) =3D> value.toJson()).toList();
+-    result["files"] =3D files;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is KytheGetKytheEntriesResult) {
+-      return listEqual(
+-              entries, other.entries, (KytheEntry a, KytheEntry b) =3D> a=
 =3D=3D b) &&
+-          listEqual(files, other.files, (String a, String b) =3D> a =3D=
=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, entries.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * moveFile feedback
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class MoveFileFeedback extends RefactoringFeedback implements HasToJson {
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is MoveFileFeedback) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 438975893;
+-  }
+-}
+-
+-/**
+- * moveFile options
+- *
+- * {
+- *   "newFile": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class MoveFileOptions extends RefactoringOptions {
+-  String _newFile;
+-
+-  /**
+-   * The new file path to which the given file is being moved.
+-   */
+-  String get newFile =3D> _newFile;
+-
+-  /**
+-   * The new file path to which the given file is being moved.
+-   */
+-  void set newFile(String value) {
+-    assert(value !=3D null);
+-    this._newFile =3D value;
+-  }
+-
+-  MoveFileOptions(String newFile) {
+-    this.newFile =3D newFile;
+-  }
+-
+-  factory MoveFileOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String newFile;
+-      if (json.containsKey("newFile")) {
+-        newFile =3D
+-            jsonDecoder.decodeString(jsonPath + ".newFile", json["newFile=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "newFile");
+-      }
+-      return new MoveFileOptions(newFile);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "moveFile options", json);
+-    }
+-  }
+-
+-  factory MoveFileOptions.fromRefactoringParams(
+-      EditGetRefactoringParams refactoringParams, Request request) {
+-    return new MoveFileOptions.fromJson(
+-        new RequestDecoder(request), "options", refactoringParams.options=
);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["newFile"] =3D newFile;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is MoveFileOptions) {
+-      return newFile =3D=3D other.newFile;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, newFile.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * OverriddenMember
+- *
+- * {
+- *   "element": Element
+- *   "className": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class OverriddenMember implements HasToJson {
+-  Element _element;
+-
+-  String _className;
+-
+-  /**
+-   * The element that is being overridden.
+-   */
+-  Element get element =3D> _element;
+-
+-  /**
+-   * The element that is being overridden.
+-   */
+-  void set element(Element value) {
+-    assert(value !=3D null);
+-    this._element =3D value;
+-  }
+-
+-  /**
+-   * The name of the class in which the member is defined.
+-   */
+-  String get className =3D> _className;
+-
+-  /**
+-   * The name of the class in which the member is defined.
+-   */
+-  void set className(String value) {
+-    assert(value !=3D null);
+-    this._className =3D value;
+-  }
+-
+-  OverriddenMember(Element element, String className) {
+-    this.element =3D element;
+-    this.className =3D className;
+-  }
+-
+-  factory OverriddenMember.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      Element element;
+-      if (json.containsKey("element")) {
+-        element =3D new Element.fromJson(
+-            jsonDecoder, jsonPath + ".element", json["element"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "element");
+-      }
+-      String className;
+-      if (json.containsKey("className")) {
+-        className =3D jsonDecoder.decodeString(
+-            jsonPath + ".className", json["className"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "className");
+-      }
+-      return new OverriddenMember(element, className);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "OverriddenMember", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["element"] =3D element.toJson();
+-    result["className"] =3D className;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is OverriddenMember) {
+-      return element =3D=3D other.element && className =3D=3D other.class=
Name;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, element.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, className.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * Override
+- *
+- * {
+- *   "offset": int
+- *   "length": int
+- *   "superclassMember": optional OverriddenMember
+- *   "interfaceMembers": optional List<OverriddenMember>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Override implements HasToJson {
+-  int _offset;
+-
+-  int _length;
+-
+-  OverriddenMember _superclassMember;
+-
+-  List<OverriddenMember> _interfaceMembers;
+-
+-  /**
+-   * The offset of the name of the overriding member.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the name of the overriding member.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the name of the overriding member.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the name of the overriding member.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  /**
+-   * The member inherited from a superclass that is overridden by the
+-   * overriding member. The field is omitted if there is no superclass me=
mber,
+-   * in which case there must be at least one interface member.
+-   */
+-  OverriddenMember get superclassMember =3D> _superclassMember;
+-
+-  /**
+-   * The member inherited from a superclass that is overridden by the
+-   * overriding member. The field is omitted if there is no superclass me=
mber,
+-   * in which case there must be at least one interface member.
+-   */
+-  void set superclassMember(OverriddenMember value) {
+-    this._superclassMember =3D value;
+-  }
+-
+-  /**
+-   * The members inherited from interfaces that are overridden by the
+-   * overriding member. The field is omitted if there are no interface me=
mbers,
+-   * in which case there must be a superclass member.
+-   */
+-  List<OverriddenMember> get interfaceMembers =3D> _interfaceMembers;
+-
+-  /**
+-   * The members inherited from interfaces that are overridden by the
+-   * overriding member. The field is omitted if there are no interface me=
mbers,
+-   * in which case there must be a superclass member.
+-   */
+-  void set interfaceMembers(List<OverriddenMember> value) {
+-    this._interfaceMembers =3D value;
+-  }
+-
+-  Override(int offset, int length,
+-      {OverriddenMember superclassMember,
+-      List<OverriddenMember> interfaceMembers}) {
+-    this.offset =3D offset;
+-    this.length =3D length;
+-    this.superclassMember =3D superclassMember;
+-    this.interfaceMembers =3D interfaceMembers;
+-  }
+-
+-  factory Override.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      OverriddenMember superclassMember;
+-      if (json.containsKey("superclassMember")) {
+-        superclassMember =3D new OverriddenMember.fromJson(jsonDecoder,
+-            jsonPath + ".superclassMember", json["superclassMember"]);
+-      }
+-      List<OverriddenMember> interfaceMembers;
+-      if (json.containsKey("interfaceMembers")) {
+-        interfaceMembers =3D jsonDecoder.decodeList(
+-            jsonPath + ".interfaceMembers",
+-            json["interfaceMembers"],
+-            (String jsonPath, Object json) =3D>
+-                new OverriddenMember.fromJson(jsonDecoder, jsonPath, json=
));
+-      }
+-      return new Override(offset, length,
+-          superclassMember: superclassMember,
+-          interfaceMembers: interfaceMembers);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "Override", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    if (superclassMember !=3D null) {
+-      result["superclassMember"] =3D superclassMember.toJson();
+-    }
+-    if (interfaceMembers !=3D null) {
+-      result["interfaceMembers"] =3D interfaceMembers
+-          .map((OverriddenMember value) =3D> value.toJson())
+-          .toList();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is Override) {
+-      return offset =3D=3D other.offset &&
+-          length =3D=3D other.length &&
+-          superclassMember =3D=3D other.superclassMember &&
+-          listEqual(interfaceMembers, other.interfaceMembers,
+-              (OverriddenMember a, OverriddenMember b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, superclassMember.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, interfaceMembers.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * PostfixTemplateDescriptor
+- *
+- * {
+- *   "name": String
+- *   "key": String
+- *   "example": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class PostfixTemplateDescriptor implements HasToJson {
+-  String _name;
+-
+-  String _key;
+-
+-  String _example;
+-
+-  /**
+-   * The template name, shown in the UI.
+-   */
+-  String get name =3D> _name;
+-
+-  /**
+-   * The template name, shown in the UI.
+-   */
+-  void set name(String value) {
+-    assert(value !=3D null);
+-    this._name =3D value;
+-  }
+-
+-  /**
+-   * The unique template key, not shown in the UI.
+-   */
+-  String get key =3D> _key;
+-
+-  /**
+-   * The unique template key, not shown in the UI.
+-   */
+-  void set key(String value) {
+-    assert(value !=3D null);
+-    this._key =3D value;
+-  }
+-
+-  /**
+-   * A short example of the transformation performed when the template is
+-   * applied.
+-   */
+-  String get example =3D> _example;
+-
+-  /**
+-   * A short example of the transformation performed when the template is
+-   * applied.
+-   */
+-  void set example(String value) {
+-    assert(value !=3D null);
+-    this._example =3D value;
+-  }
+-
+-  PostfixTemplateDescriptor(String name, String key, String example) {
+-    this.name =3D name;
+-    this.key =3D key;
+-    this.example =3D example;
+-  }
+-
+-  factory PostfixTemplateDescriptor.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      String key;
+-      if (json.containsKey("key")) {
+-        key =3D jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "key");
+-      }
+-      String example;
+-      if (json.containsKey("example")) {
+-        example =3D
+-            jsonDecoder.decodeString(jsonPath + ".example", json["example=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "example");
+-      }
+-      return new PostfixTemplateDescriptor(name, key, example);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "PostfixTemplateDescriptor", j=
son);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["name"] =3D name;
+-    result["key"] =3D key;
+-    result["example"] =3D example;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is PostfixTemplateDescriptor) {
+-      return name =3D=3D other.name && key =3D=3D other.key && example =
=3D=3D other.example;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, key.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, example.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * PubStatus
+- *
+- * {
+- *   "isListingPackageDirs": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class PubStatus implements HasToJson {
+-  bool _isListingPackageDirs;
+-
+-  /**
+-   * True if the server is currently running pub to produce a list of pac=
kage
+-   * directories.
+-   */
+-  bool get isListingPackageDirs =3D> _isListingPackageDirs;
+-
+-  /**
+-   * True if the server is currently running pub to produce a list of pac=
kage
+-   * directories.
+-   */
+-  void set isListingPackageDirs(bool value) {
+-    assert(value !=3D null);
+-    this._isListingPackageDirs =3D value;
+-  }
+-
+-  PubStatus(bool isListingPackageDirs) {
+-    this.isListingPackageDirs =3D isListingPackageDirs;
+-  }
+-
+-  factory PubStatus.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool isListingPackageDirs;
+-      if (json.containsKey("isListingPackageDirs")) {
+-        isListingPackageDirs =3D jsonDecoder.decodeBool(
+-            jsonPath + ".isListingPackageDirs", json["isListingPackageDir=
s"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isListingPackageDirs");
+-      }
+-      return new PubStatus(isListingPackageDirs);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "PubStatus", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["isListingPackageDirs"] =3D isListingPackageDirs;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is PubStatus) {
+-      return isListingPackageDirs =3D=3D other.isListingPackageDirs;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, isListingPackageDirs.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * RefactoringFeedback
+- *
+- * {
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RefactoringFeedback implements HasToJson {
+-  RefactoringFeedback();
+-
+-  factory RefactoringFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json, Map response=
Json) {
+-    return refactoringFeedbackFromJson(
+-        jsonDecoder, jsonPath, json, responseJson);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is RefactoringFeedback) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * RefactoringOptions
+- *
+- * {
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RefactoringOptions implements HasToJson {
+-  RefactoringOptions();
+-
+-  factory RefactoringOptions.fromJson(JsonDecoder jsonDecoder, String jso=
nPath,
+-      Object json, RefactoringKind kind) {
+-    return refactoringOptionsFromJson(jsonDecoder, jsonPath, json, kind);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is RefactoringOptions) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * rename feedback
+- *
+- * {
+- *   "offset": int
+- *   "length": int
+- *   "elementKindName": String
+- *   "oldName": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RenameFeedback extends RefactoringFeedback {
+-  int _offset;
+-
+-  int _length;
+-
+-  String _elementKindName;
+-
+-  String _oldName;
+-
+-  /**
+-   * The offset to the beginning of the name selected to be renamed.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset to the beginning of the name selected to be renamed.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * The length of the name selected to be renamed.
+-   */
+-  int get length =3D> _length;
+-
+-  /**
+-   * The length of the name selected to be renamed.
+-   */
+-  void set length(int value) {
+-    assert(value !=3D null);
+-    this._length =3D value;
+-  }
+-
+-  /**
+-   * The human-readable description of the kind of element being renamed =
(such
+-   * as "class" or "function type alias").
+-   */
+-  String get elementKindName =3D> _elementKindName;
+-
+-  /**
+-   * The human-readable description of the kind of element being renamed =
(such
+-   * as "class" or "function type alias").
+-   */
+-  void set elementKindName(String value) {
+-    assert(value !=3D null);
+-    this._elementKindName =3D value;
+-  }
+-
+-  /**
+-   * The old name of the element before the refactoring.
+-   */
+-  String get oldName =3D> _oldName;
+-
+-  /**
+-   * The old name of the element before the refactoring.
+-   */
+-  void set oldName(String value) {
+-    assert(value !=3D null);
+-    this._oldName =3D value;
+-  }
+-
+-  RenameFeedback(
+-      int offset, int length, String elementKindName, String oldName) {
+-    this.offset =3D offset;
+-    this.length =3D length;
+-    this.elementKindName =3D elementKindName;
+-    this.oldName =3D oldName;
+-  }
+-
+-  factory RenameFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String elementKindName;
+-      if (json.containsKey("elementKindName")) {
+-        elementKindName =3D jsonDecoder.decodeString(
+-            jsonPath + ".elementKindName", json["elementKindName"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "elementKindName");
+-      }
+-      String oldName;
+-      if (json.containsKey("oldName")) {
+-        oldName =3D
+-            jsonDecoder.decodeString(jsonPath + ".oldName", json["oldName=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "oldName");
+-      }
+-      return new RenameFeedback(offset, length, elementKindName, oldName);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "rename feedback", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["offset"] =3D offset;
+-    result["length"] =3D length;
+-    result["elementKindName"] =3D elementKindName;
+-    result["oldName"] =3D oldName;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is RenameFeedback) {
+-      return offset =3D=3D other.offset &&
+-          length =3D=3D other.length &&
+-          elementKindName =3D=3D other.elementKindName &&
+-          oldName =3D=3D other.oldName;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, elementKindName.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, oldName.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * rename options
+- *
+- * {
+- *   "newName": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RenameOptions extends RefactoringOptions {
+-  String _newName;
+-
+-  /**
+-   * The name that the element should have after the refactoring.
+-   */
+-  String get newName =3D> _newName;
+-
+-  /**
+-   * The name that the element should have after the refactoring.
+-   */
+-  void set newName(String value) {
+-    assert(value !=3D null);
+-    this._newName =3D value;
+-  }
+-
+-  RenameOptions(String newName) {
+-    this.newName =3D newName;
+-  }
+-
+-  factory RenameOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String newName;
+-      if (json.containsKey("newName")) {
+-        newName =3D
+-            jsonDecoder.decodeString(jsonPath + ".newName", json["newName=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "newName");
+-      }
+-      return new RenameOptions(newName);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "rename options", json);
+-    }
+-  }
+-
+-  factory RenameOptions.fromRefactoringParams(
+-      EditGetRefactoringParams refactoringParams, Request request) {
+-    return new RenameOptions.fromJson(
+-        new RequestDecoder(request), "options", refactoringParams.options=
);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["newName"] =3D newName;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is RenameOptions) {
+-      return newName =3D=3D other.newName;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, newName.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * RequestError
+- *
+- * {
+- *   "code": RequestErrorCode
+- *   "message": String
+- *   "stackTrace": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RequestError implements HasToJson {
+-  RequestErrorCode _code;
+-
+-  String _message;
+-
+-  String _stackTrace;
+-
+-  /**
+-   * A code that uniquely identifies the error that occurred.
+-   */
+-  RequestErrorCode get code =3D> _code;
+-
+-  /**
+-   * A code that uniquely identifies the error that occurred.
+-   */
+-  void set code(RequestErrorCode value) {
+-    assert(value !=3D null);
+-    this._code =3D value;
+-  }
+-
+-  /**
+-   * A short description of the error.
+-   */
+-  String get message =3D> _message;
+-
+-  /**
+-   * A short description of the error.
+-   */
+-  void set message(String value) {
+-    assert(value !=3D null);
+-    this._message =3D value;
+-  }
+-
+-  /**
+-   * The stack trace associated with processing the request, used for deb=
ugging
+-   * the server.
+-   */
+-  String get stackTrace =3D> _stackTrace;
+-
+-  /**
+-   * The stack trace associated with processing the request, used for deb=
ugging
+-   * the server.
+-   */
+-  void set stackTrace(String value) {
+-    this._stackTrace =3D value;
+-  }
+-
+-  RequestError(RequestErrorCode code, String message, {String stackTrace}=
) {
+-    this.code =3D code;
+-    this.message =3D message;
+-    this.stackTrace =3D stackTrace;
+-  }
+-
+-  factory RequestError.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      RequestErrorCode code;
+-      if (json.containsKey("code")) {
+-        code =3D new RequestErrorCode.fromJson(
+-            jsonDecoder, jsonPath + ".code", json["code"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "code");
+-      }
+-      String message;
+-      if (json.containsKey("message")) {
+-        message =3D
+-            jsonDecoder.decodeString(jsonPath + ".message", json["message=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "message");
+-      }
+-      String stackTrace;
+-      if (json.containsKey("stackTrace")) {
+-        stackTrace =3D jsonDecoder.decodeString(
+-            jsonPath + ".stackTrace", json["stackTrace"]);
+-      }
+-      return new RequestError(code, message, stackTrace: stackTrace);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "RequestError", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["code"] =3D code.toJson();
+-    result["message"] =3D message;
+-    if (stackTrace !=3D null) {
+-      result["stackTrace"] =3D stackTrace;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is RequestError) {
+-      return code =3D=3D other.code &&
+-          message =3D=3D other.message &&
+-          stackTrace =3D=3D other.stackTrace;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, code.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, message.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, stackTrace.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * RequestErrorCode
+- *
+- * enum {
+- *   CONTENT_MODIFIED
+- *   DEBUG_PORT_COULD_NOT_BE_OPENED
+- *   FILE_NOT_ANALYZED
+- *   FORMAT_INVALID_FILE
+- *   FORMAT_WITH_ERRORS
+- *   GET_ERRORS_INVALID_FILE
+- *   GET_IMPORTED_ELEMENTS_INVALID_FILE
+- *   GET_KYTHE_ENTRIES_INVALID_FILE
+- *   GET_NAVIGATION_INVALID_FILE
+- *   GET_REACHABLE_SOURCES_INVALID_FILE
+- *   IMPORT_ELEMENTS_INVALID_FILE
+- *   INVALID_ANALYSIS_ROOT
+- *   INVALID_EXECUTION_CONTEXT
+- *   INVALID_FILE_PATH_FORMAT
+- *   INVALID_OVERLAY_CHANGE
+- *   INVALID_PARAMETER
+- *   INVALID_REQUEST
+- *   ORGANIZE_DIRECTIVES_ERROR
+- *   REFACTORING_REQUEST_CANCELLED
+- *   SERVER_ALREADY_STARTED
+- *   SERVER_ERROR
+- *   SORT_MEMBERS_INVALID_FILE
+- *   SORT_MEMBERS_PARSE_ERRORS
+- *   UNANALYZED_PRIORITY_FILES
+- *   UNKNOWN_REQUEST
+- *   UNKNOWN_SOURCE
+- *   UNSUPPORTED_FEATURE
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RequestErrorCode implements Enum {
+-  /**
+-   * An "analysis.getErrors" or "analysis.getNavigation" request could no=
t be
+-   * satisfied because the content of the file changed before the request=
ed
+-   * results could be computed.
+-   */
+-  static const RequestErrorCode CONTENT_MODIFIED =3D
+-      const RequestErrorCode._("CONTENT_MODIFIED");
+-
+-  /**
+-   * The server was unable to open a port for the diagnostic server.
+-   */
+-  static const RequestErrorCode DEBUG_PORT_COULD_NOT_BE_OPENED =3D
+-      const RequestErrorCode._("DEBUG_PORT_COULD_NOT_BE_OPENED");
+-
+-  /**
+-   * A request specified a FilePath which does not match a file in an ana=
lysis
+-   * root, or the requested operation is not available for the file.
+-   */
+-  static const RequestErrorCode FILE_NOT_ANALYZED =3D
+-      const RequestErrorCode._("FILE_NOT_ANALYZED");
+-
+-  /**
+-   * An "edit.format" request specified a FilePath which does not match a=
 Dart
+-   * file in an analysis root.
+-   */
+-  static const RequestErrorCode FORMAT_INVALID_FILE =3D
+-      const RequestErrorCode._("FORMAT_INVALID_FILE");
+-
+-  /**
+-   * An "edit.format" request specified a file that contains syntax error=
s.
+-   */
+-  static const RequestErrorCode FORMAT_WITH_ERRORS =3D
+-      const RequestErrorCode._("FORMAT_WITH_ERRORS");
+-
+-  /**
+-   * An "analysis.getErrors" request specified a FilePath which does not =
match
+-   * a file currently subject to analysis.
+-   */
+-  static const RequestErrorCode GET_ERRORS_INVALID_FILE =3D
+-      const RequestErrorCode._("GET_ERRORS_INVALID_FILE");
+-
+-  /**
+-   * An "analysis.getImportedElements" request specified a FilePath that =
does
+-   * not match a file currently subject to analysis.
+-   */
+-  static const RequestErrorCode GET_IMPORTED_ELEMENTS_INVALID_FILE =3D
+-      const RequestErrorCode._("GET_IMPORTED_ELEMENTS_INVALID_FILE");
+-
+-  /**
+-   * An "analysis.getKytheEntries" request specified a FilePath that does=
 not
+-   * match a file that is currently subject to analysis.
+-   */
+-  static const RequestErrorCode GET_KYTHE_ENTRIES_INVALID_FILE =3D
+-      const RequestErrorCode._("GET_KYTHE_ENTRIES_INVALID_FILE");
+-
+-  /**
+-   * An "analysis.getNavigation" request specified a FilePath which does =
not
+-   * match a file currently subject to analysis.
+-   */
+-  static const RequestErrorCode GET_NAVIGATION_INVALID_FILE =3D
+-      const RequestErrorCode._("GET_NAVIGATION_INVALID_FILE");
+-
+-  /**
+-   * An "analysis.getReachableSources" request specified a FilePath which=
 does
+-   * not match a file currently subject to analysis.
+-   */
+-  static const RequestErrorCode GET_REACHABLE_SOURCES_INVALID_FILE =3D
+-      const RequestErrorCode._("GET_REACHABLE_SOURCES_INVALID_FILE");
+-
+-  /**
+-   * An "edit.importElements" request specified a FilePath that does not =
match
+-   * a file currently subject to analysis.
+-   */
+-  static const RequestErrorCode IMPORT_ELEMENTS_INVALID_FILE =3D
+-      const RequestErrorCode._("IMPORT_ELEMENTS_INVALID_FILE");
+-
+-  /**
+-   * A path passed as an argument to a request (such as analysis.reanalyz=
e) is
+-   * required to be an analysis root, but isn't.
+-   */
+-  static const RequestErrorCode INVALID_ANALYSIS_ROOT =3D
+-      const RequestErrorCode._("INVALID_ANALYSIS_ROOT");
+-
+-  /**
+-   * The context root used to create an execution context does not exist.
+-   */
+-  static const RequestErrorCode INVALID_EXECUTION_CONTEXT =3D
+-      const RequestErrorCode._("INVALID_EXECUTION_CONTEXT");
+-
+-  /**
+-   * The format of the given file path is invalid, e.g. is not absolute a=
nd
+-   * normalized.
+-   */
+-  static const RequestErrorCode INVALID_FILE_PATH_FORMAT =3D
+-      const RequestErrorCode._("INVALID_FILE_PATH_FORMAT");
+-
+-  /**
+-   * An "analysis.updateContent" request contained a ChangeContentOverlay
+-   * object which can't be applied, due to an edit having an offset or le=
ngth
+-   * that is out of range.
+-   */
+-  static const RequestErrorCode INVALID_OVERLAY_CHANGE =3D
+-      const RequestErrorCode._("INVALID_OVERLAY_CHANGE");
+-
+-  /**
+-   * One of the method parameters was invalid.
+-   */
+-  static const RequestErrorCode INVALID_PARAMETER =3D
+-      const RequestErrorCode._("INVALID_PARAMETER");
+-
+-  /**
+-   * A malformed request was received.
+-   */
+-  static const RequestErrorCode INVALID_REQUEST =3D
+-      const RequestErrorCode._("INVALID_REQUEST");
+-
+-  /**
+-   * An "edit.organizeDirectives" request specified a Dart file that cann=
ot be
+-   * analyzed. The reason is described in the message.
+-   */
+-  static const RequestErrorCode ORGANIZE_DIRECTIVES_ERROR =3D
+-      const RequestErrorCode._("ORGANIZE_DIRECTIVES_ERROR");
+-
+-  /**
+-   * Another refactoring request was received during processing of this o=
ne.
+-   */
+-  static const RequestErrorCode REFACTORING_REQUEST_CANCELLED =3D
+-      const RequestErrorCode._("REFACTORING_REQUEST_CANCELLED");
+-
+-  /**
+-   * The analysis server has already been started (and hence won't accept=
 new
+-   * connections).
+-   *
+-   * 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 nev=
er
+-   * occur.
+-   */
+-  static const RequestErrorCode SERVER_ALREADY_STARTED =3D
+-      const RequestErrorCode._("SERVER_ALREADY_STARTED");
+-
+-  /**
+-   * An internal error occurred in the analysis server. Also see the
+-   * server.error notification.
+-   */
+-  static const RequestErrorCode SERVER_ERROR =3D
+-      const RequestErrorCode._("SERVER_ERROR");
+-
+-  /**
+-   * An "edit.sortMembers" request specified a FilePath which does not ma=
tch a
+-   * Dart file in an analysis root.
+-   */
+-  static const RequestErrorCode SORT_MEMBERS_INVALID_FILE =3D
+-      const RequestErrorCode._("SORT_MEMBERS_INVALID_FILE");
+-
+-  /**
+-   * An "edit.sortMembers" request specified a Dart file that has scan or=
 parse
+-   * errors.
+-   */
+-  static const RequestErrorCode SORT_MEMBERS_PARSE_ERRORS =3D
+-      const RequestErrorCode._("SORT_MEMBERS_PARSE_ERRORS");
+-
+-  /**
+-   * An "analysis.setPriorityFiles" request includes one or more files th=
at are
+-   * not being analyzed.
+-   *
+-   * This is a legacy error; it will be removed before the API reaches ve=
rsion
+-   * 1.0.
+-   */
+-  static const RequestErrorCode UNANALYZED_PRIORITY_FILES =3D
+-      const RequestErrorCode._("UNANALYZED_PRIORITY_FILES");
+-
+-  /**
+-   * A request was received which the analysis server does not recognize,=
 or
+-   * cannot handle in its current configuration.
+-   */
+-  static const RequestErrorCode UNKNOWN_REQUEST =3D
+-      const RequestErrorCode._("UNKNOWN_REQUEST");
+-
+-  /**
+-   * The analysis server was requested to perform an action on a source t=
hat
+-   * does not exist.
+-   */
+-  static const RequestErrorCode UNKNOWN_SOURCE =3D
+-      const RequestErrorCode._("UNKNOWN_SOURCE");
+-
+-  /**
+-   * The analysis server was requested to perform an action which is not
+-   * supported.
+-   *
+-   * This is a legacy error; it will be removed before the API reaches ve=
rsion
+-   * 1.0.
+-   */
+-  static const RequestErrorCode UNSUPPORTED_FEATURE =3D
+-      const RequestErrorCode._("UNSUPPORTED_FEATURE");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<RequestErrorCode> VALUES =3D const <RequestErrorCode>[
+-    CONTENT_MODIFIED,
+-    DEBUG_PORT_COULD_NOT_BE_OPENED,
+-    FILE_NOT_ANALYZED,
+-    FORMAT_INVALID_FILE,
+-    FORMAT_WITH_ERRORS,
+-    GET_ERRORS_INVALID_FILE,
+-    GET_IMPORTED_ELEMENTS_INVALID_FILE,
+-    GET_KYTHE_ENTRIES_INVALID_FILE,
+-    GET_NAVIGATION_INVALID_FILE,
+-    GET_REACHABLE_SOURCES_INVALID_FILE,
+-    IMPORT_ELEMENTS_INVALID_FILE,
+-    INVALID_ANALYSIS_ROOT,
+-    INVALID_EXECUTION_CONTEXT,
+-    INVALID_FILE_PATH_FORMAT,
+-    INVALID_OVERLAY_CHANGE,
+-    INVALID_PARAMETER,
+-    INVALID_REQUEST,
+-    ORGANIZE_DIRECTIVES_ERROR,
+-    REFACTORING_REQUEST_CANCELLED,
+-    SERVER_ALREADY_STARTED,
+-    SERVER_ERROR,
+-    SORT_MEMBERS_INVALID_FILE,
+-    SORT_MEMBERS_PARSE_ERRORS,
+-    UNANALYZED_PRIORITY_FILES,
+-    UNKNOWN_REQUEST,
+-    UNKNOWN_SOURCE,
+-    UNSUPPORTED_FEATURE
+-  ];
+-
+-  @override
+-  final String name;
+-
+-  const RequestErrorCode._(this.name);
+-
+-  factory RequestErrorCode(String name) {
+-    switch (name) {
+-      case "CONTENT_MODIFIED":
+-        return CONTENT_MODIFIED;
+-      case "DEBUG_PORT_COULD_NOT_BE_OPENED":
+-        return DEBUG_PORT_COULD_NOT_BE_OPENED;
+-      case "FILE_NOT_ANALYZED":
+-        return FILE_NOT_ANALYZED;
+-      case "FORMAT_INVALID_FILE":
+-        return FORMAT_INVALID_FILE;
+-      case "FORMAT_WITH_ERRORS":
+-        return FORMAT_WITH_ERRORS;
+-      case "GET_ERRORS_INVALID_FILE":
+-        return GET_ERRORS_INVALID_FILE;
+-      case "GET_IMPORTED_ELEMENTS_INVALID_FILE":
+-        return GET_IMPORTED_ELEMENTS_INVALID_FILE;
+-      case "GET_KYTHE_ENTRIES_INVALID_FILE":
+-        return GET_KYTHE_ENTRIES_INVALID_FILE;
+-      case "GET_NAVIGATION_INVALID_FILE":
+-        return GET_NAVIGATION_INVALID_FILE;
+-      case "GET_REACHABLE_SOURCES_INVALID_FILE":
+-        return GET_REACHABLE_SOURCES_INVALID_FILE;
+-      case "IMPORT_ELEMENTS_INVALID_FILE":
+-        return IMPORT_ELEMENTS_INVALID_FILE;
+-      case "INVALID_ANALYSIS_ROOT":
+-        return INVALID_ANALYSIS_ROOT;
+-      case "INVALID_EXECUTION_CONTEXT":
+-        return INVALID_EXECUTION_CONTEXT;
+-      case "INVALID_FILE_PATH_FORMAT":
+-        return INVALID_FILE_PATH_FORMAT;
+-      case "INVALID_OVERLAY_CHANGE":
+-        return INVALID_OVERLAY_CHANGE;
+-      case "INVALID_PARAMETER":
+-        return INVALID_PARAMETER;
+-      case "INVALID_REQUEST":
+-        return INVALID_REQUEST;
+-      case "ORGANIZE_DIRECTIVES_ERROR":
+-        return ORGANIZE_DIRECTIVES_ERROR;
+-      case "REFACTORING_REQUEST_CANCELLED":
+-        return REFACTORING_REQUEST_CANCELLED;
+-      case "SERVER_ALREADY_STARTED":
+-        return SERVER_ALREADY_STARTED;
+-      case "SERVER_ERROR":
+-        return SERVER_ERROR;
+-      case "SORT_MEMBERS_INVALID_FILE":
+-        return SORT_MEMBERS_INVALID_FILE;
+-      case "SORT_MEMBERS_PARSE_ERRORS":
+-        return SORT_MEMBERS_PARSE_ERRORS;
+-      case "UNANALYZED_PRIORITY_FILES":
+-        return UNANALYZED_PRIORITY_FILES;
+-      case "UNKNOWN_REQUEST":
+-        return UNKNOWN_REQUEST;
+-      case "UNKNOWN_SOURCE":
+-        return UNKNOWN_SOURCE;
+-      case "UNSUPPORTED_FEATURE":
+-        return UNSUPPORTED_FEATURE;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory RequestErrorCode.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new RequestErrorCode(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "RequestErrorCode", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "RequestErrorCode.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * search.findElementReferences params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- *   "includePotential": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindElementReferencesParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  bool _includePotential;
+-
+-  /**
+-   * The file containing the declaration of or reference to the element u=
sed to
+-   * define the search.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the declaration of or reference to the element u=
sed to
+-   * define the search.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset within the file of the declaration of or reference to the
+-   * element.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset within the file of the declaration of or reference to the
+-   * element.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * True if potential matches are to be included in the results.
+-   */
+-  bool get includePotential =3D> _includePotential;
+-
+-  /**
+-   * True if potential matches are to be included in the results.
+-   */
+-  void set includePotential(bool value) {
+-    assert(value !=3D null);
+-    this._includePotential =3D value;
+-  }
+-
+-  SearchFindElementReferencesParams(
+-      String file, int offset, bool includePotential) {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.includePotential =3D includePotential;
+-  }
+-
+-  factory SearchFindElementReferencesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      bool includePotential;
+-      if (json.containsKey("includePotential")) {
+-        includePotential =3D jsonDecoder.decodeBool(
+-            jsonPath + ".includePotential", json["includePotential"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "includePotential");
+-      }
+-      return new SearchFindElementReferencesParams(
+-          file, offset, includePotential);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findElementReferences params", json);
+-    }
+-  }
+-
+-  factory SearchFindElementReferencesParams.fromRequest(Request request) {
+-    return new SearchFindElementReferencesParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    result["includePotential"] =3D includePotential;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findElementReferences", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindElementReferencesParams) {
+-      return file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          includePotential =3D=3D other.includePotential;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, includePotential.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.findElementReferences result
+- *
+- * {
+- *   "id": optional SearchId
+- *   "element": optional Element
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindElementReferencesResult implements ResponseResult {
+-  String _id;
+-
+-  Element _element;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   *
+-   * If no element was found at the given location, this field will be ab=
sent,
+-   * and no results will be reported via the search.results notification.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   *
+-   * If no element was found at the given location, this field will be ab=
sent,
+-   * and no results will be reported via the search.results notification.
+-   */
+-  void set id(String value) {
+-    this._id =3D value;
+-  }
+-
+-  /**
+-   * The element referenced or defined at the given offset and whose refe=
rences
+-   * will be returned in the search results.
+-   *
+-   * If no element was found at the given location, this field will be ab=
sent.
+-   */
+-  Element get element =3D> _element;
+-
+-  /**
+-   * The element referenced or defined at the given offset and whose refe=
rences
+-   * will be returned in the search results.
+-   *
+-   * If no element was found at the given location, this field will be ab=
sent.
+-   */
+-  void set element(Element value) {
+-    this._element =3D value;
+-  }
+-
+-  SearchFindElementReferencesResult({String id, Element element}) {
+-    this.id =3D id;
+-    this.element =3D element;
+-  }
+-
+-  factory SearchFindElementReferencesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      }
+-      Element element;
+-      if (json.containsKey("element")) {
+-        element =3D new Element.fromJson(
+-            jsonDecoder, jsonPath + ".element", json["element"]);
+-      }
+-      return new SearchFindElementReferencesResult(id: id, element: eleme=
nt);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findElementReferences result", json);
+-    }
+-  }
+-
+-  factory SearchFindElementReferencesResult.fromResponse(Response respons=
e) {
+-    return new SearchFindElementReferencesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    if (id !=3D null) {
+-      result["id"] =3D id;
+-    }
+-    if (element !=3D null) {
+-      result["element"] =3D element.toJson();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindElementReferencesResult) {
+-      return id =3D=3D other.id && element =3D=3D other.element;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, element.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.findMemberDeclarations params
+- *
+- * {
+- *   "name": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberDeclarationsParams implements RequestParams {
+-  String _name;
+-
+-  /**
+-   * The name of the declarations to be found.
+-   */
+-  String get name =3D> _name;
+-
+-  /**
+-   * The name of the declarations to be found.
+-   */
+-  void set name(String value) {
+-    assert(value !=3D null);
+-    this._name =3D value;
+-  }
+-
+-  SearchFindMemberDeclarationsParams(String name) {
+-    this.name =3D name;
+-  }
+-
+-  factory SearchFindMemberDeclarationsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      return new SearchFindMemberDeclarationsParams(name);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findMemberDeclarations params", json);
+-    }
+-  }
+-
+-  factory SearchFindMemberDeclarationsParams.fromRequest(Request request)=
 {
+-    return new SearchFindMemberDeclarationsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["name"] =3D name;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findMemberDeclarations", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindMemberDeclarationsParams) {
+-      return name =3D=3D other.name;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.findMemberDeclarations result
+- *
+- * {
+- *   "id": SearchId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberDeclarationsResult implements ResponseResult {
+-  String _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  SearchFindMemberDeclarationsResult(String id) {
+-    this.id =3D id;
+-  }
+-
+-  factory SearchFindMemberDeclarationsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      return new SearchFindMemberDeclarationsResult(id);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findMemberDeclarations result", json);
+-    }
+-  }
+-
+-  factory SearchFindMemberDeclarationsResult.fromResponse(Response respon=
se) {
+-    return new SearchFindMemberDeclarationsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindMemberDeclarationsResult) {
+-      return id =3D=3D other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.findMemberReferences params
+- *
+- * {
+- *   "name": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberReferencesParams implements RequestParams {
+-  String _name;
+-
+-  /**
+-   * The name of the references to be found.
+-   */
+-  String get name =3D> _name;
+-
+-  /**
+-   * The name of the references to be found.
+-   */
+-  void set name(String value) {
+-    assert(value !=3D null);
+-    this._name =3D value;
+-  }
+-
+-  SearchFindMemberReferencesParams(String name) {
+-    this.name =3D name;
+-  }
+-
+-  factory SearchFindMemberReferencesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      return new SearchFindMemberReferencesParams(name);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findMemberReferences params", json);
+-    }
+-  }
+-
+-  factory SearchFindMemberReferencesParams.fromRequest(Request request) {
+-    return new SearchFindMemberReferencesParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["name"] =3D name;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findMemberReferences", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindMemberReferencesParams) {
+-      return name =3D=3D other.name;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.findMemberReferences result
+- *
+- * {
+- *   "id": SearchId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberReferencesResult implements ResponseResult {
+-  String _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  SearchFindMemberReferencesResult(String id) {
+-    this.id =3D id;
+-  }
+-
+-  factory SearchFindMemberReferencesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      return new SearchFindMemberReferencesResult(id);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findMemberReferences result", json);
+-    }
+-  }
+-
+-  factory SearchFindMemberReferencesResult.fromResponse(Response response=
) {
+-    return new SearchFindMemberReferencesResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindMemberReferencesResult) {
+-      return id =3D=3D other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.findTopLevelDeclarations params
+- *
+- * {
+- *   "pattern": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindTopLevelDeclarationsParams implements RequestParams {
+-  String _pattern;
+-
+-  /**
+-   * The regular expression used to match the names of the declarations t=
o be
+-   * found.
+-   */
+-  String get pattern =3D> _pattern;
+-
+-  /**
+-   * The regular expression used to match the names of the declarations t=
o be
+-   * found.
+-   */
+-  void set pattern(String value) {
+-    assert(value !=3D null);
+-    this._pattern =3D value;
+-  }
+-
+-  SearchFindTopLevelDeclarationsParams(String pattern) {
+-    this.pattern =3D pattern;
+-  }
+-
+-  factory SearchFindTopLevelDeclarationsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String pattern;
+-      if (json.containsKey("pattern")) {
+-        pattern =3D
+-            jsonDecoder.decodeString(jsonPath + ".pattern", json["pattern=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "pattern");
+-      }
+-      return new SearchFindTopLevelDeclarationsParams(pattern);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findTopLevelDeclarations params", json);
+-    }
+-  }
+-
+-  factory SearchFindTopLevelDeclarationsParams.fromRequest(Request reques=
t) {
+-    return new SearchFindTopLevelDeclarationsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["pattern"] =3D pattern;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findTopLevelDeclarations", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindTopLevelDeclarationsParams) {
+-      return pattern =3D=3D other.pattern;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, pattern.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.findTopLevelDeclarations result
+- *
+- * {
+- *   "id": SearchId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindTopLevelDeclarationsResult implements ResponseResult {
+-  String _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  SearchFindTopLevelDeclarationsResult(String id) {
+-    this.id =3D id;
+-  }
+-
+-  factory SearchFindTopLevelDeclarationsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      return new SearchFindTopLevelDeclarationsResult(id);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findTopLevelDeclarations result", json);
+-    }
+-  }
+-
+-  factory SearchFindTopLevelDeclarationsResult.fromResponse(Response resp=
onse) {
+-    return new SearchFindTopLevelDeclarationsResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchFindTopLevelDeclarationsResult) {
+-      return id =3D=3D other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.getTypeHierarchy params
+- *
+- * {
+- *   "file": FilePath
+- *   "offset": int
+- *   "superOnly": optional bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchGetTypeHierarchyParams implements RequestParams {
+-  String _file;
+-
+-  int _offset;
+-
+-  bool _superOnly;
+-
+-  /**
+-   * The file containing the declaration or reference to the type for whi=
ch a
+-   * hierarchy is being requested.
+-   */
+-  String get file =3D> _file;
+-
+-  /**
+-   * The file containing the declaration or reference to the type for whi=
ch a
+-   * hierarchy is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value !=3D null);
+-    this._file =3D value;
+-  }
+-
+-  /**
+-   * The offset of the name of the type within the file.
+-   */
+-  int get offset =3D> _offset;
+-
+-  /**
+-   * The offset of the name of the type within the file.
+-   */
+-  void set offset(int value) {
+-    assert(value !=3D null);
+-    this._offset =3D value;
+-  }
+-
+-  /**
+-   * True if the client is only requesting superclasses and interfaces
+-   * hierarchy.
+-   */
+-  bool get superOnly =3D> _superOnly;
+-
+-  /**
+-   * True if the client is only requesting superclasses and interfaces
+-   * hierarchy.
+-   */
+-  void set superOnly(bool value) {
+-    this._superOnly =3D value;
+-  }
+-
+-  SearchGetTypeHierarchyParams(String file, int offset, {bool superOnly})=
 {
+-    this.file =3D file;
+-    this.offset =3D offset;
+-    this.superOnly =3D superOnly;
+-  }
+-
+-  factory SearchGetTypeHierarchyParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      bool superOnly;
+-      if (json.containsKey("superOnly")) {
+-        superOnly =3D
+-            jsonDecoder.decodeBool(jsonPath + ".superOnly", json["superOn=
ly"]);
+-      }
+-      return new SearchGetTypeHierarchyParams(file, offset,
+-          superOnly: superOnly);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.getTypeHierarchy params", json);
+-    }
+-  }
+-
+-  factory SearchGetTypeHierarchyParams.fromRequest(Request request) {
+-    return new SearchGetTypeHierarchyParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["file"] =3D file;
+-    result["offset"] =3D offset;
+-    if (superOnly !=3D null) {
+-      result["superOnly"] =3D superOnly;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.getTypeHierarchy", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchGetTypeHierarchyParams) {
+-      return file =3D=3D other.file &&
+-          offset =3D=3D other.offset &&
+-          superOnly =3D=3D other.superOnly;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, superOnly.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * search.getTypeHierarchy result
+- *
+- * {
+- *   "hierarchyItems": optional List<TypeHierarchyItem>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchGetTypeHierarchyResult implements ResponseResult {
+-  List<TypeHierarchyItem> _hierarchyItems;
+-
+-  /**
+-   * 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, b=
ut
+-   * correspond to the integers used to reference supertype and subtype i=
tems
+-   * within the items.
+-   *
+-   * This field will be absent if the code at the given file and offset d=
oes
+-   * not represent a type, or if the file has not been sufficiently analy=
zed to
+-   * allow a type hierarchy to be produced.
+-   */
+-  List<TypeHierarchyItem> get hierarchyItems =3D> _hierarchyItems;
+-
+-  /**
+-   * 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, b=
ut
+-   * correspond to the integers used to reference supertype and subtype i=
tems
+-   * within the items.
+-   *
+-   * This field will be absent if the code at the given file and offset d=
oes
+-   * not represent a type, or if the file has not been sufficiently analy=
zed to
+-   * allow a type hierarchy to be produced.
+-   */
+-  void set hierarchyItems(List<TypeHierarchyItem> value) {
+-    this._hierarchyItems =3D value;
+-  }
+-
+-  SearchGetTypeHierarchyResult({List<TypeHierarchyItem> hierarchyItems}) {
+-    this.hierarchyItems =3D hierarchyItems;
+-  }
+-
+-  factory SearchGetTypeHierarchyResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<TypeHierarchyItem> hierarchyItems;
+-      if (json.containsKey("hierarchyItems")) {
+-        hierarchyItems =3D jsonDecoder.decodeList(
+-            jsonPath + ".hierarchyItems",
+-            json["hierarchyItems"],
+-            (String jsonPath, Object json) =3D>
+-                new TypeHierarchyItem.fromJson(jsonDecoder, jsonPath, jso=
n));
+-      }
+-      return new SearchGetTypeHierarchyResult(hierarchyItems: hierarchyIt=
ems);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.getTypeHierarchy result", json);
+-    }
+-  }
+-
+-  factory SearchGetTypeHierarchyResult.fromResponse(Response response) {
+-    return new SearchGetTypeHierarchyResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    if (hierarchyItems !=3D null) {
+-      result["hierarchyItems"] =3D hierarchyItems
+-          .map((TypeHierarchyItem value) =3D> value.toJson())
+-          .toList();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchGetTypeHierarchyResult) {
+-      return listEqual(hierarchyItems, other.hierarchyItems,
+-          (TypeHierarchyItem a, TypeHierarchyItem b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, hierarchyItems.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * SearchResult
+- *
+- * {
+- *   "location": Location
+- *   "kind": SearchResultKind
+- *   "isPotential": bool
+- *   "path": List<Element>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchResult implements HasToJson {
+-  Location _location;
+-
+-  SearchResultKind _kind;
+-
+-  bool _isPotential;
+-
+-  List<Element> _path;
+-
+-  /**
+-   * The location of the code that matched the search criteria.
+-   */
+-  Location get location =3D> _location;
+-
+-  /**
+-   * The location of the code that matched the search criteria.
+-   */
+-  void set location(Location value) {
+-    assert(value !=3D null);
+-    this._location =3D value;
+-  }
+-
+-  /**
+-   * The kind of element that was found or the kind of reference that was
+-   * found.
+-   */
+-  SearchResultKind get kind =3D> _kind;
+-
+-  /**
+-   * The kind of element that was found or the kind of reference that was
+-   * found.
+-   */
+-  void set kind(SearchResultKind value) {
+-    assert(value !=3D null);
+-    this._kind =3D value;
+-  }
+-
+-  /**
+-   * True if the result is a potential match but cannot be confirmed to b=
e 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.
+-   */
+-  bool get isPotential =3D> _isPotential;
+-
+-  /**
+-   * True if the result is a potential match but cannot be confirmed to b=
e 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.
+-   */
+-  void set isPotential(bool value) {
+-    assert(value !=3D null);
+-    this._isPotential =3D value;
+-  }
+-
+-  /**
+-   * The elements that contain the result, starting with the most immedia=
tely
+-   * enclosing ancestor and ending with the library.
+-   */
+-  List<Element> get path =3D> _path;
+-
+-  /**
+-   * The elements that contain the result, starting with the most immedia=
tely
+-   * enclosing ancestor and ending with the library.
+-   */
+-  void set path(List<Element> value) {
+-    assert(value !=3D null);
+-    this._path =3D value;
+-  }
+-
+-  SearchResult(Location location, SearchResultKind kind, bool isPotential,
+-      List<Element> path) {
+-    this.location =3D location;
+-    this.kind =3D kind;
+-    this.isPotential =3D isPotential;
+-    this.path =3D path;
+-  }
+-
+-  factory SearchResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      Location location;
+-      if (json.containsKey("location")) {
+-        location =3D new Location.fromJson(
+-            jsonDecoder, jsonPath + ".location", json["location"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "location");
+-      }
+-      SearchResultKind kind;
+-      if (json.containsKey("kind")) {
+-        kind =3D new SearchResultKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kind");
+-      }
+-      bool isPotential;
+-      if (json.containsKey("isPotential")) {
+-        isPotential =3D jsonDecoder.decodeBool(
+-            jsonPath + ".isPotential", json["isPotential"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isPotential");
+-      }
+-      List<Element> path;
+-      if (json.containsKey("path")) {
+-        path =3D jsonDecoder.decodeList(
+-            jsonPath + ".path",
+-            json["path"],
+-            (String jsonPath, Object json) =3D>
+-                new Element.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "path");
+-      }
+-      return new SearchResult(location, kind, isPotential, path);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "SearchResult", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["location"] =3D location.toJson();
+-    result["kind"] =3D kind.toJson();
+-    result["isPotential"] =3D isPotential;
+-    result["path"] =3D path.map((Element value) =3D> value.toJson()).toLi=
st();
+-    return result;
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchResult) {
+-      return location =3D=3D other.location &&
+-          kind =3D=3D other.kind &&
+-          isPotential =3D=3D other.isPotential &&
+-          listEqual(path, other.path, (Element a, Element b) =3D> a =3D=
=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, location.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, isPotential.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, path.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * SearchResultKind
+- *
+- * enum {
+- *   DECLARATION
+- *   INVOCATION
+- *   READ
+- *   READ_WRITE
+- *   REFERENCE
+- *   UNKNOWN
+- *   WRITE
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchResultKind implements Enum {
+-  /**
+-   * The declaration of an element.
+-   */
+-  static const SearchResultKind DECLARATION =3D
+-      const SearchResultKind._("DECLARATION");
+-
+-  /**
+-   * The invocation of a function or method.
+-   */
+-  static const SearchResultKind INVOCATION =3D
+-      const SearchResultKind._("INVOCATION");
+-
+-  /**
+-   * A reference to a field, parameter or variable where it is being read.
+-   */
+-  static const SearchResultKind READ =3D const SearchResultKind._("READ");
+-
+-  /**
+-   * A reference to a field, parameter or variable where it is being read=
 and
+-   * written.
+-   */
+-  static const SearchResultKind READ_WRITE =3D
+-      const SearchResultKind._("READ_WRITE");
+-
+-  /**
+-   * A reference to an element.
+-   */
+-  static const SearchResultKind REFERENCE =3D
+-      const SearchResultKind._("REFERENCE");
+-
+-  /**
+-   * Some other kind of search result.
+-   */
+-  static const SearchResultKind UNKNOWN =3D const SearchResultKind._("UNK=
NOWN");
+-
+-  /**
+-   * A reference to a field, parameter or variable where it is being writ=
ten.
+-   */
+-  static const SearchResultKind WRITE =3D const SearchResultKind._("WRITE=
");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<SearchResultKind> VALUES =3D const <SearchResultKind>[
+-    DECLARATION,
+-    INVOCATION,
+-    READ,
+-    READ_WRITE,
+-    REFERENCE,
+-    UNKNOWN,
+-    WRITE
+-  ];
+-
+-  @override
+-  final String name;
+-
+-  const SearchResultKind._(this.name);
+-
+-  factory SearchResultKind(String name) {
+-    switch (name) {
+-      case "DECLARATION":
+-        return DECLARATION;
+-      case "INVOCATION":
+-        return INVOCATION;
+-      case "READ":
+-        return READ;
+-      case "READ_WRITE":
+-        return READ_WRITE;
+-      case "REFERENCE":
+-        return REFERENCE;
+-      case "UNKNOWN":
+-        return UNKNOWN;
+-      case "WRITE":
+-        return WRITE;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory SearchResultKind.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new SearchResultKind(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "SearchResultKind", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "SearchResultKind.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * search.results params
+- *
+- * {
+- *   "id": SearchId
+- *   "results": List<SearchResult>
+- *   "isLast": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchResultsParams implements HasToJson {
+-  String _id;
+-
+-  List<SearchResult> _results;
+-
+-  bool _isLast;
+-
+-  /**
+-   * The id associated with the search.
+-   */
+-  String get id =3D> _id;
+-
+-  /**
+-   * The id associated with the search.
+-   */
+-  void set id(String value) {
+-    assert(value !=3D null);
+-    this._id =3D value;
+-  }
+-
+-  /**
+-   * The search results being reported.
+-   */
+-  List<SearchResult> get results =3D> _results;
+-
+-  /**
+-   * The search results being reported.
+-   */
+-  void set results(List<SearchResult> value) {
+-    assert(value !=3D null);
+-    this._results =3D value;
+-  }
+-
+-  /**
+-   * True if this is that last set of results that will be returned for t=
he
+-   * indicated search.
+-   */
+-  bool get isLast =3D> _isLast;
+-
+-  /**
+-   * True if this is that last set of results that will be returned for t=
he
+-   * indicated search.
+-   */
+-  void set isLast(bool value) {
+-    assert(value !=3D null);
+-    this._isLast =3D value;
+-  }
+-
+-  SearchResultsParams(String id, List<SearchResult> results, bool isLast)=
 {
+-    this.id =3D id;
+-    this.results =3D results;
+-    this.isLast =3D isLast;
+-  }
+-
+-  factory SearchResultsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      List<SearchResult> results;
+-      if (json.containsKey("results")) {
+-        results =3D jsonDecoder.decodeList(
+-            jsonPath + ".results",
+-            json["results"],
+-            (String jsonPath, Object json) =3D>
+-                new SearchResult.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "results");
+-      }
+-      bool isLast;
+-      if (json.containsKey("isLast")) {
+-        isLast =3D jsonDecoder.decodeBool(jsonPath + ".isLast", json["isL=
ast"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isLast");
+-      }
+-      return new SearchResultsParams(id, results, isLast);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "search.results params", json);
+-    }
+-  }
+-
+-  factory SearchResultsParams.fromNotification(Notification notification)=
 {
+-    return new SearchResultsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["id"] =3D id;
+-    result["results"] =3D
+-        results.map((SearchResult value) =3D> value.toJson()).toList();
+-    result["isLast"] =3D isLast;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("search.results", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is SearchResultsParams) {
+-      return id =3D=3D other.id &&
+-          listEqual(results, other.results,
+-              (SearchResult a, SearchResult b) =3D> a =3D=3D b) &&
+-          isLast =3D=3D other.isLast;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, results.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, isLast.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * server.connected params
+- *
+- * {
+- *   "version": String
+- *   "pid": int
+- *   "sessionId": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerConnectedParams implements HasToJson {
+-  String _version;
+-
+-  int _pid;
+-
+-  String _sessionId;
+-
+-  /**
+-   * The version number of the analysis server.
+-   */
+-  String get version =3D> _version;
+-
+-  /**
+-   * The version number of the analysis server.
+-   */
+-  void set version(String value) {
+-    assert(value !=3D null);
+-    this._version =3D value;
+-  }
+-
+-  /**
+-   * The process id of the analysis server process.
+-   */
+-  int get pid =3D> _pid;
+-
+-  /**
+-   * The process id of the analysis server process.
+-   */
+-  void set pid(int value) {
+-    assert(value !=3D null);
+-    this._pid =3D value;
+-  }
+-
+-  /**
+-   * The session id for this session.
+-   */
+-  String get sessionId =3D> _sessionId;
+-
+-  /**
+-   * The session id for this session.
+-   */
+-  void set sessionId(String value) {
+-    this._sessionId =3D value;
+-  }
+-
+-  ServerConnectedParams(String version, int pid, {String sessionId}) {
+-    this.version =3D version;
+-    this.pid =3D pid;
+-    this.sessionId =3D sessionId;
+-  }
+-
+-  factory ServerConnectedParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String version;
+-      if (json.containsKey("version")) {
+-        version =3D
+-            jsonDecoder.decodeString(jsonPath + ".version", json["version=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "version");
+-      }
+-      int pid;
+-      if (json.containsKey("pid")) {
+-        pid =3D jsonDecoder.decodeInt(jsonPath + ".pid", json["pid"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "pid");
+-      }
+-      String sessionId;
+-      if (json.containsKey("sessionId")) {
+-        sessionId =3D jsonDecoder.decodeString(
+-            jsonPath + ".sessionId", json["sessionId"]);
+-      }
+-      return new ServerConnectedParams(version, pid, sessionId: sessionId=
);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "server.connected params", jso=
n);
+-    }
+-  }
+-
+-  factory ServerConnectedParams.fromNotification(Notification notificatio=
n) {
+-    return new ServerConnectedParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["version"] =3D version;
+-    result["pid"] =3D pid;
+-    if (sessionId !=3D null) {
+-      result["sessionId"] =3D sessionId;
+-    }
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("server.connected", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerConnectedParams) {
+-      return version =3D=3D other.version &&
+-          pid =3D=3D other.pid &&
+-          sessionId =3D=3D other.sessionId;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, version.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, pid.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, sessionId.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * server.error params
+- *
+- * {
+- *   "isFatal": bool
+- *   "message": String
+- *   "stackTrace": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerErrorParams implements HasToJson {
+-  bool _isFatal;
+-
+-  String _message;
+-
+-  String _stackTrace;
+-
+-  /**
+-   * True if the error is a fatal error, meaning that the server will shu=
tdown
+-   * automatically after sending this notification.
+-   */
+-  bool get isFatal =3D> _isFatal;
+-
+-  /**
+-   * True if the error is a fatal error, meaning that the server will shu=
tdown
+-   * automatically after sending this notification.
+-   */
+-  void set isFatal(bool value) {
+-    assert(value !=3D null);
+-    this._isFatal =3D value;
+-  }
+-
+-  /**
+-   * The error message indicating what kind of error was encountered.
+-   */
+-  String get message =3D> _message;
+-
+-  /**
+-   * The error message indicating what kind of error was encountered.
+-   */
+-  void set message(String value) {
+-    assert(value !=3D null);
+-    this._message =3D value;
+-  }
+-
+-  /**
+-   * The stack trace associated with the generation of the error, used for
+-   * debugging the server.
+-   */
+-  String get stackTrace =3D> _stackTrace;
+-
+-  /**
+-   * The stack trace associated with the generation of the error, used for
+-   * debugging the server.
+-   */
+-  void set stackTrace(String value) {
+-    assert(value !=3D null);
+-    this._stackTrace =3D value;
+-  }
+-
+-  ServerErrorParams(bool isFatal, String message, String stackTrace) {
+-    this.isFatal =3D isFatal;
+-    this.message =3D message;
+-    this.stackTrace =3D stackTrace;
+-  }
+-
+-  factory ServerErrorParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      bool isFatal;
+-      if (json.containsKey("isFatal")) {
+-        isFatal =3D
+-            jsonDecoder.decodeBool(jsonPath + ".isFatal", json["isFatal"]=
);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isFatal");
+-      }
+-      String message;
+-      if (json.containsKey("message")) {
+-        message =3D
+-            jsonDecoder.decodeString(jsonPath + ".message", json["message=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "message");
+-      }
+-      String stackTrace;
+-      if (json.containsKey("stackTrace")) {
+-        stackTrace =3D jsonDecoder.decodeString(
+-            jsonPath + ".stackTrace", json["stackTrace"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "stackTrace");
+-      }
+-      return new ServerErrorParams(isFatal, message, stackTrace);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "server.error params", json);
+-    }
+-  }
+-
+-  factory ServerErrorParams.fromNotification(Notification notification) {
+-    return new ServerErrorParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["isFatal"] =3D isFatal;
+-    result["message"] =3D message;
+-    result["stackTrace"] =3D stackTrace;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("server.error", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerErrorParams) {
+-      return isFatal =3D=3D other.isFatal &&
+-          message =3D=3D other.message &&
+-          stackTrace =3D=3D other.stackTrace;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, isFatal.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, message.hashCode);
+-    hash =3D JenkinsSmiHash.combine(hash, stackTrace.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * server.getVersion params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerGetVersionParams implements RequestParams {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "server.getVersion", null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerGetVersionParams) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 55877452;
+-  }
+-}
+-
+-/**
+- * server.getVersion result
+- *
+- * {
+- *   "version": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerGetVersionResult implements ResponseResult {
+-  String _version;
+-
+-  /**
+-   * The version number of the analysis server.
+-   */
+-  String get version =3D> _version;
+-
+-  /**
+-   * The version number of the analysis server.
+-   */
+-  void set version(String value) {
+-    assert(value !=3D null);
+-    this._version =3D value;
+-  }
+-
+-  ServerGetVersionResult(String version) {
+-    this.version =3D version;
+-  }
+-
+-  factory ServerGetVersionResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      String version;
+-      if (json.containsKey("version")) {
+-        version =3D
+-            jsonDecoder.decodeString(jsonPath + ".version", json["version=
"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "version");
+-      }
+-      return new ServerGetVersionResult(version);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "server.getVersion result", js=
on);
+-    }
+-  }
+-
+-  factory ServerGetVersionResult.fromResponse(Response response) {
+-    return new ServerGetVersionResult.fromJson(
+-        new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+-        "result",
+-        response.result);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["version"] =3D version;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerGetVersionResult) {
+-      return version =3D=3D other.version;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, version.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * ServerService
+- *
+- * enum {
+- *   STATUS
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerService implements Enum {
+-  static const ServerService STATUS =3D const ServerService._("STATUS");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<ServerService> VALUES =3D const <ServerService>[STATU=
S];
+-
+-  @override
+-  final String name;
+-
+-  const ServerService._(this.name);
+-
+-  factory ServerService(String name) {
+-    switch (name) {
+-      case "STATUS":
+-        return STATUS;
+-    }
+-    throw new Exception('Illegal enum value: $name');
+-  }
+-
+-  factory ServerService.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json is String) {
+-      try {
+-        return new ServerService(json);
+-      } catch (_) {
+-        // Fall through
+-      }
+-    }
+-    throw jsonDecoder.mismatch(jsonPath, "ServerService", json);
+-  }
+-
+-  @override
+-  String toString() =3D> "ServerService.$name";
+-
+-  String toJson() =3D> name;
+-}
+-
+-/**
+- * server.setSubscriptions params
+- *
+- * {
+- *   "subscriptions": List<ServerService>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerSetSubscriptionsParams implements RequestParams {
+-  List<ServerService> _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  List<ServerService> get subscriptions =3D> _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  void set subscriptions(List<ServerService> value) {
+-    assert(value !=3D null);
+-    this._subscriptions =3D value;
+-  }
+-
+-  ServerSetSubscriptionsParams(List<ServerService> subscriptions) {
+-    this.subscriptions =3D subscriptions;
+-  }
+-
+-  factory ServerSetSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json =3D=3D null) {
+-      json =3D {};
+-    }
+-    if (json is Map) {
+-      List<ServerService> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions =3D jsonDecoder.decodeList(
+-            jsonPath + ".subscriptions",
+-            json["subscriptions"],
+-            (String jsonPath, Object json) =3D>
+-                new ServerService.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+-      }
+-      return new ServerSetSubscriptionsParams(subscriptions);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "server.setSubscriptions params", json);
+-    }
+-  }
+-
+-  factory ServerSetSubscriptionsParams.fromRequest(Request request) {
+-    return new ServerSetSubscriptionsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result =3D {};
+-    result["subscriptions"] =3D
+-        subscriptions.map((ServerService value) =3D> value.toJson()).toLi=
st();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "server.setSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() =3D> JSON.encode(toJson());
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerSetSubscriptionsParams) {
+-      return listEqual(subscriptions, other.subscriptions,
+-          (ServerService a, ServerService b) =3D> a =3D=3D b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash =3D 0;
+-    hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * server.setSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerSetSubscriptionsResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerSetSubscriptionsResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 748820900;
+-  }
+-}
+-
+-/**
+- * server.shutdown params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerShutdownParams implements RequestParams {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "server.shutdown", null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerShutdownParams) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 366630911;
+-  }
+-}
+-
+-/**
+- * server.shutdown result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerShutdownResult implements ResponseResult {
+-  @override
+-  Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator =3D=3D(other) {
+-    if (other is ServerShutdownResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    return 193626532;
+-  }
+-}
+-
+-/**
+- * server.status params
+- *
+- * {
+- *   "analysis": optional AnalysisStatus
+- *   "pub": optional PubStatus
+- * }
+- *
+- * Clients may not extend, implement o