guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#44926] [PATCH v2 03/15] gnu: Add dart-2.0.0-dev.8.0.


From: nixo
Subject: [bug#44926] [PATCH v2 03/15] gnu: Add dart-2.0.0-dev.8.0.
Date: Sun, 29 Nov 2020 18:34:02 +0100

* 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 =                                           
\
   %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 @@
 
 (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))
 
 (define* (dart-pkg name tag hash #:optional
                    (url (string-append
@@ -39,3 +49,380 @@
                         tag)))
     (sha256 (base32 hash))))
 
+(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=\"x64\""
+             "target_cpu=\"x64\""
+             "dart_target_arch=\"x64\""
+             "target_os=\"linux\""
+             "dart_runtime_mode=\"develop\""
+             "dart_debug=false"
+             "is_debug=false"
+             "is_release=true"
+             "is_product=false"
+             "is_clang=false"
+             "use_goma=false"
+             "goma_dir=\"None\""
+             "dart_use_tcmalloc=true"
+             "dart_use_fallback_root_certificates=true"
+             "dart_zlib_path = \"//runtime/bin/zlib\""
+             "dart_platform_sdk=false"
+             "is_asan=false"
+             "is_msan=false"
+             "is_tsan=false"
+             "dart_snapshot_kind=\"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 system
+           ;; 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-" pkgdep)
+                                            '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") "/" file)
+                   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=" 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" "d2b56d1b7657e52eb5a1f075968c773aa3e53614"
+                   "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@nixo.xyz>
+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_converter.dart
+ delete mode 100644 
pkg/analysis_server/benchmark/integration/instrumentation_input_converter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/local_runner.dart
+ delete mode 100644 
pkg/analysis_server/benchmark/integration/log_file_input_converter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/main.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/operation.dart
+ delete mode 100644 
pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_angular.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_flutter.dart
+ 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_tests.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/memory_tests.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/performance_tests.dart
+ 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/occurrences_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.dart
+ delete mode 100644 pkg/analysis_server/lib/protocol/protocol_generated.dart
+ 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_channel.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_closingLabels.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/computer/computer_highlights.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/computer/computer_highlights2.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_hover.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_outline.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/computer/computer_overrides.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/computer/import_elements_computer.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/implemented_dart.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/domains/analysis/occurrences.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/edit/edit_domain.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/operation/operation_analysis.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/plugin/notification_manager.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.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_collector.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_converter.dart
+ 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/completion_core.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/provisional/completion/dart/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.dart
+ 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/completion_core.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/completion_performance.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/common_usage_sorter.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/common_usage_sorter.g.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/contribution_sorter.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/label_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/postfix/postfix_completion.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/statement/design_notes.md
+ delete mode 100644 
pkg/analysis_server/lib/src/services/completion/statement/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.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/levenshtein.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/namespace.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/organize_directives.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/selection_analyzer.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/sort_members.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/source_buffer.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/status.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/correction/strings.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/util.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/kythe/schema.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/naming_conventions.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/search/element_visitors.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/hierarchy.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/search/search_engine.dart
+ delete mode 100644 
pkg/analysis_server/lib/src/services/search/search_engine_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.dart
+ 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_analysis_options_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_closingLabels_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_errors_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_highlights_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_highlights_test2.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_implemented_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_navigation_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_outline_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/notification_overrides_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/reanalyze_test.dart
+ delete mode 100644 
pkg/analysis_server/test/analysis/set_priority_files_test.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_test.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_test.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_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/highlights_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/highlights_test2.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/lint_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/navigation_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/outline_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/overrides_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/package_root_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/test_all.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/update_content_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analysis/update_options_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analytics/enable_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analytics/send_event_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analytics/send_timing_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/analytics/test_all.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/completion/test_all.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_diagnostics_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/diagnostic/test_all.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_available_refactorings_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/edit/get_fixes_test.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_refactoring_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/edit/import_elements_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/edit/is_postfix_completion_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_directives_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_subscriptions_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/execution/test_all.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/kythe/test_all.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/search/find_element_references_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/search/find_member_references_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/test_all.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/server/get_version_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/server/shutdown_test.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/server/status_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/test_all.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/support/integration_test_methods.dart
+ delete mode 100644 
pkg/analysis_server/test/integration/support/integration_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_test.dart
+ delete mode 100644 
pkg/analysis_server/test/search/member_declarations_test.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.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/dart/static_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/variable_name_contributor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/completion/postfix/test_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_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/correction/change_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/fix_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/correction/levenshtein_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/correction/name_suggestion_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_members_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/correction/status_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/correction/strings_test.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.dart
+ 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_local_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/rename_import_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/rename_label_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/rename_library_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/rename_local_test.dart
+ delete mode 100644 
pkg/analysis_server/test/services/refactoring/rename_unit_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_test.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_computer_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_elements_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_manager_test.dart
+ delete mode 100644 
pkg/analysis_server/test/src/plugin/plugin_locator_test.dart
+ delete mode 100644 
pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+ delete mode 100644 
pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
+ delete mode 100644 
pkg/analysis_server/test/src/plugin/protocol_test_utilities.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_test.dart
+ delete mode 100644 
pkg/analysis_server/test/src/plugin/result_converter_test.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.dart
+ delete mode 100644 pkg/analysis_server/test/src/utilities/flutter_util.dart
+ 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.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/log_page.dart
+ delete mode 100644 
pkg/analysis_server/tool/instrumentation/page/page_writer.dart
+ delete mode 100644 
pkg/analysis_server/tool/instrumentation/page/stats_page.dart
+ delete mode 100644 
pkg/analysis_server/tool/instrumentation/page/task_page.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.dart
+ 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_constants.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/AnalysisServer.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ClosingLabel.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ContextData.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/Element.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/FileKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ImportedElements.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/KytheEntry.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/KytheVName.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/Location.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/Outline.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/Position.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/PostfixTemplateDescriptor.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RequestError.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java
+ delete mode 100644 
pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.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/integration_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 = true
+   }
+   deps = [
+-    ":analysis_server",
+     ":create_sdk",
+     ":dart2js",
+     ":dartanalyzer",
+@@ -107,12 +106,6 @@ group("dartfmt") {
+   ]
+ }
+ 
+-group("analysis_server") {
+-  deps = [
+-    "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/CHANGELOG.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/CONTRIBUTING.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][contributing].
+-
+-## 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/wiki).
+-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 more 
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 analysis
+-server in a separate process and communicate with it using a JSON protocol. 
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/blob/master/pkg/analysis_server/doc/api.html
+diff --git a/pkg/analysis_server/analysis_options.yaml 
b/pkg/analysis_server/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 = [
+-    new ColdAnalysisBenchmark(),
+-    new AnalysisBenchmark()
+-  ];
+-
+-  CommandRunner runner = 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 => 'list';
+-
+-  @override
+-  String get description => 'List available benchmarks.';
+-
+-  @override
+-  String get invocation => '${runner.executableName} $name';
+-
+-  void run() {
+-    if (argResults['machine']) {
+-      final Map map = {
+-        'benchmarks': benchmarks.map((b) => 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 for '
+-            '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 
benchmark.');
+-  }
+-
+-  @override
+-  String get name => 'run';
+-
+-  @override
+-  String get description => 'Run a given benchmark.';
+-
+-  @override
+-  String get invocation => '${runner.executableName} $name <benchmark-id>';
+-
+-  Future run() async {
+-    if (argResults.rest.isEmpty) {
+-      printUsage();
+-      exit(1);
+-    }
+-
+-    final String benchmarkId = argResults.rest.first;
+-    final int repeatCount = int.parse(argResults['repeat']);
+-    final bool quick = argResults['quick'];
+-    final bool previewDart2 = argResults['preview-dart-2'];
+-
+-    final Benchmark benchmark =
+-        benchmarks.firstWhere((b) => b.id == benchmarkId, orElse: () {
+-      print("Benchmark '$benchmarkId' not found.");
+-      exit(1);
+-    });
+-
+-    int actualIterations = repeatCount;
+-    if (benchmark.maxIterations > 0) {
+-      actualIterations = math.min(benchmark.maxIterations, repeatCount);
+-    }
+-
+-    try {
+-      BenchMarkResult result;
+-      Stopwatch time = new Stopwatch()..start();
+-      print('Running $benchmarkId $actualIterations times...');
+-
+-      for (int iteration = 0; iteration < actualIterations; iteration++) {
+-        BenchMarkResult newResult = await benchmark.run(
+-          quick: quick,
+-          previewDart2: previewDart2,
+-        );
+-        print('  $newResult');
+-        result = result == null ? newResult : result.combine(newResult);
+-      }
+-
+-      time.stop();
+-      print('Finished in ${time.elapsed.inSeconds} seconds.\n');
+-      Map m = {'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: 
'cpu'});
+-
+-  Future<BenchMarkResult> run({bool quick: false, bool previewDart2: false});
+-
+-  int get maxIterations => 0;
+-
+-  Map toJson() =>
+-      {'id': id, 'description': description, 'enabled': enabled, 'kind': 
kind};
+-
+-  String toString() => '$id: $description';
+-}
+-
+-class BenchMarkResult {
+-  static final NumberFormat nf = 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() => {kindName: value};
+-
+-  String toString() => '$kindName: ${nf.format(value)}';
+-}
+-
+-class CompoundBenchMarkResult extends BenchMarkResult {
+-  final String name;
+-
+-  CompoundBenchMarkResult(this.name) : super('compound', 0);
+-
+-  Map<String, BenchMarkResult> results = {};
+-
+-  void add(String name, BenchMarkResult result) {
+-    results[name] = result;
+-  }
+-
+-  BenchMarkResult combine(BenchMarkResult other) {
+-    BenchMarkResult _combine(BenchMarkResult a, BenchMarkResult b) {
+-      if (a == null) return b;
+-      if (b == null) return a;
+-      return a.combine(b);
+-    }
+-
+-    CompoundBenchMarkResult o = other as CompoundBenchMarkResult;
+-
+-    CompoundBenchMarkResult combined = new CompoundBenchMarkResult(name);
+-    List<String> keys =
+-        (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 = {};
+-    for (String key in results.keys) {
+-      m['$name-$key'] = results[key].toJson();
+-    }
+-    return m;
+-  }
+-
+-  String toString() => '${toJson()}';
+-}
+-
+-List<String> getProjectRoots({bool quick: false}) {
+-  String script = Platform.script.toFilePath(windows: Platform.isWindows);
+-  String pkgPath = path.normalize(path.join(path.dirname(script), '..', 
'..'));
+-  return <String>[path.join(pkgPath, quick ? 'meta' : 'analysis_server')];
+-}
+-
+-String get analysisServerSrcPath {
+-  String script = Platform.script.toFilePath(windows: Platform.isWindows);
+-  String pkgPath = path.normalize(path.join(path.dirname(script), '..', 
'..'));
+-  return path.join(pkgPath, 'analysis_server');
+-}
+-
+-void deleteServerCache() {
+-  // ~/.dartServer/.analysis-driver/
+-  ResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
+-  Folder stateLocation = 
resourceProvider.getStateLocation('.analysis-driver');
+-  try {
+-    if (stateLocation.exists) {
+-      stateLocation.delete();
+-    }
+-  } catch (e) {
+-    // ignore any exception
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/README.md 
b/pkg/analysis_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 
benchmarks
+-* **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 xcodebuild
+-directory for proper package-root package resolution.
+-Once setup is complete, this applications calls main.dart
+-
+-The required command line arguments are
+-* **gitDir** = a path to the git repository containing the initial target 
source
+-* **branch** = the branch containing the initial target source
+-* **inputFile** = 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 log,
+-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 stdin.
+-*  **-m, --map               <oldSrcPath>,<newSrcPath>**
+-This option defines a mapping from the original source directory <oldSrcPath>
+-when the instrumentation or log file was generated
+-to the target source directory <newSrcPath> used during performance testing.
+-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 measurement.
+-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 hung
+-and exits.
+diff --git a/pkg/analysis_server/benchmark/integration/driver.dart 
b/pkg/analysis_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 = ' '.codeUnitAt(0);
+-
+-void _printColumn(StringBuffer sb, String text, int keyLen,
+-    {bool rightJustified: false}) {
+-  if (!rightJustified) {
+-    sb.write(text);
+-    sb.write(',');
+-  }
+-  for (int i = 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 request
+-   * before forcibly terminating it.
+-   */
+-  static const Duration SHUTDOWN_TIMEOUT = const Duration(seconds: 5);
+-
+-  final Logger logger = 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 = false;
+-
+-  @override
+-  Server server;
+-
+-  /**
+-   * The results collected while running analysis server.
+-   */
+-  final Results results = new Results();
+-
+-  /**
+-   * The [Completer] for [runComplete].
+-   */
+-  Completer<Results> _runCompleter = 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 => _runCompleter.future;
+-
+-  /**
+-   * Perform the given operation.
+-   * Return a [Future] that completes when the next operation can be 
performed,
+-   * 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 assigned.
+-   * The returned [Future] will be completed when the server acknowledges the
+-   * command with a response.  If the server acknowledges the command with a
+-   * normal (non-error) response, the future will be completed with the 
'result'
+-   * field from the response.  If the server acknowledges the command with 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 = new Server();
+-    Completer serverConnected = new Completer();
+-    onServerConnected.listen((_) {
+-      logger.log(Level.FINE, 'connected to server');
+-      serverConnected.complete();
+-    });
+-    running = true;
+-    return server
+-        .start(diagnosticPort: diagnosticPort /*profileServer: true*/)
+-        .then((params) {
+-      server.listenToOutput(dispatchNotification);
+-      server.exitCode.then((_) {
+-        logger.log(Level.FINE, 'server stopped');
+-        running = false;
+-        _resultsReady();
+-      });
+-      return serverConnected.future;
+-    });
+-  }
+-
+-  /**
+-   * Shutdown the analysis server if it is running.
+-   */
+-  Future stopServer([Duration timeout = 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 results.
+-   */
+-  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 = new List<Duration>();
+-  int errorCount = 0;
+-  int unexpectedResultCount = 0;
+-
+-  Measurement(this.tag, this.notification);
+-
+-  int get count => elapsedTimes.length;
+-
+-  void printSummary(int keyLen) {
+-    int count = 0;
+-    Duration maxTime = elapsedTimes[0];
+-    Duration minTime = elapsedTimes[0];
+-    int totalTimeMicros = 0;
+-    for (Duration elapsed in elapsedTimes) {
+-      ++count;
+-      int timeMicros = elapsed.inMicroseconds;
+-      maxTime = maxTime.compareTo(elapsed) > 0 ? maxTime : elapsed;
+-      minTime = minTime.compareTo(elapsed) < 0 ? minTime : elapsed;
+-      totalTimeMicros += timeMicros;
+-    }
+-    int meanTime = (totalTimeMicros / count).round();
+-    List<Duration> sorted = elapsedTimes.toList()..sort();
+-    Duration time90th = sorted[(sorted.length * 0.90).round() - 1];
+-    Duration time99th = sorted[(sorted.length * 0.99).round() - 1];
+-    int differenceFromMeanSquared = 0;
+-    for (Duration elapsed in elapsedTimes) {
+-      int timeMicros = elapsed.inMicroseconds;
+-      int differenceFromMean = timeMicros - meanTime;
+-      differenceFromMeanSquared += differenceFromMean * differenceFromMean;
+-    }
+-    double variance = differenceFromMeanSquared / count;
+-    int standardDeviation = sqrt(variance).round();
+-
+-    StringBuffer sb = 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 = new Map<String, Measurement>();
+-
+-  /**
+-   * Display results on stdout.
+-   */
+-  void printResults() {
+-    print('');
+-    
print('==================================================================');
+-    print('');
+-    List<String> keys = measurements.keys.toList()..sort();
+-    int keyLen = keys.fold(0, (int len, String key) => max(len, key.length));
+-    _printGroupHeader('Request/Response', keyLen);
+-    int totalCount = 0;
+-    int totalErrorCount = 0;
+-    int totalUnexpectedResultCount = 0;
+-    for (String tag in keys) {
+-      Measurement m = measurements[tag];
+-      if (!m.notification) {
+-        m.printSummary(keyLen);
+-        totalCount += m.count;
+-        totalErrorCount += m.errorCount;
+-        totalUnexpectedResultCount += m.unexpectedResultCount;
+-      }
+-    }
+-    _printTotals(
+-        keyLen, totalCount, totalErrorCount, totalUnexpectedResultCount);
+-    print('');
+-    _printGroupHeader('Notifications', keyLen);
+-    for (String tag in keys) {
+-      Measurement m = measurements[tag];
+-      if (m.notification) {
+-        m.printSummary(keyLen);
+-      }
+-    }
+-
+-    /// TODO(danrubel) *** print warnings if driver caches are not empty ****
+-    print('''
+-
+-(1) uxr = 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 = measurements[tag];
+-    if (measurement == null) {
+-      measurement = new Measurement(tag, notification);
+-      measurements[tag] = measurement;
+-    }
+-    measurement.record(success, elapsed);
+-  }
+-
+-  void recordUnexpectedResults(String tag) {
+-    measurements[tag].recordUnexpectedResults();
+-  }
+-
+-  void _printGroupHeader(String groupName, int keyLen) {
+-    StringBuffer sb = 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 = 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.dart 
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 = 'Server responded with an error: ';
+-  final Logger logger = new Logger('InstrumentationInputConverter');
+-  final Set<String> eventsSeen = 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 = {};
+-
+-  /**
+-   * 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 = {};
+-
+-  /**
+-   * A mapping from request/response id to the actual response result
+-   * for those responses that have not been processed.
+-   */
+-  final Map<String, dynamic> responseMap = {};
+-
+-  /**
+-   * 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 = {};
+-
+-  /**
+-   * The prefix used to determine if a request parameter is a file path.
+-   */
+-  final String rootPrefix = 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 
measurement.
+-   */
+-  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) => value as Map<String, dynamic>;
+-
+-  /**
+-   * Return an operation for the notification or `null` if none.
+-   */
+-  Operation convertNotification(Map<String, dynamic> json) {
+-    String event = json['event'];
+-    if (event == SERVER_NOTIFICATION_STATUS) {
+-      // {"event":"server.status","params":{"analysis":{"isAnalyzing":false}}}
+-      Map<String, dynamic> params = asMap(json['params']);
+-      if (params != null) {
+-        Map<String, dynamic> analysis = asMap(params['analysis']);
+-        if (analysis != null && analysis['isAnalyzing'] == false) {
+-          return new WaitForAnalysisCompleteOperation();
+-        }
+-      }
+-    }
+-    if (event == 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 = asMap(translateSrcPaths(origJson));
+-    requestMap[json['id']] = json;
+-    String method = json['method'];
+-    // Sanity check operations that modify source
+-    // to ensure that the operation is on source in temp space
+-    if (method == 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 disk
+-      Request request = new Request.fromJson(json);
+-      var params = new AnalysisUpdateContentParams.fromRequest(request);
+-      params.files.forEach((String filePath, change) {
+-        if (change is AddContentOverlay) {
+-          String content = change.content;
+-          if (content == null) {
+-            throw 'expected new overlay content\n$json';
+-          }
+-          overlays[filePath] = content;
+-        } else if (change is ChangeContentOverlay) {
+-          String content = overlays[filePath];
+-          if (content == null) {
+-            throw 'expected cached overlay content\n$json';
+-          }
+-          overlays[filePath] = SourceEdit.applySequence(content, 
change.edits);
+-        } else if (change is RemoveContentOverlay) {
+-          String content = overlays.remove(filePath);
+-          if (content == null) {
+-            throw 'expected cached overlay content\n$json';
+-          }
+-          if (!path.isWithin(tmpSrcDirPath, filePath)) {
+-            throw 'found path referencing source outside temp 
space\n$filePath\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 == COMPLETION_REQUEST_GET_SUGGESTIONS) {
+-      return new CompletionRequestOperation(this, json);
+-    }
+-    // TODO(danrubel) replace this with code
+-    // that just forwards the translated request
+-    if (method == ANALYSIS_REQUEST_GET_HOVER ||
+-        method == ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS ||
+-        method == ANALYSIS_REQUEST_SET_PRIORITY_FILES ||
+-        method == ANALYSIS_REQUEST_SET_SUBSCRIPTIONS ||
+-        method == ANALYSIS_REQUEST_UPDATE_OPTIONS ||
+-        method == EDIT_REQUEST_GET_ASSISTS ||
+-        method == EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS ||
+-        method == EDIT_REQUEST_GET_FIXES ||
+-        method == EDIT_REQUEST_GET_REFACTORING ||
+-        method == EDIT_REQUEST_SORT_MEMBERS ||
+-        method == EXECUTION_REQUEST_CREATE_CONTEXT ||
+-        method == EXECUTION_REQUEST_DELETE_CONTEXT ||
+-        method == EXECUTION_REQUEST_MAP_URI ||
+-        method == EXECUTION_REQUEST_SET_SUBSCRIPTIONS ||
+-        method == SEARCH_REQUEST_FIND_ELEMENT_REFERENCES ||
+-        method == SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS ||
+-        method == SERVER_REQUEST_GET_VERSION ||
+-        method == 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 = 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 = exception;
+-    if (exception is UnimplementedError) {
+-      if (exception.message.startsWith(ERROR_PREFIX)) {
+-        result = 
JSON.decode(exception.message.substring(ERROR_PREFIX.length));
+-      }
+-    }
+-    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] = 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 = responseCompleters[id];
+-    if (completer != null) {
+-      logger.log(Level.INFO, 'processing response $id');
+-      completer.complete(result);
+-    } else {
+-      logger.log(Level.INFO, 'caching response $id');
+-      responseMap[id] = 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 generated.
+-   */
+-  translateSrcPaths(json) {
+-    if (json is String) {
+-      return srcPathMap.translate(json);
+-    }
+-    if (json is List) {
+-      List result = [];
+-      for (int i = 0; i < json.length; ++i) {
+-        result.add(translateSrcPaths(json[i]));
+-      }
+-      return result;
+-    }
+-    if (json is Map) {
+-      Map<String, dynamic> result = new Map<String, dynamic>();
+-      json.forEach((origKey, value) {
+-        result[translateSrcPaths(origKey)] = 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 = 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 
measurement.
+-   */
+-  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 determined
+-   * or the end of file was reached.
+-   */
+-  int headerLineCount = 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 = true;
+-
+-  InputConverter(this.tmpSrcDirPath, this.srcPathMap);
+-
+-  @override
+-  Operation convert(String line) {
+-    if (!active) {
+-      return null;
+-    }
+-    if (converter != null) {
+-      try {
+-        return converter.convert(line);
+-      } catch (e) {
+-        active = false;
+-        rethrow;
+-      }
+-    }
+-    if (headerLineCount == 20) {
+-      throw 'Failed to determine input file format';
+-    }
+-    if (InstrumentationInputConverter.isFormat(line)) {
+-      converter = new InstrumentationInputConverter(tmpSrcDirPath, 
srcPathMap);
+-    } else if (LogFileInputConverter.isFormat(line)) {
+-      converter = new LogFileInputConverter(tmpSrcDirPath, srcPathMap);
+-    }
+-    if (converter != 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 = [];
+-
+-  void add(String oldSrcPrefix, String newSrcPrefix) {
+-    entries.add(new PathMapEntry(oldSrcPrefix, newSrcPrefix));
+-  }
+-
+-  String translate(String original) {
+-    String result = original;
+-    for (PathMapEntry entry in entries) {
+-      result = 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 = converter.convert(line);
+-    if (op != null) {
+-      outSink.add(op);
+-    }
+-  }
+-
+-  @override
+-  void close() {
+-    outSink.close();
+-  }
+-}
+diff --git 
a/pkg/analysis_server/benchmark/integration/instrumentation_input_converter.dart
 
b/pkg/analysis_server/benchmark/integration/instrumentation_input_converter.dart
+deleted file mode 100644
+index 7a875942643..00000000000
+--- 
a/pkg/analysis_server/benchmark/integration/instrumentation_input_converter.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 = ':'.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 = 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 = null;
+-
+-  InstrumentationInputConverter(String tmpSrcDirPath, PathMap srcPathMap)
+-      : super(tmpSrcDirPath, srcPathMap);
+-
+-  @override
+-  Operation convert(String line) {
+-    List<String> fields;
+-    try {
+-      fields = _parseFields(line);
+-      if (fields.length < 2) {
+-        if (readBuffer != null) {
+-          readBuffer.writeln(fields.length == 1 ? fields[0] : '');
+-          return null;
+-        }
+-        throw 'Failed to process line:\n$line';
+-      }
+-      if (readBuffer != null) {
+-        readBuffer = null;
+-      }
+-    } catch (e, s) {
+-      throw new AnalysisException(
+-          'Failed to parse line\n$line', new CaughtException(e, s));
+-    }
+-    // int timeStamp = int.parse(fields[0], onError: (_) => -1);
+-    String opCode = fields[1];
+-    if (opCode == InstrumentationService.TAG_NOTIFICATION) {
+-      return convertNotification(decodeJson(line, fields[2]));
+-    } else if (opCode == 'Read') {
+-      // 1434096943209:Read:/some/file/path:1434095535000:<file content>
+-      //String filePath = fields[2];
+-      readBuffer = new StringBuffer(fields.length > 4 ? fields[4] : '');
+-      return null;
+-    } else if (opCode == InstrumentationService.TAG_REQUEST) {
+-      return convertRequest(decodeJson(line, fields[2]));
+-    } else if (opCode == InstrumentationService.TAG_RESPONSE) {
+-      // 1434096937454:Res:{"id"::"0","result"::{"version"::"1.7.0"}}
+-      return convertResponse(decodeJson(line, fields[2]));
+-    } else if (opCode == InstrumentationService.TAG_ANALYSIS_TASK) {
+-      // 1434096943208:Task:/Users/
+-      return null;
+-    } else if (opCode == InstrumentationService.TAG_LOG_ENTRY) {
+-      // 1434096937454:Res:{"id"::"0","result"::{"version"::"1.7.0"}}
+-      return null;
+-    } else if (opCode == InstrumentationService.TAG_PERFORMANCE) {
+-      //1434096960092:Perf:analysis_full:16884:context_id=0
+-      return null;
+-    } else if (opCode == InstrumentationService.TAG_SUBPROCESS_START) {
+-      // 1434096938634:SPStart:0:/Users/da
+-      return null;
+-    } else if (opCode == InstrumentationService.TAG_SUBPROCESS_RESULT) {
+-      // 1434096939068:SPResult:0:0:"{\"packages\"::{\"rpi_lidar\"::\"/Users
+-      return null;
+-    } else if (opCode == InstrumentationService.TAG_VERSION) {
+-      // 1434096937358:Ver:1421765742287333878467:org.dartlang.dartplugin
+-      return null;
+-    } else if (opCode == 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  $line');
+-    }
+-    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 = _parseFields(line);
+-    if (fields.length < 2) return false;
+-    int timeStamp = int.parse(fields[0], onError: (_) => -1);
+-    String opCode = fields[1];
+-    return timeStamp > 0 && opCode == 'Ver';
+-  }
+-
+-  /**
+-   * Extract fields from the given [line].
+-   */
+-  static List<String> _parseFields(String line) {
+-    List<String> fields = new List<String>();
+-    int index = 0;
+-    StringBuffer sb = new StringBuffer();
+-    while (index < line.length) {
+-      int code = line.codeUnitAt(index);
+-      if (code == COLON) {
+-        // Embedded colons are doubled
+-        int next = index + 1;
+-        if (next < line.length && line.codeUnitAt(next) == 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 = 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 repository');
+-  var branch = args[1];
+-  var inputFile = new File(args[2]);
+-  if (!inputFile.existsSync()) printHelp('${inputFile.path} does not exist');
+-  /*
+-   * Create a new temp directory
+-   */
+-  var tmpDir = new Directory(
+-      join(Directory.systemTemp.path, 'analysis_server_perf_target'));
+-  if (!tmpDir.path.contains('tmp')) throw 'invalid tmp directory\n  $tmpDir';
+-  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 = join(tmpDir.path, 'targetSrc.tar');
+-  var result = Process.runSync('git', ['archive', branch, '-o', tarFilePath],
+-      workingDirectory: gitDir.path);
+-  if (result.exitCode != 0) throw 'failed to obtain target source: $result';
+-  var tmpSrcDirPath = join(tmpDir.path, 'targetSrc');
+-  new Directory(tmpSrcDirPath).createSync();
+-  result = Process.runSync('tar', ['-xf', tarFilePath],
+-      workingDirectory: tmpSrcDirPath);
+-  if (result.exitCode != 0) throw 'failed to extract target source: $result';
+-  /*
+-   * Symlink the out or xcodebuild directory
+-   */
+-  var outDirName = 'out';
+-  if (!new Directory(join(gitDir.path, outDirName)).existsSync()) {
+-    outDirName = 'xcodebuild';
+-  }
+-  if (!new Directory(join(gitDir.path, outDirName)).existsSync()) {
+-    throw 'failed to find out or xcodebuild directory';
+-  }
+-  result = Process.runSync('ln',
+-      ['-s', join(gitDir.path, outDirName), join(tmpSrcDirPath, outDirName)]);
+-  if (result.exitCode != 0) throw 'failed to link out or xcodebuild: $result';
+-  /*
+-   * Collect arguments
+-   */
+-  var perfArgs = [
+-    '-i${inputFile.path}',
+-    '-t$tmpSrcDirPath',
+-  ];
+-  for (int index = 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 != null) {
+-    print('');
+-    print('Error: $errMsg');
+-    print('');
+-  }
+-  print('''Required arguments: <gitDir> <branch> <inputFile>
+-gitDir = a path to the git repository containing the initial target source
+-branch = the branch containing the initial target source
+-inputFile = the instrumentation or log file
+-
+-Optional arguments:''');
+-  print(performance.argParser.usage);
+-  exit(1);
+-}
+diff --git 
a/pkg/analysis_server/benchmark/integration/log_file_input_converter.dart 
b/pkg/analysis_server/benchmark/integration/log_file_input_converter.dart
+deleted file mode 100644
+index 79d3d6e955c..00000000000
+--- a/pkg/analysis_server/benchmark/integration/log_file_input_converter.dart
++++ /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 = ' <= {"event":"server.connected"';
+-const RECEIVED_FRAGMENT = ' <= {';
+-const SENT_FRAGMENT = ' => {';
+-final int NINE = '9'.codeUnitAt(0);
+-final int ZERO = '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 = _parseTimeStamp(line);
+-      String data = line.substring(timeStampString.length);
+-      if (data.startsWith(RECEIVED_FRAGMENT)) {
+-        Map<String, dynamic> json = 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 = 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 <= 
{"event":"server.connected","params":{"version":"1.6.0"}}`
+-   */
+-  static bool isFormat(String line) {
+-    String timeStampString = _parseTimeStamp(line);
+-    int start = timeStampString.length;
+-    int end = start + CONNECTED_MSG_FRAGMENT.length;
+-    return (10 < start && end < line.length) &&
+-        line.substring(start, end) == 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 = 0;
+-    while (index < line.length) {
+-      int code = 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/analysis_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 = new Logger('Performance Measurement Client');
+-  logger.onRecord.listen((LogRecord rec) {
+-    print(rec.message);
+-  });
+-  PerfArgs args = parseArgs(rawArgs);
+-
+-  Driver driver = new Driver(diagnosticPort: args.diagnosticPort);
+-  Stream<Operation> stream = openInput(args);
+-  StreamSubscription<Operation> subscription;
+-  subscription = stream.listen((Operation op) {
+-    Future future = driver.perform(op);
+-    if (future != 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 = 'diagnosticPort';
+-const HELP_CMDLINE_OPTION = 'help';
+-const INPUT_CMDLINE_OPTION = 'input';
+-const MAP_OPTION = 'map';
+-
+-/**
+- * The amount of time to give the server to respond to a shutdown request
+- * before forcibly terminating it.
+- */
+-const Duration SHUTDOWN_TIMEOUT = const Duration(seconds: 25);
+-
+-const TMP_SRC_DIR_OPTION = 'tmpSrcDir';
+-const VERBOSE_CMDLINE_OPTION = 'verbose';
+-const VERY_VERBOSE_CMDLINE_OPTION = 'vv';
+-
+-ArgParser _argParser;
+-
+-ArgParser get argParser {
+-  _argParser = 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 read 
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 directory 
<oldSrcPath>\n'
+-          'when the instrumentation or log file was generated\n'
+-          'to the target source directory <newSrcPath> used during 
performance 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 performance 
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 
pages');
+-  _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 = new Logger('openInput');
+-  Stream<List<int>> inputRaw;
+-  if (args.inputPath == 'stdin') {
+-    inputRaw = stdin;
+-  } else {
+-    inputRaw = 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 = new PerfArgs();
+-  try {
+-    args = argParser.parse(rawArgs);
+-  } on Exception catch (e) {
+-    print(e);
+-    printHelp();
+-    exit(1);
+-  }
+-
+-  bool showHelp = args[HELP_CMDLINE_OPTION] || args.rest.isNotEmpty;
+-
+-  bool isMissing(key) => args[key] == null || args[key].isEmpty;
+-
+-  perfArgs.inputPath = args[INPUT_CMDLINE_OPTION];
+-  if (isMissing(INPUT_CMDLINE_OPTION)) {
+-    print('missing $INPUT_CMDLINE_OPTION argument');
+-    showHelp = true;
+-  }
+-
+-  for (String pair in args[MAP_OPTION]) {
+-    if (pair is String) {
+-      int index = pair.indexOf(',');
+-      if (index != -1 && pair.indexOf(',', index + 1) == -1) {
+-        String oldSrcPrefix = _withTrailingSeparator(pair.substring(0, 
index));
+-        String newSrcPrefix = _withTrailingSeparator(pair.substring(index + 
1));
+-        if (new Directory(newSrcPrefix).existsSync()) {
+-          perfArgs.srcPathMap.add(oldSrcPrefix, newSrcPrefix);
+-          continue;
+-        }
+-      }
+-    }
+-    print('must specifiy $MAP_OPTION <oldSrcPath>,<newSrcPath>');
+-    showHelp = true;
+-  }
+-
+-  perfArgs.tmpSrcDirPath = _withTrailingSeparator(args[TMP_SRC_DIR_OPTION]);
+-  if (isMissing(TMP_SRC_DIR_OPTION)) {
+-    print('missing $TMP_SRC_DIR_OPTION argument');
+-    showHelp = true;
+-  }
+-
+-  String portText = args[DIAGNOSTIC_PORT_OPTION];
+-  if (portText != null) {
+-    perfArgs.diagnosticPort = int.parse(portText, onError: (s) {
+-      print('invalid $DIAGNOSTIC_PORT_OPTION: $s');
+-      showHelp = true;
+-    });
+-  }
+-
+-  if (args[VERY_VERBOSE_CMDLINE_OPTION] || rawArgs.contains('-vv')) {
+-    Logger.root.level = Level.FINE;
+-  } else if (args[VERBOSE_CMDLINE_OPTION]) {
+-    Logger.root.level = Level.INFO;
+-  } else {
+-    Logger.root.level = 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 != 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 = new PathMap();
+-
+-  /**
+-   * The temporary directory containing source used during performance 
measurement.
+-   */
+-  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/pkg/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 = true;
+-
+-  CompletionRequestOperation(
+-      CommonInputConverter converter, Map<String, dynamic> json)
+-      : super(converter, json);
+-
+-  @override
+-  Future perform(Driver driver) {
+-    this.driver = driver;
+-    subscription = driver.onCompletionResults.listen(processNotification);
+-    return super.perform(driver);
+-  }
+-
+-  void processNotification(CompletionResultsParams event) {
+-    if (event.id == notificationId) {
+-      Duration elapsed = stopwatch.elapsed;
+-      if (firstNotification) {
+-        firstNotification = 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 = result['id'];
+-    this.stopwatch = stopwatch;
+-    super.processResult(id, result, stopwatch);
+-  }
+-}
+-
+-/**
+- * An [Operation] represents an action such as sending a request to the 
server.
+- */
+-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 = new Stopwatch();
+-    String originalId = json['id'];
+-    String method = json['method'];
+-    json['clientRequestTime'] = new DateTime.now().millisecondsSinceEpoch;
+-    driver.logger.log(Level.FINE, 'Sending request: $method\n  $json');
+-    stopwatch.start();
+-
+-    void recordResult(bool success, result) {
+-      Duration elapsed = stopwatch.elapsed;
+-      driver.results.record(method, elapsed, success: success);
+-      driver.logger
+-          .log(Level.FINE, 'Response received: $method : $elapsed\n  
$result');
+-    }
+-
+-    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 = new Duration(seconds: 60);
+-  final CommonInputConverter converter;
+-  final Map<String, dynamic> requestJson;
+-  final Map<String, dynamic> responseJson;
+-  final Completer completer = new Completer();
+-  Driver driver;
+-
+-  ResponseOperation(this.converter, this.requestJson, this.responseJson) {
+-    completer.future.then(_processResult).timeout(responseTimeout);
+-  }
+-
+-  @override
+-  Future perform(Driver driver) {
+-    this.driver = driver;
+-    return converter.processExpectedResponse(responseJson['id'], completer);
+-  }
+-
+-  bool _equal(expectedResult, actualResult) {
+-    if (expectedResult is Map && actualResult is Map) {
+-      if (expectedResult.length == actualResult.length) {
+-        return expectedResult.keys.every((key) {
+-          return key ==
+-                  '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 == actualResult.length) {
+-        for (int i = 0; i < expectedResult.length; ++i) {
+-          if (!_equal(expectedResult[i], actualResult[i])) {
+-            return false;
+-          }
+-        }
+-        return true;
+-      }
+-    }
+-    return expectedResult == actualResult;
+-  }
+-
+-  /**
+-   * Compare the expected and actual server response result.
+-   */
+-  void _processResult(actualResult) {
+-    var expectedResult = responseJson['result'];
+-    if (!_equal(expectedResult, actualResult)) {
+-      var expectedError = responseJson['error'];
+-      String format(value) {
+-        String text = '\n$value';
+-        if (text.endsWith('\n')) {
+-          text = text.substring(0, text.length - 1);
+-        }
+-        return text.replaceAll('\n', '\n  ');
+-      }
+-
+-      String message = '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 == 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 = new DateTime.now();
+-    driver.logger.log(Level.FINE, 'waiting for analysis to complete');
+-    StreamSubscription<ServerStatusParams> subscription;
+-    Timer timer;
+-    Completer completer = new Completer();
+-    bool isAnalyzing = false;
+-    subscription = driver.onServerStatus.listen((ServerStatusParams params) {
+-      if (params.analysis != null) {
+-        if (params.analysis.isAnalyzing) {
+-          isAnalyzing = true;
+-        } else {
+-          subscription.cancel();
+-          timer.cancel();
+-          DateTime end = new DateTime.now();
+-          Duration delta = end.difference(start);
+-          driver.logger.log(Level.FINE, 'analysis complete after $delta');
+-          completer.complete();
+-          driver.results.record('analysis complete', delta, notification: 
true);
+-        }
+-      }
+-    });
+-    timer = new Timer.periodic(new Duration(milliseconds: 20), (_) {
+-      if (!isAnalyzing) {
+-        // TODO (danrubel) revisit this once source change requests are 
implemented
+-        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 = driver.server.currentElapseTime;
+-      double lastTime = driver.server.lastCommunicationTime;
+-      if (currentTime - lastTime > 60) {
+-        subscription.cancel();
+-        timer.cancel();
+-        String message = '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 = _createArgParser();
+-  var args = parser.parse(arguments);
+-  if (args[SOURCE_OPTION] == null) {
+-    print('path to source directory must be specified');
+-    exit(1);
+-  }
+-  source = args[SOURCE_OPTION];
+-  priorityFile = args[PRIORITY_FILE_OPTION];
+-  List names = args[METRIC_NAME_OPTION] as List;
+-  for (var name in names) {
+-    metricNames.add(name as String);
+-  }
+-
+-  var test;
+-
+-  if (metricNames.isEmpty) {
+-    test = new AnalysisTimingTest();
+-  } else {
+-    test = new SubscriptionTimingTest();
+-  }
+-
+-  Future.wait(<Future>[test.test_timing()]);
+-}
+-
+-const DEFAULT_METRIC = 'analysis';
+-const METRIC_NAME_OPTION = 'metric';
+-const PRIORITY_FILE_OPTION = 'priority';
+-const SOURCE_OPTION = 'source';
+-
+-final metricNames = <String>[];
+-String priorityFile;
+-String source;
+-
+-ArgParser _createArgParser() => new ArgParser()
+-  ..addOption(METRIC_NAME_OPTION,
+-      help: 'metric name (defaults to `analysis`)', allowMultiple: true)
+-  ..addOption(SOURCE_OPTION, help: 'full path to source directory for 
analysis')
+-  ..addOption(PRIORITY_FILE_OPTION,
+-      help: '(optional) full path to a priority file');
+-
+-/**
+- * AnalysisTimingTest measures the time taken by the analysis server to fully 
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 = <Duration>[];
+-  Stream eventStream;
+-  AnalysisService service;
+-  String name;
+-  Metric(this.name, this.service, this.eventStream);
+-  String toString() => '$name: $service, ${eventStream.runtimeType}, 
$timings';
+-}
+-
+-/**
+- * SubscriptionTimingTest measures the time taken by the analysis server to 
return
+- * information for navigation, semantic highlighting, outline, get 
occurrences,
+- * overrides, folding and implemented. These timings are wrt to the specified 
priority file
+- * - the file that is currently opened and has focus in the editor. Measure 
the time from
+- * when the client subscribes for the notifications till there is a response 
from the server.
+- * Does not wait for analysis to be complete before subscribing for 
notifications.
+- */
+-class SubscriptionTimingTest extends AbstractTimingTest {
+-  List<Metric> _metrics;
+-
+-  List<Metric> get metrics => _metrics ??= 
metricNames.map(getMetric).toList();
+-
+-  Metric getMetric(String name) {
+-    switch (name) {
+-      case 'folding':
+-        return new Metric(name, AnalysisService.FOLDING, onAnalysisFolding);
+-      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, onAnalysisOutline);
+-      case 'occurences':
+-        return new Metric(
+-            name, AnalysisService.OCCURRENCES, onAnalysisOccurrences);
+-      case 'overrides':
+-        return new Metric(name, AnalysisService.OVERRIDES, 
onAnalysisOverrides);
+-    }
+-    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) => m.eventStream.listen((_) {
+-          m.timings.add(
+-              new Duration(milliseconds: stopwatch.elapsed.inMilliseconds));
+-        }));
+-
+-    var subscriptions = <AnalysisService, List<String>>{};
+-    metrics.forEach((Metric m) => subscriptions[m.service] = [priorityFile]);
+-
+-    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) => print('${m.name} timings: ${m.timings}'));
+-
+-    await shutdown();
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_angular.dart 
b/pkg/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 = args.length;
+-  if (length < 1) {
+-    print(
+-        'Usage: dart benchmark_local.dart path_to_np8080 (an example ngdart 
project)'
+-        ' [benchmark_id]');
+-    return;
+-  }
+-  paths = new PathHolder(projectPath: args[0]);
+-  String id = args.length >= 2 ? args[1] : null;
+-  if (id == null) {
+-    for (String id in benchmarks.keys) {
+-      BenchmarkFunction benchmark = benchmarks[id];
+-      await benchmark(id);
+-    }
+-  } else {
+-    BenchmarkFunction benchmark = benchmarks[id];
+-    if (benchmark != null) {
+-      benchmark(id);
+-    }
+-  }
+-}
+-
+-const Map<String, BenchmarkFunction> benchmarks =
+-    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 = 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 = await new BenchmarkScenario().waitAnalyze_change_analyze(
+-      roots: [paths.packageNp8080],
+-      file: paths.editorDart,
+-      fileChange: new FileChange(
+-          afterStr: 'showPreview = false;',
+-          insertStr: '@Output() EventEmitter<int> myEventEmitter;'),
+-      numOfRepeats: 10);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_change_html(String id) async {
+-  String description = 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 = await new BenchmarkScenario().waitAnalyze_change_analyze(
+-      roots: [paths.packageNp8080],
+-      file: paths.editorHtml,
+-      fileChange: new FileChange(
+-          afterStr: 'note.lastModified', afterStrBack: 4, insertStr: 
'NewName'),
+-      numOfRepeats: 4);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_initialAnalysis(String id) async {
+-  String description = 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 = await 
BenchmarkScenario.start_waitInitialAnalysis_shutdown(
+-      roots: [paths.packageNp8080], numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_memory_initialAnalysis(String id) async {
+-  String description = 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 = 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 = '$projectPath/lib/editor/editor_component.html';
+-    editorDart = '$projectPath/lib/editor/editor_component.dart';
+-    packageNp8080 = projectPath;
+-  }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart 
b/pkg/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 = args.length;
+-  if (length < 1) {
+-    print('Usage: dart benchmark_local.dart path_to_flutter_checkout'
+-        ' [benchmark_id]');
+-    return;
+-  }
+-  paths = new PathHolder(flutterPath: args[0]);
+-  String id = args.length >= 2 ? args[1] : null;
+-  if (id == null) {
+-    for (String id in benchmarks.keys) {
+-      BenchmarkFunction benchmark = benchmarks[id];
+-      await benchmark(id);
+-    }
+-  } else {
+-    BenchmarkFunction benchmark = benchmarks[id];
+-    if (benchmark != null) {
+-      benchmark(id);
+-    }
+-  }
+-}
+-
+-const Map<String, BenchmarkFunction> benchmarks =
+-    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 = 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 = await new BenchmarkScenario().waitAnalyze_change_analyze(
+-      roots: [paths.packageFlutter],
+-      file: '${paths.packageFlutter}/lib/src/painting/colors.dart',
+-      fileChange: new FileChange(
+-          afterStr: 'final double h = hue % 360;', insertStr: 
'print(12345);'),
+-      numOfRepeats: 10);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_change_2(String id) async {
+-  String description = 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 = await new BenchmarkScenario().waitAnalyze_change_analyze(
+-      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 = 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 = 'print(12345);';
+-  List<int> times = 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 = 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 = 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);parent.'),
+-          completeAfterStr: 'print(12345);parent.',
+-          numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_initialAnalysis_1(String id) async {
+-  String description = 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 = await 
BenchmarkScenario.start_waitInitialAnalysis_shutdown(
+-      roots: [paths.exampleHelloWorld], numOfRepeats: 5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_initialAnalysis_2(String id) async {
+-  String description = 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 = await 
BenchmarkScenario.start_waitInitialAnalysis_shutdown(
+-      roots: [paths.exampleHelloWorld, paths.exampleGallery], numOfRepeats: 
5);
+-  printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_memory_initialAnalysis_1(String id) async {
+-  String description = 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 = 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 = r'''
+-1. Start server, set 'packages/flutter' and 'packages/flutter_markdown' 
analysis roots.
+-2. Measure the memory usage after finishing initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+-  List<int> sizes = 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 = 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 time 
to get results.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+-  List<int> times = 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 = '$flutterPath/examples/hello_world';
+-    exampleGallery = '$flutterPath/examples/flutter_gallery';
+-    exampleStocks = '$flutterPath/examples/stocks';
+-    packageFlutter = '$flutterPath/packages/flutter';
+-    packageMarkdown = '$flutterPath/packages/flutter_markdown';
+-    packageSprites = '$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 = times.fold(1 << 20, min);
+-  String now = new DateTime.now().toUtc().toIso8601String();
+-  print('$now ========== $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 = <int>[];
+-    for (int i = 0; i < numOfRepeats; i++) {
+-      // Update and wait for analysis.
+-      Stopwatch stopwatch = 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: 'completeAfterStr');
+-    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 = <int>[];
+-    for (int i = 0; i < numOfRepeats; i++) {
+-      String updatedContent = await _applyFileChange(file, fileChange);
+-      // Measure completion time.
+-      int completionOffset =
+-          _indexOfEnd(file, updatedContent, completeAfterStr);
+-      Duration completionDuration =
+-          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: 'refactoringAtStr');
+-    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 = <int>[];
+-    for (int i = 0; i < numOfRepeats; i++) {
+-      String updatedContent = await _applyFileChange(file, fileChange);
+-      // Measure time to get refactoring.
+-      int refactoringOffset = _indexOf(file, updatedContent, 
refactoringAtStr);
+-      Duration refactoringDuration = 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 overlay
+-   * for the [file], and return the updated content.
+-   */
+-  Future<String> _applyFileChange(String file, FileChange desc) async {
+-    String originalContent = _getFileContent(file);
+-    String updatedContent;
+-    if (desc.afterStr != null) {
+-      int offset = _indexOfEnd(file, originalContent, desc.afterStr);
+-      offset -= desc.afterStrBack;
+-      updatedContent = originalContent.substring(0, offset) +
+-          desc.insertStr +
+-          originalContent.substring(offset);
+-    } else if (desc.replaceWhat != null) {
+-      int offset = _indexOf(file, originalContent, desc.replaceWhat);
+-      updatedContent = 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 = new Stopwatch();
+-    stopwatch.start();
+-    Completer<Duration> completer = new Completer<Duration>();
+-    var completionSubscription = 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 = 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 = <int>[];
+-    for (int i = 0; i < numOfRepeats; i++) {
+-      BenchmarkScenario instance = new BenchmarkScenario();
+-      // Initialize Analysis Server.
+-      await instance.setUp();
+-      await instance.subscribeToStatusNotifications();
+-      // Set roots and analyze.
+-      Stopwatch stopwatch = 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 = 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 found.
+-   */
+-  static int _indexOf(String file, String where, String what) {
+-    int index = where.indexOf(what);
+-    outOfTestExpect(index, isNot(-1), reason: 'Cannot find |$what| in 
$file.');
+-    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 != null) {
+-      outOfTestExpect(insertStr, isNotNull, reason: 'insertStr');
+-    } else if (replaceWhat != 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, no '
+-            'existing driver cache.',
+-            kind: 'group');
+-
+-  int get maxIterations => 3;
+-
+-  @override
+-  Future<BenchMarkResult> run(
+-      {bool quick: false, bool previewDart2: false}) async {
+-    if (!quick) {
+-      deleteServerCache();
+-    }
+-
+-    Stopwatch stopwatch = new Stopwatch()..start();
+-
+-    AnalysisServerMemoryUsageTest test = new AnalysisServerMemoryUsageTest();
+-    await test.setUp(previewDart2: previewDart2);
+-    await test.subscribeToStatusNotifications();
+-    await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick), 
[]);
+-    await test.analysisFinished;
+-
+-    stopwatch.stop();
+-    int usedBytes = test.getMemoryUsage();
+-
+-    CompoundBenchMarkResult result = 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 existing '
+-            'driver cache.',
+-            kind: 'group');
+-
+-  @override
+-  Future<BenchMarkResult> run(
+-      {bool quick: false, bool previewDart2: false}) async {
+-    Stopwatch stopwatch = new Stopwatch()..start();
+-
+-    AnalysisServerMemoryUsageTest test = new AnalysisServerMemoryUsageTest();
+-    await test.setUp(previewDart2: previewDart2);
+-    await test.subscribeToStatusNotifications();
+-    await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick), 
[]);
+-    await test.analysisFinished;
+-
+-    stopwatch.stop();
+-    int usedBytes = test.getMemoryUsage();
+-
+-    CompoundBenchMarkResult result = 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 = await _calcEditTiming(test);
+-      result.add('edit', new BenchMarkResult('micros', editMicros));
+-
+-      // code completion
+-      final int completionMicros = await _calcCompletionTiming(test);
+-      result.add('completion', new BenchMarkResult('micros', 
completionMicros));
+-    }
+-
+-    await test.shutdown();
+-
+-    return result;
+-  }
+-
+-  Future<int> _calcEditTiming(
+-      AbstractAnalysisServerIntegrationTest test) async {
+-    const int kGroupCount = 5;
+-
+-    final String filePath =
+-        path.join(analysisServerSrcPath, 'lib/src/analysis_server.dart');
+-    String contents = new File(filePath).readAsStringSync();
+-
+-    await test
+-        .sendAnalysisUpdateContent({filePath: new 
AddContentOverlay(contents)});
+-
+-    final Stopwatch stopwatch = new Stopwatch()..start();
+-
+-    for (int i = 0; i < kGroupCount; i++) {
+-      int startIndex = i * (contents.length ~/ (kGroupCount + 2));
+-      int index = contents.indexOf(';', startIndex);
+-      contents = 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 = 10;
+-
+-    final String filePath =
+-        path.join(analysisServerSrcPath, 'lib/src/analysis_server.dart');
+-    String contents = new File(filePath).readAsStringSync();
+-
+-    await test
+-        .sendAnalysisUpdateContent({filePath: new 
AddContentOverlay(contents)});
+-
+-    int completionCount = 0;
+-    final Stopwatch stopwatch = new Stopwatch()..start();
+-
+-    Future _complete(int offset) async {
+-      CompletionGetSuggestionsResult result =
+-          await test.sendCompletionGetSuggestions(filePath, offset);
+-
+-      Future<CompletionResultsParams> future = test.onCompletionResults
+-          .where((CompletionResultsParams params) =>
+-              params.id == result.id && params.isLast)
+-          .first;
+-      await future;
+-
+-      completionCount++;
+-    }
+-
+-    for (int i = 0; i < kGroupCount; i++) {
+-      int startIndex = i * (contents.length ~/ (kGroupCount + 2));
+-      // Look for a line with a period in it that ends with a semi-colon.
+-      int index =
+-          contents.indexOf(new RegExp(r'\..*;$', multiLine: true), 
startIndex);
+-
+-      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 = contents.indexOf(';', index);
+-        contents = 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.dart 
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 = 'offset';
+-const PRIORITY_FILE_OPTION = 'priority';
+-const SOURCE_OPTION = '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 = _createArgParser();
+-  var args = parser.parse(arguments);
+-  if (args[SOURCE_OPTION] == null) {
+-    print('path to source directory must be specified');
+-    exit(1);
+-  }
+-
+-  int offset = int.parse(args[COMPLETION_OFFSET]);
+-  String priorityFile = args[PRIORITY_FILE_OPTION];
+-  String source = args[SOURCE_OPTION];
+-
+-  CompletionTimingTest test =
+-      new CompletionTimingTest(offset, priorityFile, source);
+-  await test.test_timing();
+-}
+-
+-ArgParser _createArgParser() => new ArgParser()
+-  ..addOption(SOURCE_OPTION, help: 'full path to source directory for 
analysis')
+-  ..addOption(PRIORITY_FILE_OPTION, help: 'full path to a priority file')
+-  ..addOption(COMPLETION_OFFSET, help: 'offset in file for code completions');
+-
+-/**
+- * CompletionTimingTest measures the time taken for the analysis server to 
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 are 
received
+- * from the server. The test does not wait for analysis to be complete before 
asking for
+- * completions.
+- */
+-class CompletionTimingTest extends AbstractTimingTest {
+-  final int offset;
+-  final String priorityFile;
+-  final String source;
+-
+-  List<Duration> timings = <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.inMilliseconds));
+-    });
+-
+-    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/analysis_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 = sizes.fold(sizes.first, min);
+-  int maxMemory = sizes.fold(sizes.first, max);
+-  String now = new DateTime.now().toUtc().toIso8601String();
+-  print('$now ========== $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 = 12345;
+-
+-  int getMemoryUsage() {
+-    ProcessResult result = _run('curl', <String>[
+-      
'localhost:$vmServicePort/_getAllocationProfile\?isolateId=isolates/root\&gc=full'
+-    ]);
+-    Map json = JSON.decode(result.stdout);
+-    Map heaps = json['result']['heaps'];
+-    int newSpace = heaps['new']['used'];
+-    int oldSpace = heaps['old']['used'];
+-    return newSpace + oldSpace;
+-  }
+-
+-  /**
+-   * Send the server an 'analysis.setAnalysisRoots' command directing it to
+-   * analyze [sourceDirectory].
+-   */
+-  Future setAnalysisRoot() =>
+-      sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
+-
+-  /**
+-   * The server is automatically started before every test.
+-   */
+-  @override
+-  Future setUp({bool previewDart2: false}) {
+-    onAnalysisErrors.listen((AnalysisErrorsParams params) {
+-      currentAnalysisErrors[params.file] = params.errors;
+-    });
+-    onServerError.listen((ServerErrorParams params) {
+-      // A server error should never happen during an integration test.
+-      fail('${params.message}\n${params.stackTrace}');
+-    });
+-    Completer serverConnected = new Completer();
+-    onServerConnected.listen((_) {
+-      outOfTestExpect(serverConnected.isCompleted, isFalse);
+-      serverConnected.complete();
+-    });
+-    return startServer(
+-      servicesPort: vmServicePort,
+-      previewDart2: previewDart2,
+-    ).then((_) {
+-      server.listenToOutput(dispatchNotification);
+-      server.exitCode.then((_) {
+-        skipShutdown = true;
+-      });
+-      return serverConnected.future;
+-    });
+-  }
+-
+-  /**
+-   * After every test, the server is stopped.
+-   */
+-  Future shutdown() async => await shutdownIfNeeded();
+-
+-  /**
+-   * Enable [ServerService.STATUS] notifications so that [analysisFinished]
+-   * 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 = <int>[];
+-    for (int i = 0; i < numOfRepeats; i++) {
+-      AnalysisServerMemoryUsageTest test = new 
AnalysisServerMemoryUsageTest();
+-      // 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/pkg/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 = new Stopwatch();
+-
+-  /**
+-   * Send the server an 'analysis.setAnalysisRoots' command directing it to
+-   * analyze [sourceDirectory].
+-   */
+-  Future setAnalysisRoot() =>
+-      sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
+-
+-  /**
+-   * The server is automatically started before every test.
+-   */
+-  @override
+-  Future setUp() {
+-    onAnalysisErrors.listen((AnalysisErrorsParams params) {
+-      currentAnalysisErrors[params.file] = params.errors;
+-    });
+-    onServerError.listen((ServerErrorParams params) {
+-      // A server error should never happen during an integration test.
+-      fail('${params.message}\n${params.stackTrace}');
+-    });
+-    Completer serverConnected = new Completer();
+-    onServerConnected.listen((_) {
+-      outOfTestExpect(serverConnected.isCompleted, isFalse);
+-      serverConnected.complete();
+-    });
+-    return startServer(checked: false).then((_) {
+-      server.listenToOutput(dispatchNotification);
+-      server.exitCode.then((_) {
+-        skipShutdown = true;
+-      });
+-      return serverConnected.future;
+-    });
+-  }
+-
+-  /**
+-   * After every test, the server is stopped.
+-   */
+-  Future shutdown() async => await shutdownIfNeeded();
+-
+-  /**
+-   * Enable [ServerService.STATUS] notifications so that [analysisFinished]
+-   * can be used.
+-   */
+-  Future subscribeToStatusNotifications() async {
+-    await sendServerSetSubscriptions([ServerService.STATUS]);
+-  }
+-}
+-
+-class AbstractTimingTest extends AbstractAnalysisServerPerformanceTest {
+-  Future init(String source) async {
+-    await super.setUp();
+-    sourceDirectory = 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=1`), and we run the benchmark on a smaller data set (`--quick`).
+-
+-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 = new ServerStarter();
+-  starter.start(args);
+-}
+diff --git a/pkg/analysis_server/doc/api.html 
b/pkg/analysis_server/doc/api.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="UTF-8">
+-  <title>Analysis Server API Specification</title>
+-<link rel="stylesheet" 
href="https://fonts.googleapis.com/css?family=Source+Code+Pro|Roboto:500,400italic,300,400"
 type="text/css"><style>body {
+-  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="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="http://semver.org/";>semver.org</a>).
+-</p>
+-<h2>Overview</h2>
+-<p>
+-  The analysis server API is a bi-directional client-server
+-  API. The API is independent of the transport mechanism used, but
+-  is heavily influenced by a model in which sockets or character
+-  streams are used to transport JSON-RPC encoded information.
+-</p>
+-<h3>Transport Mechanism</h3>
+-<p>
+-  The characters passed to the server are expected to be encoded
+-  using UTF-8.
+-</p>
+-<p>
+-  When character streams are used as the transport, messages are
+-  delineated by newlines. This means, in particular, that the JSON
+-  encoding process must not introduce newlines within a
+-  message. Note however that newlines are used in this document
+-  for readability.
+-</p>
+-<p>
+-  It is the client's responsibility to read output from the server to
+-  avoid its blocking.
+-</p>
+-<p>
+-  To ease interoperability with Lisp-based clients (which may not
+-  be able to easily distinguish between empty lists, empty maps,
+-  and null), client-to-server communication is allowed to replace
+-  any instance of "<tt>{}</tt>" or "<tt>[]</tt>" with null. The
+-  server will always properly represent empty lists as
+-  "<tt>[]</tt>" and empty maps as "<tt>{}</tt>".
+-</p>
+-<h3>Communication Structure</h3>
+-<p>
+-  Clients can make a request of the server and the server will
+-  provide a response for each request that it receives. While many
+-  of the requests that can be made by a client are informational
+-  in nature, we have chosen to always return a response so that
+-  clients can know whether the request was received and was
+-  correct.
+-</p>
+-<p>
+-  There is no guarantee concerning the order in which responses
+-  will be returned, but there is a guarantee that the server will
+-  process requests in the order in which they are sent as long as
+-  the transport mechanism also makes this guarantee. Responses can
+-  be returned in an order that is different from the order in
+-  which the requests were received because some requests take
+-  longer to process than others.
+-</p>
+-<p>
+-  Every request is required to have two fields and may have two
+-  additional optional fields. The first required field is the ‘id’
+-  field, which is only used by the server to associate a response
+-  with the request that generated the response. The second
+-  required field is the ‘method’ field, which is used to determine
+-  what the server is being requested to do. One optional field is
+-  the ‘params’ field, whose structure is dependent on the method
+-  being requested. The structure of this field is described with
+-  each request for which it is required. The other optional field
+-  is the 'clientRequestTime' field, which is a number indicating
+-  the time at which the client made the request (milliseconds
+-  since epoch). Providing clientRequestTime helps us track
+-  how responsive analysis server is to client requests
+-  and better address any issues that occur.
+-</p>
+-<p>
+-  Every response has up to three fields. The first field is the
+-  ‘id’ field, which is always present and whose value is the
+-  identifier that was passed to the request that generated the
+-  response. The second field is the ‘error’ field, which is only
+-  present if an error was encountered while processing the
+-  request. The third field is the ‘result’ field, whose structure
+-  is dependent on the method being responded to, and is described
+-  with each request that will produce it.
+-</p>
+-<p>
+-  The server can also communicate to the clients by sending a
+-  notification. The purpose of these notifications is to provide
+-  information to clients as it becomes available rather than to
+-  require that clients poll for it. Unless explicitly stated, all
+-  notifications are designed to return the complete information
+-  available at the time the notification is sent; clients are not
+-  required to update previously communicated
+-  results. Consequently, the server can and should return partial
+-  results before all results are available. For example, the
+-  syntactic errors for a file can be returned as soon as the
+-  syntactic analysis is complete, and both syntactic and semantic
+-  errors can be returned together at a later time.
+-</p>
+-<p>
+-  Each notification has two fields. The first field is the ‘event’
+-  field, which identifies the kind of notification. The second
+-  field is the ‘params’ field, whose structure is dependent on the
+-  kind of notification being sent. The structure of this field is
+-  described with each notification.
+-</p>
+-<p>
+-  In order to be backward compatible, clients should ignore fields that were
+-  not specified in the version of the API on which they were based. Clients
+-  should also use the server.getVersion request to test that the version of
+-  the server supports an API before using it.
+-</p>
+-<h3>Eventual Consistency</h3>
+-<p>
+-  The analysis server satisfies requests under the principle of
+-  <a href="https://en.wikipedia.org/wiki/Eventual_consistency";>eventual
+-    consistency</a>.
+-  That is, in some cases it may return responses with the currently available
+-  results while it's catching up with unprocessed changes.
+-</p>
+-<h3>Domains</h3>
+-<p>
+-  For convenience, the API is divided into domains. Each domain is specified
+-  in a separate section below. The specifications of the API’s refer to data
+-  structures beyond the standard JSON primitives. These data structures are
+-  documented in the section titled <a href="#types">Types</a>.
+-</p>
+-
+-<p><a href="#domain_server">Server</a></p><ul><li><a 
href="#request_server.getVersion">server.getVersion</a></li>
+-<li><a href="#request_server.shutdown">server.shutdown</a></li>
+-<li><a 
href="#request_server.setSubscriptions">server.setSubscriptions</a></li>
+-</ul>
+-
+-<p><a href="#domain_analysis">Analysis</a></p><ul><li><a 
href="#request_analysis.getErrors">analysis.getErrors</a></li>
+-<li><a href="#request_analysis.getHover">analysis.getHover</a></li>
+-<li><a 
href="#request_analysis.getLibraryDependencies">analysis.getLibraryDependencies</a></li>
+-<li><a href="#request_analysis.getNavigation">analysis.getNavigation</a></li>
+-<li><a 
href="#request_analysis.getReachableSources">analysis.getReachableSources</a></li>
+-<li><a href="#request_analysis.reanalyze">analysis.reanalyze</a></li>
+-<li><a 
href="#request_analysis.setAnalysisRoots">analysis.setAnalysisRoots</a></li>
+-<li><a 
href="#request_analysis.setGeneralSubscriptions">analysis.setGeneralSubscriptions</a></li>
+-<li><a 
href="#request_analysis.setPriorityFiles">analysis.setPriorityFiles</a></li>
+-<li><a 
href="#request_analysis.setSubscriptions">analysis.setSubscriptions</a></li>
+-<li><a href="#request_analysis.updateContent">analysis.updateContent</a></li>
+-<li><a class="deprecated" 
href="#request_analysis.updateOptions">analysis.updateOptions</a></li>
+-</ul>
+-
+-<p><a href="#domain_completion">Completion</a></p><ul><li><a 
href="#request_completion.getSuggestions">completion.getSuggestions</a></li>
+-</ul>
+-
+-<p><a href="#domain_search">Search</a></p><ul><li><a 
href="#request_search.findElementReferences">search.findElementReferences</a></li>
+-<li><a 
href="#request_search.findMemberDeclarations">search.findMemberDeclarations</a></li>
+-<li><a 
href="#request_search.findMemberReferences">search.findMemberReferences</a></li>
+-<li><a 
href="#request_search.findTopLevelDeclarations">search.findTopLevelDeclarations</a></li>
+-<li><a 
href="#request_search.getTypeHierarchy">search.getTypeHierarchy</a></li>
+-</ul>
+-
+-<p><a href="#domain_edit">Edit</a></p><ul><li><a 
href="#request_edit.format">edit.format</a></li>
+-<li><a href="#request_edit.getAssists">edit.getAssists</a></li>
+-<li><a 
href="#request_edit.getAvailableRefactorings">edit.getAvailableRefactorings</a></li>
+-<li><a href="#request_edit.getFixes">edit.getFixes</a></li>
+-<li><a href="#request_edit.getRefactoring">edit.getRefactoring</a></li>
+-<li><a href="#request_edit.sortMembers">edit.sortMembers</a></li>
+-<li><a 
href="#request_edit.organizeDirectives">edit.organizeDirectives</a></li>
+-</ul>
+-
+-<p><a href="#domain_execution">Execution</a></p><ul><li><a 
href="#request_execution.createContext">execution.createContext</a></li>
+-<li><a 
href="#request_execution.deleteContext">execution.deleteContext</a></li>
+-<li><a href="#request_execution.mapUri">execution.mapUri</a></li>
+-<li><a class="deprecated" 
href="#request_execution.setSubscriptions">execution.setSubscriptions</a></li>
+-</ul>
+-
+-<p><a href="#domain_diagnostic">Diagnostic</a></p><ul><li><a 
href="#request_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></li>
+-<li><a 
href="#request_diagnostic.getServerPort">diagnostic.getServerPort</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="deprecated">--no-error-notification</dt>
+-    <dd>
+-      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
+-      Disable notifications about errors (see analysis.error). If this
+-      flag is not specified then notifications will be sent for all
+-      errors produced for all files in the actual analysis roots.
+-    </dd>
+-  </dl>
+-  <dl>
+-    <dt class="deprecated">--no-index</dt>
+-    <dd>
+-      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
+-      This flag used to disable the server from generating an index, but now
+-      it has no effect.
+-    </dd>
+-  </dl>
+-  <dl>
+-    <dt class="deprecated">--file-read-mode</dt>
+-    <dd>
+-      <p><b>Deprecated:</b> clients should no longer pass this option in</p>
+-      An enumeration of the ways files can be read from disk. Some clients
+-      normalize end of line characters which would make the file offset and
+-      range information incorrect. The default option is <tt>as-is</tt>, but
+-      can also be set to <tt>normalize-eol-always</tt>. The default option
+-      (<tt>as-is</tt>) reads files as they are on disk. The
+-      <tt>normalize-eol-always</tt> option does the following:
+-      <ul>
+-        <li>'\r\n' is converted to '\n';</li>
+-        <li>'\r' by itself is converted to '\n';</li>
+-        <li>this happens regardless of the OS editor is running on.</li>
+-      </ul>
+-    </dd>
+-  </dl>
+-</blockquote>
+-<h1>Domains</h1>
+-<h2 class="domain"><a name="domain_server">server domain</a></h2>
+-  <p>
+-    The server domain contains API’s related to the execution of
+-    the server.
+-  </p>
+-  
+-  
+-  
+-  
+-  
+-  
+-<h3>Requests</h3><dl><dt class="request"><a 
name="request_server.getVersion">server.getVersion</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "server.getVersion"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>version</b>": String
+-  }
+-}</pre></div>
+-    <p>Return the version number of the analysis server.</p>
+-    
+-  <h4>returns:</h4><dl><dt class="field"><b>version: String</b></dt><dd>
+-        
+-        <p>The version number of the analysis server.</p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_server.shutdown">server.shutdown</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "server.shutdown"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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="request"><a 
name="request_server.setSubscriptions">server.setSubscriptions</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "server.setSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": List&lt;<a 
href="#type_ServerService">ServerService</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a 
href="#type_ServerService">ServerService</a>&gt;</b></dt><dd>
+-        
+-        <p>A list of the services being subscribed to.</p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt 
class="notification"><a 
name="notification_server.connected">server.connected</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "server.connected"
+-  "params": {
+-    "<b>version</b>": String
+-    "<b>pid</b>": int
+-    "<b>sessionId</b>": <span style="color:#999999">optional</span> String
+-  }
+-}</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>version: String</b></dt><dd>
+-        
+-        <p>The version number of the analysis server.</p>
+-      </dd><dt class="field"><b>pid: int</b></dt><dd>
+-        
+-        <p>The process id of the analysis server process.</p>
+-      </dd><dt class="field"><b>sessionId: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>The session id for this session.</p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_server.error">server.error</a></dt><dd><div 
class="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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>isFatal: bool</b></dt><dd>
+-        
+-        <p>
+-          True if the error is a fatal error, meaning that the
+-          server will shutdown automatically after sending this
+-          notification.
+-        </p>
+-      </dd><dt class="field"><b>message: String</b></dt><dd>
+-        
+-        <p>
+-          The error message indicating what kind of error was
+-          encountered.
+-        </p>
+-      </dd><dt class="field"><b>stackTrace: String</b></dt><dd>
+-        
+-        <p>
+-          The stack trace associated with the generation of the
+-          error, used for debugging the server.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_server.status">server.status</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "server.status"
+-  "params": {
+-    "<b>analysis</b>": <span style="color:#999999">optional</span> <a 
href="#type_AnalysisStatus">AnalysisStatus</a>
+-    "<b>pub</b>": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>analysis: <a 
href="#type_AnalysisStatus">AnalysisStatus</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The current status of analysis, including whether
+-          analysis is being performed and if so what is being
+-          analyzed.
+-        </p>
+-      </dd><dt class="field"><b>pub: <a 
href="#type_PubStatus">PubStatus</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The current status of pub execution, indicating whether we are
+-          currently running pub.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class="domain"><a name="domain_analysis">analysis domain</a></h2>
+-  <p>
+-    The analysis domain contains API’s related to the analysis of
+-    files.
+-  </p>
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-<h3>Requests</h3><dl><dt class="request"><a 
name="request_analysis.getErrors">analysis.getErrors</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getErrors"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>errors</b>": List&lt;<a 
href="#type_AnalysisError">AnalysisError</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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file for which errors are being requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>errors: List&lt;<a 
href="#type_AnalysisError">AnalysisError</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The errors associated with the file.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_analysis.getHover">analysis.getHover</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getHover"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>hovers</b>": List&lt;<a 
href="#type_HoverInformation">HoverInformation</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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file in which hover information is being requested.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset for which hover information is being requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>hovers: List&lt;<a 
href="#type_HoverInformation">HoverInformation</a>&gt;</b></dt><dd>
+-        
+-        <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="request"><a 
name="request_analysis.getLibraryDependencies">analysis.getLibraryDependencies</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getLibraryDependencies"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>libraries</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
+-    "<b>packageMap</b>": Map&lt;String, Map&lt;String, List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;&gt;&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return library dependency information for use in client-side indexing
+-      and package URI resolution.
+-    </p>
+-    <p>
+-      Clients that are only using the libraries field should consider using 
the
+-      analyzedFiles notification instead.
+-    </p>
+-    
+-  <h4>returns:</h4><dl><dt class="field"><b>libraries: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the paths of library elements referenced by
+-          files in existing analysis roots.
+-        </p>
+-      </dd><dt class="field"><b>packageMap: Map&lt;String, Map&lt;String, 
List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;&gt;</b></dt><dd>
+-        
+-        <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="request"><a 
name="request_analysis.getNavigation">analysis.getNavigation</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getNavigation"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
+-    "<b>targets</b>": List&lt;<a 
href="#type_NavigationTarget">NavigationTarget</a>&gt;
+-    "<b>regions</b>": List&lt;<a 
href="#type_NavigationRegion">NavigationRegion</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 before
+-      a response could be sent, then an error of type
+-      <tt>CONTENT_MODIFIED</tt> will be generated.
+-    </p>
+-    <p>
+-      If a navigation region overlaps (but extends either before or after)
+-      the given region of the file it will be included in the result. This
+-      means that it is theoretically possible to get the same navigation
+-      region in response to multiple requests. Clients can avoid this by
+-      always choosing a region that starts at the beginning of a line and
+-      ends at the end of a (possibly different) line in the file.
+-    </p>
+-    <p>
+-      If a request is made for a file which does not exist, or
+-      which is not currently subject to analysis (e.g. because it
+-      is not associated with any analysis root specified to
+-      analysis.setAnalysisRoots), an error of type
+-      <tt>GET_NAVIGATION_INVALID_FILE</tt> will be generated.
+-    </p>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file in which navigation information is being requested.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the region for which navigation information is being
+-          requested.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the region for which navigation information is being
+-          requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>files: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the paths of files that are referenced by the navigation
+-          targets.
+-        </p>
+-      </dd><dt class="field"><b>targets: List&lt;<a 
href="#type_NavigationTarget">NavigationTarget</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the navigation targets that are referenced by the
+-          navigation regions.
+-        </p>
+-      </dd><dt class="field"><b>regions: List&lt;<a 
href="#type_NavigationRegion">NavigationRegion</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the navigation regions within the requested region of
+-          the file.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_analysis.getReachableSources">analysis.getReachableSources</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.getReachableSources"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file for which reachable source information is being requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>sources: 
Map&lt;String, List&lt;String&gt;&gt;</b></dt><dd>
+-        
+-        <p>
+-          A mapping from source URIs to directly reachable source URIs. For
+-          example,
+-          a file "foo.dart" that imports "bar.dart" would have the 
corresponding
+-          mapping
+-          { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
+-          further imports
+-          (or exports) there will be a mapping from the URI "file:///bar.dart"
+-          to them.
+-          To check if a specific URI is reachable from a given file, clients 
can
+-          check
+-          for its presence in the resulting key set.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_analysis.reanalyze">analysis.reanalyze</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.reanalyze"
+-  "params": {
+-    "<b>roots</b>": <span style="color:#999999">optional</span> List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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 subscribed
+-      notifications to be re-sent.
+-    </p>
+-    <p>
+-      If no analysis roots are provided, then all current analysis roots
+-      will be re-analyzed. If an empty list of analysis roots is provided,
+-      then nothing will be re-analyzed. If the list contains one or more
+-      paths that are not currently analysis roots, then an error of type
+-      <tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
+-    </p>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>roots: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          A list of the analysis roots that are to be re-analyzed.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_analysis.setAnalysisRoots">analysis.setAnalysisRoots</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.setAnalysisRoots"
+-  "params": {
+-    "<b>included</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
+-    "<b>excluded</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
+-    "<b>packageRoots</b>": <span style="color:#999999">optional</span> 
Map&lt;<a href="#type_FilePath">FilePath</a>, <a 
href="#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-}</pre></div>
+-    <p>
+-      Sets the root paths used to determine which files to analyze. The set
+-      of files to be analyzed are all of the files in one of the root paths
+-      that are not either explicitly or implicitly excluded. A file is
+-      explicitly excluded if it is in one of the excluded paths. A file is
+-      implicitly excluded if it is in a subdirectory of one of the root
+-      paths where the name of the subdirectory starts with a period (that
+-      is, a hidden directory).
+-    </p>
+-    <p>
+-      Note that this request determines the set of requested
+-      analysis roots. The actual set of analysis roots at any
+-      given time is the intersection of this set with the set of
+-      files and directories actually present on the
+-      filesystem. When the filesystem changes, the actual set of
+-      analysis roots is automatically updated, but the set of
+-      requested analysis roots is unchanged. This means that if
+-      the client sets an analysis root before the root becomes
+-      visible to server in the filesystem, there is no error; once
+-      the server sees the root in the filesystem it will start
+-      analyzing it. Similarly, server will stop analyzing files
+-      that are removed from the file system but they will remain
+-      in the set of requested roots.
+-    </p>
+-    <p>
+-      If an included path represents a file, then server will look
+-      in the directory containing the file for a pubspec.yaml
+-      file. If none is found, then the parents of the directory
+-      will be searched until such a file is found or the root of
+-      the file system is reached. If such a file is found, it will
+-      be used to resolve package: URI’s within the file.
+-    </p>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>included: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the files and directories that should be
+-          analyzed.
+-        </p>
+-      </dd><dt class="field"><b>excluded: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the files and directories within the
+-          included directories that should not be analyzed.
+-        </p>
+-      </dd><dt class="field"><b>packageRoots: Map&lt;<a 
href="#type_FilePath">FilePath</a>, <a 
href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="request"><a 
name="request_analysis.setGeneralSubscriptions">analysis.setGeneralSubscriptions</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.setGeneralSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": List&lt;<a 
href="#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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 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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a 
href="#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt;</b></dt><dd>
+-        
+-        <p>A list of the services being subscribed to.</p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_analysis.setPriorityFiles">analysis.setPriorityFiles</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.setPriorityFiles"
+-  "params": {
+-    "<b>files</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>files: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The files that are to be a priority for analysis.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_analysis.setSubscriptions">analysis.setSubscriptions</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.setSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": Map&lt;<a 
href="#type_AnalysisService">AnalysisService</a>, List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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 map
+-      then no files will be subscribed to the service, exactly as if the
+-      service had been included in the map with an explicit empty list of
+-      files.
+-    </p>
+-    <p>
+-      Note that this request determines the set of requested
+-      subscriptions. The actual set of subscriptions at any given
+-      time is the intersection of this set with the set of files
+-      currently subject to analysis. The files currently subject
+-      to analysis are the set of files contained within an actual
+-      analysis root but not excluded, plus all of the files
+-      transitively reachable from those files via import, export
+-      and part directives. (See analysis.setAnalysisRoots for an
+-      explanation of how the actual analysis roots are
+-      determined.) When the actual analysis roots change, the
+-      actual set of subscriptions is automatically updated, but
+-      the set of requested subscriptions is unchanged.
+-    </p>
+-    <p>
+-      If a requested subscription is a directory it is ignored,
+-      but remains in the set of requested subscriptions so that if
+-      it later becomes a file it can be included in the set of
+-      actual subscriptions.
+-    </p>
+-    <p>
+-      It is an error if any of the keys in the map are not valid
+-      services. If there is an error, then the existing
+-      subscriptions will remain unchanged.
+-    </p>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>subscriptions: Map&lt;<a 
href="#type_AnalysisService">AnalysisService</a>, List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;&gt;</b></dt><dd>
+-        
+-        <p>
+-          A table mapping services to a list of the files being
+-          subscribed to the service.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_analysis.updateContent">analysis.updateContent</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.updateContent"
+-  "params": {
+-    "<b>files</b>": Map&lt;<a href="#type_FilePath">FilePath</a>, <a 
href="#type_AddContentOverlay">AddContentOverlay</a> | <a 
href="#type_ChangeContentOverlay">ChangeContentOverlay</a> | <a 
href="#type_RemoveContentOverlay">RemoveContentOverlay</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>files: Map&lt;<a 
href="#type_FilePath">FilePath</a>, <a 
href="#type_AddContentOverlay">AddContentOverlay</a> | <a 
href="#type_ChangeContentOverlay">ChangeContentOverlay</a> | <a 
href="#type_RemoveContentOverlay">RemoveContentOverlay</a>&gt;</b></dt><dd>
+-        
+-        <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="request 
deprecated"><a 
name="request_analysis.updateOptions">analysis.updateOptions</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "analysis.updateOptions"
+-  "params": {
+-    "<b>options</b>": <a href="#type_AnalysisOptions">AnalysisOptions</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>options: <a 
href="#type_AnalysisOptions">AnalysisOptions</a></b></dt><dd>
+-        
+-        <p>
+-          The options that are to be used to control analysis.
+-        </p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt 
class="notification"><a 
name="notification_analysis.analyzedFiles">analysis.analyzedFiles</a></dt><dd><div
 class="box"><pre>notification: {
+-  "event": "analysis.analyzedFiles"
+-  "params": {
+-    "<b>directories</b>": List&lt;<a href="#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 list
+-      of services passed in an analysis.setGeneralSubscriptions request.
+-    </p>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>directories: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the paths of the files that are being analyzed.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.errors">analysis.errors</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.errors"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>errors</b>": List&lt;<a 
href="#type_AnalysisError">AnalysisError</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the errors.
+-        </p>
+-      </dd><dt class="field"><b>errors: List&lt;<a 
href="#type_AnalysisError">AnalysisError</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The errors contained in the file.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.flushResults">analysis.flushResults</a></dt><dd><div
 class="box"><pre>notification: {
+-  "event": "analysis.flushResults"
+-  "params": {
+-    "<b>files</b>": List&lt;<a href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>files: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The files that are no longer being analyzed.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.folding">analysis.folding</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.folding"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>regions</b>": List&lt;<a 
href="#type_FoldingRegion">FoldingRegion</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the folding regions.
+-        </p>
+-      </dd><dt class="field"><b>regions: List&lt;<a 
href="#type_FoldingRegion">FoldingRegion</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The folding regions contained in the file.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.highlights">analysis.highlights</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.highlights"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>regions</b>": List&lt;<a 
href="#type_HighlightRegion">HighlightRegion</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the highlight regions.
+-        </p>
+-      </dd><dt class="field"><b>regions: List&lt;<a 
href="#type_HighlightRegion">HighlightRegion</a>&gt;</b></dt><dd>
+-        
+-        <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="notification"><a 
name="notification_analysis.implemented">analysis.implemented</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.implemented"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>classes</b>": List&lt;<a 
href="#type_ImplementedClass">ImplementedClass</a>&gt;
+-    "<b>members</b>": List&lt;<a 
href="#type_ImplementedMember">ImplementedMember</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file with which the implementations are associated.
+-        </p>
+-      </dd><dt class="field"><b>classes: List&lt;<a 
href="#type_ImplementedClass">ImplementedClass</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The classes defined in the file that are implemented or extended.
+-        </p>
+-      </dd><dt class="field"><b>members: List&lt;<a 
href="#type_ImplementedMember">ImplementedMember</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The member defined in the file that are implemented or overridden.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.invalidate">analysis.invalidate</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.invalidate"
+-  "params": {
+-    "<b>file</b>": <a href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file whose information has been invalidated.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the invalidated region.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the invalidated region.
+-        </p>
+-      </dd><dt class="field"><b>delta: int</b></dt><dd>
+-        
+-        <p>
+-          The delta to be applied to the offsets in information that follows
+-          the invalidated region in order to update it so that it doesn't
+-          need to be re-requested.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.navigation">analysis.navigation</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.navigation"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>regions</b>": List&lt;<a 
href="#type_NavigationRegion">NavigationRegion</a>&gt;
+-    "<b>targets</b>": List&lt;<a 
href="#type_NavigationTarget">NavigationTarget</a>&gt;
+-    "<b>files</b>": List&lt;<a href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the navigation regions.
+-        </p>
+-      </dd><dt class="field"><b>regions: List&lt;<a 
href="#type_NavigationRegion">NavigationRegion</a>&gt;</b></dt><dd>
+-        
+-        <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="field"><b>targets: List&lt;<a 
href="#type_NavigationTarget">NavigationTarget</a>&gt;</b></dt><dd>
+-        
+-        <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="field"><b>files: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;</b></dt><dd>
+-        
+-        <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="notification"><a 
name="notification_analysis.occurrences">analysis.occurrences</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.occurrences"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>occurrences</b>": List&lt;<a 
href="#type_Occurrences">Occurrences</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file in which the references occur.
+-        </p>
+-      </dd><dt class="field"><b>occurrences: List&lt;<a 
href="#type_Occurrences">Occurrences</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The occurrences of references to elements within the
+-          file.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.outline">analysis.outline</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.outline"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>kind</b>": <a href="#type_FileKind">FileKind</a>
+-    "<b>libraryName</b>": <span style="color:#999999">optional</span> String
+-    "<b>outline</b>": <a href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file with which the outline is associated.
+-        </p>
+-      </dd><dt class="field"><b>kind: <a 
href="#type_FileKind">FileKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of the file.
+-        </p>
+-      </dd><dt class="field"><b>libraryName: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>outline: <a 
href="#type_Outline">Outline</a></b></dt><dd>
+-        
+-        <p>
+-          The outline associated with the file.
+-        </p>
+-      </dd></dl></dd><dt class="notification"><a 
name="notification_analysis.overrides">analysis.overrides</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "analysis.overrides"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>overrides</b>": List&lt;<a href="#type_Override">Override</a>&gt;
+-  }
+-}</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file with which the overrides are associated.
+-        </p>
+-      </dd><dt class="field"><b>overrides: List&lt;<a 
href="#type_Override">Override</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The overrides associated with the file.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class="domain"><a name="domain_completion">completion domain</a></h2>
+-  <p>
+-    The code completion domain contains commands related to
+-    getting code completion suggestions.
+-  </p>
+-  
+-  
+-<h3>Requests</h3><dl><dt class="request"><a 
name="request_completion.getSuggestions">completion.getSuggestions</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "completion.getSuggestions"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href="#type_CompletionId">CompletionId</a>
+-  }
+-}</pre></div>
+-    <p>
+-      Request that completion suggestions for the given offset in
+-      the given file be returned.
+-    </p>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the point at which suggestions are
+-          to be made.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset within the file at which suggestions are to
+-          be made.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a 
href="#type_CompletionId">CompletionId</a></b></dt><dd>
+-        
+-        <p>
+-          The identifier used to associate results with this
+-          completion request.
+-        </p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt 
class="notification"><a 
name="notification_completion.results">completion.results</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "completion.results"
+-  "params": {
+-    "<b>id</b>": <a href="#type_CompletionId">CompletionId</a>
+-    "<b>replacementOffset</b>": int
+-    "<b>replacementLength</b>": int
+-    "<b>results</b>": List&lt;<a 
href="#type_CompletionSuggestion">CompletionSuggestion</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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>id: <a 
href="#type_CompletionId">CompletionId</a></b></dt><dd>
+-        
+-        <p>
+-          The id associated with the completion.
+-        </p>
+-      </dd><dt class="field"><b>replacementOffset: int</b></dt><dd>
+-        
+-        <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="field"><b>replacementLength: int</b></dt><dd>
+-        
+-        <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="field"><b>results: List&lt;<a 
href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;</b></dt><dd>
+-        
+-        <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="field"><b>isLast: bool</b></dt><dd>
+-        
+-        <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="domain"><a name="domain_search">search domain</a></h2>
+-  <p>
+-    The search domain contains commands related to searches that
+-    can be performed against the code base.
+-  </p>
+-  
+-  
+-  
+-  
+-  
+-  
+-<h3>Requests</h3><dl><dt class="request"><a 
name="request_search.findElementReferences">search.findElementReferences</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "search.findElementReferences"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>includePotential</b>": bool
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <span style="color:#999999">optional</span> <a 
href="#type_SearchId">SearchId</a>
+-    "<b>element</b>": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the declaration of or reference to
+-          the element used to define the search.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset within the file of the declaration of or
+-          reference to the element.
+-        </p>
+-      </dd><dt class="field"><b>includePotential: bool</b></dt><dd>
+-        
+-        <p>
+-          True if potential matches are to be included in the
+-          results.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a 
href="#type_SearchId">SearchId</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>element: <a 
href="#type_Element">Element</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="request"><a 
name="request_search.findMemberDeclarations">search.findMemberDeclarations</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "search.findMemberDeclarations"
+-  "params": {
+-    "<b>name</b>": String
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The name of the declarations to be found.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a 
href="#type_SearchId">SearchId</a></b></dt><dd>
+-        
+-        <p>
+-          The identifier used to associate results with this
+-          search request.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_search.findMemberReferences">search.findMemberReferences</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "search.findMemberReferences"
+-  "params": {
+-    "<b>name</b>": String
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The name of the references to be found.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a 
href="#type_SearchId">SearchId</a></b></dt><dd>
+-        
+-        <p>
+-          The identifier used to associate results with this
+-          search request.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_search.findTopLevelDeclarations">search.findTopLevelDeclarations</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "search.findTopLevelDeclarations"
+-  "params": {
+-    "<b>pattern</b>": String
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>pattern: String</b></dt><dd>
+-        
+-        <p>
+-          The regular expression used to match the names of the
+-          declarations to be found.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>id: <a 
href="#type_SearchId">SearchId</a></b></dt><dd>
+-        
+-        <p>
+-          The identifier used to associate results with this
+-          search request.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_search.getTypeHierarchy">search.getTypeHierarchy</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "search.getTypeHierarchy"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>superOnly</b>": <span style="color:#999999">optional</span> bool
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>hierarchyItems</b>": <span style="color:#999999">optional</span> 
List&lt;<a href="#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;
+-  }
+-}</pre></div>
+-    <p>
+-      Return the type hierarchy of the class declared or
+-      referenced at the given location.
+-    </p>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the declaration or reference to the
+-          type for which a hierarchy is being requested.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the name of the type within the file.
+-        </p>
+-      </dd><dt class="field"><b>superOnly: bool<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          True if the client is only requesting superclasses and
+-          interfaces hierarchy.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>hierarchyItems: 
List&lt;<a href="#type_TypeHierarchyItem">TypeHierarchyItem</a>&gt;<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="notification"><a 
name="notification_search.results">search.results</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "search.results"
+-  "params": {
+-    "<b>id</b>": <a href="#type_SearchId">SearchId</a>
+-    "<b>results</b>": List&lt;<a 
href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>id: <a 
href="#type_SearchId">SearchId</a></b></dt><dd>
+-        
+-        <p>
+-          The id associated with the search.
+-        </p>
+-      </dd><dt class="field"><b>results: List&lt;<a 
href="#type_SearchResult">SearchResult</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The search results being reported.
+-        </p>
+-      </dd><dt class="field"><b>isLast: bool</b></dt><dd>
+-        
+-        <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="domain"><a name="domain_edit">edit domain</a></h2>
+-  <p>
+-    The edit domain contains commands related to edits that can be
+-    applied to the code.
+-  </p>
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-<h3>Requests</h3><dl><dt class="request"><a 
name="request_edit.format">edit.format</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "edit.format"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>selectionOffset</b>": int
+-    "<b>selectionLength</b>": int
+-    "<b>lineLength</b>": <span style="color:#999999">optional</span> int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>edits</b>": List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt;
+-    "<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 not
+-      currently subject to analysis (e.g. because it is not associated with
+-      any analysis root specified to analysis.setAnalysisRoots), an error of
+-      type <tt>FORMAT_INVALID_FILE</tt> will be generated. If the source
+-      contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
+-      will be generated.
+-    </p>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the code to be formatted.
+-        </p>
+-      </dd><dt class="field"><b>selectionOffset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the current selection in the file.
+-        </p>
+-      </dd><dt class="field"><b>selectionLength: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the current selection in the file.
+-        </p>
+-      </dd><dt class="field"><b>lineLength: int<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The line length to be used by the formatter.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>edits: List&lt;<a 
href="#type_SourceEdit">SourceEdit</a>&gt;</b></dt><dd>
+-        
+-        <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="field"><b>selectionOffset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the selection after formatting the code.
+-        </p>
+-      </dd><dt class="field"><b>selectionLength: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the selection after formatting the code.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_edit.getAssists">edit.getAssists</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "edit.getAssists"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>assists</b>": List&lt;<a 
href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the code for which assists are being
+-          requested.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the code for which assists are being
+-          requested.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the code for which assists are being
+-          requested.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>assists: List&lt;<a 
href="#type_SourceChange">SourceChange</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The assists that are available at the given location.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_edit.getAvailableRefactorings">edit.getAvailableRefactorings</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "edit.getAvailableRefactorings"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>kinds</b>": List&lt;<a 
href="#type_RefactoringKind">RefactoringKind</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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the code on which the refactoring
+-          would be based.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the code on which the refactoring would be
+-          based.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the code on which the refactoring would be
+-          based.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>kinds: List&lt;<a 
href="#type_RefactoringKind">RefactoringKind</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The kinds of refactorings that are valid for the given
+-          selection.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_edit.getFixes">edit.getFixes</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "edit.getFixes"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>fixes</b>": List&lt;<a 
href="#type_AnalysisErrorFixes">AnalysisErrorFixes</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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the errors for which fixes are being
+-          requested.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset used to select the errors for which fixes
+-          will be returned.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>fixes: List&lt;<a 
href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The fixes that are available for the errors at the given offset.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_edit.getRefactoring">edit.getRefactoring</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "edit.getRefactoring"
+-  "params": {
+-    "<b>kind</b>": <a href="#type_RefactoringKind">RefactoringKind</a>
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>offset</b>": int
+-    "<b>length</b>": int
+-    "<b>validateOnly</b>": bool
+-    "<b>options</b>": <span style="color:#999999">optional</span> <a 
href="#type_RefactoringOptions">RefactoringOptions</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>initialProblems</b>": List&lt;<a 
href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
+-    "<b>optionsProblems</b>": List&lt;<a 
href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
+-    "<b>finalProblems</b>": List&lt;<a 
href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
+-    "<b>feedback</b>": <span style="color:#999999">optional</span> <a 
href="#type_RefactoringFeedback">RefactoringFeedback</a>
+-    "<b>change</b>": <span style="color:#999999">optional</span> <a 
href="#type_SourceChange">SourceChange</a>
+-    "<b>potentialEdits</b>": <span style="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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>kind: <a 
href="#type_RefactoringKind">RefactoringKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of refactoring to be performed.
+-        </p>
+-      </dd><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the code involved in the
+-          refactoring.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the region involved in the refactoring.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the region involved in the refactoring.
+-        </p>
+-      </dd><dt class="field"><b>validateOnly: bool</b></dt><dd>
+-        
+-        <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="field"><b>options: <a 
href="#type_RefactoringOptions">RefactoringOptions</a><span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          Data used to provide values provided by the user. The
+-          structure of the data is dependent on the kind of
+-          refactoring being performed. The data that is expected is
+-          documented in the section titled <a 
href="#refactorings">Refactorings</a>, labeled as
+-          "Options". This field can be omitted if the refactoring
+-          does not require any options or if the values of those
+-          options are not known.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>initialProblems: 
List&lt;<a 
href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
+-        
+-        <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="field"><b>optionsProblems: List&lt;<a 
href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The options validation status, i.e. problems in the given options,
+-          such as light-weight validation of a new name, flags
+-          compatibility, etc.
+-          The array will be empty if there are no known problems.
+-        </p>
+-      </dd><dt class="field"><b>finalProblems: List&lt;<a 
href="#type_RefactoringProblem">RefactoringProblem</a>&gt;</b></dt><dd>
+-        
+-        <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="field"><b>feedback: <a 
href="#type_RefactoringFeedback">RefactoringFeedback</a><span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          Data used to provide feedback to the user. The structure
+-          of the data is dependent on the kind of refactoring
+-          being created. The data that is returned is documented
+-          in the section titled <a href="#refactorings">Refactorings</a>, 
labeled as
+-          "Feedback".
+-        </p>
+-      </dd><dt class="field"><b>change: <a 
href="#type_SourceChange">SourceChange</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>potentialEdits: List&lt;String&gt;<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The ids of source edits that are not known to be valid. An edit is
+-          not known to be valid if there was insufficient type information
+-          for the server to be able to determine whether or not the code
+-          needs to be modified, such as when a member is being renamed and
+-          there is a reference to a member from an unknown type. This field
+-          will be omitted if the change field is omitted or if there are no
+-          potential edits for the refactoring.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_edit.sortMembers">edit.sortMembers</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "edit.sortMembers"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>edit</b>": <a href="#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>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The Dart file to sort.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>edit: <a 
href="#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
+-        
+-        <p>
+-          The file edit that is to be applied to the given file to effect
+-          the sorting.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_edit.organizeDirectives">edit.organizeDirectives</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "edit.organizeDirectives"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>edit</b>": <a href="#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="https://www.dartlang.org/articles/style-guide/";>Dart Style
+-        Guide</a>.
+-    </p>
+-    <p>
+-      If a request is made for a file that does not exist, does not belong
+-      to an analysis root or is not a Dart file,
+-      <tt>FILE_NOT_ANALYZED</tt> will be generated.
+-    </p>
+-    <p>
+-      If directives of the Dart file cannot be organized, for example
+-      because it has scan or parse errors, or by other reasons,
+-      <tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
+-      will provide details about the reason.
+-    </p>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The Dart file to organize directives in.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>edit: <a 
href="#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
+-        
+-        <p>
+-          The file edit that is to be applied to the given file to effect
+-          the organizing.
+-        </p>
+-      </dd></dl></dd></dl>
+-<h2 class="domain"><a name="domain_execution">execution domain</a></h2>
+-  <p>
+-    The execution domain contains commands related to providing an execution
+-    or debugging experience.
+-  </p>
+-  
+-  
+-  
+-  
+-  
+-<h3>Requests</h3><dl><dt class="request"><a 
name="request_execution.createContext">execution.createContext</a></dt><dd><div 
class="box"><pre>request: {
+-  "id": String
+-  "method": "execution.createContext"
+-  "params": {
+-    "<b>contextRoot</b>": <a href="#type_FilePath">FilePath</a>
+-  }
+-}</pre><br><pre>response: {
+-  "<b>id</b>": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>id</b>": <a href="#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, are
+-      responsible for managing the lifetime of execution contexts.
+-    </p>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>contextRoot: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <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="field"><b>id: <a 
href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
+-        
+-        <p>
+-          The identifier used to refer to the execution context that was
+-          created.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_execution.deleteContext">execution.deleteContext</a></dt><dd><div 
class="box"><pre>request: {
+-  "<b>id</b>": String
+-  "method": "execution.deleteContext"
+-  "params": {
+-    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>id: <a 
href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
+-        
+-        <p>
+-          The identifier of the execution context that is to be deleted.
+-        </p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_execution.mapUri">execution.mapUri</a></dt><dd><div 
class="box"><pre>request: {
+-  "<b>id</b>": String
+-  "method": "execution.mapUri"
+-  "params": {
+-    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
+-    "<b>file</b>": <span style="color:#999999">optional</span> <a 
href="#type_FilePath">FilePath</a>
+-    "<b>uri</b>": <span style="color:#999999">optional</span> String
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>file</b>": <span style="color:#999999">optional</span> <a 
href="#type_FilePath">FilePath</a>
+-    "<b>uri</b>": <span style="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</tt>
+-      will be generated. Similarly, if neither field is provided, then an
+-      error of type <tt>INVALID_PARAMETER</tt> will be generated.
+-    </p>
+-    <p>
+-      If the file field is provided and the value is not the path of a file
+-      (either the file does not exist or the path references something other
+-      than a file), then an error of type <tt>INVALID_PARAMETER</tt> will
+-      be generated.
+-    </p>
+-    <p>
+-      If the uri field is provided and the value is not a valid URI or if
+-      the URI references something that is not a file (either a file that
+-      does not exist or something other than a file), then an error of type
+-      <tt>INVALID_PARAMETER</tt> will be generated.
+-    </p>
+-    <p>
+-      If the contextRoot used to create the execution context does not
+-      exist, then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt> will
+-      be generated.
+-    </p>
+-    
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>id: <a 
href="#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
+-        
+-        <p>
+-          The identifier of the execution context in which the URI is to be
+-          mapped.
+-        </p>
+-      </dd><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The path of the file to be mapped into a URI.
+-        </p>
+-      </dd><dt class="field"><b>uri: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The URI to be mapped into a file path.
+-        </p>
+-      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>uri: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="request deprecated"><a 
name="request_execution.setSubscriptions">execution.setSubscriptions</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "execution.setSubscriptions"
+-  "params": {
+-    "<b>subscriptions</b>": List&lt;<a 
href="#type_ExecutionService">ExecutionService</a>&gt;
+-  }
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>subscriptions: List&lt;<a 
href="#type_ExecutionService">ExecutionService</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the services being subscribed to.
+-        </p>
+-      </dd></dl></dd></dl><h3>Notifications</h3><dl><dt 
class="notification"><a 
name="notification_execution.launchData">execution.launchData</a></dt><dd><div 
class="box"><pre>notification: {
+-  "event": "execution.launchData"
+-  "params": {
+-    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+-    "<b>kind</b>": <span style="color:#999999">optional</span> <a 
href="#type_ExecutableKind">ExecutableKind</a>
+-    "<b>referencedFiles</b>": <span style="color:#999999">optional</span> 
List&lt;<a href="#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 services
+-      passed in an <tt>execution.setSubscriptions</tt> request.
+-    </p>
+-    
+-  <h4>parameters:</h4><dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file for which launch data is being provided. This will either
+-          be a Dart library or an HTML file.
+-        </p>
+-      </dd><dt class="field"><b>kind: <a 
href="#type_ExecutableKind">ExecutableKind</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The kind of the executable file. This field is omitted if the file
+-          is not a Dart file.
+-        </p>
+-      </dd><dt class="field"><b>referencedFiles: List&lt;<a 
href="#type_FilePath">FilePath</a>&gt;<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="domain"><a name="domain_diagnostic">diagnostic domain</a></h2>
+-  <p>
+-    The diagnostic domain contains server diagnostics APIs.
+-  </p>
+-  
+-  
+-<h3>Requests</h3><dl><dt class="request"><a 
name="request_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "diagnostic.getDiagnostics"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#type_RequestError">RequestError</a>
+-  "result": {
+-    "<b>contexts</b>": List&lt;<a href="#type_ContextData">ContextData</a>&gt;
+-  }
+-}</pre></div>
+-    <p>Return server diagnostics.</p>
+-    
+-  <h4>returns:</h4><dl><dt class="field"><b>contexts: List&lt;<a 
href="#type_ContextData">ContextData</a>&gt;</b></dt><dd>
+-        
+-        <p>The list of analysis contexts.</p>
+-      </dd></dl></dd><dt class="request"><a 
name="request_diagnostic.getServerPort">diagnostic.getServerPort</a></dt><dd><div
 class="box"><pre>request: {
+-  "id": String
+-  "method": "diagnostic.getServerPort"
+-}</pre><br><pre>response: {
+-  "id": String
+-  "error": <span style="color:#999999">optional</span> <a 
href="#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_OPENED</tt>.
+-    </p>
+-    
+-  <h4>returns:</h4><dl><dt class="field"><b>port: int</b></dt><dd>
+-        
+-        <p>The diagnostic server port.</p>
+-      </dd></dl></dd></dl>
+-
+-
+-
+-  <h2 class="domain"><a name="types">Types</a></h2>
+-  <p>
+-    This section contains descriptions of the data types referenced
+-    in the API’s of the various domains.
+-  </p>
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-<dl><dt class="typeDefinition"><a 
name="type_AddContentOverlay">AddContentOverlay: 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>
+-    
+-  <dl><dt class="field"><b>type = "add"</b></dt><dd>
+-        
+-      </dd><dt class="field"><b>content: String</b></dt><dd>
+-        
+-        <p>
+-          The new content of the file.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_AnalysisError">AnalysisError: object</a></dt><dd>
+-    <p>
+-      An indication of an error, warning, or hint that was produced by the
+-      analysis.
+-    </p>
+-    
+-  <dl><dt class="field"><b>severity: <a 
href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></b></dt><dd>
+-        
+-        <p>
+-          The severity of the error.
+-        </p>
+-      </dd><dt class="field"><b>type: <a 
href="#type_AnalysisErrorType">AnalysisErrorType</a></b></dt><dd>
+-        
+-        <p>
+-          The type of the error.
+-        </p>
+-      </dd><dt class="field"><b>location: <a 
href="#type_Location">Location</a></b></dt><dd>
+-        
+-        <p>
+-          The location associated with the error.
+-        </p>
+-      </dd><dt class="field"><b>message: String</b></dt><dd>
+-        
+-        <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="field"><b>correction: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The correction message to be displayed for this error. The 
correction
+-          message should indicate how the user can fix the error. The field is
+-          omitted if there is no correction message associated with the error
+-          code.
+-        </p>
+-      </dd><dt class="field"><b>code: String</b></dt><dd>
+-        
+-        <p>
+-          The name, as a string, of the error code associated with this error.
+-        </p>
+-      </dd><dt class="field"><b>hasFix: bool<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          A hint to indicate to interested clients that this error has an
+-          associated fix (or fixes). The absence of this field implies there
+-          are not known to be fixes. Note that since the operation to 
calculate
+-          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". Despite 
the
+-          possibility of false negatives, no false positives should be 
returned.
+-          If a client sees this flag set they can proceed with the confidence
+-          that there are in fact associated fixes.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_AnalysisErrorFixes">AnalysisErrorFixes: object</a></dt><dd>
+-    <p>
+-      A list of fixes associated with a specific error.
+-    </p>
+-    
+-  <dl><dt class="field"><b>error: <a 
href="#type_AnalysisError">AnalysisError</a></b></dt><dd>
+-        
+-        <p>
+-          The error with which the fixes are associated.
+-        </p>
+-      </dd><dt class="field"><b>fixes: List&lt;<a 
href="#type_SourceChange">SourceChange</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The fixes associated with the error.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_AnalysisErrorSeverity">AnalysisErrorSeverity: String</a></dt><dd>
+-    <p>
+-      An enumeration of the possible severities of analysis errors.
+-    </p>
+-    
+-  <dl><dt class="value">INFO</dt><dt class="value">WARNING</dt><dt 
class="value">ERROR</dt></dl></dd><dt class="typeDefinition"><a 
name="type_AnalysisErrorType">AnalysisErrorType: String</a></dt><dd>
+-    <p>
+-      An enumeration of the possible types of analysis errors.
+-    </p>
+-    
+-  <dl><dt class="value">CHECKED_MODE_COMPILE_TIME_ERROR</dt><dt 
class="value">COMPILE_TIME_ERROR</dt><dt class="value">HINT</dt><dt 
class="value">LINT</dt><dt class="value">STATIC_TYPE_WARNING</dt><dt 
class="value">STATIC_WARNING</dt><dt class="value">SYNTACTIC_ERROR</dt><dt 
class="value">TODO</dt></dl></dd><dt class="typeDefinition deprecated"><a 
name="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>
+-    
+-  <dl><dt class="field"><b><span class="deprecated">enableAsync</span>: 
bool<span style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b><span 
class="deprecated">enableDeferredLoading</span>: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b><span class="deprecated">enableEnums</span>: 
bool<span style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b><span 
class="deprecated">enableNullAwareOperators</span>: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>enableSuperMixins: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          True if the client wants to enable support for the
+-          proposed "less restricted mixins" proposal (DEP 34).
+-        </p>
+-      </dd><dt class="field"><b>generateDart2jsHints: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          True if hints that are specific to dart2js should be
+-          generated. This option is ignored if generateHints is false.
+-        </p>
+-      </dd><dt class="field"><b>generateHints: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          True if hints should be generated as part of generating
+-          errors and warnings.
+-        </p>
+-      </dd><dt class="field"><b>generateLints: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          True if lints should be generated as part of generating
+-          errors and warnings.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_AnalysisService">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>
+-    
+-  <dl><dt class="value">CLOSING_LABELS</dt><dt class="value">FOLDING</dt><dt 
class="value">HIGHLIGHTS</dt><dt class="value">IMPLEMENTED</dt><dt 
class="value">INVALIDATE</dt><dd>
+-        
+-        <p>
+-          This service is not currently implemented and will become a
+-          GeneralAnalysisService in a future release.
+-        </p>
+-      </dd><dt class="value">NAVIGATION</dt><dt 
class="value">OCCURRENCES</dt><dt class="value">OUTLINE</dt><dt 
class="value">OVERRIDES</dt></dl></dd><dt class="typeDefinition"><a 
name="type_AnalysisStatus">AnalysisStatus: object</a></dt><dd>
+-    <p>
+-      An indication of the current state of analysis.
+-    </p>
+-    
+-  <dl><dt class="field"><b>isAnalyzing: bool</b></dt><dd>
+-        
+-        <p>True if analysis is currently being performed.</p>
+-      </dd><dt class="field"><b>analysisTarget: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The name of the current target of analysis. This field is
+-          omitted if analyzing is false.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_ChangeContentOverlay">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 assumption
+-      that all previous edits have been applied.
+-    </p>
+-    <p>
+-      It is an error to use this overlay on a file that does not yet have a 
file
+-      content overlay or that has had its overlay removed via
+-      <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
+-    </p>
+-    <p>
+-      If any of the edits cannot be applied due to its offset or length being
+-      out of range, an <tt>INVALID_OVERLAY_CHANGE</tt> error will be reported.
+-    </p>
+-    
+-  <dl><dt class="field"><b>type = "change"</b></dt><dd>
+-        
+-      </dd><dt class="field"><b>edits: List&lt;<a 
href="#type_SourceEdit">SourceEdit</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The edits to be applied to the file.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_ClosingLabel">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 closing
+-      parenthesis.
+-    </p>
+-    
+-  <dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the construct being labelled.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the whole construct to be labelled.
+-        </p>
+-      </dd><dt class="field"><b>label: String</b></dt><dd>
+-        
+-        <p>
+-          The label associated with this range that should be displayed to the
+-          user.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_CompletionId">CompletionId: String</a></dt><dd>
+-    
+-    <p>
+-      An identifier used to associate completion results with a
+-      completion request.
+-    </p>
+-  </dd><dt class="typeDefinition"><a 
name="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 suggested.
+-    </p>
+-    
+-  <dl><dt class="field"><b>kind: <a 
href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of element being suggested.
+-        </p>
+-      </dd><dt class="field"><b>relevance: int</b></dt><dd>
+-        
+-        <p>
+-          The relevance of this completion suggestion where a higher number
+-          indicates a higher relevance.
+-        </p>
+-      </dd><dt class="field"><b>completion: String</b></dt><dd>
+-        
+-        <p>
+-          The identifier to be inserted if the suggestion is selected. If the
+-          suggestion is for a method or function, the client might want to
+-          additionally insert a template for the parameters. The information
+-          required in order to do so is contained in other fields.
+-        </p>
+-      </dd><dt class="field"><b>selectionOffset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset, relative to the beginning of the completion, of where 
the
+-          selection should be placed after insertion.
+-        </p>
+-      </dd><dt class="field"><b>selectionLength: int</b></dt><dd>
+-        
+-        <p>
+-          The number of characters that should be selected after insertion.
+-        </p>
+-      </dd><dt class="field"><b>isDeprecated: bool</b></dt><dd>
+-        
+-        <p>
+-          True if the suggested element is deprecated.
+-        </p>
+-      </dd><dt class="field"><b>isPotential: bool</b></dt><dd>
+-        
+-        <p>
+-          True if the element is not known to be valid for the target. This
+-          happens if the type of the target is dynamic.
+-        </p>
+-      </dd><dt class="field"><b>docSummary: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          An abbreviated version of the Dartdoc associated with the element
+-          being suggested, This field is omitted if there is no Dartdoc
+-          associated with the element.
+-        </p>
+-      </dd><dt class="field"><b>docComplete: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The Dartdoc associated with the element being suggested. This field 
is
+-          omitted if there is no Dartdoc associated with the element.
+-        </p>
+-      </dd><dt class="field"><b>declaringType: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>defaultArgumentListString: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          A default String for use in generating argument list source contents
+-          on the client side.
+-        </p>
+-      </dd><dt class="field"><b>defaultArgumentListTextRanges: 
List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          Pairs of offsets and lengths describing 'defaultArgumentListString'
+-          text ranges suitable for use by clients to set up linked edits of
+-          default argument source contents. For example, given an argument 
list
+-          string 'x, y', the corresponding text range [0, 1, 3, 1], indicates
+-          two text ranges of length 1, starting at offsets 0 and 3. Clients 
can
+-          use these ranges to treat the 'x' and 'y' values specially for 
linked
+-          edits.
+-        </p>
+-      </dd><dt class="field"><b>element: <a 
href="#type_Element">Element</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          Information about the element reference being suggested.
+-        </p>
+-      </dd><dt class="field"><b>returnType: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The return type of the getter, function or method or the type of the
+-          field being suggested. This field is omitted if the suggested 
element
+-          is not a getter, function or method.
+-        </p>
+-      </dd><dt class="field"><b>parameterNames: List&lt;String&gt;<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The names of the parameters of the function or method being 
suggested.
+-          This field is omitted if the suggested element is not a setter,
+-          function or method.
+-        </p>
+-      </dd><dt class="field"><b>parameterTypes: List&lt;String&gt;<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The types of the parameters of the function or method being 
suggested.
+-          This field is omitted if the parameterNames field is omitted.
+-        </p>
+-      </dd><dt class="field"><b>requiredParameterCount: int<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The number of required parameters for the function or method being
+-          suggested. This field is omitted if the parameterNames field is
+-          omitted.
+-        </p>
+-      </dd><dt class="field"><b>hasNamedParameters: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>parameterName: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The name of the optional parameter being suggested. This field is
+-          omitted if the suggestion is not the addition of an optional 
argument
+-          within an argument list.
+-        </p>
+-      </dd><dt class="field"><b>parameterType: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The type of the options parameter being suggested. This field is
+-          omitted if the parameterName field is omitted.
+-        </p>
+-      </dd><dt class="field"><b>importUri: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The import to be added if the suggestion is out of scope and needs
+-          an import to be added to be in scope.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_CompletionSuggestionKind">CompletionSuggestionKind: 
String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of elements that can be included in a
+-      completion suggestion.
+-    </p>
+-    
+-  <dl><dt class="value">ARGUMENT_LIST</dt><dd>
+-        
+-        <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 defined.
+-        </p>
+-      </dd><dt class="value">IMPORT</dt><dt class="value">IDENTIFIER</dt><dd>
+-        
+-        <p>
+-          The element identifier should be inserted at the completion
+-          location. For example "someMethod" in <tt>import 'myLib.dart' show
+-          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="value">INVOCATION</dt><dd>
+-        
+-        <p>
+-          The element is being invoked at the completion location. For
+-          example, 'someMethod' in <tt>x.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="value">KEYWORD</dt><dd>
+-        
+-        <p>
+-          A keyword is being suggested. For suggestions of this kind, the
+-          completion is the keyword.
+-        </p>
+-      </dd><dt class="value">NAMED_ARGUMENT</dt><dd>
+-        
+-        <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="value">OPTIONAL_ARGUMENT</dt><dt 
class="value">PARAMETER</dt></dl></dd><dt class="typeDefinition"><a 
name="type_ContextData">ContextData: object</a></dt><dd>
+-    <p>
+-      Information about an analysis context.
+-    </p>
+-    
+-  <dl><dt class="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The name of the context.
+-        </p>
+-      </dd><dt class="field"><b>explicitFileCount: int</b></dt><dd>
+-        
+-        <p>
+-          Explicitly analyzed files.
+-        </p>
+-      </dd><dt class="field"><b>implicitFileCount: int</b></dt><dd>
+-        
+-        <p>
+-          Implicitly analyzed files.
+-        </p>
+-      </dd><dt class="field"><b>workItemQueueLength: int</b></dt><dd>
+-        
+-        <p>
+-          The number of work items in the queue.
+-        </p>
+-      </dd><dt class="field"><b>cacheEntryExceptions: 
List&lt;String&gt;</b></dt><dd>
+-        
+-        <p>
+-          Exceptions associated with cache entries.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_Element">Element: object</a></dt><dd>
+-    <p>
+-      Information about an element (something that can be declared in code).
+-    </p>
+-    
+-  <dl><dt class="field"><b>kind: <a 
href="#type_ElementKind">ElementKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of the element.
+-        </p>
+-      </dd><dt class="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The name of the element. This is typically used as the label in the
+-          outline.
+-        </p>
+-      </dd><dt class="field"><b>location: <a 
href="#type_Location">Location</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The location of the name in the declaration of the element.
+-        </p>
+-      </dd><dt class="field"><b>flags: int</b></dt><dd>
+-        
+-        <p>
+-          A bit-map containing the following flags:
+-        </p>
+-        <ul>
+-          <li>
+-            0x01 - set if the element is explicitly or implicitly abstract
+-          </li>
+-          <li>
+-            0x02 - set if the element was declared to be ‘const’
+-          </li>
+-          <li>
+-            0x04 - set if the element was declared to be ‘final’
+-          </li>
+-          <li>
+-            0x08 - set if the element is a static member of a class or is a
+-            top-level function or field
+-          </li>
+-          <li>
+-            0x10 - set if the element is private
+-          </li>
+-          <li>
+-            0x20 - set if the element is deprecated
+-          </li>
+-        </ul>
+-      </dd><dt class="field"><b>parameters: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The parameter list for the element. If the element is not a method 
or
+-          function this field will not be defined. If the element doesn't have
+-          parameters (e.g. getter), this field will not be defined. If the
+-          element has zero parameters, this field will have a value of "()".
+-        </p>
+-      </dd><dt class="field"><b>returnType: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The return type of the element. If the element is not a method or
+-          function this field will not be defined. If the element does not 
have
+-          a declared return type, this field will contain an empty string.
+-        </p>
+-      </dd><dt class="field"><b>typeParameters: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="typeDefinition"><a 
name="type_ElementKind">ElementKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of elements.
+-    </p>
+-    
+-  <dl><dt class="value">CLASS</dt><dt class="value">CLASS_TYPE_ALIAS</dt><dt 
class="value">COMPILATION_UNIT</dt><dt class="value">CONSTRUCTOR</dt><dt 
class="value">CONSTRUCTOR_INVOCATION</dt><dt class="value">ENUM</dt><dt 
class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt 
class="value">FILE</dt><dt class="value">FUNCTION</dt><dt 
class="value">FUNCTION_INVOCATION</dt><dt 
class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt 
class="value">LABEL</dt><dt class="value">LIBRARY</dt><dt 
class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt 
class="value">PARAMETER</dt><dt class="value">PREFIX</dt><dt 
class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt 
class="value">TYPE_PARAMETER</dt><dt class="value">UNIT_TEST_GROUP</dt><dt 
class="value">UNIT_TEST_TEST</dt><dt class="value">UNKNOWN</dt></dl></dd><dt 
class="typeDefinition"><a name="type_ExecutableFile">ExecutableFile: 
object</a></dt><dd>
+-    <p>
+-      A description of an executable file.
+-    </p>
+-    
+-  <dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The path of the executable file.
+-        </p>
+-      </dd><dt class="field"><b>kind: <a 
href="#type_ExecutableKind">ExecutableKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of the executable file.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_ExecutableKind">ExecutableKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of executable files.
+-    </p>
+-    
+-  <dl><dt class="value">CLIENT</dt><dt class="value">EITHER</dt><dt 
class="value">NOT_EXECUTABLE</dt><dt class="value">SERVER</dt></dl></dd><dt 
class="typeDefinition"><a name="type_ExecutionContextId">ExecutionContextId: 
String</a></dt><dd>
+-    
+-    <p>
+-      The identifier for a execution context.
+-    </p>
+-  </dd><dt class="typeDefinition"><a 
name="type_ExecutionService">ExecutionService: String</a></dt><dd>
+-    <p>
+-      An enumeration of the services provided by the execution
+-      domain.
+-    </p>
+-    
+-  <dl><dt class="value">LAUNCH_DATA</dt></dl></dd><dt 
class="typeDefinition"><a name="type_FileKind">FileKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of files.
+-    </p>
+-    
+-  <dl><dt class="value">LIBRARY</dt><dt class="value">PART</dt></dl></dd><dt 
class="typeDefinition"><a name="type_FilePath">FilePath: String</a></dt><dd>
+-    
+-    <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 path 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="typeDefinition"><a name="type_FoldingKind">FoldingKind: 
String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of folding regions.
+-    </p>
+-    
+-  <dl><dt class="value">COMMENT</dt><dt class="value">CLASS_MEMBER</dt><dt 
class="value">DIRECTIVES</dt><dt class="value">DOCUMENTATION_COMMENT</dt><dt 
class="value">TOP_LEVEL_DECLARATION</dt></dl></dd><dt class="typeDefinition"><a 
name="type_FoldingRegion">FoldingRegion: object</a></dt><dd>
+-    <p>
+-      A description of a region that can be folded.
+-    </p>
+-    
+-  <dl><dt class="field"><b>kind: <a 
href="#type_FoldingKind">FoldingKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of the region.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the region to be folded.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the region to be folded.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_GeneralAnalysisService">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>
+-    
+-  <dl><dt class="value">ANALYZED_FILES</dt></dl></dd><dt 
class="typeDefinition"><a name="type_HighlightRegion">HighlightRegion: 
object</a></dt><dd>
+-    <p>
+-      A description of a region that could have special highlighting 
associated
+-      with it.
+-    </p>
+-    
+-  <dl><dt class="field"><b>type: <a 
href="#type_HighlightRegionType">HighlightRegionType</a></b></dt><dd>
+-        
+-        <p>
+-          The type of highlight associated with the region.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the region to be highlighted.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the region to be highlighted.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_HighlightRegionType">HighlightRegionType: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of highlighting that can be applied to 
files.
+-    </p>
+-    
+-  <dl><dt class="value">ANNOTATION</dt><dt class="value">BUILT_IN</dt><dt 
class="value">CLASS</dt><dt class="value">COMMENT_BLOCK</dt><dt 
class="value">COMMENT_DOCUMENTATION</dt><dt 
class="value">COMMENT_END_OF_LINE</dt><dt class="value">CONSTRUCTOR</dt><dt 
class="value">DIRECTIVE</dt><dt class="value">DYNAMIC_TYPE</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">DYNAMIC_LOCAL_VARIABLE_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">DYNAMIC_LOCAL_VARIABLE_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">DYNAMIC_PARAMETER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">DYNAMIC_PARAMETER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt 
class="value">FIELD</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">FIELD_STATIC</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">FUNCTION</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">FUNCTION_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt 
class="value">GETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">IDENTIFIER_DEFAULT</dt><dt 
class="value">IMPORT_PREFIX</dt><dt 
class="value">INSTANCE_FIELD_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INSTANCE_FIELD_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INSTANCE_GETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INSTANCE_GETTER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INSTANCE_METHOD_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INSTANCE_METHOD_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INSTANCE_SETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INSTANCE_SETTER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">INVALID_STRING_ESCAPE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">KEYWORD</dt><dt class="value">LABEL</dt><dt 
class="value">LIBRARY_NAME</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">LITERAL_BOOLEAN</dt><dt 
class="value">LITERAL_DOUBLE</dt><dt class="value">LITERAL_INTEGER</dt><dt 
class="value">LITERAL_LIST</dt><dt class="value">LITERAL_MAP</dt><dt 
class="value">LITERAL_STRING</dt><dt 
class="value">LOCAL_FUNCTION_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">LOCAL_FUNCTION_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">LOCAL_VARIABLE</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">LOCAL_VARIABLE_DECLARATION</dt><dt 
class="value">LOCAL_VARIABLE_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">METHOD</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">METHOD_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">METHOD_DECLARATION_STATIC</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">METHOD_STATIC</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">PARAMETER</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">SETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_VARIABLE</dt><dd>
+-        
+-        <p>Only for version 1 of highlight.</p>
+-      </dd><dt class="value">PARAMETER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">PARAMETER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">STATIC_FIELD_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">STATIC_GETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">STATIC_GETTER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">STATIC_METHOD_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">STATIC_METHOD_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">STATIC_SETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">STATIC_SETTER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_FUNCTION_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_FUNCTION_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_GETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_GETTER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_SETTER_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_SETTER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TOP_LEVEL_VARIABLE_DECLARATION</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">TYPE_NAME_DYNAMIC</dt><dt 
class="value">TYPE_PARAMETER</dt><dt 
class="value">UNRESOLVED_INSTANCE_MEMBER_REFERENCE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd><dt class="value">VALID_STRING_ESCAPE</dt><dd>
+-        
+-        <p>Only for version 2 of highlight.</p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_HoverInformation">HoverInformation: object</a></dt><dd>
+-    <p>
+-      The hover information associated with a specific location.
+-    </p>
+-    
+-  <dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <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="field"><b>length: int</b></dt><dd>
+-        
+-        <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="field"><b>containingLibraryPath: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>containingLibraryName: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>containingClassDescription: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>dartdoc: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>elementDescription: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          A human-readable description of the element being
+-          referenced. This data is omitted if there is no referenced
+-          element.
+-        </p>
+-      </dd><dt class="field"><b>elementKind: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>isDeprecated: bool<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          True if the referenced element is deprecated.
+-        </p>
+-      </dd><dt class="field"><b>parameter: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>propagatedType: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>staticType: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="typeDefinition"><a 
name="type_ImplementedClass">ImplementedClass: object</a></dt><dd>
+-    <p>
+-      A description of a class that is implemented or extended.
+-    </p>
+-    
+-  <dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the name of the implemented class.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the name of the implemented class.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_ImplementedMember">ImplementedMember: object</a></dt><dd>
+-    <p>
+-      A description of a class member that is implemented or overridden.
+-    </p>
+-    
+-  <dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the name of the implemented member.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the name of the implemented member.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_ImportedElements">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>
+-    
+-  <dl><dt class="field"><b>path: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The absolute and normalized path of the file containing the library.
+-        </p>
+-      </dd><dt class="field"><b>prefix: String</b></dt><dd>
+-        
+-        <p>
+-          The prefix that was used when importing the library into the 
original
+-          source.
+-        </p>
+-      </dd><dt class="field"><b>elements: List&lt;String&gt;</b></dt><dd>
+-        
+-        <p>
+-          The names of the elements imported from the library.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_KytheEntry">KytheEntry: object</a></dt><dd>
+-    <p>
+-      This object matches the format and documentation of the Entry object
+-      documented in the
+-      <a href="https://kythe.io/docs/kythe-storage.html#_entry";>Kythe Storage
+-        Model</a>.
+-    </p>
+-    
+-  <dl><dt class="field"><b>source: <a 
href="#type_KytheVName">KytheVName</a></b></dt><dd>
+-        
+-        <p>
+-          The ticket of the source node.
+-        </p>
+-      </dd><dt class="field"><b>kind: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          An edge label. The schema defines which labels are meaningful.
+-        </p>
+-      </dd><dt class="field"><b>target: <a 
href="#type_KytheVName">KytheVName</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The ticket of the target node.
+-        </p>
+-      </dd><dt class="field"><b>fact: String</b></dt><dd>
+-        
+-        <p>
+-          A fact label. The schema defines which fact labels are meaningful.
+-        </p>
+-      </dd><dt class="field"><b>value: List&lt;int&gt;<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The <tt>String</tt> value of the fact.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_KytheVName">KytheVName: object</a></dt><dd>
+-    <p>
+-      This object matches the format and documentation of the Vector-Name 
object
+-      documented in the
+-      <a 
href="https://kythe.io/docs/kythe-storage.html#_a_id_termvname_a_vector_name_strong_vname_strong";>Kythe
+-        Storage Model</a>.
+-    </p>
+-    
+-  <dl><dt class="field"><b>signature: String</b></dt><dd>
+-        
+-        <p>
+-          An opaque signature generated by the analyzer.
+-        </p>
+-      </dd><dt class="field"><b>corpus: String</b></dt><dd>
+-        
+-        <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="field"><b>root: String</b></dt><dd>
+-        
+-        <p>
+-          A corpus-specific root label, typically a directory path or project
+-          identifier, denoting a distinct subset of the corpus. This may also 
be
+-          used to designate virtual collections like generated files.
+-        </p>
+-      </dd><dt class="field"><b>path: String</b></dt><dd>
+-        
+-        <p>
+-          A path-structured label describing the “location” of the named 
object
+-          relative to the corpus and the root.
+-        </p>
+-      </dd><dt class="field"><b>language: String</b></dt><dd>
+-        
+-        <p>
+-          The language this name belongs to.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_LinkedEditGroup">LinkedEditGroup: object</a></dt><dd>
+-    <p>
+-      A collection of positions that should be linked (edited simultaneously)
+-      for the purposes of updating code after a source change. For example, 
if a
+-      set of edits introduced a new variable name, the group would contain all
+-      of the positions of the variable name so that if the client wanted to 
let
+-      the user edit the variable name after the operation, all occurrences of
+-      the name could be edited simultaneously.
+-    </p>
+-    
+-  <dl><dt class="field"><b>positions: List&lt;<a 
href="#type_Position">Position</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The positions of the regions that should be edited simultaneously.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the regions that should be edited simultaneously.
+-        </p>
+-      </dd><dt class="field"><b>suggestions: List&lt;<a 
href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          Pre-computed suggestions for what every region might want to be
+-          changed to.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_LinkedEditSuggestion">LinkedEditSuggestion: object</a></dt><dd>
+-    <p>
+-      A suggestion of a value that could be used to replace all of the linked
+-      edit regions in a <a href="#type_LinkedEditGroup">LinkedEditGroup</a>.
+-    </p>
+-    
+-  <dl><dt class="field"><b>value: String</b></dt><dd>
+-        
+-        <p>
+-          The value that could be used to replace all of the linked edit
+-          regions.
+-        </p>
+-      </dd><dt class="field"><b>kind: <a 
href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of value being proposed.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_LinkedEditSuggestionKind">LinkedEditSuggestionKind: 
String</a></dt><dd>
+-    <p>
+-      An enumeration of the kind of values that can be suggested for a linked
+-      edit.
+-    </p>
+-    
+-  <dl><dt class="value">METHOD</dt><dt class="value">PARAMETER</dt><dt 
class="value">TYPE</dt><dt class="value">VARIABLE</dt></dl></dd><dt 
class="typeDefinition"><a name="type_Location">Location: object</a></dt><dd>
+-    <p>
+-      A location (character range) within a file.
+-    </p>
+-    
+-  <dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the range.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the range.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the range.
+-        </p>
+-      </dd><dt class="field"><b>startLine: int</b></dt><dd>
+-        
+-        <p>
+-          The one-based index of the line containing the first character of 
the
+-          range.
+-        </p>
+-      </dd><dt class="field"><b>startColumn: int</b></dt><dd>
+-        
+-        <p>
+-          The one-based index of the column containing the first character of
+-          the range.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_NavigationRegion">NavigationRegion: object</a></dt><dd>
+-    <p>
+-      A description of a region from which the user can navigate to the
+-      declaration of an element.
+-    </p>
+-    
+-  <dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the region from which the user can navigate.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the region from which the user can navigate.
+-        </p>
+-      </dd><dt class="field"><b>targets: List&lt;int&gt;</b></dt><dd>
+-        
+-        <p>
+-          The indexes of the targets (in the enclosing navigation response) 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="typeDefinition"><a 
name="type_NavigationTarget">NavigationTarget: object</a></dt><dd>
+-    <p>
+-      A description of a target to which the user can navigate.
+-    </p>
+-    
+-  <dl><dt class="field"><b>kind: <a 
href="#type_ElementKind">ElementKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of the element.
+-        </p>
+-      </dd><dt class="field"><b>fileIndex: int</b></dt><dd>
+-        
+-        <p>
+-          The index of the file (in the enclosing navigation response) to
+-          navigate to.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the region to which the user can navigate.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the region to which the user can navigate.
+-        </p>
+-      </dd><dt class="field"><b>startLine: int</b></dt><dd>
+-        
+-        <p>
+-          The one-based index of the line containing the first character of 
the
+-          region.
+-        </p>
+-      </dd><dt class="field"><b>startColumn: int</b></dt><dd>
+-        
+-        <p>
+-          The one-based index of the column containing the first character of
+-          the region.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_Occurrences">Occurrences: object</a></dt><dd>
+-    <p>
+-      A description of the references to a single element within a single 
file.
+-    </p>
+-    
+-  <dl><dt class="field"><b>element: <a 
href="#type_Element">Element</a></b></dt><dd>
+-        
+-        <p>
+-          The element that was referenced.
+-        </p>
+-      </dd><dt class="field"><b>offsets: List&lt;int&gt;</b></dt><dd>
+-        
+-        <p>
+-          The offsets of the name of the referenced element within the file.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the name of the referenced element.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_Outline">Outline: object</a></dt><dd>
+-    <p>
+-      An node in the outline structure of a file.
+-    </p>
+-    
+-  <dl><dt class="field"><b>element: <a 
href="#type_Element">Element</a></b></dt><dd>
+-        
+-        <p>
+-          A description of the element represented by this node.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the first character of the element. This is different
+-          than the offset in the Element, which is the offset of the name of 
the
+-          element. It can be used, for example, to map locations in the file
+-          back to an outline.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the element.
+-        </p>
+-      </dd><dt class="field"><b>children: List&lt;<a 
href="#type_Outline">Outline</a>&gt;<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The children of the node. The field will be omitted if the node has 
no
+-          children.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_OverriddenMember">OverriddenMember: object</a></dt><dd>
+-    <p>
+-      A description of a member that is being overridden.
+-    </p>
+-    
+-  <dl><dt class="field"><b>element: <a 
href="#type_Element">Element</a></b></dt><dd>
+-        
+-        <p>
+-          The element that is being overridden.
+-        </p>
+-      </dd><dt class="field"><b>className: String</b></dt><dd>
+-        
+-        <p>
+-          The name of the class in which the member is defined.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_Override">Override: object</a></dt><dd>
+-    <p>
+-      A description of a member that overrides an inherited member.
+-    </p>
+-    
+-  <dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the name of the overriding member.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the name of the overriding member.
+-        </p>
+-      </dd><dt class="field"><b>superclassMember: <a 
href="#type_OverriddenMember">OverriddenMember</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>interfaceMembers: List&lt;<a 
href="#type_OverriddenMember">OverriddenMember</a>&gt;<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="typeDefinition"><a 
name="type_Position">Position: object</a></dt><dd>
+-    <p>
+-      A position within a file.
+-    </p>
+-    
+-  <dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the position.
+-        </p>
+-      </dd><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the position.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_PostfixTemplateDescriptor">PostfixTemplateDescriptor: 
object</a></dt><dd>
+-    <p>
+-      The description of a postfix completion template.
+-    </p>
+-    
+-  <dl><dt class="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The template name, shown in the UI.
+-        </p>
+-      </dd><dt class="field"><b>key: String</b></dt><dd>
+-        
+-        <p>
+-          The unique template key, not shown in the UI.
+-        </p>
+-      </dd><dt class="field"><b>example: String</b></dt><dd>
+-        
+-        <p>
+-          A short example of the transformation performed when the template is
+-          applied.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_PubStatus">PubStatus: object</a></dt><dd>
+-    <p>
+-      An indication of the current state of pub execution.
+-    </p>
+-    
+-  <dl><dt class="field"><b>isListingPackageDirs: bool</b></dt><dd>
+-        
+-        <p>
+-          True if the server is currently running pub to produce a list of
+-          package directories.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_RefactoringFeedback">RefactoringFeedback: object</a></dt><dd>
+-    <p>
+-      An abstract superclass of all refactoring feedbacks.
+-    </p>
+-    
+-  <dl></dl></dd><dt class="typeDefinition"><a 
name="type_RefactoringKind">RefactoringKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of refactorings that can be created.
+-    </p>
+-    
+-  <dl><dt class="value">CONVERT_GETTER_TO_METHOD</dt><dt 
class="value">CONVERT_METHOD_TO_GETTER</dt><dt 
class="value">EXTRACT_LOCAL_VARIABLE</dt><dt 
class="value">EXTRACT_METHOD</dt><dt 
class="value">INLINE_LOCAL_VARIABLE</dt><dt class="value">INLINE_METHOD</dt><dt 
class="value">MOVE_FILE</dt><dt class="value">RENAME</dt><dt 
class="value">SORT_MEMBERS</dt></dl></dd><dt class="typeDefinition"><a 
name="type_RefactoringMethodParameter">RefactoringMethodParameter: 
object</a></dt><dd>
+-    
+-    <p>
+-      A description of a parameter in a method refactoring.
+-    </p>
+-    
+-  <dl><dt class="field"><b>id: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The unique identifier of the parameter. Clients may omit this field
+-          for the parameters they want to add.
+-        </p>
+-      </dd><dt class="field"><b>kind: <a 
href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of the parameter.
+-        </p>
+-      </dd><dt class="field"><b>type: String</b></dt><dd>
+-        
+-        <p>
+-          The type that should be given to the parameter, or the return type 
of
+-          the parameter's function type.
+-        </p>
+-      </dd><dt class="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The name that should be given to the parameter.
+-        </p>
+-      </dd><dt class="field"><b>parameters: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The parameter list of the parameter's function type. If the 
parameter
+-          is not of a function type, this field will not be defined. If the
+-          function type has zero parameters, this field will have a value of
+-          '()'.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_RefactoringMethodParameterKind">RefactoringMethodParameterKind: 
String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of parameters.
+-    </p>
+-    
+-  <dl><dt class="value">REQUIRED</dt><dt class="value">POSITIONAL</dt><dt 
class="value">NAMED</dt></dl></dd><dt class="typeDefinition"><a 
name="type_RefactoringOptions">RefactoringOptions: object</a></dt><dd>
+-    <p>
+-      An abstract superclass of all refactoring options.
+-    </p>
+-    
+-  <dl></dl></dd><dt class="typeDefinition"><a 
name="type_RefactoringProblem">RefactoringProblem: object</a></dt><dd>
+-    <p>
+-      A description of a problem related to a refactoring.
+-    </p>
+-    
+-  <dl><dt class="field"><b>severity: <a 
href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></b></dt><dd>
+-        
+-        <p>
+-          The severity of the problem being represented.
+-        </p>
+-      </dd><dt class="field"><b>message: String</b></dt><dd>
+-        
+-        <p>
+-          A human-readable description of the problem being represented.
+-        </p>
+-      </dd><dt class="field"><b>location: <a 
href="#type_Location">Location</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The location of the problem being represented. This field is omitted
+-          unless there is a specific location associated with the problem 
(such
+-          as a location where an element being renamed will be shadowed).
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_RefactoringProblemSeverity">RefactoringProblemSeverity: 
String</a></dt><dd>
+-    <p>
+-      An enumeration of the severities of problems that can be returned by the
+-      refactoring requests.
+-    </p>
+-    
+-  <dl><dt class="value">INFO</dt><dd>
+-        
+-        <p>
+-          A minor code problem. No example, because it is not used yet.
+-        </p>
+-      </dd><dt class="value">WARNING</dt><dd>
+-        
+-        <p>
+-          A minor code problem. For example names of local variables should 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 view, 
but
+-          it is nice to warn the user.
+-        </p>
+-      </dd><dt class="value">ERROR</dt><dd>
+-        
+-        <p>
+-          The refactoring technically can be performed, but there is a logical
+-          problem. For example the name of a local variable being extracted
+-          conflicts with another name in the scope, or duplicate parameter 
names
+-          in the method being extracted, or a conflict between a parameter 
name
+-          and a local variable, etc. In some cases the location of the problem
+-          is also provided, so the IDE can show user the location and the
+-          problem, and let the user decide whether they want to perform the
+-          refactoring. For example the name conflict might be expected, and 
the
+-          user wants to fix it afterwards.
+-        </p>
+-      </dd><dt class="value">FATAL</dt><dd>
+-        
+-        <p>
+-          A fatal error, which prevents performing the refactoring. For 
example
+-          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="typeDefinition"><a 
name="type_RemoveContentOverlay">RemoveContentOverlay: object</a></dt><dd>
+-    <p>
+-      A directive to remove an existing file content overlay. After processing
+-      this directive, the file contents will once again be read from the file
+-      system.
+-    </p>
+-    <p>
+-      If this directive is used on a file that doesn't currently have a 
content
+-      overlay, it has no effect.
+-    </p>
+-    
+-  <dl><dt class="field"><b>type = "remove"</b></dt><dd>
+-        
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_RequestError">RequestError: object</a></dt><dd>
+-    <p>
+-      An indication of a problem with the execution of the server,
+-      typically in response to a request.
+-    </p>
+-    
+-  <dl><dt class="field"><b>code: <a 
href="#type_RequestErrorCode">RequestErrorCode</a></b></dt><dd>
+-        
+-        <p>
+-          A code that uniquely identifies the error that occurred.
+-        </p>
+-      </dd><dt class="field"><b>message: String</b></dt><dd>
+-        
+-        <p>
+-          A short description of the error.
+-        </p>
+-      </dd><dt class="field"><b>stackTrace: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The stack trace associated with processing the request,
+-          used for debugging the server.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_RequestErrorCode">RequestErrorCode: String</a></dt><dd>
+-    <p>
+-      An enumeration of the types of errors that can occur in the
+-      execution of the server.
+-    </p>
+-    
+-  <dl><dt class="value">CONTENT_MODIFIED</dt><dd>
+-        
+-        <p>
+-          An "analysis.getErrors" or "analysis.getNavigation" request could
+-          not be satisfied because the content of the file changed before
+-          the requested results could be computed.
+-        </p>
+-      </dd><dt class="value">DEBUG_PORT_COULD_NOT_BE_OPENED</dt><dd>
+-        
+-        <p>
+-          The server was unable to open a port for the diagnostic server.
+-        </p>
+-      </dd><dt class="value">FILE_NOT_ANALYZED</dt><dd>
+-        
+-        <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="value">FORMAT_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "edit.format" request specified a FilePath
+-          which does not match a Dart file in an analysis root.
+-        </p>
+-      </dd><dt class="value">FORMAT_WITH_ERRORS</dt><dd>
+-        
+-        <p>
+-          An "edit.format" request specified a file that contains syntax
+-          errors.
+-        </p>
+-      </dd><dt class="value">GET_ERRORS_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "analysis.getErrors" request specified a FilePath
+-          which does not match a file currently subject to
+-          analysis.
+-        </p>
+-      </dd><dt class="value">GET_IMPORTED_ELEMENTS_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "analysis.getImportedElements" request specified a FilePath that
+-          does not match a file currently subject to analysis.
+-        </p>
+-      </dd><dt class="value">GET_KYTHE_ENTRIES_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "analysis.getKytheEntries" request specified a FilePath that does
+-          not match a file that is currently subject to analysis.
+-        </p>
+-      </dd><dt class="value">GET_NAVIGATION_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "analysis.getNavigation" request specified a FilePath
+-          which does not match a file currently subject to
+-          analysis.
+-        </p>
+-      </dd><dt class="value">GET_REACHABLE_SOURCES_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "analysis.getReachableSources" request specified a FilePath
+-          which does not match a file currently subject to
+-          analysis.
+-        </p>
+-      </dd><dt class="value">IMPORT_ELEMENTS_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "edit.importElements" request specified a FilePath that does not
+-          match a file currently subject to analysis.
+-        </p>
+-      </dd><dt class="value">INVALID_ANALYSIS_ROOT</dt><dd>
+-        
+-        <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="value">INVALID_EXECUTION_CONTEXT</dt><dd>
+-        
+-        <p>
+-          The context root used to create an execution context does not
+-          exist.
+-        </p>
+-      </dd><dt class="value">INVALID_FILE_PATH_FORMAT</dt><dd>
+-        
+-        <p>
+-          The format of the given file path is invalid, e.g. is not
+-          absolute and normalized.
+-        </p>
+-      </dd><dt class="value">INVALID_OVERLAY_CHANGE</dt><dd>
+-        
+-        <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="value">INVALID_PARAMETER</dt><dd>
+-        
+-        <p>
+-          One of the method parameters was invalid.
+-        </p>
+-      </dd><dt class="value">INVALID_REQUEST</dt><dd>
+-        
+-        <p>
+-          A malformed request was received.
+-        </p>
+-      </dd><dt class="value">ORGANIZE_DIRECTIVES_ERROR</dt><dd>
+-        
+-        <p>
+-          An "edit.organizeDirectives" request specified a Dart file that
+-          cannot be analyzed. The reason is described in the message.
+-        </p>
+-      </dd><dt class="value">REFACTORING_REQUEST_CANCELLED</dt><dd>
+-        
+-        <p>
+-          Another refactoring request was received during processing of
+-          this one.
+-        </p>
+-      </dd><dt class="value">SERVER_ALREADY_STARTED</dt><dd>
+-        
+-        <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="value">SERVER_ERROR</dt><dd>
+-        
+-        <p>
+-          An internal error occurred in the analysis server.
+-          Also see the server.error notification.
+-        </p>
+-      </dd><dt class="value">SORT_MEMBERS_INVALID_FILE</dt><dd>
+-        
+-        <p>
+-          An "edit.sortMembers" request specified a FilePath
+-          which does not match a Dart file in an analysis root.
+-        </p>
+-      </dd><dt class="value">SORT_MEMBERS_PARSE_ERRORS</dt><dd>
+-        
+-        <p>
+-          An "edit.sortMembers" request specified a Dart file that has
+-          scan or parse errors.
+-        </p>
+-      </dd><dt class="value">UNANALYZED_PRIORITY_FILES</dt><dd>
+-        
+-        <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>
+-        
+-      </dd><dt class="value">UNKNOWN_REQUEST</dt><dd>
+-        
+-        <p>
+-          A request was received which the analysis server does
+-          not recognize, or cannot handle in its current
+-          configuration.
+-        </p>
+-      </dd><dt class="value">UNKNOWN_SOURCE</dt><dd>
+-        
+-        <p>
+-          The analysis server was requested to perform an action
+-          on a source that does not exist.
+-        </p>
+-      </dd><dt class="value">UNSUPPORTED_FEATURE</dt><dd>
+-        
+-        <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>
+-        
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_SearchId">SearchId: String</a></dt><dd>
+-    
+-    <p>
+-      An identifier used to associate search results with a search
+-      request.
+-    </p>
+-  </dd><dt class="typeDefinition"><a name="type_SearchResult">SearchResult: 
object</a></dt><dd>
+-    <p>
+-      A single result from a search request.
+-    </p>
+-    
+-  <dl><dt class="field"><b>location: <a 
href="#type_Location">Location</a></b></dt><dd>
+-        
+-        <p>
+-          The location of the code that matched the search criteria.
+-        </p>
+-      </dd><dt class="field"><b>kind: <a 
href="#type_SearchResultKind">SearchResultKind</a></b></dt><dd>
+-        
+-        <p>
+-          The kind of element that was found or the kind of
+-          reference that was found.
+-        </p>
+-      </dd><dt class="field"><b>isPotential: bool</b></dt><dd>
+-        
+-        <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="field"><b>path: List&lt;<a 
href="#type_Element">Element</a>&gt;</b></dt><dd>
+-        
+-        <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="typeDefinition"><a 
name="type_SearchResultKind">SearchResultKind: String</a></dt><dd>
+-    <p>
+-      An enumeration of the kinds of search results returned by the
+-      search domain.
+-    </p>
+-    
+-  <dl><dt class="value">DECLARATION</dt><dd>
+-        
+-        <p>
+-          The declaration of an element.
+-        </p>
+-      </dd><dt class="value">INVOCATION</dt><dd>
+-        
+-        <p>
+-          The invocation of a function or method.
+-        </p>
+-      </dd><dt class="value">READ</dt><dd>
+-        
+-        <p>
+-          A reference to a field, parameter or variable where it is being 
read.
+-        </p>
+-      </dd><dt class="value">READ_WRITE</dt><dd>
+-        
+-        <p>
+-          A reference to a field, parameter or variable where it is being read
+-          and written.
+-        </p>
+-      </dd><dt class="value">REFERENCE</dt><dd>
+-        
+-        <p>
+-          A reference to an element.
+-        </p>
+-      </dd><dt class="value">UNKNOWN</dt><dd>
+-        
+-        <p>
+-          Some other kind of search result.
+-        </p>
+-      </dd><dt class="value">WRITE</dt><dd>
+-        
+-        <p>
+-          A reference to a field, parameter or variable where it is being
+-          written.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_ServerService">ServerService: String</a></dt><dd>
+-    <p>
+-      An enumeration of the services provided by the server domain.
+-    </p>
+-    
+-  <dl><dt class="value">STATUS</dt></dl></dd><dt class="typeDefinition"><a 
name="type_SourceChange">SourceChange: object</a></dt><dd>
+-    <p>
+-      A description of a set of edits that implement a single conceptual 
change.
+-    </p>
+-    
+-  <dl><dt class="field"><b>message: String</b></dt><dd>
+-        
+-        <p>
+-          A human-readable description of the change to be applied.
+-        </p>
+-      </dd><dt class="field"><b>edits: List&lt;<a 
href="#type_SourceFileEdit">SourceFileEdit</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the edits used to effect the change, grouped by file.
+-        </p>
+-      </dd><dt class="field"><b>linkedEditGroups: List&lt;<a 
href="#type_LinkedEditGroup">LinkedEditGroup</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the linked editing groups used to customize the changes 
that
+-          were made.
+-        </p>
+-      </dd><dt class="field"><b>selection: <a 
href="#type_Position">Position</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The position that should be selected after the edits have been
+-          applied.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_SourceEdit">SourceEdit: object</a></dt><dd>
+-    <p>
+-      A description of a single change to a single file.
+-    </p>
+-    
+-  <dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset of the region to be modified.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the region to be modified.
+-        </p>
+-      </dd><dt class="field"><b>replacement: String</b></dt><dd>
+-        
+-        <p>
+-          The code that is to replace the specified region in the original 
code.
+-        </p>
+-      </dd><dt class="field"><b>id: String<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <p>
+-          An identifier that uniquely identifies this source edit from other
+-          edits in the same response. This field is omitted unless a 
containing
+-          structure needs to be able to identify the edit for some reason.
+-        </p>
+-        <p>
+-          For example, some refactoring operations can produce edits that 
might
+-          not be appropriate (referred to as potential edits). Such edits will
+-          have an id so that they can be referenced. Edits in the same 
response
+-          that do not need to be referenced will not have an id.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_SourceFileEdit">SourceFileEdit: object</a></dt><dd>
+-    <p>
+-      A description of a set of changes to a single file.
+-    </p>
+-    
+-  <dl><dt class="field"><b>file: <a 
href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The file containing the code to be modified.
+-        </p>
+-      </dd><dt class="field"><b><span class="deprecated">fileStamp</span>: 
long</b></dt><dd>
+-        
+-        <p>
+-          The modification stamp of the file at the moment when the change was
+-          created, in milliseconds since the "Unix epoch". Will be -1 if the
+-          file did not exist and should be created. The client may use this
+-          field to make sure that the file was not changed since then, so it 
is
+-          safe to apply the change.
+-        </p>
+-      </dd><dt class="field"><b>edits: List&lt;<a 
href="#type_SourceEdit">SourceEdit</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          A list of the edits used to effect the change.
+-        </p>
+-      </dd></dl></dd><dt class="typeDefinition"><a 
name="type_TypeHierarchyItem">TypeHierarchyItem: object</a></dt><dd>
+-    <p>
+-      A representation of a class in a type hierarchy.
+-    </p>
+-    
+-  <dl><dt class="field"><b>classElement: <a 
href="#type_Element">Element</a></b></dt><dd>
+-        
+-        <p>
+-          The class element represented by this item.
+-        </p>
+-      </dd><dt class="field"><b>displayName: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>memberElement: <a 
href="#type_Element">Element</a><span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>superclass: int<span style="color:#999999"> 
(optional)</span></b></dt><dd>
+-        
+-        <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="field"><b>interfaces: List&lt;int&gt;</b></dt><dd>
+-        
+-        <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="field"><b>mixins: List&lt;int&gt;</b></dt><dd>
+-        
+-        <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="field"><b>subclasses: List&lt;int&gt;</b></dt><dd>
+-        
+-        <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="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>
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-  
+-<dl><dt class="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="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="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>
+-    
+-    
+-  <h4>Feedback:</h4><dl><dt class="field"><b>coveringExpressionOffsets: 
List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The offsets of the expressions that cover the specified
+-          selection, from the down most to the up most.
+-        </p>
+-      </dd><dt class="field"><b>coveringExpressionLengths: 
List&lt;int&gt;<span style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The lengths of the expressions that cover the specified
+-          selection, from the down most to the up most.
+-        </p>
+-      </dd><dt class="field"><b>names: List&lt;String&gt;</b></dt><dd>
+-        
+-        <p>
+-          The proposed names for the local variable.
+-        </p>
+-      </dd><dt class="field"><b>offsets: List&lt;int&gt;</b></dt><dd>
+-        
+-        <p>
+-          The offsets of the expressions that would be replaced by
+-          a reference to the variable.
+-        </p>
+-      </dd><dt class="field"><b>lengths: List&lt;int&gt;</b></dt><dd>
+-        
+-        <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="field"><b>name: 
String</b></dt><dd>
+-        
+-        <p>
+-          The name that the local variable should be given.
+-        </p>
+-      </dd><dt class="field"><b>extractAll: bool</b></dt><dd>
+-        
+-        <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="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>
+-    
+-    
+-  <h4>Feedback:</h4><dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset to the beginning of the expression or
+-          statements that will be extracted.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the expression or statements that will be
+-          extracted.
+-        </p>
+-      </dd><dt class="field"><b>returnType: String</b></dt><dd>
+-        
+-        <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="field"><b>names: List&lt;String&gt;</b></dt><dd>
+-        
+-        <p>
+-          The proposed names for the method.
+-        </p>
+-      </dd><dt class="field"><b>canCreateGetter: bool</b></dt><dd>
+-        
+-        <p>
+-          True if a getter could be created rather than a method.
+-        </p>
+-      </dd><dt class="field"><b>parameters: List&lt;<a 
href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt;</b></dt><dd>
+-        
+-        <p>
+-          The proposed parameters for the method.
+-        </p>
+-      </dd><dt class="field"><b>offsets: List&lt;int&gt;</b></dt><dd>
+-        
+-        <p>
+-          The offsets of the expressions or statements that would
+-          be replaced by an invocation of the method.
+-        </p>
+-      </dd><dt class="field"><b>lengths: List&lt;int&gt;</b></dt><dd>
+-        
+-        <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="field"><b>returnType: 
String</b></dt><dd>
+-        
+-        <p>
+-          The return type that should be defined for the method.
+-        </p>
+-      </dd><dt class="field"><b>createGetter: bool</b></dt><dd>
+-        
+-        <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="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The name that the method should be given.
+-        </p>
+-      </dd><dt class="field"><b>parameters: List&lt;<a 
href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a>&gt;</b></dt><dd>
+-        
+-        <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="field"><b>extractAll: bool</b></dt><dd>
+-        
+-        <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="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>
+-    
+-  <h4>Feedback:</h4><dl><dt class="field"><b>name: String</b></dt><dd>
+-        
+-        <p>
+-          The name of the variable being inlined.
+-        </p>
+-      </dd><dt class="field"><b>occurrences: int</b></dt><dd>
+-        
+-        <p>
+-          The number of times the variable occurs.
+-        </p>
+-      </dd></dl><h4>Options:</h4><p>none</p></dd><dt 
class="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>
+-    
+-    
+-  <h4>Feedback:</h4><dl><dt class="field"><b>className: String<span 
style="color:#999999"> (optional)</span></b></dt><dd>
+-        
+-        <p>
+-          The name of the class enclosing the method being inlined.
+-          If not a class member is being inlined, this field will be absent.
+-        </p>
+-      </dd><dt class="field"><b>methodName: String</b></dt><dd>
+-        
+-        <p>
+-          The name of the method (or function) being inlined.
+-        </p>
+-      </dd><dt class="field"><b>isDeclaration: bool</b></dt><dd>
+-        
+-        <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="field"><b>deleteSource: 
bool</b></dt><dd>
+-        
+-        <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="field"><b>inlineAll: bool</b></dt><dd>
+-        
+-        <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="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>
+-    
+-  <h4>Feedback:</h4><p>none</p><h4>Options:</h4><dl><dt 
class="field"><b>newFile: <a href="#type_FilePath">FilePath</a></b></dt><dd>
+-        
+-        <p>
+-          The new file path to which the given file is being moved.
+-        </p>
+-      </dd></dl></dd><dt class="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>
+-    
+-    
+-  <h4>Feedback:</h4><dl><dt class="field"><b>offset: int</b></dt><dd>
+-        
+-        <p>
+-          The offset to the beginning of the name selected to be
+-          renamed.
+-        </p>
+-      </dd><dt class="field"><b>length: int</b></dt><dd>
+-        
+-        <p>
+-          The length of the name selected to be renamed.
+-        </p>
+-      </dd><dt class="field"><b>elementKindName: String</b></dt><dd>
+-        
+-        <p>
+-          The human-readable description of the kind of element being
+-          renamed (such as "class" or "function type
+-          alias").
+-        </p>
+-      </dd><dt class="field"><b>oldName: String</b></dt><dd>
+-        
+-        <p>
+-          The old name of the element before the refactoring.
+-        </p>
+-      </dd></dl><h4>Options:</h4><dl><dt class="field"><b>newName: 
String</b></dt><dd>
+-        
+-        <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="domain"><a name="index">Index</a></h2>
+-<h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div 
class="subindex"><h5>Requests</h5><ul><li><a 
href="#request_server.getVersion">getVersion</a></li><li><a 
href="#request_server.shutdown">shutdown</a></li><li><a 
href="#request_server.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div
 class="subindex"><ul><li><a 
href="#notification_server.connected">connected</a></li><li><a 
href="#notification_server.error">error</a></li><li><a 
href="#notification_server.status">status</a></li></ul></div></div><h4>analysis 
(<a href="#domain_analysis">↑</a>)</h4><div 
class="subindex"><h5>Requests</h5><ul><li><a 
href="#request_analysis.getErrors">getErrors</a></li><li><a 
href="#request_analysis.getHover">getHover</a></li><li><a 
href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a
 href="#request_analysis.getNavigation">getNavigation</a></li><li><a 
href="#request_analysis.getReachableSources">getReachableSources</a></li><li><a 
href="#request_analysis.reanalyze">reanalyze</a></li><li><a 
href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a 
href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a
 href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a 
href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a 
href="#request_analysis.updateContent">updateContent</a></li><li><a 
href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div
 class="subindex"><ul><li><a 
href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a 
href="#notification_analysis.closingLabels">closingLabels</a></li><li><a 
href="#notification_analysis.errors">errors</a></li><li><a 
href="#notification_analysis.flushResults">flushResults</a></li><li><a 
href="#notification_analysis.folding">folding</a></li><li><a 
href="#notification_analysis.highlights">highlights</a></li><li><a 
href="#notification_analysis.implemented">implemented</a></li><li><a 
href="#notification_analysis.invalidate">invalidate</a></li><li><a 
href="#notification_analysis.navigation">navigation</a></li><li><a 
href="#notification_analysis.occurrences">occurrences</a></li><li><a 
href="#notification_analysis.outline">outline</a></li><li><a 
href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion
 (<a href="#domain_completion">↑</a>)</h4><div 
class="subindex"><h5>Requests</h5><ul><li><a 
href="#request_completion.getSuggestions">getSuggestions</a></li></ul><h5>Notifications</h5><div
 class="subindex"><ul><li><a 
href="#notification_completion.results">results</a></li></ul></div></div><h4>search
 (<a href="#domain_search">↑</a>)</h4><div 
class="subindex"><h5>Requests</h5><ul><li><a 
href="#request_search.findElementReferences">findElementReferences</a></li><li><a
 
href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a
 
href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a 
href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a
 
href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div
 class="subindex"><ul><li><a 
href="#notification_search.results">results</a></li></ul></div></div><h4>edit 
(<a href="#domain_edit">↑</a>)</h4><div 
class="subindex"><h5>Requests</h5><ul><li><a 
href="#request_edit.format">format</a></li><li><a 
href="#request_edit.getAssists">getAssists</a></li><li><a 
href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a
 href="#request_edit.getFixes">getFixes</a></li><li><a 
href="#request_edit.getRefactoring">getRefactoring</a></li><li><a 
href="#request_edit.sortMembers">sortMembers</a></li><li><a 
href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution
 (<a href="#domain_execution">↑</a>)</h4><div 
class="subindex"><h5>Requests</h5><ul><li><a 
href="#request_execution.createContext">createContext</a></li><li><a 
href="#request_execution.deleteContext">deleteContext</a></li><li><a 
href="#request_execution.mapUri">mapUri</a></li><li><a 
href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div
 class="subindex"><ul><li><a 
href="#notification_execution.launchData">launchData</a></li></ul></div></div><h4>diagnostic
 (<a href="#domain_diagnostic">↑</a>)</h4><div 
class="subindex"><h5>Requests</h5><ul><li><a 
href="#request_diagnostic.getDiagnostics">getDiagnostics</a></li><li><a 
href="#request_diagnostic.getServerPort">getServerPort</a></li></ul></div><h3>Types
 (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a 
href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a 
href="#type_AnalysisError">AnalysisError</a></li><li><a 
href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a 
href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a 
href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a 
href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a 
href="#type_AnalysisService">AnalysisService</a></li><li><a 
href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a 
href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a 
href="#type_ClosingLabel">ClosingLabel</a></li><li><a 
href="#type_CompletionId">CompletionId</a></li><li><a 
href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a 
href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a 
href="#type_ContextData">ContextData</a></li><li><a 
href="#type_Element">Element</a></li><li><a 
href="#type_ElementKind">ElementKind</a></li><li><a 
href="#type_ExecutableFile">ExecutableFile</a></li><li><a 
href="#type_ExecutableKind">ExecutableKind</a></li><li><a 
href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a 
href="#type_ExecutionService">ExecutionService</a></li><li><a 
href="#type_FileKind">FileKind</a></li><li><a 
href="#type_FilePath">FilePath</a></li><li><a 
href="#type_FoldingKind">FoldingKind</a></li><li><a 
href="#type_FoldingRegion">FoldingRegion</a></li><li><a 
href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a 
href="#type_HighlightRegion">HighlightRegion</a></li><li><a 
href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a 
href="#type_HoverInformation">HoverInformation</a></li><li><a 
href="#type_ImplementedClass">ImplementedClass</a></li><li><a 
href="#type_ImplementedMember">ImplementedMember</a></li><li><a 
href="#type_ImportedElements">ImportedElements</a></li><li><a 
href="#type_KytheEntry">KytheEntry</a></li><li><a 
href="#type_KytheVName">KytheVName</a></li><li><a 
href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a 
href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a 
href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a 
href="#type_Location">Location</a></li><li><a 
href="#type_NavigationRegion">NavigationRegion</a></li><li><a 
href="#type_NavigationTarget">NavigationTarget</a></li><li><a 
href="#type_Occurrences">Occurrences</a></li><li><a 
href="#type_Outline">Outline</a></li><li><a 
href="#type_OverriddenMember">OverriddenMember</a></li><li><a 
href="#type_Override">Override</a></li><li><a 
href="#type_Position">Position</a></li><li><a 
href="#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a></li><li><a 
href="#type_PubStatus">PubStatus</a></li><li><a 
href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a 
href="#type_RefactoringKind">RefactoringKind</a></li><li><a 
href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a
 
href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a
 href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a 
href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a 
href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a
 href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a 
href="#type_RequestError">RequestError</a></li><li><a 
href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a 
href="#type_SearchId">SearchId</a></li><li><a 
href="#type_SearchResult">SearchResult</a></li><li><a 
href="#type_SearchResultKind">SearchResultKind</a></li><li><a 
href="#type_ServerService">ServerService</a></li><li><a 
href="#type_SourceChange">SourceChange</a></li><li><a 
href="#type_SourceEdit">SourceEdit</a></li><li><a 
href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a 
href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings
 (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a 
href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a
 
href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a
 
href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a
 href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a 
href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a 
href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a 
href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a 
href="#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/occurrences_core.dart 
b/pkg/analysis_server/lib/plugin/analysis/occurrences/occurrences_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 
Occurrences;
+-
+-/**
+- * 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 = const <Assist>[];
+-
+-  /**
+-   * A comparator that can be used to sort assists by their relevance. The 
most
+-   * relevant assists will be sorted before assists with a lower relevance.
+-   */
+-  static final Comparator<Assist> SORT_BY_RELEVANCE =
+-      (Assist firstAssist, Assist secondAssist) =>
+-          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 [change].
+-   */
+-  Assist(this.kind, this.change);
+-
+-  @override
+-  String toString() {
+-    return 'Assist(kind=$kind, change=$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 [DartAssistContributor]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 = context.analysisDriver;
+-    Source source = context.source;
+-    if (!AnalysisEngine.isDartFileName(source.fullName)) {
+-      return Assist.EMPTY_LIST;
+-    }
+-    CompilationUnit unit = (await driver.getResult(source.fullName)).unit;
+-    if (unit == null) {
+-      return Assist.EMPTY_LIST;
+-    }
+-    DartAssistContext dartContext = 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 => _context.analysisDriver;
+-
+-  @override
+-  int get selectionLength => _context.selectionLength;
+-
+-  @override
+-  int get selectionOffset => _context.selectionOffset;
+-
+-  @override
+-  Source get source => _context.source;
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart 
b/pkg/analysis_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 = 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 =
+-      (Fix firstFix, Fix secondFix) =>
+-          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=$kind, change=$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/analysis_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 = context.analysisDriver;
+-    Source source = context.error.source;
+-    if (!AnalysisEngine.isDartFileName(source.fullName)) {
+-      return Fix.EMPTY_LIST;
+-    }
+-    CompilationUnit unit = (await driver.getResult(source.fullName)).unit;
+-    if (unit == null) {
+-      return Fix.EMPTY_LIST;
+-    }
+-    DartFixContext dartContext =
+-        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 = element.displayName;
+-  String elementTypeParameters = _getTypeParametersString(element);
+-  String elementParameters = _getParametersString(element);
+-  String elementReturnType = getReturnTypeString(element);
+-  ElementKind kind = 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 == engine.ElementKind.CLASS) {
+-    return ElementKind.CLASS;
+-  }
+-  if (kind == engine.ElementKind.COMPILATION_UNIT) {
+-    return ElementKind.COMPILATION_UNIT;
+-  }
+-  if (kind == engine.ElementKind.CONSTRUCTOR) {
+-    return ElementKind.CONSTRUCTOR;
+-  }
+-  if (kind == engine.ElementKind.FIELD) {
+-    return ElementKind.FIELD;
+-  }
+-  if (kind == engine.ElementKind.FUNCTION) {
+-    return ElementKind.FUNCTION;
+-  }
+-  if (kind == engine.ElementKind.FUNCTION_TYPE_ALIAS) {
+-    return ElementKind.FUNCTION_TYPE_ALIAS;
+-  }
+-  if (kind == engine.ElementKind.GETTER) {
+-    return ElementKind.GETTER;
+-  }
+-  if (kind == engine.ElementKind.LABEL) {
+-    return ElementKind.LABEL;
+-  }
+-  if (kind == engine.ElementKind.LIBRARY) {
+-    return ElementKind.LIBRARY;
+-  }
+-  if (kind == engine.ElementKind.LOCAL_VARIABLE) {
+-    return ElementKind.LOCAL_VARIABLE;
+-  }
+-  if (kind == engine.ElementKind.METHOD) {
+-    return ElementKind.METHOD;
+-  }
+-  if (kind == engine.ElementKind.PARAMETER) {
+-    return ElementKind.PARAMETER;
+-  }
+-  if (kind == engine.ElementKind.PREFIX) {
+-    return ElementKind.PREFIX;
+-  }
+-  if (kind == engine.ElementKind.SETTER) {
+-    return ElementKind.SETTER;
+-  }
+-  if (kind == engine.ElementKind.TOP_LEVEL_VARIABLE) {
+-    return ElementKind.TOP_LEVEL_VARIABLE;
+-  }
+-  if (kind == 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 = true
+-      // so these additional checks are necessary.
+-      // TODO(danrubel) MyEnum.values is constant, but is a list
+-      // so should it return isEnumConstant = true?
+-      // MyEnum.one.index is final but *not* constant
+-      // so should it return isEnumConstant = true?
+-      // Or should we return ElementKind.ENUM_CONSTANT here
+-      // in either or both of these cases?
+-      element.type != null &&
+-      element.type.element == element.enclosingElement) {
+-    return ElementKind.ENUM_CONSTANT;
+-  }
+-  return convertElementKind(element.kind);
+-}
+-
+-String _getParametersString(engine.Element element) {
+-  // TODO(scheglov) expose the corresponding feature from ExecutableElement
+-  List<engine.ParameterElement> parameters;
+-  if (element is engine.ExecutableElement) {
+-    // valid getters don't have parameters
+-    if (element.kind == engine.ElementKind.GETTER &&
+-        element.parameters.isEmpty) {
+-      return null;
+-    }
+-    parameters = element.parameters;
+-  } else if (element is engine.FunctionTypeAliasElement) {
+-    parameters = element.parameters;
+-  } else {
+-    return null;
+-  }
+-  StringBuffer sb = new StringBuffer();
+-  String closeOptionalString = '';
+-  for (engine.ParameterElement parameter in parameters) {
+-    if (sb.isNotEmpty) {
+-      sb.write(', ');
+-    }
+-    if (closeOptionalString.isEmpty) {
+-      engine.ParameterKind kind = parameter.parameterKind;
+-      if (kind == engine.ParameterKind.NAMED) {
+-        sb.write('{');
+-        closeOptionalString = '}';
+-      }
+-      if (kind == engine.ParameterKind.POSITIONAL) {
+-        sb.write('[');
+-        closeOptionalString = ']';
+-      }
+-    }
+-    parameter.appendToWithoutDelimiters(sb);
+-  }
+-  sb.write(closeOptionalString);
+-  return '(' + sb.toString() + ')';
+-}
+-
+-String _getTypeParametersString(engine.Element element) {
+-  List<engine.TypeParameterElement> typeParameters;
+-  if (element is engine.ClassElement) {
+-    typeParameters = element.typeParameters;
+-  } else if (element is engine.FunctionTypeAliasElement) {
+-    typeParameters = element.typeParameters;
+-  }
+-  if (typeParameters == 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, responses
+- * 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. It 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. This
+-   * will be called before the first [Request].
+-   */
+-  void startup() {}
+-}
+-
+-/**
+- * A notification that can be sent from the server about an event that 
occurred.
+- *
+- * 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 = 'event';
+-
+-  /**
+-   * The name of the JSON attribute containing the result values.
+-   */
+-  static const String PARAMS = '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 will be
+-   * sent to the client to represent this response.
+-   */
+-  Map<String, Object> toJson() {
+-    Map<String, Object> jsonObject = {};
+-    jsonObject[EVENT] = event;
+-    if (params != null) {
+-      jsonObject[PARAMS] = 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 = 'id';
+-
+-  /**
+-   * The name of the JSON attribute containing the name of the request.
+-   */
+-  static const String METHOD = 'method';
+-
+-  /**
+-   * The name of the JSON attribute containing the request parameters.
+-   */
+-  static const String PARAMS = 'params';
+-
+-  /**
+-   * The name of the optional JSON attribute indicating the time (milliseconds
+-   * since epoch) at which the client made the request.
+-   */
+-  static const String CLIENT_REQUEST_TIME = '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 request
+-   * 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 [method]
+-   * 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 = 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 = result[Request.ID];
+-    var method = result[Request.METHOD];
+-    if (id is! String || method is! String) {
+-      return null;
+-    }
+-    var time = result[Request.CLIENT_REQUEST_TIME];
+-    if (time != null && time is! int) {
+-      return null;
+-    }
+-    var params = result[Request.PARAMS];
+-    if (params is Map || params == 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 [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.fromString(String data) {
+-    try {
+-      var result = 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 ==(Object other) {
+-    return other is Request &&
+-        id == other.id &&
+-        method == other.method &&
+-        clientRequestTime == other.clientRequestTime &&
+-        _equalMaps(params, other.params);
+-  }
+-
+-  /**
+-   * Return a table representing the structure of the Json object that will be
+-   * sent to the client to represent this response.
+-   */
+-  Map<String, Object> toJson() {
+-    Map<String, Object> jsonObject = <String, Object>{};
+-    jsonObject[ID] = id;
+-    jsonObject[METHOD] = method;
+-    if (params.isNotEmpty) {
+-      jsonObject[PARAMS] = params;
+-    }
+-    if (clientRequestTime != null) {
+-      jsonObject[CLIENT_REQUEST_TIME] = clientRequestTime;
+-    }
+-    return jsonObject;
+-  }
+-
+-  bool _equalLists(List first, List second) {
+-    if (first == null) {
+-      return second == null;
+-    }
+-    if (second == null) {
+-      return false;
+-    }
+-    int length = first.length;
+-    if (length != second.length) {
+-      return false;
+-    }
+-    for (int i = 0; i < length; i++) {
+-      if (!_equalObjects(first[i], second[i])) {
+-        return false;
+-      }
+-    }
+-    return true;
+-  }
+-
+-  bool _equalMaps(Map first, Map second) {
+-    if (first == null) {
+-      return second == null;
+-    }
+-    if (second == null) {
+-      return false;
+-    }
+-    if (first.length != 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 == null) {
+-      return second == null;
+-    }
+-    if (second == 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 == second;
+-  }
+-}
+-
+-/**
+- * An exception that occurred during the handling of a request that requires
+- * 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 recognized 
by
+-   * this handler, return `null` so that other handlers will be given a chance
+-   * to handle it. Otherwise, return the response that should be passed back 
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] cannot
+-   * be provided at the moment.
+-   */
+-  static final Response DELAYED_RESPONSE = new Response('DELAYED_RESPONSE');
+-
+-  /**
+-   * The name of the JSON attribute containing the id of the request for which
+-   * this is a response.
+-   */
+-  static const String ID = 'id';
+-
+-  /**
+-   * The name of the JSON attribute containing the error message.
+-   */
+-  static const String ERROR = 'error';
+-
+-  /**
+-   * The name of the JSON attribute containing the result values.
+-   */
+-  static const String RESULT = 'result';
+-
+-  /**
+-   * The unique identifier used to identify the request that this response is
+-   * associated with.
+-   */
+-  final String id;
+-
+-  /**
+-   * The error that was caused by attempting to handle the request, or `null` 
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 request
+-   * with the given [id].  If [_result] is provided, it will be used as the
+-   * result; otherwise an empty result will be used.  If an [error] is 
provided
+-   * then the response will represent an error condition.
+-   */
+-  Response(this.id, {Map<String, Object> result, this.error}) : result = 
result;
+-
+-  /**
+-   * Create and return the `DEBUG_PORT_COULD_NOT_BE_OPENED` error response.
+-   */
+-  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_ANALYZED
+-   * 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_ERROR
+-   * error condition.
+-   */
+-  Response.formatWithErrors(Request request)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.FORMAT_WITH_ERRORS,
+-                'Error during `edit.format`: source contains syntax 
errors.'));
+-
+-  /**
+-   * Initialize a newly created instance based on the given JSON data.
+-   */
+-  factory Response.fromJson(Map json) {
+-    try {
+-      Object id = json[Response.ID];
+-      if (id is! String) {
+-        return null;
+-      }
+-      Object error = json[Response.ERROR];
+-      RequestError decodedError;
+-      if (error is Map) {
+-        decodedError = new RequestError.fromJson(
+-            new ResponseDecoder(null), '.error', error);
+-      }
+-      Object result = json[Response.RESULT];
+-      Map<String, Object> decodedResult;
+-      if (result is Map) {
+-        decodedResult = 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_FILE,
+-                '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 
file.'));
+-
+-  /**
+-   * 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 
file.'));
+-
+-  /**
+-   * 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 that 
is
+-   * not in the current list of analysis roots.
+-   */
+-  Response.invalidAnalysisRoot(Request request, String rootPath)
+-      : this(request.id,
+-            error: new RequestError(RequestErrorCode.INVALID_ANALYSIS_ROOT,
+-                "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 root 
does
+-   * not exist.
+-   */
+-  Response.invalidExecutionContext(Request request, String contextId)
+-      : this(request.id,
+-            error: new 
RequestError(RequestErrorCode.INVALID_EXECUTION_CONTEXT,
+-                "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_FORMAT,
+-                '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 expectation)
+-      : 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 error
+-   * condition.
+-   */
+-  factory Response.serverError(Request request, exception, stackTrace) {
+-    RequestError error =
+-        new RequestError(RequestErrorCode.SERVER_ERROR, exception.toString());
+-    if (stackTrace != null) {
+-      error.stackTrace = 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_ERRORS,
+-                'Error during `edit.sortMembers`: file has $numErrors 
scan/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 will be
+-   * sent to the client to represent this response.
+-   */
+-  Map<String, Object> toJson() {
+-    Map<String, Object> jsonObject = <String, Object>{};
+-    jsonObject[ID] = id;
+-    if (error != null) {
+-      jsonObject[ERROR] = error.toJson();
+-    }
+-    if (result != null) {
+-      jsonObject[RESULT] = result;
+-    }
+-    return jsonObject;
+-  }
+-}
+diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart 
b/pkg/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 
manually.
+-// To regenerate the file, use the script
+-// "pkg/analysis_server/tool/spec/generate_files".
+-
+-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES = 'analysis.analyzedFiles';
+-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES = 'directories';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS = 'analysis.closingLabels';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_LABELS = 'labels';
+-const String ANALYSIS_NOTIFICATION_ERRORS = 'analysis.errors';
+-const String ANALYSIS_NOTIFICATION_ERRORS_ERRORS = 'errors';
+-const String ANALYSIS_NOTIFICATION_ERRORS_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS = 'analysis.flushResults';
+-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS_FILES = 'files';
+-const String ANALYSIS_NOTIFICATION_FOLDING = 'analysis.folding';
+-const String ANALYSIS_NOTIFICATION_FOLDING_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_FOLDING_REGIONS = 'regions';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS = 'analysis.highlights';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_REGIONS = 'regions';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED = 'analysis.implemented';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_CLASSES = 'classes';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_MEMBERS = 'members';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE = 'analysis.invalidate';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_DELTA = 'delta';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_LENGTH = 'length';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_OFFSET = 'offset';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION = 'analysis.navigation';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILES = 'files';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_REGIONS = 'regions';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_TARGETS = 'targets';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES = 'analysis.occurrences';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES_OCCURRENCES = 'occurrences';
+-const String ANALYSIS_NOTIFICATION_OUTLINE = 'analysis.outline';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_KIND = 'kind';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_LIBRARY_NAME = 'libraryName';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_OUTLINE = 'outline';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES = 'analysis.overrides';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES_FILE = 'file';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES_OVERRIDES = 'overrides';
+-const String ANALYSIS_REQUEST_GET_ERRORS = 'analysis.getErrors';
+-const String ANALYSIS_REQUEST_GET_ERRORS_FILE = 'file';
+-const String ANALYSIS_REQUEST_GET_HOVER = 'analysis.getHover';
+-const String ANALYSIS_REQUEST_GET_HOVER_FILE = 'file';
+-const String ANALYSIS_REQUEST_GET_HOVER_OFFSET = 'offset';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS =
+-    'analysis.getImportedElements';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_FILE = 'file';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_LENGTH = 'length';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_OFFSET = 'offset';
+-const String ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES =
+-    'analysis.getLibraryDependencies';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION = 'analysis.getNavigation';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_FILE = 'file';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_LENGTH = 'length';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_OFFSET = 'offset';
+-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES =
+-    'analysis.getReachableSources';
+-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES_FILE = 'file';
+-const String ANALYSIS_REQUEST_REANALYZE = 'analysis.reanalyze';
+-const String ANALYSIS_REQUEST_REANALYZE_ROOTS = 'roots';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS = 
'analysis.setAnalysisRoots';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_EXCLUDED = 'excluded';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED = 'included';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_PACKAGE_ROOTS = 
'packageRoots';
+-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS =
+-    'analysis.setGeneralSubscriptions';
+-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS_SUBSCRIPTIONS =
+-    'subscriptions';
+-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES = 
'analysis.setPriorityFiles';
+-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES = 'files';
+-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS = 'analysis.setSubscriptions';
+-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 
'subscriptions';
+-const String ANALYSIS_REQUEST_UPDATE_CONTENT = 'analysis.updateContent';
+-const String ANALYSIS_REQUEST_UPDATE_CONTENT_FILES = 'files';
+-const String ANALYSIS_REQUEST_UPDATE_OPTIONS = 'analysis.updateOptions';
+-const String ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS = 'options';
+-const String ANALYSIS_RESPONSE_GET_ERRORS_ERRORS = 'errors';
+-const String ANALYSIS_RESPONSE_GET_HOVER_HOVERS = 'hovers';
+-const String ANALYSIS_RESPONSE_GET_IMPORTED_ELEMENTS_ELEMENTS = 'elements';
+-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_LIBRARIES = 
'libraries';
+-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_PACKAGE_MAP =
+-    'packageMap';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_FILES = 'files';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_REGIONS = 'regions';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_TARGETS = 'targets';
+-const String ANALYSIS_RESPONSE_GET_REACHABLE_SOURCES_SOURCES = 'sources';
+-const String ANALYTICS_REQUEST_ENABLE = 'analytics.enable';
+-const String ANALYTICS_REQUEST_ENABLE_VALUE = 'value';
+-const String ANALYTICS_REQUEST_IS_ENABLED = 'analytics.isEnabled';
+-const String ANALYTICS_REQUEST_SEND_EVENT = 'analytics.sendEvent';
+-const String ANALYTICS_REQUEST_SEND_EVENT_ACTION = 'action';
+-const String ANALYTICS_REQUEST_SEND_TIMING = 'analytics.sendTiming';
+-const String ANALYTICS_REQUEST_SEND_TIMING_EVENT = 'event';
+-const String ANALYTICS_REQUEST_SEND_TIMING_MILLIS = 'millis';
+-const String ANALYTICS_RESPONSE_IS_ENABLED_ENABLED = 'enabled';
+-const String COMPLETION_NOTIFICATION_RESULTS = 'completion.results';
+-const String COMPLETION_NOTIFICATION_RESULTS_ID = 'id';
+-const String COMPLETION_NOTIFICATION_RESULTS_IS_LAST = 'isLast';
+-const String COMPLETION_NOTIFICATION_RESULTS_REPLACEMENT_LENGTH =
+-    'replacementLength';
+-const String COMPLETION_NOTIFICATION_RESULTS_REPLACEMENT_OFFSET =
+-    'replacementOffset';
+-const String COMPLETION_NOTIFICATION_RESULTS_RESULTS = 'results';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS = 'completion.getSuggestions';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS_FILE = 'file';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS_OFFSET = 'offset';
+-const String COMPLETION_RESPONSE_GET_SUGGESTIONS_ID = 'id';
+-const String DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS = 'diagnostic.getDiagnostics';
+-const String DIAGNOSTIC_REQUEST_GET_SERVER_PORT = 'diagnostic.getServerPort';
+-const String DIAGNOSTIC_RESPONSE_GET_DIAGNOSTICS_CONTEXTS = 'contexts';
+-const String DIAGNOSTIC_RESPONSE_GET_SERVER_PORT_PORT = 'port';
+-const String EDIT_REQUEST_FORMAT = 'edit.format';
+-const String EDIT_REQUEST_FORMAT_FILE = 'file';
+-const String EDIT_REQUEST_FORMAT_LINE_LENGTH = 'lineLength';
+-const String EDIT_REQUEST_FORMAT_SELECTION_LENGTH = 'selectionLength';
+-const String EDIT_REQUEST_FORMAT_SELECTION_OFFSET = 'selectionOffset';
+-const String EDIT_REQUEST_GET_ASSISTS = 'edit.getAssists';
+-const String EDIT_REQUEST_GET_ASSISTS_FILE = 'file';
+-const String EDIT_REQUEST_GET_ASSISTS_LENGTH = 'length';
+-const String EDIT_REQUEST_GET_ASSISTS_OFFSET = 'offset';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS =
+-    'edit.getAvailableRefactorings';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_FILE = 'file';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_LENGTH = 'length';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_OFFSET = 'offset';
+-const String EDIT_REQUEST_GET_FIXES = 'edit.getFixes';
+-const String EDIT_REQUEST_GET_FIXES_FILE = 'file';
+-const String EDIT_REQUEST_GET_FIXES_OFFSET = 'offset';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION = 
'edit.getPostfixCompletion';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_FILE = 'file';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_KEY = 'key';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_OFFSET = 'offset';
+-const String EDIT_REQUEST_GET_REFACTORING = 'edit.getRefactoring';
+-const String EDIT_REQUEST_GET_REFACTORING_FILE = 'file';
+-const String EDIT_REQUEST_GET_REFACTORING_KIND = 'kind';
+-const String EDIT_REQUEST_GET_REFACTORING_LENGTH = 'length';
+-const String EDIT_REQUEST_GET_REFACTORING_OFFSET = 'offset';
+-const String EDIT_REQUEST_GET_REFACTORING_OPTIONS = 'options';
+-const String EDIT_REQUEST_GET_REFACTORING_VALIDATE_ONLY = 'validateOnly';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION =
+-    'edit.getStatementCompletion';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_FILE = 'file';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_OFFSET = 'offset';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS = 'edit.importElements';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS_ELEMENTS = 'elements';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS_FILE = 'file';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE =
+-    'edit.isPostfixCompletionApplicable';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_FILE = 'file';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_KEY = 'key';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_OFFSET = 'offset';
+-const String EDIT_REQUEST_LIST_POSTFIX_COMPLETION_TEMPLATES =
+-    'edit.listPostfixCompletionTemplates';
+-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES = 'edit.organizeDirectives';
+-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES_FILE = 'file';
+-const String EDIT_REQUEST_SORT_MEMBERS = 'edit.sortMembers';
+-const String EDIT_REQUEST_SORT_MEMBERS_FILE = 'file';
+-const String EDIT_RESPONSE_FORMAT_EDITS = 'edits';
+-const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH = 'selectionLength';
+-const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET = 'selectionOffset';
+-const String EDIT_RESPONSE_GET_ASSISTS_ASSISTS = 'assists';
+-const String EDIT_RESPONSE_GET_AVAILABLE_REFACTORINGS_KINDS = 'kinds';
+-const String EDIT_RESPONSE_GET_FIXES_FIXES = 'fixes';
+-const String EDIT_RESPONSE_GET_POSTFIX_COMPLETION_CHANGE = 'change';
+-const String EDIT_RESPONSE_GET_REFACTORING_CHANGE = 'change';
+-const String EDIT_RESPONSE_GET_REFACTORING_FEEDBACK = 'feedback';
+-const String EDIT_RESPONSE_GET_REFACTORING_FINAL_PROBLEMS = 'finalProblems';
+-const String EDIT_RESPONSE_GET_REFACTORING_INITIAL_PROBLEMS = 
'initialProblems';
+-const String EDIT_RESPONSE_GET_REFACTORING_OPTIONS_PROBLEMS = 
'optionsProblems';
+-const String EDIT_RESPONSE_GET_REFACTORING_POTENTIAL_EDITS = 'potentialEdits';
+-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_CHANGE = 'change';
+-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_WHITESPACE_ONLY =
+-    'whitespaceOnly';
+-const String EDIT_RESPONSE_IMPORT_ELEMENTS_EDIT = 'edit';
+-const String EDIT_RESPONSE_IS_POSTFIX_COMPLETION_APPLICABLE_VALUE = 'value';
+-const String EDIT_RESPONSE_LIST_POSTFIX_COMPLETION_TEMPLATES_TEMPLATES =
+-    'templates';
+-const String EDIT_RESPONSE_ORGANIZE_DIRECTIVES_EDIT = 'edit';
+-const String EDIT_RESPONSE_SORT_MEMBERS_EDIT = 'edit';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA = 'execution.launchData';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_FILE = 'file';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_KIND = 'kind';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_REFERENCED_FILES =
+-    'referencedFiles';
+-const String EXECUTION_REQUEST_CREATE_CONTEXT = 'execution.createContext';
+-const String EXECUTION_REQUEST_CREATE_CONTEXT_CONTEXT_ROOT = 'contextRoot';
+-const String EXECUTION_REQUEST_DELETE_CONTEXT = 'execution.deleteContext';
+-const String EXECUTION_REQUEST_DELETE_CONTEXT_ID = 'id';
+-const String EXECUTION_REQUEST_MAP_URI = 'execution.mapUri';
+-const String EXECUTION_REQUEST_MAP_URI_FILE = 'file';
+-const String EXECUTION_REQUEST_MAP_URI_ID = 'id';
+-const String EXECUTION_REQUEST_MAP_URI_URI = 'uri';
+-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS = 
'execution.setSubscriptions';
+-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =
+-    'subscriptions';
+-const String EXECUTION_RESPONSE_CREATE_CONTEXT_ID = 'id';
+-const String EXECUTION_RESPONSE_MAP_URI_FILE = 'file';
+-const String EXECUTION_RESPONSE_MAP_URI_URI = 'uri';
+-const String KYTHE_REQUEST_GET_KYTHE_ENTRIES = 'kythe.getKytheEntries';
+-const String KYTHE_REQUEST_GET_KYTHE_ENTRIES_FILE = 'file';
+-const String KYTHE_RESPONSE_GET_KYTHE_ENTRIES_ENTRIES = 'entries';
+-const String KYTHE_RESPONSE_GET_KYTHE_ENTRIES_FILES = 'files';
+-const String SEARCH_NOTIFICATION_RESULTS = 'search.results';
+-const String SEARCH_NOTIFICATION_RESULTS_ID = 'id';
+-const String SEARCH_NOTIFICATION_RESULTS_IS_LAST = 'isLast';
+-const String SEARCH_NOTIFICATION_RESULTS_RESULTS = 'results';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES =
+-    'search.findElementReferences';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_FILE = 'file';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_INCLUDE_POTENTIAL =
+-    'includePotential';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_OFFSET = 'offset';
+-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS =
+-    'search.findMemberDeclarations';
+-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS_NAME = 'name';
+-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES =
+-    'search.findMemberReferences';
+-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES_NAME = 'name';
+-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS =
+-    'search.findTopLevelDeclarations';
+-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS_PATTERN = 'pattern';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY = 'search.getTypeHierarchy';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_FILE = 'file';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_OFFSET = 'offset';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_SUPER_ONLY = 'superOnly';
+-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ELEMENT = 'element';
+-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ID = 'id';
+-const String SEARCH_RESPONSE_FIND_MEMBER_DECLARATIONS_ID = 'id';
+-const String SEARCH_RESPONSE_FIND_MEMBER_REFERENCES_ID = 'id';
+-const String SEARCH_RESPONSE_FIND_TOP_LEVEL_DECLARATIONS_ID = 'id';
+-const String SEARCH_RESPONSE_GET_TYPE_HIERARCHY_HIERARCHY_ITEMS =
+-    'hierarchyItems';
+-const String SERVER_NOTIFICATION_CONNECTED = 'server.connected';
+-const String SERVER_NOTIFICATION_CONNECTED_PID = 'pid';
+-const String SERVER_NOTIFICATION_CONNECTED_SESSION_ID = 'sessionId';
+-const String SERVER_NOTIFICATION_CONNECTED_VERSION = 'version';
+-const String SERVER_NOTIFICATION_ERROR = 'server.error';
+-const String SERVER_NOTIFICATION_ERROR_IS_FATAL = 'isFatal';
+-const String SERVER_NOTIFICATION_ERROR_MESSAGE = 'message';
+-const String SERVER_NOTIFICATION_ERROR_STACK_TRACE = 'stackTrace';
+-const String SERVER_NOTIFICATION_STATUS = 'server.status';
+-const String SERVER_NOTIFICATION_STATUS_ANALYSIS = 'analysis';
+-const String SERVER_NOTIFICATION_STATUS_PUB = 'pub';
+-const String SERVER_REQUEST_GET_VERSION = 'server.getVersion';
+-const String SERVER_REQUEST_SET_SUBSCRIPTIONS = 'server.setSubscriptions';
+-const String SERVER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
+-const String SERVER_REQUEST_SHUTDOWN = 'server.shutdown';
+-const String SERVER_RESPONSE_GET_VERSION_VERSION = 'version';
+diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart 
b/pkg/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 
manually.
+-// 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 => _directories;
+-
+-  /**
+-   * A list of the paths of the files that are being analyzed.
+-   */
+-  void set directories(List<String> value) {
+-    assert(value != null);
+-    this._directories = value;
+-  }
+-
+-  AnalysisAnalyzedFilesParams(List<String> directories) {
+-    this.directories = directories;
+-  }
+-
+-  factory AnalysisAnalyzedFilesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<String> directories;
+-      if (json.containsKey("directories")) {
+-        directories = 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 = {};
+-    result["directories"] = directories;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.analyzedFiles", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisAnalyzedFilesParams) {
+-      return listEqual(
+-          directories, other.directories, (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file the closing labels relate to.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * Closing labels relevant to the file. Each item represents a useful label
+-   * associated with some range with may be useful to display to the user
+-   * within the editor at the end of the range to indicate what construct is
+-   * closed at that location. Closing labels include constructor/method calls
+-   * and List arguments that span multiple lines. Note that the ranges that 
are
+-   * returned can overlap each other because they may be associated with
+-   * constructs that can be nested.
+-   */
+-  List<ClosingLabel> get labels => _labels;
+-
+-  /**
+-   * Closing labels relevant to the file. Each item represents a useful label
+-   * associated with some range with may be useful to display to the user
+-   * within the editor at the end of the range to indicate what construct is
+-   * closed at that location. Closing labels include constructor/method calls
+-   * and List arguments that span multiple lines. Note that the ranges that 
are
+-   * returned can overlap each other because they may be associated with
+-   * constructs that can be nested.
+-   */
+-  void set labels(List<ClosingLabel> value) {
+-    assert(value != null);
+-    this._labels = value;
+-  }
+-
+-  AnalysisClosingLabelsParams(String file, List<ClosingLabel> labels) {
+-    this.file = file;
+-    this.labels = labels;
+-  }
+-
+-  factory AnalysisClosingLabelsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<ClosingLabel> labels;
+-      if (json.containsKey("labels")) {
+-        labels = jsonDecoder.decodeList(
+-            jsonPath + ".labels",
+-            json["labels"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["file"] = file;
+-    result["labels"] =
+-        labels.map((ClosingLabel value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.closingLabels", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisClosingLabelsParams) {
+-      return file == other.file &&
+-          listEqual(
+-              labels, other.labels, (ClosingLabel a, ClosingLabel b) => a == 
b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 => _error;
+-
+-  /**
+-   * The error with which the fixes are associated.
+-   */
+-  void set error(AnalysisError value) {
+-    assert(value != null);
+-    this._error = value;
+-  }
+-
+-  /**
+-   * The fixes associated with the error.
+-   */
+-  List<SourceChange> get fixes => _fixes;
+-
+-  /**
+-   * The fixes associated with the error.
+-   */
+-  void set fixes(List<SourceChange> value) {
+-    assert(value != null);
+-    this._fixes = value;
+-  }
+-
+-  AnalysisErrorFixes(AnalysisError error, {List<SourceChange> fixes}) {
+-    this.error = error;
+-    if (fixes == null) {
+-      this.fixes = <SourceChange>[];
+-    } else {
+-      this.fixes = fixes;
+-    }
+-  }
+-
+-  factory AnalysisErrorFixes.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      AnalysisError error;
+-      if (json.containsKey("error")) {
+-        error = new AnalysisError.fromJson(
+-            jsonDecoder, jsonPath + ".error", json["error"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "error");
+-      }
+-      List<SourceChange> fixes;
+-      if (json.containsKey("fixes")) {
+-        fixes = jsonDecoder.decodeList(
+-            jsonPath + ".fixes",
+-            json["fixes"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["error"] = error.toJson();
+-    result["fixes"] =
+-        fixes.map((SourceChange value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisErrorFixes) {
+-      return error == other.error &&
+-          listEqual(
+-              fixes, other.fixes, (SourceChange a, SourceChange b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, error.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the errors.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The errors contained in the file.
+-   */
+-  List<AnalysisError> get errors => _errors;
+-
+-  /**
+-   * The errors contained in the file.
+-   */
+-  void set errors(List<AnalysisError> value) {
+-    assert(value != null);
+-    this._errors = value;
+-  }
+-
+-  AnalysisErrorsParams(String file, List<AnalysisError> errors) {
+-    this.file = file;
+-    this.errors = errors;
+-  }
+-
+-  factory AnalysisErrorsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<AnalysisError> errors;
+-      if (json.containsKey("errors")) {
+-        errors = jsonDecoder.decodeList(
+-            jsonPath + ".errors",
+-            json["errors"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["file"] = file;
+-    result["errors"] =
+-        errors.map((AnalysisError value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.errors", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisErrorsParams) {
+-      return file == other.file &&
+-          listEqual(errors, other.errors,
+-              (AnalysisError a, AnalysisError b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 => _files;
+-
+-  /**
+-   * The files that are no longer being analyzed.
+-   */
+-  void set files(List<String> value) {
+-    assert(value != null);
+-    this._files = value;
+-  }
+-
+-  AnalysisFlushResultsParams(List<String> files) {
+-    this.files = files;
+-  }
+-
+-  factory AnalysisFlushResultsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files = 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 = {};
+-    result["files"] = files;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.flushResults", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisFlushResultsParams) {
+-      return listEqual(files, other.files, (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the folding regions.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The folding regions contained in the file.
+-   */
+-  List<FoldingRegion> get regions => _regions;
+-
+-  /**
+-   * The folding regions contained in the file.
+-   */
+-  void set regions(List<FoldingRegion> value) {
+-    assert(value != null);
+-    this._regions = value;
+-  }
+-
+-  AnalysisFoldingParams(String file, List<FoldingRegion> regions) {
+-    this.file = file;
+-    this.regions = regions;
+-  }
+-
+-  factory AnalysisFoldingParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<FoldingRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions = jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =>
+-                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", json);
+-    }
+-  }
+-
+-  factory AnalysisFoldingParams.fromNotification(Notification notification) {
+-    return new AnalysisFoldingParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["regions"] =
+-        regions.map((FoldingRegion value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.folding", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisFoldingParams) {
+-      return file == other.file &&
+-          listEqual(regions, other.regions,
+-              (FoldingRegion a, FoldingRegion b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file for which errors are being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  AnalysisGetErrorsParams(String file) {
+-    this.file = file;
+-  }
+-
+-  factory AnalysisGetErrorsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      return new AnalysisGetErrorsParams(file);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors params", json);
+-    }
+-  }
+-
+-  factory AnalysisGetErrorsParams.fromRequest(Request request) {
+-    return new AnalysisGetErrorsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getErrors", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetErrorsParams) {
+-      return file == other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _errors;
+-
+-  /**
+-   * The errors associated with the file.
+-   */
+-  void set errors(List<AnalysisError> value) {
+-    assert(value != null);
+-    this._errors = value;
+-  }
+-
+-  AnalysisGetErrorsResult(List<AnalysisError> errors) {
+-    this.errors = errors;
+-  }
+-
+-  factory AnalysisGetErrorsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<AnalysisError> errors;
+-      if (json.containsKey("errors")) {
+-        errors = jsonDecoder.decodeList(
+-            jsonPath + ".errors",
+-            json["errors"],
+-            (String jsonPath, Object json) =>
+-                new AnalysisError.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "errors");
+-      }
+-      return new AnalysisGetErrorsResult(errors);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors result", json);
+-    }
+-  }
+-
+-  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 = {};
+-    result["errors"] =
+-        errors.map((AnalysisError value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetErrorsResult) {
+-      return listEqual(
+-          errors, other.errors, (AnalysisError a, AnalysisError b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file in which hover information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset for which hover information is being requested.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset for which hover information is being requested.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  AnalysisGetHoverParams(String file, int offset) {
+-    this.file = file;
+-    this.offset = offset;
+-  }
+-
+-  factory AnalysisGetHoverParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new AnalysisGetHoverParams(file, offset);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover params", json);
+-    }
+-  }
+-
+-  factory AnalysisGetHoverParams.fromRequest(Request request) {
+-    return new AnalysisGetHoverParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getHover", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetHoverParams) {
+-      return file == other.file && offset == other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 contexts
+-   * in conflicting ways (such as a part that is included in multiple
+-   * libraries).
+-   */
+-  List<HoverInformation> get hovers => _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 contexts
+-   * in conflicting ways (such as a part that is included in multiple
+-   * libraries).
+-   */
+-  void set hovers(List<HoverInformation> value) {
+-    assert(value != null);
+-    this._hovers = value;
+-  }
+-
+-  AnalysisGetHoverResult(List<HoverInformation> hovers) {
+-    this.hovers = hovers;
+-  }
+-
+-  factory AnalysisGetHoverResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<HoverInformation> hovers;
+-      if (json.containsKey("hovers")) {
+-        hovers = jsonDecoder.decodeList(
+-            jsonPath + ".hovers",
+-            json["hovers"],
+-            (String jsonPath, Object json) =>
+-                new HoverInformation.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "hovers");
+-      }
+-      return new AnalysisGetHoverResult(hovers);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover result", json);
+-    }
+-  }
+-
+-  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 = {};
+-    result["hovers"] =
+-        hovers.map((HoverInformation value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetHoverResult) {
+-      return listEqual(hovers, other.hovers,
+-          (HoverInformation a, HoverInformation b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file in which import information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the region for which import information is being requested.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the region for which import information is being requested.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the region for which import information is being requested.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the region for which import information is being requested.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  AnalysisGetImportedElementsParams(String file, int offset, int length) {
+-    this.file = file;
+-    this.offset = offset;
+-    this.length = length;
+-  }
+-
+-  factory AnalysisGetImportedElementsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getImportedElements", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetImportedElementsParams) {
+-      return file == other.file &&
+-          offset == other.offset &&
+-          length == other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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 specified
+-   * region of the specified file that come from imported libraries.
+-   */
+-  List<ImportedElements> get elements => _elements;
+-
+-  /**
+-   * The information about the elements that are referenced in the specified
+-   * region of the specified file that come from imported libraries.
+-   */
+-  void set elements(List<ImportedElements> value) {
+-    assert(value != null);
+-    this._elements = value;
+-  }
+-
+-  AnalysisGetImportedElementsResult(List<ImportedElements> elements) {
+-    this.elements = elements;
+-  }
+-
+-  factory AnalysisGetImportedElementsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<ImportedElements> elements;
+-      if (json.containsKey("elements")) {
+-        elements = jsonDecoder.decodeList(
+-            jsonPath + ".elements",
+-            json["elements"],
+-            (String jsonPath, Object json) =>
+-                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 response) {
+-    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 = {};
+-    result["elements"] =
+-        elements.map((ImportedElements value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetImportedElementsResult) {
+-      return listEqual(elements, other.elements,
+-          (ImportedElements a, ImportedElements b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getLibraryDependencies", null);
+-  }
+-
+-  @override
+-  bool operator ==(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 existing
+-   * analysis roots.
+-   */
+-  List<String> get libraries => _libraries;
+-
+-  /**
+-   * A list of the paths of library elements referenced by files in existing
+-   * analysis roots.
+-   */
+-  void set libraries(List<String> value) {
+-    assert(value != null);
+-    this._libraries = value;
+-  }
+-
+-  /**
+-   * A mapping from context source roots to package maps which map package
+-   * names to source directories for use in client-side package URI 
resolution.
+-   */
+-  Map<String, Map<String, List<String>>> get packageMap => _packageMap;
+-
+-  /**
+-   * A mapping from context source roots to package maps which map package
+-   * names to source directories for use in client-side package URI 
resolution.
+-   */
+-  void set packageMap(Map<String, Map<String, List<String>>> value) {
+-    assert(value != null);
+-    this._packageMap = value;
+-  }
+-
+-  AnalysisGetLibraryDependenciesResult(List<String> libraries,
+-      Map<String, Map<String, List<String>>> packageMap) {
+-    this.libraries = libraries;
+-    this.packageMap = packageMap;
+-  }
+-
+-  factory AnalysisGetLibraryDependenciesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<String> libraries;
+-      if (json.containsKey("libraries")) {
+-        libraries = 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 = jsonDecoder.decodeMap(
+-            jsonPath + ".packageMap", json["packageMap"],
+-            valueDecoder: (String jsonPath, Object json) =>
+-                jsonDecoder.decodeMap(jsonPath, json,
+-                    valueDecoder: (String jsonPath, Object json) => 
jsonDecoder
+-                        .decodeList(jsonPath, json, 
jsonDecoder.decodeString)));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "packageMap");
+-      }
+-      return new AnalysisGetLibraryDependenciesResult(libraries, packageMap);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "analysis.getLibraryDependencies result", json);
+-    }
+-  }
+-
+-  factory AnalysisGetLibraryDependenciesResult.fromResponse(Response 
response) {
+-    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 = {};
+-    result["libraries"] = libraries;
+-    result["packageMap"] = packageMap;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetLibraryDependenciesResult) {
+-      return listEqual(
+-              libraries, other.libraries, (String a, String b) => a == b) &&
+-          mapEqual(
+-              packageMap,
+-              other.packageMap,
+-              (Map<String, List<String>> a, Map<String, List<String>> b) =>
+-                  mapEqual(
+-                      a,
+-                      b,
+-                      (List<String> a, List<String> b) =>
+-                          listEqual(a, b, (String a, String b) => a == b)));
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, libraries.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file in which navigation information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the region for which navigation information is being
+-   * requested.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the region for which navigation information is being
+-   * requested.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the region for which navigation information is being
+-   * requested.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the region for which navigation information is being
+-   * requested.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  AnalysisGetNavigationParams(String file, int offset, int length) {
+-    this.file = file;
+-    this.offset = offset;
+-    this.length = length;
+-  }
+-
+-  factory AnalysisGetNavigationParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getNavigation", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetNavigationParams) {
+-      return file == other.file &&
+-          offset == other.offset &&
+-          length == other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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 => _files;
+-
+-  /**
+-   * A list of the paths of files that are referenced by the navigation
+-   * targets.
+-   */
+-  void set files(List<String> value) {
+-    assert(value != null);
+-    this._files = value;
+-  }
+-
+-  /**
+-   * A list of the navigation targets that are referenced by the navigation
+-   * regions.
+-   */
+-  List<NavigationTarget> get targets => _targets;
+-
+-  /**
+-   * A list of the navigation targets that are referenced by the navigation
+-   * regions.
+-   */
+-  void set targets(List<NavigationTarget> value) {
+-    assert(value != null);
+-    this._targets = value;
+-  }
+-
+-  /**
+-   * A list of the navigation regions within the requested region of the file.
+-   */
+-  List<NavigationRegion> get regions => _regions;
+-
+-  /**
+-   * A list of the navigation regions within the requested region of the file.
+-   */
+-  void set regions(List<NavigationRegion> value) {
+-    assert(value != null);
+-    this._regions = value;
+-  }
+-
+-  AnalysisGetNavigationResult(List<String> files,
+-      List<NavigationTarget> targets, List<NavigationRegion> regions) {
+-    this.files = files;
+-    this.targets = targets;
+-    this.regions = regions;
+-  }
+-
+-  factory AnalysisGetNavigationResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files = jsonDecoder.decodeList(
+-            jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "files");
+-      }
+-      List<NavigationTarget> targets;
+-      if (json.containsKey("targets")) {
+-        targets = jsonDecoder.decodeList(
+-            jsonPath + ".targets",
+-            json["targets"],
+-            (String jsonPath, Object json) =>
+-                new NavigationTarget.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "targets");
+-      }
+-      List<NavigationRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions = jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["files"] = files;
+-    result["targets"] =
+-        targets.map((NavigationTarget value) => value.toJson()).toList();
+-    result["regions"] =
+-        regions.map((NavigationRegion value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetNavigationResult) {
+-      return listEqual(files, other.files, (String a, String b) => a == b) &&
+-          listEqual(targets, other.targets,
+-              (NavigationTarget a, NavigationTarget b) => a == b) &&
+-          listEqual(regions, other.regions,
+-              (NavigationRegion a, NavigationRegion b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, files.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, targets.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file for which reachable source information is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  AnalysisGetReachableSourcesParams(String file) {
+-    this.file = file;
+-  }
+-
+-  factory AnalysisGetReachableSourcesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = 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 = {};
+-    result["file"] = file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.getReachableSources", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetReachableSourcesParams) {
+-      return file == other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 
example,
+-   * a file "foo.dart" that imports "bar.dart" would have the corresponding
+-   * mapping { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
+-   * further imports (or exports) there will be a mapping from the URI
+-   * "file:///bar.dart" to them. To check if a specific URI is reachable from 
a
+-   * given file, clients can check for its presence in the resulting key set.
+-   */
+-  Map<String, List<String>> get sources => _sources;
+-
+-  /**
+-   * A mapping from source URIs to directly reachable source URIs. For 
example,
+-   * a file "foo.dart" that imports "bar.dart" would have the corresponding
+-   * mapping { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
+-   * further imports (or exports) there will be a mapping from the URI
+-   * "file:///bar.dart" to them. To check if a specific URI is reachable from 
a
+-   * given file, clients can check for its presence in the resulting key set.
+-   */
+-  void set sources(Map<String, List<String>> value) {
+-    assert(value != null);
+-    this._sources = value;
+-  }
+-
+-  AnalysisGetReachableSourcesResult(Map<String, List<String>> sources) {
+-    this.sources = sources;
+-  }
+-
+-  factory AnalysisGetReachableSourcesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      Map<String, List<String>> sources;
+-      if (json.containsKey("sources")) {
+-        sources = jsonDecoder.decodeMap(jsonPath + ".sources", 
json["sources"],
+-            valueDecoder: (String jsonPath, Object json) => 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 response) {
+-    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 = {};
+-    result["sources"] = sources;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisGetReachableSourcesResult) {
+-      return mapEqual(
+-          sources,
+-          other.sources,
+-          (List<String> a, List<String> b) =>
+-              listEqual(a, b, (String a, String b) => a == b));
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the highlight regions.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  List<HighlightRegion> get regions => _regions;
+-
+-  /**
+-   * 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.
+-   */
+-  void set regions(List<HighlightRegion> value) {
+-    assert(value != null);
+-    this._regions = value;
+-  }
+-
+-  AnalysisHighlightsParams(String file, List<HighlightRegion> regions) {
+-    this.file = file;
+-    this.regions = regions;
+-  }
+-
+-  factory AnalysisHighlightsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<HighlightRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions = jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =>
+-                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 
notification) {
+-    return new AnalysisHighlightsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["regions"] =
+-        regions.map((HighlightRegion value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.highlights", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisHighlightsParams) {
+-      return file == other.file &&
+-          listEqual(regions, other.regions,
+-              (HighlightRegion a, HighlightRegion b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file with which the implementations are associated.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The classes defined in the file that are implemented or extended.
+-   */
+-  List<ImplementedClass> get classes => _classes;
+-
+-  /**
+-   * The classes defined in the file that are implemented or extended.
+-   */
+-  void set classes(List<ImplementedClass> value) {
+-    assert(value != null);
+-    this._classes = value;
+-  }
+-
+-  /**
+-   * The member defined in the file that are implemented or overridden.
+-   */
+-  List<ImplementedMember> get members => _members;
+-
+-  /**
+-   * The member defined in the file that are implemented or overridden.
+-   */
+-  void set members(List<ImplementedMember> value) {
+-    assert(value != null);
+-    this._members = value;
+-  }
+-
+-  AnalysisImplementedParams(String file, List<ImplementedClass> classes,
+-      List<ImplementedMember> members) {
+-    this.file = file;
+-    this.classes = classes;
+-    this.members = members;
+-  }
+-
+-  factory AnalysisImplementedParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<ImplementedClass> classes;
+-      if (json.containsKey("classes")) {
+-        classes = jsonDecoder.decodeList(
+-            jsonPath + ".classes",
+-            json["classes"],
+-            (String jsonPath, Object json) =>
+-                new ImplementedClass.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "classes");
+-      }
+-      List<ImplementedMember> members;
+-      if (json.containsKey("members")) {
+-        members = jsonDecoder.decodeList(
+-            jsonPath + ".members",
+-            json["members"],
+-            (String jsonPath, Object json) =>
+-                new ImplementedMember.fromJson(jsonDecoder, jsonPath, json));
+-      } 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 = {};
+-    result["file"] = file;
+-    result["classes"] =
+-        classes.map((ImplementedClass value) => value.toJson()).toList();
+-    result["members"] =
+-        members.map((ImplementedMember value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.implemented", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisImplementedParams) {
+-      return file == other.file &&
+-          listEqual(classes, other.classes,
+-              (ImplementedClass a, ImplementedClass b) => a == b) &&
+-          listEqual(members, other.members,
+-              (ImplementedMember a, ImplementedMember b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, classes.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file whose information has been invalidated.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the invalidated region.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the invalidated region.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the invalidated region.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the invalidated region.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  /**
+-   * The delta to be applied to the offsets in information that follows the
+-   * invalidated region in order to update it so that it doesn't need to be
+-   * re-requested.
+-   */
+-  int get delta => _delta;
+-
+-  /**
+-   * The delta to be applied to the offsets in information that follows the
+-   * invalidated region in order to update it so that it doesn't need to be
+-   * re-requested.
+-   */
+-  void set delta(int value) {
+-    assert(value != null);
+-    this._delta = value;
+-  }
+-
+-  AnalysisInvalidateParams(String file, int offset, int length, int delta) {
+-    this.file = file;
+-    this.offset = offset;
+-    this.length = length;
+-    this.delta = delta;
+-  }
+-
+-  factory AnalysisInvalidateParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      int delta;
+-      if (json.containsKey("delta")) {
+-        delta = 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 
notification) {
+-    return new AnalysisInvalidateParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    result["delta"] = delta;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.invalidate", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisInvalidateParams) {
+-      return file == other.file &&
+-          offset == other.offset &&
+-          length == other.length &&
+-          delta == other.delta;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the navigation regions.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = 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 returned
+-   * do not overlap other navigation regions.
+-   */
+-  List<NavigationRegion> get regions => _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 returned
+-   * do not overlap other navigation regions.
+-   */
+-  void set regions(List<NavigationRegion> value) {
+-    assert(value != null);
+-    this._regions = value;
+-  }
+-
+-  /**
+-   * The navigation targets referenced in the file. They are referenced by
+-   * NavigationRegions by their index in this array.
+-   */
+-  List<NavigationTarget> get targets => _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 != null);
+-    this._targets = 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 => _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 != null);
+-    this._files = value;
+-  }
+-
+-  AnalysisNavigationParams(String file, List<NavigationRegion> regions,
+-      List<NavigationTarget> targets, List<String> files) {
+-    this.file = file;
+-    this.regions = regions;
+-    this.targets = targets;
+-    this.files = files;
+-  }
+-
+-  factory AnalysisNavigationParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<NavigationRegion> regions;
+-      if (json.containsKey("regions")) {
+-        regions = jsonDecoder.decodeList(
+-            jsonPath + ".regions",
+-            json["regions"],
+-            (String jsonPath, Object json) =>
+-                new NavigationRegion.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "regions");
+-      }
+-      List<NavigationTarget> targets;
+-      if (json.containsKey("targets")) {
+-        targets = jsonDecoder.decodeList(
+-            jsonPath + ".targets",
+-            json["targets"],
+-            (String jsonPath, Object json) =>
+-                new NavigationTarget.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "targets");
+-      }
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files = 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 
notification) {
+-    return new AnalysisNavigationParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["regions"] =
+-        regions.map((NavigationRegion value) => value.toJson()).toList();
+-    result["targets"] =
+-        targets.map((NavigationTarget value) => value.toJson()).toList();
+-    result["files"] = files;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.navigation", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisNavigationParams) {
+-      return file == other.file &&
+-          listEqual(regions, other.regions,
+-              (NavigationRegion a, NavigationRegion b) => a == b) &&
+-          listEqual(targets, other.targets,
+-              (NavigationTarget a, NavigationTarget b) => a == b) &&
+-          listEqual(files, other.files, (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, regions.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, targets.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file in which the references occur.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The occurrences of references to elements within the file.
+-   */
+-  List<Occurrences> get occurrences => _occurrences;
+-
+-  /**
+-   * The occurrences of references to elements within the file.
+-   */
+-  void set occurrences(List<Occurrences> value) {
+-    assert(value != null);
+-    this._occurrences = value;
+-  }
+-
+-  AnalysisOccurrencesParams(String file, List<Occurrences> occurrences) {
+-    this.file = file;
+-    this.occurrences = occurrences;
+-  }
+-
+-  factory AnalysisOccurrencesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<Occurrences> occurrences;
+-      if (json.containsKey("occurrences")) {
+-        occurrences = jsonDecoder.decodeList(
+-            jsonPath + ".occurrences",
+-            json["occurrences"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["file"] = file;
+-    result["occurrences"] =
+-        occurrences.map((Occurrences value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.occurrences", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisOccurrencesParams) {
+-      return file == other.file &&
+-          listEqual(occurrences, other.occurrences,
+-              (Occurrences a, Occurrences b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 
feature.
+-   */
+-  bool get enableAsync => _enableAsync;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed async 
feature.
+-   */
+-  void set enableAsync(bool value) {
+-    this._enableAsync = value;
+-  }
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed deferred
+-   * loading feature.
+-   */
+-  bool get enableDeferredLoading => _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 = value;
+-  }
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed enum feature.
+-   */
+-  bool get enableEnums => _enableEnums;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed enum feature.
+-   */
+-  void set enableEnums(bool value) {
+-    this._enableEnums = value;
+-  }
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed "null aware
+-   * operators" feature.
+-   */
+-  bool get enableNullAwareOperators => _enableNullAwareOperators;
+-
+-  /**
+-   * Deprecated: this feature is always enabled.
+-   *
+-   * True if the client wants to enable support for the proposed "null aware
+-   * operators" feature.
+-   */
+-  void set enableNullAwareOperators(bool value) {
+-    this._enableNullAwareOperators = value;
+-  }
+-
+-  /**
+-   * True if the client wants to enable support for the proposed "less
+-   * restricted mixins" proposal (DEP 34).
+-   */
+-  bool get enableSuperMixins => _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 = value;
+-  }
+-
+-  /**
+-   * True if hints that are specific to dart2js should be generated. This
+-   * option is ignored if generateHints is false.
+-   */
+-  bool get generateDart2jsHints => _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 = value;
+-  }
+-
+-  /**
+-   * True if hints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  bool get generateHints => _generateHints;
+-
+-  /**
+-   * True if hints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  void set generateHints(bool value) {
+-    this._generateHints = value;
+-  }
+-
+-  /**
+-   * True if lints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  bool get generateLints => _generateLints;
+-
+-  /**
+-   * True if lints should be generated as part of generating errors and
+-   * warnings.
+-   */
+-  void set generateLints(bool value) {
+-    this._generateLints = value;
+-  }
+-
+-  AnalysisOptions(
+-      {bool enableAsync,
+-      bool enableDeferredLoading,
+-      bool enableEnums,
+-      bool enableNullAwareOperators,
+-      bool enableSuperMixins,
+-      bool generateDart2jsHints,
+-      bool generateHints,
+-      bool generateLints}) {
+-    this.enableAsync = enableAsync;
+-    this.enableDeferredLoading = enableDeferredLoading;
+-    this.enableEnums = enableEnums;
+-    this.enableNullAwareOperators = enableNullAwareOperators;
+-    this.enableSuperMixins = enableSuperMixins;
+-    this.generateDart2jsHints = generateDart2jsHints;
+-    this.generateHints = generateHints;
+-    this.generateLints = generateLints;
+-  }
+-
+-  factory AnalysisOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool enableAsync;
+-      if (json.containsKey("enableAsync")) {
+-        enableAsync = jsonDecoder.decodeBool(
+-            jsonPath + ".enableAsync", json["enableAsync"]);
+-      }
+-      bool enableDeferredLoading;
+-      if (json.containsKey("enableDeferredLoading")) {
+-        enableDeferredLoading = jsonDecoder.decodeBool(
+-            jsonPath + ".enableDeferredLoading", 
json["enableDeferredLoading"]);
+-      }
+-      bool enableEnums;
+-      if (json.containsKey("enableEnums")) {
+-        enableEnums = jsonDecoder.decodeBool(
+-            jsonPath + ".enableEnums", json["enableEnums"]);
+-      }
+-      bool enableNullAwareOperators;
+-      if (json.containsKey("enableNullAwareOperators")) {
+-        enableNullAwareOperators = jsonDecoder.decodeBool(
+-            jsonPath + ".enableNullAwareOperators",
+-            json["enableNullAwareOperators"]);
+-      }
+-      bool enableSuperMixins;
+-      if (json.containsKey("enableSuperMixins")) {
+-        enableSuperMixins = jsonDecoder.decodeBool(
+-            jsonPath + ".enableSuperMixins", json["enableSuperMixins"]);
+-      }
+-      bool generateDart2jsHints;
+-      if (json.containsKey("generateDart2jsHints")) {
+-        generateDart2jsHints = jsonDecoder.decodeBool(
+-            jsonPath + ".generateDart2jsHints", json["generateDart2jsHints"]);
+-      }
+-      bool generateHints;
+-      if (json.containsKey("generateHints")) {
+-        generateHints = jsonDecoder.decodeBool(
+-            jsonPath + ".generateHints", json["generateHints"]);
+-      }
+-      bool generateLints;
+-      if (json.containsKey("generateLints")) {
+-        generateLints = 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 = {};
+-    if (enableAsync != null) {
+-      result["enableAsync"] = enableAsync;
+-    }
+-    if (enableDeferredLoading != null) {
+-      result["enableDeferredLoading"] = enableDeferredLoading;
+-    }
+-    if (enableEnums != null) {
+-      result["enableEnums"] = enableEnums;
+-    }
+-    if (enableNullAwareOperators != null) {
+-      result["enableNullAwareOperators"] = enableNullAwareOperators;
+-    }
+-    if (enableSuperMixins != null) {
+-      result["enableSuperMixins"] = enableSuperMixins;
+-    }
+-    if (generateDart2jsHints != null) {
+-      result["generateDart2jsHints"] = generateDart2jsHints;
+-    }
+-    if (generateHints != null) {
+-      result["generateHints"] = generateHints;
+-    }
+-    if (generateLints != null) {
+-      result["generateLints"] = generateLints;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisOptions) {
+-      return enableAsync == other.enableAsync &&
+-          enableDeferredLoading == other.enableDeferredLoading &&
+-          enableEnums == other.enableEnums &&
+-          enableNullAwareOperators == other.enableNullAwareOperators &&
+-          enableSuperMixins == other.enableSuperMixins &&
+-          generateDart2jsHints == other.generateDart2jsHints &&
+-          generateHints == other.generateHints &&
+-          generateLints == other.generateLints;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, enableAsync.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, enableDeferredLoading.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, enableEnums.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, enableNullAwareOperators.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, enableSuperMixins.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, generateDart2jsHints.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, generateHints.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file with which the outline is associated.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The kind of the file.
+-   */
+-  FileKind get kind => _kind;
+-
+-  /**
+-   * The kind of the file.
+-   */
+-  void set kind(FileKind value) {
+-    assert(value != null);
+-    this._kind = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get libraryName => _libraryName;
+-
+-  /**
+-   * 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.
+-   */
+-  void set libraryName(String value) {
+-    this._libraryName = value;
+-  }
+-
+-  /**
+-   * The outline associated with the file.
+-   */
+-  Outline get outline => _outline;
+-
+-  /**
+-   * The outline associated with the file.
+-   */
+-  void set outline(Outline value) {
+-    assert(value != null);
+-    this._outline = value;
+-  }
+-
+-  AnalysisOutlineParams(String file, FileKind kind, Outline outline,
+-      {String libraryName}) {
+-    this.file = file;
+-    this.kind = kind;
+-    this.libraryName = libraryName;
+-    this.outline = outline;
+-  }
+-
+-  factory AnalysisOutlineParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      FileKind kind;
+-      if (json.containsKey("kind")) {
+-        kind = new FileKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kind");
+-      }
+-      String libraryName;
+-      if (json.containsKey("libraryName")) {
+-        libraryName = jsonDecoder.decodeString(
+-            jsonPath + ".libraryName", json["libraryName"]);
+-      }
+-      Outline outline;
+-      if (json.containsKey("outline")) {
+-        outline = 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", json);
+-    }
+-  }
+-
+-  factory AnalysisOutlineParams.fromNotification(Notification notification) {
+-    return new AnalysisOutlineParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["kind"] = kind.toJson();
+-    if (libraryName != null) {
+-      result["libraryName"] = libraryName;
+-    }
+-    result["outline"] = outline.toJson();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.outline", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisOutlineParams) {
+-      return file == other.file &&
+-          kind == other.kind &&
+-          libraryName == other.libraryName &&
+-          outline == other.outline;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, libraryName.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file with which the overrides are associated.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The overrides associated with the file.
+-   */
+-  List<Override> get overrides => _overrides;
+-
+-  /**
+-   * The overrides associated with the file.
+-   */
+-  void set overrides(List<Override> value) {
+-    assert(value != null);
+-    this._overrides = value;
+-  }
+-
+-  AnalysisOverridesParams(String file, List<Override> overrides) {
+-    this.file = file;
+-    this.overrides = overrides;
+-  }
+-
+-  factory AnalysisOverridesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<Override> overrides;
+-      if (json.containsKey("overrides")) {
+-        overrides = jsonDecoder.decodeList(
+-            jsonPath + ".overrides",
+-            json["overrides"],
+-            (String jsonPath, Object json) =>
+-                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", json);
+-    }
+-  }
+-
+-  factory AnalysisOverridesParams.fromNotification(Notification notification) 
{
+-    return new AnalysisOverridesParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["overrides"] =
+-        overrides.map((Override value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("analysis.overrides", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisOverridesParams) {
+-      return file == other.file &&
+-          listEqual(
+-              overrides, other.overrides, (Override a, Override b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 => _roots;
+-
+-  /**
+-   * A list of the analysis roots that are to be re-analyzed.
+-   */
+-  void set roots(List<String> value) {
+-    this._roots = value;
+-  }
+-
+-  AnalysisReanalyzeParams({List<String> roots}) {
+-    this.roots = roots;
+-  }
+-
+-  factory AnalysisReanalyzeParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<String> roots;
+-      if (json.containsKey("roots")) {
+-        roots = jsonDecoder.decodeList(
+-            jsonPath + ".roots", json["roots"], jsonDecoder.decodeString);
+-      }
+-      return new AnalysisReanalyzeParams(roots: roots);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analysis.reanalyze params", json);
+-    }
+-  }
+-
+-  factory AnalysisReanalyzeParams.fromRequest(Request request) {
+-    return new AnalysisReanalyzeParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    if (roots != null) {
+-      result["roots"] = roots;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.reanalyze", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisReanalyzeParams) {
+-      return listEqual(roots, other.roots, (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 =
+-      const AnalysisService._("CLOSING_LABELS");
+-
+-  static const AnalysisService FOLDING = const AnalysisService._("FOLDING");
+-
+-  static const AnalysisService HIGHLIGHTS =
+-      const AnalysisService._("HIGHLIGHTS");
+-
+-  static const AnalysisService IMPLEMENTED =
+-      const AnalysisService._("IMPLEMENTED");
+-
+-  /**
+-   * This service is not currently implemented and will become a
+-   * GeneralAnalysisService in a future release.
+-   */
+-  static const AnalysisService INVALIDATE =
+-      const AnalysisService._("INVALIDATE");
+-
+-  static const AnalysisService NAVIGATION =
+-      const AnalysisService._("NAVIGATION");
+-
+-  static const AnalysisService OCCURRENCES =
+-      const AnalysisService._("OCCURRENCES");
+-
+-  static const AnalysisService OUTLINE = const AnalysisService._("OUTLINE");
+-
+-  static const AnalysisService OVERRIDES = const 
AnalysisService._("OVERRIDES");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<AnalysisService> VALUES = 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() => "AnalysisService.$name";
+-
+-  String toJson() => 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 => _included;
+-
+-  /**
+-   * A list of the files and directories that should be analyzed.
+-   */
+-  void set included(List<String> value) {
+-    assert(value != null);
+-    this._included = value;
+-  }
+-
+-  /**
+-   * A list of the files and directories within the included directories that
+-   * should not be analyzed.
+-   */
+-  List<String> get excluded => _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 != null);
+-    this._excluded = value;
+-  }
+-
+-  /**
+-   * A mapping from source directories to package roots that should override
+-   * the normal package: URI resolution mechanism.
+-   *
+-   * 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.
+-   *
+-   * 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.
+-   *
+-   * 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.
+-   */
+-  Map<String, String> get packageRoots => _packageRoots;
+-
+-  /**
+-   * A mapping from source directories to package roots that should override
+-   * the normal package: URI resolution mechanism.
+-   *
+-   * 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.
+-   *
+-   * 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.
+-   *
+-   * 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.
+-   */
+-  void set packageRoots(Map<String, String> value) {
+-    this._packageRoots = value;
+-  }
+-
+-  AnalysisSetAnalysisRootsParams(List<String> included, List<String> excluded,
+-      {Map<String, String> packageRoots}) {
+-    this.included = included;
+-    this.excluded = excluded;
+-    this.packageRoots = packageRoots;
+-  }
+-
+-  factory AnalysisSetAnalysisRootsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<String> included;
+-      if (json.containsKey("included")) {
+-        included = jsonDecoder.decodeList(
+-            jsonPath + ".included", json["included"], 
jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "included");
+-      }
+-      List<String> excluded;
+-      if (json.containsKey("excluded")) {
+-        excluded = jsonDecoder.decodeList(
+-            jsonPath + ".excluded", json["excluded"], 
jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "excluded");
+-      }
+-      Map<String, String> packageRoots;
+-      if (json.containsKey("packageRoots")) {
+-        packageRoots = 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 = {};
+-    result["included"] = included;
+-    result["excluded"] = excluded;
+-    if (packageRoots != null) {
+-      result["packageRoots"] = packageRoots;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setAnalysisRoots", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisSetAnalysisRootsParams) {
+-      return listEqual(
+-              included, other.included, (String a, String b) => a == b) &&
+-          listEqual(excluded, other.excluded, (String a, String b) => a == b) 
&&
+-          mapEqual(
+-              packageRoots, other.packageRoots, (String a, String b) => a == 
b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, included.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, excluded.hashCode);
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  void set subscriptions(List<GeneralAnalysisService> value) {
+-    assert(value != null);
+-    this._subscriptions = value;
+-  }
+-
+-  AnalysisSetGeneralSubscriptionsParams(
+-      List<GeneralAnalysisService> subscriptions) {
+-    this.subscriptions = subscriptions;
+-  }
+-
+-  factory AnalysisSetGeneralSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<GeneralAnalysisService> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions = jsonDecoder.decodeList(
+-            jsonPath + ".subscriptions",
+-            json["subscriptions"],
+-            (String jsonPath, Object json) =>
+-                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 request) {
+-    return new AnalysisSetGeneralSubscriptionsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["subscriptions"] = subscriptions
+-        .map((GeneralAnalysisService value) => value.toJson())
+-        .toList();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setGeneralSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisSetGeneralSubscriptionsParams) {
+-      return listEqual(subscriptions, other.subscriptions,
+-          (GeneralAnalysisService a, GeneralAnalysisService b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _files;
+-
+-  /**
+-   * The files that are to be a priority for analysis.
+-   */
+-  void set files(List<String> value) {
+-    assert(value != null);
+-    this._files = value;
+-  }
+-
+-  AnalysisSetPriorityFilesParams(List<String> files) {
+-    this.files = files;
+-  }
+-
+-  factory AnalysisSetPriorityFilesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files = 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 = {};
+-    result["files"] = files;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setPriorityFiles", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisSetPriorityFilesParams) {
+-      return listEqual(files, other.files, (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _subscriptions;
+-
+-  /**
+-   * 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 != null);
+-    this._subscriptions = value;
+-  }
+-
+-  AnalysisSetSubscriptionsParams(
+-      Map<AnalysisService, List<String>> subscriptions) {
+-    this.subscriptions = subscriptions;
+-  }
+-
+-  factory AnalysisSetSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      Map<AnalysisService, List<String>> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions = jsonDecoder.decodeMap(
+-            jsonPath + ".subscriptions", json["subscriptions"],
+-            keyDecoder: (String jsonPath, Object json) =>
+-                new AnalysisService.fromJson(jsonDecoder, jsonPath, json),
+-            valueDecoder: (String jsonPath, Object json) => 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 = {};
+-    result["subscriptions"] = mapMap(subscriptions,
+-        keyCallback: (AnalysisService value) => value.toJson());
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.setSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisSetSubscriptionsParams) {
+-      return mapEqual(
+-          subscriptions,
+-          other.subscriptions,
+-          (List<String> a, List<String> b) =>
+-              listEqual(a, b, (String a, String b) => a == b));
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _isAnalyzing;
+-
+-  /**
+-   * True if analysis is currently being performed.
+-   */
+-  void set isAnalyzing(bool value) {
+-    assert(value != null);
+-    this._isAnalyzing = value;
+-  }
+-
+-  /**
+-   * The name of the current target of analysis. This field is omitted if
+-   * analyzing is false.
+-   */
+-  String get analysisTarget => _analysisTarget;
+-
+-  /**
+-   * The name of the current target of analysis. This field is omitted if
+-   * analyzing is false.
+-   */
+-  void set analysisTarget(String value) {
+-    this._analysisTarget = value;
+-  }
+-
+-  AnalysisStatus(bool isAnalyzing, {String analysisTarget}) {
+-    this.isAnalyzing = isAnalyzing;
+-    this.analysisTarget = analysisTarget;
+-  }
+-
+-  factory AnalysisStatus.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool isAnalyzing;
+-      if (json.containsKey("isAnalyzing")) {
+-        isAnalyzing = jsonDecoder.decodeBool(
+-            jsonPath + ".isAnalyzing", json["isAnalyzing"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isAnalyzing");
+-      }
+-      String analysisTarget;
+-      if (json.containsKey("analysisTarget")) {
+-        analysisTarget = jsonDecoder.decodeString(
+-            jsonPath + ".analysisTarget", json["analysisTarget"]);
+-      }
+-      return new AnalysisStatus(isAnalyzing, analysisTarget: analysisTarget);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "AnalysisStatus", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["isAnalyzing"] = isAnalyzing;
+-    if (analysisTarget != null) {
+-      result["analysisTarget"] = analysisTarget;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisStatus) {
+-      return isAnalyzing == other.isAnalyzing &&
+-          analysisTarget == other.analysisTarget;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, isAnalyzing.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, analysisTarget.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * analysis.updateContent params
+- *
+- * {
+- *   "files": Map<FilePath, AddContentOverlay | ChangeContentOverlay | 
RemoveContentOverlay>
+- * }
+- *
+- * 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 => _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 != null);
+-    this._files = value;
+-  }
+-
+-  AnalysisUpdateContentParams(Map<String, dynamic> files) {
+-    this.files = files;
+-  }
+-
+-  factory AnalysisUpdateContentParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      Map<String, dynamic> files;
+-      if (json.containsKey("files")) {
+-        files = jsonDecoder.decodeMap(jsonPath + ".files", json["files"],
+-            valueDecoder: (String jsonPath, Object json) =>
+-                jsonDecoder.decodeUnion(jsonPath, json, "type", {
+-                  "add": (String jsonPath, Object json) =>
+-                      new AddContentOverlay.fromJson(
+-                          jsonDecoder, jsonPath, json),
+-                  "change": (String jsonPath, Object json) =>
+-                      new ChangeContentOverlay.fromJson(
+-                          jsonDecoder, jsonPath, json),
+-                  "remove": (String jsonPath, Object json) =>
+-                      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 = {};
+-    result["files"] =
+-        mapMap(files, valueCallback: (dynamic value) => value.toJson());
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.updateContent", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisUpdateContentParams) {
+-      return mapEqual(files, other.files, (dynamic a, dynamic b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 == null) {
+-      json = {};
+-    }
+-    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 = {};
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisUpdateContentResult) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 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 => _options;
+-
+-  /**
+-   * The options that are to be used to control analysis.
+-   */
+-  void set options(AnalysisOptions value) {
+-    assert(value != null);
+-    this._options = value;
+-  }
+-
+-  AnalysisUpdateOptionsParams(AnalysisOptions options) {
+-    this.options = options;
+-  }
+-
+-  factory AnalysisUpdateOptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      AnalysisOptions options;
+-      if (json.containsKey("options")) {
+-        options = 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 = {};
+-    result["options"] = options.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analysis.updateOptions", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalysisUpdateOptionsParams) {
+-      return options == other.options;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _value;
+-
+-  /**
+-   * Enable or disable analytics.
+-   */
+-  void set value(bool value) {
+-    assert(value != null);
+-    this._value = value;
+-  }
+-
+-  AnalyticsEnableParams(bool value) {
+-    this.value = value;
+-  }
+-
+-  factory AnalyticsEnableParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool value;
+-      if (json.containsKey("value")) {
+-        value = jsonDecoder.decodeBool(jsonPath + ".value", json["value"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "value");
+-      }
+-      return new AnalyticsEnableParams(value);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "analytics.enable params", json);
+-    }
+-  }
+-
+-  factory AnalyticsEnableParams.fromRequest(Request request) {
+-    return new AnalyticsEnableParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["value"] = value;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.enable", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalyticsEnableParams) {
+-      return value == other.value;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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() => <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.isEnabled", null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _enabled;
+-
+-  /**
+-   * Whether sending analytics is enabled or not.
+-   */
+-  void set enabled(bool value) {
+-    assert(value != null);
+-    this._enabled = value;
+-  }
+-
+-  AnalyticsIsEnabledResult(bool enabled) {
+-    this.enabled = enabled;
+-  }
+-
+-  factory AnalyticsIsEnabledResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool enabled;
+-      if (json.containsKey("enabled")) {
+-        enabled =
+-            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 = {};
+-    result["enabled"] = enabled;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalyticsIsEnabledResult) {
+-      return enabled == other.enabled;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _action;
+-
+-  /**
+-   * The value used to indicate which action was performed.
+-   */
+-  void set action(String value) {
+-    assert(value != null);
+-    this._action = value;
+-  }
+-
+-  AnalyticsSendEventParams(String action) {
+-    this.action = action;
+-  }
+-
+-  factory AnalyticsSendEventParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String action;
+-      if (json.containsKey("action")) {
+-        action = jsonDecoder.decodeString(jsonPath + ".action", 
json["action"]);
+-      } 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 = {};
+-    result["action"] = action;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.sendEvent", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalyticsSendEventParams) {
+-      return action == other.action;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _event;
+-
+-  /**
+-   * The name of the event.
+-   */
+-  void set event(String value) {
+-    assert(value != null);
+-    this._event = value;
+-  }
+-
+-  /**
+-   * The duration of the event in milliseconds.
+-   */
+-  int get millis => _millis;
+-
+-  /**
+-   * The duration of the event in milliseconds.
+-   */
+-  void set millis(int value) {
+-    assert(value != null);
+-    this._millis = value;
+-  }
+-
+-  AnalyticsSendTimingParams(String event, int millis) {
+-    this.event = event;
+-    this.millis = millis;
+-  }
+-
+-  factory AnalyticsSendTimingParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String event;
+-      if (json.containsKey("event")) {
+-        event = jsonDecoder.decodeString(jsonPath + ".event", json["event"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "event");
+-      }
+-      int millis;
+-      if (json.containsKey("millis")) {
+-        millis = jsonDecoder.decodeInt(jsonPath + ".millis", json["millis"]);
+-      } 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 = {};
+-    result["event"] = event;
+-    result["millis"] = millis;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "analytics.sendTiming", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is AnalyticsSendTimingParams) {
+-      return event == other.event && millis == other.millis;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, event.hashCode);
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _offset;
+-
+-  /**
+-   * The offset of the construct being labelled.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the whole construct to be labelled.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the whole construct to be labelled.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  /**
+-   * The label associated with this range that should be displayed to the 
user.
+-   */
+-  String get label => _label;
+-
+-  /**
+-   * The label associated with this range that should be displayed to the 
user.
+-   */
+-  void set label(String value) {
+-    assert(value != null);
+-    this._label = value;
+-  }
+-
+-  ClosingLabel(int offset, int length, String label) {
+-    this.offset = offset;
+-    this.length = length;
+-    this.label = label;
+-  }
+-
+-  factory ClosingLabel.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String label;
+-      if (json.containsKey("label")) {
+-        label = jsonDecoder.decodeString(jsonPath + ".label", json["label"]);
+-      } 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 = {};
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    result["label"] = label;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ClosingLabel) {
+-      return offset == other.offset &&
+-          length == other.length &&
+-          label == other.label;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the point at which suggestions are to be made.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset within the file at which suggestions are to be made.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset within the file at which suggestions are to be made.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  CompletionGetSuggestionsParams(String file, int offset) {
+-    this.file = file;
+-    this.offset = offset;
+-  }
+-
+-  factory CompletionGetSuggestionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "completion.getSuggestions", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is CompletionGetSuggestionsParams) {
+-      return file == other.file && offset == other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 request.
+-   */
+-  String get id => _id;
+-
+-  /**
+-   * The identifier used to associate results with this completion request.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  CompletionGetSuggestionsResult(String id) {
+-    this.id = id;
+-  }
+-
+-  factory CompletionGetSuggestionsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = 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 = {};
+-    result["id"] = id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is CompletionGetSuggestionsResult) {
+-      return id == other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _id;
+-
+-  /**
+-   * The id associated with the completion.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  int get replacementOffset => _replacementOffset;
+-
+-  /**
+-   * 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.
+-   */
+-  void set replacementOffset(int value) {
+-    assert(value != null);
+-    this._replacementOffset = value;
+-  }
+-
+-  /**
+-   * 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).
+-   */
+-  int get replacementLength => _replacementLength;
+-
+-  /**
+-   * 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).
+-   */
+-  void set replacementLength(int value) {
+-    assert(value != null);
+-    this._replacementLength = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  List<CompletionSuggestion> get results => _results;
+-
+-  /**
+-   * 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.
+-   */
+-  void set results(List<CompletionSuggestion> value) {
+-    assert(value != null);
+-    this._results = value;
+-  }
+-
+-  /**
+-   * True if this is that last set of results that will be returned for the
+-   * indicated completion.
+-   */
+-  bool get isLast => _isLast;
+-
+-  /**
+-   * True if this is that last set of results that will be returned for the
+-   * indicated completion.
+-   */
+-  void set isLast(bool value) {
+-    assert(value != null);
+-    this._isLast = value;
+-  }
+-
+-  CompletionResultsParams(String id, int replacementOffset,
+-      int replacementLength, List<CompletionSuggestion> results, bool isLast) 
{
+-    this.id = id;
+-    this.replacementOffset = replacementOffset;
+-    this.replacementLength = replacementLength;
+-    this.results = results;
+-    this.isLast = isLast;
+-  }
+-
+-  factory CompletionResultsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      int replacementOffset;
+-      if (json.containsKey("replacementOffset")) {
+-        replacementOffset = jsonDecoder.decodeInt(
+-            jsonPath + ".replacementOffset", json["replacementOffset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "replacementOffset");
+-      }
+-      int replacementLength;
+-      if (json.containsKey("replacementLength")) {
+-        replacementLength = jsonDecoder.decodeInt(
+-            jsonPath + ".replacementLength", json["replacementLength"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "replacementLength");
+-      }
+-      List<CompletionSuggestion> results;
+-      if (json.containsKey("results")) {
+-        results = jsonDecoder.decodeList(
+-            jsonPath + ".results",
+-            json["results"],
+-            (String jsonPath, Object json) =>
+-                new CompletionSuggestion.fromJson(jsonDecoder, jsonPath, 
json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "results");
+-      }
+-      bool isLast;
+-      if (json.containsKey("isLast")) {
+-        isLast = jsonDecoder.decodeBool(jsonPath + ".isLast", json["isLast"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isLast");
+-      }
+-      return new CompletionResultsParams(
+-          id, replacementOffset, replacementLength, results, isLast);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "completion.results params", json);
+-    }
+-  }
+-
+-  factory CompletionResultsParams.fromNotification(Notification notification) 
{
+-    return new CompletionResultsParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["id"] = id;
+-    result["replacementOffset"] = replacementOffset;
+-    result["replacementLength"] = replacementLength;
+-    result["results"] =
+-        results.map((CompletionSuggestion value) => value.toJson()).toList();
+-    result["isLast"] = isLast;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("completion.results", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is CompletionResultsParams) {
+-      return id == other.id &&
+-          replacementOffset == other.replacementOffset &&
+-          replacementLength == other.replacementLength &&
+-          listEqual(results, other.results,
+-              (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
+-          isLast == other.isLast;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, replacementOffset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, replacementLength.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, results.hashCode);
+-    hash = 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 => _name;
+-
+-  /**
+-   * The name of the context.
+-   */
+-  void set name(String value) {
+-    assert(value != null);
+-    this._name = value;
+-  }
+-
+-  /**
+-   * Explicitly analyzed files.
+-   */
+-  int get explicitFileCount => _explicitFileCount;
+-
+-  /**
+-   * Explicitly analyzed files.
+-   */
+-  void set explicitFileCount(int value) {
+-    assert(value != null);
+-    this._explicitFileCount = value;
+-  }
+-
+-  /**
+-   * Implicitly analyzed files.
+-   */
+-  int get implicitFileCount => _implicitFileCount;
+-
+-  /**
+-   * Implicitly analyzed files.
+-   */
+-  void set implicitFileCount(int value) {
+-    assert(value != null);
+-    this._implicitFileCount = value;
+-  }
+-
+-  /**
+-   * The number of work items in the queue.
+-   */
+-  int get workItemQueueLength => _workItemQueueLength;
+-
+-  /**
+-   * The number of work items in the queue.
+-   */
+-  void set workItemQueueLength(int value) {
+-    assert(value != null);
+-    this._workItemQueueLength = value;
+-  }
+-
+-  /**
+-   * Exceptions associated with cache entries.
+-   */
+-  List<String> get cacheEntryExceptions => _cacheEntryExceptions;
+-
+-  /**
+-   * Exceptions associated with cache entries.
+-   */
+-  void set cacheEntryExceptions(List<String> value) {
+-    assert(value != null);
+-    this._cacheEntryExceptions = value;
+-  }
+-
+-  ContextData(String name, int explicitFileCount, int implicitFileCount,
+-      int workItemQueueLength, List<String> cacheEntryExceptions) {
+-    this.name = name;
+-    this.explicitFileCount = explicitFileCount;
+-    this.implicitFileCount = implicitFileCount;
+-    this.workItemQueueLength = workItemQueueLength;
+-    this.cacheEntryExceptions = cacheEntryExceptions;
+-  }
+-
+-  factory ContextData.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name = jsonDecoder.decodeString(jsonPath + ".name", json["name"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      int explicitFileCount;
+-      if (json.containsKey("explicitFileCount")) {
+-        explicitFileCount = jsonDecoder.decodeInt(
+-            jsonPath + ".explicitFileCount", json["explicitFileCount"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "explicitFileCount");
+-      }
+-      int implicitFileCount;
+-      if (json.containsKey("implicitFileCount")) {
+-        implicitFileCount = jsonDecoder.decodeInt(
+-            jsonPath + ".implicitFileCount", json["implicitFileCount"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "implicitFileCount");
+-      }
+-      int workItemQueueLength;
+-      if (json.containsKey("workItemQueueLength")) {
+-        workItemQueueLength = jsonDecoder.decodeInt(
+-            jsonPath + ".workItemQueueLength", json["workItemQueueLength"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "workItemQueueLength");
+-      }
+-      List<String> cacheEntryExceptions;
+-      if (json.containsKey("cacheEntryExceptions")) {
+-        cacheEntryExceptions = 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 = {};
+-    result["name"] = name;
+-    result["explicitFileCount"] = explicitFileCount;
+-    result["implicitFileCount"] = implicitFileCount;
+-    result["workItemQueueLength"] = workItemQueueLength;
+-    result["cacheEntryExceptions"] = cacheEntryExceptions;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ContextData) {
+-      return name == other.name &&
+-          explicitFileCount == other.explicitFileCount &&
+-          implicitFileCount == other.implicitFileCount &&
+-          workItemQueueLength == other.workItemQueueLength &&
+-          listEqual(cacheEntryExceptions, other.cacheEntryExceptions,
+-              (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, explicitFileCount.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, implicitFileCount.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, workItemQueueLength.hashCode);
+-    hash = 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 ==(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 ==(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 ==(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 ==(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() => <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "diagnostic.getDiagnostics", null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _contexts;
+-
+-  /**
+-   * The list of analysis contexts.
+-   */
+-  void set contexts(List<ContextData> value) {
+-    assert(value != null);
+-    this._contexts = value;
+-  }
+-
+-  DiagnosticGetDiagnosticsResult(List<ContextData> contexts) {
+-    this.contexts = contexts;
+-  }
+-
+-  factory DiagnosticGetDiagnosticsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<ContextData> contexts;
+-      if (json.containsKey("contexts")) {
+-        contexts = jsonDecoder.decodeList(
+-            jsonPath + ".contexts",
+-            json["contexts"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["contexts"] =
+-        contexts.map((ContextData value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is DiagnosticGetDiagnosticsResult) {
+-      return listEqual(
+-          contexts, other.contexts, (ContextData a, ContextData b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "diagnostic.getServerPort", null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _port;
+-
+-  /**
+-   * The diagnostic server port.
+-   */
+-  void set port(int value) {
+-    assert(value != null);
+-    this._port = value;
+-  }
+-
+-  DiagnosticGetServerPortResult(int port) {
+-    this.port = port;
+-  }
+-
+-  factory DiagnosticGetServerPortResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int port;
+-      if (json.containsKey("port")) {
+-        port = 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 = {};
+-    result["port"] = port;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is DiagnosticGetServerPortResult) {
+-      return port == other.port;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the code to be formatted.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the current selection in the file.
+-   */
+-  int get selectionOffset => _selectionOffset;
+-
+-  /**
+-   * The offset of the current selection in the file.
+-   */
+-  void set selectionOffset(int value) {
+-    assert(value != null);
+-    this._selectionOffset = value;
+-  }
+-
+-  /**
+-   * The length of the current selection in the file.
+-   */
+-  int get selectionLength => _selectionLength;
+-
+-  /**
+-   * The length of the current selection in the file.
+-   */
+-  void set selectionLength(int value) {
+-    assert(value != null);
+-    this._selectionLength = value;
+-  }
+-
+-  /**
+-   * The line length to be used by the formatter.
+-   */
+-  int get lineLength => _lineLength;
+-
+-  /**
+-   * The line length to be used by the formatter.
+-   */
+-  void set lineLength(int value) {
+-    this._lineLength = value;
+-  }
+-
+-  EditFormatParams(String file, int selectionOffset, int selectionLength,
+-      {int lineLength}) {
+-    this.file = file;
+-    this.selectionOffset = selectionOffset;
+-    this.selectionLength = selectionLength;
+-    this.lineLength = lineLength;
+-  }
+-
+-  factory EditFormatParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int selectionOffset;
+-      if (json.containsKey("selectionOffset")) {
+-        selectionOffset = jsonDecoder.decodeInt(
+-            jsonPath + ".selectionOffset", json["selectionOffset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "selectionOffset");
+-      }
+-      int selectionLength;
+-      if (json.containsKey("selectionLength")) {
+-        selectionLength = jsonDecoder.decodeInt(
+-            jsonPath + ".selectionLength", json["selectionLength"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "selectionLength");
+-      }
+-      int lineLength;
+-      if (json.containsKey("lineLength")) {
+-        lineLength =
+-            jsonDecoder.decodeInt(jsonPath + ".lineLength", 
json["lineLength"]);
+-      }
+-      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 = {};
+-    result["file"] = file;
+-    result["selectionOffset"] = selectionOffset;
+-    result["selectionLength"] = selectionLength;
+-    if (lineLength != null) {
+-      result["lineLength"] = lineLength;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.format", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditFormatParams) {
+-      return file == other.file &&
+-          selectionOffset == other.selectionOffset &&
+-          selectionLength == other.selectionLength &&
+-          lineLength == other.lineLength;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, selectionLength.hashCode);
+-    hash = 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 => _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 != null);
+-    this._edits = value;
+-  }
+-
+-  /**
+-   * The offset of the selection after formatting the code.
+-   */
+-  int get selectionOffset => _selectionOffset;
+-
+-  /**
+-   * The offset of the selection after formatting the code.
+-   */
+-  void set selectionOffset(int value) {
+-    assert(value != null);
+-    this._selectionOffset = value;
+-  }
+-
+-  /**
+-   * The length of the selection after formatting the code.
+-   */
+-  int get selectionLength => _selectionLength;
+-
+-  /**
+-   * The length of the selection after formatting the code.
+-   */
+-  void set selectionLength(int value) {
+-    assert(value != null);
+-    this._selectionLength = value;
+-  }
+-
+-  EditFormatResult(
+-      List<SourceEdit> edits, int selectionOffset, int selectionLength) {
+-    this.edits = edits;
+-    this.selectionOffset = selectionOffset;
+-    this.selectionLength = selectionLength;
+-  }
+-
+-  factory EditFormatResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<SourceEdit> edits;
+-      if (json.containsKey("edits")) {
+-        edits = jsonDecoder.decodeList(
+-            jsonPath + ".edits",
+-            json["edits"],
+-            (String jsonPath, Object json) =>
+-                new SourceEdit.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "edits");
+-      }
+-      int selectionOffset;
+-      if (json.containsKey("selectionOffset")) {
+-        selectionOffset = jsonDecoder.decodeInt(
+-            jsonPath + ".selectionOffset", json["selectionOffset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "selectionOffset");
+-      }
+-      int selectionLength;
+-      if (json.containsKey("selectionLength")) {
+-        selectionLength = 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 = {};
+-    result["edits"] = edits.map((SourceEdit value) => 
value.toJson()).toList();
+-    result["selectionOffset"] = selectionOffset;
+-    result["selectionLength"] = selectionLength;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditFormatResult) {
+-      return listEqual(
+-              edits, other.edits, (SourceEdit a, SourceEdit b) => a == b) &&
+-          selectionOffset == other.selectionOffset &&
+-          selectionLength == other.selectionLength;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, edits.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the code for which assists are being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the code for which assists are being requested.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the code for which assists are being requested.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the code for which assists are being requested.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the code for which assists are being requested.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  EditGetAssistsParams(String file, int offset, int length) {
+-    this.file = file;
+-    this.offset = offset;
+-    this.length = length;
+-  }
+-
+-  factory EditGetAssistsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getAssists", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetAssistsParams) {
+-      return file == other.file &&
+-          offset == other.offset &&
+-          length == other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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 => _assists;
+-
+-  /**
+-   * The assists that are available at the given location.
+-   */
+-  void set assists(List<SourceChange> value) {
+-    assert(value != null);
+-    this._assists = value;
+-  }
+-
+-  EditGetAssistsResult(List<SourceChange> assists) {
+-    this.assists = assists;
+-  }
+-
+-  factory EditGetAssistsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<SourceChange> assists;
+-      if (json.containsKey("assists")) {
+-        assists = jsonDecoder.decodeList(
+-            jsonPath + ".assists",
+-            json["assists"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["assists"] =
+-        assists.map((SourceChange value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetAssistsResult) {
+-      return listEqual(
+-          assists, other.assists, (SourceChange a, SourceChange b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the code on which the refactoring would be based.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the code on which the refactoring would be based.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the code on which the refactoring would be based.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the code on which the refactoring would be based.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the code on which the refactoring would be based.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  EditGetAvailableRefactoringsParams(String file, int offset, int length) {
+-    this.file = file;
+-    this.offset = offset;
+-    this.length = length;
+-  }
+-
+-  factory EditGetAvailableRefactoringsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getAvailableRefactorings", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetAvailableRefactoringsParams) {
+-      return file == other.file &&
+-          offset == other.offset &&
+-          length == other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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 => _kinds;
+-
+-  /**
+-   * The kinds of refactorings that are valid for the given selection.
+-   */
+-  void set kinds(List<RefactoringKind> value) {
+-    assert(value != null);
+-    this._kinds = value;
+-  }
+-
+-  EditGetAvailableRefactoringsResult(List<RefactoringKind> kinds) {
+-    this.kinds = kinds;
+-  }
+-
+-  factory EditGetAvailableRefactoringsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<RefactoringKind> kinds;
+-      if (json.containsKey("kinds")) {
+-        kinds = jsonDecoder.decodeList(
+-            jsonPath + ".kinds",
+-            json["kinds"],
+-            (String jsonPath, Object json) =>
+-                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 response) {
+-    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 = {};
+-    result["kinds"] =
+-        kinds.map((RefactoringKind value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetAvailableRefactoringsResult) {
+-      return listEqual(
+-          kinds, other.kinds, (RefactoringKind a, RefactoringKind b) => a == 
b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the errors for which fixes are being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset used to select the errors for which fixes will be returned.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset used to select the errors for which fixes will be returned.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  EditGetFixesParams(String file, int offset) {
+-    this.file = file;
+-    this.offset = offset;
+-  }
+-
+-  factory EditGetFixesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getFixes", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetFixesParams) {
+-      return file == other.file && offset == other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 => _fixes;
+-
+-  /**
+-   * The fixes that are available for the errors at the given offset.
+-   */
+-  void set fixes(List<AnalysisErrorFixes> value) {
+-    assert(value != null);
+-    this._fixes = value;
+-  }
+-
+-  EditGetFixesResult(List<AnalysisErrorFixes> fixes) {
+-    this.fixes = fixes;
+-  }
+-
+-  factory EditGetFixesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<AnalysisErrorFixes> fixes;
+-      if (json.containsKey("fixes")) {
+-        fixes = jsonDecoder.decodeList(
+-            jsonPath + ".fixes",
+-            json["fixes"],
+-            (String jsonPath, Object json) =>
+-                new AnalysisErrorFixes.fromJson(jsonDecoder, jsonPath, json));
+-      } 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 = {};
+-    result["fixes"] =
+-        fixes.map((AnalysisErrorFixes value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetFixesResult) {
+-      return listEqual(fixes, other.fixes,
+-          (AnalysisErrorFixes a, AnalysisErrorFixes b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the postfix template to be expanded.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  String get key => _key;
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  void set key(String value) {
+-    assert(value != null);
+-    this._key = value;
+-  }
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  EditGetPostfixCompletionParams(String file, String key, int offset) {
+-    this.file = file;
+-    this.key = key;
+-    this.offset = offset;
+-  }
+-
+-  factory EditGetPostfixCompletionParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      String key;
+-      if (json.containsKey("key")) {
+-        key = jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "key");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["key"] = key;
+-    result["offset"] = offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getPostfixCompletion", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetPostfixCompletionParams) {
+-      return file == other.file && key == other.key && offset == other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, key.hashCode);
+-    hash = 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 => _change;
+-
+-  /**
+-   * The change to be applied in order to complete the statement.
+-   */
+-  void set change(SourceChange value) {
+-    assert(value != null);
+-    this._change = value;
+-  }
+-
+-  EditGetPostfixCompletionResult(SourceChange change) {
+-    this.change = change;
+-  }
+-
+-  factory EditGetPostfixCompletionResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      SourceChange change;
+-      if (json.containsKey("change")) {
+-        change = 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 = {};
+-    result["change"] = change.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetPostfixCompletionResult) {
+-      return change == other.change;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _kind;
+-
+-  /**
+-   * The kind of refactoring to be performed.
+-   */
+-  void set kind(RefactoringKind value) {
+-    assert(value != null);
+-    this._kind = value;
+-  }
+-
+-  /**
+-   * The file containing the code involved in the refactoring.
+-   */
+-  String get file => _file;
+-
+-  /**
+-   * The file containing the code involved in the refactoring.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the region involved in the refactoring.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the region involved in the refactoring.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the region involved in the refactoring.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the region involved in the refactoring.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  /**
+-   * True if the client is only requesting that the values of the options be
+-   * validated and no change be generated.
+-   */
+-  bool get validateOnly => _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 != null);
+-    this._validateOnly = value;
+-  }
+-
+-  /**
+-   * 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 Refactorings, 
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.
+-   */
+-  RefactoringOptions get options => _options;
+-
+-  /**
+-   * 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 Refactorings, 
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.
+-   */
+-  void set options(RefactoringOptions value) {
+-    this._options = value;
+-  }
+-
+-  EditGetRefactoringParams(RefactoringKind kind, String file, int offset,
+-      int length, bool validateOnly,
+-      {RefactoringOptions options}) {
+-    this.kind = kind;
+-    this.file = file;
+-    this.offset = offset;
+-    this.length = length;
+-    this.validateOnly = validateOnly;
+-    this.options = options;
+-  }
+-
+-  factory EditGetRefactoringParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      RefactoringKind kind;
+-      if (json.containsKey("kind")) {
+-        kind = new RefactoringKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kind");
+-      }
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      bool validateOnly;
+-      if (json.containsKey("validateOnly")) {
+-        validateOnly = jsonDecoder.decodeBool(
+-            jsonPath + ".validateOnly", json["validateOnly"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "validateOnly");
+-      }
+-      RefactoringOptions options;
+-      if (json.containsKey("options")) {
+-        options = 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 = new EditGetRefactoringParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-    REQUEST_ID_REFACTORING_KINDS[request.id] = params.kind;
+-    return params;
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["kind"] = kind.toJson();
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    result["validateOnly"] = validateOnly;
+-    if (options != null) {
+-      result["options"] = options.toJson();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getRefactoring", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetRefactoringParams) {
+-      return kind == other.kind &&
+-          file == other.file &&
+-          offset == other.offset &&
+-          length == other.length &&
+-          validateOnly == other.validateOnly &&
+-          options == other.options;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, validateOnly.hashCode);
+-    hash = 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 empty if
+-   * there are no known problems.
+-   */
+-  List<RefactoringProblem> get initialProblems => _initialProblems;
+-
+-  /**
+-   * 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.
+-   */
+-  void set initialProblems(List<RefactoringProblem> value) {
+-    assert(value != null);
+-    this._initialProblems = value;
+-  }
+-
+-  /**
+-   * The options validation status, i.e. problems in the given options, such 
as
+-   * light-weight validation of a new name, flags compatibility, etc. The 
array
+-   * will be empty if there are no known problems.
+-   */
+-  List<RefactoringProblem> get optionsProblems => _optionsProblems;
+-
+-  /**
+-   * The options validation status, i.e. problems in the given options, such 
as
+-   * light-weight validation of a new name, flags compatibility, etc. The 
array
+-   * will be empty if there are no known problems.
+-   */
+-  void set optionsProblems(List<RefactoringProblem> value) {
+-    assert(value != null);
+-    this._optionsProblems = 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 => _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 != null);
+-    this._finalProblems = 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 => _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 = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  SourceChange get change => _change;
+-
+-  /**
+-   * 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.
+-   */
+-  void set change(SourceChange value) {
+-    this._change = value;
+-  }
+-
+-  /**
+-   * The ids of source edits that are not known to be valid. An edit is not
+-   * known to be valid if there was insufficient type information for the
+-   * server to be able to determine whether or not the code needs to be
+-   * modified, such as when a member is being renamed and there is a reference
+-   * to a member from an unknown type. This field will be omitted if the 
change
+-   * field is omitted or if there are no potential edits for the refactoring.
+-   */
+-  List<String> get potentialEdits => _potentialEdits;
+-
+-  /**
+-   * The ids of source edits that are not known to be valid. An edit is not
+-   * known to be valid if there was insufficient type information for the
+-   * server to be able to determine whether or not the code needs to be
+-   * modified, such as when a member is being renamed and there is a reference
+-   * to a member from an unknown type. This field will be omitted if the 
change
+-   * field is omitted or if there are no potential edits for the refactoring.
+-   */
+-  void set potentialEdits(List<String> value) {
+-    this._potentialEdits = value;
+-  }
+-
+-  EditGetRefactoringResult(
+-      List<RefactoringProblem> initialProblems,
+-      List<RefactoringProblem> optionsProblems,
+-      List<RefactoringProblem> finalProblems,
+-      {RefactoringFeedback feedback,
+-      SourceChange change,
+-      List<String> potentialEdits}) {
+-    this.initialProblems = initialProblems;
+-    this.optionsProblems = optionsProblems;
+-    this.finalProblems = finalProblems;
+-    this.feedback = feedback;
+-    this.change = change;
+-    this.potentialEdits = potentialEdits;
+-  }
+-
+-  factory EditGetRefactoringResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<RefactoringProblem> initialProblems;
+-      if (json.containsKey("initialProblems")) {
+-        initialProblems = jsonDecoder.decodeList(
+-            jsonPath + ".initialProblems",
+-            json["initialProblems"],
+-            (String jsonPath, Object json) =>
+-                new RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "initialProblems");
+-      }
+-      List<RefactoringProblem> optionsProblems;
+-      if (json.containsKey("optionsProblems")) {
+-        optionsProblems = jsonDecoder.decodeList(
+-            jsonPath + ".optionsProblems",
+-            json["optionsProblems"],
+-            (String jsonPath, Object json) =>
+-                new RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "optionsProblems");
+-      }
+-      List<RefactoringProblem> finalProblems;
+-      if (json.containsKey("finalProblems")) {
+-        finalProblems = jsonDecoder.decodeList(
+-            jsonPath + ".finalProblems",
+-            json["finalProblems"],
+-            (String jsonPath, Object json) =>
+-                new RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "finalProblems");
+-      }
+-      RefactoringFeedback feedback;
+-      if (json.containsKey("feedback")) {
+-        feedback = new RefactoringFeedback.fromJson(
+-            jsonDecoder, jsonPath + ".feedback", json["feedback"], json);
+-      }
+-      SourceChange change;
+-      if (json.containsKey("change")) {
+-        change = new SourceChange.fromJson(
+-            jsonDecoder, jsonPath + ".change", json["change"]);
+-      }
+-      List<String> potentialEdits;
+-      if (json.containsKey("potentialEdits")) {
+-        potentialEdits = jsonDecoder.decodeList(jsonPath + ".potentialEdits",
+-            json["potentialEdits"], jsonDecoder.decodeString);
+-      }
+-      return new EditGetRefactoringResult(
+-          initialProblems, optionsProblems, finalProblems,
+-          feedback: feedback, change: change, potentialEdits: potentialEdits);
+-    } 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 = {};
+-    result["initialProblems"] = initialProblems
+-        .map((RefactoringProblem value) => value.toJson())
+-        .toList();
+-    result["optionsProblems"] = optionsProblems
+-        .map((RefactoringProblem value) => value.toJson())
+-        .toList();
+-    result["finalProblems"] = finalProblems
+-        .map((RefactoringProblem value) => value.toJson())
+-        .toList();
+-    if (feedback != null) {
+-      result["feedback"] = feedback.toJson();
+-    }
+-    if (change != null) {
+-      result["change"] = change.toJson();
+-    }
+-    if (potentialEdits != null) {
+-      result["potentialEdits"] = potentialEdits;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetRefactoringResult) {
+-      return listEqual(initialProblems, other.initialProblems,
+-              (RefactoringProblem a, RefactoringProblem b) => a == b) &&
+-          listEqual(optionsProblems, other.optionsProblems,
+-              (RefactoringProblem a, RefactoringProblem b) => a == b) &&
+-          listEqual(finalProblems, other.finalProblems,
+-              (RefactoringProblem a, RefactoringProblem b) => a == b) &&
+-          feedback == other.feedback &&
+-          change == other.change &&
+-          listEqual(potentialEdits, other.potentialEdits,
+-              (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, initialProblems.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, optionsProblems.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, finalProblems.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, feedback.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, change.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the statement to be completed.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset used to identify the statement to be completed.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset used to identify the statement to be completed.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  EditGetStatementCompletionParams(String file, int offset) {
+-    this.file = file;
+-    this.offset = offset;
+-  }
+-
+-  factory EditGetStatementCompletionParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.getStatementCompletion", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetStatementCompletionParams) {
+-      return file == other.file && offset == other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 => _change;
+-
+-  /**
+-   * The change to be applied in order to complete the statement.
+-   */
+-  void set change(SourceChange value) {
+-    assert(value != null);
+-    this._change = value;
+-  }
+-
+-  /**
+-   * Will be true if the change contains nothing but whitespace characters, or
+-   * is empty.
+-   */
+-  bool get whitespaceOnly => _whitespaceOnly;
+-
+-  /**
+-   * Will be true if the change contains nothing but whitespace characters, or
+-   * is empty.
+-   */
+-  void set whitespaceOnly(bool value) {
+-    assert(value != null);
+-    this._whitespaceOnly = value;
+-  }
+-
+-  EditGetStatementCompletionResult(SourceChange change, bool whitespaceOnly) {
+-    this.change = change;
+-    this.whitespaceOnly = whitespaceOnly;
+-  }
+-
+-  factory EditGetStatementCompletionResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      SourceChange change;
+-      if (json.containsKey("change")) {
+-        change = new SourceChange.fromJson(
+-            jsonDecoder, jsonPath + ".change", json["change"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "change");
+-      }
+-      bool whitespaceOnly;
+-      if (json.containsKey("whitespaceOnly")) {
+-        whitespaceOnly = 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 = {};
+-    result["change"] = change.toJson();
+-    result["whitespaceOnly"] = whitespaceOnly;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditGetStatementCompletionResult) {
+-      return change == other.change && whitespaceOnly == other.whitespaceOnly;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, change.hashCode);
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file in which the specified elements are to be made accessible.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The elements to be made accessible in the specified file.
+-   */
+-  List<ImportedElements> get elements => _elements;
+-
+-  /**
+-   * The elements to be made accessible in the specified file.
+-   */
+-  void set elements(List<ImportedElements> value) {
+-    assert(value != null);
+-    this._elements = value;
+-  }
+-
+-  EditImportElementsParams(String file, List<ImportedElements> elements) {
+-    this.file = file;
+-    this.elements = elements;
+-  }
+-
+-  factory EditImportElementsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      List<ImportedElements> elements;
+-      if (json.containsKey("elements")) {
+-        elements = jsonDecoder.decodeList(
+-            jsonPath + ".elements",
+-            json["elements"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["file"] = file;
+-    result["elements"] =
+-        elements.map((ImportedElements value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.importElements", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditImportElementsParams) {
+-      return file == other.file &&
+-          listEqual(elements, other.elements,
+-              (ImportedElements a, ImportedElements b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 unit 
of
+-   * the library containing the file specified in the request, which can be
+-   * different than the file specified in the request if the specified file is
+-   * a part file.
+-   */
+-  SourceFileEdit get edit => _edit;
+-
+-  /**
+-   * The edits to be applied in order to make the specified elements
+-   * accessible. The file to be edited will be the defining compilation unit 
of
+-   * the library containing the file specified in the request, which can be
+-   * different than the file specified in the request if the specified file is
+-   * a part file.
+-   */
+-  void set edit(SourceFileEdit value) {
+-    assert(value != null);
+-    this._edit = value;
+-  }
+-
+-  EditImportElementsResult(SourceFileEdit edit) {
+-    this.edit = edit;
+-  }
+-
+-  factory EditImportElementsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      SourceFileEdit edit;
+-      if (json.containsKey("edit")) {
+-        edit = 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 = {};
+-    result["edit"] = edit.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditImportElementsResult) {
+-      return edit == other.edit;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The file containing the postfix template to be expanded.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  String get key => _key;
+-
+-  /**
+-   * The unique name that identifies the template in use.
+-   */
+-  void set key(String value) {
+-    assert(value != null);
+-    this._key = value;
+-  }
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset used to identify the code to which the template will be
+-   * applied.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  EditIsPostfixCompletionApplicableParams(String file, String key, int 
offset) {
+-    this.file = file;
+-    this.key = key;
+-    this.offset = offset;
+-  }
+-
+-  factory EditIsPostfixCompletionApplicableParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      String key;
+-      if (json.containsKey("key")) {
+-        key = jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "key");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      return new EditIsPostfixCompletionApplicableParams(file, key, offset);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "edit.isPostfixCompletionApplicable params", json);
+-    }
+-  }
+-
+-  factory EditIsPostfixCompletionApplicableParams.fromRequest(Request 
request) {
+-    return new EditIsPostfixCompletionApplicableParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    result["key"] = key;
+-    result["offset"] = offset;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.isPostfixCompletionApplicable", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditIsPostfixCompletionApplicableParams) {
+-      return file == other.file && key == other.key && offset == other.offset;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, key.hashCode);
+-    hash = 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 => _value;
+-
+-  /**
+-   * True if the template can be expanded at the given location.
+-   */
+-  void set value(bool value) {
+-    assert(value != null);
+-    this._value = value;
+-  }
+-
+-  EditIsPostfixCompletionApplicableResult(bool value) {
+-    this.value = value;
+-  }
+-
+-  factory EditIsPostfixCompletionApplicableResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool value;
+-      if (json.containsKey("value")) {
+-        value = 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 = {};
+-    result["value"] = value;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditIsPostfixCompletionApplicableResult) {
+-      return value == other.value;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.listPostfixCompletionTemplates", null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _templates;
+-
+-  /**
+-   * The list of available templates.
+-   */
+-  void set templates(List<PostfixTemplateDescriptor> value) {
+-    assert(value != null);
+-    this._templates = value;
+-  }
+-
+-  EditListPostfixCompletionTemplatesResult(
+-      List<PostfixTemplateDescriptor> templates) {
+-    this.templates = templates;
+-  }
+-
+-  factory EditListPostfixCompletionTemplatesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<PostfixTemplateDescriptor> templates;
+-      if (json.containsKey("templates")) {
+-        templates = jsonDecoder.decodeList(
+-            jsonPath + ".templates",
+-            json["templates"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["templates"] = templates
+-        .map((PostfixTemplateDescriptor value) => value.toJson())
+-        .toList();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditListPostfixCompletionTemplatesResult) {
+-      return listEqual(templates, other.templates,
+-          (PostfixTemplateDescriptor a, PostfixTemplateDescriptor b) => a == 
b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The Dart file to organize directives in.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  EditOrganizeDirectivesParams(String file) {
+-    this.file = file;
+-  }
+-
+-  factory EditOrganizeDirectivesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = 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 = {};
+-    result["file"] = file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.organizeDirectives", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditOrganizeDirectivesParams) {
+-      return file == other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _edit;
+-
+-  /**
+-   * The file edit that is to be applied to the given file to effect the
+-   * organizing.
+-   */
+-  void set edit(SourceFileEdit value) {
+-    assert(value != null);
+-    this._edit = value;
+-  }
+-
+-  EditOrganizeDirectivesResult(SourceFileEdit edit) {
+-    this.edit = edit;
+-  }
+-
+-  factory EditOrganizeDirectivesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      SourceFileEdit edit;
+-      if (json.containsKey("edit")) {
+-        edit = 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 = {};
+-    result["edit"] = edit.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditOrganizeDirectivesResult) {
+-      return edit == other.edit;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The Dart file to sort.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  EditSortMembersParams(String file) {
+-    this.file = file;
+-  }
+-
+-  factory EditSortMembersParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      return new EditSortMembersParams(file);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers params", json);
+-    }
+-  }
+-
+-  factory EditSortMembersParams.fromRequest(Request request) {
+-    return new EditSortMembersParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["file"] = file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "edit.sortMembers", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditSortMembersParams) {
+-      return file == other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _edit;
+-
+-  /**
+-   * The file edit that is to be applied to the given file to effect the
+-   * sorting.
+-   */
+-  void set edit(SourceFileEdit value) {
+-    assert(value != null);
+-    this._edit = value;
+-  }
+-
+-  EditSortMembersResult(SourceFileEdit edit) {
+-    this.edit = edit;
+-  }
+-
+-  factory EditSortMembersResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      SourceFileEdit edit;
+-      if (json.containsKey("edit")) {
+-        edit = 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", json);
+-    }
+-  }
+-
+-  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 = {};
+-    result["edit"] = edit.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is EditSortMembersResult) {
+-      return edit == other.edit;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _file;
+-
+-  /**
+-   * The path of the executable file.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The kind of the executable file.
+-   */
+-  ExecutableKind get kind => _kind;
+-
+-  /**
+-   * The kind of the executable file.
+-   */
+-  void set kind(ExecutableKind value) {
+-    assert(value != null);
+-    this._kind = value;
+-  }
+-
+-  ExecutableFile(String file, ExecutableKind kind) {
+-    this.file = file;
+-    this.kind = kind;
+-  }
+-
+-  factory ExecutableFile.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      ExecutableKind kind;
+-      if (json.containsKey("kind")) {
+-        kind = 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 = {};
+-    result["file"] = file;
+-    result["kind"] = kind.toJson();
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutableFile) {
+-      return file == other.file && kind == other.kind;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 = const ExecutableKind._("CLIENT");
+-
+-  static const ExecutableKind EITHER = const ExecutableKind._("EITHER");
+-
+-  static const ExecutableKind NOT_EXECUTABLE =
+-      const ExecutableKind._("NOT_EXECUTABLE");
+-
+-  static const ExecutableKind SERVER = const ExecutableKind._("SERVER");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<ExecutableKind> VALUES = 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() => "ExecutableKind.$name";
+-
+-  String toJson() => 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 => _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 != null);
+-    this._contextRoot = value;
+-  }
+-
+-  ExecutionCreateContextParams(String contextRoot) {
+-    this.contextRoot = contextRoot;
+-  }
+-
+-  factory ExecutionCreateContextParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String contextRoot;
+-      if (json.containsKey("contextRoot")) {
+-        contextRoot = 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 = {};
+-    result["contextRoot"] = contextRoot;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.createContext", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutionCreateContextParams) {
+-      return contextRoot == other.contextRoot;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 created.
+-   */
+-  String get id => _id;
+-
+-  /**
+-   * The identifier used to refer to the execution context that was created.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  ExecutionCreateContextResult(String id) {
+-    this.id = id;
+-  }
+-
+-  factory ExecutionCreateContextResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = 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 = {};
+-    result["id"] = id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutionCreateContextResult) {
+-      return id == other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _id;
+-
+-  /**
+-   * The identifier of the execution context that is to be deleted.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  ExecutionDeleteContextParams(String id) {
+-    this.id = id;
+-  }
+-
+-  factory ExecutionDeleteContextParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = 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 = {};
+-    result["id"] = id;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.deleteContext", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutionDeleteContextParams) {
+-      return id == other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 be a
+-   * Dart library or an HTML file.
+-   */
+-  String get file => _file;
+-
+-  /**
+-   * The file for which launch data is being provided. This will either be a
+-   * Dart library or an HTML file.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The kind of the executable file. This field is omitted if the file is not
+-   * a Dart file.
+-   */
+-  ExecutableKind get kind => _kind;
+-
+-  /**
+-   * The kind of the executable file. This field is omitted if the file is not
+-   * a Dart file.
+-   */
+-  void set kind(ExecutableKind value) {
+-    this._kind = 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 => _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 = value;
+-  }
+-
+-  ExecutionLaunchDataParams(String file,
+-      {ExecutableKind kind, List<String> referencedFiles}) {
+-    this.file = file;
+-    this.kind = kind;
+-    this.referencedFiles = referencedFiles;
+-  }
+-
+-  factory ExecutionLaunchDataParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      ExecutableKind kind;
+-      if (json.containsKey("kind")) {
+-        kind = new ExecutableKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      }
+-      List<String> referencedFiles;
+-      if (json.containsKey("referencedFiles")) {
+-        referencedFiles = jsonDecoder.decodeList(jsonPath + 
".referencedFiles",
+-            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 = {};
+-    result["file"] = file;
+-    if (kind != null) {
+-      result["kind"] = kind.toJson();
+-    }
+-    if (referencedFiles != null) {
+-      result["referencedFiles"] = referencedFiles;
+-    }
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("execution.launchData", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutionLaunchDataParams) {
+-      return file == other.file &&
+-          kind == other.kind &&
+-          listEqual(referencedFiles, other.referencedFiles,
+-              (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash = 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 mapped.
+-   */
+-  String get id => _id;
+-
+-  /**
+-   * The identifier of the execution context in which the URI is to be mapped.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  /**
+-   * The path of the file to be mapped into a URI.
+-   */
+-  String get file => _file;
+-
+-  /**
+-   * The path of the file to be mapped into a URI.
+-   */
+-  void set file(String value) {
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The URI to be mapped into a file path.
+-   */
+-  String get uri => _uri;
+-
+-  /**
+-   * The URI to be mapped into a file path.
+-   */
+-  void set uri(String value) {
+-    this._uri = value;
+-  }
+-
+-  ExecutionMapUriParams(String id, {String file, String uri}) {
+-    this.id = id;
+-    this.file = file;
+-    this.uri = uri;
+-  }
+-
+-  factory ExecutionMapUriParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      }
+-      String uri;
+-      if (json.containsKey("uri")) {
+-        uri = jsonDecoder.decodeString(jsonPath + ".uri", json["uri"]);
+-      }
+-      return new ExecutionMapUriParams(id, file: file, uri: uri);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri params", json);
+-    }
+-  }
+-
+-  factory ExecutionMapUriParams.fromRequest(Request request) {
+-    return new ExecutionMapUriParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["id"] = id;
+-    if (file != null) {
+-      result["file"] = file;
+-    }
+-    if (uri != null) {
+-      result["uri"] = uri;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.mapUri", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutionMapUriParams) {
+-      return id == other.id && file == other.file && uri == other.uri;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 uri
+-   * field was not given in the request.
+-   */
+-  String get file => _file;
+-
+-  /**
+-   * The file to which the URI was mapped. This field is omitted if the uri
+-   * field was not given in the request.
+-   */
+-  void set file(String value) {
+-    this._file = 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 => _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 = value;
+-  }
+-
+-  ExecutionMapUriResult({String file, String uri}) {
+-    this.file = file;
+-    this.uri = uri;
+-  }
+-
+-  factory ExecutionMapUriResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      }
+-      String uri;
+-      if (json.containsKey("uri")) {
+-        uri = jsonDecoder.decodeString(jsonPath + ".uri", json["uri"]);
+-      }
+-      return new ExecutionMapUriResult(file: file, uri: uri);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri result", json);
+-    }
+-  }
+-
+-  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 = {};
+-    if (file != null) {
+-      result["file"] = file;
+-    }
+-    if (uri != null) {
+-      result["uri"] = uri;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutionMapUriResult) {
+-      return file == other.file && uri == other.uri;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = 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 =
+-      const ExecutionService._("LAUNCH_DATA");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<ExecutionService> VALUES = 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() => "ExecutionService.$name";
+-
+-  String toJson() => 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 => _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  void set subscriptions(List<ExecutionService> value) {
+-    assert(value != null);
+-    this._subscriptions = value;
+-  }
+-
+-  ExecutionSetSubscriptionsParams(List<ExecutionService> subscriptions) {
+-    this.subscriptions = subscriptions;
+-  }
+-
+-  factory ExecutionSetSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<ExecutionService> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions = jsonDecoder.decodeList(
+-            jsonPath + ".subscriptions",
+-            json["subscriptions"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["subscriptions"] =
+-        subscriptions.map((ExecutionService value) => 
value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "execution.setSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExecutionSetSubscriptionsParams) {
+-      return listEqual(subscriptions, other.subscriptions,
+-          (ExecutionService a, ExecutionService b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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, from
+-   * the down most to the up most.
+-   */
+-  List<int> get coveringExpressionOffsets => _coveringExpressionOffsets;
+-
+-  /**
+-   * The offsets of the expressions that cover the specified selection, from
+-   * the down most to the up most.
+-   */
+-  void set coveringExpressionOffsets(List<int> value) {
+-    this._coveringExpressionOffsets = value;
+-  }
+-
+-  /**
+-   * The lengths of the expressions that cover the specified selection, from
+-   * the down most to the up most.
+-   */
+-  List<int> get coveringExpressionLengths => _coveringExpressionLengths;
+-
+-  /**
+-   * The lengths of the expressions that cover the specified selection, from
+-   * the down most to the up most.
+-   */
+-  void set coveringExpressionLengths(List<int> value) {
+-    this._coveringExpressionLengths = value;
+-  }
+-
+-  /**
+-   * The proposed names for the local variable.
+-   */
+-  List<String> get names => _names;
+-
+-  /**
+-   * The proposed names for the local variable.
+-   */
+-  void set names(List<String> value) {
+-    assert(value != null);
+-    this._names = value;
+-  }
+-
+-  /**
+-   * The offsets of the expressions that would be replaced by a reference to
+-   * the variable.
+-   */
+-  List<int> get offsets => _offsets;
+-
+-  /**
+-   * The offsets of the expressions that would be replaced by a reference to
+-   * the variable.
+-   */
+-  void set offsets(List<int> value) {
+-    assert(value != null);
+-    this._offsets = 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], then 
the
+-   * length of that expression is lengths[i].
+-   */
+-  List<int> get lengths => _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], then 
the
+-   * length of that expression is lengths[i].
+-   */
+-  void set lengths(List<int> value) {
+-    assert(value != null);
+-    this._lengths = value;
+-  }
+-
+-  ExtractLocalVariableFeedback(
+-      List<String> names, List<int> offsets, List<int> lengths,
+-      {List<int> coveringExpressionOffsets,
+-      List<int> coveringExpressionLengths}) {
+-    this.coveringExpressionOffsets = coveringExpressionOffsets;
+-    this.coveringExpressionLengths = coveringExpressionLengths;
+-    this.names = names;
+-    this.offsets = offsets;
+-    this.lengths = lengths;
+-  }
+-
+-  factory ExtractLocalVariableFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<int> coveringExpressionOffsets;
+-      if (json.containsKey("coveringExpressionOffsets")) {
+-        coveringExpressionOffsets = jsonDecoder.decodeList(
+-            jsonPath + ".coveringExpressionOffsets",
+-            json["coveringExpressionOffsets"],
+-            jsonDecoder.decodeInt);
+-      }
+-      List<int> coveringExpressionLengths;
+-      if (json.containsKey("coveringExpressionLengths")) {
+-        coveringExpressionLengths = jsonDecoder.decodeList(
+-            jsonPath + ".coveringExpressionLengths",
+-            json["coveringExpressionLengths"],
+-            jsonDecoder.decodeInt);
+-      }
+-      List<String> names;
+-      if (json.containsKey("names")) {
+-        names = jsonDecoder.decodeList(
+-            jsonPath + ".names", json["names"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "names");
+-      }
+-      List<int> offsets;
+-      if (json.containsKey("offsets")) {
+-        offsets = jsonDecoder.decodeList(
+-            jsonPath + ".offsets", json["offsets"], jsonDecoder.decodeInt);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offsets");
+-      }
+-      List<int> lengths;
+-      if (json.containsKey("lengths")) {
+-        lengths = 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 = {};
+-    if (coveringExpressionOffsets != null) {
+-      result["coveringExpressionOffsets"] = coveringExpressionOffsets;
+-    }
+-    if (coveringExpressionLengths != null) {
+-      result["coveringExpressionLengths"] = coveringExpressionLengths;
+-    }
+-    result["names"] = names;
+-    result["offsets"] = offsets;
+-    result["lengths"] = lengths;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExtractLocalVariableFeedback) {
+-      return listEqual(coveringExpressionOffsets,
+-              other.coveringExpressionOffsets, (int a, int b) => a == b) &&
+-          listEqual(coveringExpressionLengths, 
other.coveringExpressionLengths,
+-              (int a, int b) => a == b) &&
+-          listEqual(names, other.names, (String a, String b) => a == b) &&
+-          listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
+-          listEqual(lengths, other.lengths, (int a, int b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, coveringExpressionOffsets.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, coveringExpressionLengths.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, names.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offsets.hashCode);
+-    hash = 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 => _name;
+-
+-  /**
+-   * The name that the local variable should be given.
+-   */
+-  void set name(String value) {
+-    assert(value != null);
+-    this._name = 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 local
+-   * variable. The expression used to initiate the refactoring will always be
+-   * replaced.
+-   */
+-  bool get extractAll => _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 local
+-   * variable. The expression used to initiate the refactoring will always be
+-   * replaced.
+-   */
+-  void set extractAll(bool value) {
+-    assert(value != null);
+-    this._extractAll = value;
+-  }
+-
+-  ExtractLocalVariableOptions(String name, bool extractAll) {
+-    this.name = name;
+-    this.extractAll = extractAll;
+-  }
+-
+-  factory ExtractLocalVariableOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name = jsonDecoder.decodeString(jsonPath + ".name", json["name"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      bool extractAll;
+-      if (json.containsKey("extractAll")) {
+-        extractAll = 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 = {};
+-    result["name"] = name;
+-    result["extractAll"] = extractAll;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExtractLocalVariableOptions) {
+-      return name == other.name && extractAll == other.extractAll;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash = 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 will be
+-   * extracted.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset to the beginning of the expression or statements that will be
+-   * extracted.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the expression or statements that will be extracted.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the expression or statements that will be extracted.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get returnType => _returnType;
+-
+-  /**
+-   * 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.
+-   */
+-  void set returnType(String value) {
+-    assert(value != null);
+-    this._returnType = value;
+-  }
+-
+-  /**
+-   * The proposed names for the method.
+-   */
+-  List<String> get names => _names;
+-
+-  /**
+-   * The proposed names for the method.
+-   */
+-  void set names(List<String> value) {
+-    assert(value != null);
+-    this._names = value;
+-  }
+-
+-  /**
+-   * True if a getter could be created rather than a method.
+-   */
+-  bool get canCreateGetter => _canCreateGetter;
+-
+-  /**
+-   * True if a getter could be created rather than a method.
+-   */
+-  void set canCreateGetter(bool value) {
+-    assert(value != null);
+-    this._canCreateGetter = value;
+-  }
+-
+-  /**
+-   * The proposed parameters for the method.
+-   */
+-  List<RefactoringMethodParameter> get parameters => _parameters;
+-
+-  /**
+-   * The proposed parameters for the method.
+-   */
+-  void set parameters(List<RefactoringMethodParameter> value) {
+-    assert(value != null);
+-    this._parameters = value;
+-  }
+-
+-  /**
+-   * The offsets of the expressions or statements that would be replaced by an
+-   * invocation of the method.
+-   */
+-  List<int> get offsets => _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 != null);
+-    this._offsets = 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 offset of
+-   * that expression is offsets[i], then the length of that expression is
+-   * lengths[i].
+-   */
+-  List<int> get lengths => _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 offset of
+-   * that expression is offsets[i], then the length of that expression is
+-   * lengths[i].
+-   */
+-  void set lengths(List<int> value) {
+-    assert(value != null);
+-    this._lengths = value;
+-  }
+-
+-  ExtractMethodFeedback(
+-      int offset,
+-      int length,
+-      String returnType,
+-      List<String> names,
+-      bool canCreateGetter,
+-      List<RefactoringMethodParameter> parameters,
+-      List<int> offsets,
+-      List<int> lengths) {
+-    this.offset = offset;
+-    this.length = length;
+-    this.returnType = returnType;
+-    this.names = names;
+-    this.canCreateGetter = canCreateGetter;
+-    this.parameters = parameters;
+-    this.offsets = offsets;
+-    this.lengths = lengths;
+-  }
+-
+-  factory ExtractMethodFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String returnType;
+-      if (json.containsKey("returnType")) {
+-        returnType = jsonDecoder.decodeString(
+-            jsonPath + ".returnType", json["returnType"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "returnType");
+-      }
+-      List<String> names;
+-      if (json.containsKey("names")) {
+-        names = jsonDecoder.decodeList(
+-            jsonPath + ".names", json["names"], jsonDecoder.decodeString);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "names");
+-      }
+-      bool canCreateGetter;
+-      if (json.containsKey("canCreateGetter")) {
+-        canCreateGetter = jsonDecoder.decodeBool(
+-            jsonPath + ".canCreateGetter", json["canCreateGetter"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "canCreateGetter");
+-      }
+-      List<RefactoringMethodParameter> parameters;
+-      if (json.containsKey("parameters")) {
+-        parameters = jsonDecoder.decodeList(
+-            jsonPath + ".parameters",
+-            json["parameters"],
+-            (String jsonPath, Object json) =>
+-                new RefactoringMethodParameter.fromJson(
+-                    jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "parameters");
+-      }
+-      List<int> offsets;
+-      if (json.containsKey("offsets")) {
+-        offsets = jsonDecoder.decodeList(
+-            jsonPath + ".offsets", json["offsets"], jsonDecoder.decodeInt);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offsets");
+-      }
+-      List<int> lengths;
+-      if (json.containsKey("lengths")) {
+-        lengths = 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 = {};
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    result["returnType"] = returnType;
+-    result["names"] = names;
+-    result["canCreateGetter"] = canCreateGetter;
+-    result["parameters"] = parameters
+-        .map((RefactoringMethodParameter value) => value.toJson())
+-        .toList();
+-    result["offsets"] = offsets;
+-    result["lengths"] = lengths;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExtractMethodFeedback) {
+-      return offset == other.offset &&
+-          length == other.length &&
+-          returnType == other.returnType &&
+-          listEqual(names, other.names, (String a, String b) => a == b) &&
+-          canCreateGetter == other.canCreateGetter &&
+-          listEqual(
+-              parameters,
+-              other.parameters,
+-              (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
+-                  a == b) &&
+-          listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
+-          listEqual(lengths, other.lengths, (int a, int b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, returnType.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, names.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, canCreateGetter.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, parameters.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offsets.hashCode);
+-    hash = 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 => _returnType;
+-
+-  /**
+-   * The return type that should be defined for the method.
+-   */
+-  void set returnType(String value) {
+-    assert(value != null);
+-    this._returnType = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  bool get createGetter => _createGetter;
+-
+-  /**
+-   * 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.
+-   */
+-  void set createGetter(bool value) {
+-    assert(value != null);
+-    this._createGetter = value;
+-  }
+-
+-  /**
+-   * The name that the method should be given.
+-   */
+-  String get name => _name;
+-
+-  /**
+-   * The name that the method should be given.
+-   */
+-  void set name(String value) {
+-    assert(value != null);
+-    this._name = 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 follows a
+-   * NAMED parameter.
+-   *
+-   * - To change the order and/or update proposed parameters, add parameters
+-   *   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 => _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 follows a
+-   * NAMED parameter.
+-   *
+-   * - To change the order and/or update proposed parameters, add parameters
+-   *   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 != null);
+-    this._parameters = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  bool get extractAll => _extractAll;
+-
+-  /**
+-   * 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.
+-   */
+-  void set extractAll(bool value) {
+-    assert(value != null);
+-    this._extractAll = value;
+-  }
+-
+-  ExtractMethodOptions(String returnType, bool createGetter, String name,
+-      List<RefactoringMethodParameter> parameters, bool extractAll) {
+-    this.returnType = returnType;
+-    this.createGetter = createGetter;
+-    this.name = name;
+-    this.parameters = parameters;
+-    this.extractAll = extractAll;
+-  }
+-
+-  factory ExtractMethodOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String returnType;
+-      if (json.containsKey("returnType")) {
+-        returnType = jsonDecoder.decodeString(
+-            jsonPath + ".returnType", json["returnType"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "returnType");
+-      }
+-      bool createGetter;
+-      if (json.containsKey("createGetter")) {
+-        createGetter = jsonDecoder.decodeBool(
+-            jsonPath + ".createGetter", json["createGetter"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "createGetter");
+-      }
+-      String name;
+-      if (json.containsKey("name")) {
+-        name = jsonDecoder.decodeString(jsonPath + ".name", json["name"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      List<RefactoringMethodParameter> parameters;
+-      if (json.containsKey("parameters")) {
+-        parameters = jsonDecoder.decodeList(
+-            jsonPath + ".parameters",
+-            json["parameters"],
+-            (String jsonPath, Object json) =>
+-                new RefactoringMethodParameter.fromJson(
+-                    jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "parameters");
+-      }
+-      bool extractAll;
+-      if (json.containsKey("extractAll")) {
+-        extractAll = 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 = {};
+-    result["returnType"] = returnType;
+-    result["createGetter"] = createGetter;
+-    result["name"] = name;
+-    result["parameters"] = parameters
+-        .map((RefactoringMethodParameter value) => value.toJson())
+-        .toList();
+-    result["extractAll"] = extractAll;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ExtractMethodOptions) {
+-      return returnType == other.returnType &&
+-          createGetter == other.createGetter &&
+-          name == other.name &&
+-          listEqual(
+-              parameters,
+-              other.parameters,
+-              (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
+-                  a == b) &&
+-          extractAll == other.extractAll;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, returnType.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, createGetter.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, parameters.hashCode);
+-    hash = 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 = const FileKind._("LIBRARY");
+-
+-  static const FileKind PART = const FileKind._("PART");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<FileKind> VALUES = 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() => "FileKind.$name";
+-
+-  String toJson() => name;
+-}
+-
+-/**
+- * GeneralAnalysisService
+- *
+- * enum {
+- *   ANALYZED_FILES
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class GeneralAnalysisService implements Enum {
+-  static const GeneralAnalysisService ANALYZED_FILES =
+-      const GeneralAnalysisService._("ANALYZED_FILES");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<GeneralAnalysisService> VALUES =
+-      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() => "GeneralAnalysisService.$name";
+-
+-  String toJson() => 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 
position
+-   * and has the same hover information as the cursor position.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the range of characters that encompasses the cursor 
position
+-   * and has the same hover information as the cursor position.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the range of characters that encompasses the cursor 
position
+-   * and has the same hover information as the cursor position.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the range of characters that encompasses the cursor 
position
+-   * and has the same hover information as the cursor position.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = 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 file.
+-   */
+-  String get containingLibraryPath => _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 file.
+-   */
+-  void set containingLibraryPath(String value) {
+-    this._containingLibraryPath = 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 => _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 = 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 => _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 = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get dartdoc => _dartdoc;
+-
+-  /**
+-   * 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.
+-   */
+-  void set dartdoc(String value) {
+-    this._dartdoc = value;
+-  }
+-
+-  /**
+-   * A human-readable description of the element being referenced. This data 
is
+-   * omitted if there is no referenced element.
+-   */
+-  String get elementDescription => _elementDescription;
+-
+-  /**
+-   * A human-readable description of the element being referenced. This data 
is
+-   * omitted if there is no referenced element.
+-   */
+-  void set elementDescription(String value) {
+-    this._elementDescription = 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 => _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 = value;
+-  }
+-
+-  /**
+-   * True if the referenced element is deprecated.
+-   */
+-  bool get isDeprecated => _isDeprecated;
+-
+-  /**
+-   * True if the referenced element is deprecated.
+-   */
+-  void set isDeprecated(bool value) {
+-    this._isDeprecated = 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 => _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 = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get propagatedType => _propagatedType;
+-
+-  /**
+-   * 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.
+-   */
+-  void set propagatedType(String value) {
+-    this._propagatedType = 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 => _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 = 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 = offset;
+-    this.length = length;
+-    this.containingLibraryPath = containingLibraryPath;
+-    this.containingLibraryName = containingLibraryName;
+-    this.containingClassDescription = containingClassDescription;
+-    this.dartdoc = dartdoc;
+-    this.elementDescription = elementDescription;
+-    this.elementKind = elementKind;
+-    this.isDeprecated = isDeprecated;
+-    this.parameter = parameter;
+-    this.propagatedType = propagatedType;
+-    this.staticType = staticType;
+-  }
+-
+-  factory HoverInformation.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String containingLibraryPath;
+-      if (json.containsKey("containingLibraryPath")) {
+-        containingLibraryPath = jsonDecoder.decodeString(
+-            jsonPath + ".containingLibraryPath", 
json["containingLibraryPath"]);
+-      }
+-      String containingLibraryName;
+-      if (json.containsKey("containingLibraryName")) {
+-        containingLibraryName = jsonDecoder.decodeString(
+-            jsonPath + ".containingLibraryName", 
json["containingLibraryName"]);
+-      }
+-      String containingClassDescription;
+-      if (json.containsKey("containingClassDescription")) {
+-        containingClassDescription = jsonDecoder.decodeString(
+-            jsonPath + ".containingClassDescription",
+-            json["containingClassDescription"]);
+-      }
+-      String dartdoc;
+-      if (json.containsKey("dartdoc")) {
+-        dartdoc =
+-            jsonDecoder.decodeString(jsonPath + ".dartdoc", json["dartdoc"]);
+-      }
+-      String elementDescription;
+-      if (json.containsKey("elementDescription")) {
+-        elementDescription = jsonDecoder.decodeString(
+-            jsonPath + ".elementDescription", json["elementDescription"]);
+-      }
+-      String elementKind;
+-      if (json.containsKey("elementKind")) {
+-        elementKind = jsonDecoder.decodeString(
+-            jsonPath + ".elementKind", json["elementKind"]);
+-      }
+-      bool isDeprecated;
+-      if (json.containsKey("isDeprecated")) {
+-        isDeprecated = jsonDecoder.decodeBool(
+-            jsonPath + ".isDeprecated", json["isDeprecated"]);
+-      }
+-      String parameter;
+-      if (json.containsKey("parameter")) {
+-        parameter = jsonDecoder.decodeString(
+-            jsonPath + ".parameter", json["parameter"]);
+-      }
+-      String propagatedType;
+-      if (json.containsKey("propagatedType")) {
+-        propagatedType = jsonDecoder.decodeString(
+-            jsonPath + ".propagatedType", json["propagatedType"]);
+-      }
+-      String staticType;
+-      if (json.containsKey("staticType")) {
+-        staticType = 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 = {};
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    if (containingLibraryPath != null) {
+-      result["containingLibraryPath"] = containingLibraryPath;
+-    }
+-    if (containingLibraryName != null) {
+-      result["containingLibraryName"] = containingLibraryName;
+-    }
+-    if (containingClassDescription != null) {
+-      result["containingClassDescription"] = containingClassDescription;
+-    }
+-    if (dartdoc != null) {
+-      result["dartdoc"] = dartdoc;
+-    }
+-    if (elementDescription != null) {
+-      result["elementDescription"] = elementDescription;
+-    }
+-    if (elementKind != null) {
+-      result["elementKind"] = elementKind;
+-    }
+-    if (isDeprecated != null) {
+-      result["isDeprecated"] = isDeprecated;
+-    }
+-    if (parameter != null) {
+-      result["parameter"] = parameter;
+-    }
+-    if (propagatedType != null) {
+-      result["propagatedType"] = propagatedType;
+-    }
+-    if (staticType != null) {
+-      result["staticType"] = staticType;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is HoverInformation) {
+-      return offset == other.offset &&
+-          length == other.length &&
+-          containingLibraryPath == other.containingLibraryPath &&
+-          containingLibraryName == other.containingLibraryName &&
+-          containingClassDescription == other.containingClassDescription &&
+-          dartdoc == other.dartdoc &&
+-          elementDescription == other.elementDescription &&
+-          elementKind == other.elementKind &&
+-          isDeprecated == other.isDeprecated &&
+-          parameter == other.parameter &&
+-          propagatedType == other.propagatedType &&
+-          staticType == other.staticType;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, containingLibraryPath.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, containingLibraryName.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, containingClassDescription.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, dartdoc.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, elementDescription.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, elementKind.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, isDeprecated.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, parameter.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, propagatedType.hashCode);
+-    hash = 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 => _offset;
+-
+-  /**
+-   * The offset of the name of the implemented class.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the name of the implemented class.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the name of the implemented class.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  ImplementedClass(int offset, int length) {
+-    this.offset = offset;
+-    this.length = length;
+-  }
+-
+-  factory ImplementedClass.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } 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 = {};
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ImplementedClass) {
+-      return offset == other.offset && length == other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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 => _offset;
+-
+-  /**
+-   * The offset of the name of the implemented member.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the name of the implemented member.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the name of the implemented member.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  ImplementedMember(int offset, int length) {
+-    this.offset = offset;
+-    this.length = length;
+-  }
+-
+-  factory ImplementedMember.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } 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 = {};
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ImplementedMember) {
+-      return offset == other.offset && length == other.length;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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 => _path;
+-
+-  /**
+-   * The absolute and normalized path of the file containing the library.
+-   */
+-  void set path(String value) {
+-    assert(value != null);
+-    this._path = value;
+-  }
+-
+-  /**
+-   * The prefix that was used when importing the library into the original
+-   * source.
+-   */
+-  String get prefix => _prefix;
+-
+-  /**
+-   * The prefix that was used when importing the library into the original
+-   * source.
+-   */
+-  void set prefix(String value) {
+-    assert(value != null);
+-    this._prefix = value;
+-  }
+-
+-  /**
+-   * The names of the elements imported from the library.
+-   */
+-  List<String> get elements => _elements;
+-
+-  /**
+-   * The names of the elements imported from the library.
+-   */
+-  void set elements(List<String> value) {
+-    assert(value != null);
+-    this._elements = value;
+-  }
+-
+-  ImportedElements(String path, String prefix, List<String> elements) {
+-    this.path = path;
+-    this.prefix = prefix;
+-    this.elements = elements;
+-  }
+-
+-  factory ImportedElements.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String path;
+-      if (json.containsKey("path")) {
+-        path = jsonDecoder.decodeString(jsonPath + ".path", json["path"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "path");
+-      }
+-      String prefix;
+-      if (json.containsKey("prefix")) {
+-        prefix = jsonDecoder.decodeString(jsonPath + ".prefix", 
json["prefix"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "prefix");
+-      }
+-      List<String> elements;
+-      if (json.containsKey("elements")) {
+-        elements = jsonDecoder.decodeList(
+-            jsonPath + ".elements", json["elements"], 
jsonDecoder.decodeString);
+-      } 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 = {};
+-    result["path"] = path;
+-    result["prefix"] = prefix;
+-    result["elements"] = elements;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ImportedElements) {
+-      return path == other.path &&
+-          prefix == other.prefix &&
+-          listEqual(elements, other.elements, (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, path.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, prefix.hashCode);
+-    hash = 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 => _name;
+-
+-  /**
+-   * The name of the variable being inlined.
+-   */
+-  void set name(String value) {
+-    assert(value != null);
+-    this._name = value;
+-  }
+-
+-  /**
+-   * The number of times the variable occurs.
+-   */
+-  int get occurrences => _occurrences;
+-
+-  /**
+-   * The number of times the variable occurs.
+-   */
+-  void set occurrences(int value) {
+-    assert(value != null);
+-    this._occurrences = value;
+-  }
+-
+-  InlineLocalVariableFeedback(String name, int occurrences) {
+-    this.name = name;
+-    this.occurrences = occurrences;
+-  }
+-
+-  factory InlineLocalVariableFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name = jsonDecoder.decodeString(jsonPath + ".name", json["name"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      int occurrences;
+-      if (json.containsKey("occurrences")) {
+-        occurrences = 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 = {};
+-    result["name"] = name;
+-    result["occurrences"] = occurrences;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is InlineLocalVariableFeedback) {
+-      return name == other.name && occurrences == other.occurrences;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash = 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 ==(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 class
+-   * member is being inlined, this field will be absent.
+-   */
+-  String get className => _className;
+-
+-  /**
+-   * The name of the class enclosing the method being inlined. If not a class
+-   * member is being inlined, this field will be absent.
+-   */
+-  void set className(String value) {
+-    this._className = value;
+-  }
+-
+-  /**
+-   * The name of the method (or function) being inlined.
+-   */
+-  String get methodName => _methodName;
+-
+-  /**
+-   * The name of the method (or function) being inlined.
+-   */
+-  void set methodName(String value) {
+-    assert(value != null);
+-    this._methodName = value;
+-  }
+-
+-  /**
+-   * True if the declaration of the method is selected. So all references
+-   * should be inlined.
+-   */
+-  bool get isDeclaration => _isDeclaration;
+-
+-  /**
+-   * True if the declaration of the method is selected. So all references
+-   * should be inlined.
+-   */
+-  void set isDeclaration(bool value) {
+-    assert(value != null);
+-    this._isDeclaration = value;
+-  }
+-
+-  InlineMethodFeedback(String methodName, bool isDeclaration,
+-      {String className}) {
+-    this.className = className;
+-    this.methodName = methodName;
+-    this.isDeclaration = isDeclaration;
+-  }
+-
+-  factory InlineMethodFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String className;
+-      if (json.containsKey("className")) {
+-        className = jsonDecoder.decodeString(
+-            jsonPath + ".className", json["className"]);
+-      }
+-      String methodName;
+-      if (json.containsKey("methodName")) {
+-        methodName = jsonDecoder.decodeString(
+-            jsonPath + ".methodName", json["methodName"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "methodName");
+-      }
+-      bool isDeclaration;
+-      if (json.containsKey("isDeclaration")) {
+-        isDeclaration = 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 = {};
+-    if (className != null) {
+-      result["className"] = className;
+-    }
+-    result["methodName"] = methodName;
+-    result["isDeclaration"] = isDeclaration;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is InlineMethodFeedback) {
+-      return className == other.className &&
+-          methodName == other.methodName &&
+-          isDeclaration == other.isDeclaration;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, className.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, methodName.hashCode);
+-    hash = 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 if 
this
+-   * field is true and inlineAll is false.
+-   */
+-  bool get deleteSource => _deleteSource;
+-
+-  /**
+-   * True if the method being inlined should be removed. It is an error if 
this
+-   * field is true and inlineAll is false.
+-   */
+-  void set deleteSource(bool value) {
+-    assert(value != null);
+-    this._deleteSource = 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 inlined.
+-   */
+-  bool get inlineAll => _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 inlined.
+-   */
+-  void set inlineAll(bool value) {
+-    assert(value != null);
+-    this._inlineAll = value;
+-  }
+-
+-  InlineMethodOptions(bool deleteSource, bool inlineAll) {
+-    this.deleteSource = deleteSource;
+-    this.inlineAll = inlineAll;
+-  }
+-
+-  factory InlineMethodOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool deleteSource;
+-      if (json.containsKey("deleteSource")) {
+-        deleteSource = jsonDecoder.decodeBool(
+-            jsonPath + ".deleteSource", json["deleteSource"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "deleteSource");
+-      }
+-      bool inlineAll;
+-      if (json.containsKey("inlineAll")) {
+-        inlineAll =
+-            jsonDecoder.decodeBool(jsonPath + ".inlineAll", 
json["inlineAll"]);
+-      } 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 = {};
+-    result["deleteSource"] = deleteSource;
+-    result["inlineAll"] = inlineAll;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is InlineMethodOptions) {
+-      return deleteSource == other.deleteSource && inlineAll == 
other.inlineAll;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, deleteSource.hashCode);
+-    hash = 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 being
+-   * requested.
+-   */
+-  String get file => _file;
+-
+-  /**
+-   * The file containing the code for which the Kythe Entry objects are being
+-   * requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  KytheGetKytheEntriesParams(String file) {
+-    this.file = file;
+-  }
+-
+-  factory KytheGetKytheEntriesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = 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 = {};
+-    result["file"] = file;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "kythe.getKytheEntries", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is KytheGetKytheEntriesParams) {
+-      return file == other.file;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _entries;
+-
+-  /**
+-   * The list of KytheEntry objects for the queried file.
+-   */
+-  void set entries(List<KytheEntry> value) {
+-    assert(value != null);
+-    this._entries = value;
+-  }
+-
+-  /**
+-   * The set of files paths that were required, but not in the file system, to
+-   * give a complete and accurate Kythe graph for the file. This could be due
+-   * to a referenced file that does not exist or generated files not being
+-   * generated or passed before the call to "getKytheEntries".
+-   */
+-  List<String> get files => _files;
+-
+-  /**
+-   * The set of files paths that were required, but not in the file system, to
+-   * give a complete and accurate Kythe graph for the file. This could be due
+-   * to a referenced file that does not exist or generated files not being
+-   * generated or passed before the call to "getKytheEntries".
+-   */
+-  void set files(List<String> value) {
+-    assert(value != null);
+-    this._files = value;
+-  }
+-
+-  KytheGetKytheEntriesResult(List<KytheEntry> entries, List<String> files) {
+-    this.entries = entries;
+-    this.files = files;
+-  }
+-
+-  factory KytheGetKytheEntriesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<KytheEntry> entries;
+-      if (json.containsKey("entries")) {
+-        entries = jsonDecoder.decodeList(
+-            jsonPath + ".entries",
+-            json["entries"],
+-            (String jsonPath, Object json) =>
+-                new KytheEntry.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "entries");
+-      }
+-      List<String> files;
+-      if (json.containsKey("files")) {
+-        files = 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 = {};
+-    result["entries"] =
+-        entries.map((KytheEntry value) => value.toJson()).toList();
+-    result["files"] = files;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is KytheGetKytheEntriesResult) {
+-      return listEqual(
+-              entries, other.entries, (KytheEntry a, KytheEntry b) => a == b) 
&&
+-          listEqual(files, other.files, (String a, String b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, entries.hashCode);
+-    hash = 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 ==(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 => _newFile;
+-
+-  /**
+-   * The new file path to which the given file is being moved.
+-   */
+-  void set newFile(String value) {
+-    assert(value != null);
+-    this._newFile = value;
+-  }
+-
+-  MoveFileOptions(String newFile) {
+-    this.newFile = newFile;
+-  }
+-
+-  factory MoveFileOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String newFile;
+-      if (json.containsKey("newFile")) {
+-        newFile =
+-            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 = {};
+-    result["newFile"] = newFile;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is MoveFileOptions) {
+-      return newFile == other.newFile;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _element;
+-
+-  /**
+-   * The element that is being overridden.
+-   */
+-  void set element(Element value) {
+-    assert(value != null);
+-    this._element = value;
+-  }
+-
+-  /**
+-   * The name of the class in which the member is defined.
+-   */
+-  String get className => _className;
+-
+-  /**
+-   * The name of the class in which the member is defined.
+-   */
+-  void set className(String value) {
+-    assert(value != null);
+-    this._className = value;
+-  }
+-
+-  OverriddenMember(Element element, String className) {
+-    this.element = element;
+-    this.className = className;
+-  }
+-
+-  factory OverriddenMember.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      Element element;
+-      if (json.containsKey("element")) {
+-        element = new Element.fromJson(
+-            jsonDecoder, jsonPath + ".element", json["element"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "element");
+-      }
+-      String className;
+-      if (json.containsKey("className")) {
+-        className = 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 = {};
+-    result["element"] = element.toJson();
+-    result["className"] = className;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is OverriddenMember) {
+-      return element == other.element && className == other.className;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, element.hashCode);
+-    hash = 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 => _offset;
+-
+-  /**
+-   * The offset of the name of the overriding member.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the name of the overriding member.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the name of the overriding member.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  OverriddenMember get superclassMember => _superclassMember;
+-
+-  /**
+-   * 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.
+-   */
+-  void set superclassMember(OverriddenMember value) {
+-    this._superclassMember = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  List<OverriddenMember> get interfaceMembers => _interfaceMembers;
+-
+-  /**
+-   * 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.
+-   */
+-  void set interfaceMembers(List<OverriddenMember> value) {
+-    this._interfaceMembers = value;
+-  }
+-
+-  Override(int offset, int length,
+-      {OverriddenMember superclassMember,
+-      List<OverriddenMember> interfaceMembers}) {
+-    this.offset = offset;
+-    this.length = length;
+-    this.superclassMember = superclassMember;
+-    this.interfaceMembers = interfaceMembers;
+-  }
+-
+-  factory Override.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      OverriddenMember superclassMember;
+-      if (json.containsKey("superclassMember")) {
+-        superclassMember = new OverriddenMember.fromJson(jsonDecoder,
+-            jsonPath + ".superclassMember", json["superclassMember"]);
+-      }
+-      List<OverriddenMember> interfaceMembers;
+-      if (json.containsKey("interfaceMembers")) {
+-        interfaceMembers = jsonDecoder.decodeList(
+-            jsonPath + ".interfaceMembers",
+-            json["interfaceMembers"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    if (superclassMember != null) {
+-      result["superclassMember"] = superclassMember.toJson();
+-    }
+-    if (interfaceMembers != null) {
+-      result["interfaceMembers"] = interfaceMembers
+-          .map((OverriddenMember value) => value.toJson())
+-          .toList();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is Override) {
+-      return offset == other.offset &&
+-          length == other.length &&
+-          superclassMember == other.superclassMember &&
+-          listEqual(interfaceMembers, other.interfaceMembers,
+-              (OverriddenMember a, OverriddenMember b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, superclassMember.hashCode);
+-    hash = 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 => _name;
+-
+-  /**
+-   * The template name, shown in the UI.
+-   */
+-  void set name(String value) {
+-    assert(value != null);
+-    this._name = value;
+-  }
+-
+-  /**
+-   * The unique template key, not shown in the UI.
+-   */
+-  String get key => _key;
+-
+-  /**
+-   * The unique template key, not shown in the UI.
+-   */
+-  void set key(String value) {
+-    assert(value != null);
+-    this._key = value;
+-  }
+-
+-  /**
+-   * A short example of the transformation performed when the template is
+-   * applied.
+-   */
+-  String get example => _example;
+-
+-  /**
+-   * A short example of the transformation performed when the template is
+-   * applied.
+-   */
+-  void set example(String value) {
+-    assert(value != null);
+-    this._example = value;
+-  }
+-
+-  PostfixTemplateDescriptor(String name, String key, String example) {
+-    this.name = name;
+-    this.key = key;
+-    this.example = example;
+-  }
+-
+-  factory PostfixTemplateDescriptor.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name = jsonDecoder.decodeString(jsonPath + ".name", json["name"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "name");
+-      }
+-      String key;
+-      if (json.containsKey("key")) {
+-        key = jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "key");
+-      }
+-      String example;
+-      if (json.containsKey("example")) {
+-        example =
+-            jsonDecoder.decodeString(jsonPath + ".example", json["example"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "example");
+-      }
+-      return new PostfixTemplateDescriptor(name, key, example);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "PostfixTemplateDescriptor", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["name"] = name;
+-    result["key"] = key;
+-    result["example"] = example;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is PostfixTemplateDescriptor) {
+-      return name == other.name && key == other.key && example == 
other.example;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, name.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, key.hashCode);
+-    hash = 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 package
+-   * directories.
+-   */
+-  bool get isListingPackageDirs => _isListingPackageDirs;
+-
+-  /**
+-   * True if the server is currently running pub to produce a list of package
+-   * directories.
+-   */
+-  void set isListingPackageDirs(bool value) {
+-    assert(value != null);
+-    this._isListingPackageDirs = value;
+-  }
+-
+-  PubStatus(bool isListingPackageDirs) {
+-    this.isListingPackageDirs = isListingPackageDirs;
+-  }
+-
+-  factory PubStatus.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool isListingPackageDirs;
+-      if (json.containsKey("isListingPackageDirs")) {
+-        isListingPackageDirs = jsonDecoder.decodeBool(
+-            jsonPath + ".isListingPackageDirs", json["isListingPackageDirs"]);
+-      } 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 = {};
+-    result["isListingPackageDirs"] = isListingPackageDirs;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is PubStatus) {
+-      return isListingPackageDirs == other.isListingPackageDirs;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 
responseJson) {
+-    return refactoringFeedbackFromJson(
+-        jsonDecoder, jsonPath, json, responseJson);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is RefactoringFeedback) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 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 
jsonPath,
+-      Object json, RefactoringKind kind) {
+-    return refactoringOptionsFromJson(jsonDecoder, jsonPath, json, kind);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is RefactoringOptions) {
+-      return true;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 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 => _offset;
+-
+-  /**
+-   * The offset to the beginning of the name selected to be renamed.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * The length of the name selected to be renamed.
+-   */
+-  int get length => _length;
+-
+-  /**
+-   * The length of the name selected to be renamed.
+-   */
+-  void set length(int value) {
+-    assert(value != null);
+-    this._length = value;
+-  }
+-
+-  /**
+-   * The human-readable description of the kind of element being renamed (such
+-   * as "class" or "function type alias").
+-   */
+-  String get elementKindName => _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 != null);
+-    this._elementKindName = value;
+-  }
+-
+-  /**
+-   * The old name of the element before the refactoring.
+-   */
+-  String get oldName => _oldName;
+-
+-  /**
+-   * The old name of the element before the refactoring.
+-   */
+-  void set oldName(String value) {
+-    assert(value != null);
+-    this._oldName = value;
+-  }
+-
+-  RenameFeedback(
+-      int offset, int length, String elementKindName, String oldName) {
+-    this.offset = offset;
+-    this.length = length;
+-    this.elementKindName = elementKindName;
+-    this.oldName = oldName;
+-  }
+-
+-  factory RenameFeedback.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      int length;
+-      if (json.containsKey("length")) {
+-        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "length");
+-      }
+-      String elementKindName;
+-      if (json.containsKey("elementKindName")) {
+-        elementKindName = jsonDecoder.decodeString(
+-            jsonPath + ".elementKindName", json["elementKindName"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "elementKindName");
+-      }
+-      String oldName;
+-      if (json.containsKey("oldName")) {
+-        oldName =
+-            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 = {};
+-    result["offset"] = offset;
+-    result["length"] = length;
+-    result["elementKindName"] = elementKindName;
+-    result["oldName"] = oldName;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is RenameFeedback) {
+-      return offset == other.offset &&
+-          length == other.length &&
+-          elementKindName == other.elementKindName &&
+-          oldName == other.oldName;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, elementKindName.hashCode);
+-    hash = 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 => _newName;
+-
+-  /**
+-   * The name that the element should have after the refactoring.
+-   */
+-  void set newName(String value) {
+-    assert(value != null);
+-    this._newName = value;
+-  }
+-
+-  RenameOptions(String newName) {
+-    this.newName = newName;
+-  }
+-
+-  factory RenameOptions.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String newName;
+-      if (json.containsKey("newName")) {
+-        newName =
+-            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 = {};
+-    result["newName"] = newName;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is RenameOptions) {
+-      return newName == other.newName;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _code;
+-
+-  /**
+-   * A code that uniquely identifies the error that occurred.
+-   */
+-  void set code(RequestErrorCode value) {
+-    assert(value != null);
+-    this._code = value;
+-  }
+-
+-  /**
+-   * A short description of the error.
+-   */
+-  String get message => _message;
+-
+-  /**
+-   * A short description of the error.
+-   */
+-  void set message(String value) {
+-    assert(value != null);
+-    this._message = value;
+-  }
+-
+-  /**
+-   * The stack trace associated with processing the request, used for 
debugging
+-   * the server.
+-   */
+-  String get stackTrace => _stackTrace;
+-
+-  /**
+-   * The stack trace associated with processing the request, used for 
debugging
+-   * the server.
+-   */
+-  void set stackTrace(String value) {
+-    this._stackTrace = value;
+-  }
+-
+-  RequestError(RequestErrorCode code, String message, {String stackTrace}) {
+-    this.code = code;
+-    this.message = message;
+-    this.stackTrace = stackTrace;
+-  }
+-
+-  factory RequestError.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      RequestErrorCode code;
+-      if (json.containsKey("code")) {
+-        code = new RequestErrorCode.fromJson(
+-            jsonDecoder, jsonPath + ".code", json["code"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "code");
+-      }
+-      String message;
+-      if (json.containsKey("message")) {
+-        message =
+-            jsonDecoder.decodeString(jsonPath + ".message", json["message"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "message");
+-      }
+-      String stackTrace;
+-      if (json.containsKey("stackTrace")) {
+-        stackTrace = 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 = {};
+-    result["code"] = code.toJson();
+-    result["message"] = message;
+-    if (stackTrace != null) {
+-      result["stackTrace"] = stackTrace;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is RequestError) {
+-      return code == other.code &&
+-          message == other.message &&
+-          stackTrace == other.stackTrace;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, code.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, message.hashCode);
+-    hash = 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 not be
+-   * satisfied because the content of the file changed before the requested
+-   * results could be computed.
+-   */
+-  static const RequestErrorCode CONTENT_MODIFIED =
+-      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 =
+-      const RequestErrorCode._("DEBUG_PORT_COULD_NOT_BE_OPENED");
+-
+-  /**
+-   * 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.
+-   */
+-  static const RequestErrorCode FILE_NOT_ANALYZED =
+-      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 =
+-      const RequestErrorCode._("FORMAT_INVALID_FILE");
+-
+-  /**
+-   * An "edit.format" request specified a file that contains syntax errors.
+-   */
+-  static const RequestErrorCode FORMAT_WITH_ERRORS =
+-      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 =
+-      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 =
+-      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 =
+-      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 =
+-      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 =
+-      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 =
+-      const RequestErrorCode._("IMPORT_ELEMENTS_INVALID_FILE");
+-
+-  /**
+-   * A path passed as an argument to a request (such as analysis.reanalyze) is
+-   * required to be an analysis root, but isn't.
+-   */
+-  static const RequestErrorCode INVALID_ANALYSIS_ROOT =
+-      const RequestErrorCode._("INVALID_ANALYSIS_ROOT");
+-
+-  /**
+-   * The context root used to create an execution context does not exist.
+-   */
+-  static const RequestErrorCode INVALID_EXECUTION_CONTEXT =
+-      const RequestErrorCode._("INVALID_EXECUTION_CONTEXT");
+-
+-  /**
+-   * The format of the given file path is invalid, e.g. is not absolute and
+-   * normalized.
+-   */
+-  static const RequestErrorCode INVALID_FILE_PATH_FORMAT =
+-      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 length
+-   * that is out of range.
+-   */
+-  static const RequestErrorCode INVALID_OVERLAY_CHANGE =
+-      const RequestErrorCode._("INVALID_OVERLAY_CHANGE");
+-
+-  /**
+-   * One of the method parameters was invalid.
+-   */
+-  static const RequestErrorCode INVALID_PARAMETER =
+-      const RequestErrorCode._("INVALID_PARAMETER");
+-
+-  /**
+-   * A malformed request was received.
+-   */
+-  static const RequestErrorCode INVALID_REQUEST =
+-      const RequestErrorCode._("INVALID_REQUEST");
+-
+-  /**
+-   * An "edit.organizeDirectives" request specified a Dart file that cannot be
+-   * analyzed. The reason is described in the message.
+-   */
+-  static const RequestErrorCode ORGANIZE_DIRECTIVES_ERROR =
+-      const RequestErrorCode._("ORGANIZE_DIRECTIVES_ERROR");
+-
+-  /**
+-   * Another refactoring request was received during processing of this one.
+-   */
+-  static const RequestErrorCode REFACTORING_REQUEST_CANCELLED =
+-      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 never
+-   * occur.
+-   */
+-  static const RequestErrorCode SERVER_ALREADY_STARTED =
+-      const RequestErrorCode._("SERVER_ALREADY_STARTED");
+-
+-  /**
+-   * An internal error occurred in the analysis server. Also see the
+-   * server.error notification.
+-   */
+-  static const RequestErrorCode SERVER_ERROR =
+-      const RequestErrorCode._("SERVER_ERROR");
+-
+-  /**
+-   * An "edit.sortMembers" request specified a FilePath which does not match a
+-   * Dart file in an analysis root.
+-   */
+-  static const RequestErrorCode SORT_MEMBERS_INVALID_FILE =
+-      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 =
+-      const RequestErrorCode._("SORT_MEMBERS_PARSE_ERRORS");
+-
+-  /**
+-   * An "analysis.setPriorityFiles" request includes one or more files that 
are
+-   * not being analyzed.
+-   *
+-   * This is a legacy error; it will be removed before the API reaches version
+-   * 1.0.
+-   */
+-  static const RequestErrorCode UNANALYZED_PRIORITY_FILES =
+-      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 =
+-      const RequestErrorCode._("UNKNOWN_REQUEST");
+-
+-  /**
+-   * The analysis server was requested to perform an action on a source that
+-   * does not exist.
+-   */
+-  static const RequestErrorCode UNKNOWN_SOURCE =
+-      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 version
+-   * 1.0.
+-   */
+-  static const RequestErrorCode UNSUPPORTED_FEATURE =
+-      const RequestErrorCode._("UNSUPPORTED_FEATURE");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<RequestErrorCode> VALUES = 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() => "RequestErrorCode.$name";
+-
+-  String toJson() => 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 used 
to
+-   * define the search.
+-   */
+-  String get file => _file;
+-
+-  /**
+-   * The file containing the declaration of or reference to the element used 
to
+-   * define the search.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset within the file of the declaration of or reference to the
+-   * element.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset within the file of the declaration of or reference to the
+-   * element.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * True if potential matches are to be included in the results.
+-   */
+-  bool get includePotential => _includePotential;
+-
+-  /**
+-   * True if potential matches are to be included in the results.
+-   */
+-  void set includePotential(bool value) {
+-    assert(value != null);
+-    this._includePotential = value;
+-  }
+-
+-  SearchFindElementReferencesParams(
+-      String file, int offset, bool includePotential) {
+-    this.file = file;
+-    this.offset = offset;
+-    this.includePotential = includePotential;
+-  }
+-
+-  factory SearchFindElementReferencesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      bool includePotential;
+-      if (json.containsKey("includePotential")) {
+-        includePotential = 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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    result["includePotential"] = includePotential;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findElementReferences", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindElementReferencesParams) {
+-      return file == other.file &&
+-          offset == other.offset &&
+-          includePotential == other.includePotential;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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 absent,
+-   * and no results will be reported via the search.results notification.
+-   */
+-  String get id => _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   *
+-   * 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.
+-   */
+-  void set id(String value) {
+-    this._id = value;
+-  }
+-
+-  /**
+-   * The element referenced or defined at the given offset and whose 
references
+-   * will be returned in the search results.
+-   *
+-   * If no element was found at the given location, this field will be absent.
+-   */
+-  Element get element => _element;
+-
+-  /**
+-   * The element referenced or defined at the given offset and whose 
references
+-   * will be returned in the search results.
+-   *
+-   * If no element was found at the given location, this field will be absent.
+-   */
+-  void set element(Element value) {
+-    this._element = value;
+-  }
+-
+-  SearchFindElementReferencesResult({String id, Element element}) {
+-    this.id = id;
+-    this.element = element;
+-  }
+-
+-  factory SearchFindElementReferencesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      }
+-      Element element;
+-      if (json.containsKey("element")) {
+-        element = new Element.fromJson(
+-            jsonDecoder, jsonPath + ".element", json["element"]);
+-      }
+-      return new SearchFindElementReferencesResult(id: id, element: element);
+-    } else {
+-      throw jsonDecoder.mismatch(
+-          jsonPath, "search.findElementReferences result", json);
+-    }
+-  }
+-
+-  factory SearchFindElementReferencesResult.fromResponse(Response response) {
+-    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 = {};
+-    if (id != null) {
+-      result["id"] = id;
+-    }
+-    if (element != null) {
+-      result["element"] = element.toJson();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindElementReferencesResult) {
+-      return id == other.id && element == other.element;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash = 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 => _name;
+-
+-  /**
+-   * The name of the declarations to be found.
+-   */
+-  void set name(String value) {
+-    assert(value != null);
+-    this._name = value;
+-  }
+-
+-  SearchFindMemberDeclarationsParams(String name) {
+-    this.name = name;
+-  }
+-
+-  factory SearchFindMemberDeclarationsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name = 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 = {};
+-    result["name"] = name;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findMemberDeclarations", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindMemberDeclarationsParams) {
+-      return name == other.name;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  SearchFindMemberDeclarationsResult(String id) {
+-    this.id = id;
+-  }
+-
+-  factory SearchFindMemberDeclarationsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = 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 response) {
+-    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 = {};
+-    result["id"] = id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindMemberDeclarationsResult) {
+-      return id == other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _name;
+-
+-  /**
+-   * The name of the references to be found.
+-   */
+-  void set name(String value) {
+-    assert(value != null);
+-    this._name = value;
+-  }
+-
+-  SearchFindMemberReferencesParams(String name) {
+-    this.name = name;
+-  }
+-
+-  factory SearchFindMemberReferencesParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String name;
+-      if (json.containsKey("name")) {
+-        name = 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 = {};
+-    result["name"] = name;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findMemberReferences", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindMemberReferencesParams) {
+-      return name == other.name;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  SearchFindMemberReferencesResult(String id) {
+-    this.id = id;
+-  }
+-
+-  factory SearchFindMemberReferencesResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = 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 = {};
+-    result["id"] = id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindMemberReferencesResult) {
+-      return id == other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 to be
+-   * found.
+-   */
+-  String get pattern => _pattern;
+-
+-  /**
+-   * The regular expression used to match the names of the declarations to be
+-   * found.
+-   */
+-  void set pattern(String value) {
+-    assert(value != null);
+-    this._pattern = value;
+-  }
+-
+-  SearchFindTopLevelDeclarationsParams(String pattern) {
+-    this.pattern = pattern;
+-  }
+-
+-  factory SearchFindTopLevelDeclarationsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String pattern;
+-      if (json.containsKey("pattern")) {
+-        pattern =
+-            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 request) {
+-    return new SearchFindTopLevelDeclarationsParams.fromJson(
+-        new RequestDecoder(request), "params", request.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["pattern"] = pattern;
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.findTopLevelDeclarations", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindTopLevelDeclarationsParams) {
+-      return pattern == other.pattern;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _id;
+-
+-  /**
+-   * The identifier used to associate results with this search request.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  SearchFindTopLevelDeclarationsResult(String id) {
+-    this.id = id;
+-  }
+-
+-  factory SearchFindTopLevelDeclarationsResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = 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 
response) {
+-    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 = {};
+-    result["id"] = id;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchFindTopLevelDeclarationsResult) {
+-      return id == other.id;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 which a
+-   * hierarchy is being requested.
+-   */
+-  String get file => _file;
+-
+-  /**
+-   * The file containing the declaration or reference to the type for which a
+-   * hierarchy is being requested.
+-   */
+-  void set file(String value) {
+-    assert(value != null);
+-    this._file = value;
+-  }
+-
+-  /**
+-   * The offset of the name of the type within the file.
+-   */
+-  int get offset => _offset;
+-
+-  /**
+-   * The offset of the name of the type within the file.
+-   */
+-  void set offset(int value) {
+-    assert(value != null);
+-    this._offset = value;
+-  }
+-
+-  /**
+-   * True if the client is only requesting superclasses and interfaces
+-   * hierarchy.
+-   */
+-  bool get superOnly => _superOnly;
+-
+-  /**
+-   * True if the client is only requesting superclasses and interfaces
+-   * hierarchy.
+-   */
+-  void set superOnly(bool value) {
+-    this._superOnly = value;
+-  }
+-
+-  SearchGetTypeHierarchyParams(String file, int offset, {bool superOnly}) {
+-    this.file = file;
+-    this.offset = offset;
+-    this.superOnly = superOnly;
+-  }
+-
+-  factory SearchGetTypeHierarchyParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String file;
+-      if (json.containsKey("file")) {
+-        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "file");
+-      }
+-      int offset;
+-      if (json.containsKey("offset")) {
+-        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "offset");
+-      }
+-      bool superOnly;
+-      if (json.containsKey("superOnly")) {
+-        superOnly =
+-            jsonDecoder.decodeBool(jsonPath + ".superOnly", 
json["superOnly"]);
+-      }
+-      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 = {};
+-    result["file"] = file;
+-    result["offset"] = offset;
+-    if (superOnly != null) {
+-      result["superOnly"] = superOnly;
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "search.getTypeHierarchy", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchGetTypeHierarchyParams) {
+-      return file == other.file &&
+-          offset == other.offset &&
+-          superOnly == other.superOnly;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+-    hash = 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, but
+-   * correspond to the integers used to reference supertype and subtype items
+-   * within the items.
+-   *
+-   * 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.
+-   */
+-  List<TypeHierarchyItem> get hierarchyItems => _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, but
+-   * correspond to the integers used to reference supertype and subtype items
+-   * within the items.
+-   *
+-   * 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.
+-   */
+-  void set hierarchyItems(List<TypeHierarchyItem> value) {
+-    this._hierarchyItems = value;
+-  }
+-
+-  SearchGetTypeHierarchyResult({List<TypeHierarchyItem> hierarchyItems}) {
+-    this.hierarchyItems = hierarchyItems;
+-  }
+-
+-  factory SearchGetTypeHierarchyResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<TypeHierarchyItem> hierarchyItems;
+-      if (json.containsKey("hierarchyItems")) {
+-        hierarchyItems = jsonDecoder.decodeList(
+-            jsonPath + ".hierarchyItems",
+-            json["hierarchyItems"],
+-            (String jsonPath, Object json) =>
+-                new TypeHierarchyItem.fromJson(jsonDecoder, jsonPath, json));
+-      }
+-      return new SearchGetTypeHierarchyResult(hierarchyItems: hierarchyItems);
+-    } 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 = {};
+-    if (hierarchyItems != null) {
+-      result["hierarchyItems"] = hierarchyItems
+-          .map((TypeHierarchyItem value) => value.toJson())
+-          .toList();
+-    }
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchGetTypeHierarchyResult) {
+-      return listEqual(hierarchyItems, other.hierarchyItems,
+-          (TypeHierarchyItem a, TypeHierarchyItem b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 => _location;
+-
+-  /**
+-   * The location of the code that matched the search criteria.
+-   */
+-  void set location(Location value) {
+-    assert(value != null);
+-    this._location = value;
+-  }
+-
+-  /**
+-   * The kind of element that was found or the kind of reference that was
+-   * found.
+-   */
+-  SearchResultKind get kind => _kind;
+-
+-  /**
+-   * The kind of element that was found or the kind of reference that was
+-   * found.
+-   */
+-  void set kind(SearchResultKind value) {
+-    assert(value != null);
+-    this._kind = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  bool get isPotential => _isPotential;
+-
+-  /**
+-   * 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.
+-   */
+-  void set isPotential(bool value) {
+-    assert(value != null);
+-    this._isPotential = value;
+-  }
+-
+-  /**
+-   * The elements that contain the result, starting with the most immediately
+-   * enclosing ancestor and ending with the library.
+-   */
+-  List<Element> get path => _path;
+-
+-  /**
+-   * The elements that contain the result, starting with the most immediately
+-   * enclosing ancestor and ending with the library.
+-   */
+-  void set path(List<Element> value) {
+-    assert(value != null);
+-    this._path = value;
+-  }
+-
+-  SearchResult(Location location, SearchResultKind kind, bool isPotential,
+-      List<Element> path) {
+-    this.location = location;
+-    this.kind = kind;
+-    this.isPotential = isPotential;
+-    this.path = path;
+-  }
+-
+-  factory SearchResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      Location location;
+-      if (json.containsKey("location")) {
+-        location = new Location.fromJson(
+-            jsonDecoder, jsonPath + ".location", json["location"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "location");
+-      }
+-      SearchResultKind kind;
+-      if (json.containsKey("kind")) {
+-        kind = new SearchResultKind.fromJson(
+-            jsonDecoder, jsonPath + ".kind", json["kind"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "kind");
+-      }
+-      bool isPotential;
+-      if (json.containsKey("isPotential")) {
+-        isPotential = jsonDecoder.decodeBool(
+-            jsonPath + ".isPotential", json["isPotential"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isPotential");
+-      }
+-      List<Element> path;
+-      if (json.containsKey("path")) {
+-        path = jsonDecoder.decodeList(
+-            jsonPath + ".path",
+-            json["path"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["location"] = location.toJson();
+-    result["kind"] = kind.toJson();
+-    result["isPotential"] = isPotential;
+-    result["path"] = path.map((Element value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchResult) {
+-      return location == other.location &&
+-          kind == other.kind &&
+-          isPotential == other.isPotential &&
+-          listEqual(path, other.path, (Element a, Element b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, location.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, kind.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, isPotential.hashCode);
+-    hash = 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 =
+-      const SearchResultKind._("DECLARATION");
+-
+-  /**
+-   * The invocation of a function or method.
+-   */
+-  static const SearchResultKind INVOCATION =
+-      const SearchResultKind._("INVOCATION");
+-
+-  /**
+-   * A reference to a field, parameter or variable where it is being read.
+-   */
+-  static const SearchResultKind READ = const SearchResultKind._("READ");
+-
+-  /**
+-   * A reference to a field, parameter or variable where it is being read and
+-   * written.
+-   */
+-  static const SearchResultKind READ_WRITE =
+-      const SearchResultKind._("READ_WRITE");
+-
+-  /**
+-   * A reference to an element.
+-   */
+-  static const SearchResultKind REFERENCE =
+-      const SearchResultKind._("REFERENCE");
+-
+-  /**
+-   * Some other kind of search result.
+-   */
+-  static const SearchResultKind UNKNOWN = const SearchResultKind._("UNKNOWN");
+-
+-  /**
+-   * A reference to a field, parameter or variable where it is being written.
+-   */
+-  static const SearchResultKind WRITE = const SearchResultKind._("WRITE");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<SearchResultKind> VALUES = 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() => "SearchResultKind.$name";
+-
+-  String toJson() => 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 => _id;
+-
+-  /**
+-   * The id associated with the search.
+-   */
+-  void set id(String value) {
+-    assert(value != null);
+-    this._id = value;
+-  }
+-
+-  /**
+-   * The search results being reported.
+-   */
+-  List<SearchResult> get results => _results;
+-
+-  /**
+-   * The search results being reported.
+-   */
+-  void set results(List<SearchResult> value) {
+-    assert(value != null);
+-    this._results = value;
+-  }
+-
+-  /**
+-   * True if this is that last set of results that will be returned for the
+-   * indicated search.
+-   */
+-  bool get isLast => _isLast;
+-
+-  /**
+-   * True if this is that last set of results that will be returned for the
+-   * indicated search.
+-   */
+-  void set isLast(bool value) {
+-    assert(value != null);
+-    this._isLast = value;
+-  }
+-
+-  SearchResultsParams(String id, List<SearchResult> results, bool isLast) {
+-    this.id = id;
+-    this.results = results;
+-    this.isLast = isLast;
+-  }
+-
+-  factory SearchResultsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String id;
+-      if (json.containsKey("id")) {
+-        id = jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "id");
+-      }
+-      List<SearchResult> results;
+-      if (json.containsKey("results")) {
+-        results = jsonDecoder.decodeList(
+-            jsonPath + ".results",
+-            json["results"],
+-            (String jsonPath, Object json) =>
+-                new SearchResult.fromJson(jsonDecoder, jsonPath, json));
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "results");
+-      }
+-      bool isLast;
+-      if (json.containsKey("isLast")) {
+-        isLast = jsonDecoder.decodeBool(jsonPath + ".isLast", json["isLast"]);
+-      } 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 = {};
+-    result["id"] = id;
+-    result["results"] =
+-        results.map((SearchResult value) => value.toJson()).toList();
+-    result["isLast"] = isLast;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("search.results", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is SearchResultsParams) {
+-      return id == other.id &&
+-          listEqual(results, other.results,
+-              (SearchResult a, SearchResult b) => a == b) &&
+-          isLast == other.isLast;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, id.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, results.hashCode);
+-    hash = 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 => _version;
+-
+-  /**
+-   * The version number of the analysis server.
+-   */
+-  void set version(String value) {
+-    assert(value != null);
+-    this._version = value;
+-  }
+-
+-  /**
+-   * The process id of the analysis server process.
+-   */
+-  int get pid => _pid;
+-
+-  /**
+-   * The process id of the analysis server process.
+-   */
+-  void set pid(int value) {
+-    assert(value != null);
+-    this._pid = value;
+-  }
+-
+-  /**
+-   * The session id for this session.
+-   */
+-  String get sessionId => _sessionId;
+-
+-  /**
+-   * The session id for this session.
+-   */
+-  void set sessionId(String value) {
+-    this._sessionId = value;
+-  }
+-
+-  ServerConnectedParams(String version, int pid, {String sessionId}) {
+-    this.version = version;
+-    this.pid = pid;
+-    this.sessionId = sessionId;
+-  }
+-
+-  factory ServerConnectedParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String version;
+-      if (json.containsKey("version")) {
+-        version =
+-            jsonDecoder.decodeString(jsonPath + ".version", json["version"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "version");
+-      }
+-      int pid;
+-      if (json.containsKey("pid")) {
+-        pid = jsonDecoder.decodeInt(jsonPath + ".pid", json["pid"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "pid");
+-      }
+-      String sessionId;
+-      if (json.containsKey("sessionId")) {
+-        sessionId = jsonDecoder.decodeString(
+-            jsonPath + ".sessionId", json["sessionId"]);
+-      }
+-      return new ServerConnectedParams(version, pid, sessionId: sessionId);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "server.connected params", json);
+-    }
+-  }
+-
+-  factory ServerConnectedParams.fromNotification(Notification notification) {
+-    return new ServerConnectedParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["version"] = version;
+-    result["pid"] = pid;
+-    if (sessionId != null) {
+-      result["sessionId"] = sessionId;
+-    }
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("server.connected", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ServerConnectedParams) {
+-      return version == other.version &&
+-          pid == other.pid &&
+-          sessionId == other.sessionId;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, version.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, pid.hashCode);
+-    hash = 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 shutdown
+-   * automatically after sending this notification.
+-   */
+-  bool get isFatal => _isFatal;
+-
+-  /**
+-   * True if the error is a fatal error, meaning that the server will shutdown
+-   * automatically after sending this notification.
+-   */
+-  void set isFatal(bool value) {
+-    assert(value != null);
+-    this._isFatal = value;
+-  }
+-
+-  /**
+-   * The error message indicating what kind of error was encountered.
+-   */
+-  String get message => _message;
+-
+-  /**
+-   * The error message indicating what kind of error was encountered.
+-   */
+-  void set message(String value) {
+-    assert(value != null);
+-    this._message = value;
+-  }
+-
+-  /**
+-   * The stack trace associated with the generation of the error, used for
+-   * debugging the server.
+-   */
+-  String get stackTrace => _stackTrace;
+-
+-  /**
+-   * The stack trace associated with the generation of the error, used for
+-   * debugging the server.
+-   */
+-  void set stackTrace(String value) {
+-    assert(value != null);
+-    this._stackTrace = value;
+-  }
+-
+-  ServerErrorParams(bool isFatal, String message, String stackTrace) {
+-    this.isFatal = isFatal;
+-    this.message = message;
+-    this.stackTrace = stackTrace;
+-  }
+-
+-  factory ServerErrorParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      bool isFatal;
+-      if (json.containsKey("isFatal")) {
+-        isFatal =
+-            jsonDecoder.decodeBool(jsonPath + ".isFatal", json["isFatal"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "isFatal");
+-      }
+-      String message;
+-      if (json.containsKey("message")) {
+-        message =
+-            jsonDecoder.decodeString(jsonPath + ".message", json["message"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "message");
+-      }
+-      String stackTrace;
+-      if (json.containsKey("stackTrace")) {
+-        stackTrace = 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 = {};
+-    result["isFatal"] = isFatal;
+-    result["message"] = message;
+-    result["stackTrace"] = stackTrace;
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("server.error", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ServerErrorParams) {
+-      return isFatal == other.isFatal &&
+-          message == other.message &&
+-          stackTrace == other.stackTrace;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, isFatal.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, message.hashCode);
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "server.getVersion", null);
+-  }
+-
+-  @override
+-  bool operator ==(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 => _version;
+-
+-  /**
+-   * The version number of the analysis server.
+-   */
+-  void set version(String value) {
+-    assert(value != null);
+-    this._version = value;
+-  }
+-
+-  ServerGetVersionResult(String version) {
+-    this.version = version;
+-  }
+-
+-  factory ServerGetVersionResult.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      String version;
+-      if (json.containsKey("version")) {
+-        version =
+-            jsonDecoder.decodeString(jsonPath + ".version", json["version"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "version");
+-      }
+-      return new ServerGetVersionResult(version);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "server.getVersion result", json);
+-    }
+-  }
+-
+-  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 = {};
+-    result["version"] = version;
+-    return result;
+-  }
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ServerGetVersionResult) {
+-      return version == other.version;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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 = const ServerService._("STATUS");
+-
+-  /**
+-   * A list containing all of the enum values that are defined.
+-   */
+-  static const List<ServerService> VALUES = const <ServerService>[STATUS];
+-
+-  @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() => "ServerService.$name";
+-
+-  String toJson() => 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 => _subscriptions;
+-
+-  /**
+-   * A list of the services being subscribed to.
+-   */
+-  void set subscriptions(List<ServerService> value) {
+-    assert(value != null);
+-    this._subscriptions = value;
+-  }
+-
+-  ServerSetSubscriptionsParams(List<ServerService> subscriptions) {
+-    this.subscriptions = subscriptions;
+-  }
+-
+-  factory ServerSetSubscriptionsParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      List<ServerService> subscriptions;
+-      if (json.containsKey("subscriptions")) {
+-        subscriptions = jsonDecoder.decodeList(
+-            jsonPath + ".subscriptions",
+-            json["subscriptions"],
+-            (String jsonPath, Object json) =>
+-                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 = {};
+-    result["subscriptions"] =
+-        subscriptions.map((ServerService value) => value.toJson()).toList();
+-    return result;
+-  }
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "server.setSubscriptions", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ServerSetSubscriptionsParams) {
+-      return listEqual(subscriptions, other.subscriptions,
+-          (ServerService a, ServerService b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = 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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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() => <String, dynamic>{};
+-
+-  @override
+-  Request toRequest(String id) {
+-    return new Request(id, "server.shutdown", null);
+-  }
+-
+-  @override
+-  bool operator ==(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() => <String, dynamic>{};
+-
+-  @override
+-  Response toResponse(String id) {
+-    return new Response(id, result: null);
+-  }
+-
+-  @override
+-  bool operator ==(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 or mix-in this class.
+- */
+-class ServerStatusParams implements HasToJson {
+-  AnalysisStatus _analysis;
+-
+-  PubStatus _pub;
+-
+-  /**
+-   * The current status of analysis, including whether analysis is being
+-   * performed and if so what is being analyzed.
+-   */
+-  AnalysisStatus get analysis => _analysis;
+-
+-  /**
+-   * The current status of analysis, including whether analysis is being
+-   * performed and if so what is being analyzed.
+-   */
+-  void set analysis(AnalysisStatus value) {
+-    this._analysis = value;
+-  }
+-
+-  /**
+-   * The current status of pub execution, indicating whether we are currently
+-   * running pub.
+-   */
+-  PubStatus get pub => _pub;
+-
+-  /**
+-   * The current status of pub execution, indicating whether we are currently
+-   * running pub.
+-   */
+-  void set pub(PubStatus value) {
+-    this._pub = value;
+-  }
+-
+-  ServerStatusParams({AnalysisStatus analysis, PubStatus pub}) {
+-    this.analysis = analysis;
+-    this.pub = pub;
+-  }
+-
+-  factory ServerStatusParams.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      AnalysisStatus analysis;
+-      if (json.containsKey("analysis")) {
+-        analysis = new AnalysisStatus.fromJson(
+-            jsonDecoder, jsonPath + ".analysis", json["analysis"]);
+-      }
+-      PubStatus pub;
+-      if (json.containsKey("pub")) {
+-        pub =
+-            new PubStatus.fromJson(jsonDecoder, jsonPath + ".pub", 
json["pub"]);
+-      }
+-      return new ServerStatusParams(analysis: analysis, pub: pub);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "server.status params", json);
+-    }
+-  }
+-
+-  factory ServerStatusParams.fromNotification(Notification notification) {
+-    return new ServerStatusParams.fromJson(
+-        new ResponseDecoder(null), "params", notification.params);
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    if (analysis != null) {
+-      result["analysis"] = analysis.toJson();
+-    }
+-    if (pub != null) {
+-      result["pub"] = pub.toJson();
+-    }
+-    return result;
+-  }
+-
+-  Notification toNotification() {
+-    return new Notification("server.status", toJson());
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is ServerStatusParams) {
+-      return analysis == other.analysis && pub == other.pub;
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, analysis.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, pub.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+-
+-/**
+- * TypeHierarchyItem
+- *
+- * {
+- *   "classElement": Element
+- *   "displayName": optional String
+- *   "memberElement": optional Element
+- *   "superclass": optional int
+- *   "interfaces": List<int>
+- *   "mixins": List<int>
+- *   "subclasses": List<int>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class TypeHierarchyItem implements HasToJson {
+-  Element _classElement;
+-
+-  String _displayName;
+-
+-  Element _memberElement;
+-
+-  int _superclass;
+-
+-  List<int> _interfaces;
+-
+-  List<int> _mixins;
+-
+-  List<int> _subclasses;
+-
+-  /**
+-   * The class element represented by this item.
+-   */
+-  Element get classElement => _classElement;
+-
+-  /**
+-   * The class element represented by this item.
+-   */
+-  void set classElement(Element value) {
+-    assert(value != null);
+-    this._classElement = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  String get displayName => _displayName;
+-
+-  /**
+-   * 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.
+-   */
+-  void set displayName(String value) {
+-    this._displayName = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  Element get memberElement => _memberElement;
+-
+-  /**
+-   * 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.
+-   */
+-  void set memberElement(Element value) {
+-    this._memberElement = value;
+-  }
+-
+-  /**
+-   * The index of the item representing the superclass of this class. This
+-   * field will be omitted if this item represents the class Object.
+-   */
+-  int get superclass => _superclass;
+-
+-  /**
+-   * The index of the item representing the superclass of this class. This
+-   * field will be omitted if this item represents the class Object.
+-   */
+-  void set superclass(int value) {
+-    this._superclass = value;
+-  }
+-
+-  /**
+-   * The indexes of the items representing the interfaces implemented by this
+-   * class. The list will be empty if there are no implemented interfaces.
+-   */
+-  List<int> get interfaces => _interfaces;
+-
+-  /**
+-   * The indexes of the items representing the interfaces implemented by this
+-   * class. The list will be empty if there are no implemented interfaces.
+-   */
+-  void set interfaces(List<int> value) {
+-    assert(value != null);
+-    this._interfaces = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  List<int> get mixins => _mixins;
+-
+-  /**
+-   * 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.
+-   */
+-  void set mixins(List<int> value) {
+-    assert(value != null);
+-    this._mixins = value;
+-  }
+-
+-  /**
+-   * 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.
+-   */
+-  List<int> get subclasses => _subclasses;
+-
+-  /**
+-   * 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.
+-   */
+-  void set subclasses(List<int> value) {
+-    assert(value != null);
+-    this._subclasses = value;
+-  }
+-
+-  TypeHierarchyItem(Element classElement,
+-      {String displayName,
+-      Element memberElement,
+-      int superclass,
+-      List<int> interfaces,
+-      List<int> mixins,
+-      List<int> subclasses}) {
+-    this.classElement = classElement;
+-    this.displayName = displayName;
+-    this.memberElement = memberElement;
+-    this.superclass = superclass;
+-    if (interfaces == null) {
+-      this.interfaces = <int>[];
+-    } else {
+-      this.interfaces = interfaces;
+-    }
+-    if (mixins == null) {
+-      this.mixins = <int>[];
+-    } else {
+-      this.mixins = mixins;
+-    }
+-    if (subclasses == null) {
+-      this.subclasses = <int>[];
+-    } else {
+-      this.subclasses = subclasses;
+-    }
+-  }
+-
+-  factory TypeHierarchyItem.fromJson(
+-      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+-    if (json == null) {
+-      json = {};
+-    }
+-    if (json is Map) {
+-      Element classElement;
+-      if (json.containsKey("classElement")) {
+-        classElement = new Element.fromJson(
+-            jsonDecoder, jsonPath + ".classElement", json["classElement"]);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "classElement");
+-      }
+-      String displayName;
+-      if (json.containsKey("displayName")) {
+-        displayName = jsonDecoder.decodeString(
+-            jsonPath + ".displayName", json["displayName"]);
+-      }
+-      Element memberElement;
+-      if (json.containsKey("memberElement")) {
+-        memberElement = new Element.fromJson(
+-            jsonDecoder, jsonPath + ".memberElement", json["memberElement"]);
+-      }
+-      int superclass;
+-      if (json.containsKey("superclass")) {
+-        superclass =
+-            jsonDecoder.decodeInt(jsonPath + ".superclass", 
json["superclass"]);
+-      }
+-      List<int> interfaces;
+-      if (json.containsKey("interfaces")) {
+-        interfaces = jsonDecoder.decodeList(jsonPath + ".interfaces",
+-            json["interfaces"], jsonDecoder.decodeInt);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "interfaces");
+-      }
+-      List<int> mixins;
+-      if (json.containsKey("mixins")) {
+-        mixins = jsonDecoder.decodeList(
+-            jsonPath + ".mixins", json["mixins"], jsonDecoder.decodeInt);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "mixins");
+-      }
+-      List<int> subclasses;
+-      if (json.containsKey("subclasses")) {
+-        subclasses = jsonDecoder.decodeList(jsonPath + ".subclasses",
+-            json["subclasses"], jsonDecoder.decodeInt);
+-      } else {
+-        throw jsonDecoder.mismatch(jsonPath, "subclasses");
+-      }
+-      return new TypeHierarchyItem(classElement,
+-          displayName: displayName,
+-          memberElement: memberElement,
+-          superclass: superclass,
+-          interfaces: interfaces,
+-          mixins: mixins,
+-          subclasses: subclasses);
+-    } else {
+-      throw jsonDecoder.mismatch(jsonPath, "TypeHierarchyItem", json);
+-    }
+-  }
+-
+-  @override
+-  Map<String, dynamic> toJson() {
+-    Map<String, dynamic> result = {};
+-    result["classElement"] = classElement.toJson();
+-    if (displayName != null) {
+-      result["displayName"] = displayName;
+-    }
+-    if (memberElement != null) {
+-      result["memberElement"] = memberElement.toJson();
+-    }
+-    if (superclass != null) {
+-      result["superclass"] = superclass;
+-    }
+-    result["interfaces"] = interfaces;
+-    result["mixins"] = mixins;
+-    result["subclasses"] = subclasses;
+-    return result;
+-  }
+-
+-  @override
+-  String toString() => JSON.encode(toJson());
+-
+-  @override
+-  bool operator ==(other) {
+-    if (other is TypeHierarchyItem) {
+-      return classElement == other.classElement &&
+-          displayName == other.displayName &&
+-          memberElement == other.memberElement &&
+-          superclass == other.superclass &&
+-          listEqual(interfaces, other.interfaces, (int a, int b) => a == b) &&
+-          listEqual(mixins, other.mixins, (int a, int b) => a == b) &&
+-          listEqual(subclasses, other.subclasses, (int a, int b) => a == b);
+-    }
+-    return false;
+-  }
+-
+-  @override
+-  int get hashCode {
+-    int hash = 0;
+-    hash = JenkinsSmiHash.combine(hash, classElement.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, displayName.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, memberElement.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, superclass.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, interfaces.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, mixins.hashCode);
+-    hash = JenkinsSmiHash.combine(hash, subclasses.hashCode);
+-    return JenkinsSmiHash.finish(hash);
+-  }
+-}
+diff --git a/pkg/analysis_server/lib/src/analysis_logger.dart 
b/pkg/analysis_server/lib/src/analysis_logger.dart
+deleted file mode 100644
+index 33911961423..00000000000
+--- a/pkg/analysis_server/lib/src/analysis_logger.dart
++++ /dev/null
+@@ -1,55 +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/src/analysis_server.dart';
+-import 'package:analyzer/exception/exception.dart';
+-import 'package:analyzer/src/generated/engine.dart';
+-import 'package:logging/logging.dart' as logging;
+-
+-/**
+- * Instances of the class [AnalysisLogger] translate from the analysis 
engine's
+- * API to the logging package's API.
+- */
+-class AnalysisLogger implements Logger {
+-  /**
+-   * The underlying logger that is being wrapped.
+-   */
+-  final logging.Logger baseLogger = new logging.Logger('analysis.server');
+-
+-  /**
+-   * The analysis server that is using this logger.
+-   */
+-  final AnalysisServer server;
+-
+-  AnalysisLogger(this.server) {
+-    assert(server != null);
+-    logging.Logger.root.onRecord.listen((logging.LogRecord record) {
+-      AnalysisEngine.instance.instrumentationService.logLogEntry(
+-          record.level.name,
+-          record.time,
+-          record.message,
+-          record.error,
+-          record.stackTrace);
+-    });
+-  }
+-
+-  @override
+-  void logError(String message, [CaughtException exception]) {
+-    if (exception == null) {
+-      baseLogger.severe(message);
+-    } else {
+-      baseLogger.severe(message, exception.exception, exception.stackTrace);
+-    }
+-    server.sendServerErrorNotification(message, exception, null);
+-  }
+-
+-  @override
+-  void logInformation(String message, [CaughtException exception]) {
+-    if (exception == null) {
+-      baseLogger.info(message);
+-    } else {
+-      baseLogger.info(message, exception.exception, exception.stackTrace);
+-    }
+-  }
+-}
+diff --git a/pkg/analysis_server/lib/src/analysis_server.dart 
b/pkg/analysis_server/lib/src/analysis_server.dart
+deleted file mode 100644
+index b6ee79a64d1..00000000000
+--- a/pkg/analysis_server/lib/src/analysis_server.dart
++++ /dev/null
+@@ -1,1557 +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 'dart:async';
+-import 'dart:collection';
+-import 'dart:core';
+-import 'dart:io' as io;
+-import 'dart:math' show max;
+-
+-import 'package:analysis_server/protocol/protocol.dart';
+-import 'package:analysis_server/protocol/protocol_generated.dart'
+-    hide AnalysisOptions;
+-import 'package:analysis_server/src/analysis_logger.dart';
+-import 'package:analysis_server/src/channel/channel.dart';
+-import 'package:analysis_server/src/collections.dart';
+-import 'package:analysis_server/src/computer/computer_highlights.dart';
+-import 'package:analysis_server/src/computer/computer_highlights2.dart';
+-import 'package:analysis_server/src/computer/computer_outline.dart';
+-import 'package:analysis_server/src/computer/new_notifications.dart';
+-import 'package:analysis_server/src/context_manager.dart';
+-import 'package:analysis_server/src/domain_analysis.dart';
+-import 'package:analysis_server/src/domain_analytics.dart';
+-import 'package:analysis_server/src/domain_completion.dart';
+-import 'package:analysis_server/src/domain_diagnostic.dart';
+-import 'package:analysis_server/src/domain_execution.dart';
+-import 'package:analysis_server/src/domain_kythe.dart';
+-import 'package:analysis_server/src/domain_server.dart';
+-import 'package:analysis_server/src/domains/analysis/navigation_dart.dart';
+-import 'package:analysis_server/src/domains/analysis/occurrences.dart';
+-import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart';
+-import 'package:analysis_server/src/edit/edit_domain.dart';
+-import 'package:analysis_server/src/operation/operation_analysis.dart';
+-import 'package:analysis_server/src/plugin/notification_manager.dart';
+-import 'package:analysis_server/src/plugin/plugin_manager.dart';
+-import 'package:analysis_server/src/plugin/plugin_watcher.dart';
+-import 'package:analysis_server/src/protocol_server.dart' as server;
+-import 'package:analysis_server/src/search/search_domain.dart';
+-import 'package:analysis_server/src/server/diagnostic_server.dart';
+-import 'package:analysis_server/src/services/correction/namespace.dart';
+-import 'package:analysis_server/src/services/search/search_engine.dart';
+-import 
'package:analysis_server/src/services/search/search_engine_internal.dart';
+-import 'package:analysis_server/src/utilities/null_string_sink.dart';
+-import 'package:analyzer/context/context_root.dart';
+-import 'package:analyzer/dart/ast/ast.dart';
+-import 'package:analyzer/dart/element/element.dart';
+-import 'package:analyzer/exception/exception.dart';
+-import 'package:analyzer/file_system/file_system.dart';
+-import 'package:analyzer/file_system/physical_file_system.dart';
+-import 'package:analyzer/instrumentation/instrumentation.dart';
+-import 'package:analyzer/plugin/resolver_provider.dart';
+-import 'package:analyzer/source/pub_package_map_provider.dart';
+-import 'package:analyzer/src/context/builder.dart';
+-import 'package:analyzer/src/dart/analysis/ast_provider_driver.dart';
+-import 'package:analyzer/src/dart/analysis/driver.dart' as nd;
+-import 'package:analyzer/src/dart/analysis/file_state.dart' as nd;
+-import 'package:analyzer/src/dart/analysis/status.dart' as nd;
+-import 'package:analyzer/src/dart/ast/utilities.dart';
+-import 'package:analyzer/src/dart/element/ast_provider.dart';
+-import 'package:analyzer/src/generated/engine.dart';
+-import 'package:analyzer/src/generated/sdk.dart';
+-import 'package:analyzer/src/generated/source.dart';
+-import 'package:analyzer/src/generated/source_io.dart';
+-import 'package:analyzer/src/generated/utilities_general.dart';
+-import 'package:analyzer/src/util/glob.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
+-import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
+-import 'package:front_end/byte_store.dart';
+-import 'package:front_end/src/base/performance_logger.dart';
+-import 'package:telemetry/crash_reporting.dart';
+-import 'package:telemetry/telemetry.dart' as telemetry;
+-import 'package:watcher/watcher.dart';
+-
+-typedef void OptionUpdater(AnalysisOptionsImpl options);
+-
+-/**
+- * Enum representing reasons why analysis might be done for a given file.
+- */
+-class AnalysisDoneReason {
+-  /**
+-   * Analysis of the file completed successfully.
+-   */
+-  static const AnalysisDoneReason COMPLETE =
+-      const AnalysisDoneReason._('COMPLETE');
+-
+-  /**
+-   * Analysis of the file was aborted because the context was removed.
+-   */
+-  static const AnalysisDoneReason CONTEXT_REMOVED =
+-      const AnalysisDoneReason._('CONTEXT_REMOVED');
+-
+-  /**
+-   * Textual description of this [AnalysisDoneReason].
+-   */
+-  final String text;
+-
+-  const AnalysisDoneReason._(this.text);
+-}
+-
+-/**
+- * Instances of the class [AnalysisServer] implement a server that listens on 
a
+- * [CommunicationChannel] for analysis requests and process them.
+- */
+-class AnalysisServer {
+-  /**
+-   * The version of the analysis server. The value should be replaced
+-   * automatically during the build.
+-   */
+-  static final String VERSION = '1.18.4';
+-
+-  /**
+-   * The options of this server instance.
+-   */
+-  AnalysisServerOptions options;
+-
+-  /**
+-   * The channel from which requests are received and to which responses 
should
+-   * be sent.
+-   */
+-  final ServerCommunicationChannel channel;
+-
+-  /**
+-   * The object used to manage sending a subset of notifications to the 
client.
+-   * The subset of notifications are those to which plugins may contribute.
+-   * This field is `null` when the new plugin support is disabled.
+-   */
+-  final NotificationManager notificationManager;
+-
+-  /**
+-   * The object used to manage the execution of plugins.
+-   */
+-  PluginManager pluginManager;
+-
+-  /**
+-   * The [ResourceProvider] using which paths are converted into [Resource]s.
+-   */
+-  final ResourceProvider resourceProvider;
+-
+-  /**
+-   * The [SearchEngine] for this server, may be `null` if indexing is 
disabled.
+-   */
+-  SearchEngine searchEngine;
+-
+-  /**
+-   * A list of the globs used to determine which files should be analyzed. The
+-   * list is lazily created and should be accessed using [analyzedFilesGlobs].
+-   */
+-  List<Glob> _analyzedFilesGlobs = null;
+-
+-  /**
+-   * The [ContextManager] that handles the mapping from analysis roots to
+-   * context directories.
+-   */
+-  ContextManager contextManager;
+-
+-  /**
+-   * A flag indicating whether the server is running.  When false, contexts
+-   * will no longer be added to [contextWorkQueue], and [performOperation] 
will
+-   * discard any tasks it finds on [contextWorkQueue].
+-   */
+-  bool running;
+-
+-  /**
+-   * A flag indicating the value of the 'analyzing' parameter sent in the last
+-   * status message to the client.
+-   */
+-  bool statusAnalyzing = false;
+-
+-  /**
+-   * A list of the request handlers used to handle the requests sent to this
+-   * server.
+-   */
+-  List<RequestHandler> handlers;
+-
+-  /**
+-   * The object used to manage the SDK's known to this server.
+-   */
+-  DartSdkManager sdkManager;
+-
+-  /**
+-   * The instrumentation service that is to be used by this analysis server.
+-   */
+-  final InstrumentationService instrumentationService;
+-
+-  /**
+-   * A set of the [ServerService]s to send notifications for.
+-   */
+-  Set<ServerService> serverServices = new HashSet<ServerService>();
+-
+-  /**
+-   * A set of the [GeneralAnalysisService]s to send notifications for.
+-   */
+-  Set<GeneralAnalysisService> generalAnalysisServices =
+-      new HashSet<GeneralAnalysisService>();
+-
+-  /**
+-   * A table mapping [AnalysisService]s to the file paths for which these
+-   * notifications should be sent.
+-   */
+-  Map<AnalysisService, Set<String>> analysisServices =
+-      new HashMap<AnalysisService, Set<String>>();
+-
+-  /**
+-   * Performance information before initial analysis is complete.
+-   */
+-  ServerPerformance performanceDuringStartup = new ServerPerformance();
+-
+-  /**
+-   * Performance information after initial analysis is complete
+-   * or `null` if the initial analysis is not yet complete
+-   */
+-  ServerPerformance performanceAfterStartup;
+-
+-  /**
+-   * A [RecentBuffer] of the most recent exceptions encountered by the 
analysis
+-   * server.
+-   */
+-  final RecentBuffer<ServerException> exceptions = new RecentBuffer(10);
+-
+-  /**
+-   * The class into which performance information is currently being recorded.
+-   * During startup, this will be the same as [performanceDuringStartup]
+-   * and after startup is complete, this switches to 
[performanceAfterStartup].
+-   */
+-  ServerPerformance _performance;
+-
+-  /**
+-   * The [Completer] that completes when analysis is complete.
+-   */
+-  Completer _onAnalysisCompleteCompleter;
+-
+-  /**
+-   * The controller that is notified when analysis is started.
+-   */
+-  StreamController<bool> _onAnalysisStartedController;
+-
+-  /**
+-   * The controller that is notified when a single file has been analyzed.
+-   */
+-  StreamController<ChangeNotice> _onFileAnalyzedController;
+-
+-  /**
+-   * The content overlay for all analysis drivers.
+-   */
+-  final nd.FileContentOverlay fileContentOverlay = new 
nd.FileContentOverlay();
+-
+-  /**
+-   * The current state of overlays from the client.  This is used as the
+-   * content cache for all contexts.
+-   */
+-  final ContentCache overlayState = new ContentCache();
+-
+-  /**
+-   * If the "analysis.analyzedFiles" notification is currently being 
subscribed
+-   * to (see [generalAnalysisServices]), and at least one such notification 
has
+-   * been sent since the subscription was enabled, the set of analyzed files
+-   * that was delivered in the most recently sent notification.  Otherwise
+-   * `null`.
+-   */
+-  Set<String> prevAnaly