GNU bug report logs - #44926
[WIP] Add dart-2.8.4
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Package: guix-patches;
Reported by: Nicolò Balzarotti <anothersms@HIDDEN>; dated Sat, 28 Nov 2020 18:38:01 UTC;
Maintainer for guix-patches is
guix-patches@HIDDEN.
Message received at 44926 <at> debbugs.gnu.org:
Received: (at 44926) by debbugs.gnu.org; 29 Nov 2020 17:40:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 29 12:40:00 2020
Received: from localhost ([127.0.0.1]:52505 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1kjQg3-0003vK-HO
for submit <at> debbugs.gnu.org; Sun, 29 Nov 2020 12:40:00 -0500
Received: from mail-wm1-f51.google.com ([209.85.128.51]:37838)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <anothersms@HIDDEN>) id 1kjQc3-0003kR-TK
for 44926 <at> debbugs.gnu.org; Sun, 29 Nov 2020 12:35:52 -0500
Received: by mail-wm1-f51.google.com with SMTP id h21so17810811wmb.2
for <44926 <at> debbugs.gnu.org>; Sun, 29 Nov 2020 09:35:51 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
h=from:to:cc:subject:date:message-id:in-reply-to:references
:mime-version:content-transfer-encoding;
bh=cWfWKKhMhHJ2GM9SVlNL6YKrOJiIScK4THLuUDEgLvY=;
b=Clfe7Kd8C7plqsGal9enP+v+sJxRA+6VXWH0JGVVpoOmwHIVw9/2rqMi0NmHABKtec
TEVczBL4k2EgJyGuIAdxz0k/XGO96zZnsFoqg5GUQzEqEHLdErQ/ytCcf3uKDMbmjfG1
2ohRJ0x0ZAAfj+UNQW5cGqo+ZSnxHEgmn1ye0WEIWBaWS0RLAqSYz+mX0ca55mpbw9Jy
KxCEnR3bedGdBGg9ktygG/7RxCR6FzO9yzZL/eZlSBhXOSJ/CbvUEmDkk23WffTG/NCc
JUmiVpM0xSo7geO0TD77rNUR56aUkmH/A1Jw8TznCP6j2+HO+3BhPMWIuiWNFeFvpY7h
BK4A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20161025;
h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
:references:mime-version:content-transfer-encoding;
bh=cWfWKKhMhHJ2GM9SVlNL6YKrOJiIScK4THLuUDEgLvY=;
b=cVcENTUpgKCA/QrMCoxrqjBzLZSwo99OKO/sS2PK3QEQrED/Cbmci2MNuFsG04nv+Z
zYXNJM7EWOXDYQbe/uX/CqE3ACqDwwjZW9h1YlUki1eosewyZENisHGGgdYoXKM3sZ6h
olz2LwnLShsKW1aENvPk/eiwDGJwiU7gpjIaqsuFVabGQTjHH0XRskChqH2y8r8P+LkM
z3sEp4ylIceC+63w0XW+X1i/p9w3MG7A4utF1OCNJ8yu7dGLbBuPqyyIBafwpD6q2oQk
9m7tajDasqQ/l3fBdHGNXSlTuHOrQkoFMEr98hiOzzwDAh9GRb9lngdq5seWZsmxoxFy
f7ZQ==
X-Gm-Message-State: AOAM531UlSR309+dxDSr+s7qYBGMe6Y0JmfFf7Dc/DyQM4IZgCQ6o8R9
zmCdwfVqZZalneB3EBYSC2wynyi8sb0=
X-Google-Smtp-Source: ABdhPJwze6UUxmh26e5MJVxLVOcmBhFnaaxmZshvd5OiuiwW4yUdJT5KL3psc+v5PmMA9lEgUul65A==
X-Received: by 2002:a1c:4456:: with SMTP id r83mr10830697wma.108.1606671342716;
Sun, 29 Nov 2020 09:35:42 -0800 (PST)
Received: from localhost.localdomain
(host-79-54-131-134.retail.telecomitalia.it. [79.54.131.134])
by smtp.gmail.com with ESMTPSA id c9sm22613231wrp.73.2020.11.29.09.35.27
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Sun, 29 Nov 2020 09:35:38 -0800 (PST)
From: nixo <anothersms@HIDDEN>
X-Google-Original-From: nixo <nicolo@HIDDEN>
To: 44926 <at> debbugs.gnu.org
Subject: [PATCH v2 03/15] gnu: Add dart-2.0.0-dev.8.0.
Date: Sun, 29 Nov 2020 18:34:02 +0100
Message-Id: <20201129173414.8984-3-nicolo@HIDDEN>
X-Mailer: git-send-email 2.29.2
In-Reply-To: <20201129173414.8984-1-nicolo@HIDDEN>
References: <20201129173414.8984-1-nicolo@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Debbugs-Envelope-To: 44926
X-Mailman-Approved-At: Sun, 29 Nov 2020 12:39:57 -0500
Cc: nixo <nicolo@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
* gnu/packages/dart.scm (dart-2.0.0-dev.8.0): New variable.
* gnu/packages/patches (dart-2.0.0-dev.8-disable-analytics.patch): New file.
* gnu/local.mk: Add it.
---
gnu/local.mk | 1 +
gnu/packages/dart.scm | 391 +-
.../dart-2.0.0-dev.8-disable-analytics.patch | 192411 +++++++++++++++
3 files changed, 192801 insertions(+), 2 deletions(-)
create mode 100644 gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics=
.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index 359015415c..ee4ade0139 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -905,6 +905,7 @@ dist_patch_DATA =3D \
%D%/packages/patches/cursynth-wave-rand.patch \
%D%/packages/patches/cvs-CVE-2017-12836.patch \
%D%/packages/patches/cyrus-sasl-ac-try-run-fix.patch \
+ %D%/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch \
%D%/packages/patches/date-output-pkg-config-files.patch \
%D%/packages/patches/datefudge-gettimeofday.patch \
%D%/packages/patches/dbacl-include-locale.h.patch \
diff --git a/gnu/packages/dart.scm b/gnu/packages/dart.scm
index f8af8696bc..07e3dcee21 100644
--- a/gnu/packages/dart.scm
+++ b/gnu/packages/dart.scm
@@ -18,10 +18,20 @@
=20
(define-module (gnu packages dart)
#:use-module ((guix licenses) #:prefix license:)
- #:use-module (guix build utils)
+ #:use-module (guix build-system gnu)
#:use-module (guix git-download)
#:use-module (guix packages)
- #:use-module (guix utils))
+ #:use-module (guix utils)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages build-tools)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages golang)
+ #:use-module (gnu packages libunwind)
+ #:use-module (gnu packages ninja)
+ #:use-module (gnu packages nss)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages python)
+ #:use-module (gnu packages python-xyz))
=20
(define* (dart-pkg name tag hash #:optional
(url (string-append
@@ -39,3 +49,380 @@
tag)))
(sha256 (base32 hash))))
=20
+(define-public dart-2.0.0-dev.8.0
+ (package
+ (name "dart")
+ (version "2.0.0-dev.8.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/dart-lang/sdk")
+ (commit version)))
+ (file-name (string-append name "-" version))
+ (sha256
+ (base32
+ "17870yvi4flcraw3ihs694g4r0fmmmj2qmz9n4r311pizxzagjkk"))
+ (modules '((guix build utils)))
+ ;; Delete a folder containing a pre-build windows .dll
+ (snippet
+ '(delete-file-recursively "build/win"))
+ (patches
+ (search-patches "dart-2.0.0-dev.8-disable-analytics.patch"))))
+ (arguments
+ `(#:configure-flags
+ ;; FIXME: Do not hardcode the target? Don't know if when fixed this
+ ;; package will work on other targets
+ (list "host_cpu=3D\"x64\""
+ "target_cpu=3D\"x64\""
+ "dart_target_arch=3D\"x64\""
+ "target_os=3D\"linux\""
+ "dart_runtime_mode=3D\"develop\""
+ "dart_debug=3Dfalse"
+ "is_debug=3Dfalse"
+ "is_release=3Dtrue"
+ "is_product=3Dfalse"
+ "is_clang=3Dfalse"
+ "use_goma=3Dfalse"
+ "goma_dir=3D\"None\""
+ "dart_use_tcmalloc=3Dtrue"
+ "dart_use_fallback_root_certificates=3Dtrue"
+ "dart_zlib_path =3D \"//runtime/bin/zlib\""
+ "dart_platform_sdk=3Dfalse"
+ "is_asan=3Dfalse"
+ "is_msan=3Dfalse"
+ "is_tsan=3Dfalse"
+ "dart_snapshot_kind=3D\"app-jit\"")
+ #:phases
+ (modify-phases %standard-phases
+ ;; no check target. Tests are available, but I should check how =
to
+ ;; run them
+ (delete 'check)
+ (add-before 'configure 'add-git-revision
+ (lambda _
+ (with-output-to-file "tools/GIT_REVISION"
+ (lambda () (display "0")))))
+ (add-before 'configure 'add-third-party-src
+ ;; Copy some deps to third_party, as required by the build syst=
em
+ ;; TODO: LINK THEM INSTEAD OF COPYING
+ (lambda* (#:key inputs #:allow-other-keys)
+ (use-modules (ice-9 regex) (ice-9 match))
+ ;; place pkg inputs in the right third_party folder
+ ;; (either pkg or pkgtested) based on their input name
+ (define (dart-copy-deps-to-third-party-dir pkgdep)
+ (copy-recursively
+ (assoc-ref inputs pkgdep)
+ (let* ((out "third_party/")
+ (text
+ (if (string-match "pkgtested" pkgdep)
+ (string-append out "pkg_tested/"
+ (regexp-substitute
+ #f
+ (string-match "dart-pkgtested-" pkgdep)
+ 'post))
+ (string-append out "pkg/"
+ (regexp-substitute
+ #f
+ (string-match "dart-pkg-" pkgd=
ep)
+ 'post)))))
+ (if (string-match "-" text)
+ (regexp-substitute/global
+ #f "-" text 'pre "_" 'post)
+ text))))
+ (map (lambda (input)
+ (let ((pkg (car input)))
+ ;; Copy only dependencies starting with "dart-"
+ (when (string-match "dart-" pkg)
+ (dart-copy-deps-to-third-party-dir pkg))))
+ inputs)
+ ;; Do the same for other required packages
+ (copy-recursively (assoc-ref inputs "boringssl")
+ "third_party/boringssl/src")
+ (copy-recursively (assoc-ref inputs "gperftools")
+ "third_party/tcmalloc/gperftools")
+ (copy-recursively (assoc-ref inputs "root-certificates")
+ "third_party/root_certificates")
+ (copy-recursively (assoc-ref inputs "zlib")
+ "third_party/zlib")
+ (copy-recursively (assoc-ref inputs "observatory-pub-packages=
")
+ "third_party/observatory_pub_packages")))
+ (add-after 'add-third-party-src 'generate-third-party-build-files
+ (lambda* (#:key inputs #:allow-other-keys)
+ (with-directory-excursion "third_party/boringssl"
+ ;; go requires home to be set
+ (setenv "HOME" "/tmp/")
+ (invoke
+ (string-append (assoc-ref inputs "python") "/bin/python2")
+ "src/util/generate_build_files.py" "gn")
+ (map
+ (lambda (file)
+ (copy-file
+ (string-append (assoc-ref inputs "boringssl-gen") "/" f=
ile)
+ file))
+ '("BUILD.gn" "BUILD.generated.gni")))))
+ (add-before 'configure 'enable-dtags
+ ;; adds the RUNPATH
+ (lambda* (#:key inputs propagated-inputs #:allow-other-keys)
+ (substitute* "build/config/gcc/BUILD.gn"
+ (("disable-new-dtags") "enable-new-dtags"))))
+ (replace 'configure
+ (lambda* (#:key configure-flags #:allow-other-keys)
+ (let ((args (string-join configure-flags " ")))
+ (mkdir "out")
+ ;; Generate ninja build files.
+ (invoke "gn" "gen" "out/Release"
+ (string-append "--args=3D" args))
+ ;; Print the full list of supported arguments as well as
+ ;; their current status for convenience.
+ (format #t "Dumping configure flags...\n")
+ (invoke "gn" "args" "out/Release" "--list"))))
+ (replace 'build
+ (lambda* (#:key configure-flags #:allow-other-keys)
+ (invoke "ninja" "all" "-C" "out/Release")))
+ ;; no install phase
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ ;; This should depend on the architecture as before
+ (copy-recursively "out/Release/dart-sdk/" out)))))))
+ (inputs
+ `(("zlib"
+ ,(dart-pkg
+ "zlib" "c3d0a6190f2f8c924a05ab6cc97b8f975bddd33f"
+ "0fr3h9krramy0jclbacjnwbn0lzvjm6b809llhaz56mbd90i4yl4"
+ "https://chromium.googlesource.com/chromium/src/third_party/zlib=
"))
+ ("libunwind" ,libunwind)
+ ("nspr" ,nspr)
+ ("nss" ,nss)
+ ("boringssl"
+ ,(dart-pkg
+ "boringssl" "d519bf6be0b447fb80fbc539d4bff4479b5482a2"
+ "137q647ha8x770wv3jj2kgjv3lj9qjcv191m51vkp3a7zqhhaknv"
+ "https://boringssl.googlesource.com/boringssl"))
+ ("boringssl-gen"
+ ,(dart-pkg "boringssl-gen" "d2b56d1b7657e52eb5a1f075968c773aa3e536=
14"
+ "1pn2hn0i9fwd27i695q4av3bymm11pmydlbv4hcafslhggq0md19"))
+ ("gperftools"
+ ,(dart-pkg "gperftools" "02eeed29df112728564a5dde6417fa4622b57a06"
+ "1j5yx7v1g8ljzv5hs2452q736gdf1xm5x9w5d1csm5bjlryxaykm"
+ "https://github.com/gperftools/gperftools"))
+ ("root-certificates"
+ ,(dart-pkg "root-certificates"
+ "16ef64be64c7dfdff2b9f4b910726e635ccc519e"
+ "1kxadamhz03dlvm3j5xxqjgn0jasgskyjx11ysm3a431ma5j9182"))
+ ("observatory-pub-packages"
+ ,(dart-pkg "observatory-pub-packages"
+ "4c282bb240b68f407c8c7779a65c68eeb0139dc6"
+ "0p09r24q37i4hyz3n2j75lx9a252zr81jcynap61nfh415xlcv3z"))
+ ("dart-pkg-args"
+ ,(dart-pkg "args" "0.13.7"
+ "0y3f1kaplxmanw5gqm84l9wqx2nl1vrk11m8kdqqwc7n73fc4kdl"))
+ ("dart-pkg-async"
+ ,(dart-pkg "async" "2.0.0"
+ "1r0fqdh633426p2h9ynb126s58l30jj3mj0bzvjigbklam7vfjgc"))
+ ("dart-pkg-barback"
+ ,(dart-pkg "barback" "0.15.2+13"
+ "0n532b2as62nkzq7w9jaxk6gkl78il1kq3q0s1xgcdazmbzx5fb1"))
+ ("dart-pkg-bazel-worker"
+ ,(dart-pkg "bazel-worker" "v0.1.4"
+ "1cc4jvx9qba76ws2l7ijr8kvl8yydfak965gwrgb88f2r1qp2q46"))
+ ("dart-pkg-charcode"
+ ,(dart-pkg "charcode" "v1.1.1"
+ "0907828insqsr0ffyz4n2xns4qc77brnm7zv0a6965b53b84pk8b"))
+ ("dart-pkg-cli-util"
+ ,(dart-pkg "cli-util" "0.1.2+1"
+ "09nqdkyipnb0734ci554gxrl9cic528mlhfad9wibcg6kx7y6gra"))
+ ("dart-pkg-collection"
+ ,(dart-pkg "collection" "1.14.3"
+ "1rdgvrj67vj27k2052h5k31xc6rays4p4j27a122c1ikxnb4i3bh"))
+ ("dart-pkg-convert"
+ ,(dart-pkg "convert" "2.0.1"
+ "1v0b6vgzp6i37jja2d2aim6dmig8xfjhi8b553a1909n5pzqxp2g"))
+ ("dart-pkg-crypto"
+ ,(dart-pkg "crypto" "2.0.2+1"
+ "12v5rw189vrk2n2ryxkf8qcbdx8hf3bf33i552439lzhz0czkvcq"))
+ ("dart-pkg-csslib"
+ ,(dart-pkg "csslib" "0.14.1"
+ "0zlmbg6vwwc4cha8l2xv73klwzdqg6b43qmhlca0f62lr7k6014w"))
+ ("dart-pkg-dart2js-info"
+ ,(dart-pkg "dart2js_info" "0.5.5+1"
+ "05rdp96n9rxkjyw7lmn3a9hlbsaxpdn8wp8qnsfjmqv3i8vcypvj"))
+ ("dart-pkg-dartdoc"
+ ,(dart-pkg "dartdoc" "v0.13.0+3"
+ "1v85510bvjhllr00hgabvn737bh791x1m14qsv7zbxhqnsy2jafj"))
+ ("dart-pkg-fixnum"
+ ,(dart-pkg "fixnum" "0.10.5"
+ "01j7sj4mnkaxam1bpmhvlxl817dcck92xzpk66m7qbccm58c0giw"))
+ ("dart-pkg-func"
+ ,(dart-pkg "func" "25eec48146a58967d75330075ab376b3838b18a8"
+ "0xcfnca5sa5hc62g14xx11qqv9xjamsaqqn1cmldb917qnxb7lkk"))
+ ("dart-pkg-glob"
+ ,(dart-pkg "glob" "1.1.5"
+ "1lbd7lkxvw0q5zvz2hxvc035mxakmzcq08lwwr25v56s9ybavh93"))
+ ("dart-pkg-html"
+ ,(dart-pkg "html" "0.13.2"
+ "0w0gn8camhqhclmlf5g1mp03nssl2gyghqkmcz0zrvkicc1d5r1s"))
+ ("dart-pkg-http"
+ ,(dart-pkg "http" "0.11.3+14"
+ "1a1k8m2gp8a02q9bw40bqj7ad9yx44ap0w4xr7s26lridi7isylc"))
+ ("dart-pkg-http-multi-server"
+ ,(dart-pkg "http_multi_server" "2.0.4"
+ "09x4alr181p6s3zxqflgmhglglxr4aaaz6ys7pp0r715dq50qz4n"))
+ ("dart-pkg-http-parser"
+ ,(dart-pkg "http-parser" "3.1.1"
+ "18p8cqanxbxsxk3wwvisgb1bxdy83vkh3l11h0cys7gxrz6z2g12"))
+ ("dart-pkg-http-throttle"
+ ,(dart-pkg "http-throttle" "1.0.1"
+ "1q0pv1px5rd7zjd799pnq5zcr825ya1yqnxyvdr91rlga621hdbj"))
+ ("dart-pkg-intl"
+ ,(dart-pkg "intl" "0.15.2"
+ "0vd0a3pqmfs03kf12mmg0rrpian0f35ja0x332mr7cx8h9d7pmqx"))
+ ("dart-pkg-isolate"
+ ,(dart-pkg "isolate" "1.1.0"
+ "12m97zhm8qwpraf6nyvj1nawssygrwz0zka7843ayj3vxx6j34xr"))
+ ("dart-pkg-json-rpc-2"
+ ,(dart-pkg "json_rpc_2" "2.0.4"
+ "1q2x6gy7l7agr930k4r6vncfzjcnp43chq9fwxfa0p0nyccnixz3"))
+ ("dart-pkg-linter"
+ ,(dart-pkg "linter" "0.1.39"
+ "0wfd6bzfny5bis3r2ygj89kyd2gl618x7hk06qp4h9nvbpsvvz0n"))
+ ("dart-pkg-logging"
+ ,(dart-pkg "logging" "0.11.3+1"
+ "180w376jz2wmfijcfg07ygfpc6i68i4zibw2421xvwcjhi0q07kv"))
+ ("dart-pkg-markdown"
+ ,(dart-pkg "markdown" "0.11.4"
+ "009qw47k3lrl2fkdn378l41dga493alspywrk3z93yy1pqaf1j5n"))
+ ("dart-pkg-matcher"
+ ,(dart-pkg "matcher" "0.12.1+4"
+ "1q0hbcc5ys5zpml7blsyj0d1f42w67vr6x19vxg34sra3bv0h2xx"))
+ ("dart-pkg-mime"
+ ,(dart-pkg "mime" "0.9.4"
+ "1bh4xla0qlaz9cm1qgxqq57l76b2zh5qqk9pax7sc57s79zi1nmz"))
+ ("dart-pkg-mockito"
+ ,(dart-pkg "mockito" "2.0.2"
+ "1q1zlv3fwfjbmwm141wj19vglx15s8xkqzdsqz9hhv6gg7h45gsl"))
+ ("dart-pkg-mustache4dart"
+ ,(dart-pkg "mustache4dart" "v2.1.0"
+ "0wsmg2xvpp2h9rqcg65icymh2s9hifq6v700mni65ky33dah9ji1"
+ "https://github.com/valotas/mustache4dart"))
+ ("dart-pkg-oauth2"
+ ,(dart-pkg "oauth2" "1.1.0"
+ "1519799j61sdka6p1n6ba768v5a8q4q9w6y957dzqigwaf19p9v5"))
+ ("dart-pkg-path"
+ ,(dart-pkg "path" "1.4.2"
+ "0ld39rpzla8wd4c2kx1kycdk66cwypklxki58nb18959j2749fbi"))
+ ("dart-pkg-plugin"
+ ,(dart-pkg "plugin" "0.2.0"
+ "10sgglzpwr9hkdhr6r4d1kvazv49zdhc9cr2asxdk5531347kk9m"))
+ ("dart-pkg-pool"
+ ,(dart-pkg "pool" "1.3.3"
+ "1cljnzsrbjgkif8rj1vxrzp5rz2xak265pasachdcg4yh2hl0y7d"))
+ ("dart-pkg-protobuf"
+ ,(dart-pkg "protobuf" "0.5.4"
+ "1wjb8da0da0gda0f83dl2dvl5w4a6gvq5xcg1yrgg3xjs7gzy8dd"))
+ ("dart-pkg-pub"
+ ,(dart-pkg "pub" "cde958f157d3662bf968bcbed05580d5c0355e89"
+ "1g1cw4c0811l3pvc80fvb7s04shzxvxrcb25195s7kjjfiivgqi4"))
+ ("dart-pkg-pub-semver"
+ ,(dart-pkg "pub-semver" "1.3.2"
+ "15s6zn2qyyfc5lf8ip5h8j3sq5miz4vrzxbgbwi5vv91d53miia8"))
+ ("dart-pkg-quiver"
+ ,(dart-pkg "quiver" "0.25.0"
+ "02wqrk266s0ias9lfy7l5dh9ni2r697n3z42h4sgzxy7qg4rip24"
+ "https://github.com/google/quiver-dart"))
+ ("dart-pkg-resource"
+ ,(dart-pkg "resource" "af5a5bf65511943398146cf146e466e5f0b95cb9"
+ "1jq4bmg65jrpyqxcvbp87d5qqpgmv5ylfz3w1djzimq5jhr9k4vn"))
+ ("dart-pkg-scheduled-test"
+ ,(dart-pkg "scheduled-test" "0.12.11+1"
+ "1xk66f68m443yig5672p0dpack2c0kpkyk2d7f8iaq22q5zq7h1w"))
+ ("dart-pkg-shelf"
+ ,(dart-pkg "shelf" "0.6.8"
+ "0vl4m47yhjvc1nynyzc42bks4mzv877vsy7fbcv9w2fjh05sxhb9"))
+ ("dart-pkg-shelf-packages-handler"
+ ,(dart-pkg "shelf-packages-handler" "1.0.3"
+ "0iccfa713jyg7bb7fx144i5rl0afyfxvb3pi56igw2gdwklq4yck"))
+ ("dart-pkg-shelf-static"
+ ,(dart-pkg "shelf-static" "0.2.4"
+ "1gfyjqvv13d3zpnaahv5fi601ag7mr8crm94xawlvgvpqgpl0hsh"))
+ ("dart-pkg-shelf-web-socket"
+ ,(dart-pkg "shelf-web-socket" "0.2.1"
+ "18krh9bnbshwjjl47k15x9g3r7s5k0yichvn3gdsddjqjgp6vfp8"))
+ ("dart-pkg-source-map-stack-trace"
+ ,(dart-pkg "source-map-stack-trace" "1.1.4"
+ "1cpyq1vdfc623k8cdx673v2kkv112hzsrsyaxd8dd82v23caglva"))
+ ("dart-pkg-source-maps"
+ ,(dart-pkg "source-maps" "0.10.4"
+ "11dmncxgv8q40am73dxlxgzkfaanvgc9p3lds77m96mb1k27zbkf"))
+ ("dart-pkg-source-span"
+ ,(dart-pkg "source-span" "1.4.0"
+ "0gpa15p5rcilgl0paqa7f9fkiks7kyalzl2r0sd37m4cry9cf0vz"))
+ ("dart-pkg-stack-trace"
+ ,(dart-pkg "stack-trace" "1.8.2"
+ "0n21n2dv371bfcw6q83xwb8x26d1rd49cvx5qzm8mi0006h9frzs"))
+ ("dart-pkg-stream-channel"
+ ,(dart-pkg "stream-channel" "1.6.2"
+ "02ixi6vsja2cc22jcflp89v5wsbj45fl23p0sgaayqaj6l1jcxm1"))
+ ("dart-pkg-string-scanner"
+ ,(dart-pkg "string-scanner" "1.0.2"
+ "13hfnc704c9qipcvjinbv1hbq57hs5l2f68kyw282dlrcbbwwksy"))
+ ("dart-pkg-term-glyph"
+ ,(dart-pkg "term-glyph" "1.0.0"
+ "1nxqg345k2zh0yn498mxxdi7v1q3651z5invv0llfvs17ly2h2pz"))
+ ("dart-pkg-test"
+ ,(dart-pkg "test" "0.12.24+6"
+ "1xkmvwx30zm5ci1gn53hf6zrxymlq9cn9waa00k3ihxbd64mxg1k"))
+ ("dart-pkg-test-reflective-loader"
+ ,(dart-pkg "test-reflective-loader" "0.1.0"
+ "1qmbayg6js96lcy9s6grly1y6rh9x5mbyqygnr58zsdypzvhr4hr"))
+ ("dart-pkg-tuple"
+ ,(dart-pkg "tuple" "v1.0.1"
+ "0khkwq1blc90lgdcy4i8ng4nzppmhg31nziw4sc36axwbwdnpc86"))
+ ("dart-pkg-typed-data"
+ ,(dart-pkg "typed-data" "1.1.3"
+ "1zr9la34lib0rdfdf0539hdai2j71kf3s4ynsal7hw4pqvkdwi72"))
+ ("dart-pkg-unittest"
+ ,(dart-pkg "test" "0.11.7"
+ "1xbx2i2glmqlc3cz8x91anhf8d4hsr3bq9j53qliawz8j6q9anf8"))
+ ("dart-pkg-usage"
+ ,(dart-pkg "usage" "3.3.0"
+ "0r8d0q4ij42c7axclwns61cyrxpmk1qpggqfiqfm5vbmh8gpfm3b"))
+ ("dart-pkg-utf"
+ ,(dart-pkg "utf" "0.9.0+3"
+ "07jppjvg8bc8plzq910b8ld32l6x35i8qwy0mdqimydjjaslj78f"))
+ ("dart-pkg-watcher"
+ ,(dart-pkg "watcher" "0.9.7+4"
+ "09jpk98qb5j5250sr9r9ic17gj741yjy1p2j50zzl47a9wydfjly"))
+ ("dart-pkg-web-socket-channel"
+ ,(dart-pkg "web-socket-channel" "1.0.6"
+ "1phb2n3n6npzwl08nnp1aggcjmvwx516b816q4hsx8w190yr4f86"))
+ ("dart-pkg-yaml"
+ ,(dart-pkg "yaml" "2.1.12"
+ "0m2xr36vd2v3yirv1jb5v3dncsczn8n34s9fmqcm2ld979b4vanm"))
+ ("dart-pkgtested-dart-style"
+ ,(dart-pkg "dart-style" "1.0.7"
+ "0qym7z5n4w4jy75fnvcyza3hw0nrm8kli5mv65drr16f8pkr0lcg"))
+ ("dart-pkgtested-package-config"
+ ,(dart-pkg "package-config" "1.0.3"
+ "03w67nb1dhi2yqb63z1301p88hjws1d8azmw8m5ap4zapqdbhzgn"))
+ ("dart-pkgtested-package-resolver"
+ ,(dart-pkg "package-resolver" "1.0.2+1"
+ "0qs7zmxjwqqjkq6mqnz8b3rj142hyz1x0v1innh8n3bwmljgp3w9")=
)))
+ (native-inputs
+ `(("python" ,python-2)
+ ("python2-gyp" ,python2-gyp)
+ ("perl" ,perl)
+ ("go" ,go)
+ ("gn" ,gn-for-dart-bootstrap)
+ ("ninja" ,ninja)
+ ("gcc" ,gcc-6)))
+ (build-system gnu-build-system)
+ (home-page "https://dart.dev")
+ (synopsis "The Dart SDK, including the VM, dart2js and core libraries")
+ (description "Dart is a programming language which is:
+@enumerate
+@item Optimized for UI
+@item Supports hot reload
+@item Supported both on desktop and on mobile
+@end")
+ (license license:bsd-3)))
diff --git a/gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch =
b/gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch
new file mode 100644
index 0000000000..763e5503ea
--- /dev/null
+++ b/gnu/packages/patches/dart-2.0.0-dev.8-disable-analytics.patch
@@ -0,0 +1,192411 @@
+From f9843f7af84da47141a2721972c7859cdddfa36f Mon Sep 17 00:00:00 2001
+From: nixo <nicolo@HIDDEN>
+Date: Tue, 24 Nov 2020 16:59:00 +0100
+Subject: [PATCH] disable analytics
+
+---
+ BUILD.gn | 7 -
+ pkg/analysis_server/AUTHORS | 6 -
+ pkg/analysis_server/CHANGELOG.md | 5 -
+ pkg/analysis_server/CONTRIBUTING.md | 40 -
+ pkg/analysis_server/LICENSE | 26 -
+ pkg/analysis_server/README.md | 22 -
+ pkg/analysis_server/analysis_options.yaml | 8 -
+ pkg/analysis_server/benchmark/benchmarks.dart | 239 -
+ .../benchmark/integration/README.md | 69 -
+ .../benchmark/integration/driver.dart | 315 -
+ .../integration/input_converter.dart | 399 -
+ .../instrumentation_input_converter.dart | 146 -
+ .../benchmark/integration/local_runner.dart | 91 -
+ .../integration/log_file_input_converter.dart | 82 -
+ .../benchmark/integration/main.dart | 246 -
+ .../benchmark/integration/operation.dart | 236 -
+ .../benchmark/perf/analysis_timing_tests.dart | 161 -
+ .../benchmark/perf/benchmark_angular.dart | 115 -
+ .../benchmark/perf/benchmark_flutter.dart | 216 -
+ .../benchmark/perf/benchmark_scenario.dart | 310 -
+ .../benchmark/perf/benchmarks_impl.dart | 187 -
+ .../perf/completion_timing_tests.dart | 85 -
+ .../benchmark/perf/memory_tests.dart | 133 -
+ .../benchmark/perf/performance_tests.dart | 76 -
+ pkg/analysis_server/benchmark/readme.md | 35 -
+ pkg/analysis_server/bin/server.dart | 13 -
+ pkg/analysis_server/doc/api.html | 4725 -----
+ .../occurrences/occurrences_core.dart | 17 -
+ .../lib/plugin/edit/assist/assist_core.dart | 90 -
+ .../lib/plugin/edit/assist/assist_dart.dart | 107 -
+ .../lib/plugin/edit/fix/fix_core.dart | 88 -
+ .../lib/plugin/edit/fix/fix_dart.dart | 73 -
+ .../lib/plugin/protocol/protocol_dart.dart | 216 -
+ .../lib/protocol/protocol.dart | 673 -
+ .../lib/protocol/protocol_constants.dart | 258 -
+ .../lib/protocol/protocol_generated.dart | 15802 ----------------
+ .../lib/src/analysis_logger.dart | 55 -
+ .../lib/src/analysis_server.dart | 1557 --
+ .../lib/src/channel/byte_stream_channel.dart | 175 -
+ .../lib/src/channel/channel.dart | 150 -
+ pkg/analysis_server/lib/src/collections.dart | 71 -
+ .../src/computer/computer_closingLabels.dart | 105 -
+ .../lib/src/computer/computer_highlights.dart | 737 -
+ .../src/computer/computer_highlights2.dart | 834 -
+ .../lib/src/computer/computer_hover.dart | 140 -
+ .../lib/src/computer/computer_outline.dart | 488 -
+ .../lib/src/computer/computer_overrides.dart | 237 -
+ .../computer/import_elements_computer.dart | 433 -
+ .../computer/imported_elements_computer.dart | 129 -
+ .../lib/src/computer/new_notifications.dart | 45 -
+ pkg/analysis_server/lib/src/constants.dart | 100 -
+ .../lib/src/context_manager.dart | 1817 --
+ .../lib/src/domain_abstract.dart | 78 -
+ .../lib/src/domain_analysis.dart | 432 -
+ .../lib/src/domain_analytics.dart | 60 -
+ .../lib/src/domain_completion.dart | 298 -
+ .../lib/src/domain_diagnostic.dart | 75 -
+ .../lib/src/domain_execution.dart | 147 -
+ pkg/analysis_server/lib/src/domain_kythe.dart | 114 -
+ .../lib/src/domain_server.dart | 74 -
+ .../domains/analysis/implemented_dart.dart | 79 -
+ .../src/domains/analysis/navigation_dart.dart | 360 -
+ .../lib/src/domains/analysis/occurrences.dart | 33 -
+ .../domains/analysis/occurrences_dart.dart | 63 -
+ .../lib/src/edit/edit_domain.dart | 1062 --
+ .../lib/src/operation/operation_analysis.dart | 164 -
+ .../lib/src/plugin/notification_manager.dart | 365 -
+ .../lib/src/plugin/plugin_locator.dart | 105 -
+ .../lib/src/plugin/plugin_manager.dart | 1102 --
+ .../lib/src/plugin/plugin_watcher.dart | 134 -
+ .../lib/src/plugin/request_converter.dart | 46 -
+ .../lib/src/plugin/result_collector.dart | 124 -
+ .../lib/src/plugin/result_converter.dart | 46 -
+ .../lib/src/plugin/result_merger.dart | 846 -
+ .../lib/src/protocol/protocol_internal.dart | 336 -
+ .../lib/src/protocol_server.dart | 283 -
+ .../completion/completion_core.dart | 86 -
+ .../completion/dart/completion_dart.dart | 97 -
+ .../lib/src/search/element_references.dart | 93 -
+ .../lib/src/search/search_domain.dart | 211 -
+ .../lib/src/search/type_hierarchy.dart | 202 -
+ .../lib/src/server/diagnostic_server.dart | 16 -
+ .../lib/src/server/driver.dart | 640 -
+ .../lib/src/server/http_server.dart | 169 -
+ .../lib/src/server/stdio_server.dart | 40 -
+ .../services/completion/completion_core.dart | 75 -
+ .../completion/completion_performance.dart | 117 -
+ .../completion/dart/arglist_contributor.dart | 340 -
+ .../dart/combinator_contributor.dart | 41 -
+ .../completion/dart/common_usage_sorter.dart | 127 -
+ .../dart/common_usage_sorter.g.dart | 427 -
+ .../completion/dart/completion_manager.dart | 278 -
+ .../completion/dart/contribution_sorter.dart | 24 -
+ .../dart/field_formal_contributor.dart | 78 -
+ .../dart/imported_reference_contributor.dart | 86 -
+ .../dart/inherited_reference_contributor.dart | 134 -
+ .../completion/dart/keyword_contributor.dart | 706 -
+ .../completion/dart/label_contributor.dart | 156 -
+ .../dart/library_member_contributor.dart | 73 -
+ .../dart/library_prefix_contributor.dart | 48 -
+ .../dart/local_constructor_contributor.dart | 161 -
+ .../dart/local_library_contributor.dart | 197 -
+ .../dart/local_reference_contributor.dart | 517 -
+ .../dart/named_constructor_contributor.dart | 61 -
+ .../completion/dart/override_contributor.dart | 150 -
+ .../dart/static_member_contributor.dart | 131 -
+ .../completion/dart/suggestion_builder.dart | 302 -
+ .../dart/type_member_contributor.dart | 411 -
+ .../completion/dart/uri_contributor.dart | 242 -
+ .../services/completion/dart/utilities.dart | 237 -
+ .../dart/variable_name_contributor.dart | 99 -
+ .../postfix/postfix_completion.dart | 567 -
+ .../completion/statement/design_notes.md | 144 -
+ .../statement/statement_completion.dart | 1237 --
+ .../lib/src/services/correction/assist.dart | 126 -
+ .../services/correction/assist_internal.dart | 2617 ---
+ .../lib/src/services/correction/fix.dart | 260 -
+ .../src/services/correction/fix_internal.dart | 3284 ----
+ .../src/services/correction/levenshtein.dart | 133 -
+ .../services/correction/name_suggestion.dart | 238 -
+ .../src/services/correction/namespace.dart | 183 -
+ .../correction/organize_directives.dart | 250 -
+ .../correction/selection_analyzer.dart | 142 -
+ .../src/services/correction/sort_members.dart | 504 -
+ .../services/correction/source_buffer.dart | 99 -
+ .../correction/statement_analyzer.dart | 230 -
+ .../lib/src/services/correction/status.dart | 179 -
+ .../lib/src/services/correction/strings.dart | 263 -
+ .../lib/src/services/correction/util.dart | 1530 --
+ .../src/services/kythe/kythe_visitors.dart | 1407 --
+ .../lib/src/services/kythe/schema.dart | 82 -
+ .../refactoring/convert_getter_to_method.dart | 127 -
+ .../refactoring/convert_method_to_getter.dart | 143 -
+ .../services/refactoring/extract_local.dart | 699 -
+ .../services/refactoring/extract_method.dart | 1350 --
+ .../services/refactoring/inline_local.dart | 213 -
+ .../services/refactoring/inline_method.dart | 880 -
+ .../refactoring/naming_conventions.dart | 263 -
+ .../src/services/refactoring/refactoring.dart | 444 -
+ .../refactoring/refactoring_internal.dart | 116 -
+ .../lib/src/services/refactoring/rename.dart | 148 -
+ .../refactoring/rename_class_member.dart | 345 -
+ .../refactoring/rename_constructor.dart | 131 -
+ .../services/refactoring/rename_import.dart | 137 -
+ .../services/refactoring/rename_label.dart | 45 -
+ .../services/refactoring/rename_library.dart | 48 -
+ .../services/refactoring/rename_local.dart | 171 -
+ .../refactoring/rename_unit_member.dart | 263 -
+ .../src/services/search/element_visitors.dart | 63 -
+ .../lib/src/services/search/hierarchy.dart | 162 -
+ .../src/services/search/search_engine.dart | 171 -
+ .../search/search_engine_internal.dart | 238 -
+ .../lib/src/socket_server.dart | 90 -
+ .../lib/src/status/ast_writer.dart | 243 -
+ .../lib/src/status/diagnostics.dart | 1229 --
+ .../lib/src/status/element_writer.dart | 179 -
+ pkg/analysis_server/lib/src/status/pages.dart | 189 -
+ .../lib/src/status/tree_writer.dart | 123 -
+ .../lib/src/utilities/documentation.dart | 67 -
+ .../lib/src/utilities/flutter.dart | 267 -
+ .../lib/src/utilities/null_string_sink.dart | 13 -
+ .../lib/src/utilities/profiling.dart | 89 -
+ .../lib/src/watch_manager.dart | 285 -
+ pkg/analysis_server/lib/starter.dart | 49 -
+ pkg/analysis_server/pubspec.yaml | 27 -
+ .../test/abstract_context.dart | 172 -
+ .../test/abstract_single_unit.dart | 144 -
+ .../test/analysis/get_errors_test.dart | 150 -
+ .../test/analysis/get_hover_test.dart | 562 -
+ .../test/analysis/get_navigation_test.dart | 250 -
+ .../notification_analysis_options_test.dart | 334 -
+ .../notification_analyzedFiles_test.dart | 133 -
+ .../notification_closingLabels_test.dart | 101 -
+ .../analysis/notification_errors_test.dart | 146 -
+ .../notification_highlights_test.dart | 960 -
+ .../notification_highlights_test2.dart | 1111 --
+ .../notification_implemented_test.dart | 431 -
+ .../notification_navigation_test.dart | 1031 -
+ .../notification_occurrences_test.dart | 257 -
+ .../analysis/notification_outline_test.dart | 135 -
+ .../analysis/notification_overrides_test.dart | 577 -
+ .../test/analysis/reanalyze_test.dart | 75 -
+ .../analysis/set_priority_files_test.dart | 131 -
+ .../test/analysis/test_all.dart | 51 -
+ .../test/analysis/update_content_test.dart | 266 -
+ .../test/analysis_abstract.dart | 367 -
+ .../test/analysis_server_test.dart | 210 -
+ pkg/analysis_server/test/benchmarks_test.dart | 76 -
+ .../channel/byte_stream_channel_test.dart | 272 -
+ .../test/channel/test_all.dart | 16 -
+ pkg/analysis_server/test/completion_test.dart | 2517 ---
+ .../test/completion_test_support.dart | 203 -
+ .../test/context_manager_test.dart | 2695 ---
+ .../test/domain_analysis_test.dart | 790 -
+ .../test/domain_completion_test.dart | 780 -
+ .../test/domain_completion_util.dart | 123 -
+ .../test/domain_diagnostic_test.dart | 58 -
+ .../test/domain_execution_test.dart | 243 -
+ .../test/domain_server_test.dart | 81 -
+ .../test/edit/assists_test.dart | 134 -
+ pkg/analysis_server/test/edit/fixes_test.dart | 164 -
+ .../test/edit/format_test.dart | 125 -
+ .../test/edit/organize_directives_test.dart | 167 -
+ .../test/edit/postfix_completion_test.dart | 93 -
+ .../test/edit/refactoring_test.dart | 2016 --
+ .../test/edit/sort_members_test.dart | 256 -
+ .../test/edit/statement_completion_test.dart | 122 -
+ pkg/analysis_server/test/edit/test_all.dart | 27 -
+ .../analysis/analysis_options_test.dart | 81 -
+ .../test/integration/analysis/error_test.dart | 100 -
+ .../analysis/get_errors_nonStandard_sdk.dart | 99 -
+ .../integration/analysis/get_errors_test.dart | 36 -
+ .../integration/analysis/get_hover_test.dart | 189 -
+ .../analysis/get_imported_elements_test.dart | 135 -
+ .../get_library_dependencies_test.dart | 47 -
+ .../analysis/get_navigation_test.dart | 67 -
+ .../analysis/get_reachable_sources_test.dart | 49 -
+ .../integration/analysis/highlights_test.dart | 146 -
+ .../analysis/highlights_test2.dart | 166 -
+ .../test/integration/analysis/lint_test.dart | 83 -
+ .../integration/analysis/navigation_test.dart | 136 -
+ .../analysis/occurrences_test.dart | 68 -
+ .../integration/analysis/outline_test.dart | 84 -
+ .../integration/analysis/overrides_test.dart | 122 -
+ .../analysis/package_root_test.dart | 79 -
+ .../analysis/reanalyze_concurrent_test.dart | 49 -
+ .../integration/analysis/reanalyze_test.dart | 40 -
+ .../analysis/set_analysis_roots_test.dart | 32 -
+ .../set_general_subscriptions_test.dart | 40 -
+ .../analysis/set_priority_files_test.dart | 30 -
+ .../analysis/set_subscriptions_test.dart | 32 -
+ .../test/integration/analysis/test_all.dart | 66 -
+ .../analysis/update_content_list_test.dart | 52 -
+ .../analysis/update_content_test.dart | 107 -
+ .../analysis/update_options_test.dart | 47 -
+ .../integration/analytics/enable_test.dart | 33 -
+ .../analytics/is_enabled_test.dart | 26 -
+ .../analytics/send_event_test.dart | 31 -
+ .../analytics/send_timing_test.dart | 31 -
+ .../test/integration/analytics/test_all.dart | 19 -
+ .../completion/get_suggestions_test.dart | 118 -
+ .../test/integration/completion/test_all.dart | 16 -
+ .../test/integration/coverage.md | 83 -
+ .../test/integration/coverage_test.dart | 129 -
+ .../diagnostic/get_diagnostics_test.dart | 30 -
+ .../diagnostic/get_server_port_test.dart | 37 -
+ .../test/integration/diagnostic/test_all.dart | 15 -
+ .../test/integration/edit/format_test.dart | 80 -
+ .../integration/edit/get_assists_test.dart | 50 -
+ .../edit/get_available_refactorings_test.dart | 37 -
+ .../test/integration/edit/get_fixes_test.dart | 60 -
+ .../edit/get_postfix_completion_test.dart | 52 -
+ .../edit/get_refactoring_test.dart | 66 -
+ .../edit/get_statement_completion_test.dart | 47 -
+ .../edit/import_elements_test.dart | 139 -
+ ...is_postfix_completion_applicable_test.dart | 41 -
+ ...ist_postfix_completion_templates_test.dart | 41 -
+ .../edit/organize_directives_test.dart | 76 -
+ .../integration/edit/sort_members_test.dart | 64 -
+ .../test/integration/edit/test_all.dart | 38 -
+ .../execution/create_context_test.dart | 24 -
+ .../execution/delete_context_test.dart | 43 -
+ .../integration/execution/map_uri_test.dart | 40 -
+ .../execution/set_subscriptions_test.dart | 23 -
+ .../test/integration/execution/test_all.dart | 19 -
+ .../kythe/get_kythe_entries_test.dart | 39 -
+ .../test/integration/kythe/test_all.dart | 13 -
+ .../search/find_element_references_test.dart | 72 -
+ .../search/find_member_declarations_test.dart | 51 -
+ .../search/find_member_references_test.dart | 52 -
+ .../find_top_level_declarations_test.dart | 56 -
+ .../search/get_type_hierarchy_test.dart | 275 -
+ .../test/integration/search/test_all.dart | 25 -
+ .../integration/server/get_version_test.dart | 20 -
+ ...et_subscriptions_invalid_service_test.dart | 30 -
+ .../server/set_subscriptions_test.dart | 64 -
+ .../integration/server/shutdown_test.dart | 31 -
+ .../test/integration/server/status_test.dart | 50 -
+ .../test/integration/server/test_all.dart | 25 -
+ .../support/integration_test_methods.dart | 2240 ---
+ .../support/integration_tests.dart | 1003 -
+ .../support/protocol_matchers.dart | 2644 ---
+ .../test/integration/test_all.dart | 35 -
+ pkg/analysis_server/test/mock_sdk.dart | 438 -
+ pkg/analysis_server/test/mocks.dart | 320 -
+ .../test/plugin/protocol_dart_test.dart | 461 -
+ pkg/analysis_server/test/plugin/test_all.dart | 16 -
+ .../test/protocol_server_test.dart | 196 -
+ pkg/analysis_server/test/protocol_test.dart | 270 -
+ .../test/search/abstract_search_domain.dart | 113 -
+ .../test/search/element_references_test.dart | 674 -
+ .../test/search/member_declarations_test.dart | 157 -
+ .../test/search/member_references_test.dart | 114 -
+ .../test/search/search_result_test.dart | 55 -
+ pkg/analysis_server/test/search/test_all.dart | 26 -
+ .../search/top_level_declarations_test.dart | 82 -
+ .../test/search/type_hierarchy_test.dart | 1055 --
+ .../dart/arglist_contributor_test.dart | 1019 -
+ .../dart/combinator_contributor_test.dart | 153 -
+ .../dart/common_usage_sorter_test.dart | 148 -
+ .../dart/completion_contributor_util.dart | 589 -
+ .../dart/completion_manager_test.dart | 91 -
+ .../dart/field_formal_contributor_test.dart | 197 -
+ .../imported_reference_contributor_test.dart | 4294 -----
+ .../inherited_reference_contributor_test.dart | 607 -
+ .../dart/keyword_contributor_test.dart | 1826 --
+ .../dart/label_contributor_test.dart | 320 -
+ .../dart/library_member_contributor_test.dart | 251 -
+ .../dart/library_prefix_contributor_test.dart | 329 -
+ .../local_constructor_contributor_test.dart | 3975 ----
+ .../dart/local_library_contributor_test.dart | 282 -
+ .../local_reference_contributor_test.dart | 4585 -----
+ .../named_constructor_contributor_test.dart | 171 -
+ .../dart/override_contributor_test.dart | 112 -
+ .../dart/static_member_contributor_test.dart | 285 -
+ .../services/completion/dart/test_all.dart | 52 -
+ .../dart/type_member_contributor_test.dart | 4027 ----
+ .../completion/dart/uri_contributor_test.dart | 682 -
+ .../dart/variable_name_contributor_test.dart | 244 -
+ .../postfix/postfix_completion_test.dart | 709 -
+ .../services/completion/postfix/test_all.dart | 13 -
+ .../statement/statement_completion_test.dart | 1912 --
+ .../completion/statement/test_all.dart | 13 -
+ .../test/services/completion/test_all.dart | 17 -
+ .../test/services/correction/assist_test.dart | 4443 -----
+ .../test/services/correction/change_test.dart | 296 -
+ .../test/services/correction/fix_test.dart | 6753 -------
+ .../services/correction/levenshtein_test.dart | 66 -
+ .../correction/name_suggestion_test.dart | 369 -
+ .../correction/organize_directives_test.dart | 321 -
+ .../correction/sort_members_test.dart | 810 -
+ .../test/services/correction/status_test.dart | 235 -
+ .../services/correction/strings_test.dart | 175 -
+ .../test/services/correction/test_all.dart | 32 -
+ .../test/services/correction/util_test.dart | 252 -
+ .../test/services/linter/linter_test.dart | 79 -
+ .../test/services/linter/test_all.dart | 13 -
+ .../refactoring/abstract_refactoring.dart | 175 -
+ .../services/refactoring/abstract_rename.dart | 75 -
+ .../convert_getter_to_method_test.dart | 163 -
+ .../convert_method_to_getter_test.dart | 215 -
+ .../refactoring/extract_local_test.dart | 1346 --
+ .../refactoring/extract_method_test.dart | 2886 ---
+ .../refactoring/inline_local_test.dart | 639 -
+ .../refactoring/inline_method_test.dart | 1761 --
+ .../refactoring/naming_conventions_test.dart | 754 -
+ .../refactoring/rename_class_member_test.dart | 894 -
+ .../refactoring/rename_constructor_test.dart | 249 -
+ .../refactoring/rename_import_test.dart | 230 -
+ .../refactoring/rename_label_test.dart | 83 -
+ .../refactoring/rename_library_test.dart | 91 -
+ .../refactoring/rename_local_test.dart | 545 -
+ .../refactoring/rename_unit_member_test.dart | 607 -
+ .../test/services/refactoring/test_all.dart | 40 -
+ .../test/services/search/hierarchy_test.dart | 362 -
+ .../services/search/search_engine_test.dart | 422 -
+ .../test/services/search/test_all.dart | 18 -
+ .../test/services/test_all.dart | 21 -
+ .../test/socket_server_test.dart | 142 -
+ .../computer/closingLabels_computer_test.dart | 346 -
+ .../import_elements_computer_test.dart | 343 -
+ .../imported_elements_computer_test.dart | 400 -
+ .../src/computer/outline_computer_test.dart | 1022 -
+ .../test/src/computer/test_all.dart | 20 -
+ .../test/src/domain_abstract_test.dart | 105 -
+ .../src/plugin/notification_manager_test.dart | 511 -
+ .../test/src/plugin/plugin_locator_test.dart | 96 -
+ .../test/src/plugin/plugin_manager_test.dart | 918 -
+ .../test/src/plugin/plugin_watcher_test.dart | 187 -
+ .../src/plugin/protocol_test_utilities.dart | 192 -
+ .../src/plugin/request_converter_test.dart | 82 -
+ .../src/plugin/result_collector_test.dart | 110 -
+ .../src/plugin/result_converter_test.dart | 128 -
+ .../test/src/plugin/result_merger_test.dart | 738 -
+ .../test/src/plugin/test_all.dart | 27 -
+ pkg/analysis_server/test/src/test_all.dart | 24 -
+ .../test/src/utilities/flutter_test.dart | 156 -
+ .../test/src/utilities/flutter_util.dart | 205 -
+ .../test/src/utilities/profiling_test.dart | 30 -
+ .../test/src/utilities/test_all.dart | 15 -
+ .../test/src/watch_manager_test.dart | 350 -
+ .../test/stress/replay/operation.dart | 80 -
+ .../test/stress/replay/replay.dart | 707 -
+ .../test/stress/utilities/git.dart | 551 -
+ .../test/stress/utilities/logger.dart | 49 -
+ .../test/stress/utilities/server.dart | 1081 --
+ pkg/analysis_server/test/test_all.dart | 61 -
+ .../timing/completion/completion_simple.dart | 111 -
+ .../test/timing/timing_framework.dart | 312 -
+ .../tool/instrumentation/log/log.dart | 1195 --
+ .../tool/instrumentation/log_viewer.dart | 129 -
+ .../tool/instrumentation/page/log_page.dart | 331 -
+ .../instrumentation/page/page_writer.dart | 317 -
+ .../tool/instrumentation/page/stats_page.dart | 265 -
+ .../tool/instrumentation/page/task_page.dart | 168 -
+ .../tool/instrumentation/server.dart | 238 -
+ pkg/analysis_server/tool/spec/api.dart | 528 -
+ .../tool/spec/check_all_test.dart | 23 -
+ .../tool/spec/codegen_analysis_server.dart | 137 -
+ .../tool/spec/codegen_dart.dart | 49 -
+ .../tool/spec/codegen_dart_protocol.dart | 1326 --
+ .../tool/spec/codegen_inttest_methods.dart | 275 -
+ .../tool/spec/codegen_java.dart | 301 -
+ .../tool/spec/codegen_java_types.dart | 744 -
+ .../tool/spec/codegen_matchers.dart | 191 -
+ .../tool/spec/codegen_protocol_constants.dart | 170 -
+ pkg/analysis_server/tool/spec/from_html.dart | 609 -
+ .../tool/spec/generate_all.dart | 40 -
+ pkg/analysis_server/tool/spec/generate_files | 61 -
+ .../spec/generated/java/AnalysisServer.java | 757 -
+ .../java/types/AddContentOverlay.java | 132 -
+ .../generated/java/types/AnalysisError.java | 251 -
+ .../java/types/AnalysisErrorFixes.java | 138 -
+ .../java/types/AnalysisErrorSeverity.java | 32 -
+ .../java/types/AnalysisErrorType.java | 42 -
+ .../generated/java/types/AnalysisOptions.java | 287 -
+ .../generated/java/types/AnalysisService.java | 49 -
+ .../generated/java/types/AnalysisStatus.java | 136 -
+ .../java/types/ChangeContentOverlay.java | 142 -
+ .../generated/java/types/ClosingLabel.java | 156 -
+ .../java/types/CompletionSuggestion.java | 574 -
+ .../java/types/CompletionSuggestionKind.java | 64 -
+ .../generated/java/types/ContextData.java | 195 -
+ .../spec/generated/java/types/Element.java | 297 -
+ .../generated/java/types/ElementKind.java | 76 -
+ .../generated/java/types/ExecutableFile.java | 134 -
+ .../generated/java/types/ExecutableKind.java | 34 -
+ .../java/types/ExecutionService.java | 28 -
+ .../types/ExtractLocalVariableFeedback.java | 221 -
+ .../types/ExtractLocalVariableOptions.java | 152 -
+ .../java/types/ExtractMethodFeedback.java | 272 -
+ .../java/types/ExtractMethodOptions.java | 261 -
+ .../spec/generated/java/types/FileKind.java | 30 -
+ .../generated/java/types/FoldingKind.java | 36 -
+ .../generated/java/types/FoldingRegion.java | 153 -
+ .../java/types/GeneralAnalysisService.java | 29 -
+ .../generated/java/types/HighlightRegion.java | 157 -
+ .../java/types/HighlightRegionType.java | 319 -
+ .../java/types/HoverInformation.java | 372 -
+ .../java/types/ImplementedClass.java | 134 -
+ .../java/types/ImplementedMember.java | 134 -
+ .../java/types/ImportedElements.java | 158 -
+ .../types/InlineLocalVariableFeedback.java | 132 -
+ .../java/types/InlineMethodFeedback.java | 155 -
+ .../java/types/InlineMethodOptions.java | 152 -
+ .../spec/generated/java/types/KytheEntry.java | 202 -
+ .../spec/generated/java/types/KytheVName.java | 200 -
+ .../generated/java/types/LinkedEditGroup.java | 165 -
+ .../java/types/LinkedEditSuggestion.java | 135 -
+ .../java/types/LinkedEditSuggestionKind.java | 34 -
+ .../spec/generated/java/types/Location.java | 191 -
+ .../generated/java/types/MoveFileOptions.java | 120 -
+ .../java/types/NavigationRegion.java | 179 -
+ .../java/types/NavigationTarget.java | 220 -
+ .../generated/java/types/Occurrences.java | 166 -
+ .../spec/generated/java/types/Outline.java | 207 -
+ .../java/types/OverriddenMember.java | 134 -
+ .../generated/java/types/OverrideMember.java | 186 -
+ .../spec/generated/java/types/Position.java | 134 -
+ .../java/types/PostfixTemplateDescriptor.java | 153 -
+ .../spec/generated/java/types/PubStatus.java | 115 -
+ .../java/types/RefactoringFeedback.java | 85 -
+ .../generated/java/types/RefactoringKind.java | 44 -
+ .../types/RefactoringMethodParameter.java | 242 -
+ .../types/RefactoringMethodParameterKind.java | 32 -
+ .../java/types/RefactoringOptions.java | 85 -
+ .../java/types/RefactoringProblem.java | 159 -
+ .../types/RefactoringProblemSeverity.java | 55 -
+ .../java/types/RemoveContentOverlay.java | 113 -
+ .../generated/java/types/RenameFeedback.java | 172 -
+ .../generated/java/types/RenameOptions.java | 120 -
+ .../generated/java/types/RequestError.java | 155 -
+ .../java/types/RequestErrorCode.java | 182 -
+ .../generated/java/types/SearchResult.java | 182 -
+ .../java/types/SearchResultKind.java | 61 -
+ .../generated/java/types/ServerService.java | 28 -
+ .../generated/java/types/SourceChange.java | 182 -
+ .../spec/generated/java/types/SourceEdit.java | 186 -
+ .../generated/java/types/SourceFileEdit.java | 163 -
+ .../java/types/TypeHierarchyItem.java | 271 -
+ .../tool/spec/implied_types.dart | 89 -
+ pkg/analysis_server/tool/spec/spec_input.html | 3975 ----
+ pkg/analysis_server/tool/spec/to_html.dart | 831 -
+ pkg/analysis_server_client/CHANGELOG.md | 5 -
+ pkg/analysis_server_client/LICENSE | 26 -
+ pkg/analysis_server_client/README.md | 13 -
+ .../lib/analysis_server_client.dart | 101 -
+ pkg/analysis_server_client/pubspec.yaml | 13 -
+ .../test/analysis_server_client_test.dart | 97 -
+ pkg/analyzer/README.md | 2 -
+ pkg/analyzer/lib/src/codegen/tools.dart | 2 -
+ pkg/analyzer_cli/lib/src/driver.dart | 58 +-
+ pkg/analyzer_cli/lib/src/options.dart | 55 +-
+ pkg/analyzer_cli/pubspec.yaml | 1 -
+ pkg/analyzer_cli/test/options_test.dart | 23 -
+ .../support/integration_test_methods.dart | 815 -
+ .../support/integration_tests.dart | 15 -
+ pkg/front_end/testing.json | 1 -
+ pkg/microlytics/example/simple.dart | 26 -
+ pkg/microlytics/lib/channels.dart | 53 -
+ pkg/microlytics/lib/html_channels.dart | 14 -
+ pkg/microlytics/lib/io_channels.dart | 20 -
+ pkg/microlytics/lib/microlytics.dart | 57 -
+ pkg/microlytics/pubspec.yaml | 8 -
+ .../test/dart_microlytics_test.dart | 114 -
+ pkg/microlytics/test/test_channel.dart | 19 -
+ pkg/pkg.status | 15 -
+ pkg/telemetry/LICENSE | 26 -
+ pkg/telemetry/README.md | 51 -
+ pkg/telemetry/analysis_options.yaml | 10 -
+ pkg/telemetry/lib/crash_reporting.dart | 94 -
+ pkg/telemetry/lib/telemetry.dart | 126 -
+ pkg/telemetry/pubspec.yaml | 16 -
+ pkg/telemetry/test/crash_reporting_test.dart | 41 -
+ pkg/telemetry/test/telemetry_test.dart | 31 -
+ runtime/observatory/lib/app.dart | 3 +-
+ .../observatory/lib/src/app/analytics.dart | 31 -
+ runtime/observatory/observatory_sources.gni | 1 -
+ sdk/BUILD.gn | 11 -
+ tests/lib/analyzer/analyze_library.status | 1 -
+ tools/bots/dartdoc_footer.html | 13 -
+ tools/bots/test_matrix.json | 30 -
+ tools/bots/try_benchmarks.sh | 1 -
+ utils/analysis_server/.gitignore | 3 -
+ utils/analysis_server/BUILD.gn | 10 -
+ 525 files changed, 8 insertions(+), 187921 deletions(-)
+ delete mode 100644 pkg/analysis_server/AUTHORS
+ delete mode 100644 pkg/analysis_server/CHANGELOG.md
+ delete mode 100644 pkg/analysis_server/CONTRIBUTING.md
+ delete mode 100644 pkg/analysis_server/LICENSE
+ delete mode 100644 pkg/analysis_server/README.md
+ delete mode 100644 pkg/analysis_server/analysis_options.yaml
+ delete mode 100644 pkg/analysis_server/benchmark/benchmarks.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/README.md
+ delete mode 100644 pkg/analysis_server/benchmark/integration/driver.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/input_conver=
ter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/instrumentat=
ion_input_converter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/local_runner=
.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/log_file_inp=
ut_converter.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/main.dart
+ delete mode 100644 pkg/analysis_server/benchmark/integration/operation.da=
rt
+ delete mode 100644 pkg/analysis_server/benchmark/perf/analysis_timing_tes=
ts.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_angular.d=
art
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_flutter.d=
art
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmark_scenario.=
dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/completion_timing_t=
ests.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/memory_tests.dart
+ delete mode 100644 pkg/analysis_server/benchmark/perf/performance_tests.d=
art
+ delete mode 100644 pkg/analysis_server/benchmark/readme.md
+ delete mode 100644 pkg/analysis_server/bin/server.dart
+ delete mode 100644 pkg/analysis_server/doc/api.html
+ delete mode 100644 pkg/analysis_server/lib/plugin/analysis/occurrences/oc=
currences_core.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/assist/assist_core=
.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/assist/assist_dart=
.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/plugin/protocol/protocol_dart.=
dart
+ delete mode 100644 pkg/analysis_server/lib/protocol/protocol.dart
+ delete mode 100644 pkg/analysis_server/lib/protocol/protocol_constants.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/protocol/protocol_generated.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/analysis_logger.dart
+ delete mode 100644 pkg/analysis_server/lib/src/analysis_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/channel/byte_stream_channe=
l.dart
+ delete mode 100644 pkg/analysis_server/lib/src/channel/channel.dart
+ delete mode 100644 pkg/analysis_server/lib/src/collections.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_closingL=
abels.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_highligh=
ts.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_highligh=
ts2.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_hover.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_outline.=
dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/computer_override=
s.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/import_elements_c=
omputer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/imported_elements=
_computer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/computer/new_notifications=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/constants.dart
+ delete mode 100644 pkg/analysis_server/lib/src/context_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_abstract.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_analysis.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_analytics.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_completion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_diagnostic.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_execution.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_kythe.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domain_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/implement=
ed_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/navigatio=
n_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/occurrenc=
es.dart
+ delete mode 100644 pkg/analysis_server/lib/src/domains/analysis/occurrenc=
es_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/edit/edit_domain.dart
+ delete mode 100644 pkg/analysis_server/lib/src/operation/operation_analys=
is.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/notification_manage=
r.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/plugin_locator.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/plugin_watcher.dart
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/request_converter.d=
art
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_collector.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_converter.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/plugin/result_merger.dart
+ delete mode 100644 pkg/analysis_server/lib/src/protocol/protocol_internal=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/protocol_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/provisional/completion/com=
pletion_core.dart
+ delete mode 100644 pkg/analysis_server/lib/src/provisional/completion/dar=
t/completion_dart.dart
+ delete mode 100644 pkg/analysis_server/lib/src/search/element_references.=
dart
+ delete mode 100644 pkg/analysis_server/lib/src/search/search_domain.dart
+ delete mode 100644 pkg/analysis_server/lib/src/search/type_hierarchy.dart
+ delete mode 100644 pkg/analysis_server/lib/src/server/diagnostic_server.d=
art
+ delete mode 100644 pkg/analysis_server/lib/src/server/driver.dart
+ delete mode 100644 pkg/analysis_server/lib/src/server/http_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/server/stdio_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/comple=
tion_core.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/comple=
tion_performance.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/a=
rglist_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ombinator_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ommon_usage_sorter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ommon_usage_sorter.g.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ompletion_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/c=
ontribution_sorter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/f=
ield_formal_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/i=
mported_reference_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/i=
nherited_reference_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/k=
eyword_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
abel_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ibrary_member_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ibrary_prefix_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ocal_constructor_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ocal_library_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/l=
ocal_reference_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/n=
amed_constructor_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/o=
verride_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/s=
tatic_member_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/s=
uggestion_builder.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/t=
ype_member_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/u=
ri_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/u=
tilities.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/dart/v=
ariable_name_contributor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/postfi=
x/postfix_completion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/statem=
ent/design_notes.md
+ delete mode 100644 pkg/analysis_server/lib/src/services/completion/statem=
ent/statement_completion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/assist=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/assist=
_internal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/fix.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/fix_in=
ternal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/levens=
htein.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/name_s=
uggestion.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/namesp=
ace.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/organi=
ze_directives.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/select=
ion_analyzer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/sort_m=
embers.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/source=
_buffer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/statem=
ent_analyzer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/status=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/string=
s.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/correction/util.d=
art
+ delete mode 100644 pkg/analysis_server/lib/src/services/kythe/kythe_visit=
ors.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/kythe/schema.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/conve=
rt_getter_to_method.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/conve=
rt_method_to_getter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/extra=
ct_local.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/extra=
ct_method.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/inlin=
e_local.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/inlin=
e_method.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/namin=
g_conventions.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/refac=
toring.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/refac=
toring_internal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_class_member.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_constructor.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_import.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_label.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_library.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_local.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/refactoring/renam=
e_unit_member.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/element_vi=
sitors.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/hierarchy.=
dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/search_eng=
ine.dart
+ delete mode 100644 pkg/analysis_server/lib/src/services/search/search_eng=
ine_internal.dart
+ delete mode 100644 pkg/analysis_server/lib/src/socket_server.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/ast_writer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/diagnostics.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/element_writer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/pages.dart
+ delete mode 100644 pkg/analysis_server/lib/src/status/tree_writer.dart
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/documentation.da=
rt
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/flutter.dart
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/null_string_sink=
.dart
+ delete mode 100644 pkg/analysis_server/lib/src/utilities/profiling.dart
+ delete mode 100644 pkg/analysis_server/lib/src/watch_manager.dart
+ delete mode 100644 pkg/analysis_server/lib/starter.dart
+ delete mode 100644 pkg/analysis_server/pubspec.yaml
+ delete mode 100644 pkg/analysis_server/test/abstract_context.dart
+ delete mode 100644 pkg/analysis_server/test/abstract_single_unit.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/get_errors_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/get_hover_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/get_navigation_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_analysi=
s_options_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_analyze=
dFiles_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_closing=
Labels_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_errors_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_highlig=
hts_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_highlig=
hts_test2.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_impleme=
nted_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_navigat=
ion_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_occurre=
nces_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_outline=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/notification_overrid=
es_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/reanalyze_test.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/set_priority_files_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/analysis/update_content_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/analysis_abstract.dart
+ delete mode 100644 pkg/analysis_server/test/analysis_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/benchmarks_test.dart
+ delete mode 100644 pkg/analysis_server/test/channel/byte_stream_channel_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/channel/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/completion_test_support.dart
+ delete mode 100644 pkg/analysis_server/test/context_manager_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_analysis_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_completion_util.dart
+ delete mode 100644 pkg/analysis_server/test/domain_diagnostic_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_execution_test.dart
+ delete mode 100644 pkg/analysis_server/test/domain_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/assists_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/fixes_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/format_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/organize_directives_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/edit/postfix_completion_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/edit/refactoring_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/sort_members_test.dart
+ delete mode 100644 pkg/analysis_server/test/edit/statement_completion_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/edit/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/analysis=
_options_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/error_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_erro=
rs_nonStandard_sdk.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_erro=
rs_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_hove=
r_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_impo=
rted_elements_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_libr=
ary_dependencies_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_navi=
gation_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/get_reac=
hable_sources_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/highligh=
ts_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/highligh=
ts_test2.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/lint_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/navigati=
on_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/occurren=
ces_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/outline_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/override=
s_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/package_=
root_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/reanalyz=
e_concurrent_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/reanalyz=
e_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_anal=
ysis_roots_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_gene=
ral_subscriptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_prio=
rity_files_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/set_subs=
criptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/test_all=
.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/update_c=
ontent_list_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/update_c=
ontent_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analysis/update_o=
ptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/enable_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/is_enab=
led_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/send_ev=
ent_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/send_ti=
ming_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/analytics/test_al=
l.dart
+ delete mode 100644 pkg/analysis_server/test/integration/completion/get_su=
ggestions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/completion/test_a=
ll.dart
+ delete mode 100644 pkg/analysis_server/test/integration/coverage.md
+ delete mode 100644 pkg/analysis_server/test/integration/coverage_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/diagnostic/get_di=
agnostics_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/diagnostic/get_se=
rver_port_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/diagnostic/test_a=
ll.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/format_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_assists_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_availabl=
e_refactorings_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_fixes_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_postfix_=
completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_refactor=
ing_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/get_statemen=
t_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/import_eleme=
nts_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/is_postfix_c=
ompletion_applicable_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/list_postfix=
_completion_templates_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/organize_dir=
ectives_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/sort_members=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/edit/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/create_=
context_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/delete_=
context_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/map_uri=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/set_sub=
scriptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/execution/test_al=
l.dart
+ delete mode 100644 pkg/analysis_server/test/integration/kythe/get_kythe_e=
ntries_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/kythe/test_all.da=
rt
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_eleme=
nt_references_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_membe=
r_declarations_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_membe=
r_references_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/find_top_l=
evel_declarations_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/get_type_h=
ierarchy_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/search/test_all.d=
art
+ delete mode 100644 pkg/analysis_server/test/integration/server/get_versio=
n_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/set_subscr=
iptions_invalid_service_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/set_subscr=
iptions_test.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/shutdown_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/status_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/integration/server/test_all.d=
art
+ delete mode 100644 pkg/analysis_server/test/integration/support/integrati=
on_test_methods.dart
+ delete mode 100644 pkg/analysis_server/test/integration/support/integrati=
on_tests.dart
+ delete mode 100644 pkg/analysis_server/test/integration/support/protocol_=
matchers.dart
+ delete mode 100644 pkg/analysis_server/test/integration/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/mock_sdk.dart
+ delete mode 100644 pkg/analysis_server/test/mocks.dart
+ delete mode 100644 pkg/analysis_server/test/plugin/protocol_dart_test.dart
+ delete mode 100644 pkg/analysis_server/test/plugin/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/protocol_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/protocol_test.dart
+ delete mode 100644 pkg/analysis_server/test/search/abstract_search_domain=
.dart
+ delete mode 100644 pkg/analysis_server/test/search/element_references_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/search/member_declarations_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/search/member_references_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/search/search_result_test.dart
+ delete mode 100644 pkg/analysis_server/test/search/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/search/top_level_declarations=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/search/type_hierarchy_test.da=
rt
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/argl=
ist_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comb=
inator_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comm=
on_usage_sorter_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comp=
letion_contributor_util.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/comp=
letion_manager_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/fiel=
d_formal_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/impo=
rted_reference_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/inhe=
rited_reference_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/keyw=
ord_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/labe=
l_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/libr=
ary_member_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/libr=
ary_prefix_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/loca=
l_constructor_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/loca=
l_library_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/loca=
l_reference_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/name=
d_constructor_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/over=
ride_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/stat=
ic_member_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/test=
_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/type=
_member_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/uri_=
contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/dart/vari=
able_name_contributor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/postfix/p=
ostfix_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/postfix/t=
est_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/statement=
/statement_completion_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/statement=
/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/completion/test_all.=
dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/assist_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/change_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/fix_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/levenshte=
in_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/name_sugg=
estion_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/organize_=
directives_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/sort_memb=
ers_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/status_te=
st.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/strings_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/test_all.=
dart
+ delete mode 100644 pkg/analysis_server/test/services/correction/util_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/services/linter/linter_test.d=
art
+ delete mode 100644 pkg/analysis_server/test/services/linter/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/abstract=
_refactoring.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/abstract=
_rename.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/convert_=
getter_to_method_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/convert_=
method_to_getter_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/extract_=
local_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/extract_=
method_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/inline_l=
ocal_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/inline_m=
ethod_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/naming_c=
onventions_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_c=
lass_member_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_c=
onstructor_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_i=
mport_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_l=
abel_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_l=
ibrary_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_l=
ocal_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/rename_u=
nit_member_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/refactoring/test_all=
.dart
+ delete mode 100644 pkg/analysis_server/test/services/search/hierarchy_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/services/search/search_engine=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/services/search/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/services/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/socket_server_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/closingLabels_co=
mputer_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/import_elements_=
computer_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/imported_element=
s_computer_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/outline_computer=
_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/computer/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/domain_abstract_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/notification_manag=
er_test.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/plugin_locator_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/plugin_manager_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/plugin_watcher_tes=
t.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/protocol_test_util=
ities.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/request_converter_=
test.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/result_collector_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/result_converter_t=
est.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/result_merger_test=
.dart
+ delete mode 100644 pkg/analysis_server/test/src/plugin/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/utilities/flutter_test.da=
rt
+ delete mode 100644 pkg/analysis_server/test/src/utilities/flutter_util.da=
rt
+ delete mode 100644 pkg/analysis_server/test/src/utilities/profiling_test.=
dart
+ delete mode 100644 pkg/analysis_server/test/src/utilities/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/src/watch_manager_test.dart
+ delete mode 100644 pkg/analysis_server/test/stress/replay/operation.dart
+ delete mode 100644 pkg/analysis_server/test/stress/replay/replay.dart
+ delete mode 100644 pkg/analysis_server/test/stress/utilities/git.dart
+ delete mode 100644 pkg/analysis_server/test/stress/utilities/logger.dart
+ delete mode 100644 pkg/analysis_server/test/stress/utilities/server.dart
+ delete mode 100644 pkg/analysis_server/test/test_all.dart
+ delete mode 100644 pkg/analysis_server/test/timing/completion/completion_=
simple.dart
+ delete mode 100644 pkg/analysis_server/test/timing/timing_framework.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/log/log.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/log_viewer.da=
rt
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/log_page=
.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/page_wri=
ter.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/stats_pa=
ge.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/page/task_pag=
e.dart
+ delete mode 100644 pkg/analysis_server/tool/instrumentation/server.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/api.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/check_all_test.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_analysis_server.=
dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_dart.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_dart_protocol.da=
rt
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_inttest_methods.=
dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_java.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_java_types.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_matchers.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/codegen_protocol_constan=
ts.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/from_html.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/generate_all.dart
+ delete mode 100755 pkg/analysis_server/tool/spec/generate_files
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/AnalysisS=
erver.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Add=
ContentOverlay.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisError.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisErrorFixes.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisErrorSeverity.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisErrorType.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ana=
lysisStatus.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Cha=
ngeContentOverlay.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Clo=
singLabel.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Com=
pletionSuggestion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Com=
pletionSuggestionKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Con=
textData.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ele=
ment.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ele=
mentKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Exe=
cutableFile.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Exe=
cutableKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Exe=
cutionService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractLocalVariableFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractLocalVariableOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractMethodFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ext=
ractMethodOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Fil=
eKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Fol=
dingKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Fol=
dingRegion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Gen=
eralAnalysisService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Hig=
hlightRegion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Hig=
hlightRegionType.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Hov=
erInformation.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Imp=
lementedClass.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Imp=
lementedMember.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Imp=
ortedElements.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Inl=
ineLocalVariableFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Inl=
ineMethodFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Inl=
ineMethodOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Kyt=
heEntry.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Kyt=
heVName.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Lin=
kedEditGroup.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Lin=
kedEditSuggestion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Lin=
kedEditSuggestionKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Loc=
ation.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Mov=
eFileOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Nav=
igationRegion.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Nav=
igationTarget.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Occ=
urrences.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Out=
line.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ove=
rriddenMember.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ove=
rrideMember.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Pos=
ition.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Pos=
tfixTemplateDescriptor.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Pub=
Status.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringMethodParameter.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringMethodParameterKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringProblem.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ref=
actoringProblemSeverity.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Rem=
oveContentOverlay.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ren=
ameFeedback.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ren=
ameOptions.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Req=
uestError.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Req=
uestErrorCode.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sea=
rchResult.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sea=
rchResultKind.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Ser=
verService.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sou=
rceChange.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sou=
rceEdit.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Sou=
rceFileEdit.java
+ delete mode 100644 pkg/analysis_server/tool/spec/generated/java/types/Typ=
eHierarchyItem.java
+ delete mode 100644 pkg/analysis_server/tool/spec/implied_types.dart
+ delete mode 100644 pkg/analysis_server/tool/spec/spec_input.html
+ delete mode 100644 pkg/analysis_server/tool/spec/to_html.dart
+ delete mode 100644 pkg/analysis_server_client/CHANGELOG.md
+ delete mode 100644 pkg/analysis_server_client/LICENSE
+ delete mode 100644 pkg/analysis_server_client/README.md
+ delete mode 100644 pkg/analysis_server_client/lib/analysis_server_client.=
dart
+ delete mode 100644 pkg/analysis_server_client/pubspec.yaml
+ delete mode 100644 pkg/analysis_server_client/test/analysis_server_client=
_test.dart
+ delete mode 100644 pkg/analyzer_plugin/test/integration/support/integrati=
on_test_methods.dart
+ delete mode 100644 pkg/microlytics/example/simple.dart
+ delete mode 100644 pkg/microlytics/lib/channels.dart
+ delete mode 100644 pkg/microlytics/lib/html_channels.dart
+ delete mode 100644 pkg/microlytics/lib/io_channels.dart
+ delete mode 100644 pkg/microlytics/lib/microlytics.dart
+ delete mode 100644 pkg/microlytics/pubspec.yaml
+ delete mode 100644 pkg/microlytics/test/dart_microlytics_test.dart
+ delete mode 100644 pkg/microlytics/test/test_channel.dart
+ delete mode 100644 pkg/telemetry/LICENSE
+ delete mode 100644 pkg/telemetry/README.md
+ delete mode 100644 pkg/telemetry/analysis_options.yaml
+ delete mode 100644 pkg/telemetry/lib/crash_reporting.dart
+ delete mode 100644 pkg/telemetry/lib/telemetry.dart
+ delete mode 100644 pkg/telemetry/pubspec.yaml
+ delete mode 100644 pkg/telemetry/test/crash_reporting_test.dart
+ delete mode 100644 pkg/telemetry/test/telemetry_test.dart
+ delete mode 100644 runtime/observatory/lib/src/app/analytics.dart
+ delete mode 100644 utils/analysis_server/.gitignore
+ delete mode 100644 utils/analysis_server/BUILD.gn
+
+diff --git a/BUILD.gn b/BUILD.gn
+index 80e3bdd3757..0f7746d8c92 100644
+--- a/BUILD.gn
++++ b/BUILD.gn
+@@ -21,7 +21,6 @@ group("most") {
+ testonly =3D true
+ }
+ deps =3D [
+- ":analysis_server",
+ ":create_sdk",
+ ":dart2js",
+ ":dartanalyzer",
+@@ -107,12 +106,6 @@ group("dartfmt") {
+ ]
+ }
+=20
+-group("analysis_server") {
+- deps =3D [
+- "utils/analysis_server",
+- ]
+-}
+-
+ # This is the target that is built on the dart2js build bots.
+ # It must depend on anything that is required by the dart2js
+ # test suites.
+diff --git a/pkg/analysis_server/AUTHORS b/pkg/analysis_server/AUTHORS
+deleted file mode 100644
+index e8063a8cd6e..00000000000
+--- a/pkg/analysis_server/AUTHORS
++++ /dev/null
+@@ -1,6 +0,0 @@
+-# Below is a list of people and organizations that have contributed
+-# to the project. Names should be added to the list like so:
+-#
+-# Name/Organization <email address>
+-
+-Google Inc.
+diff --git a/pkg/analysis_server/CHANGELOG.md b/pkg/analysis_server/CHANGE=
LOG.md
+deleted file mode 100644
+index 2a2d63cf8e6..00000000000
+--- a/pkg/analysis_server/CHANGELOG.md
++++ /dev/null
+@@ -1,5 +0,0 @@
+-# Changelog
+-
+-## 0.0.1
+-
+-- Initial version
+diff --git a/pkg/analysis_server/CONTRIBUTING.md b/pkg/analysis_server/CON=
TRIBUTING.md
+deleted file mode 100644
+index 242f214b5e7..00000000000
+--- a/pkg/analysis_server/CONTRIBUTING.md
++++ /dev/null
+@@ -1,40 +0,0 @@
+-## Contributing
+-
+-Contributions welcome! Please follow the guide in [Contributing][contribu=
ting].
+-
+-## Building
+-
+-If you want to build Dart yourself, here is a guide to
+-[getting the source, preparing your machine to build the SDK, and
+-building][building].
+-
+-There are more documents on our [wiki](https://github.com/dart-lang/sdk/w=
iki).
+-Once set up to build the SDK, run:
+-
+-```
+-./tools/build.py -mrelease create_sdk
+-```
+-
+-## Running tests
+-
+-To run analyzer tests:
+-
+-```
+-./tools/test.py -mrelease pkg/analyzer/test/
+-```
+-
+-To run all analysis server tests:
+-
+-```
+-./tools/test.py -mrelease pkg/analysis_server/test/
+-```
+-
+-To run just the analysis server integration tests:
+-
+-```
+-./tools/test.py -mrelease pkg/analysis_server/test/integration/
+-```
+-
+-
+-[building]: https://github.com/dart-lang/sdk/wiki/Building
+-[contributing]: https://github.com/dart-lang/sdk/wiki/Contributing
+diff --git a/pkg/analysis_server/LICENSE b/pkg/analysis_server/LICENSE
+deleted file mode 100644
+index 5c60afea399..00000000000
+--- a/pkg/analysis_server/LICENSE
++++ /dev/null
+@@ -1,26 +0,0 @@
+-Copyright 2014, the Dart project authors. All rights reserved.
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are
+-met:
+-
+- * Redistributions of source code must retain the above copyright
+- notice, this list of conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above
+- copyright notice, this list of conditions and the following
+- disclaimer in the documentation and/or other materials provided
+- with the distribution.
+- * Neither the name of Google Inc. nor the names of its
+- contributors may be used to endorse or promote products derived
+- from this software without specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+diff --git a/pkg/analysis_server/README.md b/pkg/analysis_server/README.md
+deleted file mode 100644
+index d596f5c47af..00000000000
+--- a/pkg/analysis_server/README.md
++++ /dev/null
+@@ -1,22 +0,0 @@
+-# analysis_server
+-
+-A long-running process that provides analysis results to other tools.
+-
+-The analysis server is designed to provide on-going analysis of one or mo=
re code
+-bases as those code bases are changing.
+-
+-## Using the server
+-
+-The analysis server is not intended to be used stand-alone, and therefore=
does
+-not have a human-friendly user interface.
+-
+-Clients (typically tools, such as an editor) are expected to run the anal=
ysis
+-server in a separate process and communicate with it using a JSON protoco=
l. The
+-protocol is specified in the file [`analysis_server/doc/api.html`][api].
+-
+-## Features and bugs
+-
+-Please file feature requests and bugs at the [issue tracker][tracker].
+-
+-[tracker]: https://github.com/dart-lang/sdk/issues
+-[api]: https://htmlpreview.github.io/?https://github.com/dart-lang/sdk/bl=
ob/master/pkg/analysis_server/doc/api.html
+diff --git a/pkg/analysis_server/analysis_options.yaml b/pkg/analysis_serv=
er/analysis_options.yaml
+deleted file mode 100644
+index 9bacf2b50aa..00000000000
+--- a/pkg/analysis_server/analysis_options.yaml
++++ /dev/null
+@@ -1,8 +0,0 @@
+-analyzer:
+- strong-mode: true
+-linter:
+- rules:
+- - empty_constructor_bodies
+- - empty_statements
+- - unnecessary_brace_in_string_interps
+- - valid_regexps
+diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_=
server/benchmark/benchmarks.dart
+deleted file mode 100644
+index 63eb6720e32..00000000000
+--- a/pkg/analysis_server/benchmark/benchmarks.dart
++++ /dev/null
+@@ -1,239 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-import 'dart:math' as math;
+-
+-import 'package:analyzer/file_system/file_system.dart';
+-import 'package:analyzer/file_system/physical_file_system.dart';
+-import 'package:args/command_runner.dart';
+-import 'package:intl/intl.dart';
+-import 'package:path/path.dart' as path;
+-
+-import 'perf/benchmarks_impl.dart';
+-
+-Future main(List<String> args) async {
+- final List<Benchmark> benchmarks =3D [
+- new ColdAnalysisBenchmark(),
+- new AnalysisBenchmark()
+- ];
+-
+- CommandRunner runner =3D new CommandRunner(
+- 'benchmark', 'A benchmark runner for the analysis server.');
+- runner.addCommand(new ListCommand(benchmarks));
+- runner.addCommand(new RunCommand(benchmarks));
+- runner.run(args);
+-}
+-
+-class ListCommand extends Command {
+- final List<Benchmark> benchmarks;
+-
+- ListCommand(this.benchmarks) {
+- argParser.addFlag('machine',
+- negatable: false, help: 'Emit the list of benchmarks as json.');
+- }
+-
+- @override
+- String get name =3D> 'list';
+-
+- @override
+- String get description =3D> 'List available benchmarks.';
+-
+- @override
+- String get invocation =3D> '${runner.executableName} $name';
+-
+- void run() {
+- if (argResults['machine']) {
+- final Map map =3D {
+- 'benchmarks': benchmarks.map((b) =3D> b.toJson()).toList()
+- };
+- print(new JsonEncoder.withIndent(' ').convert(map));
+- } else {
+- for (Benchmark benchmark in benchmarks) {
+- print('${benchmark.id}: ${benchmark.description}');
+- }
+- }
+- }
+-}
+-
+-class RunCommand extends Command {
+- final List<Benchmark> benchmarks;
+-
+- RunCommand(this.benchmarks) {
+- argParser.addFlag('quick',
+- negatable: false,
+- help: 'Run a quick version of the benchmark. This is not useful f=
or '
+- 'gathering accurate times,\nbut can be used to validate that =
the '
+- 'benchmark works.');
+- argParser.addFlag('preview-dart-2',
+- negatable: false,
+- help: 'Benchmark against the Dart 2.0 front end implementation.');
+- argParser.addOption('repeat',
+- defaultsTo: '10', help: 'The number of times to repeat the benchm=
ark.');
+- }
+-
+- @override
+- String get name =3D> 'run';
+-
+- @override
+- String get description =3D> 'Run a given benchmark.';
+-
+- @override
+- String get invocation =3D> '${runner.executableName} $name <benchmark-i=
d>';
+-
+- Future run() async {
+- if (argResults.rest.isEmpty) {
+- printUsage();
+- exit(1);
+- }
+-
+- final String benchmarkId =3D argResults.rest.first;
+- final int repeatCount =3D int.parse(argResults['repeat']);
+- final bool quick =3D argResults['quick'];
+- final bool previewDart2 =3D argResults['preview-dart-2'];
+-
+- final Benchmark benchmark =3D
+- benchmarks.firstWhere((b) =3D> b.id =3D=3D benchmarkId, orElse: (=
) {
+- print("Benchmark '$benchmarkId' not found.");
+- exit(1);
+- });
+-
+- int actualIterations =3D repeatCount;
+- if (benchmark.maxIterations > 0) {
+- actualIterations =3D math.min(benchmark.maxIterations, repeatCount);
+- }
+-
+- try {
+- BenchMarkResult result;
+- Stopwatch time =3D new Stopwatch()..start();
+- print('Running $benchmarkId $actualIterations times...');
+-
+- for (int iteration =3D 0; iteration < actualIterations; iteration++=
) {
+- BenchMarkResult newResult =3D await benchmark.run(
+- quick: quick,
+- previewDart2: previewDart2,
+- );
+- print(' $newResult');
+- result =3D result =3D=3D null ? newResult : result.combine(newRes=
ult);
+- }
+-
+- time.stop();
+- print('Finished in ${time.elapsed.inSeconds} seconds.\n');
+- Map m =3D {'benchmark': benchmarkId, 'result': result.toJson()};
+- print(JSON.encode(m));
+- } catch (error, st) {
+- print('$benchmarkId threw exception: $error');
+- print(st);
+- exit(1);
+- }
+- }
+-}
+-
+-abstract class Benchmark {
+- final String id;
+- final String description;
+- final bool enabled;
+-
+- /// One of 'memory', 'cpu', or 'group'.
+- final String kind;
+-
+- Benchmark(this.id, this.description, {this.enabled: true, this.kind: 'c=
pu'});
+-
+- Future<BenchMarkResult> run({bool quick: false, bool previewDart2: fals=
e});
+-
+- int get maxIterations =3D> 0;
+-
+- Map toJson() =3D>
+- {'id': id, 'description': description, 'enabled': enabled, 'kind': =
kind};
+-
+- String toString() =3D> '$id: $description';
+-}
+-
+-class BenchMarkResult {
+- static final NumberFormat nf =3D new NumberFormat.decimalPattern();
+-
+- /// One of 'bytes', 'micros', or 'compound'.
+- final String kindName;
+-
+- final int value;
+-
+- BenchMarkResult(this.kindName, this.value);
+-
+- BenchMarkResult combine(BenchMarkResult other) {
+- return new BenchMarkResult(kindName, math.min(value, other.value));
+- }
+-
+- Map toJson() =3D> {kindName: value};
+-
+- String toString() =3D> '$kindName: ${nf.format(value)}';
+-}
+-
+-class CompoundBenchMarkResult extends BenchMarkResult {
+- final String name;
+-
+- CompoundBenchMarkResult(this.name) : super('compound', 0);
+-
+- Map<String, BenchMarkResult> results =3D {};
+-
+- void add(String name, BenchMarkResult result) {
+- results[name] =3D result;
+- }
+-
+- BenchMarkResult combine(BenchMarkResult other) {
+- BenchMarkResult _combine(BenchMarkResult a, BenchMarkResult b) {
+- if (a =3D=3D null) return b;
+- if (b =3D=3D null) return a;
+- return a.combine(b);
+- }
+-
+- CompoundBenchMarkResult o =3D other as CompoundBenchMarkResult;
+-
+- CompoundBenchMarkResult combined =3D new CompoundBenchMarkResult(name=
);
+- List<String> keys =3D
+- (new Set()..addAll(results.keys)..addAll(o.results.keys)).toList(=
);
+-
+- for (String key in keys) {
+- combined.add(key, _combine(results[key], o.results[key]));
+- }
+-
+- return combined;
+- }
+-
+- Map toJson() {
+- Map m =3D {};
+- for (String key in results.keys) {
+- m['$name-$key'] =3D results[key].toJson();
+- }
+- return m;
+- }
+-
+- String toString() =3D> '${toJson()}';
+-}
+-
+-List<String> getProjectRoots({bool quick: false}) {
+- String script =3D Platform.script.toFilePath(windows: Platform.isWindow=
s);
+- String pkgPath =3D path.normalize(path.join(path.dirname(script), '..',=
'..'));
+- return <String>[path.join(pkgPath, quick ? 'meta' : 'analysis_server')];
+-}
+-
+-String get analysisServerSrcPath {
+- String script =3D Platform.script.toFilePath(windows: Platform.isWindow=
s);
+- String pkgPath =3D path.normalize(path.join(path.dirname(script), '..',=
'..'));
+- return path.join(pkgPath, 'analysis_server');
+-}
+-
+-void deleteServerCache() {
+- // ~/.dartServer/.analysis-driver/
+- ResourceProvider resourceProvider =3D PhysicalResourceProvider.INSTANCE;
+- Folder stateLocation =3D resourceProvider.getStateLocation('.analysis-d=
river');
+- try {
+- if (stateLocation.exists) {
+- stateLocation.delete();
+- }
+- } catch (e) {
+- // ignore any exception
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/README.md b/pkg/ana=
lysis_server/benchmark/integration/README.md
+deleted file mode 100644
+index 9955c11ce06..00000000000
+--- a/pkg/analysis_server/benchmark/integration/README.md
++++ /dev/null
+@@ -1,69 +0,0 @@
+-# Running Benchmarks
+-
+-There are two entry points for running benchmarks:
+-* **main.dart** - a general Dart application for running performance benc=
hmarks
+-* **local_runner.dart** - an example Dart application
+-which sets up the local environment
+-and then calls main.dart to run performance benchmarks
+-
+-## local_runner.dart
+-
+-This Dart application is one example for running performance benchmarks.
+-When run, this application 1) extracts a branch from a git repository
+-into a temporary directory, and 2) creates a symlink to the out or xcodeb=
uild
+-directory for proper package-root package resolution.
+-Once setup is complete, this applications calls main.dart
+-
+-The required command line arguments are
+-* **gitDir** =3D a path to the git repository containing the initial targ=
et source
+-* **branch** =3D the branch containing the initial target source
+-* **inputFile** =3D the instrumentation or log file
+-
+-Additional arguments are passed directly to main.dart.
+-For example, if the log was recorded on one machine and is played back on=
another,
+-then you might need to specify -m<oldSrcPath>,<newSrcPath>
+-to map the source paths for playback.
+-When specifying additional arguments, any occurrences of @tmpSrcDir@
+-will be replaced with the absolute path of the temporary directory
+-into which the source was extracted.
+-
+-## main.dart
+-
+-This Dart application reads an instrumentation or local log file produced=
by
+-analysis server, "replays" that interaction with the analysis server,
+-compares the notifications and responses with what was recorded in the lo=
g,
+-and produces a report. It assumes that the environment for playback has
+-already been setup.
+-The required command line arguments are
+-* **-i, --input <filePath>**
+-The input file specifying how this client should interact with the server.
+-If the input file name is "stdin", then the instructions are read from st=
din.
+-* **-m, --map <oldSrcPath>,<newSrcPath>**
+-This option defines a mapping from the original source directory <oldSrcP=
ath>
+-when the instrumentation or log file was generated
+-to the target source directory <newSrcPath> used during performance testi=
ng.
+-Multiple mappings can be specified.
+-WARNING: The contents of the target directory will be modified
+-* **-t, --tmpSrcDir <dirPath>**
+-The temporary directory containing source used during performance measure=
ment.
+-WARNING: The contents of the target directory will be modified
+-* **-d, --diagnosticPort** localhost port on which server
+- will provide diagnostic web pages
+-* **-v, --verbose** Verbose logging
+-* **--vv** Extra verbose logging
+-* **-h, --help** Print this help information
+-
+-For each request recorded in the input file,
+-the application sends a corresponding request to the analysis server
+-and waits up to 60 seconds for a response to that request.
+-If a response in not received in that time, then the application exits.
+-Any responses that are received are compared with the recorded response.
+-
+-For each analysis-complete notification recorded in the input file,
+-the application waits for the corresponding analysis-complete notification
+-from the running analysis server.
+-While it is waiting for an analysis-complete notification,
+-the application monitors the stream of notifications.
+-If there is a period of more than 60 seconds during which no communication
+-is received from the server, the application assumes that the server is h=
ung
+-and exits.
+diff --git a/pkg/analysis_server/benchmark/integration/driver.dart b/pkg/a=
nalysis_server/benchmark/integration/driver.dart
+deleted file mode 100644
+index da928396139..00000000000
+--- a/pkg/analysis_server/benchmark/integration/driver.dart
++++ /dev/null
+@@ -1,315 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:math' show max, sqrt;
+-
+-import 'package:logging/logging.dart';
+-
+-import '../../test/integration/support/integration_test_methods.dart';
+-import '../../test/integration/support/integration_tests.dart';
+-import 'operation.dart';
+-
+-final SPACE =3D ' '.codeUnitAt(0);
+-
+-void _printColumn(StringBuffer sb, String text, int keyLen,
+- {bool rightJustified: false}) {
+- if (!rightJustified) {
+- sb.write(text);
+- sb.write(',');
+- }
+- for (int i =3D text.length; i < keyLen; ++i) {
+- sb.writeCharCode(SPACE);
+- }
+- if (rightJustified) {
+- sb.write(text);
+- sb.write(',');
+- }
+- sb.writeCharCode(SPACE);
+-}
+-
+-/**
+- * [Driver] launches and manages an instance of analysis server,
+- * reads a stream of operations, sends requests to analysis server
+- * based upon those operations, and evaluates the results.
+- */
+-class Driver extends IntegrationTestMixin {
+- /**
+- * The amount of time to give the server to respond to a shutdown reque=
st
+- * before forcibly terminating it.
+- */
+- static const Duration SHUTDOWN_TIMEOUT =3D const Duration(seconds: 5);
+-
+- final Logger logger =3D new Logger('Driver');
+-
+- /**
+- * The diagnostic port for Analysis Server or `null` if none.
+- */
+- final int diagnosticPort;
+-
+- /**
+- * A flag indicating whether the server is running.
+- */
+- bool running =3D false;
+-
+- @override
+- Server server;
+-
+- /**
+- * The results collected while running analysis server.
+- */
+- final Results results =3D new Results();
+-
+- /**
+- * The [Completer] for [runComplete].
+- */
+- Completer<Results> _runCompleter =3D new Completer<Results>();
+-
+- Driver({this.diagnosticPort});
+-
+- /**
+- * Return a [Future] that completes with the [Results] of running
+- * the analysis server once all operations have been performed.
+- */
+- Future<Results> get runComplete =3D> _runCompleter.future;
+-
+- /**
+- * Perform the given operation.
+- * Return a [Future] that completes when the next operation can be perf=
ormed,
+- * or `null` if the next operation can be performed immediately
+- */
+- Future perform(Operation op) {
+- return op.perform(this);
+- }
+-
+- /**
+- * Send a command to the server. An 'id' will be automatically assigne=
d.
+- * The returned [Future] will be completed when the server acknowledges=
the
+- * command with a response. If the server acknowledges the command wit=
h a
+- * normal (non-error) response, the future will be completed with the '=
result'
+- * field from the response. If the server acknowledges the command wit=
h an
+- * error response, the future will be completed with an error.
+- */
+- Future<Map<String, dynamic>> send(
+- String method, Map<String, dynamic> params) {
+- return server.send(method, params);
+- }
+-
+- /**
+- * Launch the analysis server.
+- * Return a [Future] that completes when analysis server has started.
+- */
+- Future startServer() async {
+- logger.log(Level.FINE, 'starting server');
+- initializeInttestMixin();
+- server =3D new Server();
+- Completer serverConnected =3D new Completer();
+- onServerConnected.listen((_) {
+- logger.log(Level.FINE, 'connected to server');
+- serverConnected.complete();
+- });
+- running =3D true;
+- return server
+- .start(diagnosticPort: diagnosticPort /*profileServer: true*/)
+- .then((params) {
+- server.listenToOutput(dispatchNotification);
+- server.exitCode.then((_) {
+- logger.log(Level.FINE, 'server stopped');
+- running =3D false;
+- _resultsReady();
+- });
+- return serverConnected.future;
+- });
+- }
+-
+- /**
+- * Shutdown the analysis server if it is running.
+- */
+- Future stopServer([Duration timeout =3D SHUTDOWN_TIMEOUT]) async {
+- if (running) {
+- logger.log(Level.FINE, 'requesting server shutdown');
+- // Give the server a short time to comply with the shutdown request=
; if it
+- // doesn't exit, then forcibly terminate it.
+- sendServerShutdown();
+- await server.exitCode.timeout(timeout, onTimeout: () {
+- return server.kill('server failed to exit');
+- });
+- }
+- _resultsReady();
+- }
+-
+- /**
+- * If not already complete, signal the completer with the collected res=
ults.
+- */
+- void _resultsReady() {
+- if (!_runCompleter.isCompleted) {
+- _runCompleter.complete(results);
+- }
+- }
+-}
+-
+-/**
+- * [Measurement] tracks elapsed time for a given operation.
+- */
+-class Measurement {
+- final String tag;
+- final bool notification;
+- final List<Duration> elapsedTimes =3D new List<Duration>();
+- int errorCount =3D 0;
+- int unexpectedResultCount =3D 0;
+-
+- Measurement(this.tag, this.notification);
+-
+- int get count =3D> elapsedTimes.length;
+-
+- void printSummary(int keyLen) {
+- int count =3D 0;
+- Duration maxTime =3D elapsedTimes[0];
+- Duration minTime =3D elapsedTimes[0];
+- int totalTimeMicros =3D 0;
+- for (Duration elapsed in elapsedTimes) {
+- ++count;
+- int timeMicros =3D elapsed.inMicroseconds;
+- maxTime =3D maxTime.compareTo(elapsed) > 0 ? maxTime : elapsed;
+- minTime =3D minTime.compareTo(elapsed) < 0 ? minTime : elapsed;
+- totalTimeMicros +=3D timeMicros;
+- }
+- int meanTime =3D (totalTimeMicros / count).round();
+- List<Duration> sorted =3D elapsedTimes.toList()..sort();
+- Duration time90th =3D sorted[(sorted.length * 0.90).round() - 1];
+- Duration time99th =3D sorted[(sorted.length * 0.99).round() - 1];
+- int differenceFromMeanSquared =3D 0;
+- for (Duration elapsed in elapsedTimes) {
+- int timeMicros =3D elapsed.inMicroseconds;
+- int differenceFromMean =3D timeMicros - meanTime;
+- differenceFromMeanSquared +=3D differenceFromMean * differenceFromM=
ean;
+- }
+- double variance =3D differenceFromMeanSquared / count;
+- int standardDeviation =3D sqrt(variance).round();
+-
+- StringBuffer sb =3D new StringBuffer();
+- _printColumn(sb, tag, keyLen);
+- _printColumn(sb, count.toString(), 6, rightJustified: true);
+- _printColumn(sb, errorCount.toString(), 6, rightJustified: true);
+- _printColumn(sb, unexpectedResultCount.toString(), 6, rightJustified:=
true);
+- _printDuration(sb, new Duration(microseconds: meanTime));
+- _printDuration(sb, time90th);
+- _printDuration(sb, time99th);
+- _printDuration(sb, new Duration(microseconds: standardDeviation));
+- _printDuration(sb, minTime);
+- _printDuration(sb, maxTime);
+- _printDuration(sb, new Duration(microseconds: totalTimeMicros));
+- print(sb.toString());
+- }
+-
+- void record(bool success, Duration elapsed) {
+- if (!success) {
+- ++errorCount;
+- }
+- elapsedTimes.add(elapsed);
+- }
+-
+- void recordUnexpectedResults() {
+- ++unexpectedResultCount;
+- }
+-
+- void _printDuration(StringBuffer sb, Duration duration) {
+- _printColumn(sb, duration.inMilliseconds.toString(), 15,
+- rightJustified: true);
+- }
+-}
+-
+-/**
+- * [Results] contains information gathered by [Driver]
+- * while running the analysis server
+- */
+-class Results {
+- Map<String, Measurement> measurements =3D new Map<String, Measurement>(=
);
+-
+- /**
+- * Display results on stdout.
+- */
+- void printResults() {
+- print('');
+- print('=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D');
+- print('');
+- List<String> keys =3D measurements.keys.toList()..sort();
+- int keyLen =3D keys.fold(0, (int len, String key) =3D> max(len, key.l=
ength));
+- _printGroupHeader('Request/Response', keyLen);
+- int totalCount =3D 0;
+- int totalErrorCount =3D 0;
+- int totalUnexpectedResultCount =3D 0;
+- for (String tag in keys) {
+- Measurement m =3D measurements[tag];
+- if (!m.notification) {
+- m.printSummary(keyLen);
+- totalCount +=3D m.count;
+- totalErrorCount +=3D m.errorCount;
+- totalUnexpectedResultCount +=3D m.unexpectedResultCount;
+- }
+- }
+- _printTotals(
+- keyLen, totalCount, totalErrorCount, totalUnexpectedResultCount);
+- print('');
+- _printGroupHeader('Notifications', keyLen);
+- for (String tag in keys) {
+- Measurement m =3D measurements[tag];
+- if (m.notification) {
+- m.printSummary(keyLen);
+- }
+- }
+-
+- /// TODO(danrubel) *** print warnings if driver caches are not empty =
****
+- print('''
+-
+-(1) uxr =3D UneXpected Results or responses received from the server
+- that do not match the recorded response for that request.
+-(2) all times in milliseconds''');
+- }
+-
+- /**
+- * Record the elapsed time for the given operation.
+- */
+- void record(String tag, Duration elapsed,
+- {bool notification: false, bool success: true}) {
+- Measurement measurement =3D measurements[tag];
+- if (measurement =3D=3D null) {
+- measurement =3D new Measurement(tag, notification);
+- measurements[tag] =3D measurement;
+- }
+- measurement.record(success, elapsed);
+- }
+-
+- void recordUnexpectedResults(String tag) {
+- measurements[tag].recordUnexpectedResults();
+- }
+-
+- void _printGroupHeader(String groupName, int keyLen) {
+- StringBuffer sb =3D new StringBuffer();
+- _printColumn(sb, groupName, keyLen);
+- _printColumn(sb, 'count', 6, rightJustified: true);
+- _printColumn(sb, 'error', 6, rightJustified: true);
+- _printColumn(sb, 'uxr(1)', 6, rightJustified: true);
+- sb.write(' ');
+- _printColumn(sb, 'mean(2)', 15);
+- _printColumn(sb, '90th', 15);
+- _printColumn(sb, '99th', 15);
+- _printColumn(sb, 'std-dev', 15);
+- _printColumn(sb, 'minimum', 15);
+- _printColumn(sb, 'maximum', 15);
+- _printColumn(sb, 'total', 15);
+- print(sb.toString());
+- }
+-
+- void _printTotals(int keyLen, int totalCount, int totalErrorCount,
+- int totalUnexpectedResultCount) {
+- StringBuffer sb =3D new StringBuffer();
+- _printColumn(sb, 'Totals', keyLen);
+- _printColumn(sb, totalCount.toString(), 6, rightJustified: true);
+- _printColumn(sb, totalErrorCount.toString(), 6, rightJustified: true);
+- _printColumn(sb, totalUnexpectedResultCount.toString(), 6,
+- rightJustified: true);
+- print(sb.toString());
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/input_converter.dar=
t b/pkg/analysis_server/benchmark/integration/input_converter.dart
+deleted file mode 100644
+index 70999d504aa..00000000000
+--- a/pkg/analysis_server/benchmark/integration/input_converter.dart
++++ /dev/null
+@@ -1,399 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-
+-import 'package:analysis_server/protocol/protocol.dart';
+-import 'package:analysis_server/protocol/protocol_constants.dart';
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-import 'package:logging/logging.dart';
+-import 'package:path/path.dart' as path;
+-
+-import 'instrumentation_input_converter.dart';
+-import 'log_file_input_converter.dart';
+-import 'operation.dart';
+-
+-/**
+- * Common input converter superclass for sharing implementation.
+- */
+-abstract class CommonInputConverter extends Converter<String, Operation> {
+- static final ERROR_PREFIX =3D 'Server responded with an error: ';
+- final Logger logger =3D new Logger('InstrumentationInputConverter');
+- final Set<String> eventsSeen =3D new Set<String>();
+-
+- /**
+- * A mapping from request/response id to request json
+- * for those requests for which a response has not been processed.
+- */
+- final Map<String, dynamic> requestMap =3D {};
+-
+- /**
+- * A mapping from request/response id to a completer
+- * for those requests for which a response has not been processed.
+- * The completer is called with the actual json response
+- * when it becomes available.
+- */
+- final Map<String, Completer> responseCompleters =3D {};
+-
+- /**
+- * A mapping from request/response id to the actual response result
+- * for those responses that have not been processed.
+- */
+- final Map<String, dynamic> responseMap =3D {};
+-
+- /**
+- * A mapping of current overlay content
+- * parallel to what is in the analysis server
+- * so that we can update the file system.
+- */
+- final Map<String, String> overlays =3D {};
+-
+- /**
+- * The prefix used to determine if a request parameter is a file path.
+- */
+- final String rootPrefix =3D path.rootPrefix(path.current);
+-
+- /**
+- * A mapping of source path prefixes
+- * from location where instrumentation or log file was generated
+- * to the target location of the source using during performance measur=
ement.
+- */
+- final PathMap srcPathMap;
+-
+- /**
+- * The root directory for all source being modified
+- * during performance measurement.
+- */
+- final String tmpSrcDirPath;
+-
+- CommonInputConverter(this.tmpSrcDirPath, this.srcPathMap);
+-
+- Map<String, dynamic> asMap(dynamic value) =3D> value as Map<String, dyn=
amic>;
+-
+- /**
+- * Return an operation for the notification or `null` if none.
+- */
+- Operation convertNotification(Map<String, dynamic> json) {
+- String event =3D json['event'];
+- if (event =3D=3D SERVER_NOTIFICATION_STATUS) {
+- // {"event":"server.status","params":{"analysis":{"isAnalyzing":fal=
se}}}
+- Map<String, dynamic> params =3D asMap(json['params']);
+- if (params !=3D null) {
+- Map<String, dynamic> analysis =3D asMap(params['analysis']);
+- if (analysis !=3D null && analysis['isAnalyzing'] =3D=3D false) {
+- return new WaitForAnalysisCompleteOperation();
+- }
+- }
+- }
+- if (event =3D=3D SERVER_NOTIFICATION_CONNECTED) {
+- // {"event":"server.connected","params":{"version":"1.7.0"}}
+- return new StartServerOperation();
+- }
+- if (eventsSeen.add(event)) {
+- logger.log(Level.INFO, 'Ignored notification: $event\n $json');
+- }
+- return null;
+- }
+-
+- /**
+- * Return an operation for the request or `null` if none.
+- */
+- Operation convertRequest(Map<String, dynamic> origJson) {
+- Map<String, dynamic> json =3D asMap(translateSrcPaths(origJson));
+- requestMap[json['id']] =3D json;
+- String method =3D json['method'];
+- // Sanity check operations that modify source
+- // to ensure that the operation is on source in temp space
+- if (method =3D=3D ANALYSIS_REQUEST_UPDATE_CONTENT) {
+- // Track overlays in parallel with the analysis server
+- // so that when an overlay is removed, the file can be updated on d=
isk
+- Request request =3D new Request.fromJson(json);
+- var params =3D new AnalysisUpdateContentParams.fromRequest(request);
+- params.files.forEach((String filePath, change) {
+- if (change is AddContentOverlay) {
+- String content =3D change.content;
+- if (content =3D=3D null) {
+- throw 'expected new overlay content\n$json';
+- }
+- overlays[filePath] =3D content;
+- } else if (change is ChangeContentOverlay) {
+- String content =3D overlays[filePath];
+- if (content =3D=3D null) {
+- throw 'expected cached overlay content\n$json';
+- }
+- overlays[filePath] =3D SourceEdit.applySequence(content, change=
.edits);
+- } else if (change is RemoveContentOverlay) {
+- String content =3D overlays.remove(filePath);
+- if (content =3D=3D null) {
+- throw 'expected cached overlay content\n$json';
+- }
+- if (!path.isWithin(tmpSrcDirPath, filePath)) {
+- throw 'found path referencing source outside temp space\n$fil=
ePath\n$json';
+- }
+- new File(filePath).writeAsStringSync(content);
+- } else {
+- throw 'unknown overlay change $change\n$json';
+- }
+- });
+- return new RequestOperation(this, json);
+- }
+- // Track performance for completion notifications
+- if (method =3D=3D COMPLETION_REQUEST_GET_SUGGESTIONS) {
+- return new CompletionRequestOperation(this, json);
+- }
+- // TODO(danrubel) replace this with code
+- // that just forwards the translated request
+- if (method =3D=3D ANALYSIS_REQUEST_GET_HOVER ||
+- method =3D=3D ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS ||
+- method =3D=3D ANALYSIS_REQUEST_SET_PRIORITY_FILES ||
+- method =3D=3D ANALYSIS_REQUEST_SET_SUBSCRIPTIONS ||
+- method =3D=3D ANALYSIS_REQUEST_UPDATE_OPTIONS ||
+- method =3D=3D EDIT_REQUEST_GET_ASSISTS ||
+- method =3D=3D EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS ||
+- method =3D=3D EDIT_REQUEST_GET_FIXES ||
+- method =3D=3D EDIT_REQUEST_GET_REFACTORING ||
+- method =3D=3D EDIT_REQUEST_SORT_MEMBERS ||
+- method =3D=3D EXECUTION_REQUEST_CREATE_CONTEXT ||
+- method =3D=3D EXECUTION_REQUEST_DELETE_CONTEXT ||
+- method =3D=3D EXECUTION_REQUEST_MAP_URI ||
+- method =3D=3D EXECUTION_REQUEST_SET_SUBSCRIPTIONS ||
+- method =3D=3D SEARCH_REQUEST_FIND_ELEMENT_REFERENCES ||
+- method =3D=3D SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS ||
+- method =3D=3D SERVER_REQUEST_GET_VERSION ||
+- method =3D=3D SERVER_REQUEST_SET_SUBSCRIPTIONS) {
+- return new RequestOperation(this, json);
+- }
+- throw 'unknown request: $method\n $json';
+- }
+-
+- /**
+- * Return an operation for the recorded/expected response.
+- */
+- Operation convertResponse(Map<String, dynamic> json) {
+- return new ResponseOperation(this, asMap(requestMap.remove(json['id']=
)),
+- asMap(translateSrcPaths(json)));
+- }
+-
+- void logOverlayContent() {
+- logger.log(Level.WARNING, '${overlays.length} overlays');
+- List<String> allPaths =3D overlays.keys.toList()..sort();
+- for (String filePath in allPaths) {
+- logger.log(Level.WARNING, 'overlay $filePath\n${overlays[filePath]}=
');
+- }
+- }
+-
+- /**
+- * Process an error response from the server by either
+- * completing the associated completer in the [responseCompleters]
+- * or stashing it in [responseMap] if no completer exists.
+- */
+- void processErrorResponse(String id, exception) {
+- var result =3D exception;
+- if (exception is UnimplementedError) {
+- if (exception.message.startsWith(ERROR_PREFIX)) {
+- result =3D JSON.decode(exception.message.substring(ERROR_PREFIX.l=
ength));
+- }
+- }
+- processResponseResult(id, result);
+- }
+-
+- /**
+- * Process the expected response by completing the given completer
+- * with the result if it has already been received,
+- * or caching the completer to be completed when the server
+- * returns the associated result.
+- * Return a future that completes when the response is received
+- * or `null` if the response has already been received
+- * and the completer completed.
+- */
+- Future processExpectedResponse(String id, Completer completer) {
+- if (responseMap.containsKey(id)) {
+- logger.log(Level.INFO, 'processing cached response $id');
+- completer.complete(responseMap.remove(id));
+- return null;
+- } else {
+- logger.log(Level.INFO, 'waiting for response $id');
+- responseCompleters[id] =3D completer;
+- return completer.future;
+- }
+- }
+-
+- /**
+- * Process a success response result from the server by either
+- * completing the associated completer in the [responseCompleters]
+- * or stashing it in [responseMap] if no completer exists.
+- * The response result may be `null`.
+- */
+- void processResponseResult(String id, result) {
+- Completer completer =3D responseCompleters[id];
+- if (completer !=3D null) {
+- logger.log(Level.INFO, 'processing response $id');
+- completer.complete(result);
+- } else {
+- logger.log(Level.INFO, 'caching response $id');
+- responseMap[id] =3D result;
+- }
+- }
+-
+- /**
+- * Recursively translate source paths in the specified JSON to reference
+- * the temporary source used during performance measurement rather than
+- * the original source when the instrumentation or log file was generat=
ed.
+- */
+- translateSrcPaths(json) {
+- if (json is String) {
+- return srcPathMap.translate(json);
+- }
+- if (json is List) {
+- List result =3D [];
+- for (int i =3D 0; i < json.length; ++i) {
+- result.add(translateSrcPaths(json[i]));
+- }
+- return result;
+- }
+- if (json is Map) {
+- Map<String, dynamic> result =3D new Map<String, dynamic>();
+- json.forEach((origKey, value) {
+- result[translateSrcPaths(origKey)] =3D translateSrcPaths(value);
+- });
+- return result;
+- }
+- return json;
+- }
+-}
+-
+-/**
+- * [InputConverter] converts an input stream
+- * into a series of operations to be sent to the analysis server.
+- * The input stream can be either an instrumentation or log file.
+- */
+-class InputConverter extends Converter<String, Operation> {
+- final Logger logger =3D new Logger('InputConverter');
+-
+- /**
+- * A mapping of source path prefixes
+- * from location where instrumentation or log file was generated
+- * to the target location of the source using during performance measur=
ement.
+- */
+- final PathMap srcPathMap;
+-
+- /**
+- * The root directory for all source being modified
+- * during performance measurement.
+- */
+- final String tmpSrcDirPath;
+-
+- /**
+- * The number of lines read before the underlying converter was determi=
ned
+- * or the end of file was reached.
+- */
+- int headerLineCount =3D 0;
+-
+- /**
+- * The underlying converter used to translate lines into operations
+- * or `null` if it has not yet been determined.
+- */
+- Converter<String, Operation> converter;
+-
+- /**
+- * [active] is `true` if converting lines to operations
+- * or `false` if an exception has occurred.
+- */
+- bool active =3D true;
+-
+- InputConverter(this.tmpSrcDirPath, this.srcPathMap);
+-
+- @override
+- Operation convert(String line) {
+- if (!active) {
+- return null;
+- }
+- if (converter !=3D null) {
+- try {
+- return converter.convert(line);
+- } catch (e) {
+- active =3D false;
+- rethrow;
+- }
+- }
+- if (headerLineCount =3D=3D 20) {
+- throw 'Failed to determine input file format';
+- }
+- if (InstrumentationInputConverter.isFormat(line)) {
+- converter =3D new InstrumentationInputConverter(tmpSrcDirPath, srcP=
athMap);
+- } else if (LogFileInputConverter.isFormat(line)) {
+- converter =3D new LogFileInputConverter(tmpSrcDirPath, srcPathMap);
+- }
+- if (converter !=3D null) {
+- return converter.convert(line);
+- }
+- logger.log(Level.INFO, 'skipped input line: $line');
+- return null;
+- }
+-
+- @override
+- _InputSink startChunkedConversion(outSink) {
+- return new _InputSink(this, outSink);
+- }
+-}
+-
+-/**
+- * A container of [PathMapEntry]s used to translate a source path in the =
log
+- * before it is sent to the analysis server.
+- */
+-class PathMap {
+- final List<PathMapEntry> entries =3D [];
+-
+- void add(String oldSrcPrefix, String newSrcPrefix) {
+- entries.add(new PathMapEntry(oldSrcPrefix, newSrcPrefix));
+- }
+-
+- String translate(String original) {
+- String result =3D original;
+- for (PathMapEntry entry in entries) {
+- result =3D entry.translate(result);
+- }
+- return result;
+- }
+-}
+-
+-/**
+- * An entry in [PathMap] used to translate a source path in the log
+- * before it is sent to the analysis server.
+- */
+-class PathMapEntry {
+- final String oldSrcPrefix;
+- final String newSrcPrefix;
+-
+- PathMapEntry(this.oldSrcPrefix, this.newSrcPrefix);
+-
+- String translate(String original) {
+- return original.startsWith(oldSrcPrefix)
+- ? '$newSrcPrefix${original.substring(oldSrcPrefix.length)}'
+- : original;
+- }
+-}
+-
+-class _InputSink extends ChunkedConversionSink<String> {
+- final Converter<String, Operation> converter;
+- final outSink;
+-
+- _InputSink(this.converter, this.outSink);
+-
+- @override
+- void add(String line) {
+- Operation op =3D converter.convert(line);
+- if (op !=3D null) {
+- outSink.add(op);
+- }
+- }
+-
+- @override
+- void close() {
+- outSink.close();
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/instrumentation_inp=
ut_converter.dart b/pkg/analysis_server/benchmark/integration/instrumentati=
on_input_converter.dart
+deleted file mode 100644
+index 7a875942643..00000000000
+--- a/pkg/analysis_server/benchmark/integration/instrumentation_input_conv=
erter.dart
++++ /dev/null
+@@ -1,146 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:convert';
+-
+-import 'package:analyzer/exception/exception.dart';
+-import 'package:analyzer/instrumentation/instrumentation.dart';
+-import 'package:logging/logging.dart';
+-
+-import 'input_converter.dart';
+-import 'operation.dart';
+-
+-final int COLON =3D ':'.codeUnitAt(0);
+-
+-/**
+- * [InstrumentationInputConverter] converts an instrumentation stream
+- * into a series of operations to be sent to the analysis server.
+- */
+-class InstrumentationInputConverter extends CommonInputConverter {
+- final Set<String> codesSeen =3D new Set<String>();
+-
+- /**
+- * [readBuffer] holds the contents of the file being read from disk
+- * as recorded in the instrumentation log
+- * or `null` if not converting a "Read" entry.
+- */
+- StringBuffer readBuffer =3D null;
+-
+- InstrumentationInputConverter(String tmpSrcDirPath, PathMap srcPathMap)
+- : super(tmpSrcDirPath, srcPathMap);
+-
+- @override
+- Operation convert(String line) {
+- List<String> fields;
+- try {
+- fields =3D _parseFields(line);
+- if (fields.length < 2) {
+- if (readBuffer !=3D null) {
+- readBuffer.writeln(fields.length =3D=3D 1 ? fields[0] : '');
+- return null;
+- }
+- throw 'Failed to process line:\n$line';
+- }
+- if (readBuffer !=3D null) {
+- readBuffer =3D null;
+- }
+- } catch (e, s) {
+- throw new AnalysisException(
+- 'Failed to parse line\n$line', new CaughtException(e, s));
+- }
+- // int timeStamp =3D int.parse(fields[0], onError: (_) =3D> -1);
+- String opCode =3D fields[1];
+- if (opCode =3D=3D InstrumentationService.TAG_NOTIFICATION) {
+- return convertNotification(decodeJson(line, fields[2]));
+- } else if (opCode =3D=3D 'Read') {
+- // 1434096943209:Read:/some/file/path:1434095535000:<file content>
+- //String filePath =3D fields[2];
+- readBuffer =3D new StringBuffer(fields.length > 4 ? fields[4] : '');
+- return null;
+- } else if (opCode =3D=3D InstrumentationService.TAG_REQUEST) {
+- return convertRequest(decodeJson(line, fields[2]));
+- } else if (opCode =3D=3D InstrumentationService.TAG_RESPONSE) {
+- // 1434096937454:Res:{"id"::"0","result"::{"version"::"1.7.0"}}
+- return convertResponse(decodeJson(line, fields[2]));
+- } else if (opCode =3D=3D InstrumentationService.TAG_ANALYSIS_TASK) {
+- // 1434096943208:Task:/Users/
+- return null;
+- } else if (opCode =3D=3D InstrumentationService.TAG_LOG_ENTRY) {
+- // 1434096937454:Res:{"id"::"0","result"::{"version"::"1.7.0"}}
+- return null;
+- } else if (opCode =3D=3D InstrumentationService.TAG_PERFORMANCE) {
+- //1434096960092:Perf:analysis_full:16884:context_id=3D0
+- return null;
+- } else if (opCode =3D=3D InstrumentationService.TAG_SUBPROCESS_START)=
{
+- // 1434096938634:SPStart:0:/Users/da
+- return null;
+- } else if (opCode =3D=3D InstrumentationService.TAG_SUBPROCESS_RESULT=
) {
+- // 1434096939068:SPResult:0:0:"{\"packages\"::{\"rpi_lidar\"::\"/Us=
ers
+- return null;
+- } else if (opCode =3D=3D InstrumentationService.TAG_VERSION) {
+- // 1434096937358:Ver:1421765742287333878467:org.dartlang.dartplugin
+- return null;
+- } else if (opCode =3D=3D InstrumentationService.TAG_WATCH_EVENT) {
+- // 1434097460414:Watch:/some/file/path
+- return null;
+- }
+- if (codesSeen.add(opCode)) {
+- logger.log(
+- Level.WARNING, 'Ignored instrumentation op code: $opCode\n $li=
ne');
+- }
+- return null;
+- }
+-
+- Map<String, dynamic> decodeJson(String line, String text) {
+- try {
+- return asMap(JSON.decode(text));
+- } catch (e, s) {
+- throw new AnalysisException(
+- 'Failed to decode JSON: $text\n$line', new CaughtException(e, s=
));
+- }
+- }
+-
+- /**
+- * Determine if the given line is from an instrumentation file.
+- * For example:
+- * `1433175833005:Ver:1421765742287333878467:org.dartlang.dartplugin:0.=
0.0:1.6.2:1.11.0-edge.131698`
+- */
+- static bool isFormat(String line) {
+- List<String> fields =3D _parseFields(line);
+- if (fields.length < 2) return false;
+- int timeStamp =3D int.parse(fields[0], onError: (_) =3D> -1);
+- String opCode =3D fields[1];
+- return timeStamp > 0 && opCode =3D=3D 'Ver';
+- }
+-
+- /**
+- * Extract fields from the given [line].
+- */
+- static List<String> _parseFields(String line) {
+- List<String> fields =3D new List<String>();
+- int index =3D 0;
+- StringBuffer sb =3D new StringBuffer();
+- while (index < line.length) {
+- int code =3D line.codeUnitAt(index);
+- if (code =3D=3D COLON) {
+- // Embedded colons are doubled
+- int next =3D index + 1;
+- if (next < line.length && line.codeUnitAt(next) =3D=3D COLON) {
+- sb.write(':');
+- ++index;
+- } else {
+- fields.add(sb.toString());
+- sb.clear();
+- }
+- } else {
+- sb.writeCharCode(code);
+- }
+- ++index;
+- }
+- if (sb.isNotEmpty) {
+- fields.add(sb.toString());
+- }
+- return fields;
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/local_runner.dart b=
/pkg/analysis_server/benchmark/integration/local_runner.dart
+deleted file mode 100644
+index 28ef5bb9136..00000000000
+--- a/pkg/analysis_server/benchmark/integration/local_runner.dart
++++ /dev/null
+@@ -1,91 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:io';
+-
+-import 'package:path/path.dart';
+-
+-import 'main.dart' as performance;
+-
+-// Local driver for performance measurement
+-
+-main(List<String> args) {
+- /*
+- * Parse arguments
+- */
+- if (args.length < 3) printHelp('Expected 3 arguments');
+- var gitDir =3D new Directory(args[0]);
+- if (!gitDir.existsSync()) printHelp('${gitDir.path} does not exist');
+- if (!new Directory(join(gitDir.path, '.git')).existsSync())
+- printHelp('${gitDir.path} does not appear to be a local git repositor=
y');
+- var branch =3D args[1];
+- var inputFile =3D new File(args[2]);
+- if (!inputFile.existsSync()) printHelp('${inputFile.path} does not exis=
t');
+- /*
+- * Create a new temp directory
+- */
+- var tmpDir =3D new Directory(
+- join(Directory.systemTemp.path, 'analysis_server_perf_target'));
+- if (!tmpDir.path.contains('tmp')) throw 'invalid tmp directory\n $tmpD=
ir';
+- print('Extracting target analysis environment into\n ${tmpDir.path}');
+- if (tmpDir.existsSync()) tmpDir.deleteSync(recursive: true);
+- tmpDir.createSync(recursive: true);
+- /*
+- * Setup the initial target source in the temp directory
+- */
+- var tarFilePath =3D join(tmpDir.path, 'targetSrc.tar');
+- var result =3D Process.runSync('git', ['archive', branch, '-o', tarFile=
Path],
+- workingDirectory: gitDir.path);
+- if (result.exitCode !=3D 0) throw 'failed to obtain target source: $res=
ult';
+- var tmpSrcDirPath =3D join(tmpDir.path, 'targetSrc');
+- new Directory(tmpSrcDirPath).createSync();
+- result =3D Process.runSync('tar', ['-xf', tarFilePath],
+- workingDirectory: tmpSrcDirPath);
+- if (result.exitCode !=3D 0) throw 'failed to extract target source: $re=
sult';
+- /*
+- * Symlink the out or xcodebuild directory
+- */
+- var outDirName =3D 'out';
+- if (!new Directory(join(gitDir.path, outDirName)).existsSync()) {
+- outDirName =3D 'xcodebuild';
+- }
+- if (!new Directory(join(gitDir.path, outDirName)).existsSync()) {
+- throw 'failed to find out or xcodebuild directory';
+- }
+- result =3D Process.runSync('ln',
+- ['-s', join(gitDir.path, outDirName), join(tmpSrcDirPath, outDirNam=
e)]);
+- if (result.exitCode !=3D 0) throw 'failed to link out or xcodebuild: $r=
esult';
+- /*
+- * Collect arguments
+- */
+- var perfArgs =3D [
+- '-i${inputFile.path}',
+- '-t$tmpSrcDirPath',
+- ];
+- for (int index =3D 3; index < args.length; ++index) {
+- perfArgs.add(args[index].replaceAll('@tmpSrcDir@', tmpSrcDirPath));
+- }
+- perfArgs.add('-m${gitDir.path},$tmpSrcDirPath');
+- /*
+- * Launch the performance analysis tool
+- */
+- performance.main(perfArgs);
+-}
+-
+-/// Print help and exit
+-void printHelp([String errMsg]) {
+- if (errMsg !=3D null) {
+- print('');
+- print('Error: $errMsg');
+- print('');
+- }
+- print('''Required arguments: <gitDir> <branch> <inputFile>
+-gitDir =3D a path to the git repository containing the initial target sou=
rce
+-branch =3D the branch containing the initial target source
+-inputFile =3D the instrumentation or log file
+-
+-Optional arguments:''');
+- print(performance.argParser.usage);
+- exit(1);
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/log_file_input_conv=
erter.dart b/pkg/analysis_server/benchmark/integration/log_file_input_conve=
rter.dart
+deleted file mode 100644
+index 79d3d6e955c..00000000000
+--- a/pkg/analysis_server/benchmark/integration/log_file_input_converter.d=
art
++++ /dev/null
+@@ -1,82 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:convert';
+-
+-import 'package:analyzer/exception/exception.dart';
+-import 'package:logging/logging.dart';
+-
+-import 'input_converter.dart';
+-import 'operation.dart';
+-
+-const CONNECTED_MSG_FRAGMENT =3D ' <=3D {"event":"server.connected"';
+-const RECEIVED_FRAGMENT =3D ' <=3D {';
+-const SENT_FRAGMENT =3D ' =3D> {';
+-final int NINE =3D '9'.codeUnitAt(0);
+-final int ZERO =3D '0'.codeUnitAt(0);
+-
+-/**
+- * [LogFileInputConverter] converts a log file stream
+- * into a series of operations to be sent to the analysis server.
+- */
+-class LogFileInputConverter extends CommonInputConverter {
+- LogFileInputConverter(String tmpSrcDirPath, PathMap srcPathMap)
+- : super(tmpSrcDirPath, srcPathMap);
+-
+- @override
+- Operation convert(String line) {
+- try {
+- String timeStampString =3D _parseTimeStamp(line);
+- String data =3D line.substring(timeStampString.length);
+- if (data.startsWith(RECEIVED_FRAGMENT)) {
+- Map<String, dynamic> json =3D asMap(JSON.decode(data.substring(4)=
));
+- if (json.containsKey('event')) {
+- return convertNotification(json);
+- } else {
+- return convertResponse(json);
+- }
+- } else if (data.startsWith(SENT_FRAGMENT)) {
+- Map<String, dynamic> json =3D asMap(JSON.decode(data.substring(4)=
));
+- if (json.containsKey('method')) {
+- return convertRequest(json);
+- }
+- return null;
+- }
+- logger.log(Level.INFO, 'unknown input line: $line');
+- return null;
+- } catch (e, s) {
+- throw new AnalysisException(
+- 'Failed to parse line\n $line', new CaughtException(e, s));
+- }
+- }
+-
+- /**
+- * Determine if the given line is from an instrumentation file.
+- * For example:
+- * `1428347977499 <=3D {"event":"server.connected","params":{"version":=
"1.6.0"}}`
+- */
+- static bool isFormat(String line) {
+- String timeStampString =3D _parseTimeStamp(line);
+- int start =3D timeStampString.length;
+- int end =3D start + CONNECTED_MSG_FRAGMENT.length;
+- return (10 < start && end < line.length) &&
+- line.substring(start, end) =3D=3D CONNECTED_MSG_FRAGMENT;
+- }
+-
+- /**
+- * Parse the given line and return the millisecond timestamp or `null`
+- * if it cannot be determined.
+- */
+- static String _parseTimeStamp(String line) {
+- int index =3D 0;
+- while (index < line.length) {
+- int code =3D line.codeUnitAt(index);
+- if (code < ZERO || NINE < code) {
+- return line.substring(0, index);
+- }
+- ++index;
+- }
+- return line;
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/main.dart b/pkg/ana=
lysis_server/benchmark/integration/main.dart
+deleted file mode 100644
+index 0760b171fab..00000000000
+--- a/pkg/analysis_server/benchmark/integration/main.dart
++++ /dev/null
+@@ -1,246 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-
+-import 'package:args/args.dart';
+-import 'package:logging/logging.dart';
+-import 'package:path/path.dart' as path;
+-
+-import 'driver.dart';
+-import 'input_converter.dart';
+-import 'operation.dart';
+-
+-/**
+- * Launch and interact with the analysis server.
+- */
+-main(List<String> rawArgs) {
+- Logger logger =3D new Logger('Performance Measurement Client');
+- logger.onRecord.listen((LogRecord rec) {
+- print(rec.message);
+- });
+- PerfArgs args =3D parseArgs(rawArgs);
+-
+- Driver driver =3D new Driver(diagnosticPort: args.diagnosticPort);
+- Stream<Operation> stream =3D openInput(args);
+- StreamSubscription<Operation> subscription;
+- subscription =3D stream.listen((Operation op) {
+- Future future =3D driver.perform(op);
+- if (future !=3D null) {
+- logger.log(Level.FINE, 'pausing operations for ${op.runtimeType}');
+- subscription.pause(future.then((_) {
+- logger.log(Level.FINE, 'resuming operations');
+- }));
+- }
+- }, onDone: () {
+- subscription.cancel();
+- driver.stopServer(SHUTDOWN_TIMEOUT);
+- }, onError: (e, s) {
+- subscription.cancel();
+- logger.log(Level.SEVERE, '$e\n$s');
+- driver.stopServer(SHUTDOWN_TIMEOUT);
+- });
+- driver.runComplete.then((Results results) {
+- results.printResults();
+- }).whenComplete(() {
+- return subscription.cancel();
+- });
+-}
+-
+-const DIAGNOSTIC_PORT_OPTION =3D 'diagnosticPort';
+-const HELP_CMDLINE_OPTION =3D 'help';
+-const INPUT_CMDLINE_OPTION =3D 'input';
+-const MAP_OPTION =3D 'map';
+-
+-/**
+- * The amount of time to give the server to respond to a shutdown request
+- * before forcibly terminating it.
+- */
+-const Duration SHUTDOWN_TIMEOUT =3D const Duration(seconds: 25);
+-
+-const TMP_SRC_DIR_OPTION =3D 'tmpSrcDir';
+-const VERBOSE_CMDLINE_OPTION =3D 'verbose';
+-const VERY_VERBOSE_CMDLINE_OPTION =3D 'vv';
+-
+-ArgParser _argParser;
+-
+-ArgParser get argParser {
+- _argParser =3D new ArgParser();
+-
+- _argParser.addOption(INPUT_CMDLINE_OPTION,
+- abbr: 'i',
+- help: '<filePath>\n'
+- 'The input file specifying how this client should interact with=
the server.\n'
+- 'If the input file name is "stdin", then the instructions are r=
ead from standard input.');
+- _argParser.addOption(MAP_OPTION,
+- abbr: 'm',
+- allowMultiple: true,
+- splitCommas: false,
+- help: '<oldSrcPath>,<newSrcPath>\n'
+- 'This option defines a mapping from the original source directo=
ry <oldSrcPath>\n'
+- 'when the instrumentation or log file was generated\n'
+- 'to the target source directory <newSrcPath> used during perfor=
mance testing.\n'
+- 'Multiple mappings can be specified.\n'
+- 'WARNING: The contents of the target directory will be modified=
');
+- _argParser.addOption(TMP_SRC_DIR_OPTION,
+- abbr: 't',
+- help: '<dirPath>\n'
+- 'The temporary directory containing source used during performa=
nce measurement.\n'
+- 'WARNING: The contents of the target directory will be modified=
');
+- _argParser.addOption(DIAGNOSTIC_PORT_OPTION,
+- abbr: 'd',
+- help: 'localhost port on which server will provide diagnostic web p=
ages');
+- _argParser.addFlag(VERBOSE_CMDLINE_OPTION,
+- abbr: 'v', help: 'Verbose logging', negatable: false);
+- _argParser.addFlag(VERY_VERBOSE_CMDLINE_OPTION,
+- help: 'Extra verbose logging', negatable: false);
+- _argParser.addFlag(HELP_CMDLINE_OPTION,
+- abbr: 'h', help: 'Print this help information', negatable: false);
+- return _argParser;
+-}
+-
+-/**
+- * Open and return the input stream specifying how this client
+- * should interact with the analysis server.
+- */
+-Stream<Operation> openInput(PerfArgs args) {
+- var logger =3D new Logger('openInput');
+- Stream<List<int>> inputRaw;
+- if (args.inputPath =3D=3D 'stdin') {
+- inputRaw =3D stdin;
+- } else {
+- inputRaw =3D new File(args.inputPath).openRead();
+- }
+- for (PathMapEntry entry in args.srcPathMap.entries) {
+- logger.log(
+- Level.INFO,
+- 'mapping source path\n'
+- ' from ${entry.oldSrcPrefix}\n to ${entry.newSrcPrefix}');
+- }
+- logger.log(Level.INFO, 'tmpSrcDir: ${args.tmpSrcDirPath}');
+- return inputRaw
+- .transform(SYSTEM_ENCODING.decoder)
+- .transform(new LineSplitter())
+- .transform(new InputConverter(args.tmpSrcDirPath, args.srcPathMap));
+-}
+-
+-/**
+- * Parse the command line arguments.
+- */
+-PerfArgs parseArgs(List<String> rawArgs) {
+- ArgResults args;
+- PerfArgs perfArgs =3D new PerfArgs();
+- try {
+- args =3D argParser.parse(rawArgs);
+- } on Exception catch (e) {
+- print(e);
+- printHelp();
+- exit(1);
+- }
+-
+- bool showHelp =3D args[HELP_CMDLINE_OPTION] || args.rest.isNotEmpty;
+-
+- bool isMissing(key) =3D> args[key] =3D=3D null || args[key].isEmpty;
+-
+- perfArgs.inputPath =3D args[INPUT_CMDLINE_OPTION];
+- if (isMissing(INPUT_CMDLINE_OPTION)) {
+- print('missing $INPUT_CMDLINE_OPTION argument');
+- showHelp =3D true;
+- }
+-
+- for (String pair in args[MAP_OPTION]) {
+- if (pair is String) {
+- int index =3D pair.indexOf(',');
+- if (index !=3D -1 && pair.indexOf(',', index + 1) =3D=3D -1) {
+- String oldSrcPrefix =3D _withTrailingSeparator(pair.substring(0, =
index));
+- String newSrcPrefix =3D _withTrailingSeparator(pair.substring(ind=
ex + 1));
+- if (new Directory(newSrcPrefix).existsSync()) {
+- perfArgs.srcPathMap.add(oldSrcPrefix, newSrcPrefix);
+- continue;
+- }
+- }
+- }
+- print('must specifiy $MAP_OPTION <oldSrcPath>,<newSrcPath>');
+- showHelp =3D true;
+- }
+-
+- perfArgs.tmpSrcDirPath =3D _withTrailingSeparator(args[TMP_SRC_DIR_OPTI=
ON]);
+- if (isMissing(TMP_SRC_DIR_OPTION)) {
+- print('missing $TMP_SRC_DIR_OPTION argument');
+- showHelp =3D true;
+- }
+-
+- String portText =3D args[DIAGNOSTIC_PORT_OPTION];
+- if (portText !=3D null) {
+- perfArgs.diagnosticPort =3D int.parse(portText, onError: (s) {
+- print('invalid $DIAGNOSTIC_PORT_OPTION: $s');
+- showHelp =3D true;
+- });
+- }
+-
+- if (args[VERY_VERBOSE_CMDLINE_OPTION] || rawArgs.contains('-vv')) {
+- Logger.root.level =3D Level.FINE;
+- } else if (args[VERBOSE_CMDLINE_OPTION]) {
+- Logger.root.level =3D Level.INFO;
+- } else {
+- Logger.root.level =3D Level.WARNING;
+- }
+-
+- if (showHelp) {
+- printHelp();
+- exit(1);
+- }
+-
+- return perfArgs;
+-}
+-
+-void printHelp() {
+- print('');
+- print('Launch and interact with the AnalysisServer');
+- print('');
+- print(argParser.usage);
+-}
+-
+-/**
+- * Ensure that the given path has a trailing separator
+- */
+-String _withTrailingSeparator(String dirPath) {
+- if (dirPath !=3D null && dirPath.length > 4) {
+- if (!dirPath.endsWith(path.separator)) {
+- return '$dirPath${path.separator}';
+- }
+- }
+- return dirPath;
+-}
+-
+-/**
+- * The performance measurement arguments specified on the command line.
+- */
+-class PerfArgs {
+- /**
+- * The file path of the instrumentation or log file
+- * used to drive performance measurement,
+- * or 'stdin' if this information should be read from standard input.
+- */
+- String inputPath;
+-
+- /**
+- * A mapping from the original source directory
+- * when the instrumentation or log file was generated
+- * to the target source directory used during performance testing.
+- */
+- final PathMap srcPathMap =3D new PathMap();
+-
+- /**
+- * The temporary directory containing source used during performance me=
asurement.
+- */
+- String tmpSrcDirPath;
+-
+- /**
+- * The diagnostic port for Analysis Server or `null` if none.
+- */
+- int diagnosticPort;
+-}
+diff --git a/pkg/analysis_server/benchmark/integration/operation.dart b/pk=
g/analysis_server/benchmark/integration/operation.dart
+deleted file mode 100644
+index 75cf2a7edc9..00000000000
+--- a/pkg/analysis_server/benchmark/integration/operation.dart
++++ /dev/null
+@@ -1,236 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:logging/logging.dart';
+-
+-import 'driver.dart';
+-import 'input_converter.dart';
+-
+-/**
+- * A [CompletionRequestOperation] tracks response time along with
+- * the first and last completion notifications.
+- */
+-class CompletionRequestOperation extends RequestOperation {
+- Driver driver;
+- StreamSubscription<CompletionResultsParams> subscription;
+- String notificationId;
+- Stopwatch stopwatch;
+- bool firstNotification =3D true;
+-
+- CompletionRequestOperation(
+- CommonInputConverter converter, Map<String, dynamic> json)
+- : super(converter, json);
+-
+- @override
+- Future perform(Driver driver) {
+- this.driver =3D driver;
+- subscription =3D driver.onCompletionResults.listen(processNotificatio=
n);
+- return super.perform(driver);
+- }
+-
+- void processNotification(CompletionResultsParams event) {
+- if (event.id =3D=3D notificationId) {
+- Duration elapsed =3D stopwatch.elapsed;
+- if (firstNotification) {
+- firstNotification =3D false;
+- driver.results.record('completion notification first', elapsed,
+- notification: true);
+- }
+- if (event.isLast) {
+- subscription.cancel();
+- driver.results.record('completion notification last', elapsed,
+- notification: true);
+- }
+- }
+- }
+-
+- @override
+- void processResult(
+- String id, Map<String, dynamic> result, Stopwatch stopwatch) {
+- notificationId =3D result['id'];
+- this.stopwatch =3D stopwatch;
+- super.processResult(id, result, stopwatch);
+- }
+-}
+-
+-/**
+- * An [Operation] represents an action such as sending a request to the s=
erver.
+- */
+-abstract class Operation {
+- Future perform(Driver driver);
+-}
+-
+-/**
+- * A [RequestOperation] sends a [JSON] request to the server.
+- */
+-class RequestOperation extends Operation {
+- final CommonInputConverter converter;
+- final Map<String, dynamic> json;
+-
+- RequestOperation(this.converter, this.json);
+-
+- @override
+- Future perform(Driver driver) {
+- Stopwatch stopwatch =3D new Stopwatch();
+- String originalId =3D json['id'];
+- String method =3D json['method'];
+- json['clientRequestTime'] =3D new DateTime.now().millisecondsSinceEpo=
ch;
+- driver.logger.log(Level.FINE, 'Sending request: $method\n $json');
+- stopwatch.start();
+-
+- void recordResult(bool success, result) {
+- Duration elapsed =3D stopwatch.elapsed;
+- driver.results.record(method, elapsed, success: success);
+- driver.logger
+- .log(Level.FINE, 'Response received: $method : $elapsed\n $res=
ult');
+- }
+-
+- driver
+- .send(method, converter.asMap(json['params']))
+- .then((Map<String, dynamic> result) {
+- recordResult(true, result);
+- processResult(originalId, result, stopwatch);
+- }).catchError((exception) {
+- recordResult(false, exception);
+- converter.processErrorResponse(originalId, exception);
+- });
+- return null;
+- }
+-
+- void processResult(
+- String id, Map<String, dynamic> result, Stopwatch stopwatch) {
+- converter.processResponseResult(id, result);
+- }
+-}
+-
+-/**
+- * A [ResponseOperation] waits for a [JSON] response from the server.
+- */
+-class ResponseOperation extends Operation {
+- static final Duration responseTimeout =3D new Duration(seconds: 60);
+- final CommonInputConverter converter;
+- final Map<String, dynamic> requestJson;
+- final Map<String, dynamic> responseJson;
+- final Completer completer =3D new Completer();
+- Driver driver;
+-
+- ResponseOperation(this.converter, this.requestJson, this.responseJson) {
+- completer.future.then(_processResult).timeout(responseTimeout);
+- }
+-
+- @override
+- Future perform(Driver driver) {
+- this.driver =3D driver;
+- return converter.processExpectedResponse(responseJson['id'], complete=
r);
+- }
+-
+- bool _equal(expectedResult, actualResult) {
+- if (expectedResult is Map && actualResult is Map) {
+- if (expectedResult.length =3D=3D actualResult.length) {
+- return expectedResult.keys.every((key) {
+- return key =3D=3D
+- 'fileStamp' || // fileStamp values will not be the same=
across runs
+- _equal(expectedResult[key], actualResult[key]);
+- });
+- }
+- } else if (expectedResult is List && actualResult is List) {
+- if (expectedResult.length =3D=3D actualResult.length) {
+- for (int i =3D 0; i < expectedResult.length; ++i) {
+- if (!_equal(expectedResult[i], actualResult[i])) {
+- return false;
+- }
+- }
+- return true;
+- }
+- }
+- return expectedResult =3D=3D actualResult;
+- }
+-
+- /**
+- * Compare the expected and actual server response result.
+- */
+- void _processResult(actualResult) {
+- var expectedResult =3D responseJson['result'];
+- if (!_equal(expectedResult, actualResult)) {
+- var expectedError =3D responseJson['error'];
+- String format(value) {
+- String text =3D '\n$value';
+- if (text.endsWith('\n')) {
+- text =3D text.substring(0, text.length - 1);
+- }
+- return text.replaceAll('\n', '\n ');
+- }
+-
+- String message =3D 'Request:${format(requestJson)}\n'
+- 'expected result:${format(expectedResult)}\n'
+- 'expected error:${format(expectedError)}\n'
+- 'but received:${format(actualResult)}';
+- driver.results.recordUnexpectedResults(requestJson['method']);
+- converter.logOverlayContent();
+- if (expectedError =3D=3D null) {
+- converter.logger.log(Level.SEVERE, message);
+- } else {
+- throw message;
+- }
+- }
+- }
+-}
+-
+-class StartServerOperation extends Operation {
+- @override
+- Future perform(Driver driver) {
+- return driver.startServer();
+- }
+-}
+-
+-class WaitForAnalysisCompleteOperation extends Operation {
+- @override
+- Future perform(Driver driver) {
+- DateTime start =3D new DateTime.now();
+- driver.logger.log(Level.FINE, 'waiting for analysis to complete');
+- StreamSubscription<ServerStatusParams> subscription;
+- Timer timer;
+- Completer completer =3D new Completer();
+- bool isAnalyzing =3D false;
+- subscription =3D driver.onServerStatus.listen((ServerStatusParams par=
ams) {
+- if (params.analysis !=3D null) {
+- if (params.analysis.isAnalyzing) {
+- isAnalyzing =3D true;
+- } else {
+- subscription.cancel();
+- timer.cancel();
+- DateTime end =3D new DateTime.now();
+- Duration delta =3D end.difference(start);
+- driver.logger.log(Level.FINE, 'analysis complete after $delta');
+- completer.complete();
+- driver.results.record('analysis complete', delta, notification:=
true);
+- }
+- }
+- });
+- timer =3D new Timer.periodic(new Duration(milliseconds: 20), (_) {
+- if (!isAnalyzing) {
+- // TODO (danrubel) revisit this once source change requests are i=
mplemented
+- subscription.cancel();
+- timer.cancel();
+- driver.logger.log(Level.INFO, 'analysis never started');
+- completer.complete();
+- return;
+- }
+- // Timeout if no communication received within the last 60 seconds.
+- double currentTime =3D driver.server.currentElapseTime;
+- double lastTime =3D driver.server.lastCommunicationTime;
+- if (currentTime - lastTime > 60) {
+- subscription.cancel();
+- timer.cancel();
+- String message =3D 'gave up waiting for analysis to complete';
+- driver.logger.log(Level.WARNING, message);
+- completer.completeError(message);
+- }
+- });
+- return completer.future;
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart=
b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
+deleted file mode 100644
+index 79330458007..00000000000
+--- a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
++++ /dev/null
+@@ -1,161 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:args/args.dart';
+-import 'package:test/test.dart';
+-
+-import 'performance_tests.dart';
+-
+-/**
+- * Pass in the directory of the source to be analyzed as option `--source=
`,
+- * optionally specify a priority file with `--priority` and the specific
+- * test to run with `--metric`. If no test is specified, the default is
+- * `analysis`.
+- */
+-main(List<String> arguments) {
+- ArgParser parser =3D _createArgParser();
+- var args =3D parser.parse(arguments);
+- if (args[SOURCE_OPTION] =3D=3D null) {
+- print('path to source directory must be specified');
+- exit(1);
+- }
+- source =3D args[SOURCE_OPTION];
+- priorityFile =3D args[PRIORITY_FILE_OPTION];
+- List names =3D args[METRIC_NAME_OPTION] as List;
+- for (var name in names) {
+- metricNames.add(name as String);
+- }
+-
+- var test;
+-
+- if (metricNames.isEmpty) {
+- test =3D new AnalysisTimingTest();
+- } else {
+- test =3D new SubscriptionTimingTest();
+- }
+-
+- Future.wait(<Future>[test.test_timing()]);
+-}
+-
+-const DEFAULT_METRIC =3D 'analysis';
+-const METRIC_NAME_OPTION =3D 'metric';
+-const PRIORITY_FILE_OPTION =3D 'priority';
+-const SOURCE_OPTION =3D 'source';
+-
+-final metricNames =3D <String>[];
+-String priorityFile;
+-String source;
+-
+-ArgParser _createArgParser() =3D> new ArgParser()
+- ..addOption(METRIC_NAME_OPTION,
+- help: 'metric name (defaults to `analysis`)', allowMultiple: true)
+- ..addOption(SOURCE_OPTION, help: 'full path to source directory for ana=
lysis')
+- ..addOption(PRIORITY_FILE_OPTION,
+- help: '(optional) full path to a priority file');
+-
+-/**
+- * AnalysisTimingTest measures the time taken by the analysis server to f=
ully analyze
+- * the given directory. Measurement is started after setting the analysis=
root, and
+- * analysis is considered complete on receiving the `"isAnalyzing": false=
` message
+- * from the analysis server.
+- */
+-class AnalysisTimingTest extends AbstractTimingTest {
+- Future test_timing() async {
+- // Set root after subscribing to avoid empty notifications.
+- await init(source);
+-
+- setAnalysisRoot();
+- stopwatch.start();
+- await analysisFinished;
+- print('analysis completed in ${stopwatch.elapsed}');
+-
+- await shutdown();
+- }
+-}
+-
+-class Metric {
+- List<Duration> timings =3D <Duration>[];
+- Stream eventStream;
+- AnalysisService service;
+- String name;
+- Metric(this.name, this.service, this.eventStream);
+- String toString() =3D> '$name: $service, ${eventStream.runtimeType}, $t=
imings';
+-}
+-
+-/**
+- * SubscriptionTimingTest measures the time taken by the analysis server =
to return
+- * information for navigation, semantic highlighting, outline, get occurr=
ences,
+- * overrides, folding and implemented. These timings are wrt to the speci=
fied priority file
+- * - the file that is currently opened and has focus in the editor. Measu=
re the time from
+- * when the client subscribes for the notifications till there is a respo=
nse from the server.
+- * Does not wait for analysis to be complete before subscribing for notif=
ications.
+- */
+-class SubscriptionTimingTest extends AbstractTimingTest {
+- List<Metric> _metrics;
+-
+- List<Metric> get metrics =3D> _metrics ??=3D metricNames.map(getMetric)=
.toList();
+-
+- Metric getMetric(String name) {
+- switch (name) {
+- case 'folding':
+- return new Metric(name, AnalysisService.FOLDING, onAnalysisFoldin=
g);
+- case 'highlighting':
+- return new Metric(
+- name, AnalysisService.HIGHLIGHTS, onAnalysisHighlights);
+- case 'implemented':
+- return new Metric(
+- name, AnalysisService.IMPLEMENTED, onAnalysisImplemented);
+- case 'navigation':
+- return new Metric(
+- name, AnalysisService.NAVIGATION, onAnalysisNavigation);
+- case 'outline':
+- return new Metric(name, AnalysisService.OUTLINE, onAnalysisOutlin=
e);
+- case 'occurences':
+- return new Metric(
+- name, AnalysisService.OCCURRENCES, onAnalysisOccurrences);
+- case 'overrides':
+- return new Metric(name, AnalysisService.OVERRIDES, onAnalysisOver=
rides);
+- }
+- print('no metric found for $name');
+- exit(1);
+- return null; // Won't get here.
+- }
+-
+- Future test_timing() async {
+-// debugStdio();
+-
+- expect(metrics, isNotEmpty);
+- expect(priorityFile, isNotNull,
+- reason: 'A priority file must be specified for '
+- '${metrics.first.name} testing.');
+-
+- await init(source);
+- stopwatch.start();
+-
+- metrics.forEach((Metric m) =3D> m.eventStream.listen((_) {
+- m.timings.add(
+- new Duration(milliseconds: stopwatch.elapsed.inMilliseconds=
));
+- }));
+-
+- var subscriptions =3D <AnalysisService, List<String>>{};
+- metrics.forEach((Metric m) =3D> subscriptions[m.service] =3D [priorit=
yFile]);
+-
+- sendAnalysisSetSubscriptions(subscriptions);
+-
+- // Set root after subscribing to avoid empty notifications.
+- setAnalysisRoot();
+-
+- sendAnalysisSetPriorityFiles([priorityFile]);
+-
+- await analysisFinished;
+- print('analysis completed in ${stopwatch.elapsed}');
+- metrics.forEach((Metric m) =3D> print('${m.name} timings: ${m.timings=
}'));
+-
+- await shutdown();
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_angular.dart b/p=
kg/analysis_server/benchmark/perf/benchmark_angular.dart
+deleted file mode 100644
+index c93138d86ba..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmark_angular.dart
++++ /dev/null
+@@ -1,115 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'benchmark_scenario.dart';
+-import 'memory_tests.dart';
+-
+-main(List<String> args) async {
+- int length =3D args.length;
+- if (length < 1) {
+- print(
+- 'Usage: dart benchmark_local.dart path_to_np8080 (an example ngda=
rt project)'
+- ' [benchmark_id]');
+- return;
+- }
+- paths =3D new PathHolder(projectPath: args[0]);
+- String id =3D args.length >=3D 2 ? args[1] : null;
+- if (id =3D=3D null) {
+- for (String id in benchmarks.keys) {
+- BenchmarkFunction benchmark =3D benchmarks[id];
+- await benchmark(id);
+- }
+- } else {
+- BenchmarkFunction benchmark =3D benchmarks[id];
+- if (benchmark !=3D null) {
+- benchmark(id);
+- }
+- }
+-}
+-
+-const Map<String, BenchmarkFunction> benchmarks =3D
+- const <String, BenchmarkFunction>{
+- 'ng-initialAnalysis': run_ng_initialAnalysis,
+- 'ng-change-dart': run_ng_change_dart,
+- 'ng-change-html': run_ng_change_html,
+- 'ng-memory-initialAnalysis': run_ng_memory_initialAnalysis,
+-};
+-
+-PathHolder paths;
+-
+-Future run_ng_change_dart(String id) async {
+- String description =3D r'''
+-1. Open 'packages/np8080'.
+-2. Add an @Output to the class
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+- List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+- roots: [paths.packageNp8080],
+- file: paths.editorDart,
+- fileChange: new FileChange(
+- afterStr: 'showPreview =3D false;',
+- insertStr: '@Output() EventEmitter<int> myEventEmitter;'),
+- numOfRepeats: 10);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_change_html(String id) async {
+- String description =3D r'''
+-1. Open 'packages/np8080'.
+-2. Change the contents of a mustache
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+- List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+- roots: [paths.packageNp8080],
+- file: paths.editorHtml,
+- fileChange: new FileChange(
+- afterStr: 'note.lastModified', afterStrBack: 4, insertStr: 'New=
Name'),
+- numOfRepeats: 4);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_initialAnalysis(String id) async {
+- String description =3D r'''
+-1. Start server, set 'package/np8080' analysis roots.
+-2. Measure the time to finish initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+- List<int> times =3D await BenchmarkScenario.start_waitInitialAnalysis_s=
hutdown(
+- roots: [paths.packageNp8080], numOfRepeats: 5);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_ng_memory_initialAnalysis(String id) async {
+- String description =3D r'''
+-1. Start server, set 'package/np8080' as the analysis root.
+-2. Measure the memory usage after finishing initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+- List<int> sizes =3D await AnalysisServerMemoryUsageTest
+- .start_waitInitialAnalysis_shutdown(
+- roots: <String>[paths.packageNp8080], numOfRepeats: 3);
+- printMemoryResults(id, description, sizes);
+-}
+-
+-typedef BenchmarkFunction(String id);
+-
+-class PathHolder {
+- String editorHtml;
+- String editorDart;
+- String packageNp8080;
+-
+- PathHolder({String projectPath}) {
+- editorHtml =3D '$projectPath/lib/editor/editor_component.html';
+- editorDart =3D '$projectPath/lib/editor/editor_component.dart';
+- packageNp8080 =3D projectPath;
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart b/p=
kg/analysis_server/benchmark/perf/benchmark_flutter.dart
+deleted file mode 100644
+index 2e47a2b3bf8..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmark_flutter.dart
++++ /dev/null
+@@ -1,216 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-
+-import 'benchmark_scenario.dart';
+-import 'memory_tests.dart';
+-
+-main(List<String> args) async {
+- int length =3D args.length;
+- if (length < 1) {
+- print('Usage: dart benchmark_local.dart path_to_flutter_checkout'
+- ' [benchmark_id]');
+- return;
+- }
+- paths =3D new PathHolder(flutterPath: args[0]);
+- String id =3D args.length >=3D 2 ? args[1] : null;
+- if (id =3D=3D null) {
+- for (String id in benchmarks.keys) {
+- BenchmarkFunction benchmark =3D benchmarks[id];
+- await benchmark(id);
+- }
+- } else {
+- BenchmarkFunction benchmark =3D benchmarks[id];
+- if (benchmark !=3D null) {
+- benchmark(id);
+- }
+- }
+-}
+-
+-const Map<String, BenchmarkFunction> benchmarks =3D
+- const <String, BenchmarkFunction>{
+- 'flutter-initialAnalysis-1': run_flutter_initialAnalysis_1,
+- 'flutter-initialAnalysis-2': run_flutter_initialAnalysis_2,
+- 'flutter-change-1': run_flutter_change_1,
+- 'flutter-change-2': run_flutter_change_2,
+- 'flutter-completion-1': run_flutter_completion_1,
+- 'flutter-completion-2': run_flutter_completion_2,
+- 'flutter-refactoring-1': run_flutter_refactoring_1,
+- 'flutter-memory-initialAnalysis-1': run_flutter_memory_initialAnalysis_=
1,
+- 'flutter-memory-initialAnalysis-2': run_flutter_memory_initialAnalysis_=
2,
+-};
+-
+-PathHolder paths;
+-
+-Future run_flutter_change_1(String id) async {
+- String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change a method body in lib/src/painting/colors.dart
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+- List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+- roots: [paths.packageFlutter],
+- file: '${paths.packageFlutter}/lib/src/painting/colors.dart',
+- fileChange: new FileChange(
+- afterStr: 'final double h =3D hue % 360;', insertStr: 'print(12=
345);'),
+- numOfRepeats: 10);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_change_2(String id) async {
+- String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change the name of a public method in lib/src/painting/colors.dart
+-3. Measure the time to finish analysis.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+- List<int> times =3D await new BenchmarkScenario().waitAnalyze_change_an=
alyze(
+- roots: [paths.packageFlutter],
+- file: '${paths.packageFlutter}/lib/src/painting/colors.dart',
+- fileChange: new FileChange(
+- afterStr: 'withValue(dou', afterStrBack: 4, insertStr: 'NewName=
'),
+- numOfRepeats: 5);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_completion_1(String id) async {
+- String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change a method body in packages/flutter/lib/src/material/button.dart
+-3. Request code completion in this method and measure time to get results.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+- String completionMarker =3D 'print(12345);';
+- List<int> times =3D await new BenchmarkScenario()
+- .waitAnalyze_change_getCompletion(
+- roots: [paths.packageFlutter],
+- file: '${paths.packageFlutter}/lib/src/material/button.dart',
+- fileChange: new FileChange(
+- afterStr: 'Widget build(BuildContext context) {',
+- insertStr: completionMarker),
+- completeAfterStr: completionMarker,
+- numOfRepeats: 10);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_completion_2(String id) async {
+- String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change the name of a public method in lib/src/rendering/layer.dart
+-3. Request code completion in this method and measure time to get results.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+- List<int> times =3D await new BenchmarkScenario()
+- .waitAnalyze_change_getCompletion(
+- roots: [paths.packageFlutter],
+- file: '${paths.packageFlutter}/lib/src/rendering/layer.dart',
+- fileChange: new FileChange(
+- replaceWhat: 'void removeAllChildren() {',
+- replaceWith: 'void removeAllChildren2() {print(12345);paren=
t.'),
+- completeAfterStr: 'print(12345);parent.',
+- numOfRepeats: 5);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_initialAnalysis_1(String id) async {
+- String description =3D r'''
+-1. Start server, set 'hello_world' analysis root.
+-2. Measure the time to finish initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+- List<int> times =3D await BenchmarkScenario.start_waitInitialAnalysis_s=
hutdown(
+- roots: [paths.exampleHelloWorld], numOfRepeats: 5);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_initialAnalysis_2(String id) async {
+- String description =3D r'''
+-1. Start server, set 'hello_world' and 'flutter_gallery' analysis roots.
+-2. Measure the time to finish initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+- List<int> times =3D await BenchmarkScenario.start_waitInitialAnalysis_s=
hutdown(
+- roots: [paths.exampleHelloWorld, paths.exampleGallery], numOfRepeat=
s: 5);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-Future run_flutter_memory_initialAnalysis_1(String id) async {
+- String description =3D r'''
+-1. Start server, set 'packages/flutter' as the analysis root.
+-2. Measure the memory usage after finishing initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+- List<int> sizes =3D await AnalysisServerMemoryUsageTest
+- .start_waitInitialAnalysis_shutdown(
+- roots: <String>[paths.packageFlutter], numOfRepeats: 3);
+- printMemoryResults(id, description, sizes);
+-}
+-
+-Future run_flutter_memory_initialAnalysis_2(String id) async {
+- String description =3D r'''
+-1. Start server, set 'packages/flutter' and 'packages/flutter_markdown' a=
nalysis roots.
+-2. Measure the memory usage after finishing initial analysis.
+-3. Shutdown the server.
+-4. Go to (1).
+-''';
+- List<int> sizes =3D await AnalysisServerMemoryUsageTest
+- .start_waitInitialAnalysis_shutdown(
+- roots: <String>[paths.packageFlutter, paths.packageMarkdown],
+- numOfRepeats: 3);
+- printMemoryResults(id, description, sizes);
+-}
+-
+-Future run_flutter_refactoring_1(String id) async {
+- String description =3D r'''
+-1. Open 'packages/flutter'.
+-2. Change the name of a public method in lib/src/rendering/layer.dart
+-3. Request rename refactoring for `getSourcesWithFullName` and measure ti=
me to get results.
+-4. Rollback changes to the file and wait for analysis.
+-5. Go to (2).
+-''';
+- List<int> times =3D await new BenchmarkScenario()
+- .waitAnalyze_change_getRefactoring(
+- roots: [paths.packageFlutter],
+- file: '${paths.packageFlutter}/lib/src/rendering/layer.dart',
+- fileChange: new FileChange(
+- replaceWhat: 'void removeAllChildren() {',
+- replaceWith: 'void removeAllChildren2() {'),
+- refactoringAtStr: 'addToScene(ui.SceneBuilder builder',
+- refactoringKind: RefactoringKind.RENAME,
+- refactoringOptions: new RenameOptions('addToScene2'),
+- numOfRepeats: 5);
+- printBenchmarkResults(id, description, times);
+-}
+-
+-typedef BenchmarkFunction(String id);
+-
+-class PathHolder {
+- String exampleHelloWorld;
+- String exampleGallery;
+- String exampleStocks;
+- String packageFlutter;
+- String packageMarkdown;
+- String packageSprites;
+-
+- PathHolder({String flutterPath}) {
+- exampleHelloWorld =3D '$flutterPath/examples/hello_world';
+- exampleGallery =3D '$flutterPath/examples/flutter_gallery';
+- exampleStocks =3D '$flutterPath/examples/stocks';
+- packageFlutter =3D '$flutterPath/packages/flutter';
+- packageMarkdown =3D '$flutterPath/packages/flutter_markdown';
+- packageSprites =3D '$flutterPath/packages/flutter_sprites';
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmark_scenario.dart b/=
pkg/analysis_server/benchmark/perf/benchmark_scenario.dart
+deleted file mode 100644
+index 930bc0e7cd3..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmark_scenario.dart
++++ /dev/null
+@@ -1,310 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-import 'dart:math';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-import 'package:test/test.dart';
+-
+-import '../../test/integration/support/integration_tests.dart';
+-import 'performance_tests.dart';
+-
+-void printBenchmarkResults(String id, String description, List<int> times=
) {
+- int minTime =3D times.fold(1 << 20, min);
+- String now =3D new DateTime.now().toUtc().toIso8601String();
+- print('$now =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D $id');
+- print('times: $times');
+- print('min_time: $minTime');
+- print(description.trim());
+- print('--------------------');
+- print('');
+- print('');
+-}
+-
+-class BenchmarkScenario extends AbstractTimingTest {
+- /**
+- * Init.
+- * - Start Analysis Server.
+- * - Set the analysis [roots].
+- * - Wait for analysis to complete.
+- * - Make [file] the priority file.
+- *
+- * Measurement.
+- * - Change the [file] according to the [fileChange].
+- * - Record the time to finish analysis.
+- *
+- * Repeat.
+- * - Undo changes to the [file].
+- * - Repeat measurement [numOfRepeats] times.
+- */
+- Future<List<int>> waitAnalyze_change_analyze(
+- {List<String> roots,
+- String file,
+- FileChange fileChange,
+- int numOfRepeats}) async {
+- outOfTestExpect(roots, isNotNull, reason: 'roots');
+- outOfTestExpect(file, isNotNull, reason: 'file');
+- outOfTestExpect(fileChange, isNotNull, reason: 'fileChange');
+- outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+- // Initialize Analysis Server.
+- await super.setUp();
+- await subscribeToStatusNotifications();
+- // Set roots and analyze.
+- await sendAnalysisSetAnalysisRoots(roots, []);
+- await analysisFinished;
+- // Make the file priority.
+- await sendAnalysisSetPriorityFiles([file]);
+- // Repeat.
+- List<int> times =3D <int>[];
+- for (int i =3D 0; i < numOfRepeats; i++) {
+- // Update and wait for analysis.
+- Stopwatch stopwatch =3D new Stopwatch()..start();
+- await _applyFileChange(file, fileChange);
+- await analysisFinished;
+- times.add(stopwatch.elapsed.inMilliseconds);
+- // Remove the overlay and analyze.
+- await sendAnalysisUpdateContent({file: new RemoveContentOverlay()});
+- await analysisFinished;
+- }
+- // Done.
+- await shutdown();
+- return times;
+- }
+-
+- /**
+- * Init.
+- * 1. Start Analysis Server.
+- * 2. Set the analysis [roots].
+- * 3. Wait for analysis to complete.
+- * 4. Make [file] the priority file.
+- *
+- * Measurement.
+- * 5. Change the [file] according to the [fileChange].
+- * 6. Request [completeAfterStr] in the updated file content.
+- * 7. Record the time to get completion results.
+- * 8. Undo changes to the [file] and analyze.
+- * 9. Go to (5).
+- */
+- Future<List<int>> waitAnalyze_change_getCompletion(
+- {List<String> roots,
+- String file,
+- FileChange fileChange,
+- String completeAfterStr,
+- int numOfRepeats}) async {
+- outOfTestExpect(roots, isNotNull, reason: 'roots');
+- outOfTestExpect(file, isNotNull, reason: 'file');
+- outOfTestExpect(fileChange, isNotNull, reason: 'fileChange');
+- outOfTestExpect(completeAfterStr, isNotNull, reason: 'completeAfterSt=
r');
+- outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+- // Initialize Analysis Server.
+- await super.setUp();
+- await subscribeToStatusNotifications();
+- // Set roots and analyze.
+- await sendAnalysisSetAnalysisRoots(roots, []);
+- await analysisFinished;
+- // Make the file priority.
+- await sendAnalysisSetPriorityFiles([file]);
+- // Repeat.
+- List<int> times =3D <int>[];
+- for (int i =3D 0; i < numOfRepeats; i++) {
+- String updatedContent =3D await _applyFileChange(file, fileChange);
+- // Measure completion time.
+- int completionOffset =3D
+- _indexOfEnd(file, updatedContent, completeAfterStr);
+- Duration completionDuration =3D
+- await _measureCompletionTime(file, completionOffset);
+- times.add(completionDuration.inMilliseconds);
+- // Remove the overlay and analyze.
+- await sendAnalysisUpdateContent({file: new RemoveContentOverlay()});
+- await analysisFinished;
+- }
+- // Done.
+- await shutdown();
+- return times;
+- }
+-
+- /**
+- * Init.
+- * 1. Start Analysis Server.
+- * 2. Set the analysis [roots].
+- * 3. Wait for analysis to complete.
+- * 4. Make [file] the priority file.
+- *
+- * Measurement.
+- * 5. Change the [file] according to the [fileChange].
+- * 6. Request [refactoringAtStr] in the updated file content.
+- * 7. Record the time to get refactoring.
+- * 8. Undo changes to the [file] and analyze.
+- * 9. Go to (5).
+- */
+- Future<List<int>> waitAnalyze_change_getRefactoring(
+- {List<String> roots,
+- String file,
+- FileChange fileChange,
+- String refactoringAtStr,
+- RefactoringKind refactoringKind,
+- RefactoringOptions refactoringOptions,
+- int numOfRepeats}) async {
+- outOfTestExpect(roots, isNotNull, reason: 'roots');
+- outOfTestExpect(file, isNotNull, reason: 'file');
+- outOfTestExpect(fileChange, isNotNull, reason: 'fileChange');
+- outOfTestExpect(refactoringAtStr, isNotNull, reason: 'refactoringAtSt=
r');
+- outOfTestExpect(refactoringKind, isNotNull, reason: 'refactoringKind'=
);
+- outOfTestExpect(refactoringOptions, isNotNull,
+- reason: 'refactoringOptions');
+- outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+- // Initialize Analysis Server.
+- await super.setUp();
+- await subscribeToStatusNotifications();
+- // Set roots and analyze.
+- await sendAnalysisSetAnalysisRoots(roots, []);
+- await analysisFinished;
+- // Make the file priority.
+- await sendAnalysisSetPriorityFiles([file]);
+- // Repeat.
+- List<int> times =3D <int>[];
+- for (int i =3D 0; i < numOfRepeats; i++) {
+- String updatedContent =3D await _applyFileChange(file, fileChange);
+- // Measure time to get refactoring.
+- int refactoringOffset =3D _indexOf(file, updatedContent, refactorin=
gAtStr);
+- Duration refactoringDuration =3D await _measureRefactoringTime(
+- file, refactoringOffset, refactoringKind, refactoringOptions);
+- times.add(refactoringDuration.inMilliseconds);
+- // Remove the overlay and analyze.
+- await sendAnalysisUpdateContent({file: new RemoveContentOverlay()});
+- await analysisFinished;
+- }
+- // Done.
+- await shutdown();
+- return times;
+- }
+-
+- /**
+- * Compute updated content of the [file] as described by [desc], add ov=
erlay
+- * for the [file], and return the updated content.
+- */
+- Future<String> _applyFileChange(String file, FileChange desc) async {
+- String originalContent =3D _getFileContent(file);
+- String updatedContent;
+- if (desc.afterStr !=3D null) {
+- int offset =3D _indexOfEnd(file, originalContent, desc.afterStr);
+- offset -=3D desc.afterStrBack;
+- updatedContent =3D originalContent.substring(0, offset) +
+- desc.insertStr +
+- originalContent.substring(offset);
+- } else if (desc.replaceWhat !=3D null) {
+- int offset =3D _indexOf(file, originalContent, desc.replaceWhat);
+- updatedContent =3D originalContent.substring(0, offset) +
+- desc.replaceWith +
+- originalContent.substring(offset + desc.replaceWhat.length);
+- }
+- await sendAnalysisUpdateContent(
+- {file: new AddContentOverlay(updatedContent)});
+- return updatedContent;
+- }
+-
+- Future<Duration> _measureCompletionTime(String file, int offset) async {
+- Stopwatch stopwatch =3D new Stopwatch();
+- stopwatch.start();
+- Completer<Duration> completer =3D new Completer<Duration>();
+- var completionSubscription =3D onCompletionResults.listen((_) {
+- completer.complete(stopwatch.elapsed);
+- });
+- try {
+- await sendCompletionGetSuggestions(file, offset);
+- return await completer.future;
+- } finally {
+- completionSubscription.cancel();
+- }
+- }
+-
+- Future<Duration> _measureRefactoringTime(
+- String file,
+- int offset,
+- RefactoringKind refactoringKind,
+- RefactoringOptions refactoringOptions) async {
+- Stopwatch stopwatch =3D new Stopwatch();
+- stopwatch.start();
+- await sendEditGetRefactoring(refactoringKind, file, offset, 0, false,
+- options: refactoringOptions);
+- return stopwatch.elapsed;
+- }
+-
+- /**
+- * 1. Start Analysis Server.
+- * 2. Set the analysis [roots].
+- * 3. Wait for analysis to complete.
+- * 4. Record the time to finish analysis.
+- * 5. Shutdown.
+- * 6. Go to (1).
+- */
+- static Future<List<int>> start_waitInitialAnalysis_shutdown(
+- {List<String> roots, int numOfRepeats}) async {
+- outOfTestExpect(roots, isNotNull, reason: 'roots');
+- outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+- // Repeat.
+- List<int> times =3D <int>[];
+- for (int i =3D 0; i < numOfRepeats; i++) {
+- BenchmarkScenario instance =3D new BenchmarkScenario();
+- // Initialize Analysis Server.
+- await instance.setUp();
+- await instance.subscribeToStatusNotifications();
+- // Set roots and analyze.
+- Stopwatch stopwatch =3D new Stopwatch()..start();
+- await instance.sendAnalysisSetAnalysisRoots(roots, []);
+- await instance.analysisFinished;
+- times.add(stopwatch.elapsed.inMilliseconds);
+- // Stop the server.
+- await instance.shutdown();
+- }
+- return times;
+- }
+-
+- static String _getFileContent(String path) {
+- File file =3D new File(path);
+- outOfTestExpect(file.existsSync(), isTrue,
+- reason: 'File $path does not exist.');
+- return file.readAsStringSync();
+- }
+-
+- /**
+- * Return the index of [what] in [where] in the [file], fail if not fou=
nd.
+- */
+- static int _indexOf(String file, String where, String what) {
+- int index =3D where.indexOf(what);
+- outOfTestExpect(index, isNot(-1), reason: 'Cannot find |$what| in $fi=
le.');
+- return index;
+- }
+-
+- /**
+- * Return the end index if [what] in [where] in the [file], fail if not=
found.
+- */
+- static int _indexOfEnd(String file, String where, String what) {
+- return _indexOf(file, where, what) + what.length;
+- }
+-}
+-
+-class FileChange {
+- final String afterStr;
+- final int afterStrBack;
+- final String insertStr;
+- final String replaceWhat;
+- final String replaceWith;
+-
+- FileChange(
+- {this.afterStr,
+- this.afterStrBack: 0,
+- this.insertStr,
+- this.replaceWhat,
+- this.replaceWith}) {
+- if (afterStr !=3D null) {
+- outOfTestExpect(insertStr, isNotNull, reason: 'insertStr');
+- } else if (replaceWhat !=3D null) {
+- outOfTestExpect(replaceWith, isNotNull, reason: 'replaceWith');
+- }
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart b/pkg=
/analysis_server/benchmark/perf/benchmarks_impl.dart
+deleted file mode 100644
+index 9a42862f084..00000000000
+--- a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
++++ /dev/null
+@@ -1,187 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:analysis_server/src/protocol_server.dart';
+-import 'package:path/path.dart' as path;
+-
+-import '../../test/integration/support/integration_tests.dart';
+-import '../benchmarks.dart';
+-import 'memory_tests.dart';
+-
+-/// benchmarks:
+-/// - analysis-server-cold-analysis
+-/// - analysis-server-cold-memory
+-class ColdAnalysisBenchmark extends Benchmark {
+- ColdAnalysisBenchmark()
+- : super(
+- 'analysis-server-cold',
+- 'Analysis server benchmarks of a large project on start-up, n=
o '
+- 'existing driver cache.',
+- kind: 'group');
+-
+- int get maxIterations =3D> 3;
+-
+- @override
+- Future<BenchMarkResult> run(
+- {bool quick: false, bool previewDart2: false}) async {
+- if (!quick) {
+- deleteServerCache();
+- }
+-
+- Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+- AnalysisServerMemoryUsageTest test =3D new AnalysisServerMemoryUsageT=
est();
+- await test.setUp(previewDart2: previewDart2);
+- await test.subscribeToStatusNotifications();
+- await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick)=
, []);
+- await test.analysisFinished;
+-
+- stopwatch.stop();
+- int usedBytes =3D test.getMemoryUsage();
+-
+- CompoundBenchMarkResult result =3D new CompoundBenchMarkResult(id);
+- result.add('analysis',
+- new BenchMarkResult('micros', stopwatch.elapsedMicroseconds));
+- result.add('memory', new BenchMarkResult('bytes', usedBytes));
+-
+- await test.shutdown();
+-
+- return result;
+- }
+-}
+-
+-/// benchmarks:
+-/// - analysis-server-warm-analysis
+-/// - analysis-server-warm-memory
+-/// - analysis-server-edit
+-/// - analysis-server-completion
+-class AnalysisBenchmark extends Benchmark {
+- AnalysisBenchmark()
+- : super(
+- 'analysis-server',
+- 'Analysis server benchmarks of a large project, with an exist=
ing '
+- 'driver cache.',
+- kind: 'group');
+-
+- @override
+- Future<BenchMarkResult> run(
+- {bool quick: false, bool previewDart2: false}) async {
+- Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+- AnalysisServerMemoryUsageTest test =3D new AnalysisServerMemoryUsageT=
est();
+- await test.setUp(previewDart2: previewDart2);
+- await test.subscribeToStatusNotifications();
+- await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick)=
, []);
+- await test.analysisFinished;
+-
+- stopwatch.stop();
+- int usedBytes =3D test.getMemoryUsage();
+-
+- CompoundBenchMarkResult result =3D new CompoundBenchMarkResult(id);
+- result.add('warm-analysis',
+- new BenchMarkResult('micros', stopwatch.elapsedMicroseconds));
+- result.add('warm-memory', new BenchMarkResult('bytes', usedBytes));
+-
+- if (!quick) {
+- // change timing
+- final int editMicros =3D await _calcEditTiming(test);
+- result.add('edit', new BenchMarkResult('micros', editMicros));
+-
+- // code completion
+- final int completionMicros =3D await _calcCompletionTiming(test);
+- result.add('completion', new BenchMarkResult('micros', completionMi=
cros));
+- }
+-
+- await test.shutdown();
+-
+- return result;
+- }
+-
+- Future<int> _calcEditTiming(
+- AbstractAnalysisServerIntegrationTest test) async {
+- const int kGroupCount =3D 5;
+-
+- final String filePath =3D
+- path.join(analysisServerSrcPath, 'lib/src/analysis_server.dart');
+- String contents =3D new File(filePath).readAsStringSync();
+-
+- await test
+- .sendAnalysisUpdateContent({filePath: new AddContentOverlay(conte=
nts)});
+-
+- final Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+- for (int i =3D 0; i < kGroupCount; i++) {
+- int startIndex =3D i * (contents.length ~/ (kGroupCount + 2));
+- int index =3D contents.indexOf(';', startIndex);
+- contents =3D contents.substring(0, index + 1) +
+- ' ' +
+- contents.substring(index + 1);
+- test.sendAnalysisUpdateContent(
+- {filePath: new AddContentOverlay(contents)});
+- await test.analysisFinished;
+- }
+-
+- stopwatch.stop();
+-
+- return stopwatch.elapsedMicroseconds ~/ kGroupCount;
+- }
+-
+- Future<int> _calcCompletionTiming(
+- AbstractAnalysisServerIntegrationTest test) async {
+- const int kGroupCount =3D 10;
+-
+- final String filePath =3D
+- path.join(analysisServerSrcPath, 'lib/src/analysis_server.dart');
+- String contents =3D new File(filePath).readAsStringSync();
+-
+- await test
+- .sendAnalysisUpdateContent({filePath: new AddContentOverlay(conte=
nts)});
+-
+- int completionCount =3D 0;
+- final Stopwatch stopwatch =3D new Stopwatch()..start();
+-
+- Future _complete(int offset) async {
+- CompletionGetSuggestionsResult result =3D
+- await test.sendCompletionGetSuggestions(filePath, offset);
+-
+- Future<CompletionResultsParams> future =3D test.onCompletionResults
+- .where((CompletionResultsParams params) =3D>
+- params.id =3D=3D result.id && params.isLast)
+- .first;
+- await future;
+-
+- completionCount++;
+- }
+-
+- for (int i =3D 0; i < kGroupCount; i++) {
+- int startIndex =3D i * (contents.length ~/ (kGroupCount + 2));
+- // Look for a line with a period in it that ends with a semi-colon.
+- int index =3D
+- contents.indexOf(new RegExp(r'\..*;$', multiLine: true), startI=
ndex);
+-
+- await _complete(index - 10);
+- await _complete(index - 1);
+- await _complete(index);
+- await _complete(index + 1);
+- await _complete(index + 10);
+-
+- if (i + 1 < kGroupCount) {
+- // mutate
+- index =3D contents.indexOf(';', index);
+- contents =3D contents.substring(0, index + 1) +
+- ' ' +
+- contents.substring(index + 1);
+- await test.sendAnalysisUpdateContent(
+- {filePath: new AddContentOverlay(contents)});
+- }
+- }
+-
+- stopwatch.stop();
+-
+- return stopwatch.elapsedMicroseconds ~/ completionCount;
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/completion_timing_tests.da=
rt b/pkg/analysis_server/benchmark/perf/completion_timing_tests.dart
+deleted file mode 100644
+index 0a1204195b9..00000000000
+--- a/pkg/analysis_server/benchmark/perf/completion_timing_tests.dart
++++ /dev/null
+@@ -1,85 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:args/args.dart';
+-import 'package:test/test.dart';
+-
+-import 'performance_tests.dart';
+-
+-const COMPLETION_OFFSET =3D 'offset';
+-const PRIORITY_FILE_OPTION =3D 'priority';
+-const SOURCE_OPTION =3D 'source';
+-
+-/**
+- * Pass in the directory of the source to be analyzed as option `--source=
`,
+- * specify a priority file with `--priority` and an offset for completions
+- * with a `--offset`.
+- */
+-main(List<String> arguments) async {
+- ArgParser parser =3D _createArgParser();
+- var args =3D parser.parse(arguments);
+- if (args[SOURCE_OPTION] =3D=3D null) {
+- print('path to source directory must be specified');
+- exit(1);
+- }
+-
+- int offset =3D int.parse(args[COMPLETION_OFFSET]);
+- String priorityFile =3D args[PRIORITY_FILE_OPTION];
+- String source =3D args[SOURCE_OPTION];
+-
+- CompletionTimingTest test =3D
+- new CompletionTimingTest(offset, priorityFile, source);
+- await test.test_timing();
+-}
+-
+-ArgParser _createArgParser() =3D> new ArgParser()
+- ..addOption(SOURCE_OPTION, help: 'full path to source directory for ana=
lysis')
+- ..addOption(PRIORITY_FILE_OPTION, help: 'full path to a priority file')
+- ..addOption(COMPLETION_OFFSET, help: 'offset in file for code completio=
ns');
+-
+-/**
+- * CompletionTimingTest measures the time taken for the analysis server t=
o respond with
+- * completion suggestions for a given file and offset. The time measured =
starts when
+- * the analysis root is set and is done when the completion suggestions a=
re received
+- * from the server. The test does not wait for analysis to be complete be=
fore asking for
+- * completions.
+- */
+-class CompletionTimingTest extends AbstractTimingTest {
+- final int offset;
+- final String priorityFile;
+- final String source;
+-
+- List<Duration> timings =3D <Duration>[];
+-
+- CompletionTimingTest(this.offset, this.priorityFile, this.source);
+-
+- Future test_timing() async {
+-// debugStdio();
+-
+- expect(priorityFile, isNotNull,
+- reason: 'A priority file must be specified for completion testing=
.');
+- expect(offset, isNotNull,
+- reason: 'An offset must be specified for completion testing.');
+-
+- await init(source);
+- stopwatch.start();
+-
+- onCompletionResults.listen((_) {
+- timings.add(new Duration(milliseconds: stopwatch.elapsed.inMillisec=
onds));
+- });
+-
+- setAnalysisRoot();
+- sendAnalysisSetPriorityFiles([priorityFile]);
+- sendCompletionGetSuggestions(priorityFile, offset);
+-
+- await analysisFinished;
+-
+- print('analysis completed in ${stopwatch.elapsed}');
+- print('completion received at : $timings');
+- await shutdown();
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/memory_tests.dart b/pkg/an=
alysis_server/benchmark/perf/memory_tests.dart
+deleted file mode 100644
+index 1971bf575ec..00000000000
+--- a/pkg/analysis_server/benchmark/perf/memory_tests.dart
++++ /dev/null
+@@ -1,133 +0,0 @@
+-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:convert';
+-import 'dart:io';
+-import 'dart:math';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:test/test.dart';
+-
+-import '../../test/integration/support/integration_tests.dart';
+-
+-void printMemoryResults(String id, String description, List<int> sizes) {
+- int minMemory =3D sizes.fold(sizes.first, min);
+- int maxMemory =3D sizes.fold(sizes.first, max);
+- String now =3D new DateTime.now().toUtc().toIso8601String();
+- print('$now =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D $id');
+- print('memory: $sizes');
+- print('min_memory: $minMemory');
+- print('max_memory: $maxMemory');
+- print(description.trim());
+- print('--------------------');
+- print('');
+- print('');
+-}
+-
+-/**
+- * Base class for analysis server memory usage tests.
+- */
+-class AnalysisServerMemoryUsageTest
+- extends AbstractAnalysisServerIntegrationTest {
+- static const int vmServicePort =3D 12345;
+-
+- int getMemoryUsage() {
+- ProcessResult result =3D _run('curl', <String>[
+- 'localhost:$vmServicePort/_getAllocationProfile\?isolateId=3Disolat=
es/root\&gc=3Dfull'
+- ]);
+- Map json =3D JSON.decode(result.stdout);
+- Map heaps =3D json['result']['heaps'];
+- int newSpace =3D heaps['new']['used'];
+- int oldSpace =3D heaps['old']['used'];
+- return newSpace + oldSpace;
+- }
+-
+- /**
+- * Send the server an 'analysis.setAnalysisRoots' command directing it =
to
+- * analyze [sourceDirectory].
+- */
+- Future setAnalysisRoot() =3D>
+- sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
+-
+- /**
+- * The server is automatically started before every test.
+- */
+- @override
+- Future setUp({bool previewDart2: false}) {
+- onAnalysisErrors.listen((AnalysisErrorsParams params) {
+- currentAnalysisErrors[params.file] =3D params.errors;
+- });
+- onServerError.listen((ServerErrorParams params) {
+- // A server error should never happen during an integration test.
+- fail('${params.message}\n${params.stackTrace}');
+- });
+- Completer serverConnected =3D new Completer();
+- onServerConnected.listen((_) {
+- outOfTestExpect(serverConnected.isCompleted, isFalse);
+- serverConnected.complete();
+- });
+- return startServer(
+- servicesPort: vmServicePort,
+- previewDart2: previewDart2,
+- ).then((_) {
+- server.listenToOutput(dispatchNotification);
+- server.exitCode.then((_) {
+- skipShutdown =3D true;
+- });
+- return serverConnected.future;
+- });
+- }
+-
+- /**
+- * After every test, the server is stopped.
+- */
+- Future shutdown() async =3D> await shutdownIfNeeded();
+-
+- /**
+- * Enable [ServerService.STATUS] notifications so that [analysisFinishe=
d]
+- * can be used.
+- */
+- Future subscribeToStatusNotifications() async {
+- await sendServerSetSubscriptions([ServerService.STATUS]);
+- }
+-
+- /**
+- * Synchronously run the given [executable] with the given [arguments].=
Return
+- * the result of running the process.
+- */
+- ProcessResult _run(String executable, List<String> arguments) {
+- return Process.runSync(executable, arguments,
+- stderrEncoding: UTF8, stdoutEncoding: UTF8);
+- }
+-
+- /**
+- * 1. Start Analysis Server.
+- * 2. Set the analysis [roots].
+- * 3. Wait for analysis to complete.
+- * 4. Record the heap size after analysis is finished.
+- * 5. Shutdown.
+- * 6. Go to (1).
+- */
+- static Future<List<int>> start_waitInitialAnalysis_shutdown(
+- {List<String> roots, int numOfRepeats}) async {
+- outOfTestExpect(roots, isNotNull, reason: 'roots');
+- outOfTestExpect(numOfRepeats, isNotNull, reason: 'numOfRepeats');
+- // Repeat.
+- List<int> sizes =3D <int>[];
+- for (int i =3D 0; i < numOfRepeats; i++) {
+- AnalysisServerMemoryUsageTest test =3D new AnalysisServerMemoryUsag=
eTest();
+- // Initialize Analysis Server.
+- await test.setUp();
+- await test.subscribeToStatusNotifications();
+- // Set roots and analyze.
+- await test.sendAnalysisSetAnalysisRoots(roots, []);
+- await test.analysisFinished;
+- sizes.add(test.getMemoryUsage());
+- // Stop the server.
+- await test.shutdown();
+- }
+- return sizes;
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/perf/performance_tests.dart b/p=
kg/analysis_server/benchmark/perf/performance_tests.dart
+deleted file mode 100644
+index 540678ca652..00000000000
+--- a/pkg/analysis_server/benchmark/perf/performance_tests.dart
++++ /dev/null
+@@ -1,76 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-import 'dart:io';
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:test/test.dart';
+-
+-import '../../test/integration/support/integration_tests.dart';
+-
+-/**
+- * Base class for analysis server performance tests.
+- */
+-abstract class AbstractAnalysisServerPerformanceTest
+- extends AbstractAnalysisServerIntegrationTest {
+- /**
+- * Stopwatch for timing results;
+- */
+- Stopwatch stopwatch =3D new Stopwatch();
+-
+- /**
+- * Send the server an 'analysis.setAnalysisRoots' command directing it =
to
+- * analyze [sourceDirectory].
+- */
+- Future setAnalysisRoot() =3D>
+- sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
+-
+- /**
+- * The server is automatically started before every test.
+- */
+- @override
+- Future setUp() {
+- onAnalysisErrors.listen((AnalysisErrorsParams params) {
+- currentAnalysisErrors[params.file] =3D params.errors;
+- });
+- onServerError.listen((ServerErrorParams params) {
+- // A server error should never happen during an integration test.
+- fail('${params.message}\n${params.stackTrace}');
+- });
+- Completer serverConnected =3D new Completer();
+- onServerConnected.listen((_) {
+- outOfTestExpect(serverConnected.isCompleted, isFalse);
+- serverConnected.complete();
+- });
+- return startServer(checked: false).then((_) {
+- server.listenToOutput(dispatchNotification);
+- server.exitCode.then((_) {
+- skipShutdown =3D true;
+- });
+- return serverConnected.future;
+- });
+- }
+-
+- /**
+- * After every test, the server is stopped.
+- */
+- Future shutdown() async =3D> await shutdownIfNeeded();
+-
+- /**
+- * Enable [ServerService.STATUS] notifications so that [analysisFinishe=
d]
+- * can be used.
+- */
+- Future subscribeToStatusNotifications() async {
+- await sendServerSetSubscriptions([ServerService.STATUS]);
+- }
+-}
+-
+-class AbstractTimingTest extends AbstractAnalysisServerPerformanceTest {
+- Future init(String source) async {
+- await super.setUp();
+- sourceDirectory =3D new Directory(source);
+- return subscribeToStatusNotifications();
+- }
+-}
+diff --git a/pkg/analysis_server/benchmark/readme.md b/pkg/analysis_server=
/benchmark/readme.md
+deleted file mode 100644
+index 24eb7ece492..00000000000
+--- a/pkg/analysis_server/benchmark/readme.md
++++ /dev/null
+@@ -1,35 +0,0 @@
+-# Analysis Server Benchmarks
+-
+-## How to run the benchmarks
+-
+-To see a list of all available benchmarks, run:
+-
+-```
+-dart benchmark/benchmarks.dart list
+-```
+-
+-To run an individual benchmark, run:
+-
+-```
+-dart benchmark/benchmarks.dart run <benchmark-id>
+-```
+-
+-## How they're tested
+-
+-In order to make sure that our benchmarks don't regress in terms of their
+-ability to run, we create one unit test per benchmark, and run those tests
+-as part of our normal CI test suite.
+-
+-To save time on the CI, we only run one iteration of each benchmark
+-(`--repeat=3D1`), and we run the benchmark on a smaller data set (`--quic=
k`).
+-
+-See `test/benchmark_test.dart`.
+-
+-## To add a new benchmark
+-
+-Register the new benchmark in the `main()` method of benchmark/benchmarks=
.dart.
+-
+-## On the bots
+-
+-Our benchmarks run on a continuous performance testing system. Currently,=
the
+-benchmarks need to be manually registered ahead of time.
+diff --git a/pkg/analysis_server/bin/server.dart b/pkg/analysis_server/bin=
/server.dart
+deleted file mode 100644
+index f0d075f6f8d..00000000000
+--- a/pkg/analysis_server/bin/server.dart
++++ /dev/null
+@@ -1,13 +0,0 @@
+-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'package:analysis_server/starter.dart';
+-
+-/**
+- * Create and run an analysis server.
+- */
+-void main(List<String> args) {
+- ServerStarter starter =3D new ServerStarter();
+- starter.start(args);
+-}
+diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/ap=
i.html
+deleted file mode 100644
+index 6528f6d2a99..00000000000
+--- a/pkg/analysis_server/doc/api.html
++++ /dev/null
+@@ -1,4725 +0,0 @@
+-<!DOCTYPE html><html><head>
+- <meta charset=3D"UTF-8">
+- <title>Analysis Server API Specification</title>
+-<link rel=3D"stylesheet" href=3D"https://fonts.googleapis.com/css?family=
=3DSource+Code+Pro|Roboto:500,400italic,300,400" type=3D"text/css"><style>b=
ody {
+- font-family: 'Roboto', sans-serif;
+- max-width: 800px;
+- margin: 0 auto;
+- padding: 0 16px;
+- font-size: 16px;
+- line-height: 1.5;
+- color: #111;
+- background-color: #fdfdfd;
+- font-weight: 300;
+- -webkit-font-smoothing: auto;
+-}
+-
+-h2, h3, h4, h5 {
+- margin-bottom: 0;
+-}
+-
+-h2.domain {
+- border-bottom: 1px solid rgb(200, 200, 200);
+- margin-bottom: 0.5em;
+-}
+-
+-h4 {
+- font-size: 18px;
+-}
+-
+-h5 {
+- font-size: 16px;
+-}
+-
+-p {
+- margin-top: 0;
+-}
+-
+-pre {
+- margin: 0;
+- font-family: 'Source Code Pro', monospace;
+- font-size: 15px;
+-}
+-
+-div.box {
+- background-color: rgb(240, 245, 240);
+- border-radius: 4px;
+- padding: 4px 12px;
+- margin: 16px 0;
+-}
+-
+-div.hangingIndent {
+- padding-left: 3em;
+- text-indent: -3em;
+-}
+-
+-dl dt {
+- font-weight: bold;
+-}
+-
+-dl dd {
+- margin-left: 16px;
+-}
+-
+-dt {
+- margin-top: 1em;
+-}
+-
+-dt.notification {
+- font-weight: bold;
+-}
+-
+-dt.refactoring {
+- font-weight: bold;
+-}
+-
+-dt.request {
+- font-weight: bold;
+-}
+-
+-dt.typeDefinition {
+- font-weight: bold;
+-}
+-
+-a {
+- text-decoration: none;
+-}
+-
+-a:focus, a:hover {
+- text-decoration: underline;
+-}
+-
+-.deprecated {
+- text-decoration: line-through;
+-}
+-
+-/* Styles for index */
+-
+-.subindex ul {
+- padding-left: 0;
+- margin-left: 0;
+-
+- -webkit-margin-before: 0;
+- -webkit-margin-start: 0;
+- -webkit-padding-start: 0;
+-
+- list-style-type: none;
+-}
+-</style></head>
+-<body>
+-<h1>Analysis Server API Specification</h1>
+-<h1 style=3D"color:#999999">Version
+- 1.18.4
+-</h1>
+-<p>
+- This document contains a specification of the API provided by the
+- analysis server. The API in this document is currently under
+- development. Changes to the API will be accompanied by an update to the
+- protocol version number according to the principles of semantic
+- versioning (<a href=3D"http://semver.org/">semver.org</a>).
+-</p>
+-<h2>Overview</h2>
+-<p>
+- The analysis server API is a bi-directional client-server
+- API. The API is independent of the transport mechanism used, but
+- is heavily influenced by a model in which sockets or character
+- streams are used to transport JSON-RPC encoded information.
+-</p>
+-<h3>Transport Mechanism</h3>
+-<p>
+- The characters passed to the server are expected to be encoded
+- using UTF-8.
+-</p>
+-<p>
+- When character streams are used as the transport, messages are
+- delineated by newlines. This means, in particular, that the JSON
+- encoding process must not introduce newlines within a
+- message. Note however that newlines are used in this document
+- for readability.
+-</p>
+-<p>
+- It is the client's responsibility to read output from the server to
+- avoid its blocking.
+-</p>
+-<p>
+- To ease interoperability with Lisp-based clients (which may not
+- be able to easily distinguish between empty lists, empty maps,
+- and null), client-to-server communication is allowed to replace
+- any instance of "<tt>{}</tt>" or "<tt>[]</tt>" with null. The
+- server will always properly represent empty lists as
+- "<tt>[]</tt>" and empty maps as "<tt>{}</tt>".
+-</p>
+-<h3>Communication Structure</h3>
+-<p>
+- Clients can make a request of the server and the server will
+- provide a response for each request that it receives. While many
+- of the requests that can be made by a client are informational
+- in nature, we have chosen to always return a response so that
+- clients can know whether the request was received and was
+- correct.
+-</p>
+-<p>
+- There is no guarantee concerning the order in which responses
+- will be returned, but there is a guarantee that the server will
+- process requests in the order in which they are sent as long as
+- the transport mechanism also makes this guarantee. Responses can
+- be returned in an order that is different from the order in
+- which the requests were received because some requests take
+- longer to process than others.
+-</p>
+-<p>
+- Every request is required to have two fields and may have two
+- additional optional fields. The first required field is the =E2=80=98id=
=E2=80=99
+- field, which is only used by the server to associate a response
+- with the request that generated the response. The second
+- required field is the =E2=80=98method=E2=80=99 field, which is used to =
determine
+- what the server is being requested to do. One optional field is
+- the =E2=80=98params=E2=80=99 field, whose structure is dependent on the=
method
+- being requested. The structure of this field is described with
+- each request for which it is required. The other optional field
+- is the 'clientRequestTime' field, which is a number indicating
+- the time at which the client made the request (milliseconds
+- since epoch). Providing clientRequestTime helps us track
+- how responsive analysis server is to client requests
+- and better address any issues that occur.
+-</p>
+-<p>
+- Every response has up to three fields. The first field is the
+- =E2=80=98id=E2=80=99 field, which is always present and whose value is =
the
+- identifier that was passed to the request that generated the
+- response. The second field is the =E2=80=98error=E2=80=99 field, which =
is only
+- present if an error was encountered while processing the
+- request. The third field is the =E2=80=98result=E2=80=99 field, whose s=
tructure
+- is dependent on the method being responded to, and is described
+- with each request that will produce it.
+-</p>
+-<p>
+- The server can also communicate to the clients by sending a
+- notification. The purpose of these notifications is to provide
+- information to clients as it becomes available rather than to
+- require that clients poll for it. Unless explicitly stated, all
+- notifications are designed to return the complete information
+- available at the time the notification is sent; clients are not
+- required to update previously communicated
+- results. Consequently, the server can and should return partial
+- results before all results are available. For example, the
+- syntactic errors for a file can be returned as soon as the
+- syntactic analysis is complete, and both syntactic and semantic
+- errors can be returned together at a later time.
+-</p>
+-<p>
+- Each notification has two fields. The first field is the =E2=80=98event=
=E2=80=99
+- field, which identifies the kind of notification. The second
+- field is the =E2=80=98params=E2=80=99 field, whose structure is depende=
nt on the
+- kind of notification being sent. The structure of this field is
+- described with each notification.
+-</p>
+-<p>
+- In order to be backward compatible, clients should ignore fields that w=
ere
+- not specified in the version of the API on which they were based. Clien=
ts
+- should also use the server.getVersion request to test that the version =
of
+- the server supports an API before using it.
+-</p>
+-<h3>Eventual Consistency</h3>
+-<p>
+- The analysis server satisfies requests under the principle of
+- <a href=3D"https://en.wikipedia.org/wiki/Eventual_consistency">eventual
+- consistency</a>.
+- That is, in some cases it may return responses with the currently avail=
able
+- results while it's catching up with unprocessed changes.
+-</p>
+-<h3>Domains</h3>
+-<p>
+- For convenience, the API is divided into domains. Each domain is specif=
ied
+- in a separate section below. The specifications of the API=E2=80=99s re=
fer to data
+- structures beyond the standard JSON primitives. These data structures a=
re
+- documented in the section titled <a href=3D"#types">Types</a>.
+-</p>
+-
+-<p><a href=3D"#domain_server">Server</a></p><ul><li><a href=3D"#request_s=
erver.getVersion">server.getVersion</a></li>
+-<li><a href=3D"#request_server.shutdown">server.shutdown</a></li>
+-<li><a href=3D"#request_server.setSubscriptions">server.setSubscriptions<=
/a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_analysis">Analysis</a></p><ul><li><a href=3D"#reque=
st_analysis.getErrors">analysis.getErrors</a></li>
+-<li><a href=3D"#request_analysis.getHover">analysis.getHover</a></li>
+-<li><a href=3D"#request_analysis.getLibraryDependencies">analysis.getLibr=
aryDependencies</a></li>
+-<li><a href=3D"#request_analysis.getNavigation">analysis.getNavigation</a=
></li>
+-<li><a href=3D"#request_analysis.getReachableSources">analysis.getReachab=
leSources</a></li>
+-<li><a href=3D"#request_analysis.reanalyze">analysis.reanalyze</a></li>
+-<li><a href=3D"#request_analysis.setAnalysisRoots">analysis.setAnalysisRo=
ots</a></li>
+-<li><a href=3D"#request_analysis.setGeneralSubscriptions">analysis.setGen=
eralSubscriptions</a></li>
+-<li><a href=3D"#request_analysis.setPriorityFiles">analysis.setPriorityFi=
les</a></li>
+-<li><a href=3D"#request_analysis.setSubscriptions">analysis.setSubscripti=
ons</a></li>
+-<li><a href=3D"#request_analysis.updateContent">analysis.updateContent</a=
></li>
+-<li><a class=3D"deprecated" href=3D"#request_analysis.updateOptions">anal=
ysis.updateOptions</a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_completion">Completion</a></p><ul><li><a href=3D"#r=
equest_completion.getSuggestions">completion.getSuggestions</a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_search">Search</a></p><ul><li><a href=3D"#request_s=
earch.findElementReferences">search.findElementReferences</a></li>
+-<li><a href=3D"#request_search.findMemberDeclarations">search.findMemberD=
eclarations</a></li>
+-<li><a href=3D"#request_search.findMemberReferences">search.findMemberRef=
erences</a></li>
+-<li><a href=3D"#request_search.findTopLevelDeclarations">search.findTopLe=
velDeclarations</a></li>
+-<li><a href=3D"#request_search.getTypeHierarchy">search.getTypeHierarchy<=
/a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_edit">Edit</a></p><ul><li><a href=3D"#request_edit.=
format">edit.format</a></li>
+-<li><a href=3D"#request_edit.getAssists">edit.getAssists</a></li>
+-<li><a href=3D"#request_edit.getAvailableRefactorings">edit.getAvailableR=
efactorings</a></li>
+-<li><a href=3D"#request_edit.getFixes">edit.getFixes</a></li>
+-<li><a href=3D"#request_edit.getRefactoring">edit.getRefactoring</a></li>
+-<li><a href=3D"#request_edit.sortMembers">edit.sortMembers</a></li>
+-<li><a href=3D"#request_edit.organizeDirectives">edit.organizeDirectives<=
/a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_execution">Execution</a></p><ul><li><a href=3D"#req=
uest_execution.createContext">execution.createContext</a></li>
+-<li><a href=3D"#request_execution.deleteContext">execution.deleteContext<=
/a></li>
+-<li><a href=3D"#request_execution.mapUri">execution.mapUri</a></li>
+-<li><a class=3D"deprecated" href=3D"#request_execution.setSubscriptions">=
execution.setSubscriptions</a></li>
+-</ul>
+-
+-<p><a href=3D"#domain_diagnostic">Diagnostic</a></p><ul><li><a href=3D"#r=
equest_diagnostic.getDiagnostics">diagnostic.getDiagnostics</a></li>
+-<li><a href=3D"#request_diagnostic.getServerPort">diagnostic.getServerPor=
t</a></li>
+-</ul>
+-
+-<h3>Command-line Arguments</h3>
+-<p>
+- The command-line arguments that can be passed to the server.
+-</p>
+-<h4>Options</h4>
+-<blockquote>
+- <dl>
+- <dt>--client-id</dt>
+- <dd>
+- <p>
+- Specifies an identifier associated with the client. Used when
+- generating error reports.
+- </p>
+- <p>
+- Clients are strongly encouraged to provide this information in
+- order to improve the quality of information that can be provided
+- to them.
+- </p>
+- </dd>
+- </dl>
+- <dl>
+- <dt>--client-version</dt>
+- <dd>
+- <p>
+- Specifies the version of the client that is communicating with
+- the server. Used when generating error reports.
+- </p>
+- <p>
+- Clients are strongly encouraged to provide this information in
+- order to improve the quality of information that can be provided
+- to them.
+- </p>
+- </dd>
+- </dl>
+- <dl>
+- <dt class=3D"deprecated">--no-error-notification</dt>
+- <dd>
+- <p><b>Deprecated:</b> clients should no longer pass this option in<=
/p>
+- Disable notifications about errors (see analysis.error). If this
+- flag is not specified then notifications will be sent for all
+- errors produced for all files in the actual analysis roots.
+- </dd>
+- </dl>
+- <dl>
+- <dt class=3D"deprecated">--no-index</dt>
+- <dd>
+- <p><b>Deprecated:</b> clients should no longer pass this option in<=
/p>
+- This flag used to disable the server from generating an index, but =
now
+- it has no effect.
+- </dd>
+- </dl>
+- <dl>
+- <dt class=3D"deprecated">--file-read-mode</dt>
+- <dd>
+- <p><b>Deprecated:</b> clients should no longer pass this option in<=
/p>
+- An enumeration of the ways files can be read from disk. Some clients
+- normalize end of line characters which would make the file offset a=
nd
+- range information incorrect. The default option is <tt>as-is</tt>, =
but
+- can also be set to <tt>normalize-eol-always</tt>. The default option
+- (<tt>as-is</tt>) reads files as they are on disk. The
+- <tt>normalize-eol-always</tt> option does the following:
+- <ul>
+- <li>'\r\n' is converted to '\n';</li>
+- <li>'\r' by itself is converted to '\n';</li>
+- <li>this happens regardless of the OS editor is running on.</li>
+- </ul>
+- </dd>
+- </dl>
+-</blockquote>
+-<h1>Domains</h1>
+-<h2 class=3D"domain"><a name=3D"domain_server">server domain</a></h2>
+- <p>
+- The server domain contains API=E2=80=99s related to the execution of
+- the server.
+- </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_server.getV=
ersion">server.getVersion</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "server.getVersion"
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>version</b>": String
+- }
+-}</pre></div>
+- <p>Return the version number of the analysis server.</p>
+-=20=20=20=20
+- <h4>returns:</h4><dl><dt class=3D"field"><b>version: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>The version number of the analysis server.</p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_server.shut=
down">server.shutdown</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "server.shutdown"
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Cleanly shutdown the analysis server. Requests that are
+- received after this request will not be processed. Requests
+- that were received before this request, but for which a
+- response has not yet been sent, will not be responded to. No
+- further responses or notifications will be sent after the
+- response to this request has been sent.
+- </p>
+- </dd><dt class=3D"request"><a name=3D"request_server.setSubscriptions">=
server.setSubscriptions</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "server.setSubscriptions"
+- "params": {
+- "<b>subscriptions</b>": List<<a href=3D"#type_ServerService">Serve=
rService</a>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Subscribe for services. All previous subscriptions are
+- replaced by the given set of services.
+- </p>
+- <p>
+- It is an error if any of the elements in the list are not
+- valid services. If there is an error, then the current
+- subscriptions will remain unchanged.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: List<<=
a href=3D"#type_ServerService">ServerService</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>A list of the services being subscribed to.</p>
+- </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_server.connected">server.connected</a></dt><d=
d><div class=3D"box"><pre>notification: {
+- "event": "server.connected"
+- "params": {
+- "<b>version</b>": String
+- "<b>pid</b>": int
+- "<b>sessionId</b>": <span style=3D"color:#999999">optional</span> Str=
ing
+- }
+-}</pre></div>
+- <p>
+- Reports that the server is running. This notification is
+- issued once after the server has started running but before
+- any requests are processed to let the client know that it
+- started correctly.
+- </p>
+- <p>
+- It is not possible to subscribe to or unsubscribe from this
+- notification.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>version: String</b></dt>=
<dd>
+-=20=20=20=20=20=20=20=20
+- <p>The version number of the analysis server.</p>
+- </dd><dt class=3D"field"><b>pid: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>The process id of the analysis server process.</p>
+- </dd><dt class=3D"field"><b>sessionId: String<span style=3D"color:#=
999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>The session id for this session.</p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_s=
erver.error">server.error</a></dt><dd><div class=3D"box"><pre>notification:=
{
+- "event": "server.error"
+- "params": {
+- "<b>isFatal</b>": bool
+- "<b>message</b>": String
+- "<b>stackTrace</b>": String
+- }
+-}</pre></div>
+- <p>
+- Reports that an unexpected error has occurred while
+- executing the server. This notification is not used for
+- problems with specific requests (which are returned as part
+- of the response) but is used for exceptions that occur while
+- performing other tasks, such as analysis or preparing
+- notifications.
+- </p>
+- <p>
+- It is not possible to subscribe to or unsubscribe from this
+- notification.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>isFatal: bool</b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the error is a fatal error, meaning that the
+- server will shutdown automatically after sending this
+- notification.
+- </p>
+- </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The error message indicating what kind of error was
+- encountered.
+- </p>
+- </dd><dt class=3D"field"><b>stackTrace: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The stack trace associated with the generation of the
+- error, used for debugging the server.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_s=
erver.status">server.status</a></dt><dd><div class=3D"box"><pre>notificatio=
n: {
+- "event": "server.status"
+- "params": {
+- "<b>analysis</b>": <span style=3D"color:#999999">optional</span> <a h=
ref=3D"#type_AnalysisStatus">AnalysisStatus</a>
+- "<b>pub</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_PubStatus">PubStatus</a>
+- }
+-}</pre></div>
+- <p>
+- Reports the current status of the server. Parameters are
+- omitted if there has been no change in the status
+- represented by that parameter.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"STATUS"</tt> in
+- the list of services passed in a server.setSubscriptions
+- request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>analysis: <a href=3D"#ty=
pe_AnalysisStatus">AnalysisStatus</a><span style=3D"color:#999999"> (option=
al)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The current status of analysis, including whether
+- analysis is being performed and if so what is being
+- analyzed.
+- </p>
+- </dd><dt class=3D"field"><b>pub: <a href=3D"#type_PubStatus">PubSta=
tus</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The current status of pub execution, indicating whether we are
+- currently running pub.
+- </p>
+- </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_analysis">analysis domain</a></h2>
+- <p>
+- The analysis domain contains API=E2=80=99s related to the analysis of
+- files.
+- </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_analysis.ge=
tErrors">analysis.getErrors</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "analysis.getErrors"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>errors</b>": List<<a href=3D"#type_AnalysisError">AnalysisErro=
r</a>>
+- }
+-}</pre></div>
+- <p>
+- Return the errors associated with the given file. If the
+- errors for the given file have not yet been computed, or the
+- most recently computed errors for the given file are out of
+- date, then the response for this request will be delayed
+- until they have been computed. If some or all of the errors
+- for the file cannot be computed, then the subset of the
+- errors that can be computed will be returned and the
+- response will contain an error to indicate why the errors
+- could not be computed. If the content of the file changes after this
+- request was received but before a response could be sent, then an
+- error of type <tt>CONTENT_MODIFIED</tt> will be generated.
+- </p>
+- <p>
+- This request is intended to be used by clients that cannot
+- asynchronously apply updated error information. Clients that
+- <b>can</b> apply error information as it becomes available
+- should use the information provided by the 'analysis.errors'
+- notification.
+- </p>
+- <p>
+- If a request is made for a file which does not exist, or
+- which is not currently subject to analysis (e.g. because it
+- is not associated with any analysis root specified to
+- analysis.setAnalysisRoots), an error of type
+- <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file for which errors are being requested.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>errors: List&=
lt;<a href=3D"#type_AnalysisError">AnalysisError</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The errors associated with the file.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tHover">analysis.getHover</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "analysis.getHover"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>hovers</b>": List<<a href=3D"#type_HoverInformation">HoverInfo=
rmation</a>>
+- }
+-}</pre></div>
+- <p>
+- Return the hover information associate with the given
+- location. If some or all of the hover information is not
+- available at the time this request is processed the
+- information will be omitted from the response.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file in which hover information is being requested.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset for which hover information is being requested.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>hovers: List&=
lt;<a href=3D"#type_HoverInformation">HoverInformation</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The hover information associated with the
+- location. The list will be empty if no information
+- could be determined for the location. The list can
+- contain multiple items if the file is being analyzed
+- in multiple contexts in conflicting ways (such as a
+- part that is included in multiple libraries).
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tLibraryDependencies">analysis.getLibraryDependencies</a></dt><dd><div clas=
s=3D"box"><pre>request: {
+- "id": String
+- "method": "analysis.getLibraryDependencies"
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>libraries</b>": List<<a href=3D"#type_FilePath">FilePath</a>&g=
t;
+- "<b>packageMap</b>": Map<String, Map<String, List<<a href=3D=
"#type_FilePath">FilePath</a>>>>
+- }
+-}</pre></div>
+- <p>
+- Return library dependency information for use in client-side indexi=
ng
+- and package URI resolution.
+- </p>
+- <p>
+- Clients that are only using the libraries field should consider usi=
ng the
+- analyzedFiles notification instead.
+- </p>
+-=20=20=20=20
+- <h4>returns:</h4><dl><dt class=3D"field"><b>libraries: List<<a href=
=3D"#type_FilePath">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the paths of library elements referenced by
+- files in existing analysis roots.
+- </p>
+- </dd><dt class=3D"field"><b>packageMap: Map<String, Map<Strin=
g, List<<a href=3D"#type_FilePath">FilePath</a>>>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A mapping from context source roots to package maps which map
+- package names to source directories for use in client-side
+- package URI resolution.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tNavigation">analysis.getNavigation</a></dt><dd><div class=3D"box"><pre>req=
uest: {
+- "id": String
+- "method": "analysis.getNavigation"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- "<b>length</b>": int
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>files</b>": List<<a href=3D"#type_FilePath">FilePath</a>>
+- "<b>targets</b>": List<<a href=3D"#type_NavigationTarget">Navigati=
onTarget</a>>
+- "<b>regions</b>": List<<a href=3D"#type_NavigationRegion">Navigati=
onRegion</a>>
+- }
+-}</pre></div>
+- <p>
+- Return the navigation information associated with the given region =
of
+- the given file. If the navigation information for the given file has
+- not yet been computed, or the most recently computed navigation
+- information for the given file is out of date, then the response for
+- this request will be delayed until it has been computed. If the
+- content of the file changes after this request was received but bef=
ore
+- a response could be sent, then an error of type
+- <tt>CONTENT_MODIFIED</tt> will be generated.
+- </p>
+- <p>
+- If a navigation region overlaps (but extends either before or after)
+- the given region of the file it will be included in the result. This
+- means that it is theoretically possible to get the same navigation
+- region in response to multiple requests. Clients can avoid this by
+- always choosing a region that starts at the beginning of a line and
+- ends at the end of a (possibly different) line in the file.
+- </p>
+- <p>
+- If a request is made for a file which does not exist, or
+- which is not currently subject to analysis (e.g. because it
+- is not associated with any analysis root specified to
+- analysis.setAnalysisRoots), an error of type
+- <tt>GET_NAVIGATION_INVALID_FILE</tt> will be generated.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file in which navigation information is being requested.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the region for which navigation information is be=
ing
+- requested.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the region for which navigation information is be=
ing
+- requested.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>files: List&l=
t;<a href=3D"#type_FilePath">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the paths of files that are referenced by the navigat=
ion
+- targets.
+- </p>
+- </dd><dt class=3D"field"><b>targets: List<<a href=3D"#type_Navig=
ationTarget">NavigationTarget</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the navigation targets that are referenced by the
+- navigation regions.
+- </p>
+- </dd><dt class=3D"field"><b>regions: List<<a href=3D"#type_Navig=
ationRegion">NavigationRegion</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the navigation regions within the requested region of
+- the file.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.ge=
tReachableSources">analysis.getReachableSources</a></dt><dd><div class=3D"b=
ox"><pre>request: {
+- "id": String
+- "method": "analysis.getReachableSources"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>sources</b>": Map<String, List<String>>
+- }
+-}</pre></div>
+- <p>
+- Return the transitive closure of reachable sources for a given file.
+- </p>
+- <p>
+- If a request is made for a file which does not exist, or
+- which is not currently subject to analysis (e.g. because it
+- is not associated with any analysis root specified to
+- analysis.setAnalysisRoots), an error of type
+- <tt>GET_REACHABLE_SOURCES_INVALID_FILE</tt> will be generated.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file for which reachable source information is being reques=
ted.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>sources: Map&=
lt;String, List<String>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A mapping from source URIs to directly reachable source URIs. F=
or
+- example,
+- a file "foo.dart" that imports "bar.dart" would have the corres=
ponding
+- mapping
+- { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart" has
+- further imports
+- (or exports) there will be a mapping from the URI "file:///bar.=
dart"
+- to them.
+- To check if a specific URI is reachable from a given file, clie=
nts can
+- check
+- for its presence in the resulting key set.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.re=
analyze">analysis.reanalyze</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "analysis.reanalyze"
+- "params": {
+- "<b>roots</b>": <span style=3D"color:#999999">optional</span> List<=
;<a href=3D"#type_FilePath">FilePath</a>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Force the re-analysis of everything contained in the specified
+- analysis roots. This will cause all previously computed analysis
+- results to be discarded and recomputed, and will cause all subscrib=
ed
+- notifications to be re-sent.
+- </p>
+- <p>
+- If no analysis roots are provided, then all current analysis roots
+- will be re-analyzed. If an empty list of analysis roots is provided,
+- then nothing will be re-analyzed. If the list contains one or more
+- paths that are not currently analysis roots, then an error of type
+- <tt>INVALID_ANALYSIS_ROOT</tt> will be generated.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>roots: List<<a href=
=3D"#type_FilePath">FilePath</a>><span style=3D"color:#999999"> (optiona=
l)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the analysis roots that are to be re-analyzed.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tAnalysisRoots">analysis.setAnalysisRoots</a></dt><dd><div class=3D"box"><p=
re>request: {
+- "id": String
+- "method": "analysis.setAnalysisRoots"
+- "params": {
+- "<b>included</b>": List<<a href=3D"#type_FilePath">FilePath</a>>
+- "<b>excluded</b>": List<<a href=3D"#type_FilePath">FilePath</a>>
+- "<b>packageRoots</b>": <span style=3D"color:#999999">optional</span> =
Map<<a href=3D"#type_FilePath">FilePath</a>, <a href=3D"#type_FilePath">=
FilePath</a>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Sets the root paths used to determine which files to analyze. The s=
et
+- of files to be analyzed are all of the files in one of the root pat=
hs
+- that are not either explicitly or implicitly excluded. A file is
+- explicitly excluded if it is in one of the excluded paths. A file is
+- implicitly excluded if it is in a subdirectory of one of the root
+- paths where the name of the subdirectory starts with a period (that
+- is, a hidden directory).
+- </p>
+- <p>
+- Note that this request determines the set of requested
+- analysis roots. The actual set of analysis roots at any
+- given time is the intersection of this set with the set of
+- files and directories actually present on the
+- filesystem. When the filesystem changes, the actual set of
+- analysis roots is automatically updated, but the set of
+- requested analysis roots is unchanged. This means that if
+- the client sets an analysis root before the root becomes
+- visible to server in the filesystem, there is no error; once
+- the server sees the root in the filesystem it will start
+- analyzing it. Similarly, server will stop analyzing files
+- that are removed from the file system but they will remain
+- in the set of requested roots.
+- </p>
+- <p>
+- If an included path represents a file, then server will look
+- in the directory containing the file for a pubspec.yaml
+- file. If none is found, then the parents of the directory
+- will be searched until such a file is found or the root of
+- the file system is reached. If such a file is found, it will
+- be used to resolve package: URI=E2=80=99s within the file.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>included: List<<a hre=
f=3D"#type_FilePath">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the files and directories that should be
+- analyzed.
+- </p>
+- </dd><dt class=3D"field"><b>excluded: List<<a href=3D"#type_File=
Path">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the files and directories within the
+- included directories that should not be analyzed.
+- </p>
+- </dd><dt class=3D"field"><b>packageRoots: Map<<a href=3D"#type_F=
ilePath">FilePath</a>, <a href=3D"#type_FilePath">FilePath</a>><span sty=
le=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A mapping from source directories to package roots
+- that should override the normal package: URI resolution
+- mechanism.
+- </p>
+- <p>
+- If a package root is a directory, then
+- the analyzer will behave as though the associated
+- source directory in the map contains a special
+- pubspec.yaml file which resolves any package: URI to the
+- corresponding path within that package root directory. The
+- effect is the same as specifying the package root directory as
+- a "--package_root" parameter to the Dart VM when
+- executing any Dart file inside the source directory.
+- </p>
+- <p>
+- If a package root is a file, then the analyzer
+- will behave as though that file is a ".packages" file in the
+- source directory. The effect is the same as specifying the file
+- as a "--packages" parameter to the Dart VM when
+- executing any Dart file inside the source directory.
+- </p>
+- <p>
+- Files in any directories that are not overridden by this
+- mapping have their package: URI's resolved using the
+- normal pubspec.yaml mechanism. If this field is absent,
+- or the empty map is specified, that indicates that the
+- normal pubspec.yaml mechanism should always be used.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tGeneralSubscriptions">analysis.setGeneralSubscriptions</a></dt><dd><div cl=
ass=3D"box"><pre>request: {
+- "id": String
+- "method": "analysis.setGeneralSubscriptions"
+- "params": {
+- "<b>subscriptions</b>": List<<a href=3D"#type_GeneralAnalysisServi=
ce">GeneralAnalysisService</a>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Subscribe for general services (that is, services that are not
+- specific to individual files). All previous subscriptions are repla=
ced
+- by the given set of services.
+- </p>
+- <p>
+- It is an error if any of the elements in the list are not valid
+- services. If there is an error, then the current subscriptions will
+- remain unchanged.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: List<<=
a href=3D"#type_GeneralAnalysisService">GeneralAnalysisService</a>></b><=
/dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>A list of the services being subscribed to.</p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tPriorityFiles">analysis.setPriorityFiles</a></dt><dd><div class=3D"box"><p=
re>request: {
+- "id": String
+- "method": "analysis.setPriorityFiles"
+- "params": {
+- "<b>files</b>": List<<a href=3D"#type_FilePath">FilePath</a>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Set the priority files to the files in the given list. A
+- priority file is a file that is given priority when
+- scheduling which analysis work to do first. The list
+- typically contains those files that are visible to the user
+- and those for which analysis results will have the biggest
+- impact on the user experience. The order of the files within
+- the list is significant: the first file will be given higher
+- priority than the second, the second higher priority than
+- the third, and so on.
+- </p>
+- <p>
+- Note that this request determines the set of requested
+- priority files. The actual set of priority files is the
+- intersection of the requested set of priority files with the
+- set of files currently subject to analysis. (See
+- analysis.setSubscriptions for a description of files that
+- are subject to analysis.)
+- </p>
+- <p>
+- If a requested priority file is a directory it is ignored,
+- but remains in the set of requested priority files so that
+- if it later becomes a file it can be included in the set of
+- actual priority files.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>files: List<<a href=
=3D"#type_FilePath">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The files that are to be a priority for analysis.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.se=
tSubscriptions">analysis.setSubscriptions</a></dt><dd><div class=3D"box"><p=
re>request: {
+- "id": String
+- "method": "analysis.setSubscriptions"
+- "params": {
+- "<b>subscriptions</b>": Map<<a href=3D"#type_AnalysisService">Anal=
ysisService</a>, List<<a href=3D"#type_FilePath">FilePath</a>>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Subscribe for services that are specific to individual files.
+- All previous subscriptions are replaced by the current set of
+- subscriptions. If a given service is not included as a key in the m=
ap
+- then no files will be subscribed to the service, exactly as if the
+- service had been included in the map with an explicit empty list of
+- files.
+- </p>
+- <p>
+- Note that this request determines the set of requested
+- subscriptions. The actual set of subscriptions at any given
+- time is the intersection of this set with the set of files
+- currently subject to analysis. The files currently subject
+- to analysis are the set of files contained within an actual
+- analysis root but not excluded, plus all of the files
+- transitively reachable from those files via import, export
+- and part directives. (See analysis.setAnalysisRoots for an
+- explanation of how the actual analysis roots are
+- determined.) When the actual analysis roots change, the
+- actual set of subscriptions is automatically updated, but
+- the set of requested subscriptions is unchanged.
+- </p>
+- <p>
+- If a requested subscription is a directory it is ignored,
+- but remains in the set of requested subscriptions so that if
+- it later becomes a file it can be included in the set of
+- actual subscriptions.
+- </p>
+- <p>
+- It is an error if any of the keys in the map are not valid
+- services. If there is an error, then the existing
+- subscriptions will remain unchanged.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: Map<<a=
href=3D"#type_AnalysisService">AnalysisService</a>, List<<a href=3D"#ty=
pe_FilePath">FilePath</a>>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A table mapping services to a list of the files being
+- subscribed to the service.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_analysis.up=
dateContent">analysis.updateContent</a></dt><dd><div class=3D"box"><pre>req=
uest: {
+- "id": String
+- "method": "analysis.updateContent"
+- "params": {
+- "<b>files</b>": Map<<a href=3D"#type_FilePath">FilePath</a>, <a hr=
ef=3D"#type_AddContentOverlay">AddContentOverlay</a> | <a href=3D"#type_Cha=
ngeContentOverlay">ChangeContentOverlay</a> | <a href=3D"#type_RemoveConten=
tOverlay">RemoveContentOverlay</a>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- }
+-}</pre></div>
+- <p>
+- Update the content of one or more files. Files that were
+- previously updated but not included in this update remain
+- unchanged. This effectively represents an overlay of the
+- filesystem. The files whose content is overridden are
+- therefore seen by server as being files with the given
+- content, even if the files do not exist on the filesystem or
+- if the file path represents the path to a directory on the
+- filesystem.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>files: Map<<a href=3D=
"#type_FilePath">FilePath</a>, <a href=3D"#type_AddContentOverlay">AddConte=
ntOverlay</a> | <a href=3D"#type_ChangeContentOverlay">ChangeContentOverlay=
</a> | <a href=3D"#type_RemoveContentOverlay">RemoveContentOverlay</a>><=
/b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A table mapping the files whose content has changed to a
+- description of the content change.
+- </p>
+- </dd></dl><h4>returns:</h4><dl></dl></dd><dt class=3D"request depre=
cated"><a name=3D"request_analysis.updateOptions">analysis.updateOptions</a=
></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "analysis.updateOptions"
+- "params": {
+- "<b>options</b>": <a href=3D"#type_AnalysisOptions">AnalysisOptions</=
a>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p><b>Deprecated:</b> all of the options can be set by users in
+- an analysis options file.</p>
+- <p>
+- Update the options controlling analysis based on the given
+- set of options. Any options that are not included in the
+- analysis options will not be changed. If there are options
+- in the analysis options that are not valid, they will be
+- silently ignored.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>options: <a href=3D"#typ=
e_AnalysisOptions">AnalysisOptions</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The options that are to be used to control analysis.
+- </p>
+- </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_analysis.analyzedFiles">analysis.analyzedFile=
s</a></dt><dd><div class=3D"box"><pre>notification: {
+- "event": "analysis.analyzedFiles"
+- "params": {
+- "<b>directories</b>": List<<a href=3D"#type_FilePath">FilePath</a>=
>
+- }
+-}</pre></div>
+- <p>
+- Reports the paths of the files that are being analyzed.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients can
+- subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the l=
ist
+- of services passed in an analysis.setGeneralSubscriptions request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>directories: List<<a =
href=3D"#type_FilePath">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the paths of the files that are being analyzed.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.errors">analysis.errors</a></dt><dd><div class=3D"box"><pre>notific=
ation: {
+- "event": "analysis.errors"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>errors</b>": List<<a href=3D"#type_AnalysisError">AnalysisErro=
r</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports the errors associated with a given file. The set of
+- errors included in the notification is always a complete
+- list that supersedes any previously reported errors.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the errors.
+- </p>
+- </dd><dt class=3D"field"><b>errors: List<<a href=3D"#type_Analys=
isError">AnalysisError</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The errors contained in the file.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.flushResults">analysis.flushResults</a></dt><dd><div class=3D"box">=
<pre>notification: {
+- "event": "analysis.flushResults"
+- "params": {
+- "<b>files</b>": List<<a href=3D"#type_FilePath">FilePath</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports that any analysis results that were previously
+- associated with the given files should be considered to be
+- invalid because those files are no longer being analyzed,
+- either because the analysis root that contained it is no
+- longer being analyzed or because the file no longer exists.
+- </p>
+- <p>
+- If a file is included in this notification and at some later
+- time a notification with results for the file is received,
+- clients should assume that the file is once again being
+- analyzed and the information should be processed.
+- </p>
+- <p>
+- It is not possible to subscribe to or unsubscribe from this
+- notification.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>files: List<<a href=
=3D"#type_FilePath">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The files that are no longer being analyzed.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.folding">analysis.folding</a></dt><dd><div class=3D"box"><pre>notif=
ication: {
+- "event": "analysis.folding"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>regions</b>": List<<a href=3D"#type_FoldingRegion">FoldingRegi=
on</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports the folding regions associated with a given
+- file. Folding regions can be nested, but will not be
+- overlapping. Nesting occurs when a foldable element, such as
+- a method, is nested inside another foldable element such as
+- a class.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"FOLDING"</tt> in
+- the list of services passed in an analysis.setSubscriptions
+- request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the folding regions.
+- </p>
+- </dd><dt class=3D"field"><b>regions: List<<a href=3D"#type_Foldi=
ngRegion">FoldingRegion</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The folding regions contained in the file.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.highlights">analysis.highlights</a></dt><dd><div class=3D"box"><pre=
>notification: {
+- "event": "analysis.highlights"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>regions</b>": List<<a href=3D"#type_HighlightRegion">Highlight=
Region</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports the highlight regions associated with a given file.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"HIGHLIGHTS"</tt>
+- in the list of services passed in an
+- analysis.setSubscriptions request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the highlight regions.
+- </p>
+- </dd><dt class=3D"field"><b>regions: List<<a href=3D"#type_Highl=
ightRegion">HighlightRegion</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The highlight regions contained in the file. Each
+- highlight region represents a particular syntactic or
+- semantic meaning associated with some range. Note that
+- the highlight regions that are returned can overlap
+- other highlight regions if there is more than one
+- meaning associated with a particular region.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.implemented">analysis.implemented</a></dt><dd><div class=3D"box"><p=
re>notification: {
+- "event": "analysis.implemented"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>classes</b>": List<<a href=3D"#type_ImplementedClass">Implemen=
tedClass</a>>
+- "<b>members</b>": List<<a href=3D"#type_ImplementedMember">Impleme=
ntedMember</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports the classes that are implemented or extended and
+- class members that are implemented or overridden in a file.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
+- the list of services passed in an analysis.setSubscriptions
+- request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file with which the implementations are associated.
+- </p>
+- </dd><dt class=3D"field"><b>classes: List<<a href=3D"#type_Imple=
mentedClass">ImplementedClass</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The classes defined in the file that are implemented or extende=
d.
+- </p>
+- </dd><dt class=3D"field"><b>members: List<<a href=3D"#type_Imple=
mentedMember">ImplementedMember</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The member defined in the file that are implemented or overridd=
en.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.invalidate">analysis.invalidate</a></dt><dd><div class=3D"box"><pre=
>notification: {
+- "event": "analysis.invalidate"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- "<b>length</b>": int
+- "<b>delta</b>": int
+- }
+-}</pre></div>
+- <p>
+- Reports that the navigation information associated with a region of=
a
+- single file has become invalid and should be re-requested.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients can
+- subscribe by including the value <tt>"INVALIDATE"</tt> in the list =
of
+- services passed in an analysis.setSubscriptions request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file whose information has been invalidated.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the invalidated region.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the invalidated region.
+- </p>
+- </dd><dt class=3D"field"><b>delta: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The delta to be applied to the offsets in information that foll=
ows
+- the invalidated region in order to update it so that it doesn't
+- need to be re-requested.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.navigation">analysis.navigation</a></dt><dd><div class=3D"box"><pre=
>notification: {
+- "event": "analysis.navigation"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>regions</b>": List<<a href=3D"#type_NavigationRegion">Navigati=
onRegion</a>>
+- "<b>targets</b>": List<<a href=3D"#type_NavigationTarget">Navigati=
onTarget</a>>
+- "<b>files</b>": List<<a href=3D"#type_FilePath">FilePath</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports the navigation targets associated with a given file.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"NAVIGATION"</tt>
+- in the list of services passed in an
+- analysis.setSubscriptions request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the navigation regions.
+- </p>
+- </dd><dt class=3D"field"><b>regions: List<<a href=3D"#type_Navig=
ationRegion">NavigationRegion</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The navigation regions contained in the file.
+- The regions are sorted by their offsets.
+- Each navigation region represents a list of targets
+- associated with some range. The lists will usually
+- contain a single target, but can contain more in the
+- case of a part that is included in multiple libraries
+- or in Dart code that is compiled against multiple
+- versions of a package. Note that the navigation
+- regions that are returned do not overlap other
+- navigation regions.
+- </p>
+- </dd><dt class=3D"field"><b>targets: List<<a href=3D"#type_Navig=
ationTarget">NavigationTarget</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The navigation targets referenced in the file.
+- They are referenced by <tt>NavigationRegion</tt>s by their
+- index in this array.
+- </p>
+- </dd><dt class=3D"field"><b>files: List<<a href=3D"#type_FilePat=
h">FilePath</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The files containing navigation targets referenced in the file.
+- They are referenced by <tt>NavigationTarget</tt>s by their
+- index in this array.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.occurrences">analysis.occurrences</a></dt><dd><div class=3D"box"><p=
re>notification: {
+- "event": "analysis.occurrences"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>occurrences</b>": List<<a href=3D"#type_Occurrences">Occurrenc=
es</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports the occurrences of references to elements within a
+- single file.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"OCCURRENCES"</tt>
+- in the list of services passed in an
+- analysis.setSubscriptions request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file in which the references occur.
+- </p>
+- </dd><dt class=3D"field"><b>occurrences: List<<a href=3D"#type_O=
ccurrences">Occurrences</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The occurrences of references to elements within the
+- file.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.outline">analysis.outline</a></dt><dd><div class=3D"box"><pre>notif=
ication: {
+- "event": "analysis.outline"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>kind</b>": <a href=3D"#type_FileKind">FileKind</a>
+- "<b>libraryName</b>": <span style=3D"color:#999999">optional</span> S=
tring
+- "<b>outline</b>": <a href=3D"#type_Outline">Outline</a>
+- }
+-}</pre></div>
+- <p>
+- Reports the outline associated with a single file.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"OUTLINE"</tt> in
+- the list of services passed in an analysis.setSubscriptions
+- request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file with which the outline is associated.
+- </p>
+- </dd><dt class=3D"field"><b>kind: <a href=3D"#type_FileKind">FileKi=
nd</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of the file.
+- </p>
+- </dd><dt class=3D"field"><b>libraryName: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the library defined by the file using a "library"
+- directive, or referenced by a "part of" directive. If both
+- "library" and "part of" directives are present, then the
+- "library" directive takes precedence.
+- This field will be omitted if the file has neither "library"
+- nor "part of" directives.
+- </p>
+- </dd><dt class=3D"field"><b>outline: <a href=3D"#type_Outline">Outl=
ine</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The outline associated with the file.
+- </p>
+- </dd></dl></dd><dt class=3D"notification"><a name=3D"notification_a=
nalysis.overrides">analysis.overrides</a></dt><dd><div class=3D"box"><pre>n=
otification: {
+- "event": "analysis.overrides"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>overrides</b>": List<<a href=3D"#type_Override">Override</a>&g=
t;
+- }
+-}</pre></div>
+- <p>
+- Reports the overriding members in a file.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients
+- can subscribe by including the value <tt>"OVERRIDES"</tt> in
+- the list of services passed in an analysis.setSubscriptions
+- request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file with which the overrides are associated.
+- </p>
+- </dd><dt class=3D"field"><b>overrides: List<<a href=3D"#type_Ove=
rride">Override</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The overrides associated with the file.
+- </p>
+- </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_completion">completion domain</a><=
/h2>
+- <p>
+- The code completion domain contains commands related to
+- getting code completion suggestions.
+- </p>
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_completion.=
getSuggestions">completion.getSuggestions</a></dt><dd><div class=3D"box"><p=
re>request: {
+- "id": String
+- "method": "completion.getSuggestions"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- }
+-}</pre><br><pre>response: {
+- "<b>id</b>": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>id</b>": <a href=3D"#type_CompletionId">CompletionId</a>
+- }
+-}</pre></div>
+- <p>
+- Request that completion suggestions for the given offset in
+- the given file be returned.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the point at which suggestions are
+- to be made.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset within the file at which suggestions are to
+- be made.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_CompletionId">CompletionId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier used to associate results with this
+- completion request.
+- </p>
+- </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_completion.results">completion.results</a></d=
t><dd><div class=3D"box"><pre>notification: {
+- "event": "completion.results"
+- "params": {
+- "<b>id</b>": <a href=3D"#type_CompletionId">CompletionId</a>
+- "<b>replacementOffset</b>": int
+- "<b>replacementLength</b>": int
+- "<b>results</b>": List<<a href=3D"#type_CompletionSuggestion">Comp=
letionSuggestion</a>>
+- "<b>isLast</b>": bool
+- }
+-}</pre></div>
+- <p>
+- Reports the completion suggestions that should be presented
+- to the user. The set of suggestions included in the
+- notification is always a complete list that supersedes any
+- previously reported suggestions.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Com=
pletionId">CompletionId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The id associated with the completion.
+- </p>
+- </dd><dt class=3D"field"><b>replacementOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the start of the text to be
+- replaced. This will be different than the offset used
+- to request the completion suggestions if there was a
+- portion of an identifier before the original
+- offset. In particular, the replacementOffset will be
+- the offset of the beginning of said identifier.
+- </p>
+- </dd><dt class=3D"field"><b>replacementLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the text to be replaced if the remainder
+- of the identifier containing the cursor is to be
+- replaced when the suggestion is applied (that is, the
+- number of characters in the existing identifier).
+- </p>
+- </dd><dt class=3D"field"><b>results: List<<a href=3D"#type_Compl=
etionSuggestion">CompletionSuggestion</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The completion suggestions being reported. The
+- notification contains all possible completions at the
+- requested cursor position, even those that do not match
+- the characters the user has already typed. This allows
+- the client to respond to further keystrokes from the
+- user without having to make additional requests.
+- </p>
+- </dd><dt class=3D"field"><b>isLast: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if this is that last set of results that will be
+- returned for the indicated completion.
+- </p>
+- </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_search">search domain</a></h2>
+- <p>
+- The search domain contains commands related to searches that
+- can be performed against the code base.
+- </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_search.find=
ElementReferences">search.findElementReferences</a></dt><dd><div class=3D"b=
ox"><pre>request: {
+- "id": String
+- "method": "search.findElementReferences"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- "<b>includePotential</b>": bool
+- }
+-}</pre><br><pre>response: {
+- "<b>id</b>": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>id</b>": <span style=3D"color:#999999">optional</span> <a href=3D=
"#type_SearchId">SearchId</a>
+- "<b>element</b>": <span style=3D"color:#999999">optional</span> <a hr=
ef=3D"#type_Element">Element</a>
+- }
+-}</pre></div>
+- <p>
+- Perform a search for references to the element defined or
+- referenced at the given offset in the given file.
+- </p>
+- <p>
+- An identifier is returned immediately, and individual
+- results will be returned via the search.results notification
+- as they become available.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the declaration of or reference to
+- the element used to define the search.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset within the file of the declaration of or
+- reference to the element.
+- </p>
+- </dd><dt class=3D"field"><b>includePotential: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if potential matches are to be included in the
+- results.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a><span style=3D"color:#999999"> (optional)</=
span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier used to associate results with this
+- search request.
+- </p>
+- <p>
+- If no element was found at the given location, this
+- field will be absent, and no results will be reported
+- via the search.results notification.
+- </p>
+- </dd><dt class=3D"field"><b>element: <a href=3D"#type_Element">Elem=
ent</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The element referenced or defined at the given offset
+- and whose references will be returned in the search
+- results.
+- </p>
+- <p>
+- If no element was found at the given location, this
+- field will be absent.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.find=
MemberDeclarations">search.findMemberDeclarations</a></dt><dd><div class=3D=
"box"><pre>request: {
+- "id": String
+- "method": "search.findMemberDeclarations"
+- "params": {
+- "<b>name</b>": String
+- }
+-}</pre><br><pre>response: {
+- "<b>id</b>": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+- }
+-}</pre></div>
+- <p>
+- Perform a search for declarations of members whose name is
+- equal to the given name.
+- </p>
+- <p>
+- An identifier is returned immediately, and individual
+- results will be returned via the search.results notification
+- as they become available.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the declarations to be found.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier used to associate results with this
+- search request.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.find=
MemberReferences">search.findMemberReferences</a></dt><dd><div class=3D"box=
"><pre>request: {
+- "id": String
+- "method": "search.findMemberReferences"
+- "params": {
+- "<b>name</b>": String
+- }
+-}</pre><br><pre>response: {
+- "<b>id</b>": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+- }
+-}</pre></div>
+- <p>
+- Perform a search for references to members whose name is
+- equal to the given name. This search does not check to see
+- that there is a member defined with the given name, so it is
+- able to find references to undefined members as well.
+- </p>
+- <p>
+- An identifier is returned immediately, and individual
+- results will be returned via the search.results notification
+- as they become available.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the references to be found.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier used to associate results with this
+- search request.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.find=
TopLevelDeclarations">search.findTopLevelDeclarations</a></dt><dd><div clas=
s=3D"box"><pre>request: {
+- "id": String
+- "method": "search.findTopLevelDeclarations"
+- "params": {
+- "<b>pattern</b>": String
+- }
+-}</pre><br><pre>response: {
+- "<b>id</b>": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+- }
+-}</pre></div>
+- <p>
+- Perform a search for declarations of top-level elements
+- (classes, typedefs, getters, setters, functions and fields)
+- whose name matches the given pattern.
+- </p>
+- <p>
+- An identifier is returned immediately, and individual
+- results will be returned via the search.results notification
+- as they become available.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>pattern: String</b></dt>=
<dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The regular expression used to match the names of the
+- declarations to be found.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_SearchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier used to associate results with this
+- search request.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_search.getT=
ypeHierarchy">search.getTypeHierarchy</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+- "id": String
+- "method": "search.getTypeHierarchy"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- "<b>superOnly</b>": <span style=3D"color:#999999">optional</span> bool
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>hierarchyItems</b>": <span style=3D"color:#999999">optional</span=
> List<<a href=3D"#type_TypeHierarchyItem">TypeHierarchyItem</a>>
+- }
+-}</pre></div>
+- <p>
+- Return the type hierarchy of the class declared or
+- referenced at the given location.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the declaration or reference to the
+- type for which a hierarchy is being requested.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the name of the type within the file.
+- </p>
+- </dd><dt class=3D"field"><b>superOnly: bool<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the client is only requesting superclasses and
+- interfaces hierarchy.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>hierarchyItem=
s: List<<a href=3D"#type_TypeHierarchyItem">TypeHierarchyItem</a>><sp=
an style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the types in the requested hierarchy. The
+- first element of the list is the item representing the
+- type for which the hierarchy was requested. The index of
+- other elements of the list is unspecified, but
+- correspond to the integers used to reference supertype
+- and subtype items within the items.
+- </p>
+- <p>
+- This field will be absent if the code at the given file
+- and offset does not represent a type, or if the file has
+- not been sufficiently analyzed to allow a type hierarchy
+- to be produced.
+- </p>
+- </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_search.results">search.results</a></dt><dd><d=
iv class=3D"box"><pre>notification: {
+- "event": "search.results"
+- "params": {
+- "<b>id</b>": <a href=3D"#type_SearchId">SearchId</a>
+- "<b>results</b>": List<<a href=3D"#type_SearchResult">SearchResult=
</a>>
+- "<b>isLast</b>": bool
+- }
+-}</pre></div>
+- <p>
+- Reports some or all of the results of performing a requested
+- search. Unlike other notifications, this notification
+- contains search results that should be added to any
+- previously received search results associated with the same
+- search id.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Sea=
rchId">SearchId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The id associated with the search.
+- </p>
+- </dd><dt class=3D"field"><b>results: List<<a href=3D"#type_Searc=
hResult">SearchResult</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The search results being reported.
+- </p>
+- </dd><dt class=3D"field"><b>isLast: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if this is that last set of results that will be
+- returned for the indicated search.
+- </p>
+- </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_edit">edit domain</a></h2>
+- <p>
+- The edit domain contains commands related to edits that can be
+- applied to the code.
+- </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_edit.format=
">edit.format</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "edit.format"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>selectionOffset</b>": int
+- "<b>selectionLength</b>": int
+- "<b>lineLength</b>": <span style=3D"color:#999999">optional</span> int
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>edits</b>": List<<a href=3D"#type_SourceEdit">SourceEdit</a>&g=
t;
+- "<b>selectionOffset</b>": int
+- "<b>selectionLength</b>": int
+- }
+-}</pre></div>
+- <p>
+- Format the contents of a single file. The currently selected region=
of
+- text is passed in so that the selection can be preserved across the
+- formatting operation. The updated selection will be as close to
+- matching the original as possible, but whitespace at the beginning =
or
+- end of the selected region will be ignored. If preserving selection
+- information is not required, zero (0) can be specified for both the
+- selection offset and selection length.
+- </p>
+- <p>
+- If a request is made for a file which does not exist, or which is n=
ot
+- currently subject to analysis (e.g. because it is not associated wi=
th
+- any analysis root specified to analysis.setAnalysisRoots), an error=
of
+- type <tt>FORMAT_INVALID_FILE</tt> will be generated. If the source
+- contains syntax errors, an error of type <tt>FORMAT_WITH_ERRORS</tt>
+- will be generated.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the code to be formatted.
+- </p>
+- </dd><dt class=3D"field"><b>selectionOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the current selection in the file.
+- </p>
+- </dd><dt class=3D"field"><b>selectionLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the current selection in the file.
+- </p>
+- </dd><dt class=3D"field"><b>lineLength: int<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The line length to be used by the formatter.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>edits: List&l=
t;<a href=3D"#type_SourceEdit">SourceEdit</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The edit(s) to be applied in order to format the code. The list
+- will be empty if the code was already formatted (there are no
+- changes).
+- </p>
+- </dd><dt class=3D"field"><b>selectionOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the selection after formatting the code.
+- </p>
+- </dd><dt class=3D"field"><b>selectionLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the selection after formatting the code.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getAss=
ists">edit.getAssists</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "edit.getAssists"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- "<b>length</b>": int
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>assists</b>": List<<a href=3D"#type_SourceChange">SourceChange=
</a>>
+- }
+-}</pre></div>
+- <p>
+- Return the set of assists that are available at the given
+- location. An assist is distinguished from a refactoring
+- primarily by the fact that it affects a single file and does
+- not require user input in order to be performed.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the code for which assists are being
+- requested.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the code for which assists are being
+- requested.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the code for which assists are being
+- requested.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>assists: List=
<<a href=3D"#type_SourceChange">SourceChange</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The assists that are available at the given location.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getAva=
ilableRefactorings">edit.getAvailableRefactorings</a></dt><dd><div class=3D=
"box"><pre>request: {
+- "id": String
+- "method": "edit.getAvailableRefactorings"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- "<b>length</b>": int
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>kinds</b>": List<<a href=3D"#type_RefactoringKind">Refactoring=
Kind</a>>
+- }
+-}</pre></div>
+- <p>
+- Get a list of the kinds of refactorings that are valid for
+- the given selection in the given file.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the code on which the refactoring
+- would be based.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the code on which the refactoring would be
+- based.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the code on which the refactoring would be
+- based.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>kinds: List&l=
t;<a href=3D"#type_RefactoringKind">RefactoringKind</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kinds of refactorings that are valid for the given
+- selection.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getFix=
es">edit.getFixes</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "edit.getFixes"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>fixes</b>": List<<a href=3D"#type_AnalysisErrorFixes">Analysis=
ErrorFixes</a>>
+- }
+-}</pre></div>
+- <p>
+- Return the set of fixes that are available for the errors at
+- a given offset in a given file.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the errors for which fixes are being
+- requested.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset used to select the errors for which fixes
+- will be returned.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>fixes: List&l=
t;<a href=3D"#type_AnalysisErrorFixes">AnalysisErrorFixes</a>></b></dt><=
dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The fixes that are available for the errors at the given offset.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.getRef=
actoring">edit.getRefactoring</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "edit.getRefactoring"
+- "params": {
+- "<b>kind</b>": <a href=3D"#type_RefactoringKind">RefactoringKind</a>
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>offset</b>": int
+- "<b>length</b>": int
+- "<b>validateOnly</b>": bool
+- "<b>options</b>": <span style=3D"color:#999999">optional</span> <a hr=
ef=3D"#type_RefactoringOptions">RefactoringOptions</a>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>initialProblems</b>": List<<a href=3D"#type_RefactoringProblem=
">RefactoringProblem</a>>
+- "<b>optionsProblems</b>": List<<a href=3D"#type_RefactoringProblem=
">RefactoringProblem</a>>
+- "<b>finalProblems</b>": List<<a href=3D"#type_RefactoringProblem">=
RefactoringProblem</a>>
+- "<b>feedback</b>": <span style=3D"color:#999999">optional</span> <a h=
ref=3D"#type_RefactoringFeedback">RefactoringFeedback</a>
+- "<b>change</b>": <span style=3D"color:#999999">optional</span> <a hre=
f=3D"#type_SourceChange">SourceChange</a>
+- "<b>potentialEdits</b>": <span style=3D"color:#999999">optional</span=
> List<String>
+- }
+-}</pre></div>
+- <p>
+- Get the changes required to perform a refactoring.
+- </p>
+- <p>
+- If another refactoring request is received during the processing
+- of this one, an error of type <tt>REFACTORING_REQUEST_CANCELLED</tt>
+- will be generated.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>kind: <a href=3D"#type_R=
efactoringKind">RefactoringKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of refactoring to be performed.
+- </p>
+- </dd><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePa=
th</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the code involved in the
+- refactoring.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the region involved in the refactoring.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the region involved in the refactoring.
+- </p>
+- </dd><dt class=3D"field"><b>validateOnly: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the client is only requesting that the values of
+- the options be validated and no change be generated.
+- </p>
+- </dd><dt class=3D"field"><b>options: <a href=3D"#type_RefactoringOp=
tions">RefactoringOptions</a><span style=3D"color:#999999"> (optional)</spa=
n></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Data used to provide values provided by the user. The
+- structure of the data is dependent on the kind of
+- refactoring being performed. The data that is expected is
+- documented in the section titled <a href=3D"#refactorings">Refa=
ctorings</a>, labeled as
+- "Options". This field can be omitted if the refactoring
+- does not require any options or if the values of those
+- options are not known.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>initialProble=
ms: List<<a href=3D"#type_RefactoringProblem">RefactoringProblem</a>>=
</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The initial status of the refactoring, i.e. problems related to
+- the context in which the refactoring is requested.
+- The array will be empty if there are no known problems.
+- </p>
+- </dd><dt class=3D"field"><b>optionsProblems: List<<a href=3D"#ty=
pe_RefactoringProblem">RefactoringProblem</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The options validation status, i.e. problems in the given optio=
ns,
+- such as light-weight validation of a new name, flags
+- compatibility, etc.
+- The array will be empty if there are no known problems.
+- </p>
+- </dd><dt class=3D"field"><b>finalProblems: List<<a href=3D"#type=
_RefactoringProblem">RefactoringProblem</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The final status of the refactoring, i.e. problems identified in
+- the result of a full, potentially expensive validation and / or
+- change creation.
+- The array will be empty if there are no known problems.
+- </p>
+- </dd><dt class=3D"field"><b>feedback: <a href=3D"#type_RefactoringF=
eedback">RefactoringFeedback</a><span style=3D"color:#999999"> (optional)</=
span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Data used to provide feedback to the user. The structure
+- of the data is dependent on the kind of refactoring
+- being created. The data that is returned is documented
+- in the section titled <a href=3D"#refactorings">Refactorings</a=
>, labeled as
+- "Feedback".
+- </p>
+- </dd><dt class=3D"field"><b>change: <a href=3D"#type_SourceChange">=
SourceChange</a><span style=3D"color:#999999"> (optional)</span></b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The changes that are to be applied to affect the
+- refactoring. This field will be omitted if there are
+- problems that prevent a set of changes from being
+- computed, such as having no options specified for a
+- refactoring that requires them, or if only validation
+- was requested.
+- </p>
+- </dd><dt class=3D"field"><b>potentialEdits: List<String><span=
style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The ids of source edits that are not known to be valid. An edit=
is
+- not known to be valid if there was insufficient type information
+- for the server to be able to determine whether or not the code
+- needs to be modified, such as when a member is being renamed and
+- there is a reference to a member from an unknown type. This fie=
ld
+- will be omitted if the change field is omitted or if there are =
no
+- potential edits for the refactoring.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.sortMe=
mbers">edit.sortMembers</a></dt><dd><div class=3D"box"><pre>request: {
+- "id": String
+- "method": "edit.sortMembers"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>edit</b>": <a href=3D"#type_SourceFileEdit">SourceFileEdit</a>
+- }
+-}</pre></div>
+- <p>
+- Sort all of the directives, unit and class members
+- of the given Dart file.
+- </p>
+- <p>
+- If a request is made for a file that does not exist, does not belong
+- to an analysis root or is not a Dart file,
+- <tt>SORT_MEMBERS_INVALID_FILE</tt> will be generated.
+- </p>
+- <p>
+- If the Dart file has scan or parse errors,
+- <tt>SORT_MEMBERS_PARSE_ERRORS</tt> will be generated.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The Dart file to sort.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>edit: <a href=
=3D"#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file edit that is to be applied to the given file to effect
+- the sorting.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_edit.organi=
zeDirectives">edit.organizeDirectives</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+- "id": String
+- "method": "edit.organizeDirectives"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>edit</b>": <a href=3D"#type_SourceFileEdit">SourceFileEdit</a>
+- }
+-}</pre></div>
+- <p>
+- Organizes all of the directives - removes unused imports and sorts
+- directives of the given Dart file according to the
+- <a href=3D"https://www.dartlang.org/articles/style-guide/">Dart Sty=
le
+- Guide</a>.
+- </p>
+- <p>
+- If a request is made for a file that does not exist, does not belong
+- to an analysis root or is not a Dart file,
+- <tt>FILE_NOT_ANALYZED</tt> will be generated.
+- </p>
+- <p>
+- If directives of the Dart file cannot be organized, for example
+- because it has scan or parse errors, or by other reasons,
+- <tt>ORGANIZE_DIRECTIVES_ERROR</tt> will be generated. The message
+- will provide details about the reason.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The Dart file to organize directives in.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>edit: <a href=
=3D"#type_SourceFileEdit">SourceFileEdit</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file edit that is to be applied to the given file to effect
+- the organizing.
+- </p>
+- </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_execution">execution domain</a></h=
2>
+- <p>
+- The execution domain contains commands related to providing an execut=
ion
+- or debugging experience.
+- </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_execution.c=
reateContext">execution.createContext</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+- "id": String
+- "method": "execution.createContext"
+- "params": {
+- "<b>contextRoot</b>": <a href=3D"#type_FilePath">FilePath</a>
+- }
+-}</pre><br><pre>response: {
+- "<b>id</b>": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>id</b>": <a href=3D"#type_ExecutionContextId">ExecutionContextId<=
/a>
+- }
+-}</pre></div>
+- <p>
+- Create an execution context for the executable file with the given
+- path. The context that is created will persist until
+- execution.deleteContext is used to delete it. Clients, therefore, a=
re
+- responsible for managing the lifetime of execution contexts.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>contextRoot: <a href=3D"=
#type_FilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The path of the Dart or HTML file that will be launched, or the
+- path of the directory containing the file.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>id: <a href=
=3D"#type_ExecutionContextId">ExecutionContextId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier used to refer to the execution context that was
+- created.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_execution.d=
eleteContext">execution.deleteContext</a></dt><dd><div class=3D"box"><pre>r=
equest: {
+- "<b>id</b>": String
+- "method": "execution.deleteContext"
+- "params": {
+- "<b>id</b>": <a href=3D"#type_ExecutionContextId">ExecutionContextId<=
/a>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- Delete the execution context with the given identifier. The context=
id
+- is no longer valid after this command. The server is allowed to re-=
use
+- ids when they are no longer valid.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Exe=
cutionContextId">ExecutionContextId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier of the execution context that is to be deleted.
+- </p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_execution.m=
apUri">execution.mapUri</a></dt><dd><div class=3D"box"><pre>request: {
+- "<b>id</b>": String
+- "method": "execution.mapUri"
+- "params": {
+- "<b>id</b>": <a href=3D"#type_ExecutionContextId">ExecutionContextId<=
/a>
+- "<b>file</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_FilePath">FilePath</a>
+- "<b>uri</b>": <span style=3D"color:#999999">optional</span> String
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>file</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_FilePath">FilePath</a>
+- "<b>uri</b>": <span style=3D"color:#999999">optional</span> String
+- }
+-}</pre></div>
+- <p>
+- Map a URI from the execution context to the file that it corresponds
+- to, or map a file to the URI that it corresponds to in the execution
+- context.
+- </p>
+- <p>
+- Exactly one of the file and uri fields must be provided. If both
+- fields are provided, then an error of type <tt>INVALID_PARAMETER</t=
t>
+- will be generated. Similarly, if neither field is provided, then an
+- error of type <tt>INVALID_PARAMETER</tt> will be generated.
+- </p>
+- <p>
+- If the file field is provided and the value is not the path of a fi=
le
+- (either the file does not exist or the path references something ot=
her
+- than a file), then an error of type <tt>INVALID_PARAMETER</tt> will
+- be generated.
+- </p>
+- <p>
+- If the uri field is provided and the value is not a valid URI or if
+- the URI references something that is not a file (either a file that
+- does not exist or something other than a file), then an error of ty=
pe
+- <tt>INVALID_PARAMETER</tt> will be generated.
+- </p>
+- <p>
+- If the contextRoot used to create the execution context does not
+- exist, then an error of type <tt>INVALID_EXECUTION_CONTEXT</tt> will
+- be generated.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>id: <a href=3D"#type_Exe=
cutionContextId">ExecutionContextId</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier of the execution context in which the URI is to =
be
+- mapped.
+- </p>
+- </dd><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePa=
th</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The path of the file to be mapped into a URI.
+- </p>
+- </dd><dt class=3D"field"><b>uri: String<span style=3D"color:#999999=
"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The URI to be mapped into a file path.
+- </p>
+- </dd></dl><h4>returns:</h4><dl><dt class=3D"field"><b>file: <a href=
=3D"#type_FilePath">FilePath</a><span style=3D"color:#999999"> (optional)</=
span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file to which the URI was mapped. This field is omitted if =
the
+- uri field was not given in the request.
+- </p>
+- </dd><dt class=3D"field"><b>uri: String<span style=3D"color:#999999=
"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The URI to which the file path was mapped. This field is omitted
+- if the file field was not given in the request.
+- </p>
+- </dd></dl></dd><dt class=3D"request deprecated"><a name=3D"request_=
execution.setSubscriptions">execution.setSubscriptions</a></dt><dd><div cla=
ss=3D"box"><pre>request: {
+- "id": String
+- "method": "execution.setSubscriptions"
+- "params": {
+- "<b>subscriptions</b>": List<<a href=3D"#type_ExecutionService">Ex=
ecutionService</a>>
+- }
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+-}</pre></div>
+- <p>
+- <b>Deprecated:</b> the analysis server no longer fires
+- <tt>LAUNCH_DATA</tt> events.
+- </p>
+- <p>
+- Subscribe for services. All previous subscriptions are replaced by =
the
+- given set of services.
+- </p>
+- <p>
+- It is an error if any of the elements in the list are not valid
+- services. If there is an error, then the current subscriptions will
+- remain unchanged.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>subscriptions: List<<=
a href=3D"#type_ExecutionService">ExecutionService</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the services being subscribed to.
+- </p>
+- </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class=3D"notifica=
tion"><a name=3D"notification_execution.launchData">execution.launchData</a=
></dt><dd><div class=3D"box"><pre>notification: {
+- "event": "execution.launchData"
+- "params": {
+- "<b>file</b>": <a href=3D"#type_FilePath">FilePath</a>
+- "<b>kind</b>": <span style=3D"color:#999999">optional</span> <a href=
=3D"#type_ExecutableKind">ExecutableKind</a>
+- "<b>referencedFiles</b>": <span style=3D"color:#999999">optional</spa=
n> List<<a href=3D"#type_FilePath">FilePath</a>>
+- }
+-}</pre></div>
+- <p>
+- Reports information needed to allow a single file to be launched.
+- </p>
+- <p>
+- This notification is not subscribed to by default. Clients can
+- subscribe by including the value "LAUNCH_DATA" in the list of servi=
ces
+- passed in an <tt>execution.setSubscriptions</tt> request.
+- </p>
+-=20=20=20=20
+- <h4>parameters:</h4><dl><dt class=3D"field"><b>file: <a href=3D"#type_F=
ilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file for which launch data is being provided. This will eit=
her
+- be a Dart library or an HTML file.
+- </p>
+- </dd><dt class=3D"field"><b>kind: <a href=3D"#type_ExecutableKind">=
ExecutableKind</a><span style=3D"color:#999999"> (optional)</span></b></dt>=
<dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of the executable file. This field is omitted if the f=
ile
+- is not a Dart file.
+- </p>
+- </dd><dt class=3D"field"><b>referencedFiles: List<<a href=3D"#ty=
pe_FilePath">FilePath</a>><span style=3D"color:#999999"> (optional)</spa=
n></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the Dart files that are referenced by the file. This
+- field is omitted if the file is not an HTML file.
+- </p>
+- </dd></dl></dd></dl>
+-<h2 class=3D"domain"><a name=3D"domain_diagnostic">diagnostic domain</a><=
/h2>
+- <p>
+- The diagnostic domain contains server diagnostics APIs.
+- </p>
+-=20=20
+-=20=20
+-<h3>Requests</h3><dl><dt class=3D"request"><a name=3D"request_diagnostic.=
getDiagnostics">diagnostic.getDiagnostics</a></dt><dd><div class=3D"box"><p=
re>request: {
+- "id": String
+- "method": "diagnostic.getDiagnostics"
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>contexts</b>": List<<a href=3D"#type_ContextData">ContextData<=
/a>>
+- }
+-}</pre></div>
+- <p>Return server diagnostics.</p>
+-=20=20=20=20
+- <h4>returns:</h4><dl><dt class=3D"field"><b>contexts: List<<a href=
=3D"#type_ContextData">ContextData</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>The list of analysis contexts.</p>
+- </dd></dl></dd><dt class=3D"request"><a name=3D"request_diagnostic.=
getServerPort">diagnostic.getServerPort</a></dt><dd><div class=3D"box"><pre=
>request: {
+- "id": String
+- "method": "diagnostic.getServerPort"
+-}</pre><br><pre>response: {
+- "id": String
+- "error": <span style=3D"color:#999999">optional</span> <a href=3D"#type=
_RequestError">RequestError</a>
+- "result": {
+- "<b>port</b>": int
+- }
+-}</pre></div>
+- <p>
+- Return the port of the diagnostic web server. If the server is not =
running
+- this call will start the server. If unable to start the diagnostic =
web
+- server,
+- this call will return an error of <tt>DEBUG_PORT_COULD_NOT_BE_OPENE=
D</tt>.
+- </p>
+-=20=20=20=20
+- <h4>returns:</h4><dl><dt class=3D"field"><b>port: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>The diagnostic server port.</p>
+- </dd></dl></dd></dl>
+-
+-
+-
+- <h2 class=3D"domain"><a name=3D"types">Types</a></h2>
+- <p>
+- This section contains descriptions of the data types referenced
+- in the API=E2=80=99s of the various domains.
+- </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<dl><dt class=3D"typeDefinition"><a name=3D"type_AddContentOverlay">AddCo=
ntentOverlay: object</a></dt><dd>
+- <p>
+- A directive to begin overlaying the contents of a file. The supplied
+- content will be used for analysis in place of the file contents in =
the
+- filesystem.
+- </p>
+- <p>
+- If this directive is used on a file that already has a file content
+- overlay, the old overlay is discarded and replaced with the new one.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>type =3D "add"</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- </dd><dt class=3D"field"><b>content: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The new content of the file.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sError">AnalysisError: object</a></dt><dd>
+- <p>
+- An indication of an error, warning, or hint that was produced by the
+- analysis.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>severity: <a href=3D"#type_AnalysisErrorSeve=
rity">AnalysisErrorSeverity</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The severity of the error.
+- </p>
+- </dd><dt class=3D"field"><b>type: <a href=3D"#type_AnalysisErrorTyp=
e">AnalysisErrorType</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The type of the error.
+- </p>
+- </dd><dt class=3D"field"><b>location: <a href=3D"#type_Location">Lo=
cation</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The location associated with the error.
+- </p>
+- </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The message to be displayed for this error. The message should
+- indicate what is wrong with the code and why it is wrong.
+- </p>
+- </dd><dt class=3D"field"><b>correction: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The correction message to be displayed for this error. The corr=
ection
+- message should indicate how the user can fix the error. The fie=
ld is
+- omitted if there is no correction message associated with the e=
rror
+- code.
+- </p>
+- </dd><dt class=3D"field"><b>code: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name, as a string, of the error code associated with this e=
rror.
+- </p>
+- </dd><dt class=3D"field"><b>hasFix: bool<span style=3D"color:#99999=
9"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A hint to indicate to interested clients that this error has an
+- associated fix (or fixes). The absence of this field implies th=
ere
+- are not known to be fixes. Note that since the operation to cal=
culate
+- whether fixes apply needs to be performant it is possible that
+- complicated tests will be skipped and a false negative returned=
. For
+- this reason, this attribute should be treated as a "hint". Desp=
ite the
+- possibility of false negatives, no false positives should be re=
turned.
+- If a client sees this flag set they can proceed with the confid=
ence
+- that there are in fact associated fixes.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sErrorFixes">AnalysisErrorFixes: object</a></dt><dd>
+- <p>
+- A list of fixes associated with a specific error.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>error: <a href=3D"#type_AnalysisError">Analy=
sisError</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The error with which the fixes are associated.
+- </p>
+- </dd><dt class=3D"field"><b>fixes: List<<a href=3D"#type_SourceC=
hange">SourceChange</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The fixes associated with the error.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sErrorSeverity">AnalysisErrorSeverity: String</a></dt><dd>
+- <p>
+- An enumeration of the possible severities of analysis errors.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">INFO</dt><dt class=3D"value">WARNING</dt><dt cl=
ass=3D"value">ERROR</dt></dl></dd><dt class=3D"typeDefinition"><a name=3D"t=
ype_AnalysisErrorType">AnalysisErrorType: String</a></dt><dd>
+- <p>
+- An enumeration of the possible types of analysis errors.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">CHECKED_MODE_COMPILE_TIME_ERROR</dt><dt class=
=3D"value">COMPILE_TIME_ERROR</dt><dt class=3D"value">HINT</dt><dt class=3D=
"value">LINT</dt><dt class=3D"value">STATIC_TYPE_WARNING</dt><dt class=3D"v=
alue">STATIC_WARNING</dt><dt class=3D"value">SYNTACTIC_ERROR</dt><dt class=
=3D"value">TODO</dt></dl></dd><dt class=3D"typeDefinition deprecated"><a na=
me=3D"type_AnalysisOptions">AnalysisOptions: object</a></dt><dd>
+- <p><b>Deprecated:</b> the only reference to this type has been
+- deprecated.</p>
+- <p>
+- A set of options controlling what kind of analysis is to be
+- performed. If the value of a field is omitted the value of the
+- option will not be changed.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b><span class=3D"deprecated">enableAsync</span=
>: bool<span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p><b>Deprecated:</b> this feature is always enabled.</p>
+- <p>
+- True if the client wants to enable support for the
+- proposed async feature.
+- </p>
+- </dd><dt class=3D"field"><b><span class=3D"deprecated">enableDeferr=
edLoading</span>: bool<span style=3D"color:#999999"> (optional)</span></b><=
/dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p><b>Deprecated:</b> this feature is always enabled.</p>
+- <p>
+- True if the client wants to enable support for the
+- proposed deferred loading feature.
+- </p>
+- </dd><dt class=3D"field"><b><span class=3D"deprecated">enableEnums<=
/span>: bool<span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p><b>Deprecated:</b> this feature is always enabled.</p>
+- <p>
+- True if the client wants to enable support for the
+- proposed enum feature.
+- </p>
+- </dd><dt class=3D"field"><b><span class=3D"deprecated">enableNullAw=
areOperators</span>: bool<span style=3D"color:#999999"> (optional)</span></=
b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p><b>Deprecated:</b> this feature is always enabled.</p>
+- <p>
+- True if the client wants to enable support for the
+- proposed "null aware operators" feature.
+- </p>
+- </dd><dt class=3D"field"><b>enableSuperMixins: bool<span style=3D"c=
olor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the client wants to enable support for the
+- proposed "less restricted mixins" proposal (DEP 34).
+- </p>
+- </dd><dt class=3D"field"><b>generateDart2jsHints: bool<span style=
=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if hints that are specific to dart2js should be
+- generated. This option is ignored if generateHints is false.
+- </p>
+- </dd><dt class=3D"field"><b>generateHints: bool<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if hints should be generated as part of generating
+- errors and warnings.
+- </p>
+- </dd><dt class=3D"field"><b>generateLints: bool<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if lints should be generated as part of generating
+- errors and warnings.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Analysi=
sService">AnalysisService: String</a></dt><dd>
+- <p>
+- An enumeration of the services provided by the analysis domain that
+- are related to a specific list of files.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">CLOSING_LABELS</dt><dt class=3D"value">FOLDING<=
/dt><dt class=3D"value">HIGHLIGHTS</dt><dt class=3D"value">IMPLEMENTED</dt>=
<dt class=3D"value">INVALIDATE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- This service is not currently implemented and will become a
+- GeneralAnalysisService in a future release.
+- </p>
+- </dd><dt class=3D"value">NAVIGATION</dt><dt class=3D"value">OCCURRE=
NCES</dt><dt class=3D"value">OUTLINE</dt><dt class=3D"value">OVERRIDES</dt>=
</dl></dd><dt class=3D"typeDefinition"><a name=3D"type_AnalysisStatus">Anal=
ysisStatus: object</a></dt><dd>
+- <p>
+- An indication of the current state of analysis.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>isAnalyzing: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>True if analysis is currently being performed.</p>
+- </dd><dt class=3D"field"><b>analysisTarget: String<span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the current target of analysis. This field is
+- omitted if analyzing is false.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_ChangeC=
ontentOverlay">ChangeContentOverlay: object</a></dt><dd>
+- <p>
+- A directive to modify an existing file content overlay. One or more=
ranges
+- of text are deleted from the old file content overlay and replaced =
with
+- new text.
+- </p>
+- <p>
+- The edits are applied in the order in which they occur in the list.=
This
+- means that the offset of each edit must be correct under the assump=
tion
+- that all previous edits have been applied.
+- </p>
+- <p>
+- It is an error to use this overlay on a file that does not yet have=
a file
+- content overlay or that has had its overlay removed via
+- <a href=3D"#type_RemoveContentOverlay">RemoveContentOverlay</a>.
+- </p>
+- <p>
+- If any of the edits cannot be applied due to its offset or length b=
eing
+- out of range, an <tt>INVALID_OVERLAY_CHANGE</tt> error will be repo=
rted.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>type =3D "change"</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- </dd><dt class=3D"field"><b>edits: List<<a href=3D"#type_SourceE=
dit">SourceEdit</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The edits to be applied to the file.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Closing=
Label">ClosingLabel: object</a></dt><dd>
+- <p>
+- A label that is associated with a range of code that may be useful =
to
+- render at the end of the range to aid code readability. For example=
, a
+- constructor call that spans multiple lines may result in a closing =
label
+- to allow the constructor type/name to be rendered alongside the clo=
sing
+- parenthesis.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the construct being labelled.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the whole construct to be labelled.
+- </p>
+- </dd><dt class=3D"field"><b>label: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The label associated with this range that should be displayed t=
o the
+- user.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Complet=
ionId">CompletionId: String</a></dt><dd>
+-=20=20=20=20
+- <p>
+- An identifier used to associate completion results with a
+- completion request.
+- </p>
+- </dd><dt class=3D"typeDefinition"><a name=3D"type_CompletionSuggestion"=
>CompletionSuggestion: object</a></dt><dd>
+- <p>
+- A suggestion for how to complete partially entered text. Many of the
+- fields are optional, depending on the kind of element being suggest=
ed.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>kind: <a href=3D"#type_CompletionSuggestionK=
ind">CompletionSuggestionKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of element being suggested.
+- </p>
+- </dd><dt class=3D"field"><b>relevance: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The relevance of this completion suggestion where a higher numb=
er
+- indicates a higher relevance.
+- </p>
+- </dd><dt class=3D"field"><b>completion: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The identifier to be inserted if the suggestion is selected. If=
the
+- suggestion is for a method or function, the client might want to
+- additionally insert a template for the parameters. The informat=
ion
+- required in order to do so is contained in other fields.
+- </p>
+- </dd><dt class=3D"field"><b>selectionOffset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset, relative to the beginning of the completion, of whe=
re the
+- selection should be placed after insertion.
+- </p>
+- </dd><dt class=3D"field"><b>selectionLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The number of characters that should be selected after insertio=
n.
+- </p>
+- </dd><dt class=3D"field"><b>isDeprecated: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the suggested element is deprecated.
+- </p>
+- </dd><dt class=3D"field"><b>isPotential: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the element is not known to be valid for the target. Th=
is
+- happens if the type of the target is dynamic.
+- </p>
+- </dd><dt class=3D"field"><b>docSummary: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An abbreviated version of the Dartdoc associated with the eleme=
nt
+- being suggested, This field is omitted if there is no Dartdoc
+- associated with the element.
+- </p>
+- </dd><dt class=3D"field"><b>docComplete: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The Dartdoc associated with the element being suggested. This f=
ield is
+- omitted if there is no Dartdoc associated with the element.
+- </p>
+- </dd><dt class=3D"field"><b>declaringType: String<span style=3D"col=
or:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The class that declares the element being suggested. This field=
is
+- omitted if the suggested element is not a member of a class.
+- </p>
+- </dd><dt class=3D"field"><b>defaultArgumentListString: String<span =
style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A default String for use in generating argument list source con=
tents
+- on the client side.
+- </p>
+- </dd><dt class=3D"field"><b>defaultArgumentListTextRanges: List<=
int><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Pairs of offsets and lengths describing 'defaultArgumentListStr=
ing'
+- text ranges suitable for use by clients to set up linked edits =
of
+- default argument source contents. For example, given an argumen=
t list
+- string 'x, y', the corresponding text range [0, 1, 3, 1], indic=
ates
+- two text ranges of length 1, starting at offsets 0 and 3. Clien=
ts can
+- use these ranges to treat the 'x' and 'y' values specially for =
linked
+- edits.
+- </p>
+- </dd><dt class=3D"field"><b>element: <a href=3D"#type_Element">Elem=
ent</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Information about the element reference being suggested.
+- </p>
+- </dd><dt class=3D"field"><b>returnType: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The return type of the getter, function or method or the type o=
f the
+- field being suggested. This field is omitted if the suggested e=
lement
+- is not a getter, function or method.
+- </p>
+- </dd><dt class=3D"field"><b>parameterNames: List<String><span=
style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The names of the parameters of the function or method being sug=
gested.
+- This field is omitted if the suggested element is not a setter,
+- function or method.
+- </p>
+- </dd><dt class=3D"field"><b>parameterTypes: List<String><span=
style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The types of the parameters of the function or method being sug=
gested.
+- This field is omitted if the parameterNames field is omitted.
+- </p>
+- </dd><dt class=3D"field"><b>requiredParameterCount: int<span style=
=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The number of required parameters for the function or method be=
ing
+- suggested. This field is omitted if the parameterNames field is
+- omitted.
+- </p>
+- </dd><dt class=3D"field"><b>hasNamedParameters: bool<span style=3D"=
color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the function or method being suggested has at least one=
named
+- parameter. This field is omitted if the parameterNames field is
+- omitted.
+- </p>
+- </dd><dt class=3D"field"><b>parameterName: String<span style=3D"col=
or:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the optional parameter being suggested. This field =
is
+- omitted if the suggestion is not the addition of an optional ar=
gument
+- within an argument list.
+- </p>
+- </dd><dt class=3D"field"><b>parameterType: String<span style=3D"col=
or:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The type of the options parameter being suggested. This field is
+- omitted if the parameterName field is omitted.
+- </p>
+- </dd><dt class=3D"field"><b>importUri: String<span style=3D"color:#=
999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The import to be added if the suggestion is out of scope and ne=
eds
+- an import to be added to be in scope.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Complet=
ionSuggestionKind">CompletionSuggestionKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of elements that can be included in a
+- completion suggestion.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">ARGUMENT_LIST</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of arguments for the method or function that is being
+- invoked. For this suggestion kind, the completion field is a
+- textual representation of the invocation and the parameterNames,
+- parameterTypes, and requiredParameterCount attributes are defin=
ed.
+- </p>
+- </dd><dt class=3D"value">IMPORT</dt><dt class=3D"value">IDENTIFIER<=
/dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The element identifier should be inserted at the completion
+- location. For example "someMethod" in <tt>import 'myLib.dart' s=
how
+- someMethod;</tt>. For suggestions of this kind, the element
+- attribute is defined and the completion field is the element's
+- identifier.
+- </p>
+- </dd><dt class=3D"value">INVOCATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The element is being invoked at the completion location. For
+- example, 'someMethod' in <tt>x.someMethod();</tt>. For suggesti=
ons
+- of this kind, the element attribute is defined and the completi=
on
+- field is the element's identifier.
+- </p>
+- </dd><dt class=3D"value">KEYWORD</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A keyword is being suggested. For suggestions of this kind, the
+- completion is the keyword.
+- </p>
+- </dd><dt class=3D"value">NAMED_ARGUMENT</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A named argument for the current call site is being suggested. =
For
+- suggestions of this kind, the completion is the named argument
+- identifier including a trailing ':' and a space.
+- </p>
+- </dd><dt class=3D"value">OPTIONAL_ARGUMENT</dt><dt class=3D"value">=
PARAMETER</dt></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Contex=
tData">ContextData: object</a></dt><dd>
+- <p>
+- Information about an analysis context.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the context.
+- </p>
+- </dd><dt class=3D"field"><b>explicitFileCount: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Explicitly analyzed files.
+- </p>
+- </dd><dt class=3D"field"><b>implicitFileCount: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Implicitly analyzed files.
+- </p>
+- </dd><dt class=3D"field"><b>workItemQueueLength: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The number of work items in the queue.
+- </p>
+- </dd><dt class=3D"field"><b>cacheEntryExceptions: List<String>=
;</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Exceptions associated with cache entries.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Element=
">Element: object</a></dt><dd>
+- <p>
+- Information about an element (something that can be declared in cod=
e).
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>kind: <a href=3D"#type_ElementKind">ElementK=
ind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of the element.
+- </p>
+- </dd><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the element. This is typically used as the label in=
the
+- outline.
+- </p>
+- </dd><dt class=3D"field"><b>location: <a href=3D"#type_Location">Lo=
cation</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The location of the name in the declaration of the element.
+- </p>
+- </dd><dt class=3D"field"><b>flags: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A bit-map containing the following flags:
+- </p>
+- <ul>
+- <li>
+- 0x01 - set if the element is explicitly or implicitly abstract
+- </li>
+- <li>
+- 0x02 - set if the element was declared to be =E2=80=98const=
=E2=80=99
+- </li>
+- <li>
+- 0x04 - set if the element was declared to be =E2=80=98final=
=E2=80=99
+- </li>
+- <li>
+- 0x08 - set if the element is a static member of a class or is=
a
+- top-level function or field
+- </li>
+- <li>
+- 0x10 - set if the element is private
+- </li>
+- <li>
+- 0x20 - set if the element is deprecated
+- </li>
+- </ul>
+- </dd><dt class=3D"field"><b>parameters: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The parameter list for the element. If the element is not a met=
hod or
+- function this field will not be defined. If the element doesn't=
have
+- parameters (e.g. getter), this field will not be defined. If the
+- element has zero parameters, this field will have a value of "(=
)".
+- </p>
+- </dd><dt class=3D"field"><b>returnType: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The return type of the element. If the element is not a method =
or
+- function this field will not be defined. If the element does no=
t have
+- a declared return type, this field will contain an empty string.
+- </p>
+- </dd><dt class=3D"field"><b>typeParameters: String<span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The type parameter list for the element. If the element doesn't=
have
+- type parameters, this field will not be defined.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Element=
Kind">ElementKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of elements.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">CLASS</dt><dt class=3D"value">CLASS_TYPE_ALIAS<=
/dt><dt class=3D"value">COMPILATION_UNIT</dt><dt class=3D"value">CONSTRUCTO=
R</dt><dt class=3D"value">CONSTRUCTOR_INVOCATION</dt><dt class=3D"value">EN=
UM</dt><dt class=3D"value">ENUM_CONSTANT</dt><dt class=3D"value">FIELD</dt>=
<dt class=3D"value">FILE</dt><dt class=3D"value">FUNCTION</dt><dt class=3D"=
value">FUNCTION_INVOCATION</dt><dt class=3D"value">FUNCTION_TYPE_ALIAS</dt>=
<dt class=3D"value">GETTER</dt><dt class=3D"value">LABEL</dt><dt class=3D"v=
alue">LIBRARY</dt><dt class=3D"value">LOCAL_VARIABLE</dt><dt class=3D"value=
">METHOD</dt><dt class=3D"value">PARAMETER</dt><dt class=3D"value">PREFIX</=
dt><dt class=3D"value">SETTER</dt><dt class=3D"value">TOP_LEVEL_VARIABLE</d=
t><dt class=3D"value">TYPE_PARAMETER</dt><dt class=3D"value">UNIT_TEST_GROU=
P</dt><dt class=3D"value">UNIT_TEST_TEST</dt><dt class=3D"value">UNKNOWN</d=
t></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_ExecutableFile">Ex=
ecutableFile: object</a></dt><dd>
+- <p>
+- A description of an executable file.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The path of the executable file.
+- </p>
+- </dd><dt class=3D"field"><b>kind: <a href=3D"#type_ExecutableKind">=
ExecutableKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of the executable file.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Executa=
bleKind">ExecutableKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of executable files.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">CLIENT</dt><dt class=3D"value">EITHER</dt><dt c=
lass=3D"value">NOT_EXECUTABLE</dt><dt class=3D"value">SERVER</dt></dl></dd>=
<dt class=3D"typeDefinition"><a name=3D"type_ExecutionContextId">ExecutionC=
ontextId: String</a></dt><dd>
+-=20=20=20=20
+- <p>
+- The identifier for a execution context.
+- </p>
+- </dd><dt class=3D"typeDefinition"><a name=3D"type_ExecutionService">Exe=
cutionService: String</a></dt><dd>
+- <p>
+- An enumeration of the services provided by the execution
+- domain.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">LAUNCH_DATA</dt></dl></dd><dt class=3D"typeDefi=
nition"><a name=3D"type_FileKind">FileKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of files.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">LIBRARY</dt><dt class=3D"value">PART</dt></dl><=
/dd><dt class=3D"typeDefinition"><a name=3D"type_FilePath">FilePath: String=
</a></dt><dd>
+-=20=20=20=20
+- <p>
+- The absolute, normalized path of a file.
+- </p>
+- <p>
+- If the format of a file path in a request is not valid, e.g. the pa=
th is
+- not absolute or is not normalized, then an error of type
+- <tt>INVALID_FILE_PATH_FORMAT</tt> will be generated.
+- </p>
+- </dd><dt class=3D"typeDefinition"><a name=3D"type_FoldingKind">FoldingK=
ind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of folding regions.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">COMMENT</dt><dt class=3D"value">CLASS_MEMBER</d=
t><dt class=3D"value">DIRECTIVES</dt><dt class=3D"value">DOCUMENTATION_COMM=
ENT</dt><dt class=3D"value">TOP_LEVEL_DECLARATION</dt></dl></dd><dt class=
=3D"typeDefinition"><a name=3D"type_FoldingRegion">FoldingRegion: object</a=
></dt><dd>
+- <p>
+- A description of a region that can be folded.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>kind: <a href=3D"#type_FoldingKind">FoldingK=
ind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of the region.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the region to be folded.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the region to be folded.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_General=
AnalysisService">GeneralAnalysisService: String</a></dt><dd>
+- <p>
+- An enumeration of the services provided by the analysis domain that=
are
+- general in nature (that is, are not specific to some list of files).
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">ANALYZED_FILES</dt></dl></dd><dt class=3D"typeD=
efinition"><a name=3D"type_HighlightRegion">HighlightRegion: object</a></dt=
><dd>
+- <p>
+- A description of a region that could have special highlighting asso=
ciated
+- with it.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>type: <a href=3D"#type_HighlightRegionType">=
HighlightRegionType</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The type of highlight associated with the region.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the region to be highlighted.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the region to be highlighted.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Highlig=
htRegionType">HighlightRegionType: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of highlighting that can be applied to =
files.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">ANNOTATION</dt><dt class=3D"value">BUILT_IN</dt=
><dt class=3D"value">CLASS</dt><dt class=3D"value">COMMENT_BLOCK</dt><dt cl=
ass=3D"value">COMMENT_DOCUMENTATION</dt><dt class=3D"value">COMMENT_END_OF_=
LINE</dt><dt class=3D"value">CONSTRUCTOR</dt><dt class=3D"value">DIRECTIVE<=
/dt><dt class=3D"value">DYNAMIC_TYPE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">DYNAMIC_LOCAL_VARIABLE_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">DYNAMIC_LOCAL_VARIABLE_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">DYNAMIC_PARAMETER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">DYNAMIC_PARAMETER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">ENUM</dt><dt class=3D"value">ENUM_CONSTANT=
</dt><dt class=3D"value">FIELD</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">FIELD_STATIC</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">FUNCTION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">FUNCTION_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">FUNCTION_TYPE_ALIAS</dt><dt class=3D"value=
">GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">IDENTIFIER_DEFAULT</dt><dt class=3D"value"=
>IMPORT_PREFIX</dt><dt class=3D"value">INSTANCE_FIELD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INSTANCE_FIELD_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INSTANCE_GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INSTANCE_GETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INSTANCE_METHOD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INSTANCE_METHOD_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INSTANCE_SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INSTANCE_SETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">INVALID_STRING_ESCAPE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">KEYWORD</dt><dt class=3D"value">LABEL</dt>=
<dt class=3D"value">LIBRARY_NAME</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">LITERAL_BOOLEAN</dt><dt class=3D"value">LI=
TERAL_DOUBLE</dt><dt class=3D"value">LITERAL_INTEGER</dt><dt class=3D"value=
">LITERAL_LIST</dt><dt class=3D"value">LITERAL_MAP</dt><dt class=3D"value">=
LITERAL_STRING</dt><dt class=3D"value">LOCAL_FUNCTION_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">LOCAL_FUNCTION_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">LOCAL_VARIABLE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">LOCAL_VARIABLE_DECLARATION</dt><dt class=
=3D"value">LOCAL_VARIABLE_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">METHOD</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">METHOD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">METHOD_DECLARATION_STATIC</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">METHOD_STATIC</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">PARAMETER</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_VARIABLE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 1 of highlight.</p>
+- </dd><dt class=3D"value">PARAMETER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">PARAMETER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">STATIC_FIELD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">STATIC_GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">STATIC_GETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">STATIC_METHOD_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">STATIC_METHOD_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">STATIC_SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">STATIC_SETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_FUNCTION_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_FUNCTION_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_GETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_GETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_SETTER_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_SETTER_REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TOP_LEVEL_VARIABLE_DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">TYPE_NAME_DYNAMIC</dt><dt class=3D"value">=
TYPE_PARAMETER</dt><dt class=3D"value">UNRESOLVED_INSTANCE_MEMBER_REFERENCE=
</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd><dt class=3D"value">VALID_STRING_ESCAPE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>Only for version 2 of highlight.</p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_HoverIn=
formation">HoverInformation: object</a></dt><dd>
+- <p>
+- The hover information associated with a specific location.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the range of characters that encompasses the
+- cursor position and has the same hover information as the
+- cursor position.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the range of characters that encompasses the
+- cursor position and has the same hover information as the
+- cursor position.
+- </p>
+- </dd><dt class=3D"field"><b>containingLibraryPath: String<span styl=
e=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The path to the defining compilation unit of the library
+- in which the referenced element is declared. This data is
+- omitted if there is no referenced element, or if the
+- element is declared inside an HTML file.
+- </p>
+- </dd><dt class=3D"field"><b>containingLibraryName: String<span styl=
e=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the library in which the referenced element is
+- declared. This data is omitted if there is no referenced
+- element, or if the element is declared inside an HTML
+- file.
+- </p>
+- </dd><dt class=3D"field"><b>containingClassDescription: String<span=
style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A human-readable description of the class declaring the element
+- being referenced. This data is omitted if there is no referenced
+- element, or if the element is not a class member.
+- </p>
+- </dd><dt class=3D"field"><b>dartdoc: String<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The dartdoc associated with the referenced element. Other
+- than the removal of the comment delimiters, including
+- leading asterisks in the case of a block comment, the
+- dartdoc is unprocessed markdown. This data is omitted if
+- there is no referenced element, or if the element has no
+- dartdoc.
+- </p>
+- </dd><dt class=3D"field"><b>elementDescription: String<span style=
=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A human-readable description of the element being
+- referenced. This data is omitted if there is no referenced
+- element.
+- </p>
+- </dd><dt class=3D"field"><b>elementKind: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A human-readable description of the kind of element being
+- referenced (such as "class" or "function type
+- alias"). This data is omitted if there is no referenced
+- element.
+- </p>
+- </dd><dt class=3D"field"><b>isDeprecated: bool<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the referenced element is deprecated.
+- </p>
+- </dd><dt class=3D"field"><b>parameter: String<span style=3D"color:#=
999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A human-readable description of the parameter
+- corresponding to the expression being hovered over. This
+- data is omitted if the location is not in an argument to a
+- function.
+- </p>
+- </dd><dt class=3D"field"><b>propagatedType: String<span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the propagated type of the expression. This
+- data is omitted if the location does not correspond to an
+- expression or if there is no propagated type information.
+- </p>
+- </dd><dt class=3D"field"><b>staticType: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the static type of the expression. This data
+- is omitted if the location does not correspond to an
+- expression.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Impleme=
ntedClass">ImplementedClass: object</a></dt><dd>
+- <p>
+- A description of a class that is implemented or extended.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the name of the implemented class.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the name of the implemented class.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Impleme=
ntedMember">ImplementedMember: object</a></dt><dd>
+- <p>
+- A description of a class member that is implemented or overridden.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the name of the implemented member.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the name of the implemented member.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Importe=
dElements">ImportedElements: object</a></dt><dd>
+- <p>
+- A description of the elements that are referenced in a region of a =
file
+- that come from a single imported library.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>path: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The absolute and normalized path of the file containing the lib=
rary.
+- </p>
+- </dd><dt class=3D"field"><b>prefix: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The prefix that was used when importing the library into the or=
iginal
+- source.
+- </p>
+- </dd><dt class=3D"field"><b>elements: List<String></b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The names of the elements imported from the library.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_KytheEn=
try">KytheEntry: object</a></dt><dd>
+- <p>
+- This object matches the format and documentation of the Entry object
+- documented in the
+- <a href=3D"https://kythe.io/docs/kythe-storage.html#_entry">Kythe S=
torage
+- Model</a>.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>source: <a href=3D"#type_KytheVName">KytheVN=
ame</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The ticket of the source node.
+- </p>
+- </dd><dt class=3D"field"><b>kind: String<span style=3D"color:#99999=
9"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An edge label. The schema defines which labels are meaningful.
+- </p>
+- </dd><dt class=3D"field"><b>target: <a href=3D"#type_KytheVName">Ky=
theVName</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The ticket of the target node.
+- </p>
+- </dd><dt class=3D"field"><b>fact: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A fact label. The schema defines which fact labels are meaningf=
ul.
+- </p>
+- </dd><dt class=3D"field"><b>value: List<int><span style=3D"co=
lor:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The <tt>String</tt> value of the fact.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_KytheVN=
ame">KytheVName: object</a></dt><dd>
+- <p>
+- This object matches the format and documentation of the Vector-Name=
object
+- documented in the
+- <a href=3D"https://kythe.io/docs/kythe-storage.html#_a_id_termvname=
_a_vector_name_strong_vname_strong">Kythe
+- Storage Model</a>.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>signature: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An opaque signature generated by the analyzer.
+- </p>
+- </dd><dt class=3D"field"><b>corpus: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The corpus of source code this <tt>KytheVName</tt> belongs to.
+- Loosely, a corpus is a collection of related files, such as the
+- contents of a given source repository.
+- </p>
+- </dd><dt class=3D"field"><b>root: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A corpus-specific root label, typically a directory path or pro=
ject
+- identifier, denoting a distinct subset of the corpus. This may =
also be
+- used to designate virtual collections like generated files.
+- </p>
+- </dd><dt class=3D"field"><b>path: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A path-structured label describing the =E2=80=9Clocation=E2=80=
=9D of the named object
+- relative to the corpus and the root.
+- </p>
+- </dd><dt class=3D"field"><b>language: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The language this name belongs to.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_LinkedE=
ditGroup">LinkedEditGroup: object</a></dt><dd>
+- <p>
+- A collection of positions that should be linked (edited simultaneou=
sly)
+- for the purposes of updating code after a source change. For exampl=
e, if a
+- set of edits introduced a new variable name, the group would contai=
n all
+- of the positions of the variable name so that if the client wanted =
to let
+- the user edit the variable name after the operation, all occurrence=
s of
+- the name could be edited simultaneously.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>positions: List<<a href=3D"#type_Position=
">Position</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The positions of the regions that should be edited simultaneous=
ly.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the regions that should be edited simultaneously.
+- </p>
+- </dd><dt class=3D"field"><b>suggestions: List<<a href=3D"#type_L=
inkedEditSuggestion">LinkedEditSuggestion</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Pre-computed suggestions for what every region might want to be
+- changed to.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_LinkedE=
ditSuggestion">LinkedEditSuggestion: object</a></dt><dd>
+- <p>
+- A suggestion of a value that could be used to replace all of the li=
nked
+- edit regions in a <a href=3D"#type_LinkedEditGroup">LinkedEditGroup=
</a>.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>value: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The value that could be used to replace all of the linked edit
+- regions.
+- </p>
+- </dd><dt class=3D"field"><b>kind: <a href=3D"#type_LinkedEditSugges=
tionKind">LinkedEditSuggestionKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of value being proposed.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_LinkedE=
ditSuggestionKind">LinkedEditSuggestionKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kind of values that can be suggested for a li=
nked
+- edit.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">METHOD</dt><dt class=3D"value">PARAMETER</dt><d=
t class=3D"value">TYPE</dt><dt class=3D"value">VARIABLE</dt></dl></dd><dt c=
lass=3D"typeDefinition"><a name=3D"type_Location">Location: object</a></dt>=
<dd>
+- <p>
+- A location (character range) within a file.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the range.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the range.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the range.
+- </p>
+- </dd><dt class=3D"field"><b>startLine: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The one-based index of the line containing the first character =
of the
+- range.
+- </p>
+- </dd><dt class=3D"field"><b>startColumn: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The one-based index of the column containing the first characte=
r of
+- the range.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Navigat=
ionRegion">NavigationRegion: object</a></dt><dd>
+- <p>
+- A description of a region from which the user can navigate to the
+- declaration of an element.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the region from which the user can navigate.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the region from which the user can navigate.
+- </p>
+- </dd><dt class=3D"field"><b>targets: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The indexes of the targets (in the enclosing navigation respons=
e) to
+- which the given region is bound. By opening the target, clients=
can
+- implement one form of navigation. This list cannot be empty.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Navigat=
ionTarget">NavigationTarget: object</a></dt><dd>
+- <p>
+- A description of a target to which the user can navigate.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>kind: <a href=3D"#type_ElementKind">ElementK=
ind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of the element.
+- </p>
+- </dd><dt class=3D"field"><b>fileIndex: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The index of the file (in the enclosing navigation response) to
+- navigate to.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the region to which the user can navigate.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the region to which the user can navigate.
+- </p>
+- </dd><dt class=3D"field"><b>startLine: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The one-based index of the line containing the first character =
of the
+- region.
+- </p>
+- </dd><dt class=3D"field"><b>startColumn: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The one-based index of the column containing the first characte=
r of
+- the region.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Occurre=
nces">Occurrences: object</a></dt><dd>
+- <p>
+- A description of the references to a single element within a single=
file.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>element: <a href=3D"#type_Element">Element</=
a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The element that was referenced.
+- </p>
+- </dd><dt class=3D"field"><b>offsets: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offsets of the name of the referenced element within the fi=
le.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the name of the referenced element.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Outline=
">Outline: object</a></dt><dd>
+- <p>
+- An node in the outline structure of a file.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>element: <a href=3D"#type_Element">Element</=
a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A description of the element represented by this node.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the first character of the element. This is diffe=
rent
+- than the offset in the Element, which is the offset of the name=
of the
+- element. It can be used, for example, to map locations in the f=
ile
+- back to an outline.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the element.
+- </p>
+- </dd><dt class=3D"field"><b>children: List<<a href=3D"#type_Outl=
ine">Outline</a>><span style=3D"color:#999999"> (optional)</span></b></d=
t><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The children of the node. The field will be omitted if the node=
has no
+- children.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Overrid=
denMember">OverriddenMember: object</a></dt><dd>
+- <p>
+- A description of a member that is being overridden.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>element: <a href=3D"#type_Element">Element</=
a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The element that is being overridden.
+- </p>
+- </dd><dt class=3D"field"><b>className: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the class in which the member is defined.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Overrid=
e">Override: object</a></dt><dd>
+- <p>
+- A description of a member that overrides an inherited member.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the name of the overriding member.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the name of the overriding member.
+- </p>
+- </dd><dt class=3D"field"><b>superclassMember: <a href=3D"#type_Over=
riddenMember">OverriddenMember</a><span style=3D"color:#999999"> (optional)=
</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The member inherited from a superclass that is overridden
+- by the overriding member. The field is omitted if there is
+- no superclass member, in which case there must be at least
+- one interface member.
+- </p>
+- </dd><dt class=3D"field"><b>interfaceMembers: List<<a href=3D"#t=
ype_OverriddenMember">OverriddenMember</a>><span style=3D"color:#999999"=
> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The members inherited from interfaces that are overridden
+- by the overriding member. The field is omitted if there
+- are no interface members, in which case there must be a
+- superclass member.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Positio=
n">Position: object</a></dt><dd>
+- <p>
+- A position within a file.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the position.
+- </p>
+- </dd><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the position.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Postfix=
TemplateDescriptor">PostfixTemplateDescriptor: object</a></dt><dd>
+- <p>
+- The description of a postfix completion template.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The template name, shown in the UI.
+- </p>
+- </dd><dt class=3D"field"><b>key: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The unique template key, not shown in the UI.
+- </p>
+- </dd><dt class=3D"field"><b>example: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A short example of the transformation performed when the templa=
te is
+- applied.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_PubStat=
us">PubStatus: object</a></dt><dd>
+- <p>
+- An indication of the current state of pub execution.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>isListingPackageDirs: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the server is currently running pub to produce a list of
+- package directories.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Refacto=
ringFeedback">RefactoringFeedback: object</a></dt><dd>
+- <p>
+- An abstract superclass of all refactoring feedbacks.
+- </p>
+-=20=20=20=20
+- <dl></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RefactoringK=
ind">RefactoringKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of refactorings that can be created.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">CONVERT_GETTER_TO_METHOD</dt><dt class=3D"value=
">CONVERT_METHOD_TO_GETTER</dt><dt class=3D"value">EXTRACT_LOCAL_VARIABLE</=
dt><dt class=3D"value">EXTRACT_METHOD</dt><dt class=3D"value">INLINE_LOCAL_=
VARIABLE</dt><dt class=3D"value">INLINE_METHOD</dt><dt class=3D"value">MOVE=
_FILE</dt><dt class=3D"value">RENAME</dt><dt class=3D"value">SORT_MEMBERS</=
dt></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RefactoringMethod=
Parameter">RefactoringMethodParameter: object</a></dt><dd>
+-=20=20=20=20
+- <p>
+- A description of a parameter in a method refactoring.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>id: String<span style=3D"color:#999999"> (op=
tional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The unique identifier of the parameter. Clients may omit this f=
ield
+- for the parameters they want to add.
+- </p>
+- </dd><dt class=3D"field"><b>kind: <a href=3D"#type_RefactoringMetho=
dParameterKind">RefactoringMethodParameterKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of the parameter.
+- </p>
+- </dd><dt class=3D"field"><b>type: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The type that should be given to the parameter, or the return t=
ype of
+- the parameter's function type.
+- </p>
+- </dd><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name that should be given to the parameter.
+- </p>
+- </dd><dt class=3D"field"><b>parameters: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The parameter list of the parameter's function type. If the par=
ameter
+- is not of a function type, this field will not be defined. If t=
he
+- function type has zero parameters, this field will have a value=
of
+- '()'.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Refacto=
ringMethodParameterKind">RefactoringMethodParameterKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of parameters.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">REQUIRED</dt><dt class=3D"value">POSITIONAL</dt=
><dt class=3D"value">NAMED</dt></dl></dd><dt class=3D"typeDefinition"><a na=
me=3D"type_RefactoringOptions">RefactoringOptions: object</a></dt><dd>
+- <p>
+- An abstract superclass of all refactoring options.
+- </p>
+-=20=20=20=20
+- <dl></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RefactoringP=
roblem">RefactoringProblem: object</a></dt><dd>
+- <p>
+- A description of a problem related to a refactoring.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>severity: <a href=3D"#type_RefactoringProble=
mSeverity">RefactoringProblemSeverity</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The severity of the problem being represented.
+- </p>
+- </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A human-readable description of the problem being represented.
+- </p>
+- </dd><dt class=3D"field"><b>location: <a href=3D"#type_Location">Lo=
cation</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The location of the problem being represented. This field is om=
itted
+- unless there is a specific location associated with the problem=
(such
+- as a location where an element being renamed will be shadowed).
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Refacto=
ringProblemSeverity">RefactoringProblemSeverity: String</a></dt><dd>
+- <p>
+- An enumeration of the severities of problems that can be returned b=
y the
+- refactoring requests.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">INFO</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A minor code problem. No example, because it is not used yet.
+- </p>
+- </dd><dt class=3D"value">WARNING</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A minor code problem. For example names of local variables shou=
ld be
+- camel case and start with a lower case letter. Staring the name=
of a
+- variable with an upper case is OK from the language point of vi=
ew, but
+- it is nice to warn the user.
+- </p>
+- </dd><dt class=3D"value">ERROR</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The refactoring technically can be performed, but there is a lo=
gical
+- problem. For example the name of a local variable being extract=
ed
+- conflicts with another name in the scope, or duplicate paramete=
r names
+- in the method being extracted, or a conflict between a paramete=
r name
+- and a local variable, etc. In some cases the location of the pr=
oblem
+- is also provided, so the IDE can show user the location and the
+- problem, and let the user decide whether they want to perform t=
he
+- refactoring. For example the name conflict might be expected, a=
nd the
+- user wants to fix it afterwards.
+- </p>
+- </dd><dt class=3D"value">FATAL</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A fatal error, which prevents performing the refactoring. For e=
xample
+- the name of a local variable being extracted is not a valid
+- identifier, or selection is not a valid expression.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_RemoveC=
ontentOverlay">RemoveContentOverlay: object</a></dt><dd>
+- <p>
+- A directive to remove an existing file content overlay. After proce=
ssing
+- this directive, the file contents will once again be read from the =
file
+- system.
+- </p>
+- <p>
+- If this directive is used on a file that doesn't currently have a c=
ontent
+- overlay, it has no effect.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>type =3D "remove"</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Request=
Error">RequestError: object</a></dt><dd>
+- <p>
+- An indication of a problem with the execution of the server,
+- typically in response to a request.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>code: <a href=3D"#type_RequestErrorCode">Req=
uestErrorCode</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A code that uniquely identifies the error that occurred.
+- </p>
+- </dd><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A short description of the error.
+- </p>
+- </dd><dt class=3D"field"><b>stackTrace: String<span style=3D"color:=
#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The stack trace associated with processing the request,
+- used for debugging the server.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_Request=
ErrorCode">RequestErrorCode: String</a></dt><dd>
+- <p>
+- An enumeration of the types of errors that can occur in the
+- execution of the server.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">CONTENT_MODIFIED</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.getErrors" or "analysis.getNavigation" request cou=
ld
+- not be satisfied because the content of the file changed before
+- the requested results could be computed.
+- </p>
+- </dd><dt class=3D"value">DEBUG_PORT_COULD_NOT_BE_OPENED</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The server was unable to open a port for the diagnostic server.
+- </p>
+- </dd><dt class=3D"value">FILE_NOT_ANALYZED</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A request specified a FilePath which does not match a file in
+- an analysis root, or the requested operation is not available
+- for the file.
+- </p>
+- </dd><dt class=3D"value">FORMAT_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "edit.format" request specified a FilePath
+- which does not match a Dart file in an analysis root.
+- </p>
+- </dd><dt class=3D"value">FORMAT_WITH_ERRORS</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "edit.format" request specified a file that contains syntax
+- errors.
+- </p>
+- </dd><dt class=3D"value">GET_ERRORS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.getErrors" request specified a FilePath
+- which does not match a file currently subject to
+- analysis.
+- </p>
+- </dd><dt class=3D"value">GET_IMPORTED_ELEMENTS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.getImportedElements" request specified a FilePath =
that
+- does not match a file currently subject to analysis.
+- </p>
+- </dd><dt class=3D"value">GET_KYTHE_ENTRIES_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.getKytheEntries" request specified a FilePath that=
does
+- not match a file that is currently subject to analysis.
+- </p>
+- </dd><dt class=3D"value">GET_NAVIGATION_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.getNavigation" request specified a FilePath
+- which does not match a file currently subject to
+- analysis.
+- </p>
+- </dd><dt class=3D"value">GET_REACHABLE_SOURCES_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.getReachableSources" request specified a FilePath
+- which does not match a file currently subject to
+- analysis.
+- </p>
+- </dd><dt class=3D"value">IMPORT_ELEMENTS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "edit.importElements" request specified a FilePath that does=
not
+- match a file currently subject to analysis.
+- </p>
+- </dd><dt class=3D"value">INVALID_ANALYSIS_ROOT</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A path passed as an argument to a request (such as
+- analysis.reanalyze) is required to be an analysis root, but isn=
't.
+- </p>
+- </dd><dt class=3D"value">INVALID_EXECUTION_CONTEXT</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The context root used to create an execution context does not
+- exist.
+- </p>
+- </dd><dt class=3D"value">INVALID_FILE_PATH_FORMAT</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The format of the given file path is invalid, e.g. is not
+- absolute and normalized.
+- </p>
+- </dd><dt class=3D"value">INVALID_OVERLAY_CHANGE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.updateContent" request contained a
+- ChangeContentOverlay object which can't be applied, due
+- to an edit having an offset or length that is out of
+- range.
+- </p>
+- </dd><dt class=3D"value">INVALID_PARAMETER</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- One of the method parameters was invalid.
+- </p>
+- </dd><dt class=3D"value">INVALID_REQUEST</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A malformed request was received.
+- </p>
+- </dd><dt class=3D"value">ORGANIZE_DIRECTIVES_ERROR</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "edit.organizeDirectives" request specified a Dart file that
+- cannot be analyzed. The reason is described in the message.
+- </p>
+- </dd><dt class=3D"value">REFACTORING_REQUEST_CANCELLED</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Another refactoring request was received during processing of
+- this one.
+- </p>
+- </dd><dt class=3D"value">SERVER_ALREADY_STARTED</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The analysis server has already been started (and hence
+- won't accept new connections).
+- </p>
+- <p>
+- This error is included for future expansion; at present
+- the analysis server can only speak to one client at a
+- time so this error will never occur.
+- </p>
+- </dd><dt class=3D"value">SERVER_ERROR</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An internal error occurred in the analysis server.
+- Also see the server.error notification.
+- </p>
+- </dd><dt class=3D"value">SORT_MEMBERS_INVALID_FILE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "edit.sortMembers" request specified a FilePath
+- which does not match a Dart file in an analysis root.
+- </p>
+- </dd><dt class=3D"value">SORT_MEMBERS_PARSE_ERRORS</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "edit.sortMembers" request specified a Dart file that has
+- scan or parse errors.
+- </p>
+- </dd><dt class=3D"value">UNANALYZED_PRIORITY_FILES</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An "analysis.setPriorityFiles" request includes one or
+- more files that are not being analyzed.
+- </p>
+- <p>
+- This is a legacy error; it will be removed before the
+- API reaches version 1.0.
+- </p>
+-=20=20=20=20=20=20=20=20
+- </dd><dt class=3D"value">UNKNOWN_REQUEST</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A request was received which the analysis server does
+- not recognize, or cannot handle in its current
+- configuration.
+- </p>
+- </dd><dt class=3D"value">UNKNOWN_SOURCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The analysis server was requested to perform an action
+- on a source that does not exist.
+- </p>
+- </dd><dt class=3D"value">UNSUPPORTED_FEATURE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The analysis server was requested to perform an action
+- which is not supported.
+- </p>
+- <p>
+- This is a legacy error; it will be removed before the
+- API reaches version 1.0.
+- </p>
+-=20=20=20=20=20=20=20=20
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SearchI=
d">SearchId: String</a></dt><dd>
+-=20=20=20=20
+- <p>
+- An identifier used to associate search results with a search
+- request.
+- </p>
+- </dd><dt class=3D"typeDefinition"><a name=3D"type_SearchResult">SearchR=
esult: object</a></dt><dd>
+- <p>
+- A single result from a search request.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>location: <a href=3D"#type_Location">Locatio=
n</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The location of the code that matched the search criteria.
+- </p>
+- </dd><dt class=3D"field"><b>kind: <a href=3D"#type_SearchResultKind=
">SearchResultKind</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The kind of element that was found or the kind of
+- reference that was found.
+- </p>
+- </dd><dt class=3D"field"><b>isPotential: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the result is a potential match but cannot be
+- confirmed to be a match. For example, if all references to
+- a method m defined in some class were requested, and a
+- reference to a method m from an unknown class were found,
+- it would be marked as being a potential match.
+- </p>
+- </dd><dt class=3D"field"><b>path: List<<a href=3D"#type_Element"=
>Element</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The elements that contain the result, starting with the
+- most immediately enclosing ancestor and ending with the
+- library.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SearchR=
esultKind">SearchResultKind: String</a></dt><dd>
+- <p>
+- An enumeration of the kinds of search results returned by the
+- search domain.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">DECLARATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The declaration of an element.
+- </p>
+- </dd><dt class=3D"value">INVOCATION</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The invocation of a function or method.
+- </p>
+- </dd><dt class=3D"value">READ</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A reference to a field, parameter or variable where it is being=
read.
+- </p>
+- </dd><dt class=3D"value">READ_WRITE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A reference to a field, parameter or variable where it is being=
read
+- and written.
+- </p>
+- </dd><dt class=3D"value">REFERENCE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A reference to an element.
+- </p>
+- </dd><dt class=3D"value">UNKNOWN</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- Some other kind of search result.
+- </p>
+- </dd><dt class=3D"value">WRITE</dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A reference to a field, parameter or variable where it is being
+- written.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_ServerS=
ervice">ServerService: String</a></dt><dd>
+- <p>
+- An enumeration of the services provided by the server domain.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"value">STATUS</dt></dl></dd><dt class=3D"typeDefinitio=
n"><a name=3D"type_SourceChange">SourceChange: object</a></dt><dd>
+- <p>
+- A description of a set of edits that implement a single conceptual =
change.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>message: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A human-readable description of the change to be applied.
+- </p>
+- </dd><dt class=3D"field"><b>edits: List<<a href=3D"#type_SourceF=
ileEdit">SourceFileEdit</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the edits used to effect the change, grouped by file.
+- </p>
+- </dd><dt class=3D"field"><b>linkedEditGroups: List<<a href=3D"#t=
ype_LinkedEditGroup">LinkedEditGroup</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the linked editing groups used to customize the chang=
es that
+- were made.
+- </p>
+- </dd><dt class=3D"field"><b>selection: <a href=3D"#type_Position">P=
osition</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The position that should be selected after the edits have been
+- applied.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SourceE=
dit">SourceEdit: object</a></dt><dd>
+- <p>
+- A description of a single change to a single file.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset of the region to be modified.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the region to be modified.
+- </p>
+- </dd><dt class=3D"field"><b>replacement: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The code that is to replace the specified region in the origina=
l code.
+- </p>
+- </dd><dt class=3D"field"><b>id: String<span style=3D"color:#999999"=
> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- An identifier that uniquely identifies this source edit from ot=
her
+- edits in the same response. This field is omitted unless a cont=
aining
+- structure needs to be able to identify the edit for some reason.
+- </p>
+- <p>
+- For example, some refactoring operations can produce edits that=
might
+- not be appropriate (referred to as potential edits). Such edits=
will
+- have an id so that they can be referenced. Edits in the same re=
sponse
+- that do not need to be referenced will not have an id.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_SourceF=
ileEdit">SourceFileEdit: object</a></dt><dd>
+- <p>
+- A description of a set of changes to a single file.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>file: <a href=3D"#type_FilePath">FilePath</a=
></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The file containing the code to be modified.
+- </p>
+- </dd><dt class=3D"field"><b><span class=3D"deprecated">fileStamp</s=
pan>: long</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The modification stamp of the file at the moment when the chang=
e was
+- created, in milliseconds since the "Unix epoch". Will be -1 if =
the
+- file did not exist and should be created. The client may use th=
is
+- field to make sure that the file was not changed since then, so=
it is
+- safe to apply the change.
+- </p>
+- </dd><dt class=3D"field"><b>edits: List<<a href=3D"#type_SourceE=
dit">SourceEdit</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- A list of the edits used to effect the change.
+- </p>
+- </dd></dl></dd><dt class=3D"typeDefinition"><a name=3D"type_TypeHie=
rarchyItem">TypeHierarchyItem: object</a></dt><dd>
+- <p>
+- A representation of a class in a type hierarchy.
+- </p>
+-=20=20=20=20
+- <dl><dt class=3D"field"><b>classElement: <a href=3D"#type_Element">Elem=
ent</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The class element represented by this item.
+- </p>
+- </dd><dt class=3D"field"><b>displayName: String<span style=3D"color=
:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name to be displayed for the class. This field will be
+- omitted if the display name is the same as the name of the
+- element. The display name is different if there is
+- additional type information to be displayed, such as type
+- arguments.
+- </p>
+- </dd><dt class=3D"field"><b>memberElement: <a href=3D"#type_Element=
">Element</a><span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The member in the class corresponding to the member on
+- which the hierarchy was requested. This field will be
+- omitted if the hierarchy was not requested for a member or
+- if the class does not have a corresponding member.
+- </p>
+- </dd><dt class=3D"field"><b>superclass: int<span style=3D"color:#99=
9999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The index of the item representing the superclass of
+- this class. This field will be omitted if this item
+- represents the class Object.
+- </p>
+- </dd><dt class=3D"field"><b>interfaces: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The indexes of the items representing the interfaces
+- implemented by this class. The list will be empty if
+- there are no implemented interfaces.
+- </p>
+- </dd><dt class=3D"field"><b>mixins: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The indexes of the items representing the mixins
+- referenced by this class. The list will be empty if
+- there are no classes mixed in to this class.
+- </p>
+- </dd><dt class=3D"field"><b>subclasses: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The indexes of the items representing the subtypes of
+- this class. The list will be empty if there are no
+- subtypes or if this item represents a supertype of the
+- pivot type.
+- </p>
+- </dd></dl></dd></dl>
+-
+- <h2><a name=3D"refactorings">Refactorings</a></h2>
+- <p>
+- This section contains additional information for each kind of
+- refactoring. In addition to a brief description of the
+- refactoring, there is a specification of the feedback that is
+- provided when a refactoring is requested using the
+- edit.getRefactoring request (designed to improve the UX)
+- and the options that may be provided to edit.getRefactoring.
+- </p>
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-=20=20
+-<dl><dt class=3D"refactoring">CONVERT_GETTER_TO_METHOD</dt><dd>
+- <p>
+- Convert a getter into a method by removing the keyword get
+- and adding an empty parameter list.
+- </p>
+- <p>
+- It is an error if the range contains anything other than all
+- or part of the name of a single getter.
+- </p>
+- <h4>Feedback:</h4><p>none</p><h4>Options:</h4><p>none</p></dd><dt class=
=3D"refactoring">CONVERT_METHOD_TO_GETTER</dt><dd>
+- <p>
+- Convert a method into a getter by adding the keyword get and
+- removing the parameter list.
+- </p>
+- <p>
+- It is an error if the range contains anything other than all
+- or part of the name of a single method or if the method has
+- a non-empty parameter list.
+- </p>
+- <h4>Feedback:</h4><p>none</p><h4>Options:</h4><p>none</p></dd><dt class=
=3D"refactoring">EXTRACT_LOCAL_VARIABLE</dt><dd>
+- <p>
+- Create a local variable initialized by the expression that covers
+- the specified selection.
+- </p>
+- <p>
+- It is an error if the selection range is not covered by a
+- complete expression.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>Feedback:</h4><dl><dt class=3D"field"><b>coveringExpressionOffsets:=
List<int><span style=3D"color:#999999"> (optional)</span></b></dt><d=
d>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offsets of the expressions that cover the specified
+- selection, from the down most to the up most.
+- </p>
+- </dd><dt class=3D"field"><b>coveringExpressionLengths: List<int&=
gt;<span style=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The lengths of the expressions that cover the specified
+- selection, from the down most to the up most.
+- </p>
+- </dd><dt class=3D"field"><b>names: List<String></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The proposed names for the local variable.
+- </p>
+- </dd><dt class=3D"field"><b>offsets: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offsets of the expressions that would be replaced by
+- a reference to the variable.
+- </p>
+- </dd><dt class=3D"field"><b>lengths: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The lengths of the expressions that would be replaced by
+- a reference to the variable. The lengths correspond to
+- the offsets. In other words, for a given expression, if
+- the offset of that expression is <tt>offsets[i]</tt>, then
+- the length of that expression is <tt>lengths[i]</tt>.
+- </p>
+- </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>name: String<=
/b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name that the local variable should be given.
+- </p>
+- </dd><dt class=3D"field"><b>extractAll: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if all occurrences of the expression within the
+- scope in which the variable will be defined should be
+- replaced by a reference to the local variable. The
+- expression used to initiate the refactoring will always
+- be replaced.
+- </p>
+- </dd></dl></dd><dt class=3D"refactoring">EXTRACT_METHOD</dt><dd>
+- <p>
+- Create a method whose body is the specified expression or
+- list of statements, possibly augmented with a return
+- statement.
+- </p>
+- <p>
+- It is an error if the range contains anything other than a
+- complete expression (no partial expressions are allowed) or
+- a complete sequence of statements.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>Feedback:</h4><dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset to the beginning of the expression or
+- statements that will be extracted.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the expression or statements that will be
+- extracted.
+- </p>
+- </dd><dt class=3D"field"><b>returnType: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The proposed return type for the method.
+- If the returned element does not have a declared return type,
+- this field will contain an empty string.
+- </p>
+- </dd><dt class=3D"field"><b>names: List<String></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The proposed names for the method.
+- </p>
+- </dd><dt class=3D"field"><b>canCreateGetter: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if a getter could be created rather than a method.
+- </p>
+- </dd><dt class=3D"field"><b>parameters: List<<a href=3D"#type_Re=
factoringMethodParameter">RefactoringMethodParameter</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The proposed parameters for the method.
+- </p>
+- </dd><dt class=3D"field"><b>offsets: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offsets of the expressions or statements that would
+- be replaced by an invocation of the method.
+- </p>
+- </dd><dt class=3D"field"><b>lengths: List<int></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The lengths of the expressions or statements that would
+- be replaced by an invocation of the method. The lengths
+- correspond to the offsets. In other words, for a given
+- expression (or block of statements), if the offset of
+- that expression is <tt>offsets[i]</tt>, then the length
+- of that expression is <tt>lengths[i]</tt>.
+- </p>
+- </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>returnType: S=
tring</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The return type that should be defined for the method.
+- </p>
+- </dd><dt class=3D"field"><b>createGetter: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if a getter should be created rather than a
+- method. It is an error if this field is true and the
+- list of parameters is non-empty.
+- </p>
+- </dd><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name that the method should be given.
+- </p>
+- </dd><dt class=3D"field"><b>parameters: List<<a href=3D"#type_Re=
factoringMethodParameter">RefactoringMethodParameter</a>></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The parameters that should be defined for the method.
+- </p>
+- <p>
+- It is an error if a REQUIRED or NAMED parameter follows a
+- POSITIONAL parameter.
+- It is an error if a REQUIRED or POSITIONAL parameter follows a
+- NAMED parameter.
+- </p>
+- <ul>
+- <li>
+- To change the order and/or update proposed parameters, add
+- parameters with the same identifiers as proposed.
+- </li>
+- <li>To add new parameters, omit their identifier.</li>
+- <li>To remove some parameters, omit them in this list.</li>
+- </ul>
+- </dd><dt class=3D"field"><b>extractAll: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if all occurrences of the expression or statements
+- should be replaced by an invocation of the method. The
+- expression or statements used to initiate the
+- refactoring will always be replaced.
+- </p>
+- </dd></dl></dd><dt class=3D"refactoring">INLINE_LOCAL_VARIABLE</dt>=
<dd>
+- <p>
+- Inline the initializer expression of a local variable in
+- place of any references to that variable.
+- </p>
+- <p>
+- It is an error if the range contains anything other than all
+- or part of the name of a single local variable.
+- </p>
+-=20=20=20=20
+- <h4>Feedback:</h4><dl><dt class=3D"field"><b>name: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the variable being inlined.
+- </p>
+- </dd><dt class=3D"field"><b>occurrences: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The number of times the variable occurs.
+- </p>
+- </dd></dl><h4>Options:</h4><p>none</p></dd><dt class=3D"refactoring=
">INLINE_METHOD</dt><dd>
+- <p>
+- Inline a method in place of one or all references to that
+- method.
+- </p>
+- <p>
+- It is an error if the range contains anything other than all
+- or part of the name of a single method.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>Feedback:</h4><dl><dt class=3D"field"><b>className: String<span sty=
le=3D"color:#999999"> (optional)</span></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the class enclosing the method being inlined.
+- If not a class member is being inlined, this field will be abse=
nt.
+- </p>
+- </dd><dt class=3D"field"><b>methodName: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name of the method (or function) being inlined.
+- </p>
+- </dd><dt class=3D"field"><b>isDeclaration: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the declaration of the method is selected.
+- So all references should be inlined.
+- </p>
+- </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>deleteSource:=
bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if the method being inlined should be removed.
+- It is an error if this field is true and inlineAll is false.
+- </p>
+- </dd><dt class=3D"field"><b>inlineAll: bool</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- True if all invocations of the method should be inlined,
+- or false if only the invocation site used to create this
+- refactoring should be inlined.
+- </p>
+- </dd></dl></dd><dt class=3D"refactoring">MOVE_FILE</dt><dd>
+- <p>
+- Move the given file and update all of the references to that file
+- and from it. The move operation is supported in general case - for
+- renaming a file in the same folder, moving it to a different folder
+- or both.
+- </p>
+- <p>
+- The refactoring must be activated before an actual file moving
+- operation is performed.
+- </p>
+- <p>
+- The "offset" and "length" fields from the request are ignored, but =
the
+- file specified in the request specifies the file to be moved.
+- </p>
+-=20=20=20=20
+- <h4>Feedback:</h4><p>none</p><h4>Options:</h4><dl><dt class=3D"field"><=
b>newFile: <a href=3D"#type_FilePath">FilePath</a></b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The new file path to which the given file is being moved.
+- </p>
+- </dd></dl></dd><dt class=3D"refactoring">RENAME</dt><dd>
+- <p>
+- Rename a given element and all of the references to that
+- element.
+- </p>
+- <p>
+- It is an error if the range contains anything other than all
+- or part of the name of a single function (including methods,
+- getters and setters), variable (including fields, parameters
+- and local variables), class or function type.
+- </p>
+-=20=20=20=20
+-=20=20=20=20
+- <h4>Feedback:</h4><dl><dt class=3D"field"><b>offset: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The offset to the beginning of the name selected to be
+- renamed.
+- </p>
+- </dd><dt class=3D"field"><b>length: int</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The length of the name selected to be renamed.
+- </p>
+- </dd><dt class=3D"field"><b>elementKindName: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The human-readable description of the kind of element being
+- renamed (such as "class" or "function type
+- alias").
+- </p>
+- </dd><dt class=3D"field"><b>oldName: String</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The old name of the element before the refactoring.
+- </p>
+- </dd></dl><h4>Options:</h4><dl><dt class=3D"field"><b>newName: Stri=
ng</b></dt><dd>
+-=20=20=20=20=20=20=20=20
+- <p>
+- The name that the element should have after the
+- refactoring.
+- </p>
+- </dd></dl></dd></dl>
+-<h2>Errors</h2>
+-<p>
+- This section contains a list of all of the errors that are
+- produced by the server and the data that is returned with each.
+-</p>
+-<p>
+- TODO: TBD
+-</p>
+-<h2 class=3D"domain"><a name=3D"index">Index</a></h2>
+-<h3>Domains</h3><h4>server (<a href=3D"#domain_server">=E2=86=91</a>)</h4=
><div class=3D"subindex"><h5>Requests</h5><ul><li><a href=3D"#request_serve=
r.getVersion">getVersion</a></li><li><a href=3D"#request_server.shutdown">s=
hutdown</a></li><li><a href=3D"#request_server.setSubscriptions">setSubscri=
ptions</a></li></ul><h5>Notifications</h5><div class=3D"subindex"><ul><li><=
a href=3D"#notification_server.connected">connected</a></li><li><a href=3D"=
#notification_server.error">error</a></li><li><a href=3D"#notification_serv=
er.status">status</a></li></ul></div></div><h4>analysis (<a href=3D"#domain=
_analysis">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Requests</h5><ul>=
<li><a href=3D"#request_analysis.getErrors">getErrors</a></li><li><a href=
=3D"#request_analysis.getHover">getHover</a></li><li><a href=3D"#request_an=
alysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href=
=3D"#request_analysis.getNavigation">getNavigation</a></li><li><a href=3D"#=
request_analysis.getReachableSources">getReachableSources</a></li><li><a hr=
ef=3D"#request_analysis.reanalyze">reanalyze</a></li><li><a href=3D"#reques=
t_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href=3D"#reque=
st_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a=
href=3D"#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><=
a href=3D"#request_analysis.setSubscriptions">setSubscriptions</a></li><li>=
<a href=3D"#request_analysis.updateContent">updateContent</a></li><li><a hr=
ef=3D"#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notif=
ications</h5><div class=3D"subindex"><ul><li><a href=3D"#notification_analy=
sis.analyzedFiles">analyzedFiles</a></li><li><a href=3D"#notification_analy=
sis.closingLabels">closingLabels</a></li><li><a href=3D"#notification_analy=
sis.errors">errors</a></li><li><a href=3D"#notification_analysis.flushResul=
ts">flushResults</a></li><li><a href=3D"#notification_analysis.folding">fol=
ding</a></li><li><a href=3D"#notification_analysis.highlights">highlights</=
a></li><li><a href=3D"#notification_analysis.implemented">implemented</a></=
li><li><a href=3D"#notification_analysis.invalidate">invalidate</a></li><li=
><a href=3D"#notification_analysis.navigation">navigation</a></li><li><a hr=
ef=3D"#notification_analysis.occurrences">occurrences</a></li><li><a href=
=3D"#notification_analysis.outline">outline</a></li><li><a href=3D"#notific=
ation_analysis.overrides">overrides</a></li></ul></div></div><h4>completion=
(<a href=3D"#domain_completion">=E2=86=91</a>)</h4><div class=3D"subindex"=
><h5>Requests</h5><ul><li><a href=3D"#request_completion.getSuggestions">ge=
tSuggestions</a></li></ul><h5>Notifications</h5><div class=3D"subindex"><ul=
><li><a href=3D"#notification_completion.results">results</a></li></ul></di=
v></div><h4>search (<a href=3D"#domain_search">=E2=86=91</a>)</h4><div clas=
s=3D"subindex"><h5>Requests</h5><ul><li><a href=3D"#request_search.findElem=
entReferences">findElementReferences</a></li><li><a href=3D"#request_search=
.findMemberDeclarations">findMemberDeclarations</a></li><li><a href=3D"#req=
uest_search.findMemberReferences">findMemberReferences</a></li><li><a href=
=3D"#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a><=
/li><li><a href=3D"#request_search.getTypeHierarchy">getTypeHierarchy</a></=
li></ul><h5>Notifications</h5><div class=3D"subindex"><ul><li><a href=3D"#n=
otification_search.results">results</a></li></ul></div></div><h4>edit (<a h=
ref=3D"#domain_edit">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Request=
s</h5><ul><li><a href=3D"#request_edit.format">format</a></li><li><a href=
=3D"#request_edit.getAssists">getAssists</a></li><li><a href=3D"#request_ed=
it.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href=
=3D"#request_edit.getFixes">getFixes</a></li><li><a href=3D"#request_edit.g=
etRefactoring">getRefactoring</a></li><li><a href=3D"#request_edit.sortMemb=
ers">sortMembers</a></li><li><a href=3D"#request_edit.organizeDirectives">o=
rganizeDirectives</a></li></ul></div><h4>execution (<a href=3D"#domain_exec=
ution">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Requests</h5><ul><li>=
<a href=3D"#request_execution.createContext">createContext</a></li><li><a h=
ref=3D"#request_execution.deleteContext">deleteContext</a></li><li><a href=
=3D"#request_execution.mapUri">mapUri</a></li><li><a href=3D"#request_execu=
tion.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5>=
<div class=3D"subindex"><ul><li><a href=3D"#notification_execution.launchDa=
ta">launchData</a></li></ul></div></div><h4>diagnostic (<a href=3D"#domain_=
diagnostic">=E2=86=91</a>)</h4><div class=3D"subindex"><h5>Requests</h5><ul=
><li><a href=3D"#request_diagnostic.getDiagnostics">getDiagnostics</a></li>=
<li><a href=3D"#request_diagnostic.getServerPort">getServerPort</a></li></u=
l></div><h3>Types (<a href=3D"#types">=E2=86=91</a>)</h3><div class=3D"subi=
ndex"><ul><li><a href=3D"#type_AddContentOverlay">AddContentOverlay</a></li=
><li><a href=3D"#type_AnalysisError">AnalysisError</a></li><li><a href=3D"#=
type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href=3D"#type_An=
alysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href=3D"#type_Ana=
lysisErrorType">AnalysisErrorType</a></li><li><a href=3D"#type_AnalysisOpti=
ons">AnalysisOptions</a></li><li><a href=3D"#type_AnalysisService">Analysis=
Service</a></li><li><a href=3D"#type_AnalysisStatus">AnalysisStatus</a></li=
><li><a href=3D"#type_ChangeContentOverlay">ChangeContentOverlay</a></li><l=
i><a href=3D"#type_ClosingLabel">ClosingLabel</a></li><li><a href=3D"#type_=
CompletionId">CompletionId</a></li><li><a href=3D"#type_CompletionSuggestio=
n">CompletionSuggestion</a></li><li><a href=3D"#type_CompletionSuggestionKi=
nd">CompletionSuggestionKind</a></li><li><a href=3D"#type_ContextData">Cont=
extData</a></li><li><a href=3D"#type_Element">Element</a></li><li><a href=
=3D"#type_ElementKind">ElementKind</a></li><li><a href=3D"#type_ExecutableF=
ile">ExecutableFile</a></li><li><a href=3D"#type_ExecutableKind">Executable=
Kind</a></li><li><a href=3D"#type_ExecutionContextId">ExecutionContextId</a=
></li><li><a href=3D"#type_ExecutionService">ExecutionService</a></li><li><=
a href=3D"#type_FileKind">FileKind</a></li><li><a href=3D"#type_FilePath">F=
ilePath</a></li><li><a href=3D"#type_FoldingKind">FoldingKind</a></li><li><=
a href=3D"#type_FoldingRegion">FoldingRegion</a></li><li><a href=3D"#type_G=
eneralAnalysisService">GeneralAnalysisService</a></li><li><a href=3D"#type_=
HighlightRegion">HighlightRegion</a></li><li><a href=3D"#type_HighlightRegi=
onType">HighlightRegionType</a></li><li><a href=3D"#type_HoverInformation">=
HoverInformation</a></li><li><a href=3D"#type_ImplementedClass">Implemented=
Class</a></li><li><a href=3D"#type_ImplementedMember">ImplementedMember</a>=
</li><li><a href=3D"#type_ImportedElements">ImportedElements</a></li><li><a=
href=3D"#type_KytheEntry">KytheEntry</a></li><li><a href=3D"#type_KytheVNa=
me">KytheVName</a></li><li><a href=3D"#type_LinkedEditGroup">LinkedEditGrou=
p</a></li><li><a href=3D"#type_LinkedEditSuggestion">LinkedEditSuggestion</=
a></li><li><a href=3D"#type_LinkedEditSuggestionKind">LinkedEditSuggestionK=
ind</a></li><li><a href=3D"#type_Location">Location</a></li><li><a href=3D"=
#type_NavigationRegion">NavigationRegion</a></li><li><a href=3D"#type_Navig=
ationTarget">NavigationTarget</a></li><li><a href=3D"#type_Occurrences">Occ=
urrences</a></li><li><a href=3D"#type_Outline">Outline</a></li><li><a href=
=3D"#type_OverriddenMember">OverriddenMember</a></li><li><a href=3D"#type_O=
verride">Override</a></li><li><a href=3D"#type_Position">Position</a></li><=
li><a href=3D"#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a=
></li><li><a href=3D"#type_PubStatus">PubStatus</a></li><li><a href=3D"#typ=
e_RefactoringFeedback">RefactoringFeedback</a></li><li><a href=3D"#type_Ref=
actoringKind">RefactoringKind</a></li><li><a href=3D"#type_RefactoringMetho=
dParameter">RefactoringMethodParameter</a></li><li><a href=3D"#type_Refacto=
ringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href=
=3D"#type_RefactoringOptions">RefactoringOptions</a></li><li><a href=3D"#ty=
pe_RefactoringProblem">RefactoringProblem</a></li><li><a href=3D"#type_Refa=
ctoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href=3D"#=
type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href=3D"#typ=
e_RequestError">RequestError</a></li><li><a href=3D"#type_RequestErrorCode"=
>RequestErrorCode</a></li><li><a href=3D"#type_SearchId">SearchId</a></li><=
li><a href=3D"#type_SearchResult">SearchResult</a></li><li><a href=3D"#type=
_SearchResultKind">SearchResultKind</a></li><li><a href=3D"#type_ServerServ=
ice">ServerService</a></li><li><a href=3D"#type_SourceChange">SourceChange<=
/a></li><li><a href=3D"#type_SourceEdit">SourceEdit</a></li><li><a href=3D"=
#type_SourceFileEdit">SourceFileEdit</a></li><li><a href=3D"#type_TypeHiera=
rchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href=3D=
"#refactorings">=E2=86=91</a>)</h3><div class=3D"subindex"><ul><li><a href=
=3D"#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li=
><li><a href=3D"#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GE=
TTER</a></li><li><a href=3D"#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LO=
CAL_VARIABLE</a></li><li><a href=3D"#refactoring_EXTRACT_METHOD">EXTRACT_ME=
THOD</a></li><li><a href=3D"#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCA=
L_VARIABLE</a></li><li><a href=3D"#refactoring_INLINE_METHOD">INLINE_METHOD=
</a></li><li><a href=3D"#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a hr=
ef=3D"#refactoring_RENAME">RENAME</a></li></ul></div>
+-
+-
+-</body></html>
+\ No newline at end of file
+diff --git a/pkg/analysis_server/lib/plugin/analysis/occurrences/occurrenc=
es_core.dart b/pkg/analysis_server/lib/plugin/analysis/occurrences/occurren=
ces_core.dart
+deleted file mode 100644
+index 22a85fd8135..00000000000
+--- a/pkg/analysis_server/lib/plugin/analysis/occurrences/occurrences_core=
.dart
++++ /dev/null
+@@ -1,17 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'package:analyzer_plugin/protocol/protocol_common.dart' show Occur=
rences;
+-
+-/**
+- * An object used to record occurrences into.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class OccurrencesCollector {
+- /**
+- * Record a new element occurrences.
+- */
+- void addOccurrences(Occurrences occurrences);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/assist/assist_core.dart b=
/pkg/analysis_server/lib/plugin/edit/assist/assist_core.dart
+deleted file mode 100644
+index f4d1e6254e5..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/assist/assist_core.dart
++++ /dev/null
+@@ -1,90 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer/src/generated/source.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart'
+- show SourceChange;
+-import 'package:analyzer_plugin/utilities/assist/assist.dart';
+-
+-/**
+- * A description of a single proposed assist.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Assist {
+- /**
+- * An empty list of assists.
+- */
+- static const List<Assist> EMPTY_LIST =3D const <Assist>[];
+-
+- /**
+- * A comparator that can be used to sort assists by their relevance. Th=
e most
+- * relevant assists will be sorted before assists with a lower relevanc=
e.
+- */
+- static final Comparator<Assist> SORT_BY_RELEVANCE =3D
+- (Assist firstAssist, Assist secondAssist) =3D>
+- firstAssist.kind.priority - secondAssist.kind.priority;
+-
+- /**
+- * A description of the assist being proposed.
+- */
+- final AssistKind kind;
+-
+- /**
+- * The change to be made in order to apply the assist.
+- */
+- final SourceChange change;
+-
+- /**
+- * Initialize a newly created assist to have the given [kind] and [chan=
ge].
+- */
+- Assist(this.kind, this.change);
+-
+- @override
+- String toString() {
+- return 'Assist(kind=3D$kind, change=3D$change)';
+- }
+-}
+-
+-/**
+- * An object used to provide context information for [AssistContributor]s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class AssistContext {
+- /**
+- * The analysis driver used to access analysis results.
+- */
+- AnalysisDriver get analysisDriver;
+-
+- /**
+- * The length of the selection.
+- */
+- int get selectionLength;
+-
+- /**
+- * The start of the selection.
+- */
+- int get selectionOffset;
+-
+- /**
+- * The source to get assists in.
+- */
+- Source get source;
+-}
+-
+-/**
+- * An object used to produce assists for a specific location.
+- *
+- * Clients may implement this class when implementing plugins.
+- */
+-abstract class AssistContributor {
+- /**
+- * Completes with a list of assists for the given [context].
+- */
+- Future<List<Assist>> computeAssists(AssistContext context);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart b=
/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
+deleted file mode 100644
+index 44198cd69d3..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
++++ /dev/null
+@@ -1,107 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
+-import 'package:analyzer/dart/ast/ast.dart';
+-import 'package:analyzer/src/dart/analysis/ast_provider_driver.dart';
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer/src/dart/element/ast_provider.dart';
+-import 'package:analyzer/src/generated/engine.dart';
+-import 'package:analyzer/src/generated/source.dart';
+-
+-/**
+- * An object used to provide context information for [DartAssistContribut=
or]s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class DartAssistContext {
+- /**
+- * The analysis driver used to access analysis results.
+- */
+- AnalysisDriver get analysisDriver;
+-
+- /**
+- * The provider for parsed or resolved ASTs.
+- */
+- AstProvider get astProvider;
+-
+- /**
+- * The length of the selection.
+- */
+- int get selectionLength;
+-
+- /**
+- * The start of the selection.
+- */
+- int get selectionOffset;
+-
+- /**
+- * The source to get assists in.
+- */
+- Source get source;
+-
+- /**
+- * The [CompilationUnit] to compute assists in.
+- */
+- CompilationUnit get unit;
+-}
+-
+-/**
+- * An [AssistContributor] that can be used to contribute assists for Dart=
files.
+- *
+- * Clients may extend this class when implementing plugins.
+- */
+-abstract class DartAssistContributor implements AssistContributor {
+- @override
+- Future<List<Assist>> computeAssists(AssistContext context) async {
+- AnalysisDriver driver =3D context.analysisDriver;
+- Source source =3D context.source;
+- if (!AnalysisEngine.isDartFileName(source.fullName)) {
+- return Assist.EMPTY_LIST;
+- }
+- CompilationUnit unit =3D (await driver.getResult(source.fullName)).un=
it;
+- if (unit =3D=3D null) {
+- return Assist.EMPTY_LIST;
+- }
+- DartAssistContext dartContext =3D new _DartAssistContextImpl(
+- new AstProviderForDriver(driver), context, unit);
+- return internalComputeAssists(dartContext);
+- }
+-
+- /**
+- * Completes with a list of assists for the given [context].
+- */
+- Future<List<Assist>> internalComputeAssists(DartAssistContext context);
+-}
+-
+-/**
+- * The implementation of [DartAssistContext].
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class _DartAssistContextImpl implements DartAssistContext {
+- @override
+- final AstProvider astProvider;
+-
+- final AssistContext _context;
+-
+- @override
+- final CompilationUnit unit;
+-
+- _DartAssistContextImpl(this.astProvider, this._context, this.unit);
+-
+- @override
+- AnalysisDriver get analysisDriver =3D> _context.analysisDriver;
+-
+- @override
+- int get selectionLength =3D> _context.selectionLength;
+-
+- @override
+- int get selectionOffset =3D> _context.selectionOffset;
+-
+- @override
+- Source get source =3D> _context.source;
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart b/pkg/a=
nalysis_server/lib/plugin/edit/fix/fix_core.dart
+deleted file mode 100644
+index 91a813f8214..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart
++++ /dev/null
+@@ -1,88 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analyzer/error/error.dart';
+-import 'package:analyzer/file_system/file_system.dart';
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart'
+- show SourceChange;
+-import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+-
+-/**
+- * A description of a single proposed fix for some problem.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Fix {
+- /**
+- * An empty list of fixes.
+- */
+- static const List<Fix> EMPTY_LIST =3D const <Fix>[];
+-
+- /**
+- * A comparator that can be used to sort fixes by their relevance. The =
most
+- * relevant fixes will be sorted before fixes with a lower relevance.
+- */
+- static final Comparator<Fix> SORT_BY_RELEVANCE =3D
+- (Fix firstFix, Fix secondFix) =3D>
+- firstFix.kind.priority - secondFix.kind.priority;
+-
+- /**
+- * A description of the fix being proposed.
+- */
+- final FixKind kind;
+-
+- /**
+- * The change to be made in order to apply the fix.
+- */
+- final SourceChange change;
+-
+- /**
+- * Initialize a newly created fix to have the given [kind] and [change].
+- */
+- Fix(this.kind, this.change);
+-
+- @override
+- String toString() {
+- return 'Fix(kind=3D$kind, change=3D$change)';
+- }
+-}
+-
+-/**
+- * An object used to provide context information for [FixContributor]s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class FixContext {
+- /**
+- * The analysis driver used to access analysis results.
+- */
+- AnalysisDriver get analysisDriver;
+-
+- /**
+- * The error to fix, should be reported by the given [analysisDriver].
+- */
+- AnalysisError get error;
+-
+- /**
+- * The [ResourceProvider] to access files and folders.
+- */
+- ResourceProvider get resourceProvider;
+-}
+-
+-/**
+- * An object used to produce fixes for a specific error. Fix contributors=
are
+- * long-lived objects and must not retain any state between invocations of
+- * [computeFixes].
+- *
+- * Clients may implement this class when implementing plugins.
+- */
+-abstract class FixContributor {
+- /**
+- * Return a list of fixes for the given [context].
+- */
+- Future<List<Fix>> computeFixes(FixContext context);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart b/pkg/a=
nalysis_server/lib/plugin/edit/fix/fix_dart.dart
+deleted file mode 100644
+index e5b0f1f5625..00000000000
+--- a/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart
++++ /dev/null
+@@ -1,73 +0,0 @@
+-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-import 'dart:async';
+-
+-import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
+-import 'package:analysis_server/src/services/correction/fix_internal.dart'
+- show DartFixContextImpl;
+-import 'package:analyzer/dart/ast/ast.dart';
+-import 'package:analyzer/src/dart/analysis/ast_provider_driver.dart';
+-import 'package:analyzer/src/dart/analysis/driver.dart';
+-import 'package:analyzer/src/dart/analysis/top_level_declaration.dart';
+-import 'package:analyzer/src/dart/element/ast_provider.dart';
+-import 'package:analyzer/src/generated/engine.dart';
+-import 'package:analyzer/src/generated/source.dart';
+-
+-/**
+- * Complete with top-level declarations with the given [name].
+- */
+-typedef Future<List<TopLevelDeclarationInSource>> GetTopLevelDeclarations(
+- String name);
+-
+-/**
+- * An object used to provide context information for [DartFixContributor]=
s.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class DartFixContext implements FixContext {
+- /**
+- * The provider for parsed or resolved ASTs.
+- */
+- AstProvider get astProvider;
+-
+- /**
+- * The function to get top-level declarations from.
+- */
+- GetTopLevelDeclarations get getTopLevelDeclarations;
+-
+- /**
+- * The [CompilationUnit] to compute fixes in.
+- */
+- CompilationUnit get unit;
+-}
+-
+-/**
+- * A [FixContributor] that can be used to contribute fixes for errors in =
Dart
+- * files.
+- *
+- * Clients may extend this class when implementing plugins.
+- */
+-abstract class DartFixContributor implements FixContributor {
+- @override
+- Future<List<Fix>> computeFixes(FixContext context) async {
+- AnalysisDriver driver =3D context.analysisDriver;
+- Source source =3D context.error.source;
+- if (!AnalysisEngine.isDartFileName(source.fullName)) {
+- return Fix.EMPTY_LIST;
+- }
+- CompilationUnit unit =3D (await driver.getResult(source.fullName)).un=
it;
+- if (unit =3D=3D null) {
+- return Fix.EMPTY_LIST;
+- }
+- DartFixContext dartContext =3D
+- new DartFixContextImpl(context, new AstProviderForDriver(driver),=
unit);
+- return internalComputeFixes(dartContext);
+- }
+-
+- /**
+- * Return a list of fixes for the given [context].
+- */
+- Future<List<Fix>> internalComputeFixes(DartFixContext context);
+-}
+diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/=
pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+deleted file mode 100644
+index 10272553807..00000000000
+--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
++++ /dev/null
+@@ -1,216 +0,0 @@
+-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-/**
+- * Utilities for converting Dart entities into analysis server's protocol
+- * entities.
+- */
+-import 'package:analysis_server/src/protocol_server.dart';
+-import 'package:analyzer/dart/element/element.dart' as engine;
+-import 'package:analyzer/src/generated/utilities_dart.dart' as engine;
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-
+-/**
+- * Return a protocol [Element] corresponding to the given [engine.Element=
].
+- */
+-Element convertElement(engine.Element element) {
+- String name =3D element.displayName;
+- String elementTypeParameters =3D _getTypeParametersString(element);
+- String elementParameters =3D _getParametersString(element);
+- String elementReturnType =3D getReturnTypeString(element);
+- ElementKind kind =3D convertElementToElementKind(element);
+- return new Element(
+- kind,
+- name,
+- Element.makeFlags(
+- isPrivate: element.isPrivate,
+- isDeprecated: element.isDeprecated,
+- isAbstract: _isAbstract(element),
+- isConst: _isConst(element),
+- isFinal: _isFinal(element),
+- isStatic: _isStatic(element)),
+- location: newLocation_fromElement(element),
+- typeParameters: elementTypeParameters,
+- parameters: elementParameters,
+- returnType: elementReturnType);
+-}
+-
+-/**
+- * Return a protocol [ElementKind] corresponding to the given
+- * [engine.ElementKind].
+- *
+- * This does not take into account that an instance of [ClassElement] can=
be an
+- * enum and an instance of [FieldElement] can be an enum constant.
+- * Use [convertElementToElementKind] where possible.
+- */
+-ElementKind convertElementKind(engine.ElementKind kind) {
+- if (kind =3D=3D engine.ElementKind.CLASS) {
+- return ElementKind.CLASS;
+- }
+- if (kind =3D=3D engine.ElementKind.COMPILATION_UNIT) {
+- return ElementKind.COMPILATION_UNIT;
+- }
+- if (kind =3D=3D engine.ElementKind.CONSTRUCTOR) {
+- return ElementKind.CONSTRUCTOR;
+- }
+- if (kind =3D=3D engine.ElementKind.FIELD) {
+- return ElementKind.FIELD;
+- }
+- if (kind =3D=3D engine.ElementKind.FUNCTION) {
+- return ElementKind.FUNCTION;
+- }
+- if (kind =3D=3D engine.ElementKind.FUNCTION_TYPE_ALIAS) {
+- return ElementKind.FUNCTION_TYPE_ALIAS;
+- }
+- if (kind =3D=3D engine.ElementKind.GETTER) {
+- return ElementKind.GETTER;
+- }
+- if (kind =3D=3D engine.ElementKind.LABEL) {
+- return ElementKind.LABEL;
+- }
+- if (kind =3D=3D engine.ElementKind.LIBRARY) {
+- return ElementKind.LIBRARY;
+- }
+- if (kind =3D=3D engine.ElementKind.LOCAL_VARIABLE) {
+- return ElementKind.LOCAL_VARIABLE;
+- }
+- if (kind =3D=3D engine.ElementKind.METHOD) {
+- return ElementKind.METHOD;
+- }
+- if (kind =3D=3D engine.ElementKind.PARAMETER) {
+- return ElementKind.PARAMETER;
+- }
+- if (kind =3D=3D engine.ElementKind.PREFIX) {
+- return ElementKind.PREFIX;
+- }
+- if (kind =3D=3D engine.ElementKind.SETTER) {
+- return ElementKind.SETTER;
+- }
+- if (kind =3D=3D engine.ElementKind.TOP_LEVEL_VARIABLE) {
+- return ElementKind.TOP_LEVEL_VARIABLE;
+- }
+- if (kind =3D=3D engine.ElementKind.TYPE_PARAMETER) {
+- return ElementKind.TYPE_PARAMETER;
+- }
+- return ElementKind.UNKNOWN;
+-}
+-
+-/**
+- * Return an [ElementKind] corresponding to the given [engine.Element].
+- */
+-ElementKind convertElementToElementKind(engine.Element element) {
+- if (element is engine.ClassElement && element.isEnum) {
+- return ElementKind.ENUM;
+- }
+- if (element is engine.FieldElement &&
+- element.isEnumConstant &&
+- // MyEnum.values and MyEnum.one.index return isEnumConstant =3D true
+- // so these additional checks are necessary.
+- // TODO(danrubel) MyEnum.values is constant, but is a list
+- // so should it return isEnumConstant =3D true?
+- // MyEnum.one.index is final but *not* constant
+- // so should it return isEnumConstant =3D true?
+- // Or should we return ElementKind.ENUM_CONSTANT here
+- // in either or both of these cases?
+- element.type !=3D null &&
+- element.type.element =3D=3D element.enclosingElement) {
+- return ElementKind.ENUM_CONSTANT;
+- }
+- return convertElementKind(element.kind);
+-}
+-
+-String _getParametersString(engine.Element element) {
+- // TODO(scheglov) expose the corresponding feature from ExecutableEleme=
nt
+- List<engine.ParameterElement> parameters;
+- if (element is engine.ExecutableElement) {
+- // valid getters don't have parameters
+- if (element.kind =3D=3D engine.ElementKind.GETTER &&
+- element.parameters.isEmpty) {
+- return null;
+- }
+- parameters =3D element.parameters;
+- } else if (element is engine.FunctionTypeAliasElement) {
+- parameters =3D element.parameters;
+- } else {
+- return null;
+- }
+- StringBuffer sb =3D new StringBuffer();
+- String closeOptionalString =3D '';
+- for (engine.ParameterElement parameter in parameters) {
+- if (sb.isNotEmpty) {
+- sb.write(', ');
+- }
+- if (closeOptionalString.isEmpty) {
+- engine.ParameterKind kind =3D parameter.parameterKind;
+- if (kind =3D=3D engine.ParameterKind.NAMED) {
+- sb.write('{');
+- closeOptionalString =3D '}';
+- }
+- if (kind =3D=3D engine.ParameterKind.POSITIONAL) {
+- sb.write('[');
+- closeOptionalString =3D ']';
+- }
+- }
+- parameter.appendToWithoutDelimiters(sb);
+- }
+- sb.write(closeOptionalString);
+- return '(' + sb.toString() + ')';
+-}
+-
+-String _getTypeParametersString(engine.Element element) {
+- List<engine.TypeParameterElement> typeParameters;
+- if (element is engine.ClassElement) {
+- typeParameters =3D element.typeParameters;
+- } else if (element is engine.FunctionTypeAliasElement) {
+- typeParameters =3D element.typeParameters;
+- }
+- if (typeParameters =3D=3D null || typeParameters.isEmpty) {
+- return null;
+- }
+- return '<${typeParameters.join(', ')}>';
+-}
+-
+-bool _isAbstract(engine.Element element) {
+- // TODO(scheglov) add isAbstract to Element API
+- if (element is engine.ClassElement) {
+- return element.isAbstract;
+- }
+- if (element is engine.MethodElement) {
+- return element.isAbstract;
+- }
+- if (element is engine.PropertyAccessorElement) {
+- return element.isAbstract;
+- }
+- return false;
+-}
+-
+-bool _isConst(engine.Element element) {
+- // TODO(scheglov) add isConst to Element API
+- if (element is engine.ConstructorElement) {
+- return element.isConst;
+- }
+- if (element is engine.VariableElement) {
+- return element.isConst;
+- }
+- return false;
+-}
+-
+-bool _isFinal(engine.Element element) {
+- // TODO(scheglov) add isFinal to Element API
+- if (element is engine.VariableElement) {
+- return element.isFinal;
+- }
+- return false;
+-}
+-
+-bool _isStatic(engine.Element element) {
+- // TODO(scheglov) add isStatic to Element API
+- if (element is engine.ExecutableElement) {
+- return element.isStatic;
+- }
+- if (element is engine.PropertyInducingElement) {
+- return element.isStatic;
+- }
+- return false;
+-}
+diff --git a/pkg/analysis_server/lib/protocol/protocol.dart b/pkg/analysis=
_server/lib/protocol/protocol.dart
+deleted file mode 100644
+index df989b1d9f5..00000000000
+--- a/pkg/analysis_server/lib/protocol/protocol.dart
++++ /dev/null
+@@ -1,673 +0,0 @@
+-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-
+-/**
+- * Support for client code that needs to interact with the requests, resp=
onses
+- * and notifications that are part of the analysis server's wire protocol.
+- */
+-import 'dart:convert' hide JsonDecoder;
+-
+-import 'package:analysis_server/protocol/protocol_generated.dart';
+-import 'package:analysis_server/src/protocol/protocol_internal.dart';
+-
+-export 'package:analyzer_plugin/protocol/protocol.dart' show Enum;
+-
+-/**
+- * A [RequestHandler] that supports [startup] and [shutdown] methods.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class DomainHandler implements RequestHandler {
+- /**
+- * Perform any operations associated with the shutdown of the domain. I=
t is
+- * not guaranteed that this method will be called. If it is, it will be
+- * called after the last [Request] has been made.
+- */
+- void shutdown() {}
+-
+- /**
+- * Perform any operations associated with the startup of the domain. Th=
is
+- * will be called before the first [Request].
+- */
+- void startup() {}
+-}
+-
+-/**
+- * A notification that can be sent from the server about an event that oc=
curred.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Notification {
+- /**
+- * The name of the JSON attribute containing the name of the event that
+- * triggered the notification.
+- */
+- static const String EVENT =3D 'event';
+-
+- /**
+- * The name of the JSON attribute containing the result values.
+- */
+- static const String PARAMS =3D 'params';
+-
+- /**
+- * The name of the event that triggered the notification.
+- */
+- final String event;
+-
+- /**
+- * A table mapping the names of notification parameters to their values=
, or
+- * `null` if there are no notification parameters.
+- */
+- final Map<String, Object> params;
+-
+- /**
+- * Initialize a newly created [Notification] to have the given [event] =
name.
+- * If [params] is provided, it will be used as the params; otherwise no
+- * params will be used.
+- */
+- Notification(this.event, [this.params]);
+-
+- /**
+- * Initialize a newly created instance based on the given JSON data.
+- */
+- factory Notification.fromJson(Map json) {
+- return new Notification(json[Notification.EVENT],
+- json[Notification.PARAMS] as Map<String, Object>);
+- }
+-
+- /**
+- * Return a table representing the structure of the Json object that wi=
ll be
+- * sent to the client to represent this response.
+- */
+- Map<String, Object> toJson() {
+- Map<String, Object> jsonObject =3D {};
+- jsonObject[EVENT] =3D event;
+- if (params !=3D null) {
+- jsonObject[PARAMS] =3D params;
+- }
+- return jsonObject;
+- }
+-}
+-
+-/**
+- * A request that was received from the client.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Request {
+- /**
+- * The name of the JSON attribute containing the id of the request.
+- */
+- static const String ID =3D 'id';
+-
+- /**
+- * The name of the JSON attribute containing the name of the request.
+- */
+- static const String METHOD =3D 'method';
+-
+- /**
+- * The name of the JSON attribute containing the request parameters.
+- */
+- static const String PARAMS =3D 'params';
+-
+- /**
+- * The name of the optional JSON attribute indicating the time (millise=
conds
+- * since epoch) at which the client made the request.
+- */
+- static const String CLIENT_REQUEST_TIME =3D 'clientRequestTime';
+-
+- /**
+- * The unique identifier used to identify this request.
+- */
+- final String id;
+-
+- /**
+- * The method being requested.
+- */
+- final String method;
+-
+- /**
+- * A table mapping the names of request parameters to their values.
+- */
+- final Map<String, Object> params;
+-
+- /**
+- * The time (milliseconds since epoch) at which the client made the req=
uest
+- * or `null` if this information is not provided by the client.
+- */
+- final int clientRequestTime;
+-
+- /**
+- * Initialize a newly created [Request] to have the given [id] and [met=
hod]
+- * name. If [params] is supplied, it is used as the "params" map for the
+- * request. Otherwise an empty "params" map is allocated.
+- */
+- Request(this.id, this.method,
+- [Map<String, Object> params, this.clientRequestTime])
+- : params =3D params ?? <String, Object>{};
+-
+- /**
+- * Return a request parsed from the given json, or `null` if the [data]=
is
+- * not a valid json representation of a request. The [data] is expected=
to
+- * have the following format:
+- *
+- * {
+- * 'clientRequestTime': millisecondsSinceEpoch
+- * 'id': String,
+- * 'method': methodName,
+- * 'params': {
+- * paramter_name: value
+- * }
+- * }
+- *
+- * where both the parameters and clientRequestTime are optional.
+- *
+- * The parameters can contain any number of name/value pairs. The
+- * clientRequestTime must be an int representing the time at which the =
client
+- * issued the request (milliseconds since epoch).
+- */
+- factory Request.fromJson(Map<String, Object> result) {
+- var id =3D result[Request.ID];
+- var method =3D result[Request.METHOD];
+- if (id is! String || method is! String) {
+- return null;
+- }
+- var time =3D result[Request.CLIENT_REQUEST_TIME];
+- if (time !=3D null && time is! int) {
+- return null;
+- }
+- var params =3D result[Request.PARAMS];
+- if (params is Map || params =3D=3D null) {
+- return new Request(id, method, params as Map<String, Object>, time);
+- } else {
+- return null;
+- }
+- }
+-
+- /**
+- * Return a request parsed from the given [data], or `null` if the [dat=
a] is
+- * not a valid json representation of a request. The [data] is expected=
to
+- * have the following format:
+- *
+- * {
+- * 'clientRequestTime': millisecondsSinceEpoch
+- * 'id': String,
+- * 'method': methodName,
+- * 'params': {
+- * paramter_name: value
+- * }
+- * }
+- *
+- * where both the parameters and clientRequestTime are optional.
+- *
+- * The parameters can contain any number of name/value pairs. The
+- * clientRequestTime must be an int representing the time at which the =
client
+- * issued the request (milliseconds since epoch).
+- */
+- factory Request.fromString(String data) {
+- try {
+- var result =3D JSON.decode(data);
+- if (result is Map) {
+- return new Request.fromJson(result as Map<String, dynamic>);
+- }
+- return null;
+- } catch (exception) {
+- return null;
+- }
+- }
+-
+- @override
+- int get hashCode {
+- return id.hashCode;
+- }
+-
+- @override
+- bool operator =3D=3D(Object other) {
+- return other is Request &&
+- id =3D=3D other.id &&
+- method =3D=3D other.method &&
+- clientRequestTime =3D=3D other.clientRequestTime &&
+- _equalMaps(params, other.params);
+- }
+-
+- /**
+- * Return a table representing the structure of the Json object that wi=
ll be
+- * sent to the client to represent this response.
+- */
+- Map<String, Object> toJson() {
+- Map<String, Object> jsonObject =3D <String, Object>{};
+- jsonObject[ID] =3D id;
+- jsonObject[METHOD] =3D method;
+- if (params.isNotEmpty) {
+- jsonObject[PARAMS] =3D params;
+- }
+- if (clientRequestTime !=3D null) {
+- jsonObject[CLIENT_REQUEST_TIME] =3D clientRequestTime;
+- }
+- return jsonObject;
+- }
+-
+- bool _equalLists(List first, List second) {
+- if (first =3D=3D null) {
+- return second =3D=3D null;
+- }
+- if (second =3D=3D null) {
+- return false;
+- }
+- int length =3D first.length;
+- if (length !=3D second.length) {
+- return false;
+- }
+- for (int i =3D 0; i < length; i++) {
+- if (!_equalObjects(first[i], second[i])) {
+- return false;
+- }
+- }
+- return true;
+- }
+-
+- bool _equalMaps(Map first, Map second) {
+- if (first =3D=3D null) {
+- return second =3D=3D null;
+- }
+- if (second =3D=3D null) {
+- return false;
+- }
+- if (first.length !=3D second.length) {
+- return false;
+- }
+- for (var key in first.keys) {
+- if (!second.containsKey(key)) {
+- return false;
+- }
+- if (!_equalObjects(first[key], second[key])) {
+- return false;
+- }
+- }
+- return true;
+- }
+-
+- bool _equalObjects(Object first, Object second) {
+- if (first =3D=3D null) {
+- return second =3D=3D null;
+- }
+- if (second =3D=3D null) {
+- return false;
+- }
+- if (first is Map) {
+- if (second is Map) {
+- return _equalMaps(first, second);
+- }
+- return false;
+- }
+- if (first is List) {
+- if (second is List) {
+- return _equalLists(first, second);
+- }
+- return false;
+- }
+- return first =3D=3D second;
+- }
+-}
+-
+-/**
+- * An exception that occurred during the handling of a request that requi=
res
+- * that an error be returned to the client.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RequestFailure implements Exception {
+- /**
+- * The response to be returned as a result of the failure.
+- */
+- final Response response;
+-
+- /**
+- * Initialize a newly created exception to return the given reponse.
+- */
+- RequestFailure(this.response);
+-}
+-
+-/**
+- * An object that can handle requests and produce responses for them.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-abstract class RequestHandler {
+- /**
+- * Attempt to handle the given [request]. If the request is not recogni=
zed by
+- * this handler, return `null` so that other handlers will be given a c=
hance
+- * to handle it. Otherwise, return the response that should be passed b=
ack to
+- * the client.
+- */
+- Response handleRequest(Request request);
+-}
+-
+-/**
+- * A response to a request.
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Response {
+- /**
+- * The [Response] instance that is returned when a real [Response] cann=
ot
+- * be provided at the moment.
+- */
+- static final Response DELAYED_RESPONSE =3D new Response('DELAYED_RESPON=
SE');
+-
+- /**
+- * The name of the JSON attribute containing the id of the request for =
which
+- * this is a response.
+- */
+- static const String ID =3D 'id';
+-
+- /**
+- * The name of the JSON attribute containing the error message.
+- */
+- static const String ERROR =3D 'error';
+-
+- /**
+- * The name of the JSON attribute containing the result values.
+- */
+- static const String RESULT =3D 'result';
+-
+- /**
+- * The unique identifier used to identify the request that this respons=
e is
+- * associated with.
+- */
+- final String id;
+-
+- /**
+- * The error that was caused by attempting to handle the request, or `n=
ull` if
+- * there was no error.
+- */
+- final RequestError error;
+-
+- /**
+- * A table mapping the names of result fields to their values. Should =
be
+- * `null` if there is no result to send.
+- */
+- Map<String, Object> result;
+-
+- /**
+- * Initialize a newly created instance to represent a response to a req=
uest
+- * with the given [id]. If [_result] is provided, it will be used as t=
he
+- * result; otherwise an empty result will be used. If an [error] is pr=
ovided
+- * then the response will represent an error condition.
+- */
+- Response(this.id, {Map<String, Object> result, this.error}) : result =
=3D result;
+-
+- /**
+- * Create and return the `DEBUG_PORT_COULD_NOT_BE_OPENED` error respons=
e.
+- */
+- Response.debugPortCouldNotBeOpened(Request request, dynamic error)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.DEBUG_PORT_COULD_NOT_BE_OPENED, '$error'=
));
+-
+- /**
+- * Initialize a newly created instance to represent the FILE_NOT_ANALYZ=
ED
+- * error condition.
+- */
+- Response.fileNotAnalyzed(Request request, String file)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.FILE_NOT_ANALYZED,
+- 'File is not analyzed: $file.'));
+-
+- /**
+- * Initialize a newly created instance to represent the FORMAT_INVALID_=
FILE
+- * error condition.
+- */
+- Response.formatInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.FORMAT_INVALID_FILE,
+- 'Error during `edit.format`: invalid file.'));
+-
+- /**
+- * Initialize a newly created instance to represent the FORMAT_WITH_ERR=
OR
+- * error condition.
+- */
+- Response.formatWithErrors(Request request)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.FORMAT_WITH_ERRORS,
+- 'Error during `edit.format`: source contains syntax error=
s.'));
+-
+- /**
+- * Initialize a newly created instance based on the given JSON data.
+- */
+- factory Response.fromJson(Map json) {
+- try {
+- Object id =3D json[Response.ID];
+- if (id is! String) {
+- return null;
+- }
+- Object error =3D json[Response.ERROR];
+- RequestError decodedError;
+- if (error is Map) {
+- decodedError =3D new RequestError.fromJson(
+- new ResponseDecoder(null), '.error', error);
+- }
+- Object result =3D json[Response.RESULT];
+- Map<String, Object> decodedResult;
+- if (result is Map) {
+- decodedResult =3D result as Map<String, Object>;
+- }
+- return new Response(id, error: decodedError, result: decodedResult);
+- } catch (exception) {
+- return null;
+- }
+- }
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * GET_ERRORS_INVALID_FILE error condition.
+- */
+- Response.getErrorsInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.GET_ERRORS_INVALID_F=
ILE,
+- 'Error during `analysis.getErrors`: invalid file.'));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * GET_IMPORTED_ELEMENTS_INVALID_FILE error condition.
+- */
+- Response.getImportedElementsInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.GET_IMPORTED_ELEMENTS_INVALID_FILE,
+- 'Error during `analysis.getImportedElements`: invalid fil=
e.'));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * GET_KYTHE_ENTRIES_INVALID_FILE error condition.
+- */
+- Response.getKytheEntriesInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.GET_KYTHE_ENTRIES_INVALID_FILE,
+- 'Error during `analysis.getKytheEntries`: invalid file.')=
);
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * GET_NAVIGATION_INVALID_FILE error condition.
+- */
+- Response.getNavigationInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.GET_NAVIGATION_INVALID_FILE,
+- 'Error during `analysis.getNavigation`: invalid file.'));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * GET_REACHABLE_SOURCES_INVALID_FILE error condition.
+- */
+- Response.getReachableSourcesInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.GET_REACHABLE_SOURCES_INVALID_FILE,
+- 'Error during `analysis.getReachableSources`: invalid fil=
e.'));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * IMPORT_ELEMENTS_INVALID_FILE error condition.
+- */
+- Response.importElementsInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.IMPORT_ELEMENTS_INVALID_FILE,
+- 'Error during `edit.importElements`: invalid file.'));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by an analysis.reanalyze [request] that specifies an analysis root t=
hat is
+- * not in the current list of analysis roots.
+- */
+- Response.invalidAnalysisRoot(Request request, String rootPath)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.INVALID_ANALYSIS_ROO=
T,
+- "Invalid analysis root: $rootPath"));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by a [request] that specifies an execution context whose context roo=
t does
+- * not exist.
+- */
+- Response.invalidExecutionContext(Request request, String contextId)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.INVALID_EXECUTION_CO=
NTEXT,
+- "Invalid execution context: $contextId"));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * INVALID_FILE_PATH_FORMAT error condition.
+- */
+- Response.invalidFilePathFormat(Request request, path)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.INVALID_FILE_PATH_FO=
RMAT,
+- 'Invalid file path format: $path'));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by a [request] that had invalid parameter. [path] is the path to the
+- * invalid parameter, in Javascript notation (e.g. "foo.bar" means that=
the
+- * parameter "foo" contained a key "bar" whose value was the wrong type=
).
+- * [expectation] is a description of the type of data that was expected.
+- */
+- Response.invalidParameter(Request request, String path, String expectat=
ion)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.INVALID_PARAMETER,
+- "Invalid parameter '$path'. $expectation."));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by a malformed request.
+- */
+- Response.invalidRequestFormat()
+- : this('',
+- error: new RequestError(
+- RequestErrorCode.INVALID_REQUEST, 'Invalid request'));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * ORGANIZE_DIRECTIVES_ERROR error condition.
+- */
+- Response.organizeDirectivesError(Request request, String message)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.ORGANIZE_DIRECTIVES_ERROR, message));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * REFACTORING_REQUEST_CANCELLED error condition.
+- */
+- Response.refactoringRequestCancelled(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.REFACTORING_REQUEST_CANCELLED,
+- 'The `edit.getRefactoring` request was cancelled.'));
+-
+- /**
+- * Initialize a newly created instance to represent the SERVER_ERROR er=
ror
+- * condition.
+- */
+- factory Response.serverError(Request request, exception, stackTrace) {
+- RequestError error =3D
+- new RequestError(RequestErrorCode.SERVER_ERROR, exception.toStrin=
g());
+- if (stackTrace !=3D null) {
+- error.stackTrace =3D stackTrace.toString();
+- }
+- return new Response(request.id, error: error);
+- }
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * SORT_MEMBERS_INVALID_FILE error condition.
+- */
+- Response.sortMembersInvalidFile(Request request)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.SORT_MEMBERS_INVALID=
_FILE,
+- 'Error during `edit.sortMembers`: invalid file.'));
+-
+- /**
+- * Initialize a newly created instance to represent the
+- * SORT_MEMBERS_PARSE_ERRORS error condition.
+- */
+- Response.sortMembersParseErrors(Request request, int numErrors)
+- : this(request.id,
+- error: new RequestError(RequestErrorCode.SORT_MEMBERS_PARSE_E=
RRORS,
+- 'Error during `edit.sortMembers`: file has $numErrors sca=
n/parse errors.'));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by a `analysis.setPriorityFiles` [request] that includes one or more=
files
+- * that are not being analyzed.
+- */
+- Response.unanalyzedPriorityFiles(String requestId, String fileNames)
+- : this(requestId,
+- error: new RequestError(RequestErrorCode.UNANALYZED_PRIORITY_=
FILES,
+- "Unanalyzed files cannot be a priority: '$fileNames'"));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by a [request] that cannot be handled by any known handlers.
+- */
+- Response.unknownRequest(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.UNKNOWN_REQUEST, 'Unknown request'));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by a [request] referencing a source that does not exist.
+- */
+- Response.unknownSource(Request request)
+- : this(request.id,
+- error: new RequestError(
+- RequestErrorCode.UNKNOWN_SOURCE, 'Unknown source'));
+-
+- /**
+- * Initialize a newly created instance to represent an error condition =
caused
+- * by a [request] for a service that is not supported.
+- */
+- Response.unsupportedFeature(String requestId, String message)
+- : this(requestId,
+- error: new RequestError(
+- RequestErrorCode.UNSUPPORTED_FEATURE, message));
+-
+- /**
+- * Return a table representing the structure of the Json object that wi=
ll be
+- * sent to the client to represent this response.
+- */
+- Map<String, Object> toJson() {
+- Map<String, Object> jsonObject =3D <String, Object>{};
+- jsonObject[ID] =3D id;
+- if (error !=3D null) {
+- jsonObject[ERROR] =3D error.toJson();
+- }
+- if (result !=3D null) {
+- jsonObject[RESULT] =3D result;
+- }
+- return jsonObject;
+- }
+-}
+diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pk=
g/analysis_server/lib/protocol/protocol_constants.dart
+deleted file mode 100644
+index 9ff059c1f58..00000000000
+--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
++++ /dev/null
+@@ -1,258 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-//
+-// This file has been automatically generated. Please do not edit it man=
ually.
+-// To regenerate the file, use the script
+-// "pkg/analysis_server/tool/spec/generate_files".
+-
+-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES =3D 'analysis.analyzedF=
iles';
+-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES =3D 'direct=
ories';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS =3D 'analysis.closingLa=
bels';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_LABELS =3D 'labels';
+-const String ANALYSIS_NOTIFICATION_ERRORS =3D 'analysis.errors';
+-const String ANALYSIS_NOTIFICATION_ERRORS_ERRORS =3D 'errors';
+-const String ANALYSIS_NOTIFICATION_ERRORS_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS =3D 'analysis.flushResul=
ts';
+-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS_FILES =3D 'files';
+-const String ANALYSIS_NOTIFICATION_FOLDING =3D 'analysis.folding';
+-const String ANALYSIS_NOTIFICATION_FOLDING_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_FOLDING_REGIONS =3D 'regions';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS =3D 'analysis.highlights';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_REGIONS =3D 'regions';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED =3D 'analysis.implemented';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_CLASSES =3D 'classes';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_MEMBERS =3D 'members';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE =3D 'analysis.invalidate';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_DELTA =3D 'delta';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_LENGTH =3D 'length';
+-const String ANALYSIS_NOTIFICATION_INVALIDATE_OFFSET =3D 'offset';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION =3D 'analysis.navigation';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILES =3D 'files';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_REGIONS =3D 'regions';
+-const String ANALYSIS_NOTIFICATION_NAVIGATION_TARGETS =3D 'targets';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES =3D 'analysis.occurrences';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_OCCURRENCES_OCCURRENCES =3D 'occurrenc=
es';
+-const String ANALYSIS_NOTIFICATION_OUTLINE =3D 'analysis.outline';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_KIND =3D 'kind';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_LIBRARY_NAME =3D 'libraryName';
+-const String ANALYSIS_NOTIFICATION_OUTLINE_OUTLINE =3D 'outline';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES =3D 'analysis.overrides';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES_FILE =3D 'file';
+-const String ANALYSIS_NOTIFICATION_OVERRIDES_OVERRIDES =3D 'overrides';
+-const String ANALYSIS_REQUEST_GET_ERRORS =3D 'analysis.getErrors';
+-const String ANALYSIS_REQUEST_GET_ERRORS_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_HOVER =3D 'analysis.getHover';
+-const String ANALYSIS_REQUEST_GET_HOVER_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_HOVER_OFFSET =3D 'offset';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS =3D
+- 'analysis.getImportedElements';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_LENGTH =3D 'length';
+-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_OFFSET =3D 'offset';
+-const String ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES =3D
+- 'analysis.getLibraryDependencies';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION =3D 'analysis.getNavigation';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_LENGTH =3D 'length';
+-const String ANALYSIS_REQUEST_GET_NAVIGATION_OFFSET =3D 'offset';
+-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES =3D
+- 'analysis.getReachableSources';
+-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES_FILE =3D 'file';
+-const String ANALYSIS_REQUEST_REANALYZE =3D 'analysis.reanalyze';
+-const String ANALYSIS_REQUEST_REANALYZE_ROOTS =3D 'roots';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS =3D 'analysis.setAnalysi=
sRoots';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_EXCLUDED =3D 'excluded';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED =3D 'included';
+-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_PACKAGE_ROOTS =3D 'packa=
geRoots';
+-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS =3D
+- 'analysis.setGeneralSubscriptions';
+-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS_SUBSCRIPTIONS =3D
+- 'subscriptions';
+-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES =3D 'analysis.setPriorit=
yFiles';
+-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES =3D 'files';
+-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS =3D 'analysis.setSubscrip=
tions';
+-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =3D 'subscr=
iptions';
+-const String ANALYSIS_REQUEST_UPDATE_CONTENT =3D 'analysis.updateContent';
+-const String ANALYSIS_REQUEST_UPDATE_CONTENT_FILES =3D 'files';
+-const String ANALYSIS_REQUEST_UPDATE_OPTIONS =3D 'analysis.updateOptions';
+-const String ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS =3D 'options';
+-const String ANALYSIS_RESPONSE_GET_ERRORS_ERRORS =3D 'errors';
+-const String ANALYSIS_RESPONSE_GET_HOVER_HOVERS =3D 'hovers';
+-const String ANALYSIS_RESPONSE_GET_IMPORTED_ELEMENTS_ELEMENTS =3D 'elemen=
ts';
+-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_LIBRARIES =3D 'li=
braries';
+-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_PACKAGE_MAP =3D
+- 'packageMap';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_FILES =3D 'files';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_REGIONS =3D 'regions';
+-const String ANALYSIS_RESPONSE_GET_NAVIGATION_TARGETS =3D 'targets';
+-const String ANALYSIS_RESPONSE_GET_REACHABLE_SOURCES_SOURCES =3D 'sources=
';
+-const String ANALYTICS_REQUEST_ENABLE =3D 'analytics.enable';
+-const String ANALYTICS_REQUEST_ENABLE_VALUE =3D 'value';
+-const String ANALYTICS_REQUEST_IS_ENABLED =3D 'analytics.isEnabled';
+-const String ANALYTICS_REQUEST_SEND_EVENT =3D 'analytics.sendEvent';
+-const String ANALYTICS_REQUEST_SEND_EVENT_ACTION =3D 'action';
+-const String ANALYTICS_REQUEST_SEND_TIMING =3D 'analytics.sendTiming';
+-const String ANALYTICS_REQUEST_SEND_TIMING_EVENT =3D 'event';
+-const String ANALYTICS_REQUEST_SEND_TIMING_MILLIS =3D 'millis';
+-const String ANALYTICS_RESPONSE_IS_ENABLED_ENABLED =3D 'enabled';
+-const String COMPLETION_NOTIFICATION_RESULTS =3D 'completion.results';
+-const String COMPLETION_NOTIFICATION_RESULTS_ID =3D 'id';
+-const String COMPLETION_NOTIFICATION_RESULTS_IS_LAST =3D 'isLast';
+-const String COMPLETION_NOTIFICATION_RESULTS_REPLACEMENT_LENGTH =3D
+- 'replacementLength';
+-const String COMPLETION_NOTIFICATION_RESULTS_REPLACEMENT_OFFSET =3D
+- 'replacementOffset';
+-const String COMPLETION_NOTIFICATION_RESULTS_RESULTS =3D 'results';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS =3D 'completion.getSugges=
tions';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS_FILE =3D 'file';
+-const String COMPLETION_REQUEST_GET_SUGGESTIONS_OFFSET =3D 'offset';
+-const String COMPLETION_RESPONSE_GET_SUGGESTIONS_ID =3D 'id';
+-const String DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS =3D 'diagnostic.getDiagno=
stics';
+-const String DIAGNOSTIC_REQUEST_GET_SERVER_PORT =3D 'diagnostic.getServer=
Port';
+-const String DIAGNOSTIC_RESPONSE_GET_DIAGNOSTICS_CONTEXTS =3D 'contexts';
+-const String DIAGNOSTIC_RESPONSE_GET_SERVER_PORT_PORT =3D 'port';
+-const String EDIT_REQUEST_FORMAT =3D 'edit.format';
+-const String EDIT_REQUEST_FORMAT_FILE =3D 'file';
+-const String EDIT_REQUEST_FORMAT_LINE_LENGTH =3D 'lineLength';
+-const String EDIT_REQUEST_FORMAT_SELECTION_LENGTH =3D 'selectionLength';
+-const String EDIT_REQUEST_FORMAT_SELECTION_OFFSET =3D 'selectionOffset';
+-const String EDIT_REQUEST_GET_ASSISTS =3D 'edit.getAssists';
+-const String EDIT_REQUEST_GET_ASSISTS_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_ASSISTS_LENGTH =3D 'length';
+-const String EDIT_REQUEST_GET_ASSISTS_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS =3D
+- 'edit.getAvailableRefactorings';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_LENGTH =3D 'length';
+-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_FIXES =3D 'edit.getFixes';
+-const String EDIT_REQUEST_GET_FIXES_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_FIXES_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION =3D 'edit.getPostfixComp=
letion';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_KEY =3D 'key';
+-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_REFACTORING =3D 'edit.getRefactoring';
+-const String EDIT_REQUEST_GET_REFACTORING_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_REFACTORING_KIND =3D 'kind';
+-const String EDIT_REQUEST_GET_REFACTORING_LENGTH =3D 'length';
+-const String EDIT_REQUEST_GET_REFACTORING_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_GET_REFACTORING_OPTIONS =3D 'options';
+-const String EDIT_REQUEST_GET_REFACTORING_VALIDATE_ONLY =3D 'validateOnly=
';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION =3D
+- 'edit.getStatementCompletion';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_FILE =3D 'file';
+-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_OFFSET =3D 'offset';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS =3D 'edit.importElements';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS_ELEMENTS =3D 'elements';
+-const String EDIT_REQUEST_IMPORT_ELEMENTS_FILE =3D 'file';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE =3D
+- 'edit.isPostfixCompletionApplicable';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_FILE =3D 'file=
';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_KEY =3D 'key';
+-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_OFFSET =3D 'of=
fset';
+-const String EDIT_REQUEST_LIST_POSTFIX_COMPLETION_TEMPLATES =3D
+- 'edit.listPostfixCompletionTemplates';
+-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES =3D 'edit.organizeDirective=
s';
+-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES_FILE =3D 'file';
+-const String EDIT_REQUEST_SORT_MEMBERS =3D 'edit.sortMembers';
+-const String EDIT_REQUEST_SORT_MEMBERS_FILE =3D 'file';
+-const String EDIT_RESPONSE_FORMAT_EDITS =3D 'edits';
+-const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH =3D 'selectionLength';
+-const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET =3D 'selectionOffset';
+-const String EDIT_RESPONSE_GET_ASSISTS_ASSISTS =3D 'assists';
+-const String EDIT_RESPONSE_GET_AVAILABLE_REFACTORINGS_KINDS =3D 'kinds';
+-const String EDIT_RESPONSE_GET_FIXES_FIXES =3D 'fixes';
+-const String EDIT_RESPONSE_GET_POSTFIX_COMPLETION_CHANGE =3D 'change';
+-const String EDIT_RESPONSE_GET_REFACTORING_CHANGE =3D 'change';
+-const String EDIT_RESPONSE_GET_REFACTORING_FEEDBACK =3D 'feedback';
+-const String EDIT_RESPONSE_GET_REFACTORING_FINAL_PROBLEMS =3D 'finalProbl=
ems';
+-const String EDIT_RESPONSE_GET_REFACTORING_INITIAL_PROBLEMS =3D 'initialP=
roblems';
+-const String EDIT_RESPONSE_GET_REFACTORING_OPTIONS_PROBLEMS =3D 'optionsP=
roblems';
+-const String EDIT_RESPONSE_GET_REFACTORING_POTENTIAL_EDITS =3D 'potential=
Edits';
+-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_CHANGE =3D 'change';
+-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_WHITESPACE_ONLY =3D
+- 'whitespaceOnly';
+-const String EDIT_RESPONSE_IMPORT_ELEMENTS_EDIT =3D 'edit';
+-const String EDIT_RESPONSE_IS_POSTFIX_COMPLETION_APPLICABLE_VALUE =3D 'va=
lue';
+-const String EDIT_RESPONSE_LIST_POSTFIX_COMPLETION_TEMPLATES_TEMPLATES =3D
+- 'templates';
+-const String EDIT_RESPONSE_ORGANIZE_DIRECTIVES_EDIT =3D 'edit';
+-const String EDIT_RESPONSE_SORT_MEMBERS_EDIT =3D 'edit';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA =3D 'execution.launchData=
';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_FILE =3D 'file';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_KIND =3D 'kind';
+-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_REFERENCED_FILES =3D
+- 'referencedFiles';
+-const String EXECUTION_REQUEST_CREATE_CONTEXT =3D 'execution.createContex=
t';
+-const String EXECUTION_REQUEST_CREATE_CONTEXT_CONTEXT_ROOT =3D 'contextRo=
ot';
+-const String EXECUTION_REQUEST_DELETE_CONTEXT =3D 'execution.deleteContex=
t';
+-const String EXECUTION_REQUEST_DELETE_CONTEXT_ID =3D 'id';
+-const String EXECUTION_REQUEST_MAP_URI =3D 'execution.mapUri';
+-const String EXECUTION_REQUEST_MAP_URI_FILE =3D 'file';
+-const String EXECUTION_REQUEST_MAP_URI_ID =3D 'id';
+-const String EXECUTION_REQUEST_MAP_URI_URI =3D 'uri';
+-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS =3D 'execution.setSubscr=
iptions';
+-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =3D
+- 'subscriptions';
+-const String EXECUTION_RESPONSE_CREATE_CONTEXT_ID =3D 'id';
+-const String EXECUTION_RESPONSE_MAP_URI_FILE =3D 'file';
+-const String EXECUTION_RESPONSE_MAP_URI_URI =3D 'uri';
+-const String KYTHE_REQUEST_GET_KYTHE_ENTRIES =3D 'kythe.getKytheEntries';
+-const String KYTHE_REQUEST_GET_KYTHE_ENTRIES_FILE =3D 'file';
+-const String KYTHE_RESPONSE_GET_KYTHE_ENTRIES_ENTRIES =3D 'entries';
+-const String KYTHE_RESPONSE_GET_KYTHE_ENTRIES_FILES =3D 'files';
+-const String SEARCH_NOTIFICATION_RESULTS =3D 'search.results';
+-const String SEARCH_NOTIFICATION_RESULTS_ID =3D 'id';
+-const String SEARCH_NOTIFICATION_RESULTS_IS_LAST =3D 'isLast';
+-const String SEARCH_NOTIFICATION_RESULTS_RESULTS =3D 'results';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES =3D
+- 'search.findElementReferences';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_FILE =3D 'file';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_INCLUDE_POTENTIAL =3D
+- 'includePotential';
+-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_OFFSET =3D 'offset';
+-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS =3D
+- 'search.findMemberDeclarations';
+-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS_NAME =3D 'name';
+-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES =3D
+- 'search.findMemberReferences';
+-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES_NAME =3D 'name';
+-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS =3D
+- 'search.findTopLevelDeclarations';
+-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS_PATTERN =3D 'patt=
ern';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY =3D 'search.getTypeHierarc=
hy';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_FILE =3D 'file';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_OFFSET =3D 'offset';
+-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_SUPER_ONLY =3D 'superOnly';
+-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ELEMENT =3D 'element=
';
+-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ID =3D 'id';
+-const String SEARCH_RESPONSE_FIND_MEMBER_DECLARATIONS_ID =3D 'id';
+-const String SEARCH_RESPONSE_FIND_MEMBER_REFERENCES_ID =3D 'id';
+-const String SEARCH_RESPONSE_FIND_TOP_LEVEL_DECLARATIONS_ID =3D 'id';
+-const String SEARCH_RESPONSE_GET_TYPE_HIERARCHY_HIERARCHY_ITEMS =3D
+- 'hierarchyItems';
+-const String SERVER_NOTIFICATION_CONNECTED =3D 'server.connected';
+-const String SERVER_NOTIFICATION_CONNECTED_PID =3D 'pid';
+-const String SERVER_NOTIFICATION_CONNECTED_SESSION_ID =3D 'sessionId';
+-const String SERVER_NOTIFICATION_CONNECTED_VERSION =3D 'version';
+-const String SERVER_NOTIFICATION_ERROR =3D 'server.error';
+-const String SERVER_NOTIFICATION_ERROR_IS_FATAL =3D 'isFatal';
+-const String SERVER_NOTIFICATION_ERROR_MESSAGE =3D 'message';
+-const String SERVER_NOTIFICATION_ERROR_STACK_TRACE =3D 'stackTrace';
+-const String SERVER_NOTIFICATION_STATUS =3D 'server.status';
+-const String SERVER_NOTIFICATION_STATUS_ANALYSIS =3D 'analysis';
+-const String SERVER_NOTIFICATION_STATUS_PUB =3D 'pub';
+-const String SERVER_REQUEST_GET_VERSION =3D 'server.getVersion';
+-const String SERVER_REQUEST_SET_SUBSCRIPTIONS =3D 'server.setSubscription=
s';
+-const String SERVER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =3D 'subscrip=
tions';
+-const String SERVER_REQUEST_SHUTDOWN =3D 'server.shutdown';
+-const String SERVER_RESPONSE_GET_VERSION_VERSION =3D 'version';
+diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pk=
g/analysis_server/lib/protocol/protocol_generated.dart
+deleted file mode 100644
+index 20400573c49..00000000000
+--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
++++ /dev/null
+@@ -1,15802 +0,0 @@
+-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS =
file
+-// for details. All rights reserved. Use of this source code is governed =
by a
+-// BSD-style license that can be found in the LICENSE file.
+-//
+-// This file has been automatically generated. Please do not edit it man=
ually.
+-// To regenerate the file, use the script
+-// "pkg/analysis_server/tool/spec/generate_files".
+-
+-import 'dart:convert' hide JsonDecoder;
+-
+-import 'package:analyzer/src/generated/utilities_general.dart';
+-import 'package:analysis_server/protocol/protocol.dart';
+-import 'package:analysis_server/src/protocol/protocol_internal.dart';
+-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+-
+-/**
+- * analysis.analyzedFiles params
+- *
+- * {
+- * "directories": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisAnalyzedFilesParams implements HasToJson {
+- List<String> _directories;
+-
+- /**
+- * A list of the paths of the files that are being analyzed.
+- */
+- List<String> get directories =3D> _directories;
+-
+- /**
+- * A list of the paths of the files that are being analyzed.
+- */
+- void set directories(List<String> value) {
+- assert(value !=3D null);
+- this._directories =3D value;
+- }
+-
+- AnalysisAnalyzedFilesParams(List<String> directories) {
+- this.directories =3D directories;
+- }
+-
+- factory AnalysisAnalyzedFilesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<String> directories;
+- if (json.containsKey("directories")) {
+- directories =3D jsonDecoder.decodeList(jsonPath + ".directories",
+- json["directories"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "directories");
+- }
+- return new AnalysisAnalyzedFilesParams(directories);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.analyzedFiles params", json);
+- }
+- }
+-
+- factory AnalysisAnalyzedFilesParams.fromNotification(
+- Notification notification) {
+- return new AnalysisAnalyzedFilesParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["directories"] =3D directories;
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.analyzedFiles", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisAnalyzedFilesParams) {
+- return listEqual(
+- directories, other.directories, (String a, String b) =3D> a =3D=
=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, directories.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.closingLabels params
+- *
+- * {
+- * "file": FilePath
+- * "labels": List<ClosingLabel>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisClosingLabelsParams implements HasToJson {
+- String _file;
+-
+- List<ClosingLabel> _labels;
+-
+- /**
+- * The file the closing labels relate to.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file the closing labels relate to.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * Closing labels relevant to the file. Each item represents a useful l=
abel
+- * associated with some range with may be useful to display to the user
+- * within the editor at the end of the range to indicate what construct=
is
+- * closed at that location. Closing labels include constructor/method c=
alls
+- * and List arguments that span multiple lines. Note that the ranges th=
at are
+- * returned can overlap each other because they may be associated with
+- * constructs that can be nested.
+- */
+- List<ClosingLabel> get labels =3D> _labels;
+-
+- /**
+- * Closing labels relevant to the file. Each item represents a useful l=
abel
+- * associated with some range with may be useful to display to the user
+- * within the editor at the end of the range to indicate what construct=
is
+- * closed at that location. Closing labels include constructor/method c=
alls
+- * and List arguments that span multiple lines. Note that the ranges th=
at are
+- * returned can overlap each other because they may be associated with
+- * constructs that can be nested.
+- */
+- void set labels(List<ClosingLabel> value) {
+- assert(value !=3D null);
+- this._labels =3D value;
+- }
+-
+- AnalysisClosingLabelsParams(String file, List<ClosingLabel> labels) {
+- this.file =3D file;
+- this.labels =3D labels;
+- }
+-
+- factory AnalysisClosingLabelsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<ClosingLabel> labels;
+- if (json.containsKey("labels")) {
+- labels =3D jsonDecoder.decodeList(
+- jsonPath + ".labels",
+- json["labels"],
+- (String jsonPath, Object json) =3D>
+- new ClosingLabel.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "labels");
+- }
+- return new AnalysisClosingLabelsParams(file, labels);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.closingLabels params", json);
+- }
+- }
+-
+- factory AnalysisClosingLabelsParams.fromNotification(
+- Notification notification) {
+- return new AnalysisClosingLabelsParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["labels"] =3D
+- labels.map((ClosingLabel value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.closingLabels", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisClosingLabelsParams) {
+- return file =3D=3D other.file &&
+- listEqual(
+- labels, other.labels, (ClosingLabel a, ClosingLabel b) =3D>=
a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, labels.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * AnalysisErrorFixes
+- *
+- * {
+- * "error": AnalysisError
+- * "fixes": List<SourceChange>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisErrorFixes implements HasToJson {
+- AnalysisError _error;
+-
+- List<SourceChange> _fixes;
+-
+- /**
+- * The error with which the fixes are associated.
+- */
+- AnalysisError get error =3D> _error;
+-
+- /**
+- * The error with which the fixes are associated.
+- */
+- void set error(AnalysisError value) {
+- assert(value !=3D null);
+- this._error =3D value;
+- }
+-
+- /**
+- * The fixes associated with the error.
+- */
+- List<SourceChange> get fixes =3D> _fixes;
+-
+- /**
+- * The fixes associated with the error.
+- */
+- void set fixes(List<SourceChange> value) {
+- assert(value !=3D null);
+- this._fixes =3D value;
+- }
+-
+- AnalysisErrorFixes(AnalysisError error, {List<SourceChange> fixes}) {
+- this.error =3D error;
+- if (fixes =3D=3D null) {
+- this.fixes =3D <SourceChange>[];
+- } else {
+- this.fixes =3D fixes;
+- }
+- }
+-
+- factory AnalysisErrorFixes.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- AnalysisError error;
+- if (json.containsKey("error")) {
+- error =3D new AnalysisError.fromJson(
+- jsonDecoder, jsonPath + ".error", json["error"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "error");
+- }
+- List<SourceChange> fixes;
+- if (json.containsKey("fixes")) {
+- fixes =3D jsonDecoder.decodeList(
+- jsonPath + ".fixes",
+- json["fixes"],
+- (String jsonPath, Object json) =3D>
+- new SourceChange.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "fixes");
+- }
+- return new AnalysisErrorFixes(error, fixes: fixes);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorFixes", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["error"] =3D error.toJson();
+- result["fixes"] =3D
+- fixes.map((SourceChange value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisErrorFixes) {
+- return error =3D=3D other.error &&
+- listEqual(
+- fixes, other.fixes, (SourceChange a, SourceChange b) =3D> a=
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, error.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, fixes.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.errors params
+- *
+- * {
+- * "file": FilePath
+- * "errors": List<AnalysisError>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisErrorsParams implements HasToJson {
+- String _file;
+-
+- List<AnalysisError> _errors;
+-
+- /**
+- * The file containing the errors.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the errors.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The errors contained in the file.
+- */
+- List<AnalysisError> get errors =3D> _errors;
+-
+- /**
+- * The errors contained in the file.
+- */
+- void set errors(List<AnalysisError> value) {
+- assert(value !=3D null);
+- this._errors =3D value;
+- }
+-
+- AnalysisErrorsParams(String file, List<AnalysisError> errors) {
+- this.file =3D file;
+- this.errors =3D errors;
+- }
+-
+- factory AnalysisErrorsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<AnalysisError> errors;
+- if (json.containsKey("errors")) {
+- errors =3D jsonDecoder.decodeList(
+- jsonPath + ".errors",
+- json["errors"],
+- (String jsonPath, Object json) =3D>
+- new AnalysisError.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "errors");
+- }
+- return new AnalysisErrorsParams(file, errors);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.errors params", json=
);
+- }
+- }
+-
+- factory AnalysisErrorsParams.fromNotification(Notification notification=
) {
+- return new AnalysisErrorsParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["errors"] =3D
+- errors.map((AnalysisError value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.errors", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisErrorsParams) {
+- return file =3D=3D other.file &&
+- listEqual(errors, other.errors,
+- (AnalysisError a, AnalysisError b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, errors.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.flushResults params
+- *
+- * {
+- * "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisFlushResultsParams implements HasToJson {
+- List<String> _files;
+-
+- /**
+- * The files that are no longer being analyzed.
+- */
+- List<String> get files =3D> _files;
+-
+- /**
+- * The files that are no longer being analyzed.
+- */
+- void set files(List<String> value) {
+- assert(value !=3D null);
+- this._files =3D value;
+- }
+-
+- AnalysisFlushResultsParams(List<String> files) {
+- this.files =3D files;
+- }
+-
+- factory AnalysisFlushResultsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<String> files;
+- if (json.containsKey("files")) {
+- files =3D jsonDecoder.decodeList(
+- jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "files");
+- }
+- return new AnalysisFlushResultsParams(files);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.flushResults params", json);
+- }
+- }
+-
+- factory AnalysisFlushResultsParams.fromNotification(
+- Notification notification) {
+- return new AnalysisFlushResultsParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["files"] =3D files;
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.flushResults", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisFlushResultsParams) {
+- return listEqual(files, other.files, (String a, String b) =3D> a =
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.folding params
+- *
+- * {
+- * "file": FilePath
+- * "regions": List<FoldingRegion>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisFoldingParams implements HasToJson {
+- String _file;
+-
+- List<FoldingRegion> _regions;
+-
+- /**
+- * The file containing the folding regions.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the folding regions.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The folding regions contained in the file.
+- */
+- List<FoldingRegion> get regions =3D> _regions;
+-
+- /**
+- * The folding regions contained in the file.
+- */
+- void set regions(List<FoldingRegion> value) {
+- assert(value !=3D null);
+- this._regions =3D value;
+- }
+-
+- AnalysisFoldingParams(String file, List<FoldingRegion> regions) {
+- this.file =3D file;
+- this.regions =3D regions;
+- }
+-
+- factory AnalysisFoldingParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<FoldingRegion> regions;
+- if (json.containsKey("regions")) {
+- regions =3D jsonDecoder.decodeList(
+- jsonPath + ".regions",
+- json["regions"],
+- (String jsonPath, Object json) =3D>
+- new FoldingRegion.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "regions");
+- }
+- return new AnalysisFoldingParams(file, regions);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.folding params", jso=
n);
+- }
+- }
+-
+- factory AnalysisFoldingParams.fromNotification(Notification notificatio=
n) {
+- return new AnalysisFoldingParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["regions"] =3D
+- regions.map((FoldingRegion value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.folding", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisFoldingParams) {
+- return file =3D=3D other.file &&
+- listEqual(regions, other.regions,
+- (FoldingRegion a, FoldingRegion b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getErrors params
+- *
+- * {
+- * "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetErrorsParams implements RequestParams {
+- String _file;
+-
+- /**
+- * The file for which errors are being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file for which errors are being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- AnalysisGetErrorsParams(String file) {
+- this.file =3D file;
+- }
+-
+- factory AnalysisGetErrorsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- return new AnalysisGetErrorsParams(file);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors params", j=
son);
+- }
+- }
+-
+- factory AnalysisGetErrorsParams.fromRequest(Request request) {
+- return new AnalysisGetErrorsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.getErrors", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetErrorsParams) {
+- return file =3D=3D other.file;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getErrors result
+- *
+- * {
+- * "errors": List<AnalysisError>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetErrorsResult implements ResponseResult {
+- List<AnalysisError> _errors;
+-
+- /**
+- * The errors associated with the file.
+- */
+- List<AnalysisError> get errors =3D> _errors;
+-
+- /**
+- * The errors associated with the file.
+- */
+- void set errors(List<AnalysisError> value) {
+- assert(value !=3D null);
+- this._errors =3D value;
+- }
+-
+- AnalysisGetErrorsResult(List<AnalysisError> errors) {
+- this.errors =3D errors;
+- }
+-
+- factory AnalysisGetErrorsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<AnalysisError> errors;
+- if (json.containsKey("errors")) {
+- errors =3D jsonDecoder.decodeList(
+- jsonPath + ".errors",
+- json["errors"],
+- (String jsonPath, Object json) =3D>
+- new AnalysisError.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "errors");
+- }
+- return new AnalysisGetErrorsResult(errors);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors result", j=
son);
+- }
+- }
+-
+- factory AnalysisGetErrorsResult.fromResponse(Response response) {
+- return new AnalysisGetErrorsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["errors"] =3D
+- errors.map((AnalysisError value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetErrorsResult) {
+- return listEqual(
+- errors, other.errors, (AnalysisError a, AnalysisError b) =3D> a=
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, errors.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getHover params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetHoverParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- /**
+- * The file in which hover information is being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file in which hover information is being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset for which hover information is being requested.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset for which hover information is being requested.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- AnalysisGetHoverParams(String file, int offset) {
+- this.file =3D file;
+- this.offset =3D offset;
+- }
+-
+- factory AnalysisGetHoverParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- return new AnalysisGetHoverParams(file, offset);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.getHover params", js=
on);
+- }
+- }
+-
+- factory AnalysisGetHoverParams.fromRequest(Request request) {
+- return new AnalysisGetHoverParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.getHover", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetHoverParams) {
+- return file =3D=3D other.file && offset =3D=3D other.offset;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getHover result
+- *
+- * {
+- * "hovers": List<HoverInformation>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetHoverResult implements ResponseResult {
+- List<HoverInformation> _hovers;
+-
+- /**
+- * The hover information associated with the location. The list will be=
empty
+- * if no information could be determined for the location. The list can
+- * contain multiple items if the file is being analyzed in multiple con=
texts
+- * in conflicting ways (such as a part that is included in multiple
+- * libraries).
+- */
+- List<HoverInformation> get hovers =3D> _hovers;
+-
+- /**
+- * The hover information associated with the location. The list will be=
empty
+- * if no information could be determined for the location. The list can
+- * contain multiple items if the file is being analyzed in multiple con=
texts
+- * in conflicting ways (such as a part that is included in multiple
+- * libraries).
+- */
+- void set hovers(List<HoverInformation> value) {
+- assert(value !=3D null);
+- this._hovers =3D value;
+- }
+-
+- AnalysisGetHoverResult(List<HoverInformation> hovers) {
+- this.hovers =3D hovers;
+- }
+-
+- factory AnalysisGetHoverResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<HoverInformation> hovers;
+- if (json.containsKey("hovers")) {
+- hovers =3D jsonDecoder.decodeList(
+- jsonPath + ".hovers",
+- json["hovers"],
+- (String jsonPath, Object json) =3D>
+- new HoverInformation.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "hovers");
+- }
+- return new AnalysisGetHoverResult(hovers);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.getHover result", js=
on);
+- }
+- }
+-
+- factory AnalysisGetHoverResult.fromResponse(Response response) {
+- return new AnalysisGetHoverResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["hovers"] =3D
+- hovers.map((HoverInformation value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetHoverResult) {
+- return listEqual(hovers, other.hovers,
+- (HoverInformation a, HoverInformation b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, hovers.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getImportedElements params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetImportedElementsParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- int _length;
+-
+- /**
+- * The file in which import information is being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file in which import information is being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the region for which import information is being reque=
sted.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the region for which import information is being reque=
sted.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the region for which import information is being reque=
sted.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the region for which import information is being reque=
sted.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- AnalysisGetImportedElementsParams(String file, int offset, int length) {
+- this.file =3D file;
+- this.offset =3D offset;
+- this.length =3D length;
+- }
+-
+- factory AnalysisGetImportedElementsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- return new AnalysisGetImportedElementsParams(file, offset, length);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.getImportedElements params", json);
+- }
+- }
+-
+- factory AnalysisGetImportedElementsParams.fromRequest(Request request) {
+- return new AnalysisGetImportedElementsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.getImportedElements", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetImportedElementsParams) {
+- return file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- length =3D=3D other.length;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getImportedElements result
+- *
+- * {
+- * "elements": List<ImportedElements>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetImportedElementsResult implements ResponseResult {
+- List<ImportedElements> _elements;
+-
+- /**
+- * The information about the elements that are referenced in the specif=
ied
+- * region of the specified file that come from imported libraries.
+- */
+- List<ImportedElements> get elements =3D> _elements;
+-
+- /**
+- * The information about the elements that are referenced in the specif=
ied
+- * region of the specified file that come from imported libraries.
+- */
+- void set elements(List<ImportedElements> value) {
+- assert(value !=3D null);
+- this._elements =3D value;
+- }
+-
+- AnalysisGetImportedElementsResult(List<ImportedElements> elements) {
+- this.elements =3D elements;
+- }
+-
+- factory AnalysisGetImportedElementsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<ImportedElements> elements;
+- if (json.containsKey("elements")) {
+- elements =3D jsonDecoder.decodeList(
+- jsonPath + ".elements",
+- json["elements"],
+- (String jsonPath, Object json) =3D>
+- new ImportedElements.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "elements");
+- }
+- return new AnalysisGetImportedElementsResult(elements);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.getImportedElements result", json);
+- }
+- }
+-
+- factory AnalysisGetImportedElementsResult.fromResponse(Response respons=
e) {
+- return new AnalysisGetImportedElementsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["elements"] =3D
+- elements.map((ImportedElements value) =3D> value.toJson()).toList=
();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetImportedElementsResult) {
+- return listEqual(elements, other.elements,
+- (ImportedElements a, ImportedElements b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, elements.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getLibraryDependencies params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetLibraryDependenciesParams implements RequestParams {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.getLibraryDependencies", null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetLibraryDependenciesParams) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 246577680;
+- }
+-}
+-
+-/**
+- * analysis.getLibraryDependencies result
+- *
+- * {
+- * "libraries": List<FilePath>
+- * "packageMap": Map<String, Map<String, List<FilePath>>>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetLibraryDependenciesResult implements ResponseResult {
+- List<String> _libraries;
+-
+- Map<String, Map<String, List<String>>> _packageMap;
+-
+- /**
+- * A list of the paths of library elements referenced by files in exist=
ing
+- * analysis roots.
+- */
+- List<String> get libraries =3D> _libraries;
+-
+- /**
+- * A list of the paths of library elements referenced by files in exist=
ing
+- * analysis roots.
+- */
+- void set libraries(List<String> value) {
+- assert(value !=3D null);
+- this._libraries =3D value;
+- }
+-
+- /**
+- * A mapping from context source roots to package maps which map package
+- * names to source directories for use in client-side package URI resol=
ution.
+- */
+- Map<String, Map<String, List<String>>> get packageMap =3D> _packageMap;
+-
+- /**
+- * A mapping from context source roots to package maps which map package
+- * names to source directories for use in client-side package URI resol=
ution.
+- */
+- void set packageMap(Map<String, Map<String, List<String>>> value) {
+- assert(value !=3D null);
+- this._packageMap =3D value;
+- }
+-
+- AnalysisGetLibraryDependenciesResult(List<String> libraries,
+- Map<String, Map<String, List<String>>> packageMap) {
+- this.libraries =3D libraries;
+- this.packageMap =3D packageMap;
+- }
+-
+- factory AnalysisGetLibraryDependenciesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<String> libraries;
+- if (json.containsKey("libraries")) {
+- libraries =3D jsonDecoder.decodeList(jsonPath + ".libraries",
+- json["libraries"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "libraries");
+- }
+- Map<String, Map<String, List<String>>> packageMap;
+- if (json.containsKey("packageMap")) {
+- packageMap =3D jsonDecoder.decodeMap(
+- jsonPath + ".packageMap", json["packageMap"],
+- valueDecoder: (String jsonPath, Object json) =3D>
+- jsonDecoder.decodeMap(jsonPath, json,
+- valueDecoder: (String jsonPath, Object json) =3D> jso=
nDecoder
+- .decodeList(jsonPath, json, jsonDecoder.decodeStr=
ing)));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "packageMap");
+- }
+- return new AnalysisGetLibraryDependenciesResult(libraries, packageM=
ap);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.getLibraryDependencies result", json);
+- }
+- }
+-
+- factory AnalysisGetLibraryDependenciesResult.fromResponse(Response resp=
onse) {
+- return new AnalysisGetLibraryDependenciesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["libraries"] =3D libraries;
+- result["packageMap"] =3D packageMap;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetLibraryDependenciesResult) {
+- return listEqual(
+- libraries, other.libraries, (String a, String b) =3D> a =3D=
=3D b) &&
+- mapEqual(
+- packageMap,
+- other.packageMap,
+- (Map<String, List<String>> a, Map<String, List<String>> b) =
=3D>
+- mapEqual(
+- a,
+- b,
+- (List<String> a, List<String> b) =3D>
+- listEqual(a, b, (String a, String b) =3D> a =3D=
=3D b)));
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, libraries.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, packageMap.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getNavigation params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetNavigationParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- int _length;
+-
+- /**
+- * The file in which navigation information is being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file in which navigation information is being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the region for which navigation information is being
+- * requested.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the region for which navigation information is being
+- * requested.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the region for which navigation information is being
+- * requested.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the region for which navigation information is being
+- * requested.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- AnalysisGetNavigationParams(String file, int offset, int length) {
+- this.file =3D file;
+- this.offset =3D offset;
+- this.length =3D length;
+- }
+-
+- factory AnalysisGetNavigationParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- return new AnalysisGetNavigationParams(file, offset, length);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.getNavigation params", json);
+- }
+- }
+-
+- factory AnalysisGetNavigationParams.fromRequest(Request request) {
+- return new AnalysisGetNavigationParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.getNavigation", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetNavigationParams) {
+- return file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- length =3D=3D other.length;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getNavigation result
+- *
+- * {
+- * "files": List<FilePath>
+- * "targets": List<NavigationTarget>
+- * "regions": List<NavigationRegion>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetNavigationResult implements ResponseResult {
+- List<String> _files;
+-
+- List<NavigationTarget> _targets;
+-
+- List<NavigationRegion> _regions;
+-
+- /**
+- * A list of the paths of files that are referenced by the navigation
+- * targets.
+- */
+- List<String> get files =3D> _files;
+-
+- /**
+- * A list of the paths of files that are referenced by the navigation
+- * targets.
+- */
+- void set files(List<String> value) {
+- assert(value !=3D null);
+- this._files =3D value;
+- }
+-
+- /**
+- * A list of the navigation targets that are referenced by the navigati=
on
+- * regions.
+- */
+- List<NavigationTarget> get targets =3D> _targets;
+-
+- /**
+- * A list of the navigation targets that are referenced by the navigati=
on
+- * regions.
+- */
+- void set targets(List<NavigationTarget> value) {
+- assert(value !=3D null);
+- this._targets =3D value;
+- }
+-
+- /**
+- * A list of the navigation regions within the requested region of the =
file.
+- */
+- List<NavigationRegion> get regions =3D> _regions;
+-
+- /**
+- * A list of the navigation regions within the requested region of the =
file.
+- */
+- void set regions(List<NavigationRegion> value) {
+- assert(value !=3D null);
+- this._regions =3D value;
+- }
+-
+- AnalysisGetNavigationResult(List<String> files,
+- List<NavigationTarget> targets, List<NavigationRegion> regions) {
+- this.files =3D files;
+- this.targets =3D targets;
+- this.regions =3D regions;
+- }
+-
+- factory AnalysisGetNavigationResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<String> files;
+- if (json.containsKey("files")) {
+- files =3D jsonDecoder.decodeList(
+- jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "files");
+- }
+- List<NavigationTarget> targets;
+- if (json.containsKey("targets")) {
+- targets =3D jsonDecoder.decodeList(
+- jsonPath + ".targets",
+- json["targets"],
+- (String jsonPath, Object json) =3D>
+- new NavigationTarget.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "targets");
+- }
+- List<NavigationRegion> regions;
+- if (json.containsKey("regions")) {
+- regions =3D jsonDecoder.decodeList(
+- jsonPath + ".regions",
+- json["regions"],
+- (String jsonPath, Object json) =3D>
+- new NavigationRegion.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "regions");
+- }
+- return new AnalysisGetNavigationResult(files, targets, regions);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.getNavigation result", json);
+- }
+- }
+-
+- factory AnalysisGetNavigationResult.fromResponse(Response response) {
+- return new AnalysisGetNavigationResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["files"] =3D files;
+- result["targets"] =3D
+- targets.map((NavigationTarget value) =3D> value.toJson()).toList(=
);
+- result["regions"] =3D
+- regions.map((NavigationRegion value) =3D> value.toJson()).toList(=
);
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetNavigationResult) {
+- return listEqual(files, other.files, (String a, String b) =3D> a =
=3D=3D b) &&
+- listEqual(targets, other.targets,
+- (NavigationTarget a, NavigationTarget b) =3D> a =3D=3D b) &&
+- listEqual(regions, other.regions,
+- (NavigationRegion a, NavigationRegion b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, targets.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getReachableSources params
+- *
+- * {
+- * "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetReachableSourcesParams implements RequestParams {
+- String _file;
+-
+- /**
+- * The file for which reachable source information is being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file for which reachable source information is being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- AnalysisGetReachableSourcesParams(String file) {
+- this.file =3D file;
+- }
+-
+- factory AnalysisGetReachableSourcesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- return new AnalysisGetReachableSourcesParams(file);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.getReachableSources params", json);
+- }
+- }
+-
+- factory AnalysisGetReachableSourcesParams.fromRequest(Request request) {
+- return new AnalysisGetReachableSourcesParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.getReachableSources", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetReachableSourcesParams) {
+- return file =3D=3D other.file;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.getReachableSources result
+- *
+- * {
+- * "sources": Map<String, List<String>>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisGetReachableSourcesResult implements ResponseResult {
+- Map<String, List<String>> _sources;
+-
+- /**
+- * A mapping from source URIs to directly reachable source URIs. For ex=
ample,
+- * a file "foo.dart" that imports "bar.dart" would have the correspondi=
ng
+- * mapping { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart"=
has
+- * further imports (or exports) there will be a mapping from the URI
+- * "file:///bar.dart" to them. To check if a specific URI is reachable =
from a
+- * given file, clients can check for its presence in the resulting key =
set.
+- */
+- Map<String, List<String>> get sources =3D> _sources;
+-
+- /**
+- * A mapping from source URIs to directly reachable source URIs. For ex=
ample,
+- * a file "foo.dart" that imports "bar.dart" would have the correspondi=
ng
+- * mapping { "file:///foo.dart" : ["file:///bar.dart"] }. If "bar.dart"=
has
+- * further imports (or exports) there will be a mapping from the URI
+- * "file:///bar.dart" to them. To check if a specific URI is reachable =
from a
+- * given file, clients can check for its presence in the resulting key =
set.
+- */
+- void set sources(Map<String, List<String>> value) {
+- assert(value !=3D null);
+- this._sources =3D value;
+- }
+-
+- AnalysisGetReachableSourcesResult(Map<String, List<String>> sources) {
+- this.sources =3D sources;
+- }
+-
+- factory AnalysisGetReachableSourcesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- Map<String, List<String>> sources;
+- if (json.containsKey("sources")) {
+- sources =3D jsonDecoder.decodeMap(jsonPath + ".sources", json["so=
urces"],
+- valueDecoder: (String jsonPath, Object json) =3D> jsonDecoder
+- .decodeList(jsonPath, json, jsonDecoder.decodeString));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "sources");
+- }
+- return new AnalysisGetReachableSourcesResult(sources);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.getReachableSources result", json);
+- }
+- }
+-
+- factory AnalysisGetReachableSourcesResult.fromResponse(Response respons=
e) {
+- return new AnalysisGetReachableSourcesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["sources"] =3D sources;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisGetReachableSourcesResult) {
+- return mapEqual(
+- sources,
+- other.sources,
+- (List<String> a, List<String> b) =3D>
+- listEqual(a, b, (String a, String b) =3D> a =3D=3D b));
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, sources.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.highlights params
+- *
+- * {
+- * "file": FilePath
+- * "regions": List<HighlightRegion>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisHighlightsParams implements HasToJson {
+- String _file;
+-
+- List<HighlightRegion> _regions;
+-
+- /**
+- * The file containing the highlight regions.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the highlight regions.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The highlight regions contained in the file. Each highlight region
+- * represents a particular syntactic or semantic meaning associated wit=
h some
+- * range. Note that the highlight regions that are returned can overlap=
other
+- * highlight regions if there is more than one meaning associated with a
+- * particular region.
+- */
+- List<HighlightRegion> get regions =3D> _regions;
+-
+- /**
+- * The highlight regions contained in the file. Each highlight region
+- * represents a particular syntactic or semantic meaning associated wit=
h some
+- * range. Note that the highlight regions that are returned can overlap=
other
+- * highlight regions if there is more than one meaning associated with a
+- * particular region.
+- */
+- void set regions(List<HighlightRegion> value) {
+- assert(value !=3D null);
+- this._regions =3D value;
+- }
+-
+- AnalysisHighlightsParams(String file, List<HighlightRegion> regions) {
+- this.file =3D file;
+- this.regions =3D regions;
+- }
+-
+- factory AnalysisHighlightsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<HighlightRegion> regions;
+- if (json.containsKey("regions")) {
+- regions =3D jsonDecoder.decodeList(
+- jsonPath + ".regions",
+- json["regions"],
+- (String jsonPath, Object json) =3D>
+- new HighlightRegion.fromJson(jsonDecoder, jsonPath, json)=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "regions");
+- }
+- return new AnalysisHighlightsParams(file, regions);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.highlights params", =
json);
+- }
+- }
+-
+- factory AnalysisHighlightsParams.fromNotification(Notification notifica=
tion) {
+- return new AnalysisHighlightsParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["regions"] =3D
+- regions.map((HighlightRegion value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.highlights", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisHighlightsParams) {
+- return file =3D=3D other.file &&
+- listEqual(regions, other.regions,
+- (HighlightRegion a, HighlightRegion b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.implemented params
+- *
+- * {
+- * "file": FilePath
+- * "classes": List<ImplementedClass>
+- * "members": List<ImplementedMember>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisImplementedParams implements HasToJson {
+- String _file;
+-
+- List<ImplementedClass> _classes;
+-
+- List<ImplementedMember> _members;
+-
+- /**
+- * The file with which the implementations are associated.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file with which the implementations are associated.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The classes defined in the file that are implemented or extended.
+- */
+- List<ImplementedClass> get classes =3D> _classes;
+-
+- /**
+- * The classes defined in the file that are implemented or extended.
+- */
+- void set classes(List<ImplementedClass> value) {
+- assert(value !=3D null);
+- this._classes =3D value;
+- }
+-
+- /**
+- * The member defined in the file that are implemented or overridden.
+- */
+- List<ImplementedMember> get members =3D> _members;
+-
+- /**
+- * The member defined in the file that are implemented or overridden.
+- */
+- void set members(List<ImplementedMember> value) {
+- assert(value !=3D null);
+- this._members =3D value;
+- }
+-
+- AnalysisImplementedParams(String file, List<ImplementedClass> classes,
+- List<ImplementedMember> members) {
+- this.file =3D file;
+- this.classes =3D classes;
+- this.members =3D members;
+- }
+-
+- factory AnalysisImplementedParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<ImplementedClass> classes;
+- if (json.containsKey("classes")) {
+- classes =3D jsonDecoder.decodeList(
+- jsonPath + ".classes",
+- json["classes"],
+- (String jsonPath, Object json) =3D>
+- new ImplementedClass.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "classes");
+- }
+- List<ImplementedMember> members;
+- if (json.containsKey("members")) {
+- members =3D jsonDecoder.decodeList(
+- jsonPath + ".members",
+- json["members"],
+- (String jsonPath, Object json) =3D>
+- new ImplementedMember.fromJson(jsonDecoder, jsonPath, jso=
n));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "members");
+- }
+- return new AnalysisImplementedParams(file, classes, members);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.implemented params",=
json);
+- }
+- }
+-
+- factory AnalysisImplementedParams.fromNotification(
+- Notification notification) {
+- return new AnalysisImplementedParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["classes"] =3D
+- classes.map((ImplementedClass value) =3D> value.toJson()).toList(=
);
+- result["members"] =3D
+- members.map((ImplementedMember value) =3D> value.toJson()).toList=
();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.implemented", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisImplementedParams) {
+- return file =3D=3D other.file &&
+- listEqual(classes, other.classes,
+- (ImplementedClass a, ImplementedClass b) =3D> a =3D=3D b) &&
+- listEqual(members, other.members,
+- (ImplementedMember a, ImplementedMember b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, classes.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, members.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.invalidate params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * "length": int
+- * "delta": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisInvalidateParams implements HasToJson {
+- String _file;
+-
+- int _offset;
+-
+- int _length;
+-
+- int _delta;
+-
+- /**
+- * The file whose information has been invalidated.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file whose information has been invalidated.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the invalidated region.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the invalidated region.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the invalidated region.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the invalidated region.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- /**
+- * The delta to be applied to the offsets in information that follows t=
he
+- * invalidated region in order to update it so that it doesn't need to =
be
+- * re-requested.
+- */
+- int get delta =3D> _delta;
+-
+- /**
+- * The delta to be applied to the offsets in information that follows t=
he
+- * invalidated region in order to update it so that it doesn't need to =
be
+- * re-requested.
+- */
+- void set delta(int value) {
+- assert(value !=3D null);
+- this._delta =3D value;
+- }
+-
+- AnalysisInvalidateParams(String file, int offset, int length, int delta=
) {
+- this.file =3D file;
+- this.offset =3D offset;
+- this.length =3D length;
+- this.delta =3D delta;
+- }
+-
+- factory AnalysisInvalidateParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- int delta;
+- if (json.containsKey("delta")) {
+- delta =3D jsonDecoder.decodeInt(jsonPath + ".delta", json["delta"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "delta");
+- }
+- return new AnalysisInvalidateParams(file, offset, length, delta);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.invalidate params", =
json);
+- }
+- }
+-
+- factory AnalysisInvalidateParams.fromNotification(Notification notifica=
tion) {
+- return new AnalysisInvalidateParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- result["delta"] =3D delta;
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.invalidate", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisInvalidateParams) {
+- return file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- length =3D=3D other.length &&
+- delta =3D=3D other.delta;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, delta.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.navigation params
+- *
+- * {
+- * "file": FilePath
+- * "regions": List<NavigationRegion>
+- * "targets": List<NavigationTarget>
+- * "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisNavigationParams implements HasToJson {
+- String _file;
+-
+- List<NavigationRegion> _regions;
+-
+- List<NavigationTarget> _targets;
+-
+- List<String> _files;
+-
+- /**
+- * The file containing the navigation regions.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the navigation regions.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The navigation regions contained in the file. The regions are sorted=
by
+- * their offsets. Each navigation region represents a list of targets
+- * associated with some range. The lists will usually contain a single
+- * target, but can contain more in the case of a part that is included =
in
+- * multiple libraries or in Dart code that is compiled against multiple
+- * versions of a package. Note that the navigation regions that are ret=
urned
+- * do not overlap other navigation regions.
+- */
+- List<NavigationRegion> get regions =3D> _regions;
+-
+- /**
+- * The navigation regions contained in the file. The regions are sorted=
by
+- * their offsets. Each navigation region represents a list of targets
+- * associated with some range. The lists will usually contain a single
+- * target, but can contain more in the case of a part that is included =
in
+- * multiple libraries or in Dart code that is compiled against multiple
+- * versions of a package. Note that the navigation regions that are ret=
urned
+- * do not overlap other navigation regions.
+- */
+- void set regions(List<NavigationRegion> value) {
+- assert(value !=3D null);
+- this._regions =3D value;
+- }
+-
+- /**
+- * The navigation targets referenced in the file. They are referenced by
+- * NavigationRegions by their index in this array.
+- */
+- List<NavigationTarget> get targets =3D> _targets;
+-
+- /**
+- * The navigation targets referenced in the file. They are referenced by
+- * NavigationRegions by their index in this array.
+- */
+- void set targets(List<NavigationTarget> value) {
+- assert(value !=3D null);
+- this._targets =3D value;
+- }
+-
+- /**
+- * The files containing navigation targets referenced in the file. They=
are
+- * referenced by NavigationTargets by their index in this array.
+- */
+- List<String> get files =3D> _files;
+-
+- /**
+- * The files containing navigation targets referenced in the file. They=
are
+- * referenced by NavigationTargets by their index in this array.
+- */
+- void set files(List<String> value) {
+- assert(value !=3D null);
+- this._files =3D value;
+- }
+-
+- AnalysisNavigationParams(String file, List<NavigationRegion> regions,
+- List<NavigationTarget> targets, List<String> files) {
+- this.file =3D file;
+- this.regions =3D regions;
+- this.targets =3D targets;
+- this.files =3D files;
+- }
+-
+- factory AnalysisNavigationParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<NavigationRegion> regions;
+- if (json.containsKey("regions")) {
+- regions =3D jsonDecoder.decodeList(
+- jsonPath + ".regions",
+- json["regions"],
+- (String jsonPath, Object json) =3D>
+- new NavigationRegion.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "regions");
+- }
+- List<NavigationTarget> targets;
+- if (json.containsKey("targets")) {
+- targets =3D jsonDecoder.decodeList(
+- jsonPath + ".targets",
+- json["targets"],
+- (String jsonPath, Object json) =3D>
+- new NavigationTarget.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "targets");
+- }
+- List<String> files;
+- if (json.containsKey("files")) {
+- files =3D jsonDecoder.decodeList(
+- jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "files");
+- }
+- return new AnalysisNavigationParams(file, regions, targets, files);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.navigation params", =
json);
+- }
+- }
+-
+- factory AnalysisNavigationParams.fromNotification(Notification notifica=
tion) {
+- return new AnalysisNavigationParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["regions"] =3D
+- regions.map((NavigationRegion value) =3D> value.toJson()).toList(=
);
+- result["targets"] =3D
+- targets.map((NavigationTarget value) =3D> value.toJson()).toList(=
);
+- result["files"] =3D files;
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.navigation", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisNavigationParams) {
+- return file =3D=3D other.file &&
+- listEqual(regions, other.regions,
+- (NavigationRegion a, NavigationRegion b) =3D> a =3D=3D b) &&
+- listEqual(targets, other.targets,
+- (NavigationTarget a, NavigationTarget b) =3D> a =3D=3D b) &&
+- listEqual(files, other.files, (String a, String b) =3D> a =3D=
=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, regions.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, targets.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.occurrences params
+- *
+- * {
+- * "file": FilePath
+- * "occurrences": List<Occurrences>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOccurrencesParams implements HasToJson {
+- String _file;
+-
+- List<Occurrences> _occurrences;
+-
+- /**
+- * The file in which the references occur.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file in which the references occur.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The occurrences of references to elements within the file.
+- */
+- List<Occurrences> get occurrences =3D> _occurrences;
+-
+- /**
+- * The occurrences of references to elements within the file.
+- */
+- void set occurrences(List<Occurrences> value) {
+- assert(value !=3D null);
+- this._occurrences =3D value;
+- }
+-
+- AnalysisOccurrencesParams(String file, List<Occurrences> occurrences) {
+- this.file =3D file;
+- this.occurrences =3D occurrences;
+- }
+-
+- factory AnalysisOccurrencesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<Occurrences> occurrences;
+- if (json.containsKey("occurrences")) {
+- occurrences =3D jsonDecoder.decodeList(
+- jsonPath + ".occurrences",
+- json["occurrences"],
+- (String jsonPath, Object json) =3D>
+- new Occurrences.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "occurrences");
+- }
+- return new AnalysisOccurrencesParams(file, occurrences);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.occurrences params",=
json);
+- }
+- }
+-
+- factory AnalysisOccurrencesParams.fromNotification(
+- Notification notification) {
+- return new AnalysisOccurrencesParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["occurrences"] =3D
+- occurrences.map((Occurrences value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.occurrences", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisOccurrencesParams) {
+- return file =3D=3D other.file &&
+- listEqual(occurrences, other.occurrences,
+- (Occurrences a, Occurrences b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, occurrences.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * AnalysisOptions
+- *
+- * {
+- * "enableAsync": optional bool
+- * "enableDeferredLoading": optional bool
+- * "enableEnums": optional bool
+- * "enableNullAwareOperators": optional bool
+- * "enableSuperMixins": optional bool
+- * "generateDart2jsHints": optional bool
+- * "generateHints": optional bool
+- * "generateLints": optional bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOptions implements HasToJson {
+- bool _enableAsync;
+-
+- bool _enableDeferredLoading;
+-
+- bool _enableEnums;
+-
+- bool _enableNullAwareOperators;
+-
+- bool _enableSuperMixins;
+-
+- bool _generateDart2jsHints;
+-
+- bool _generateHints;
+-
+- bool _generateLints;
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed async fe=
ature.
+- */
+- bool get enableAsync =3D> _enableAsync;
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed async fe=
ature.
+- */
+- void set enableAsync(bool value) {
+- this._enableAsync =3D value;
+- }
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed deferred
+- * loading feature.
+- */
+- bool get enableDeferredLoading =3D> _enableDeferredLoading;
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed deferred
+- * loading feature.
+- */
+- void set enableDeferredLoading(bool value) {
+- this._enableDeferredLoading =3D value;
+- }
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed enum fea=
ture.
+- */
+- bool get enableEnums =3D> _enableEnums;
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed enum fea=
ture.
+- */
+- void set enableEnums(bool value) {
+- this._enableEnums =3D value;
+- }
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed "null aw=
are
+- * operators" feature.
+- */
+- bool get enableNullAwareOperators =3D> _enableNullAwareOperators;
+-
+- /**
+- * Deprecated: this feature is always enabled.
+- *
+- * True if the client wants to enable support for the proposed "null aw=
are
+- * operators" feature.
+- */
+- void set enableNullAwareOperators(bool value) {
+- this._enableNullAwareOperators =3D value;
+- }
+-
+- /**
+- * True if the client wants to enable support for the proposed "less
+- * restricted mixins" proposal (DEP 34).
+- */
+- bool get enableSuperMixins =3D> _enableSuperMixins;
+-
+- /**
+- * True if the client wants to enable support for the proposed "less
+- * restricted mixins" proposal (DEP 34).
+- */
+- void set enableSuperMixins(bool value) {
+- this._enableSuperMixins =3D value;
+- }
+-
+- /**
+- * True if hints that are specific to dart2js should be generated. This
+- * option is ignored if generateHints is false.
+- */
+- bool get generateDart2jsHints =3D> _generateDart2jsHints;
+-
+- /**
+- * True if hints that are specific to dart2js should be generated. This
+- * option is ignored if generateHints is false.
+- */
+- void set generateDart2jsHints(bool value) {
+- this._generateDart2jsHints =3D value;
+- }
+-
+- /**
+- * True if hints should be generated as part of generating errors and
+- * warnings.
+- */
+- bool get generateHints =3D> _generateHints;
+-
+- /**
+- * True if hints should be generated as part of generating errors and
+- * warnings.
+- */
+- void set generateHints(bool value) {
+- this._generateHints =3D value;
+- }
+-
+- /**
+- * True if lints should be generated as part of generating errors and
+- * warnings.
+- */
+- bool get generateLints =3D> _generateLints;
+-
+- /**
+- * True if lints should be generated as part of generating errors and
+- * warnings.
+- */
+- void set generateLints(bool value) {
+- this._generateLints =3D value;
+- }
+-
+- AnalysisOptions(
+- {bool enableAsync,
+- bool enableDeferredLoading,
+- bool enableEnums,
+- bool enableNullAwareOperators,
+- bool enableSuperMixins,
+- bool generateDart2jsHints,
+- bool generateHints,
+- bool generateLints}) {
+- this.enableAsync =3D enableAsync;
+- this.enableDeferredLoading =3D enableDeferredLoading;
+- this.enableEnums =3D enableEnums;
+- this.enableNullAwareOperators =3D enableNullAwareOperators;
+- this.enableSuperMixins =3D enableSuperMixins;
+- this.generateDart2jsHints =3D generateDart2jsHints;
+- this.generateHints =3D generateHints;
+- this.generateLints =3D generateLints;
+- }
+-
+- factory AnalysisOptions.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool enableAsync;
+- if (json.containsKey("enableAsync")) {
+- enableAsync =3D jsonDecoder.decodeBool(
+- jsonPath + ".enableAsync", json["enableAsync"]);
+- }
+- bool enableDeferredLoading;
+- if (json.containsKey("enableDeferredLoading")) {
+- enableDeferredLoading =3D jsonDecoder.decodeBool(
+- jsonPath + ".enableDeferredLoading", json["enableDeferredLoad=
ing"]);
+- }
+- bool enableEnums;
+- if (json.containsKey("enableEnums")) {
+- enableEnums =3D jsonDecoder.decodeBool(
+- jsonPath + ".enableEnums", json["enableEnums"]);
+- }
+- bool enableNullAwareOperators;
+- if (json.containsKey("enableNullAwareOperators")) {
+- enableNullAwareOperators =3D jsonDecoder.decodeBool(
+- jsonPath + ".enableNullAwareOperators",
+- json["enableNullAwareOperators"]);
+- }
+- bool enableSuperMixins;
+- if (json.containsKey("enableSuperMixins")) {
+- enableSuperMixins =3D jsonDecoder.decodeBool(
+- jsonPath + ".enableSuperMixins", json["enableSuperMixins"]);
+- }
+- bool generateDart2jsHints;
+- if (json.containsKey("generateDart2jsHints")) {
+- generateDart2jsHints =3D jsonDecoder.decodeBool(
+- jsonPath + ".generateDart2jsHints", json["generateDart2jsHint=
s"]);
+- }
+- bool generateHints;
+- if (json.containsKey("generateHints")) {
+- generateHints =3D jsonDecoder.decodeBool(
+- jsonPath + ".generateHints", json["generateHints"]);
+- }
+- bool generateLints;
+- if (json.containsKey("generateLints")) {
+- generateLints =3D jsonDecoder.decodeBool(
+- jsonPath + ".generateLints", json["generateLints"]);
+- }
+- return new AnalysisOptions(
+- enableAsync: enableAsync,
+- enableDeferredLoading: enableDeferredLoading,
+- enableEnums: enableEnums,
+- enableNullAwareOperators: enableNullAwareOperators,
+- enableSuperMixins: enableSuperMixins,
+- generateDart2jsHints: generateDart2jsHints,
+- generateHints: generateHints,
+- generateLints: generateLints);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "AnalysisOptions", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- if (enableAsync !=3D null) {
+- result["enableAsync"] =3D enableAsync;
+- }
+- if (enableDeferredLoading !=3D null) {
+- result["enableDeferredLoading"] =3D enableDeferredLoading;
+- }
+- if (enableEnums !=3D null) {
+- result["enableEnums"] =3D enableEnums;
+- }
+- if (enableNullAwareOperators !=3D null) {
+- result["enableNullAwareOperators"] =3D enableNullAwareOperators;
+- }
+- if (enableSuperMixins !=3D null) {
+- result["enableSuperMixins"] =3D enableSuperMixins;
+- }
+- if (generateDart2jsHints !=3D null) {
+- result["generateDart2jsHints"] =3D generateDart2jsHints;
+- }
+- if (generateHints !=3D null) {
+- result["generateHints"] =3D generateHints;
+- }
+- if (generateLints !=3D null) {
+- result["generateLints"] =3D generateLints;
+- }
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisOptions) {
+- return enableAsync =3D=3D other.enableAsync &&
+- enableDeferredLoading =3D=3D other.enableDeferredLoading &&
+- enableEnums =3D=3D other.enableEnums &&
+- enableNullAwareOperators =3D=3D other.enableNullAwareOperators =
&&
+- enableSuperMixins =3D=3D other.enableSuperMixins &&
+- generateDart2jsHints =3D=3D other.generateDart2jsHints &&
+- generateHints =3D=3D other.generateHints &&
+- generateLints =3D=3D other.generateLints;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, enableAsync.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, enableDeferredLoading.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, enableEnums.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, enableNullAwareOperators.hashCo=
de);
+- hash =3D JenkinsSmiHash.combine(hash, enableSuperMixins.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, generateDart2jsHints.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, generateHints.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, generateLints.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.outline params
+- *
+- * {
+- * "file": FilePath
+- * "kind": FileKind
+- * "libraryName": optional String
+- * "outline": Outline
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOutlineParams implements HasToJson {
+- String _file;
+-
+- FileKind _kind;
+-
+- String _libraryName;
+-
+- Outline _outline;
+-
+- /**
+- * The file with which the outline is associated.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file with which the outline is associated.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The kind of the file.
+- */
+- FileKind get kind =3D> _kind;
+-
+- /**
+- * The kind of the file.
+- */
+- void set kind(FileKind value) {
+- assert(value !=3D null);
+- this._kind =3D value;
+- }
+-
+- /**
+- * The name of the library defined by the file using a "library" direct=
ive,
+- * or referenced by a "part of" directive. If both "library" and "part =
of"
+- * directives are present, then the "library" directive takes precedenc=
e.
+- * This field will be omitted if the file has neither "library" nor "pa=
rt of"
+- * directives.
+- */
+- String get libraryName =3D> _libraryName;
+-
+- /**
+- * The name of the library defined by the file using a "library" direct=
ive,
+- * or referenced by a "part of" directive. If both "library" and "part =
of"
+- * directives are present, then the "library" directive takes precedenc=
e.
+- * This field will be omitted if the file has neither "library" nor "pa=
rt of"
+- * directives.
+- */
+- void set libraryName(String value) {
+- this._libraryName =3D value;
+- }
+-
+- /**
+- * The outline associated with the file.
+- */
+- Outline get outline =3D> _outline;
+-
+- /**
+- * The outline associated with the file.
+- */
+- void set outline(Outline value) {
+- assert(value !=3D null);
+- this._outline =3D value;
+- }
+-
+- AnalysisOutlineParams(String file, FileKind kind, Outline outline,
+- {String libraryName}) {
+- this.file =3D file;
+- this.kind =3D kind;
+- this.libraryName =3D libraryName;
+- this.outline =3D outline;
+- }
+-
+- factory AnalysisOutlineParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- FileKind kind;
+- if (json.containsKey("kind")) {
+- kind =3D new FileKind.fromJson(
+- jsonDecoder, jsonPath + ".kind", json["kind"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "kind");
+- }
+- String libraryName;
+- if (json.containsKey("libraryName")) {
+- libraryName =3D jsonDecoder.decodeString(
+- jsonPath + ".libraryName", json["libraryName"]);
+- }
+- Outline outline;
+- if (json.containsKey("outline")) {
+- outline =3D new Outline.fromJson(
+- jsonDecoder, jsonPath + ".outline", json["outline"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "outline");
+- }
+- return new AnalysisOutlineParams(file, kind, outline,
+- libraryName: libraryName);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.outline params", jso=
n);
+- }
+- }
+-
+- factory AnalysisOutlineParams.fromNotification(Notification notificatio=
n) {
+- return new AnalysisOutlineParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["kind"] =3D kind.toJson();
+- if (libraryName !=3D null) {
+- result["libraryName"] =3D libraryName;
+- }
+- result["outline"] =3D outline.toJson();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.outline", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisOutlineParams) {
+- return file =3D=3D other.file &&
+- kind =3D=3D other.kind &&
+- libraryName =3D=3D other.libraryName &&
+- outline =3D=3D other.outline;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, libraryName.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, outline.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.overrides params
+- *
+- * {
+- * "file": FilePath
+- * "overrides": List<Override>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisOverridesParams implements HasToJson {
+- String _file;
+-
+- List<Override> _overrides;
+-
+- /**
+- * The file with which the overrides are associated.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file with which the overrides are associated.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The overrides associated with the file.
+- */
+- List<Override> get overrides =3D> _overrides;
+-
+- /**
+- * The overrides associated with the file.
+- */
+- void set overrides(List<Override> value) {
+- assert(value !=3D null);
+- this._overrides =3D value;
+- }
+-
+- AnalysisOverridesParams(String file, List<Override> overrides) {
+- this.file =3D file;
+- this.overrides =3D overrides;
+- }
+-
+- factory AnalysisOverridesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<Override> overrides;
+- if (json.containsKey("overrides")) {
+- overrides =3D jsonDecoder.decodeList(
+- jsonPath + ".overrides",
+- json["overrides"],
+- (String jsonPath, Object json) =3D>
+- new Override.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "overrides");
+- }
+- return new AnalysisOverridesParams(file, overrides);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.overrides params", j=
son);
+- }
+- }
+-
+- factory AnalysisOverridesParams.fromNotification(Notification notificat=
ion) {
+- return new AnalysisOverridesParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["overrides"] =3D
+- overrides.map((Override value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("analysis.overrides", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisOverridesParams) {
+- return file =3D=3D other.file &&
+- listEqual(
+- overrides, other.overrides, (Override a, Override b) =3D> a=
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, overrides.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.reanalyze params
+- *
+- * {
+- * "roots": optional List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisReanalyzeParams implements RequestParams {
+- List<String> _roots;
+-
+- /**
+- * A list of the analysis roots that are to be re-analyzed.
+- */
+- List<String> get roots =3D> _roots;
+-
+- /**
+- * A list of the analysis roots that are to be re-analyzed.
+- */
+- void set roots(List<String> value) {
+- this._roots =3D value;
+- }
+-
+- AnalysisReanalyzeParams({List<String> roots}) {
+- this.roots =3D roots;
+- }
+-
+- factory AnalysisReanalyzeParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<String> roots;
+- if (json.containsKey("roots")) {
+- roots =3D jsonDecoder.decodeList(
+- jsonPath + ".roots", json["roots"], jsonDecoder.decodeString);
+- }
+- return new AnalysisReanalyzeParams(roots: roots);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analysis.reanalyze params", j=
son);
+- }
+- }
+-
+- factory AnalysisReanalyzeParams.fromRequest(Request request) {
+- return new AnalysisReanalyzeParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- if (roots !=3D null) {
+- result["roots"] =3D roots;
+- }
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.reanalyze", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisReanalyzeParams) {
+- return listEqual(roots, other.roots, (String a, String b) =3D> a =
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, roots.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.reanalyze result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisReanalyzeResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisReanalyzeResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 846803925;
+- }
+-}
+-
+-/**
+- * AnalysisService
+- *
+- * enum {
+- * CLOSING_LABELS
+- * FOLDING
+- * HIGHLIGHTS
+- * IMPLEMENTED
+- * INVALIDATE
+- * NAVIGATION
+- * OCCURRENCES
+- * OUTLINE
+- * OVERRIDES
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisService implements Enum {
+- static const AnalysisService CLOSING_LABELS =3D
+- const AnalysisService._("CLOSING_LABELS");
+-
+- static const AnalysisService FOLDING =3D const AnalysisService._("FOLDI=
NG");
+-
+- static const AnalysisService HIGHLIGHTS =3D
+- const AnalysisService._("HIGHLIGHTS");
+-
+- static const AnalysisService IMPLEMENTED =3D
+- const AnalysisService._("IMPLEMENTED");
+-
+- /**
+- * This service is not currently implemented and will become a
+- * GeneralAnalysisService in a future release.
+- */
+- static const AnalysisService INVALIDATE =3D
+- const AnalysisService._("INVALIDATE");
+-
+- static const AnalysisService NAVIGATION =3D
+- const AnalysisService._("NAVIGATION");
+-
+- static const AnalysisService OCCURRENCES =3D
+- const AnalysisService._("OCCURRENCES");
+-
+- static const AnalysisService OUTLINE =3D const AnalysisService._("OUTLI=
NE");
+-
+- static const AnalysisService OVERRIDES =3D const AnalysisService._("OVE=
RRIDES");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<AnalysisService> VALUES =3D const <AnalysisService>[
+- CLOSING_LABELS,
+- FOLDING,
+- HIGHLIGHTS,
+- IMPLEMENTED,
+- INVALIDATE,
+- NAVIGATION,
+- OCCURRENCES,
+- OUTLINE,
+- OVERRIDES
+- ];
+-
+- @override
+- final String name;
+-
+- const AnalysisService._(this.name);
+-
+- factory AnalysisService(String name) {
+- switch (name) {
+- case "CLOSING_LABELS":
+- return CLOSING_LABELS;
+- case "FOLDING":
+- return FOLDING;
+- case "HIGHLIGHTS":
+- return HIGHLIGHTS;
+- case "IMPLEMENTED":
+- return IMPLEMENTED;
+- case "INVALIDATE":
+- return INVALIDATE;
+- case "NAVIGATION":
+- return NAVIGATION;
+- case "OCCURRENCES":
+- return OCCURRENCES;
+- case "OUTLINE":
+- return OUTLINE;
+- case "OVERRIDES":
+- return OVERRIDES;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory AnalysisService.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new AnalysisService(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "AnalysisService", json);
+- }
+-
+- @override
+- String toString() =3D> "AnalysisService.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * analysis.setAnalysisRoots params
+- *
+- * {
+- * "included": List<FilePath>
+- * "excluded": List<FilePath>
+- * "packageRoots": optional Map<FilePath, FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetAnalysisRootsParams implements RequestParams {
+- List<String> _included;
+-
+- List<String> _excluded;
+-
+- Map<String, String> _packageRoots;
+-
+- /**
+- * A list of the files and directories that should be analyzed.
+- */
+- List<String> get included =3D> _included;
+-
+- /**
+- * A list of the files and directories that should be analyzed.
+- */
+- void set included(List<String> value) {
+- assert(value !=3D null);
+- this._included =3D value;
+- }
+-
+- /**
+- * A list of the files and directories within the included directories =
that
+- * should not be analyzed.
+- */
+- List<String> get excluded =3D> _excluded;
+-
+- /**
+- * A list of the files and directories within the included directories =
that
+- * should not be analyzed.
+- */
+- void set excluded(List<String> value) {
+- assert(value !=3D null);
+- this._excluded =3D value;
+- }
+-
+- /**
+- * A mapping from source directories to package roots that should overr=
ide
+- * the normal package: URI resolution mechanism.
+- *
+- * If a package root is a directory, then the analyzer will behave as t=
hough
+- * the associated source directory in the map contains a special pubspe=
c.yaml
+- * file which resolves any package: URI to the corresponding path withi=
n that
+- * package root directory. The effect is the same as specifying the pac=
kage
+- * root directory as a "--package_root" parameter to the Dart VM when
+- * executing any Dart file inside the source directory.
+- *
+- * If a package root is a file, then the analyzer will behave as though=
that
+- * file is a ".packages" file in the source directory. The effect is th=
e same
+- * as specifying the file as a "--packages" parameter to the Dart VM wh=
en
+- * executing any Dart file inside the source directory.
+- *
+- * Files in any directories that are not overridden by this mapping have
+- * their package: URI's resolved using the normal pubspec.yaml mechanis=
m. If
+- * this field is absent, or the empty map is specified, that indicates =
that
+- * the normal pubspec.yaml mechanism should always be used.
+- */
+- Map<String, String> get packageRoots =3D> _packageRoots;
+-
+- /**
+- * A mapping from source directories to package roots that should overr=
ide
+- * the normal package: URI resolution mechanism.
+- *
+- * If a package root is a directory, then the analyzer will behave as t=
hough
+- * the associated source directory in the map contains a special pubspe=
c.yaml
+- * file which resolves any package: URI to the corresponding path withi=
n that
+- * package root directory. The effect is the same as specifying the pac=
kage
+- * root directory as a "--package_root" parameter to the Dart VM when
+- * executing any Dart file inside the source directory.
+- *
+- * If a package root is a file, then the analyzer will behave as though=
that
+- * file is a ".packages" file in the source directory. The effect is th=
e same
+- * as specifying the file as a "--packages" parameter to the Dart VM wh=
en
+- * executing any Dart file inside the source directory.
+- *
+- * Files in any directories that are not overridden by this mapping have
+- * their package: URI's resolved using the normal pubspec.yaml mechanis=
m. If
+- * this field is absent, or the empty map is specified, that indicates =
that
+- * the normal pubspec.yaml mechanism should always be used.
+- */
+- void set packageRoots(Map<String, String> value) {
+- this._packageRoots =3D value;
+- }
+-
+- AnalysisSetAnalysisRootsParams(List<String> included, List<String> excl=
uded,
+- {Map<String, String> packageRoots}) {
+- this.included =3D included;
+- this.excluded =3D excluded;
+- this.packageRoots =3D packageRoots;
+- }
+-
+- factory AnalysisSetAnalysisRootsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<String> included;
+- if (json.containsKey("included")) {
+- included =3D jsonDecoder.decodeList(
+- jsonPath + ".included", json["included"], jsonDecoder.decodeS=
tring);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "included");
+- }
+- List<String> excluded;
+- if (json.containsKey("excluded")) {
+- excluded =3D jsonDecoder.decodeList(
+- jsonPath + ".excluded", json["excluded"], jsonDecoder.decodeS=
tring);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "excluded");
+- }
+- Map<String, String> packageRoots;
+- if (json.containsKey("packageRoots")) {
+- packageRoots =3D jsonDecoder.decodeMap(
+- jsonPath + ".packageRoots", json["packageRoots"],
+- valueDecoder: jsonDecoder.decodeString);
+- }
+- return new AnalysisSetAnalysisRootsParams(included, excluded,
+- packageRoots: packageRoots);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.setAnalysisRoots params", json);
+- }
+- }
+-
+- factory AnalysisSetAnalysisRootsParams.fromRequest(Request request) {
+- return new AnalysisSetAnalysisRootsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["included"] =3D included;
+- result["excluded"] =3D excluded;
+- if (packageRoots !=3D null) {
+- result["packageRoots"] =3D packageRoots;
+- }
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.setAnalysisRoots", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetAnalysisRootsParams) {
+- return listEqual(
+- included, other.included, (String a, String b) =3D> a =3D=
=3D b) &&
+- listEqual(excluded, other.excluded, (String a, String b) =3D> a=
=3D=3D b) &&
+- mapEqual(
+- packageRoots, other.packageRoots, (String a, String b) =3D>=
a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, included.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, excluded.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, packageRoots.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.setAnalysisRoots result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetAnalysisRootsResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetAnalysisRootsResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 866004753;
+- }
+-}
+-
+-/**
+- * analysis.setGeneralSubscriptions params
+- *
+- * {
+- * "subscriptions": List<GeneralAnalysisService>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetGeneralSubscriptionsParams implements RequestParams {
+- List<GeneralAnalysisService> _subscriptions;
+-
+- /**
+- * A list of the services being subscribed to.
+- */
+- List<GeneralAnalysisService> get subscriptions =3D> _subscriptions;
+-
+- /**
+- * A list of the services being subscribed to.
+- */
+- void set subscriptions(List<GeneralAnalysisService> value) {
+- assert(value !=3D null);
+- this._subscriptions =3D value;
+- }
+-
+- AnalysisSetGeneralSubscriptionsParams(
+- List<GeneralAnalysisService> subscriptions) {
+- this.subscriptions =3D subscriptions;
+- }
+-
+- factory AnalysisSetGeneralSubscriptionsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<GeneralAnalysisService> subscriptions;
+- if (json.containsKey("subscriptions")) {
+- subscriptions =3D jsonDecoder.decodeList(
+- jsonPath + ".subscriptions",
+- json["subscriptions"],
+- (String jsonPath, Object json) =3D>
+- new GeneralAnalysisService.fromJson(
+- jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+- }
+- return new AnalysisSetGeneralSubscriptionsParams(subscriptions);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.setGeneralSubscriptions params", json);
+- }
+- }
+-
+- factory AnalysisSetGeneralSubscriptionsParams.fromRequest(Request reque=
st) {
+- return new AnalysisSetGeneralSubscriptionsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["subscriptions"] =3D subscriptions
+- .map((GeneralAnalysisService value) =3D> value.toJson())
+- .toList();
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.setGeneralSubscriptions", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetGeneralSubscriptionsParams) {
+- return listEqual(subscriptions, other.subscriptions,
+- (GeneralAnalysisService a, GeneralAnalysisService b) =3D> a =3D=
=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.setGeneralSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetGeneralSubscriptionsResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetGeneralSubscriptionsResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 386759562;
+- }
+-}
+-
+-/**
+- * analysis.setPriorityFiles params
+- *
+- * {
+- * "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetPriorityFilesParams implements RequestParams {
+- List<String> _files;
+-
+- /**
+- * The files that are to be a priority for analysis.
+- */
+- List<String> get files =3D> _files;
+-
+- /**
+- * The files that are to be a priority for analysis.
+- */
+- void set files(List<String> value) {
+- assert(value !=3D null);
+- this._files =3D value;
+- }
+-
+- AnalysisSetPriorityFilesParams(List<String> files) {
+- this.files =3D files;
+- }
+-
+- factory AnalysisSetPriorityFilesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<String> files;
+- if (json.containsKey("files")) {
+- files =3D jsonDecoder.decodeList(
+- jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "files");
+- }
+- return new AnalysisSetPriorityFilesParams(files);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.setPriorityFiles params", json);
+- }
+- }
+-
+- factory AnalysisSetPriorityFilesParams.fromRequest(Request request) {
+- return new AnalysisSetPriorityFilesParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["files"] =3D files;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.setPriorityFiles", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetPriorityFilesParams) {
+- return listEqual(files, other.files, (String a, String b) =3D> a =
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.setPriorityFiles result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetPriorityFilesResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetPriorityFilesResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 330050055;
+- }
+-}
+-
+-/**
+- * analysis.setSubscriptions params
+- *
+- * {
+- * "subscriptions": Map<AnalysisService, List<FilePath>>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetSubscriptionsParams implements RequestParams {
+- Map<AnalysisService, List<String>> _subscriptions;
+-
+- /**
+- * A table mapping services to a list of the files being subscribed to =
the
+- * service.
+- */
+- Map<AnalysisService, List<String>> get subscriptions =3D> _subscription=
s;
+-
+- /**
+- * A table mapping services to a list of the files being subscribed to =
the
+- * service.
+- */
+- void set subscriptions(Map<AnalysisService, List<String>> value) {
+- assert(value !=3D null);
+- this._subscriptions =3D value;
+- }
+-
+- AnalysisSetSubscriptionsParams(
+- Map<AnalysisService, List<String>> subscriptions) {
+- this.subscriptions =3D subscriptions;
+- }
+-
+- factory AnalysisSetSubscriptionsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- Map<AnalysisService, List<String>> subscriptions;
+- if (json.containsKey("subscriptions")) {
+- subscriptions =3D jsonDecoder.decodeMap(
+- jsonPath + ".subscriptions", json["subscriptions"],
+- keyDecoder: (String jsonPath, Object json) =3D>
+- new AnalysisService.fromJson(jsonDecoder, jsonPath, json),
+- valueDecoder: (String jsonPath, Object json) =3D> jsonDecoder
+- .decodeList(jsonPath, json, jsonDecoder.decodeString));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+- }
+- return new AnalysisSetSubscriptionsParams(subscriptions);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.setSubscriptions params", json);
+- }
+- }
+-
+- factory AnalysisSetSubscriptionsParams.fromRequest(Request request) {
+- return new AnalysisSetSubscriptionsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["subscriptions"] =3D mapMap(subscriptions,
+- keyCallback: (AnalysisService value) =3D> value.toJson());
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.setSubscriptions", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetSubscriptionsParams) {
+- return mapEqual(
+- subscriptions,
+- other.subscriptions,
+- (List<String> a, List<String> b) =3D>
+- listEqual(a, b, (String a, String b) =3D> a =3D=3D b));
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.setSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisSetSubscriptionsResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisSetSubscriptionsResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 218088493;
+- }
+-}
+-
+-/**
+- * AnalysisStatus
+- *
+- * {
+- * "isAnalyzing": bool
+- * "analysisTarget": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisStatus implements HasToJson {
+- bool _isAnalyzing;
+-
+- String _analysisTarget;
+-
+- /**
+- * True if analysis is currently being performed.
+- */
+- bool get isAnalyzing =3D> _isAnalyzing;
+-
+- /**
+- * True if analysis is currently being performed.
+- */
+- void set isAnalyzing(bool value) {
+- assert(value !=3D null);
+- this._isAnalyzing =3D value;
+- }
+-
+- /**
+- * The name of the current target of analysis. This field is omitted if
+- * analyzing is false.
+- */
+- String get analysisTarget =3D> _analysisTarget;
+-
+- /**
+- * The name of the current target of analysis. This field is omitted if
+- * analyzing is false.
+- */
+- void set analysisTarget(String value) {
+- this._analysisTarget =3D value;
+- }
+-
+- AnalysisStatus(bool isAnalyzing, {String analysisTarget}) {
+- this.isAnalyzing =3D isAnalyzing;
+- this.analysisTarget =3D analysisTarget;
+- }
+-
+- factory AnalysisStatus.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool isAnalyzing;
+- if (json.containsKey("isAnalyzing")) {
+- isAnalyzing =3D jsonDecoder.decodeBool(
+- jsonPath + ".isAnalyzing", json["isAnalyzing"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "isAnalyzing");
+- }
+- String analysisTarget;
+- if (json.containsKey("analysisTarget")) {
+- analysisTarget =3D jsonDecoder.decodeString(
+- jsonPath + ".analysisTarget", json["analysisTarget"]);
+- }
+- return new AnalysisStatus(isAnalyzing, analysisTarget: analysisTarg=
et);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "AnalysisStatus", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["isAnalyzing"] =3D isAnalyzing;
+- if (analysisTarget !=3D null) {
+- result["analysisTarget"] =3D analysisTarget;
+- }
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisStatus) {
+- return isAnalyzing =3D=3D other.isAnalyzing &&
+- analysisTarget =3D=3D other.analysisTarget;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, isAnalyzing.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, analysisTarget.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.updateContent params
+- *
+- * {
+- * "files": Map<FilePath, AddContentOverlay | ChangeContentOverlay | Re=
moveContentOverlay>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateContentParams implements RequestParams {
+- Map<String, dynamic> _files;
+-
+- /**
+- * A table mapping the files whose content has changed to a description=
of
+- * the content change.
+- */
+- Map<String, dynamic> get files =3D> _files;
+-
+- /**
+- * A table mapping the files whose content has changed to a description=
of
+- * the content change.
+- */
+- void set files(Map<String, dynamic> value) {
+- assert(value !=3D null);
+- this._files =3D value;
+- }
+-
+- AnalysisUpdateContentParams(Map<String, dynamic> files) {
+- this.files =3D files;
+- }
+-
+- factory AnalysisUpdateContentParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- Map<String, dynamic> files;
+- if (json.containsKey("files")) {
+- files =3D jsonDecoder.decodeMap(jsonPath + ".files", json["files"=
],
+- valueDecoder: (String jsonPath, Object json) =3D>
+- jsonDecoder.decodeUnion(jsonPath, json, "type", {
+- "add": (String jsonPath, Object json) =3D>
+- new AddContentOverlay.fromJson(
+- jsonDecoder, jsonPath, json),
+- "change": (String jsonPath, Object json) =3D>
+- new ChangeContentOverlay.fromJson(
+- jsonDecoder, jsonPath, json),
+- "remove": (String jsonPath, Object json) =3D>
+- new RemoveContentOverlay.fromJson(
+- jsonDecoder, jsonPath, json)
+- }));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "files");
+- }
+- return new AnalysisUpdateContentParams(files);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.updateContent params", json);
+- }
+- }
+-
+- factory AnalysisUpdateContentParams.fromRequest(Request request) {
+- return new AnalysisUpdateContentParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["files"] =3D
+- mapMap(files, valueCallback: (dynamic value) =3D> value.toJson());
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.updateContent", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisUpdateContentParams) {
+- return mapEqual(files, other.files, (dynamic a, dynamic b) =3D> a =
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.updateContent result
+- *
+- * {
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateContentResult implements ResponseResult {
+- AnalysisUpdateContentResult();
+-
+- factory AnalysisUpdateContentResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- return new AnalysisUpdateContentResult();
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.updateContent result", json);
+- }
+- }
+-
+- factory AnalysisUpdateContentResult.fromResponse(Response response) {
+- return new AnalysisUpdateContentResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisUpdateContentResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.updateOptions params
+- *
+- * {
+- * "options": AnalysisOptions
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateOptionsParams implements RequestParams {
+- AnalysisOptions _options;
+-
+- /**
+- * The options that are to be used to control analysis.
+- */
+- AnalysisOptions get options =3D> _options;
+-
+- /**
+- * The options that are to be used to control analysis.
+- */
+- void set options(AnalysisOptions value) {
+- assert(value !=3D null);
+- this._options =3D value;
+- }
+-
+- AnalysisUpdateOptionsParams(AnalysisOptions options) {
+- this.options =3D options;
+- }
+-
+- factory AnalysisUpdateOptionsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- AnalysisOptions options;
+- if (json.containsKey("options")) {
+- options =3D new AnalysisOptions.fromJson(
+- jsonDecoder, jsonPath + ".options", json["options"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "options");
+- }
+- return new AnalysisUpdateOptionsParams(options);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "analysis.updateOptions params", json);
+- }
+- }
+-
+- factory AnalysisUpdateOptionsParams.fromRequest(Request request) {
+- return new AnalysisUpdateOptionsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["options"] =3D options.toJson();
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analysis.updateOptions", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisUpdateOptionsParams) {
+- return options =3D=3D other.options;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, options.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analysis.updateOptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalysisUpdateOptionsResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalysisUpdateOptionsResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 179689467;
+- }
+-}
+-
+-/**
+- * analytics.enable params
+- *
+- * {
+- * "value": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsEnableParams implements RequestParams {
+- bool _value;
+-
+- /**
+- * Enable or disable analytics.
+- */
+- bool get value =3D> _value;
+-
+- /**
+- * Enable or disable analytics.
+- */
+- void set value(bool value) {
+- assert(value !=3D null);
+- this._value =3D value;
+- }
+-
+- AnalyticsEnableParams(bool value) {
+- this.value =3D value;
+- }
+-
+- factory AnalyticsEnableParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool value;
+- if (json.containsKey("value")) {
+- value =3D jsonDecoder.decodeBool(jsonPath + ".value", json["value=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "value");
+- }
+- return new AnalyticsEnableParams(value);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analytics.enable params", jso=
n);
+- }
+- }
+-
+- factory AnalyticsEnableParams.fromRequest(Request request) {
+- return new AnalyticsEnableParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["value"] =3D value;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analytics.enable", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsEnableParams) {
+- return value =3D=3D other.value;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, value.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analytics.enable result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsEnableResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsEnableResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 237990792;
+- }
+-}
+-
+-/**
+- * analytics.isEnabled params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsIsEnabledParams implements RequestParams {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analytics.isEnabled", null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsIsEnabledParams) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 57215544;
+- }
+-}
+-
+-/**
+- * analytics.isEnabled result
+- *
+- * {
+- * "enabled": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsIsEnabledResult implements ResponseResult {
+- bool _enabled;
+-
+- /**
+- * Whether sending analytics is enabled or not.
+- */
+- bool get enabled =3D> _enabled;
+-
+- /**
+- * Whether sending analytics is enabled or not.
+- */
+- void set enabled(bool value) {
+- assert(value !=3D null);
+- this._enabled =3D value;
+- }
+-
+- AnalyticsIsEnabledResult(bool enabled) {
+- this.enabled =3D enabled;
+- }
+-
+- factory AnalyticsIsEnabledResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool enabled;
+- if (json.containsKey("enabled")) {
+- enabled =3D
+- jsonDecoder.decodeBool(jsonPath + ".enabled", json["enabled"]=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "enabled");
+- }
+- return new AnalyticsIsEnabledResult(enabled);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analytics.isEnabled result", =
json);
+- }
+- }
+-
+- factory AnalyticsIsEnabledResult.fromResponse(Response response) {
+- return new AnalyticsIsEnabledResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["enabled"] =3D enabled;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsIsEnabledResult) {
+- return enabled =3D=3D other.enabled;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, enabled.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analytics.sendEvent params
+- *
+- * {
+- * "action": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendEventParams implements RequestParams {
+- String _action;
+-
+- /**
+- * The value used to indicate which action was performed.
+- */
+- String get action =3D> _action;
+-
+- /**
+- * The value used to indicate which action was performed.
+- */
+- void set action(String value) {
+- assert(value !=3D null);
+- this._action =3D value;
+- }
+-
+- AnalyticsSendEventParams(String action) {
+- this.action =3D action;
+- }
+-
+- factory AnalyticsSendEventParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String action;
+- if (json.containsKey("action")) {
+- action =3D jsonDecoder.decodeString(jsonPath + ".action", json["a=
ction"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "action");
+- }
+- return new AnalyticsSendEventParams(action);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analytics.sendEvent params", =
json);
+- }
+- }
+-
+- factory AnalyticsSendEventParams.fromRequest(Request request) {
+- return new AnalyticsSendEventParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["action"] =3D action;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analytics.sendEvent", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsSendEventParams) {
+- return action =3D=3D other.action;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, action.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analytics.sendEvent result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendEventResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsSendEventResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 227063188;
+- }
+-}
+-
+-/**
+- * analytics.sendTiming params
+- *
+- * {
+- * "event": String
+- * "millis": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendTimingParams implements RequestParams {
+- String _event;
+-
+- int _millis;
+-
+- /**
+- * The name of the event.
+- */
+- String get event =3D> _event;
+-
+- /**
+- * The name of the event.
+- */
+- void set event(String value) {
+- assert(value !=3D null);
+- this._event =3D value;
+- }
+-
+- /**
+- * The duration of the event in milliseconds.
+- */
+- int get millis =3D> _millis;
+-
+- /**
+- * The duration of the event in milliseconds.
+- */
+- void set millis(int value) {
+- assert(value !=3D null);
+- this._millis =3D value;
+- }
+-
+- AnalyticsSendTimingParams(String event, int millis) {
+- this.event =3D event;
+- this.millis =3D millis;
+- }
+-
+- factory AnalyticsSendTimingParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String event;
+- if (json.containsKey("event")) {
+- event =3D jsonDecoder.decodeString(jsonPath + ".event", json["eve=
nt"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "event");
+- }
+- int millis;
+- if (json.containsKey("millis")) {
+- millis =3D jsonDecoder.decodeInt(jsonPath + ".millis", json["mill=
is"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "millis");
+- }
+- return new AnalyticsSendTimingParams(event, millis);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "analytics.sendTiming params",=
json);
+- }
+- }
+-
+- factory AnalyticsSendTimingParams.fromRequest(Request request) {
+- return new AnalyticsSendTimingParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["event"] =3D event;
+- result["millis"] =3D millis;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "analytics.sendTiming", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsSendTimingParams) {
+- return event =3D=3D other.event && millis =3D=3D other.millis;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, event.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, millis.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * analytics.sendTiming result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class AnalyticsSendTimingResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is AnalyticsSendTimingResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 875010924;
+- }
+-}
+-
+-/**
+- * ClosingLabel
+- *
+- * {
+- * "offset": int
+- * "length": int
+- * "label": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ClosingLabel implements HasToJson {
+- int _offset;
+-
+- int _length;
+-
+- String _label;
+-
+- /**
+- * The offset of the construct being labelled.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the construct being labelled.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the whole construct to be labelled.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the whole construct to be labelled.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- /**
+- * The label associated with this range that should be displayed to the=
user.
+- */
+- String get label =3D> _label;
+-
+- /**
+- * The label associated with this range that should be displayed to the=
user.
+- */
+- void set label(String value) {
+- assert(value !=3D null);
+- this._label =3D value;
+- }
+-
+- ClosingLabel(int offset, int length, String label) {
+- this.offset =3D offset;
+- this.length =3D length;
+- this.label =3D label;
+- }
+-
+- factory ClosingLabel.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- String label;
+- if (json.containsKey("label")) {
+- label =3D jsonDecoder.decodeString(jsonPath + ".label", json["lab=
el"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "label");
+- }
+- return new ClosingLabel(offset, length, label);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "ClosingLabel", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- result["label"] =3D label;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ClosingLabel) {
+- return offset =3D=3D other.offset &&
+- length =3D=3D other.length &&
+- label =3D=3D other.label;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, label.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * completion.getSuggestions params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class CompletionGetSuggestionsParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- /**
+- * The file containing the point at which suggestions are to be made.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the point at which suggestions are to be made.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset within the file at which suggestions are to be made.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset within the file at which suggestions are to be made.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- CompletionGetSuggestionsParams(String file, int offset) {
+- this.file =3D file;
+- this.offset =3D offset;
+- }
+-
+- factory CompletionGetSuggestionsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- return new CompletionGetSuggestionsParams(file, offset);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "completion.getSuggestions params", json);
+- }
+- }
+-
+- factory CompletionGetSuggestionsParams.fromRequest(Request request) {
+- return new CompletionGetSuggestionsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "completion.getSuggestions", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is CompletionGetSuggestionsParams) {
+- return file =3D=3D other.file && offset =3D=3D other.offset;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * completion.getSuggestions result
+- *
+- * {
+- * "id": CompletionId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class CompletionGetSuggestionsResult implements ResponseResult {
+- String _id;
+-
+- /**
+- * The identifier used to associate results with this completion reques=
t.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier used to associate results with this completion reques=
t.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- CompletionGetSuggestionsResult(String id) {
+- this.id =3D id;
+- }
+-
+- factory CompletionGetSuggestionsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- return new CompletionGetSuggestionsResult(id);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "completion.getSuggestions result", json);
+- }
+- }
+-
+- factory CompletionGetSuggestionsResult.fromResponse(Response response) {
+- return new CompletionGetSuggestionsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is CompletionGetSuggestionsResult) {
+- return id =3D=3D other.id;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * completion.results params
+- *
+- * {
+- * "id": CompletionId
+- * "replacementOffset": int
+- * "replacementLength": int
+- * "results": List<CompletionSuggestion>
+- * "isLast": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class CompletionResultsParams implements HasToJson {
+- String _id;
+-
+- int _replacementOffset;
+-
+- int _replacementLength;
+-
+- List<CompletionSuggestion> _results;
+-
+- bool _isLast;
+-
+- /**
+- * The id associated with the completion.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The id associated with the completion.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- /**
+- * The offset of the start of the text to be replaced. This will be dif=
ferent
+- * than the offset used to request the completion suggestions if there =
was a
+- * portion of an identifier before the original offset. In particular, =
the
+- * replacementOffset will be the offset of the beginning of said identi=
fier.
+- */
+- int get replacementOffset =3D> _replacementOffset;
+-
+- /**
+- * The offset of the start of the text to be replaced. This will be dif=
ferent
+- * than the offset used to request the completion suggestions if there =
was a
+- * portion of an identifier before the original offset. In particular, =
the
+- * replacementOffset will be the offset of the beginning of said identi=
fier.
+- */
+- void set replacementOffset(int value) {
+- assert(value !=3D null);
+- this._replacementOffset =3D value;
+- }
+-
+- /**
+- * The length of the text to be replaced if the remainder of the identi=
fier
+- * containing the cursor is to be replaced when the suggestion is appli=
ed
+- * (that is, the number of characters in the existing identifier).
+- */
+- int get replacementLength =3D> _replacementLength;
+-
+- /**
+- * The length of the text to be replaced if the remainder of the identi=
fier
+- * containing the cursor is to be replaced when the suggestion is appli=
ed
+- * (that is, the number of characters in the existing identifier).
+- */
+- void set replacementLength(int value) {
+- assert(value !=3D null);
+- this._replacementLength =3D value;
+- }
+-
+- /**
+- * The completion suggestions being reported. The notification contains=
all
+- * possible completions at the requested cursor position, even those th=
at do
+- * not match the characters the user has already typed. This allows the
+- * client to respond to further keystrokes from the user without having=
to
+- * make additional requests.
+- */
+- List<CompletionSuggestion> get results =3D> _results;
+-
+- /**
+- * The completion suggestions being reported. The notification contains=
all
+- * possible completions at the requested cursor position, even those th=
at do
+- * not match the characters the user has already typed. This allows the
+- * client to respond to further keystrokes from the user without having=
to
+- * make additional requests.
+- */
+- void set results(List<CompletionSuggestion> value) {
+- assert(value !=3D null);
+- this._results =3D value;
+- }
+-
+- /**
+- * True if this is that last set of results that will be returned for t=
he
+- * indicated completion.
+- */
+- bool get isLast =3D> _isLast;
+-
+- /**
+- * True if this is that last set of results that will be returned for t=
he
+- * indicated completion.
+- */
+- void set isLast(bool value) {
+- assert(value !=3D null);
+- this._isLast =3D value;
+- }
+-
+- CompletionResultsParams(String id, int replacementOffset,
+- int replacementLength, List<CompletionSuggestion> results, bool isL=
ast) {
+- this.id =3D id;
+- this.replacementOffset =3D replacementOffset;
+- this.replacementLength =3D replacementLength;
+- this.results =3D results;
+- this.isLast =3D isLast;
+- }
+-
+- factory CompletionResultsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- int replacementOffset;
+- if (json.containsKey("replacementOffset")) {
+- replacementOffset =3D jsonDecoder.decodeInt(
+- jsonPath + ".replacementOffset", json["replacementOffset"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "replacementOffset");
+- }
+- int replacementLength;
+- if (json.containsKey("replacementLength")) {
+- replacementLength =3D jsonDecoder.decodeInt(
+- jsonPath + ".replacementLength", json["replacementLength"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "replacementLength");
+- }
+- List<CompletionSuggestion> results;
+- if (json.containsKey("results")) {
+- results =3D jsonDecoder.decodeList(
+- jsonPath + ".results",
+- json["results"],
+- (String jsonPath, Object json) =3D>
+- new CompletionSuggestion.fromJson(jsonDecoder, jsonPath, =
json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "results");
+- }
+- bool isLast;
+- if (json.containsKey("isLast")) {
+- isLast =3D jsonDecoder.decodeBool(jsonPath + ".isLast", json["isL=
ast"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "isLast");
+- }
+- return new CompletionResultsParams(
+- id, replacementOffset, replacementLength, results, isLast);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "completion.results params", j=
son);
+- }
+- }
+-
+- factory CompletionResultsParams.fromNotification(Notification notificat=
ion) {
+- return new CompletionResultsParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- result["replacementOffset"] =3D replacementOffset;
+- result["replacementLength"] =3D replacementLength;
+- result["results"] =3D
+- results.map((CompletionSuggestion value) =3D> value.toJson()).toL=
ist();
+- result["isLast"] =3D isLast;
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("completion.results", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is CompletionResultsParams) {
+- return id =3D=3D other.id &&
+- replacementOffset =3D=3D other.replacementOffset &&
+- replacementLength =3D=3D other.replacementLength &&
+- listEqual(results, other.results,
+- (CompletionSuggestion a, CompletionSuggestion b) =3D> a =3D=
=3D b) &&
+- isLast =3D=3D other.isLast;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, replacementOffset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, replacementLength.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, results.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, isLast.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ContextData
+- *
+- * {
+- * "name": String
+- * "explicitFileCount": int
+- * "implicitFileCount": int
+- * "workItemQueueLength": int
+- * "cacheEntryExceptions": List<String>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ContextData implements HasToJson {
+- String _name;
+-
+- int _explicitFileCount;
+-
+- int _implicitFileCount;
+-
+- int _workItemQueueLength;
+-
+- List<String> _cacheEntryExceptions;
+-
+- /**
+- * The name of the context.
+- */
+- String get name =3D> _name;
+-
+- /**
+- * The name of the context.
+- */
+- void set name(String value) {
+- assert(value !=3D null);
+- this._name =3D value;
+- }
+-
+- /**
+- * Explicitly analyzed files.
+- */
+- int get explicitFileCount =3D> _explicitFileCount;
+-
+- /**
+- * Explicitly analyzed files.
+- */
+- void set explicitFileCount(int value) {
+- assert(value !=3D null);
+- this._explicitFileCount =3D value;
+- }
+-
+- /**
+- * Implicitly analyzed files.
+- */
+- int get implicitFileCount =3D> _implicitFileCount;
+-
+- /**
+- * Implicitly analyzed files.
+- */
+- void set implicitFileCount(int value) {
+- assert(value !=3D null);
+- this._implicitFileCount =3D value;
+- }
+-
+- /**
+- * The number of work items in the queue.
+- */
+- int get workItemQueueLength =3D> _workItemQueueLength;
+-
+- /**
+- * The number of work items in the queue.
+- */
+- void set workItemQueueLength(int value) {
+- assert(value !=3D null);
+- this._workItemQueueLength =3D value;
+- }
+-
+- /**
+- * Exceptions associated with cache entries.
+- */
+- List<String> get cacheEntryExceptions =3D> _cacheEntryExceptions;
+-
+- /**
+- * Exceptions associated with cache entries.
+- */
+- void set cacheEntryExceptions(List<String> value) {
+- assert(value !=3D null);
+- this._cacheEntryExceptions =3D value;
+- }
+-
+- ContextData(String name, int explicitFileCount, int implicitFileCount,
+- int workItemQueueLength, List<String> cacheEntryExceptions) {
+- this.name =3D name;
+- this.explicitFileCount =3D explicitFileCount;
+- this.implicitFileCount =3D implicitFileCount;
+- this.workItemQueueLength =3D workItemQueueLength;
+- this.cacheEntryExceptions =3D cacheEntryExceptions;
+- }
+-
+- factory ContextData.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String name;
+- if (json.containsKey("name")) {
+- name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "name");
+- }
+- int explicitFileCount;
+- if (json.containsKey("explicitFileCount")) {
+- explicitFileCount =3D jsonDecoder.decodeInt(
+- jsonPath + ".explicitFileCount", json["explicitFileCount"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "explicitFileCount");
+- }
+- int implicitFileCount;
+- if (json.containsKey("implicitFileCount")) {
+- implicitFileCount =3D jsonDecoder.decodeInt(
+- jsonPath + ".implicitFileCount", json["implicitFileCount"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "implicitFileCount");
+- }
+- int workItemQueueLength;
+- if (json.containsKey("workItemQueueLength")) {
+- workItemQueueLength =3D jsonDecoder.decodeInt(
+- jsonPath + ".workItemQueueLength", json["workItemQueueLength"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "workItemQueueLength");
+- }
+- List<String> cacheEntryExceptions;
+- if (json.containsKey("cacheEntryExceptions")) {
+- cacheEntryExceptions =3D jsonDecoder.decodeList(
+- jsonPath + ".cacheEntryExceptions",
+- json["cacheEntryExceptions"],
+- jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "cacheEntryExceptions");
+- }
+- return new ContextData(name, explicitFileCount, implicitFileCount,
+- workItemQueueLength, cacheEntryExceptions);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "ContextData", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["name"] =3D name;
+- result["explicitFileCount"] =3D explicitFileCount;
+- result["implicitFileCount"] =3D implicitFileCount;
+- result["workItemQueueLength"] =3D workItemQueueLength;
+- result["cacheEntryExceptions"] =3D cacheEntryExceptions;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ContextData) {
+- return name =3D=3D other.name &&
+- explicitFileCount =3D=3D other.explicitFileCount &&
+- implicitFileCount =3D=3D other.implicitFileCount &&
+- workItemQueueLength =3D=3D other.workItemQueueLength &&
+- listEqual(cacheEntryExceptions, other.cacheEntryExceptions,
+- (String a, String b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, explicitFileCount.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, implicitFileCount.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, workItemQueueLength.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, cacheEntryExceptions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * convertGetterToMethod feedback
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertGetterToMethodFeedback extends RefactoringFeedback
+- implements HasToJson {
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ConvertGetterToMethodFeedback) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 616032599;
+- }
+-}
+-
+-/**
+- * convertGetterToMethod options
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertGetterToMethodOptions extends RefactoringOptions
+- implements HasToJson {
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ConvertGetterToMethodOptions) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 488848400;
+- }
+-}
+-
+-/**
+- * convertMethodToGetter feedback
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertMethodToGetterFeedback extends RefactoringFeedback
+- implements HasToJson {
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ConvertMethodToGetterFeedback) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 165291526;
+- }
+-}
+-
+-/**
+- * convertMethodToGetter options
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ConvertMethodToGetterOptions extends RefactoringOptions
+- implements HasToJson {
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ConvertMethodToGetterOptions) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 27952290;
+- }
+-}
+-
+-/**
+- * diagnostic.getDiagnostics params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetDiagnosticsParams implements RequestParams {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "diagnostic.getDiagnostics", null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is DiagnosticGetDiagnosticsParams) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 587526202;
+- }
+-}
+-
+-/**
+- * diagnostic.getDiagnostics result
+- *
+- * {
+- * "contexts": List<ContextData>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetDiagnosticsResult implements ResponseResult {
+- List<ContextData> _contexts;
+-
+- /**
+- * The list of analysis contexts.
+- */
+- List<ContextData> get contexts =3D> _contexts;
+-
+- /**
+- * The list of analysis contexts.
+- */
+- void set contexts(List<ContextData> value) {
+- assert(value !=3D null);
+- this._contexts =3D value;
+- }
+-
+- DiagnosticGetDiagnosticsResult(List<ContextData> contexts) {
+- this.contexts =3D contexts;
+- }
+-
+- factory DiagnosticGetDiagnosticsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<ContextData> contexts;
+- if (json.containsKey("contexts")) {
+- contexts =3D jsonDecoder.decodeList(
+- jsonPath + ".contexts",
+- json["contexts"],
+- (String jsonPath, Object json) =3D>
+- new ContextData.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "contexts");
+- }
+- return new DiagnosticGetDiagnosticsResult(contexts);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "diagnostic.getDiagnostics result", json);
+- }
+- }
+-
+- factory DiagnosticGetDiagnosticsResult.fromResponse(Response response) {
+- return new DiagnosticGetDiagnosticsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["contexts"] =3D
+- contexts.map((ContextData value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is DiagnosticGetDiagnosticsResult) {
+- return listEqual(
+- contexts, other.contexts, (ContextData a, ContextData b) =3D> a=
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, contexts.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * diagnostic.getServerPort params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetServerPortParams implements RequestParams {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "diagnostic.getServerPort", null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is DiagnosticGetServerPortParams) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 367508704;
+- }
+-}
+-
+-/**
+- * diagnostic.getServerPort result
+- *
+- * {
+- * "port": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class DiagnosticGetServerPortResult implements ResponseResult {
+- int _port;
+-
+- /**
+- * The diagnostic server port.
+- */
+- int get port =3D> _port;
+-
+- /**
+- * The diagnostic server port.
+- */
+- void set port(int value) {
+- assert(value !=3D null);
+- this._port =3D value;
+- }
+-
+- DiagnosticGetServerPortResult(int port) {
+- this.port =3D port;
+- }
+-
+- factory DiagnosticGetServerPortResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int port;
+- if (json.containsKey("port")) {
+- port =3D jsonDecoder.decodeInt(jsonPath + ".port", json["port"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "port");
+- }
+- return new DiagnosticGetServerPortResult(port);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "diagnostic.getServerPort result", json);
+- }
+- }
+-
+- factory DiagnosticGetServerPortResult.fromResponse(Response response) {
+- return new DiagnosticGetServerPortResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["port"] =3D port;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is DiagnosticGetServerPortResult) {
+- return port =3D=3D other.port;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, port.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.format params
+- *
+- * {
+- * "file": FilePath
+- * "selectionOffset": int
+- * "selectionLength": int
+- * "lineLength": optional int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditFormatParams implements RequestParams {
+- String _file;
+-
+- int _selectionOffset;
+-
+- int _selectionLength;
+-
+- int _lineLength;
+-
+- /**
+- * The file containing the code to be formatted.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the code to be formatted.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the current selection in the file.
+- */
+- int get selectionOffset =3D> _selectionOffset;
+-
+- /**
+- * The offset of the current selection in the file.
+- */
+- void set selectionOffset(int value) {
+- assert(value !=3D null);
+- this._selectionOffset =3D value;
+- }
+-
+- /**
+- * The length of the current selection in the file.
+- */
+- int get selectionLength =3D> _selectionLength;
+-
+- /**
+- * The length of the current selection in the file.
+- */
+- void set selectionLength(int value) {
+- assert(value !=3D null);
+- this._selectionLength =3D value;
+- }
+-
+- /**
+- * The line length to be used by the formatter.
+- */
+- int get lineLength =3D> _lineLength;
+-
+- /**
+- * The line length to be used by the formatter.
+- */
+- void set lineLength(int value) {
+- this._lineLength =3D value;
+- }
+-
+- EditFormatParams(String file, int selectionOffset, int selectionLength,
+- {int lineLength}) {
+- this.file =3D file;
+- this.selectionOffset =3D selectionOffset;
+- this.selectionLength =3D selectionLength;
+- this.lineLength =3D lineLength;
+- }
+-
+- factory EditFormatParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int selectionOffset;
+- if (json.containsKey("selectionOffset")) {
+- selectionOffset =3D jsonDecoder.decodeInt(
+- jsonPath + ".selectionOffset", json["selectionOffset"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "selectionOffset");
+- }
+- int selectionLength;
+- if (json.containsKey("selectionLength")) {
+- selectionLength =3D jsonDecoder.decodeInt(
+- jsonPath + ".selectionLength", json["selectionLength"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "selectionLength");
+- }
+- int lineLength;
+- if (json.containsKey("lineLength")) {
+- lineLength =3D
+- jsonDecoder.decodeInt(jsonPath + ".lineLength", json["lineLen=
gth"]);
+- }
+- return new EditFormatParams(file, selectionOffset, selectionLength,
+- lineLength: lineLength);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.format params", json);
+- }
+- }
+-
+- factory EditFormatParams.fromRequest(Request request) {
+- return new EditFormatParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["selectionOffset"] =3D selectionOffset;
+- result["selectionLength"] =3D selectionLength;
+- if (lineLength !=3D null) {
+- result["lineLength"] =3D lineLength;
+- }
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.format", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditFormatParams) {
+- return file =3D=3D other.file &&
+- selectionOffset =3D=3D other.selectionOffset &&
+- selectionLength =3D=3D other.selectionLength &&
+- lineLength =3D=3D other.lineLength;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, selectionLength.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, lineLength.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.format result
+- *
+- * {
+- * "edits": List<SourceEdit>
+- * "selectionOffset": int
+- * "selectionLength": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditFormatResult implements ResponseResult {
+- List<SourceEdit> _edits;
+-
+- int _selectionOffset;
+-
+- int _selectionLength;
+-
+- /**
+- * The edit(s) to be applied in order to format the code. The list will=
be
+- * empty if the code was already formatted (there are no changes).
+- */
+- List<SourceEdit> get edits =3D> _edits;
+-
+- /**
+- * The edit(s) to be applied in order to format the code. The list will=
be
+- * empty if the code was already formatted (there are no changes).
+- */
+- void set edits(List<SourceEdit> value) {
+- assert(value !=3D null);
+- this._edits =3D value;
+- }
+-
+- /**
+- * The offset of the selection after formatting the code.
+- */
+- int get selectionOffset =3D> _selectionOffset;
+-
+- /**
+- * The offset of the selection after formatting the code.
+- */
+- void set selectionOffset(int value) {
+- assert(value !=3D null);
+- this._selectionOffset =3D value;
+- }
+-
+- /**
+- * The length of the selection after formatting the code.
+- */
+- int get selectionLength =3D> _selectionLength;
+-
+- /**
+- * The length of the selection after formatting the code.
+- */
+- void set selectionLength(int value) {
+- assert(value !=3D null);
+- this._selectionLength =3D value;
+- }
+-
+- EditFormatResult(
+- List<SourceEdit> edits, int selectionOffset, int selectionLength) {
+- this.edits =3D edits;
+- this.selectionOffset =3D selectionOffset;
+- this.selectionLength =3D selectionLength;
+- }
+-
+- factory EditFormatResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<SourceEdit> edits;
+- if (json.containsKey("edits")) {
+- edits =3D jsonDecoder.decodeList(
+- jsonPath + ".edits",
+- json["edits"],
+- (String jsonPath, Object json) =3D>
+- new SourceEdit.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edits");
+- }
+- int selectionOffset;
+- if (json.containsKey("selectionOffset")) {
+- selectionOffset =3D jsonDecoder.decodeInt(
+- jsonPath + ".selectionOffset", json["selectionOffset"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "selectionOffset");
+- }
+- int selectionLength;
+- if (json.containsKey("selectionLength")) {
+- selectionLength =3D jsonDecoder.decodeInt(
+- jsonPath + ".selectionLength", json["selectionLength"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "selectionLength");
+- }
+- return new EditFormatResult(edits, selectionOffset, selectionLength=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.format result", json);
+- }
+- }
+-
+- factory EditFormatResult.fromResponse(Response response) {
+- return new EditFormatResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["edits"] =3D edits.map((SourceEdit value) =3D> value.toJson())=
.toList();
+- result["selectionOffset"] =3D selectionOffset;
+- result["selectionLength"] =3D selectionLength;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditFormatResult) {
+- return listEqual(
+- edits, other.edits, (SourceEdit a, SourceEdit b) =3D> a =3D=
=3D b) &&
+- selectionOffset =3D=3D other.selectionOffset &&
+- selectionLength =3D=3D other.selectionLength;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, edits.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, selectionLength.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getAssists params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAssistsParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- int _length;
+-
+- /**
+- * The file containing the code for which assists are being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the code for which assists are being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the code for which assists are being requested.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the code for which assists are being requested.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the code for which assists are being requested.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the code for which assists are being requested.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- EditGetAssistsParams(String file, int offset, int length) {
+- this.file =3D file;
+- this.offset =3D offset;
+- this.length =3D length;
+- }
+-
+- factory EditGetAssistsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- return new EditGetAssistsParams(file, offset, length);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.getAssists params", json=
);
+- }
+- }
+-
+- factory EditGetAssistsParams.fromRequest(Request request) {
+- return new EditGetAssistsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.getAssists", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetAssistsParams) {
+- return file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- length =3D=3D other.length;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getAssists result
+- *
+- * {
+- * "assists": List<SourceChange>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAssistsResult implements ResponseResult {
+- List<SourceChange> _assists;
+-
+- /**
+- * The assists that are available at the given location.
+- */
+- List<SourceChange> get assists =3D> _assists;
+-
+- /**
+- * The assists that are available at the given location.
+- */
+- void set assists(List<SourceChange> value) {
+- assert(value !=3D null);
+- this._assists =3D value;
+- }
+-
+- EditGetAssistsResult(List<SourceChange> assists) {
+- this.assists =3D assists;
+- }
+-
+- factory EditGetAssistsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<SourceChange> assists;
+- if (json.containsKey("assists")) {
+- assists =3D jsonDecoder.decodeList(
+- jsonPath + ".assists",
+- json["assists"],
+- (String jsonPath, Object json) =3D>
+- new SourceChange.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "assists");
+- }
+- return new EditGetAssistsResult(assists);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.getAssists result", json=
);
+- }
+- }
+-
+- factory EditGetAssistsResult.fromResponse(Response response) {
+- return new EditGetAssistsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["assists"] =3D
+- assists.map((SourceChange value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetAssistsResult) {
+- return listEqual(
+- assists, other.assists, (SourceChange a, SourceChange b) =3D> a=
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, assists.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getAvailableRefactorings params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAvailableRefactoringsParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- int _length;
+-
+- /**
+- * The file containing the code on which the refactoring would be based.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the code on which the refactoring would be based.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the code on which the refactoring would be based.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the code on which the refactoring would be based.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the code on which the refactoring would be based.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the code on which the refactoring would be based.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- EditGetAvailableRefactoringsParams(String file, int offset, int length)=
{
+- this.file =3D file;
+- this.offset =3D offset;
+- this.length =3D length;
+- }
+-
+- factory EditGetAvailableRefactoringsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- return new EditGetAvailableRefactoringsParams(file, offset, length);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.getAvailableRefactorings params", json);
+- }
+- }
+-
+- factory EditGetAvailableRefactoringsParams.fromRequest(Request request)=
{
+- return new EditGetAvailableRefactoringsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.getAvailableRefactorings", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetAvailableRefactoringsParams) {
+- return file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- length =3D=3D other.length;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getAvailableRefactorings result
+- *
+- * {
+- * "kinds": List<RefactoringKind>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetAvailableRefactoringsResult implements ResponseResult {
+- List<RefactoringKind> _kinds;
+-
+- /**
+- * The kinds of refactorings that are valid for the given selection.
+- */
+- List<RefactoringKind> get kinds =3D> _kinds;
+-
+- /**
+- * The kinds of refactorings that are valid for the given selection.
+- */
+- void set kinds(List<RefactoringKind> value) {
+- assert(value !=3D null);
+- this._kinds =3D value;
+- }
+-
+- EditGetAvailableRefactoringsResult(List<RefactoringKind> kinds) {
+- this.kinds =3D kinds;
+- }
+-
+- factory EditGetAvailableRefactoringsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<RefactoringKind> kinds;
+- if (json.containsKey("kinds")) {
+- kinds =3D jsonDecoder.decodeList(
+- jsonPath + ".kinds",
+- json["kinds"],
+- (String jsonPath, Object json) =3D>
+- new RefactoringKind.fromJson(jsonDecoder, jsonPath, json)=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "kinds");
+- }
+- return new EditGetAvailableRefactoringsResult(kinds);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.getAvailableRefactorings result", json);
+- }
+- }
+-
+- factory EditGetAvailableRefactoringsResult.fromResponse(Response respon=
se) {
+- return new EditGetAvailableRefactoringsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["kinds"] =3D
+- kinds.map((RefactoringKind value) =3D> value.toJson()).toList();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetAvailableRefactoringsResult) {
+- return listEqual(
+- kinds, other.kinds, (RefactoringKind a, RefactoringKind b) =3D>=
a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, kinds.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getFixes params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetFixesParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- /**
+- * The file containing the errors for which fixes are being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the errors for which fixes are being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset used to select the errors for which fixes will be returne=
d.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset used to select the errors for which fixes will be returne=
d.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- EditGetFixesParams(String file, int offset) {
+- this.file =3D file;
+- this.offset =3D offset;
+- }
+-
+- factory EditGetFixesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- return new EditGetFixesParams(file, offset);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.getFixes params", json);
+- }
+- }
+-
+- factory EditGetFixesParams.fromRequest(Request request) {
+- return new EditGetFixesParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.getFixes", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetFixesParams) {
+- return file =3D=3D other.file && offset =3D=3D other.offset;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getFixes result
+- *
+- * {
+- * "fixes": List<AnalysisErrorFixes>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetFixesResult implements ResponseResult {
+- List<AnalysisErrorFixes> _fixes;
+-
+- /**
+- * The fixes that are available for the errors at the given offset.
+- */
+- List<AnalysisErrorFixes> get fixes =3D> _fixes;
+-
+- /**
+- * The fixes that are available for the errors at the given offset.
+- */
+- void set fixes(List<AnalysisErrorFixes> value) {
+- assert(value !=3D null);
+- this._fixes =3D value;
+- }
+-
+- EditGetFixesResult(List<AnalysisErrorFixes> fixes) {
+- this.fixes =3D fixes;
+- }
+-
+- factory EditGetFixesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<AnalysisErrorFixes> fixes;
+- if (json.containsKey("fixes")) {
+- fixes =3D jsonDecoder.decodeList(
+- jsonPath + ".fixes",
+- json["fixes"],
+- (String jsonPath, Object json) =3D>
+- new AnalysisErrorFixes.fromJson(jsonDecoder, jsonPath, js=
on));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "fixes");
+- }
+- return new EditGetFixesResult(fixes);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.getFixes result", json);
+- }
+- }
+-
+- factory EditGetFixesResult.fromResponse(Response response) {
+- return new EditGetFixesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["fixes"] =3D
+- fixes.map((AnalysisErrorFixes value) =3D> value.toJson()).toList(=
);
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetFixesResult) {
+- return listEqual(fixes, other.fixes,
+- (AnalysisErrorFixes a, AnalysisErrorFixes b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, fixes.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getPostfixCompletion params
+- *
+- * {
+- * "file": FilePath
+- * "key": String
+- * "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetPostfixCompletionParams implements RequestParams {
+- String _file;
+-
+- String _key;
+-
+- int _offset;
+-
+- /**
+- * The file containing the postfix template to be expanded.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the postfix template to be expanded.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The unique name that identifies the template in use.
+- */
+- String get key =3D> _key;
+-
+- /**
+- * The unique name that identifies the template in use.
+- */
+- void set key(String value) {
+- assert(value !=3D null);
+- this._key =3D value;
+- }
+-
+- /**
+- * The offset used to identify the code to which the template will be
+- * applied.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset used to identify the code to which the template will be
+- * applied.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- EditGetPostfixCompletionParams(String file, String key, int offset) {
+- this.file =3D file;
+- this.key =3D key;
+- this.offset =3D offset;
+- }
+-
+- factory EditGetPostfixCompletionParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- String key;
+- if (json.containsKey("key")) {
+- key =3D jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "key");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- return new EditGetPostfixCompletionParams(file, key, offset);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.getPostfixCompletion params", json);
+- }
+- }
+-
+- factory EditGetPostfixCompletionParams.fromRequest(Request request) {
+- return new EditGetPostfixCompletionParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["key"] =3D key;
+- result["offset"] =3D offset;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.getPostfixCompletion", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetPostfixCompletionParams) {
+- return file =3D=3D other.file && key =3D=3D other.key && offset =3D=
=3D other.offset;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, key.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getPostfixCompletion result
+- *
+- * {
+- * "change": SourceChange
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetPostfixCompletionResult implements ResponseResult {
+- SourceChange _change;
+-
+- /**
+- * The change to be applied in order to complete the statement.
+- */
+- SourceChange get change =3D> _change;
+-
+- /**
+- * The change to be applied in order to complete the statement.
+- */
+- void set change(SourceChange value) {
+- assert(value !=3D null);
+- this._change =3D value;
+- }
+-
+- EditGetPostfixCompletionResult(SourceChange change) {
+- this.change =3D change;
+- }
+-
+- factory EditGetPostfixCompletionResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- SourceChange change;
+- if (json.containsKey("change")) {
+- change =3D new SourceChange.fromJson(
+- jsonDecoder, jsonPath + ".change", json["change"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "change");
+- }
+- return new EditGetPostfixCompletionResult(change);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.getPostfixCompletion result", json);
+- }
+- }
+-
+- factory EditGetPostfixCompletionResult.fromResponse(Response response) {
+- return new EditGetPostfixCompletionResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["change"] =3D change.toJson();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetPostfixCompletionResult) {
+- return change =3D=3D other.change;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, change.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getRefactoring params
+- *
+- * {
+- * "kind": RefactoringKind
+- * "file": FilePath
+- * "offset": int
+- * "length": int
+- * "validateOnly": bool
+- * "options": optional RefactoringOptions
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetRefactoringParams implements RequestParams {
+- RefactoringKind _kind;
+-
+- String _file;
+-
+- int _offset;
+-
+- int _length;
+-
+- bool _validateOnly;
+-
+- RefactoringOptions _options;
+-
+- /**
+- * The kind of refactoring to be performed.
+- */
+- RefactoringKind get kind =3D> _kind;
+-
+- /**
+- * The kind of refactoring to be performed.
+- */
+- void set kind(RefactoringKind value) {
+- assert(value !=3D null);
+- this._kind =3D value;
+- }
+-
+- /**
+- * The file containing the code involved in the refactoring.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the code involved in the refactoring.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the region involved in the refactoring.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the region involved in the refactoring.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the region involved in the refactoring.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the region involved in the refactoring.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- /**
+- * True if the client is only requesting that the values of the options=
be
+- * validated and no change be generated.
+- */
+- bool get validateOnly =3D> _validateOnly;
+-
+- /**
+- * True if the client is only requesting that the values of the options=
be
+- * validated and no change be generated.
+- */
+- void set validateOnly(bool value) {
+- assert(value !=3D null);
+- this._validateOnly =3D value;
+- }
+-
+- /**
+- * Data used to provide values provided by the user. The structure of t=
he
+- * data is dependent on the kind of refactoring being performed. The da=
ta
+- * that is expected is documented in the section titled Refactorings, l=
abeled
+- * as "Options". This field can be omitted if the refactoring does not
+- * require any options or if the values of those options are not known.
+- */
+- RefactoringOptions get options =3D> _options;
+-
+- /**
+- * Data used to provide values provided by the user. The structure of t=
he
+- * data is dependent on the kind of refactoring being performed. The da=
ta
+- * that is expected is documented in the section titled Refactorings, l=
abeled
+- * as "Options". This field can be omitted if the refactoring does not
+- * require any options or if the values of those options are not known.
+- */
+- void set options(RefactoringOptions value) {
+- this._options =3D value;
+- }
+-
+- EditGetRefactoringParams(RefactoringKind kind, String file, int offset,
+- int length, bool validateOnly,
+- {RefactoringOptions options}) {
+- this.kind =3D kind;
+- this.file =3D file;
+- this.offset =3D offset;
+- this.length =3D length;
+- this.validateOnly =3D validateOnly;
+- this.options =3D options;
+- }
+-
+- factory EditGetRefactoringParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- RefactoringKind kind;
+- if (json.containsKey("kind")) {
+- kind =3D new RefactoringKind.fromJson(
+- jsonDecoder, jsonPath + ".kind", json["kind"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "kind");
+- }
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- bool validateOnly;
+- if (json.containsKey("validateOnly")) {
+- validateOnly =3D jsonDecoder.decodeBool(
+- jsonPath + ".validateOnly", json["validateOnly"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "validateOnly");
+- }
+- RefactoringOptions options;
+- if (json.containsKey("options")) {
+- options =3D new RefactoringOptions.fromJson(
+- jsonDecoder, jsonPath + ".options", json["options"], kind);
+- }
+- return new EditGetRefactoringParams(
+- kind, file, offset, length, validateOnly,
+- options: options);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring params", =
json);
+- }
+- }
+-
+- factory EditGetRefactoringParams.fromRequest(Request request) {
+- var params =3D new EditGetRefactoringParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- REQUEST_ID_REFACTORING_KINDS[request.id] =3D params.kind;
+- return params;
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["kind"] =3D kind.toJson();
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- result["validateOnly"] =3D validateOnly;
+- if (options !=3D null) {
+- result["options"] =3D options.toJson();
+- }
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.getRefactoring", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetRefactoringParams) {
+- return kind =3D=3D other.kind &&
+- file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- length =3D=3D other.length &&
+- validateOnly =3D=3D other.validateOnly &&
+- options =3D=3D other.options;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, validateOnly.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, options.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getRefactoring result
+- *
+- * {
+- * "initialProblems": List<RefactoringProblem>
+- * "optionsProblems": List<RefactoringProblem>
+- * "finalProblems": List<RefactoringProblem>
+- * "feedback": optional RefactoringFeedback
+- * "change": optional SourceChange
+- * "potentialEdits": optional List<String>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetRefactoringResult implements ResponseResult {
+- List<RefactoringProblem> _initialProblems;
+-
+- List<RefactoringProblem> _optionsProblems;
+-
+- List<RefactoringProblem> _finalProblems;
+-
+- RefactoringFeedback _feedback;
+-
+- SourceChange _change;
+-
+- List<String> _potentialEdits;
+-
+- /**
+- * The initial status of the refactoring, i.e. problems related to the
+- * context in which the refactoring is requested. The array will be emp=
ty if
+- * there are no known problems.
+- */
+- List<RefactoringProblem> get initialProblems =3D> _initialProblems;
+-
+- /**
+- * The initial status of the refactoring, i.e. problems related to the
+- * context in which the refactoring is requested. The array will be emp=
ty if
+- * there are no known problems.
+- */
+- void set initialProblems(List<RefactoringProblem> value) {
+- assert(value !=3D null);
+- this._initialProblems =3D value;
+- }
+-
+- /**
+- * The options validation status, i.e. problems in the given options, s=
uch as
+- * light-weight validation of a new name, flags compatibility, etc. The=
array
+- * will be empty if there are no known problems.
+- */
+- List<RefactoringProblem> get optionsProblems =3D> _optionsProblems;
+-
+- /**
+- * The options validation status, i.e. problems in the given options, s=
uch as
+- * light-weight validation of a new name, flags compatibility, etc. The=
array
+- * will be empty if there are no known problems.
+- */
+- void set optionsProblems(List<RefactoringProblem> value) {
+- assert(value !=3D null);
+- this._optionsProblems =3D value;
+- }
+-
+- /**
+- * The final status of the refactoring, i.e. problems identified in the
+- * result of a full, potentially expensive validation and / or change
+- * creation. The array will be empty if there are no known problems.
+- */
+- List<RefactoringProblem> get finalProblems =3D> _finalProblems;
+-
+- /**
+- * The final status of the refactoring, i.e. problems identified in the
+- * result of a full, potentially expensive validation and / or change
+- * creation. The array will be empty if there are no known problems.
+- */
+- void set finalProblems(List<RefactoringProblem> value) {
+- assert(value !=3D null);
+- this._finalProblems =3D value;
+- }
+-
+- /**
+- * Data used to provide feedback to the user. The structure of the data=
is
+- * dependent on the kind of refactoring being created. The data that is
+- * returned is documented in the section titled Refactorings, labeled as
+- * "Feedback".
+- */
+- RefactoringFeedback get feedback =3D> _feedback;
+-
+- /**
+- * Data used to provide feedback to the user. The structure of the data=
is
+- * dependent on the kind of refactoring being created. The data that is
+- * returned is documented in the section titled Refactorings, labeled as
+- * "Feedback".
+- */
+- void set feedback(RefactoringFeedback value) {
+- this._feedback =3D value;
+- }
+-
+- /**
+- * The changes that are to be applied to affect the refactoring. This f=
ield
+- * will be omitted if there are problems that prevent a set of changes =
from
+- * being computed, such as having no options specified for a refactorin=
g that
+- * requires them, or if only validation was requested.
+- */
+- SourceChange get change =3D> _change;
+-
+- /**
+- * The changes that are to be applied to affect the refactoring. This f=
ield
+- * will be omitted if there are problems that prevent a set of changes =
from
+- * being computed, such as having no options specified for a refactorin=
g that
+- * requires them, or if only validation was requested.
+- */
+- void set change(SourceChange value) {
+- this._change =3D value;
+- }
+-
+- /**
+- * The ids of source edits that are not known to be valid. An edit is n=
ot
+- * known to be valid if there was insufficient type information for the
+- * server to be able to determine whether or not the code needs to be
+- * modified, such as when a member is being renamed and there is a refe=
rence
+- * to a member from an unknown type. This field will be omitted if the =
change
+- * field is omitted or if there are no potential edits for the refactor=
ing.
+- */
+- List<String> get potentialEdits =3D> _potentialEdits;
+-
+- /**
+- * The ids of source edits that are not known to be valid. An edit is n=
ot
+- * known to be valid if there was insufficient type information for the
+- * server to be able to determine whether or not the code needs to be
+- * modified, such as when a member is being renamed and there is a refe=
rence
+- * to a member from an unknown type. This field will be omitted if the =
change
+- * field is omitted or if there are no potential edits for the refactor=
ing.
+- */
+- void set potentialEdits(List<String> value) {
+- this._potentialEdits =3D value;
+- }
+-
+- EditGetRefactoringResult(
+- List<RefactoringProblem> initialProblems,
+- List<RefactoringProblem> optionsProblems,
+- List<RefactoringProblem> finalProblems,
+- {RefactoringFeedback feedback,
+- SourceChange change,
+- List<String> potentialEdits}) {
+- this.initialProblems =3D initialProblems;
+- this.optionsProblems =3D optionsProblems;
+- this.finalProblems =3D finalProblems;
+- this.feedback =3D feedback;
+- this.change =3D change;
+- this.potentialEdits =3D potentialEdits;
+- }
+-
+- factory EditGetRefactoringResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<RefactoringProblem> initialProblems;
+- if (json.containsKey("initialProblems")) {
+- initialProblems =3D jsonDecoder.decodeList(
+- jsonPath + ".initialProblems",
+- json["initialProblems"],
+- (String jsonPath, Object json) =3D>
+- new RefactoringProblem.fromJson(jsonDecoder, jsonPath, js=
on));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "initialProblems");
+- }
+- List<RefactoringProblem> optionsProblems;
+- if (json.containsKey("optionsProblems")) {
+- optionsProblems =3D jsonDecoder.decodeList(
+- jsonPath + ".optionsProblems",
+- json["optionsProblems"],
+- (String jsonPath, Object json) =3D>
+- new RefactoringProblem.fromJson(jsonDecoder, jsonPath, js=
on));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "optionsProblems");
+- }
+- List<RefactoringProblem> finalProblems;
+- if (json.containsKey("finalProblems")) {
+- finalProblems =3D jsonDecoder.decodeList(
+- jsonPath + ".finalProblems",
+- json["finalProblems"],
+- (String jsonPath, Object json) =3D>
+- new RefactoringProblem.fromJson(jsonDecoder, jsonPath, js=
on));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "finalProblems");
+- }
+- RefactoringFeedback feedback;
+- if (json.containsKey("feedback")) {
+- feedback =3D new RefactoringFeedback.fromJson(
+- jsonDecoder, jsonPath + ".feedback", json["feedback"], json);
+- }
+- SourceChange change;
+- if (json.containsKey("change")) {
+- change =3D new SourceChange.fromJson(
+- jsonDecoder, jsonPath + ".change", json["change"]);
+- }
+- List<String> potentialEdits;
+- if (json.containsKey("potentialEdits")) {
+- potentialEdits =3D jsonDecoder.decodeList(jsonPath + ".potentialE=
dits",
+- json["potentialEdits"], jsonDecoder.decodeString);
+- }
+- return new EditGetRefactoringResult(
+- initialProblems, optionsProblems, finalProblems,
+- feedback: feedback, change: change, potentialEdits: potentialEd=
its);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring result", =
json);
+- }
+- }
+-
+- factory EditGetRefactoringResult.fromResponse(Response response) {
+- return new EditGetRefactoringResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["initialProblems"] =3D initialProblems
+- .map((RefactoringProblem value) =3D> value.toJson())
+- .toList();
+- result["optionsProblems"] =3D optionsProblems
+- .map((RefactoringProblem value) =3D> value.toJson())
+- .toList();
+- result["finalProblems"] =3D finalProblems
+- .map((RefactoringProblem value) =3D> value.toJson())
+- .toList();
+- if (feedback !=3D null) {
+- result["feedback"] =3D feedback.toJson();
+- }
+- if (change !=3D null) {
+- result["change"] =3D change.toJson();
+- }
+- if (potentialEdits !=3D null) {
+- result["potentialEdits"] =3D potentialEdits;
+- }
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetRefactoringResult) {
+- return listEqual(initialProblems, other.initialProblems,
+- (RefactoringProblem a, RefactoringProblem b) =3D> a =3D=3D =
b) &&
+- listEqual(optionsProblems, other.optionsProblems,
+- (RefactoringProblem a, RefactoringProblem b) =3D> a =3D=3D =
b) &&
+- listEqual(finalProblems, other.finalProblems,
+- (RefactoringProblem a, RefactoringProblem b) =3D> a =3D=3D =
b) &&
+- feedback =3D=3D other.feedback &&
+- change =3D=3D other.change &&
+- listEqual(potentialEdits, other.potentialEdits,
+- (String a, String b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, initialProblems.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, optionsProblems.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, finalProblems.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, feedback.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, change.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, potentialEdits.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getStatementCompletion params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetStatementCompletionParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- /**
+- * The file containing the statement to be completed.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the statement to be completed.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset used to identify the statement to be completed.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset used to identify the statement to be completed.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- EditGetStatementCompletionParams(String file, int offset) {
+- this.file =3D file;
+- this.offset =3D offset;
+- }
+-
+- factory EditGetStatementCompletionParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- return new EditGetStatementCompletionParams(file, offset);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.getStatementCompletion params", json);
+- }
+- }
+-
+- factory EditGetStatementCompletionParams.fromRequest(Request request) {
+- return new EditGetStatementCompletionParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.getStatementCompletion", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetStatementCompletionParams) {
+- return file =3D=3D other.file && offset =3D=3D other.offset;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.getStatementCompletion result
+- *
+- * {
+- * "change": SourceChange
+- * "whitespaceOnly": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditGetStatementCompletionResult implements ResponseResult {
+- SourceChange _change;
+-
+- bool _whitespaceOnly;
+-
+- /**
+- * The change to be applied in order to complete the statement.
+- */
+- SourceChange get change =3D> _change;
+-
+- /**
+- * The change to be applied in order to complete the statement.
+- */
+- void set change(SourceChange value) {
+- assert(value !=3D null);
+- this._change =3D value;
+- }
+-
+- /**
+- * Will be true if the change contains nothing but whitespace character=
s, or
+- * is empty.
+- */
+- bool get whitespaceOnly =3D> _whitespaceOnly;
+-
+- /**
+- * Will be true if the change contains nothing but whitespace character=
s, or
+- * is empty.
+- */
+- void set whitespaceOnly(bool value) {
+- assert(value !=3D null);
+- this._whitespaceOnly =3D value;
+- }
+-
+- EditGetStatementCompletionResult(SourceChange change, bool whitespaceOn=
ly) {
+- this.change =3D change;
+- this.whitespaceOnly =3D whitespaceOnly;
+- }
+-
+- factory EditGetStatementCompletionResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- SourceChange change;
+- if (json.containsKey("change")) {
+- change =3D new SourceChange.fromJson(
+- jsonDecoder, jsonPath + ".change", json["change"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "change");
+- }
+- bool whitespaceOnly;
+- if (json.containsKey("whitespaceOnly")) {
+- whitespaceOnly =3D jsonDecoder.decodeBool(
+- jsonPath + ".whitespaceOnly", json["whitespaceOnly"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "whitespaceOnly");
+- }
+- return new EditGetStatementCompletionResult(change, whitespaceOnly);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.getStatementCompletion result", json);
+- }
+- }
+-
+- factory EditGetStatementCompletionResult.fromResponse(Response response=
) {
+- return new EditGetStatementCompletionResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["change"] =3D change.toJson();
+- result["whitespaceOnly"] =3D whitespaceOnly;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditGetStatementCompletionResult) {
+- return change =3D=3D other.change && whitespaceOnly =3D=3D other.wh=
itespaceOnly;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, change.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, whitespaceOnly.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.importElements params
+- *
+- * {
+- * "file": FilePath
+- * "elements": List<ImportedElements>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditImportElementsParams implements RequestParams {
+- String _file;
+-
+- List<ImportedElements> _elements;
+-
+- /**
+- * The file in which the specified elements are to be made accessible.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file in which the specified elements are to be made accessible.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The elements to be made accessible in the specified file.
+- */
+- List<ImportedElements> get elements =3D> _elements;
+-
+- /**
+- * The elements to be made accessible in the specified file.
+- */
+- void set elements(List<ImportedElements> value) {
+- assert(value !=3D null);
+- this._elements =3D value;
+- }
+-
+- EditImportElementsParams(String file, List<ImportedElements> elements) {
+- this.file =3D file;
+- this.elements =3D elements;
+- }
+-
+- factory EditImportElementsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- List<ImportedElements> elements;
+- if (json.containsKey("elements")) {
+- elements =3D jsonDecoder.decodeList(
+- jsonPath + ".elements",
+- json["elements"],
+- (String jsonPath, Object json) =3D>
+- new ImportedElements.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "elements");
+- }
+- return new EditImportElementsParams(file, elements);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.importElements params", =
json);
+- }
+- }
+-
+- factory EditImportElementsParams.fromRequest(Request request) {
+- return new EditImportElementsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["elements"] =3D
+- elements.map((ImportedElements value) =3D> value.toJson()).toList=
();
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.importElements", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditImportElementsParams) {
+- return file =3D=3D other.file &&
+- listEqual(elements, other.elements,
+- (ImportedElements a, ImportedElements b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, elements.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.importElements result
+- *
+- * {
+- * "edit": SourceFileEdit
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditImportElementsResult implements ResponseResult {
+- SourceFileEdit _edit;
+-
+- /**
+- * The edits to be applied in order to make the specified elements
+- * accessible. The file to be edited will be the defining compilation u=
nit of
+- * the library containing the file specified in the request, which can =
be
+- * different than the file specified in the request if the specified fi=
le is
+- * a part file.
+- */
+- SourceFileEdit get edit =3D> _edit;
+-
+- /**
+- * The edits to be applied in order to make the specified elements
+- * accessible. The file to be edited will be the defining compilation u=
nit of
+- * the library containing the file specified in the request, which can =
be
+- * different than the file specified in the request if the specified fi=
le is
+- * a part file.
+- */
+- void set edit(SourceFileEdit value) {
+- assert(value !=3D null);
+- this._edit =3D value;
+- }
+-
+- EditImportElementsResult(SourceFileEdit edit) {
+- this.edit =3D edit;
+- }
+-
+- factory EditImportElementsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- SourceFileEdit edit;
+- if (json.containsKey("edit")) {
+- edit =3D new SourceFileEdit.fromJson(
+- jsonDecoder, jsonPath + ".edit", json["edit"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit");
+- }
+- return new EditImportElementsResult(edit);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.importElements result", =
json);
+- }
+- }
+-
+- factory EditImportElementsResult.fromResponse(Response response) {
+- return new EditImportElementsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["edit"] =3D edit.toJson();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditImportElementsResult) {
+- return edit =3D=3D other.edit;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, edit.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.isPostfixCompletionApplicable params
+- *
+- * {
+- * "file": FilePath
+- * "key": String
+- * "offset": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditIsPostfixCompletionApplicableParams implements RequestParams {
+- String _file;
+-
+- String _key;
+-
+- int _offset;
+-
+- /**
+- * The file containing the postfix template to be expanded.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the postfix template to be expanded.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The unique name that identifies the template in use.
+- */
+- String get key =3D> _key;
+-
+- /**
+- * The unique name that identifies the template in use.
+- */
+- void set key(String value) {
+- assert(value !=3D null);
+- this._key =3D value;
+- }
+-
+- /**
+- * The offset used to identify the code to which the template will be
+- * applied.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset used to identify the code to which the template will be
+- * applied.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- EditIsPostfixCompletionApplicableParams(String file, String key, int of=
fset) {
+- this.file =3D file;
+- this.key =3D key;
+- this.offset =3D offset;
+- }
+-
+- factory EditIsPostfixCompletionApplicableParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- String key;
+- if (json.containsKey("key")) {
+- key =3D jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "key");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- return new EditIsPostfixCompletionApplicableParams(file, key, offse=
t);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.isPostfixCompletionApplicable params", json);
+- }
+- }
+-
+- factory EditIsPostfixCompletionApplicableParams.fromRequest(Request req=
uest) {
+- return new EditIsPostfixCompletionApplicableParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["key"] =3D key;
+- result["offset"] =3D offset;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.isPostfixCompletionApplicable", toJson()=
);
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditIsPostfixCompletionApplicableParams) {
+- return file =3D=3D other.file && key =3D=3D other.key && offset =3D=
=3D other.offset;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, key.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.isPostfixCompletionApplicable result
+- *
+- * {
+- * "value": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditIsPostfixCompletionApplicableResult implements ResponseResult {
+- bool _value;
+-
+- /**
+- * True if the template can be expanded at the given location.
+- */
+- bool get value =3D> _value;
+-
+- /**
+- * True if the template can be expanded at the given location.
+- */
+- void set value(bool value) {
+- assert(value !=3D null);
+- this._value =3D value;
+- }
+-
+- EditIsPostfixCompletionApplicableResult(bool value) {
+- this.value =3D value;
+- }
+-
+- factory EditIsPostfixCompletionApplicableResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool value;
+- if (json.containsKey("value")) {
+- value =3D jsonDecoder.decodeBool(jsonPath + ".value", json["value=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "value");
+- }
+- return new EditIsPostfixCompletionApplicableResult(value);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.isPostfixCompletionApplicable result", json);
+- }
+- }
+-
+- factory EditIsPostfixCompletionApplicableResult.fromResponse(
+- Response response) {
+- return new EditIsPostfixCompletionApplicableResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["value"] =3D value;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditIsPostfixCompletionApplicableResult) {
+- return value =3D=3D other.value;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, value.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.listPostfixCompletionTemplates params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditListPostfixCompletionTemplatesParams implements RequestParams {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.listPostfixCompletionTemplates", null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditListPostfixCompletionTemplatesParams) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 690713107;
+- }
+-}
+-
+-/**
+- * edit.listPostfixCompletionTemplates result
+- *
+- * {
+- * "templates": List<PostfixTemplateDescriptor>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditListPostfixCompletionTemplatesResult implements ResponseResult {
+- List<PostfixTemplateDescriptor> _templates;
+-
+- /**
+- * The list of available templates.
+- */
+- List<PostfixTemplateDescriptor> get templates =3D> _templates;
+-
+- /**
+- * The list of available templates.
+- */
+- void set templates(List<PostfixTemplateDescriptor> value) {
+- assert(value !=3D null);
+- this._templates =3D value;
+- }
+-
+- EditListPostfixCompletionTemplatesResult(
+- List<PostfixTemplateDescriptor> templates) {
+- this.templates =3D templates;
+- }
+-
+- factory EditListPostfixCompletionTemplatesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<PostfixTemplateDescriptor> templates;
+- if (json.containsKey("templates")) {
+- templates =3D jsonDecoder.decodeList(
+- jsonPath + ".templates",
+- json["templates"],
+- (String jsonPath, Object json) =3D>
+- new PostfixTemplateDescriptor.fromJson(
+- jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "templates");
+- }
+- return new EditListPostfixCompletionTemplatesResult(templates);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.listPostfixCompletionTemplates result", json);
+- }
+- }
+-
+- factory EditListPostfixCompletionTemplatesResult.fromResponse(
+- Response response) {
+- return new EditListPostfixCompletionTemplatesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["templates"] =3D templates
+- .map((PostfixTemplateDescriptor value) =3D> value.toJson())
+- .toList();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditListPostfixCompletionTemplatesResult) {
+- return listEqual(templates, other.templates,
+- (PostfixTemplateDescriptor a, PostfixTemplateDescriptor b) =3D>=
a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, templates.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.organizeDirectives params
+- *
+- * {
+- * "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditOrganizeDirectivesParams implements RequestParams {
+- String _file;
+-
+- /**
+- * The Dart file to organize directives in.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The Dart file to organize directives in.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- EditOrganizeDirectivesParams(String file) {
+- this.file =3D file;
+- }
+-
+- factory EditOrganizeDirectivesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- return new EditOrganizeDirectivesParams(file);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.organizeDirectives params", json);
+- }
+- }
+-
+- factory EditOrganizeDirectivesParams.fromRequest(Request request) {
+- return new EditOrganizeDirectivesParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.organizeDirectives", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditOrganizeDirectivesParams) {
+- return file =3D=3D other.file;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.organizeDirectives result
+- *
+- * {
+- * "edit": SourceFileEdit
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditOrganizeDirectivesResult implements ResponseResult {
+- SourceFileEdit _edit;
+-
+- /**
+- * The file edit that is to be applied to the given file to effect the
+- * organizing.
+- */
+- SourceFileEdit get edit =3D> _edit;
+-
+- /**
+- * The file edit that is to be applied to the given file to effect the
+- * organizing.
+- */
+- void set edit(SourceFileEdit value) {
+- assert(value !=3D null);
+- this._edit =3D value;
+- }
+-
+- EditOrganizeDirectivesResult(SourceFileEdit edit) {
+- this.edit =3D edit;
+- }
+-
+- factory EditOrganizeDirectivesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- SourceFileEdit edit;
+- if (json.containsKey("edit")) {
+- edit =3D new SourceFileEdit.fromJson(
+- jsonDecoder, jsonPath + ".edit", json["edit"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit");
+- }
+- return new EditOrganizeDirectivesResult(edit);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "edit.organizeDirectives result", json);
+- }
+- }
+-
+- factory EditOrganizeDirectivesResult.fromResponse(Response response) {
+- return new EditOrganizeDirectivesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["edit"] =3D edit.toJson();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditOrganizeDirectivesResult) {
+- return edit =3D=3D other.edit;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, edit.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.sortMembers params
+- *
+- * {
+- * "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditSortMembersParams implements RequestParams {
+- String _file;
+-
+- /**
+- * The Dart file to sort.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The Dart file to sort.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- EditSortMembersParams(String file) {
+- this.file =3D file;
+- }
+-
+- factory EditSortMembersParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- return new EditSortMembersParams(file);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers params", jso=
n);
+- }
+- }
+-
+- factory EditSortMembersParams.fromRequest(Request request) {
+- return new EditSortMembersParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "edit.sortMembers", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditSortMembersParams) {
+- return file =3D=3D other.file;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * edit.sortMembers result
+- *
+- * {
+- * "edit": SourceFileEdit
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class EditSortMembersResult implements ResponseResult {
+- SourceFileEdit _edit;
+-
+- /**
+- * The file edit that is to be applied to the given file to effect the
+- * sorting.
+- */
+- SourceFileEdit get edit =3D> _edit;
+-
+- /**
+- * The file edit that is to be applied to the given file to effect the
+- * sorting.
+- */
+- void set edit(SourceFileEdit value) {
+- assert(value !=3D null);
+- this._edit =3D value;
+- }
+-
+- EditSortMembersResult(SourceFileEdit edit) {
+- this.edit =3D edit;
+- }
+-
+- factory EditSortMembersResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- SourceFileEdit edit;
+- if (json.containsKey("edit")) {
+- edit =3D new SourceFileEdit.fromJson(
+- jsonDecoder, jsonPath + ".edit", json["edit"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit");
+- }
+- return new EditSortMembersResult(edit);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers result", jso=
n);
+- }
+- }
+-
+- factory EditSortMembersResult.fromResponse(Response response) {
+- return new EditSortMembersResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["edit"] =3D edit.toJson();
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is EditSortMembersResult) {
+- return edit =3D=3D other.edit;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, edit.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ExecutableFile
+- *
+- * {
+- * "file": FilePath
+- * "kind": ExecutableKind
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutableFile implements HasToJson {
+- String _file;
+-
+- ExecutableKind _kind;
+-
+- /**
+- * The path of the executable file.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The path of the executable file.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The kind of the executable file.
+- */
+- ExecutableKind get kind =3D> _kind;
+-
+- /**
+- * The kind of the executable file.
+- */
+- void set kind(ExecutableKind value) {
+- assert(value !=3D null);
+- this._kind =3D value;
+- }
+-
+- ExecutableFile(String file, ExecutableKind kind) {
+- this.file =3D file;
+- this.kind =3D kind;
+- }
+-
+- factory ExecutableFile.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- ExecutableKind kind;
+- if (json.containsKey("kind")) {
+- kind =3D new ExecutableKind.fromJson(
+- jsonDecoder, jsonPath + ".kind", json["kind"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "kind");
+- }
+- return new ExecutableFile(file, kind);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "ExecutableFile", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["kind"] =3D kind.toJson();
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutableFile) {
+- return file =3D=3D other.file && kind =3D=3D other.kind;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ExecutableKind
+- *
+- * enum {
+- * CLIENT
+- * EITHER
+- * NOT_EXECUTABLE
+- * SERVER
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutableKind implements Enum {
+- static const ExecutableKind CLIENT =3D const ExecutableKind._("CLIENT");
+-
+- static const ExecutableKind EITHER =3D const ExecutableKind._("EITHER");
+-
+- static const ExecutableKind NOT_EXECUTABLE =3D
+- const ExecutableKind._("NOT_EXECUTABLE");
+-
+- static const ExecutableKind SERVER =3D const ExecutableKind._("SERVER");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<ExecutableKind> VALUES =3D const <ExecutableKind>[
+- CLIENT,
+- EITHER,
+- NOT_EXECUTABLE,
+- SERVER
+- ];
+-
+- @override
+- final String name;
+-
+- const ExecutableKind._(this.name);
+-
+- factory ExecutableKind(String name) {
+- switch (name) {
+- case "CLIENT":
+- return CLIENT;
+- case "EITHER":
+- return EITHER;
+- case "NOT_EXECUTABLE":
+- return NOT_EXECUTABLE;
+- case "SERVER":
+- return SERVER;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory ExecutableKind.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new ExecutableKind(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "ExecutableKind", json);
+- }
+-
+- @override
+- String toString() =3D> "ExecutableKind.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * execution.createContext params
+- *
+- * {
+- * "contextRoot": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionCreateContextParams implements RequestParams {
+- String _contextRoot;
+-
+- /**
+- * The path of the Dart or HTML file that will be launched, or the path=
of
+- * the directory containing the file.
+- */
+- String get contextRoot =3D> _contextRoot;
+-
+- /**
+- * The path of the Dart or HTML file that will be launched, or the path=
of
+- * the directory containing the file.
+- */
+- void set contextRoot(String value) {
+- assert(value !=3D null);
+- this._contextRoot =3D value;
+- }
+-
+- ExecutionCreateContextParams(String contextRoot) {
+- this.contextRoot =3D contextRoot;
+- }
+-
+- factory ExecutionCreateContextParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String contextRoot;
+- if (json.containsKey("contextRoot")) {
+- contextRoot =3D jsonDecoder.decodeString(
+- jsonPath + ".contextRoot", json["contextRoot"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "contextRoot");
+- }
+- return new ExecutionCreateContextParams(contextRoot);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "execution.createContext params", json);
+- }
+- }
+-
+- factory ExecutionCreateContextParams.fromRequest(Request request) {
+- return new ExecutionCreateContextParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["contextRoot"] =3D contextRoot;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "execution.createContext", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionCreateContextParams) {
+- return contextRoot =3D=3D other.contextRoot;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, contextRoot.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * execution.createContext result
+- *
+- * {
+- * "id": ExecutionContextId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionCreateContextResult implements ResponseResult {
+- String _id;
+-
+- /**
+- * The identifier used to refer to the execution context that was creat=
ed.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier used to refer to the execution context that was creat=
ed.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- ExecutionCreateContextResult(String id) {
+- this.id =3D id;
+- }
+-
+- factory ExecutionCreateContextResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- return new ExecutionCreateContextResult(id);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "execution.createContext result", json);
+- }
+- }
+-
+- factory ExecutionCreateContextResult.fromResponse(Response response) {
+- return new ExecutionCreateContextResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionCreateContextResult) {
+- return id =3D=3D other.id;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * execution.deleteContext params
+- *
+- * {
+- * "id": ExecutionContextId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionDeleteContextParams implements RequestParams {
+- String _id;
+-
+- /**
+- * The identifier of the execution context that is to be deleted.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier of the execution context that is to be deleted.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- ExecutionDeleteContextParams(String id) {
+- this.id =3D id;
+- }
+-
+- factory ExecutionDeleteContextParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- return new ExecutionDeleteContextParams(id);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "execution.deleteContext params", json);
+- }
+- }
+-
+- factory ExecutionDeleteContextParams.fromRequest(Request request) {
+- return new ExecutionDeleteContextParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "execution.deleteContext", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionDeleteContextParams) {
+- return id =3D=3D other.id;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * execution.deleteContext result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionDeleteContextResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionDeleteContextResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 479954425;
+- }
+-}
+-
+-/**
+- * execution.launchData params
+- *
+- * {
+- * "file": FilePath
+- * "kind": optional ExecutableKind
+- * "referencedFiles": optional List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionLaunchDataParams implements HasToJson {
+- String _file;
+-
+- ExecutableKind _kind;
+-
+- List<String> _referencedFiles;
+-
+- /**
+- * The file for which launch data is being provided. This will either b=
e a
+- * Dart library or an HTML file.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file for which launch data is being provided. This will either b=
e a
+- * Dart library or an HTML file.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The kind of the executable file. This field is omitted if the file i=
s not
+- * a Dart file.
+- */
+- ExecutableKind get kind =3D> _kind;
+-
+- /**
+- * The kind of the executable file. This field is omitted if the file i=
s not
+- * a Dart file.
+- */
+- void set kind(ExecutableKind value) {
+- this._kind =3D value;
+- }
+-
+- /**
+- * A list of the Dart files that are referenced by the file. This field=
is
+- * omitted if the file is not an HTML file.
+- */
+- List<String> get referencedFiles =3D> _referencedFiles;
+-
+- /**
+- * A list of the Dart files that are referenced by the file. This field=
is
+- * omitted if the file is not an HTML file.
+- */
+- void set referencedFiles(List<String> value) {
+- this._referencedFiles =3D value;
+- }
+-
+- ExecutionLaunchDataParams(String file,
+- {ExecutableKind kind, List<String> referencedFiles}) {
+- this.file =3D file;
+- this.kind =3D kind;
+- this.referencedFiles =3D referencedFiles;
+- }
+-
+- factory ExecutionLaunchDataParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- ExecutableKind kind;
+- if (json.containsKey("kind")) {
+- kind =3D new ExecutableKind.fromJson(
+- jsonDecoder, jsonPath + ".kind", json["kind"]);
+- }
+- List<String> referencedFiles;
+- if (json.containsKey("referencedFiles")) {
+- referencedFiles =3D jsonDecoder.decodeList(jsonPath + ".reference=
dFiles",
+- json["referencedFiles"], jsonDecoder.decodeString);
+- }
+- return new ExecutionLaunchDataParams(file,
+- kind: kind, referencedFiles: referencedFiles);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "execution.launchData params",=
json);
+- }
+- }
+-
+- factory ExecutionLaunchDataParams.fromNotification(
+- Notification notification) {
+- return new ExecutionLaunchDataParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- if (kind !=3D null) {
+- result["kind"] =3D kind.toJson();
+- }
+- if (referencedFiles !=3D null) {
+- result["referencedFiles"] =3D referencedFiles;
+- }
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("execution.launchData", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionLaunchDataParams) {
+- return file =3D=3D other.file &&
+- kind =3D=3D other.kind &&
+- listEqual(referencedFiles, other.referencedFiles,
+- (String a, String b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, referencedFiles.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * execution.mapUri params
+- *
+- * {
+- * "id": ExecutionContextId
+- * "file": optional FilePath
+- * "uri": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionMapUriParams implements RequestParams {
+- String _id;
+-
+- String _file;
+-
+- String _uri;
+-
+- /**
+- * The identifier of the execution context in which the URI is to be ma=
pped.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier of the execution context in which the URI is to be ma=
pped.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- /**
+- * The path of the file to be mapped into a URI.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The path of the file to be mapped into a URI.
+- */
+- void set file(String value) {
+- this._file =3D value;
+- }
+-
+- /**
+- * The URI to be mapped into a file path.
+- */
+- String get uri =3D> _uri;
+-
+- /**
+- * The URI to be mapped into a file path.
+- */
+- void set uri(String value) {
+- this._uri =3D value;
+- }
+-
+- ExecutionMapUriParams(String id, {String file, String uri}) {
+- this.id =3D id;
+- this.file =3D file;
+- this.uri =3D uri;
+- }
+-
+- factory ExecutionMapUriParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- }
+- String uri;
+- if (json.containsKey("uri")) {
+- uri =3D jsonDecoder.decodeString(jsonPath + ".uri", json["uri"]);
+- }
+- return new ExecutionMapUriParams(id, file: file, uri: uri);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "execution.mapUri params", jso=
n);
+- }
+- }
+-
+- factory ExecutionMapUriParams.fromRequest(Request request) {
+- return new ExecutionMapUriParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- if (file !=3D null) {
+- result["file"] =3D file;
+- }
+- if (uri !=3D null) {
+- result["uri"] =3D uri;
+- }
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "execution.mapUri", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionMapUriParams) {
+- return id =3D=3D other.id && file =3D=3D other.file && uri =3D=3D o=
ther.uri;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, uri.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * execution.mapUri result
+- *
+- * {
+- * "file": optional FilePath
+- * "uri": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionMapUriResult implements ResponseResult {
+- String _file;
+-
+- String _uri;
+-
+- /**
+- * The file to which the URI was mapped. This field is omitted if the u=
ri
+- * field was not given in the request.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file to which the URI was mapped. This field is omitted if the u=
ri
+- * field was not given in the request.
+- */
+- void set file(String value) {
+- this._file =3D value;
+- }
+-
+- /**
+- * The URI to which the file path was mapped. This field is omitted if =
the
+- * file field was not given in the request.
+- */
+- String get uri =3D> _uri;
+-
+- /**
+- * The URI to which the file path was mapped. This field is omitted if =
the
+- * file field was not given in the request.
+- */
+- void set uri(String value) {
+- this._uri =3D value;
+- }
+-
+- ExecutionMapUriResult({String file, String uri}) {
+- this.file =3D file;
+- this.uri =3D uri;
+- }
+-
+- factory ExecutionMapUriResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- }
+- String uri;
+- if (json.containsKey("uri")) {
+- uri =3D jsonDecoder.decodeString(jsonPath + ".uri", json["uri"]);
+- }
+- return new ExecutionMapUriResult(file: file, uri: uri);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "execution.mapUri result", jso=
n);
+- }
+- }
+-
+- factory ExecutionMapUriResult.fromResponse(Response response) {
+- return new ExecutionMapUriResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- if (file !=3D null) {
+- result["file"] =3D file;
+- }
+- if (uri !=3D null) {
+- result["uri"] =3D uri;
+- }
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionMapUriResult) {
+- return file =3D=3D other.file && uri =3D=3D other.uri;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, uri.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ExecutionService
+- *
+- * enum {
+- * LAUNCH_DATA
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionService implements Enum {
+- static const ExecutionService LAUNCH_DATA =3D
+- const ExecutionService._("LAUNCH_DATA");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<ExecutionService> VALUES =3D const <ExecutionService>[
+- LAUNCH_DATA
+- ];
+-
+- @override
+- final String name;
+-
+- const ExecutionService._(this.name);
+-
+- factory ExecutionService(String name) {
+- switch (name) {
+- case "LAUNCH_DATA":
+- return LAUNCH_DATA;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory ExecutionService.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new ExecutionService(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "ExecutionService", json);
+- }
+-
+- @override
+- String toString() =3D> "ExecutionService.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * execution.setSubscriptions params
+- *
+- * {
+- * "subscriptions": List<ExecutionService>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionSetSubscriptionsParams implements RequestParams {
+- List<ExecutionService> _subscriptions;
+-
+- /**
+- * A list of the services being subscribed to.
+- */
+- List<ExecutionService> get subscriptions =3D> _subscriptions;
+-
+- /**
+- * A list of the services being subscribed to.
+- */
+- void set subscriptions(List<ExecutionService> value) {
+- assert(value !=3D null);
+- this._subscriptions =3D value;
+- }
+-
+- ExecutionSetSubscriptionsParams(List<ExecutionService> subscriptions) {
+- this.subscriptions =3D subscriptions;
+- }
+-
+- factory ExecutionSetSubscriptionsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<ExecutionService> subscriptions;
+- if (json.containsKey("subscriptions")) {
+- subscriptions =3D jsonDecoder.decodeList(
+- jsonPath + ".subscriptions",
+- json["subscriptions"],
+- (String jsonPath, Object json) =3D>
+- new ExecutionService.fromJson(jsonDecoder, jsonPath, json=
));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+- }
+- return new ExecutionSetSubscriptionsParams(subscriptions);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "execution.setSubscriptions params", json);
+- }
+- }
+-
+- factory ExecutionSetSubscriptionsParams.fromRequest(Request request) {
+- return new ExecutionSetSubscriptionsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["subscriptions"] =3D
+- subscriptions.map((ExecutionService value) =3D> value.toJson()).t=
oList();
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "execution.setSubscriptions", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionSetSubscriptionsParams) {
+- return listEqual(subscriptions, other.subscriptions,
+- (ExecutionService a, ExecutionService b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * execution.setSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExecutionSetSubscriptionsResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExecutionSetSubscriptionsResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 287678780;
+- }
+-}
+-
+-/**
+- * extractLocalVariable feedback
+- *
+- * {
+- * "coveringExpressionOffsets": optional List<int>
+- * "coveringExpressionLengths": optional List<int>
+- * "names": List<String>
+- * "offsets": List<int>
+- * "lengths": List<int>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractLocalVariableFeedback extends RefactoringFeedback {
+- List<int> _coveringExpressionOffsets;
+-
+- List<int> _coveringExpressionLengths;
+-
+- List<String> _names;
+-
+- List<int> _offsets;
+-
+- List<int> _lengths;
+-
+- /**
+- * The offsets of the expressions that cover the specified selection, f=
rom
+- * the down most to the up most.
+- */
+- List<int> get coveringExpressionOffsets =3D> _coveringExpressionOffsets;
+-
+- /**
+- * The offsets of the expressions that cover the specified selection, f=
rom
+- * the down most to the up most.
+- */
+- void set coveringExpressionOffsets(List<int> value) {
+- this._coveringExpressionOffsets =3D value;
+- }
+-
+- /**
+- * The lengths of the expressions that cover the specified selection, f=
rom
+- * the down most to the up most.
+- */
+- List<int> get coveringExpressionLengths =3D> _coveringExpressionLengths;
+-
+- /**
+- * The lengths of the expressions that cover the specified selection, f=
rom
+- * the down most to the up most.
+- */
+- void set coveringExpressionLengths(List<int> value) {
+- this._coveringExpressionLengths =3D value;
+- }
+-
+- /**
+- * The proposed names for the local variable.
+- */
+- List<String> get names =3D> _names;
+-
+- /**
+- * The proposed names for the local variable.
+- */
+- void set names(List<String> value) {
+- assert(value !=3D null);
+- this._names =3D value;
+- }
+-
+- /**
+- * The offsets of the expressions that would be replaced by a reference=
to
+- * the variable.
+- */
+- List<int> get offsets =3D> _offsets;
+-
+- /**
+- * The offsets of the expressions that would be replaced by a reference=
to
+- * the variable.
+- */
+- void set offsets(List<int> value) {
+- assert(value !=3D null);
+- this._offsets =3D value;
+- }
+-
+- /**
+- * The lengths of the expressions that would be replaced by a reference=
to
+- * the variable. The lengths correspond to the offsets. In other words,=
for a
+- * given expression, if the offset of that expression is offsets[i], th=
en the
+- * length of that expression is lengths[i].
+- */
+- List<int> get lengths =3D> _lengths;
+-
+- /**
+- * The lengths of the expressions that would be replaced by a reference=
to
+- * the variable. The lengths correspond to the offsets. In other words,=
for a
+- * given expression, if the offset of that expression is offsets[i], th=
en the
+- * length of that expression is lengths[i].
+- */
+- void set lengths(List<int> value) {
+- assert(value !=3D null);
+- this._lengths =3D value;
+- }
+-
+- ExtractLocalVariableFeedback(
+- List<String> names, List<int> offsets, List<int> lengths,
+- {List<int> coveringExpressionOffsets,
+- List<int> coveringExpressionLengths}) {
+- this.coveringExpressionOffsets =3D coveringExpressionOffsets;
+- this.coveringExpressionLengths =3D coveringExpressionLengths;
+- this.names =3D names;
+- this.offsets =3D offsets;
+- this.lengths =3D lengths;
+- }
+-
+- factory ExtractLocalVariableFeedback.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<int> coveringExpressionOffsets;
+- if (json.containsKey("coveringExpressionOffsets")) {
+- coveringExpressionOffsets =3D jsonDecoder.decodeList(
+- jsonPath + ".coveringExpressionOffsets",
+- json["coveringExpressionOffsets"],
+- jsonDecoder.decodeInt);
+- }
+- List<int> coveringExpressionLengths;
+- if (json.containsKey("coveringExpressionLengths")) {
+- coveringExpressionLengths =3D jsonDecoder.decodeList(
+- jsonPath + ".coveringExpressionLengths",
+- json["coveringExpressionLengths"],
+- jsonDecoder.decodeInt);
+- }
+- List<String> names;
+- if (json.containsKey("names")) {
+- names =3D jsonDecoder.decodeList(
+- jsonPath + ".names", json["names"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "names");
+- }
+- List<int> offsets;
+- if (json.containsKey("offsets")) {
+- offsets =3D jsonDecoder.decodeList(
+- jsonPath + ".offsets", json["offsets"], jsonDecoder.decodeInt=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offsets");
+- }
+- List<int> lengths;
+- if (json.containsKey("lengths")) {
+- lengths =3D jsonDecoder.decodeList(
+- jsonPath + ".lengths", json["lengths"], jsonDecoder.decodeInt=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "lengths");
+- }
+- return new ExtractLocalVariableFeedback(names, offsets, lengths,
+- coveringExpressionOffsets: coveringExpressionOffsets,
+- coveringExpressionLengths: coveringExpressionLengths);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "extractLocalVariable feedback", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- if (coveringExpressionOffsets !=3D null) {
+- result["coveringExpressionOffsets"] =3D coveringExpressionOffsets;
+- }
+- if (coveringExpressionLengths !=3D null) {
+- result["coveringExpressionLengths"] =3D coveringExpressionLengths;
+- }
+- result["names"] =3D names;
+- result["offsets"] =3D offsets;
+- result["lengths"] =3D lengths;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExtractLocalVariableFeedback) {
+- return listEqual(coveringExpressionOffsets,
+- other.coveringExpressionOffsets, (int a, int b) =3D> a =3D=
=3D b) &&
+- listEqual(coveringExpressionLengths, other.coveringExpressionLe=
ngths,
+- (int a, int b) =3D> a =3D=3D b) &&
+- listEqual(names, other.names, (String a, String b) =3D> a =3D=
=3D b) &&
+- listEqual(offsets, other.offsets, (int a, int b) =3D> a =3D=3D =
b) &&
+- listEqual(lengths, other.lengths, (int a, int b) =3D> a =3D=3D =
b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, coveringExpressionOffsets.hashC=
ode);
+- hash =3D JenkinsSmiHash.combine(hash, coveringExpressionLengths.hashC=
ode);
+- hash =3D JenkinsSmiHash.combine(hash, names.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offsets.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, lengths.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * extractLocalVariable options
+- *
+- * {
+- * "name": String
+- * "extractAll": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractLocalVariableOptions extends RefactoringOptions {
+- String _name;
+-
+- bool _extractAll;
+-
+- /**
+- * The name that the local variable should be given.
+- */
+- String get name =3D> _name;
+-
+- /**
+- * The name that the local variable should be given.
+- */
+- void set name(String value) {
+- assert(value !=3D null);
+- this._name =3D value;
+- }
+-
+- /**
+- * True if all occurrences of the expression within the scope in which =
the
+- * variable will be defined should be replaced by a reference to the lo=
cal
+- * variable. The expression used to initiate the refactoring will alway=
s be
+- * replaced.
+- */
+- bool get extractAll =3D> _extractAll;
+-
+- /**
+- * True if all occurrences of the expression within the scope in which =
the
+- * variable will be defined should be replaced by a reference to the lo=
cal
+- * variable. The expression used to initiate the refactoring will alway=
s be
+- * replaced.
+- */
+- void set extractAll(bool value) {
+- assert(value !=3D null);
+- this._extractAll =3D value;
+- }
+-
+- ExtractLocalVariableOptions(String name, bool extractAll) {
+- this.name =3D name;
+- this.extractAll =3D extractAll;
+- }
+-
+- factory ExtractLocalVariableOptions.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String name;
+- if (json.containsKey("name")) {
+- name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "name");
+- }
+- bool extractAll;
+- if (json.containsKey("extractAll")) {
+- extractAll =3D jsonDecoder.decodeBool(
+- jsonPath + ".extractAll", json["extractAll"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "extractAll");
+- }
+- return new ExtractLocalVariableOptions(name, extractAll);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "extractLocalVariable options", json);
+- }
+- }
+-
+- factory ExtractLocalVariableOptions.fromRefactoringParams(
+- EditGetRefactoringParams refactoringParams, Request request) {
+- return new ExtractLocalVariableOptions.fromJson(
+- new RequestDecoder(request), "options", refactoringParams.options=
);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["name"] =3D name;
+- result["extractAll"] =3D extractAll;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExtractLocalVariableOptions) {
+- return name =3D=3D other.name && extractAll =3D=3D other.extractAll;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, extractAll.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * extractMethod feedback
+- *
+- * {
+- * "offset": int
+- * "length": int
+- * "returnType": String
+- * "names": List<String>
+- * "canCreateGetter": bool
+- * "parameters": List<RefactoringMethodParameter>
+- * "offsets": List<int>
+- * "lengths": List<int>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractMethodFeedback extends RefactoringFeedback {
+- int _offset;
+-
+- int _length;
+-
+- String _returnType;
+-
+- List<String> _names;
+-
+- bool _canCreateGetter;
+-
+- List<RefactoringMethodParameter> _parameters;
+-
+- List<int> _offsets;
+-
+- List<int> _lengths;
+-
+- /**
+- * The offset to the beginning of the expression or statements that wil=
l be
+- * extracted.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset to the beginning of the expression or statements that wil=
l be
+- * extracted.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the expression or statements that will be extracted.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the expression or statements that will be extracted.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- /**
+- * The proposed return type for the method. If the returned element doe=
s not
+- * have a declared return type, this field will contain an empty string.
+- */
+- String get returnType =3D> _returnType;
+-
+- /**
+- * The proposed return type for the method. If the returned element doe=
s not
+- * have a declared return type, this field will contain an empty string.
+- */
+- void set returnType(String value) {
+- assert(value !=3D null);
+- this._returnType =3D value;
+- }
+-
+- /**
+- * The proposed names for the method.
+- */
+- List<String> get names =3D> _names;
+-
+- /**
+- * The proposed names for the method.
+- */
+- void set names(List<String> value) {
+- assert(value !=3D null);
+- this._names =3D value;
+- }
+-
+- /**
+- * True if a getter could be created rather than a method.
+- */
+- bool get canCreateGetter =3D> _canCreateGetter;
+-
+- /**
+- * True if a getter could be created rather than a method.
+- */
+- void set canCreateGetter(bool value) {
+- assert(value !=3D null);
+- this._canCreateGetter =3D value;
+- }
+-
+- /**
+- * The proposed parameters for the method.
+- */
+- List<RefactoringMethodParameter> get parameters =3D> _parameters;
+-
+- /**
+- * The proposed parameters for the method.
+- */
+- void set parameters(List<RefactoringMethodParameter> value) {
+- assert(value !=3D null);
+- this._parameters =3D value;
+- }
+-
+- /**
+- * The offsets of the expressions or statements that would be replaced =
by an
+- * invocation of the method.
+- */
+- List<int> get offsets =3D> _offsets;
+-
+- /**
+- * The offsets of the expressions or statements that would be replaced =
by an
+- * invocation of the method.
+- */
+- void set offsets(List<int> value) {
+- assert(value !=3D null);
+- this._offsets =3D value;
+- }
+-
+- /**
+- * The lengths of the expressions or statements that would be replaced =
by an
+- * invocation of the method. The lengths correspond to the offsets. In =
other
+- * words, for a given expression (or block of statements), if the offse=
t of
+- * that expression is offsets[i], then the length of that expression is
+- * lengths[i].
+- */
+- List<int> get lengths =3D> _lengths;
+-
+- /**
+- * The lengths of the expressions or statements that would be replaced =
by an
+- * invocation of the method. The lengths correspond to the offsets. In =
other
+- * words, for a given expression (or block of statements), if the offse=
t of
+- * that expression is offsets[i], then the length of that expression is
+- * lengths[i].
+- */
+- void set lengths(List<int> value) {
+- assert(value !=3D null);
+- this._lengths =3D value;
+- }
+-
+- ExtractMethodFeedback(
+- int offset,
+- int length,
+- String returnType,
+- List<String> names,
+- bool canCreateGetter,
+- List<RefactoringMethodParameter> parameters,
+- List<int> offsets,
+- List<int> lengths) {
+- this.offset =3D offset;
+- this.length =3D length;
+- this.returnType =3D returnType;
+- this.names =3D names;
+- this.canCreateGetter =3D canCreateGetter;
+- this.parameters =3D parameters;
+- this.offsets =3D offsets;
+- this.lengths =3D lengths;
+- }
+-
+- factory ExtractMethodFeedback.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- String returnType;
+- if (json.containsKey("returnType")) {
+- returnType =3D jsonDecoder.decodeString(
+- jsonPath + ".returnType", json["returnType"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "returnType");
+- }
+- List<String> names;
+- if (json.containsKey("names")) {
+- names =3D jsonDecoder.decodeList(
+- jsonPath + ".names", json["names"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "names");
+- }
+- bool canCreateGetter;
+- if (json.containsKey("canCreateGetter")) {
+- canCreateGetter =3D jsonDecoder.decodeBool(
+- jsonPath + ".canCreateGetter", json["canCreateGetter"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "canCreateGetter");
+- }
+- List<RefactoringMethodParameter> parameters;
+- if (json.containsKey("parameters")) {
+- parameters =3D jsonDecoder.decodeList(
+- jsonPath + ".parameters",
+- json["parameters"],
+- (String jsonPath, Object json) =3D>
+- new RefactoringMethodParameter.fromJson(
+- jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "parameters");
+- }
+- List<int> offsets;
+- if (json.containsKey("offsets")) {
+- offsets =3D jsonDecoder.decodeList(
+- jsonPath + ".offsets", json["offsets"], jsonDecoder.decodeInt=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offsets");
+- }
+- List<int> lengths;
+- if (json.containsKey("lengths")) {
+- lengths =3D jsonDecoder.decodeList(
+- jsonPath + ".lengths", json["lengths"], jsonDecoder.decodeInt=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "lengths");
+- }
+- return new ExtractMethodFeedback(offset, length, returnType, names,
+- canCreateGetter, parameters, offsets, lengths);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "extractMethod feedback", json=
);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- result["returnType"] =3D returnType;
+- result["names"] =3D names;
+- result["canCreateGetter"] =3D canCreateGetter;
+- result["parameters"] =3D parameters
+- .map((RefactoringMethodParameter value) =3D> value.toJson())
+- .toList();
+- result["offsets"] =3D offsets;
+- result["lengths"] =3D lengths;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExtractMethodFeedback) {
+- return offset =3D=3D other.offset &&
+- length =3D=3D other.length &&
+- returnType =3D=3D other.returnType &&
+- listEqual(names, other.names, (String a, String b) =3D> a =3D=
=3D b) &&
+- canCreateGetter =3D=3D other.canCreateGetter &&
+- listEqual(
+- parameters,
+- other.parameters,
+- (RefactoringMethodParameter a, RefactoringMethodParameter b=
) =3D>
+- a =3D=3D b) &&
+- listEqual(offsets, other.offsets, (int a, int b) =3D> a =3D=3D =
b) &&
+- listEqual(lengths, other.lengths, (int a, int b) =3D> a =3D=3D =
b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, returnType.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, names.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, canCreateGetter.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, parameters.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offsets.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, lengths.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * extractMethod options
+- *
+- * {
+- * "returnType": String
+- * "createGetter": bool
+- * "name": String
+- * "parameters": List<RefactoringMethodParameter>
+- * "extractAll": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ExtractMethodOptions extends RefactoringOptions {
+- String _returnType;
+-
+- bool _createGetter;
+-
+- String _name;
+-
+- List<RefactoringMethodParameter> _parameters;
+-
+- bool _extractAll;
+-
+- /**
+- * The return type that should be defined for the method.
+- */
+- String get returnType =3D> _returnType;
+-
+- /**
+- * The return type that should be defined for the method.
+- */
+- void set returnType(String value) {
+- assert(value !=3D null);
+- this._returnType =3D value;
+- }
+-
+- /**
+- * True if a getter should be created rather than a method. It is an er=
ror if
+- * this field is true and the list of parameters is non-empty.
+- */
+- bool get createGetter =3D> _createGetter;
+-
+- /**
+- * True if a getter should be created rather than a method. It is an er=
ror if
+- * this field is true and the list of parameters is non-empty.
+- */
+- void set createGetter(bool value) {
+- assert(value !=3D null);
+- this._createGetter =3D value;
+- }
+-
+- /**
+- * The name that the method should be given.
+- */
+- String get name =3D> _name;
+-
+- /**
+- * The name that the method should be given.
+- */
+- void set name(String value) {
+- assert(value !=3D null);
+- this._name =3D value;
+- }
+-
+- /**
+- * The parameters that should be defined for the method.
+- *
+- * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL
+- * parameter. It is an error if a REQUIRED or POSITIONAL parameter foll=
ows a
+- * NAMED parameter.
+- *
+- * - To change the order and/or update proposed parameters, add paramet=
ers
+- * with the same identifiers as proposed.
+- * - To add new parameters, omit their identifier.
+- * - To remove some parameters, omit them in this list.
+- */
+- List<RefactoringMethodParameter> get parameters =3D> _parameters;
+-
+- /**
+- * The parameters that should be defined for the method.
+- *
+- * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL
+- * parameter. It is an error if a REQUIRED or POSITIONAL parameter foll=
ows a
+- * NAMED parameter.
+- *
+- * - To change the order and/or update proposed parameters, add paramet=
ers
+- * with the same identifiers as proposed.
+- * - To add new parameters, omit their identifier.
+- * - To remove some parameters, omit them in this list.
+- */
+- void set parameters(List<RefactoringMethodParameter> value) {
+- assert(value !=3D null);
+- this._parameters =3D value;
+- }
+-
+- /**
+- * True if all occurrences of the expression or statements should be re=
placed
+- * by an invocation of the method. The expression or statements used to
+- * initiate the refactoring will always be replaced.
+- */
+- bool get extractAll =3D> _extractAll;
+-
+- /**
+- * True if all occurrences of the expression or statements should be re=
placed
+- * by an invocation of the method. The expression or statements used to
+- * initiate the refactoring will always be replaced.
+- */
+- void set extractAll(bool value) {
+- assert(value !=3D null);
+- this._extractAll =3D value;
+- }
+-
+- ExtractMethodOptions(String returnType, bool createGetter, String name,
+- List<RefactoringMethodParameter> parameters, bool extractAll) {
+- this.returnType =3D returnType;
+- this.createGetter =3D createGetter;
+- this.name =3D name;
+- this.parameters =3D parameters;
+- this.extractAll =3D extractAll;
+- }
+-
+- factory ExtractMethodOptions.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String returnType;
+- if (json.containsKey("returnType")) {
+- returnType =3D jsonDecoder.decodeString(
+- jsonPath + ".returnType", json["returnType"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "returnType");
+- }
+- bool createGetter;
+- if (json.containsKey("createGetter")) {
+- createGetter =3D jsonDecoder.decodeBool(
+- jsonPath + ".createGetter", json["createGetter"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "createGetter");
+- }
+- String name;
+- if (json.containsKey("name")) {
+- name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "name");
+- }
+- List<RefactoringMethodParameter> parameters;
+- if (json.containsKey("parameters")) {
+- parameters =3D jsonDecoder.decodeList(
+- jsonPath + ".parameters",
+- json["parameters"],
+- (String jsonPath, Object json) =3D>
+- new RefactoringMethodParameter.fromJson(
+- jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "parameters");
+- }
+- bool extractAll;
+- if (json.containsKey("extractAll")) {
+- extractAll =3D jsonDecoder.decodeBool(
+- jsonPath + ".extractAll", json["extractAll"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "extractAll");
+- }
+- return new ExtractMethodOptions(
+- returnType, createGetter, name, parameters, extractAll);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "extractMethod options", json);
+- }
+- }
+-
+- factory ExtractMethodOptions.fromRefactoringParams(
+- EditGetRefactoringParams refactoringParams, Request request) {
+- return new ExtractMethodOptions.fromJson(
+- new RequestDecoder(request), "options", refactoringParams.options=
);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["returnType"] =3D returnType;
+- result["createGetter"] =3D createGetter;
+- result["name"] =3D name;
+- result["parameters"] =3D parameters
+- .map((RefactoringMethodParameter value) =3D> value.toJson())
+- .toList();
+- result["extractAll"] =3D extractAll;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ExtractMethodOptions) {
+- return returnType =3D=3D other.returnType &&
+- createGetter =3D=3D other.createGetter &&
+- name =3D=3D other.name &&
+- listEqual(
+- parameters,
+- other.parameters,
+- (RefactoringMethodParameter a, RefactoringMethodParameter b=
) =3D>
+- a =3D=3D b) &&
+- extractAll =3D=3D other.extractAll;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, returnType.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, createGetter.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, parameters.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, extractAll.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * FileKind
+- *
+- * enum {
+- * LIBRARY
+- * PART
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class FileKind implements Enum {
+- static const FileKind LIBRARY =3D const FileKind._("LIBRARY");
+-
+- static const FileKind PART =3D const FileKind._("PART");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<FileKind> VALUES =3D const <FileKind>[LIBRARY, PART];
+-
+- @override
+- final String name;
+-
+- const FileKind._(this.name);
+-
+- factory FileKind(String name) {
+- switch (name) {
+- case "LIBRARY":
+- return LIBRARY;
+- case "PART":
+- return PART;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory FileKind.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new FileKind(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "FileKind", json);
+- }
+-
+- @override
+- String toString() =3D> "FileKind.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * GeneralAnalysisService
+- *
+- * enum {
+- * ANALYZED_FILES
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class GeneralAnalysisService implements Enum {
+- static const GeneralAnalysisService ANALYZED_FILES =3D
+- const GeneralAnalysisService._("ANALYZED_FILES");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<GeneralAnalysisService> VALUES =3D
+- const <GeneralAnalysisService>[ANALYZED_FILES];
+-
+- @override
+- final String name;
+-
+- const GeneralAnalysisService._(this.name);
+-
+- factory GeneralAnalysisService(String name) {
+- switch (name) {
+- case "ANALYZED_FILES":
+- return ANALYZED_FILES;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory GeneralAnalysisService.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new GeneralAnalysisService(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "GeneralAnalysisService", json);
+- }
+-
+- @override
+- String toString() =3D> "GeneralAnalysisService.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * HoverInformation
+- *
+- * {
+- * "offset": int
+- * "length": int
+- * "containingLibraryPath": optional String
+- * "containingLibraryName": optional String
+- * "containingClassDescription": optional String
+- * "dartdoc": optional String
+- * "elementDescription": optional String
+- * "elementKind": optional String
+- * "isDeprecated": optional bool
+- * "parameter": optional String
+- * "propagatedType": optional String
+- * "staticType": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class HoverInformation implements HasToJson {
+- int _offset;
+-
+- int _length;
+-
+- String _containingLibraryPath;
+-
+- String _containingLibraryName;
+-
+- String _containingClassDescription;
+-
+- String _dartdoc;
+-
+- String _elementDescription;
+-
+- String _elementKind;
+-
+- bool _isDeprecated;
+-
+- String _parameter;
+-
+- String _propagatedType;
+-
+- String _staticType;
+-
+- /**
+- * The offset of the range of characters that encompasses the cursor po=
sition
+- * and has the same hover information as the cursor position.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the range of characters that encompasses the cursor po=
sition
+- * and has the same hover information as the cursor position.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the range of characters that encompasses the cursor po=
sition
+- * and has the same hover information as the cursor position.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the range of characters that encompasses the cursor po=
sition
+- * and has the same hover information as the cursor position.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- /**
+- * The path to the defining compilation unit of the library in which the
+- * referenced element is declared. This data is omitted if there is no
+- * referenced element, or if the element is declared inside an HTML fil=
e.
+- */
+- String get containingLibraryPath =3D> _containingLibraryPath;
+-
+- /**
+- * The path to the defining compilation unit of the library in which the
+- * referenced element is declared. This data is omitted if there is no
+- * referenced element, or if the element is declared inside an HTML fil=
e.
+- */
+- void set containingLibraryPath(String value) {
+- this._containingLibraryPath =3D value;
+- }
+-
+- /**
+- * The name of the library in which the referenced element is declared.=
This
+- * data is omitted if there is no referenced element, or if the element=
is
+- * declared inside an HTML file.
+- */
+- String get containingLibraryName =3D> _containingLibraryName;
+-
+- /**
+- * The name of the library in which the referenced element is declared.=
This
+- * data is omitted if there is no referenced element, or if the element=
is
+- * declared inside an HTML file.
+- */
+- void set containingLibraryName(String value) {
+- this._containingLibraryName =3D value;
+- }
+-
+- /**
+- * A human-readable description of the class declaring the element being
+- * referenced. This data is omitted if there is no referenced element, =
or if
+- * the element is not a class member.
+- */
+- String get containingClassDescription =3D> _containingClassDescription;
+-
+- /**
+- * A human-readable description of the class declaring the element being
+- * referenced. This data is omitted if there is no referenced element, =
or if
+- * the element is not a class member.
+- */
+- void set containingClassDescription(String value) {
+- this._containingClassDescription =3D value;
+- }
+-
+- /**
+- * The dartdoc associated with the referenced element. Other than the r=
emoval
+- * of the comment delimiters, including leading asterisks in the case o=
f a
+- * block comment, the dartdoc is unprocessed markdown. This data is omi=
tted
+- * if there is no referenced element, or if the element has no dartdoc.
+- */
+- String get dartdoc =3D> _dartdoc;
+-
+- /**
+- * The dartdoc associated with the referenced element. Other than the r=
emoval
+- * of the comment delimiters, including leading asterisks in the case o=
f a
+- * block comment, the dartdoc is unprocessed markdown. This data is omi=
tted
+- * if there is no referenced element, or if the element has no dartdoc.
+- */
+- void set dartdoc(String value) {
+- this._dartdoc =3D value;
+- }
+-
+- /**
+- * A human-readable description of the element being referenced. This d=
ata is
+- * omitted if there is no referenced element.
+- */
+- String get elementDescription =3D> _elementDescription;
+-
+- /**
+- * A human-readable description of the element being referenced. This d=
ata is
+- * omitted if there is no referenced element.
+- */
+- void set elementDescription(String value) {
+- this._elementDescription =3D value;
+- }
+-
+- /**
+- * A human-readable description of the kind of element being referenced=
(such
+- * as "class" or "function type alias"). This data is omitted if there =
is no
+- * referenced element.
+- */
+- String get elementKind =3D> _elementKind;
+-
+- /**
+- * A human-readable description of the kind of element being referenced=
(such
+- * as "class" or "function type alias"). This data is omitted if there =
is no
+- * referenced element.
+- */
+- void set elementKind(String value) {
+- this._elementKind =3D value;
+- }
+-
+- /**
+- * True if the referenced element is deprecated.
+- */
+- bool get isDeprecated =3D> _isDeprecated;
+-
+- /**
+- * True if the referenced element is deprecated.
+- */
+- void set isDeprecated(bool value) {
+- this._isDeprecated =3D value;
+- }
+-
+- /**
+- * A human-readable description of the parameter corresponding to the
+- * expression being hovered over. This data is omitted if the location =
is not
+- * in an argument to a function.
+- */
+- String get parameter =3D> _parameter;
+-
+- /**
+- * A human-readable description of the parameter corresponding to the
+- * expression being hovered over. This data is omitted if the location =
is not
+- * in an argument to a function.
+- */
+- void set parameter(String value) {
+- this._parameter =3D value;
+- }
+-
+- /**
+- * The name of the propagated type of the expression. This data is omit=
ted if
+- * the location does not correspond to an expression or if there is no
+- * propagated type information.
+- */
+- String get propagatedType =3D> _propagatedType;
+-
+- /**
+- * The name of the propagated type of the expression. This data is omit=
ted if
+- * the location does not correspond to an expression or if there is no
+- * propagated type information.
+- */
+- void set propagatedType(String value) {
+- this._propagatedType =3D value;
+- }
+-
+- /**
+- * The name of the static type of the expression. This data is omitted =
if the
+- * location does not correspond to an expression.
+- */
+- String get staticType =3D> _staticType;
+-
+- /**
+- * The name of the static type of the expression. This data is omitted =
if the
+- * location does not correspond to an expression.
+- */
+- void set staticType(String value) {
+- this._staticType =3D value;
+- }
+-
+- HoverInformation(int offset, int length,
+- {String containingLibraryPath,
+- String containingLibraryName,
+- String containingClassDescription,
+- String dartdoc,
+- String elementDescription,
+- String elementKind,
+- bool isDeprecated,
+- String parameter,
+- String propagatedType,
+- String staticType}) {
+- this.offset =3D offset;
+- this.length =3D length;
+- this.containingLibraryPath =3D containingLibraryPath;
+- this.containingLibraryName =3D containingLibraryName;
+- this.containingClassDescription =3D containingClassDescription;
+- this.dartdoc =3D dartdoc;
+- this.elementDescription =3D elementDescription;
+- this.elementKind =3D elementKind;
+- this.isDeprecated =3D isDeprecated;
+- this.parameter =3D parameter;
+- this.propagatedType =3D propagatedType;
+- this.staticType =3D staticType;
+- }
+-
+- factory HoverInformation.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- String containingLibraryPath;
+- if (json.containsKey("containingLibraryPath")) {
+- containingLibraryPath =3D jsonDecoder.decodeString(
+- jsonPath + ".containingLibraryPath", json["containingLibraryP=
ath"]);
+- }
+- String containingLibraryName;
+- if (json.containsKey("containingLibraryName")) {
+- containingLibraryName =3D jsonDecoder.decodeString(
+- jsonPath + ".containingLibraryName", json["containingLibraryN=
ame"]);
+- }
+- String containingClassDescription;
+- if (json.containsKey("containingClassDescription")) {
+- containingClassDescription =3D jsonDecoder.decodeString(
+- jsonPath + ".containingClassDescription",
+- json["containingClassDescription"]);
+- }
+- String dartdoc;
+- if (json.containsKey("dartdoc")) {
+- dartdoc =3D
+- jsonDecoder.decodeString(jsonPath + ".dartdoc", json["dartdoc=
"]);
+- }
+- String elementDescription;
+- if (json.containsKey("elementDescription")) {
+- elementDescription =3D jsonDecoder.decodeString(
+- jsonPath + ".elementDescription", json["elementDescription"]);
+- }
+- String elementKind;
+- if (json.containsKey("elementKind")) {
+- elementKind =3D jsonDecoder.decodeString(
+- jsonPath + ".elementKind", json["elementKind"]);
+- }
+- bool isDeprecated;
+- if (json.containsKey("isDeprecated")) {
+- isDeprecated =3D jsonDecoder.decodeBool(
+- jsonPath + ".isDeprecated", json["isDeprecated"]);
+- }
+- String parameter;
+- if (json.containsKey("parameter")) {
+- parameter =3D jsonDecoder.decodeString(
+- jsonPath + ".parameter", json["parameter"]);
+- }
+- String propagatedType;
+- if (json.containsKey("propagatedType")) {
+- propagatedType =3D jsonDecoder.decodeString(
+- jsonPath + ".propagatedType", json["propagatedType"]);
+- }
+- String staticType;
+- if (json.containsKey("staticType")) {
+- staticType =3D jsonDecoder.decodeString(
+- jsonPath + ".staticType", json["staticType"]);
+- }
+- return new HoverInformation(offset, length,
+- containingLibraryPath: containingLibraryPath,
+- containingLibraryName: containingLibraryName,
+- containingClassDescription: containingClassDescription,
+- dartdoc: dartdoc,
+- elementDescription: elementDescription,
+- elementKind: elementKind,
+- isDeprecated: isDeprecated,
+- parameter: parameter,
+- propagatedType: propagatedType,
+- staticType: staticType);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "HoverInformation", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- if (containingLibraryPath !=3D null) {
+- result["containingLibraryPath"] =3D containingLibraryPath;
+- }
+- if (containingLibraryName !=3D null) {
+- result["containingLibraryName"] =3D containingLibraryName;
+- }
+- if (containingClassDescription !=3D null) {
+- result["containingClassDescription"] =3D containingClassDescription;
+- }
+- if (dartdoc !=3D null) {
+- result["dartdoc"] =3D dartdoc;
+- }
+- if (elementDescription !=3D null) {
+- result["elementDescription"] =3D elementDescription;
+- }
+- if (elementKind !=3D null) {
+- result["elementKind"] =3D elementKind;
+- }
+- if (isDeprecated !=3D null) {
+- result["isDeprecated"] =3D isDeprecated;
+- }
+- if (parameter !=3D null) {
+- result["parameter"] =3D parameter;
+- }
+- if (propagatedType !=3D null) {
+- result["propagatedType"] =3D propagatedType;
+- }
+- if (staticType !=3D null) {
+- result["staticType"] =3D staticType;
+- }
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is HoverInformation) {
+- return offset =3D=3D other.offset &&
+- length =3D=3D other.length &&
+- containingLibraryPath =3D=3D other.containingLibraryPath &&
+- containingLibraryName =3D=3D other.containingLibraryName &&
+- containingClassDescription =3D=3D other.containingClassDescript=
ion &&
+- dartdoc =3D=3D other.dartdoc &&
+- elementDescription =3D=3D other.elementDescription &&
+- elementKind =3D=3D other.elementKind &&
+- isDeprecated =3D=3D other.isDeprecated &&
+- parameter =3D=3D other.parameter &&
+- propagatedType =3D=3D other.propagatedType &&
+- staticType =3D=3D other.staticType;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, containingLibraryPath.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, containingLibraryName.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, containingClassDescription.hash=
Code);
+- hash =3D JenkinsSmiHash.combine(hash, dartdoc.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, elementDescription.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, elementKind.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, isDeprecated.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, parameter.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, propagatedType.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, staticType.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ImplementedClass
+- *
+- * {
+- * "offset": int
+- * "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ImplementedClass implements HasToJson {
+- int _offset;
+-
+- int _length;
+-
+- /**
+- * The offset of the name of the implemented class.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the name of the implemented class.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the name of the implemented class.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the name of the implemented class.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- ImplementedClass(int offset, int length) {
+- this.offset =3D offset;
+- this.length =3D length;
+- }
+-
+- factory ImplementedClass.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- return new ImplementedClass(offset, length);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "ImplementedClass", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ImplementedClass) {
+- return offset =3D=3D other.offset && length =3D=3D other.length;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ImplementedMember
+- *
+- * {
+- * "offset": int
+- * "length": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ImplementedMember implements HasToJson {
+- int _offset;
+-
+- int _length;
+-
+- /**
+- * The offset of the name of the implemented member.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the name of the implemented member.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the name of the implemented member.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the name of the implemented member.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- ImplementedMember(int offset, int length) {
+- this.offset =3D offset;
+- this.length =3D length;
+- }
+-
+- factory ImplementedMember.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- return new ImplementedMember(offset, length);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "ImplementedMember", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ImplementedMember) {
+- return offset =3D=3D other.offset && length =3D=3D other.length;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ImportedElements
+- *
+- * {
+- * "path": FilePath
+- * "prefix": String
+- * "elements": List<String>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ImportedElements implements HasToJson {
+- String _path;
+-
+- String _prefix;
+-
+- List<String> _elements;
+-
+- /**
+- * The absolute and normalized path of the file containing the library.
+- */
+- String get path =3D> _path;
+-
+- /**
+- * The absolute and normalized path of the file containing the library.
+- */
+- void set path(String value) {
+- assert(value !=3D null);
+- this._path =3D value;
+- }
+-
+- /**
+- * The prefix that was used when importing the library into the original
+- * source.
+- */
+- String get prefix =3D> _prefix;
+-
+- /**
+- * The prefix that was used when importing the library into the original
+- * source.
+- */
+- void set prefix(String value) {
+- assert(value !=3D null);
+- this._prefix =3D value;
+- }
+-
+- /**
+- * The names of the elements imported from the library.
+- */
+- List<String> get elements =3D> _elements;
+-
+- /**
+- * The names of the elements imported from the library.
+- */
+- void set elements(List<String> value) {
+- assert(value !=3D null);
+- this._elements =3D value;
+- }
+-
+- ImportedElements(String path, String prefix, List<String> elements) {
+- this.path =3D path;
+- this.prefix =3D prefix;
+- this.elements =3D elements;
+- }
+-
+- factory ImportedElements.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String path;
+- if (json.containsKey("path")) {
+- path =3D jsonDecoder.decodeString(jsonPath + ".path", json["path"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "path");
+- }
+- String prefix;
+- if (json.containsKey("prefix")) {
+- prefix =3D jsonDecoder.decodeString(jsonPath + ".prefix", json["p=
refix"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "prefix");
+- }
+- List<String> elements;
+- if (json.containsKey("elements")) {
+- elements =3D jsonDecoder.decodeList(
+- jsonPath + ".elements", json["elements"], jsonDecoder.decodeS=
tring);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "elements");
+- }
+- return new ImportedElements(path, prefix, elements);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "ImportedElements", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["path"] =3D path;
+- result["prefix"] =3D prefix;
+- result["elements"] =3D elements;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ImportedElements) {
+- return path =3D=3D other.path &&
+- prefix =3D=3D other.prefix &&
+- listEqual(elements, other.elements, (String a, String b) =3D> a=
=3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, path.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, prefix.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, elements.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * inlineLocalVariable feedback
+- *
+- * {
+- * "name": String
+- * "occurrences": int
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineLocalVariableFeedback extends RefactoringFeedback {
+- String _name;
+-
+- int _occurrences;
+-
+- /**
+- * The name of the variable being inlined.
+- */
+- String get name =3D> _name;
+-
+- /**
+- * The name of the variable being inlined.
+- */
+- void set name(String value) {
+- assert(value !=3D null);
+- this._name =3D value;
+- }
+-
+- /**
+- * The number of times the variable occurs.
+- */
+- int get occurrences =3D> _occurrences;
+-
+- /**
+- * The number of times the variable occurs.
+- */
+- void set occurrences(int value) {
+- assert(value !=3D null);
+- this._occurrences =3D value;
+- }
+-
+- InlineLocalVariableFeedback(String name, int occurrences) {
+- this.name =3D name;
+- this.occurrences =3D occurrences;
+- }
+-
+- factory InlineLocalVariableFeedback.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String name;
+- if (json.containsKey("name")) {
+- name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "name");
+- }
+- int occurrences;
+- if (json.containsKey("occurrences")) {
+- occurrences =3D jsonDecoder.decodeInt(
+- jsonPath + ".occurrences", json["occurrences"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "occurrences");
+- }
+- return new InlineLocalVariableFeedback(name, occurrences);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "inlineLocalVariable feedback", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["name"] =3D name;
+- result["occurrences"] =3D occurrences;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is InlineLocalVariableFeedback) {
+- return name =3D=3D other.name && occurrences =3D=3D other.occurrenc=
es;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, occurrences.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * inlineLocalVariable options
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineLocalVariableOptions extends RefactoringOptions
+- implements HasToJson {
+- @override
+- bool operator =3D=3D(other) {
+- if (other is InlineLocalVariableOptions) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 540364977;
+- }
+-}
+-
+-/**
+- * inlineMethod feedback
+- *
+- * {
+- * "className": optional String
+- * "methodName": String
+- * "isDeclaration": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineMethodFeedback extends RefactoringFeedback {
+- String _className;
+-
+- String _methodName;
+-
+- bool _isDeclaration;
+-
+- /**
+- * The name of the class enclosing the method being inlined. If not a c=
lass
+- * member is being inlined, this field will be absent.
+- */
+- String get className =3D> _className;
+-
+- /**
+- * The name of the class enclosing the method being inlined. If not a c=
lass
+- * member is being inlined, this field will be absent.
+- */
+- void set className(String value) {
+- this._className =3D value;
+- }
+-
+- /**
+- * The name of the method (or function) being inlined.
+- */
+- String get methodName =3D> _methodName;
+-
+- /**
+- * The name of the method (or function) being inlined.
+- */
+- void set methodName(String value) {
+- assert(value !=3D null);
+- this._methodName =3D value;
+- }
+-
+- /**
+- * True if the declaration of the method is selected. So all references
+- * should be inlined.
+- */
+- bool get isDeclaration =3D> _isDeclaration;
+-
+- /**
+- * True if the declaration of the method is selected. So all references
+- * should be inlined.
+- */
+- void set isDeclaration(bool value) {
+- assert(value !=3D null);
+- this._isDeclaration =3D value;
+- }
+-
+- InlineMethodFeedback(String methodName, bool isDeclaration,
+- {String className}) {
+- this.className =3D className;
+- this.methodName =3D methodName;
+- this.isDeclaration =3D isDeclaration;
+- }
+-
+- factory InlineMethodFeedback.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String className;
+- if (json.containsKey("className")) {
+- className =3D jsonDecoder.decodeString(
+- jsonPath + ".className", json["className"]);
+- }
+- String methodName;
+- if (json.containsKey("methodName")) {
+- methodName =3D jsonDecoder.decodeString(
+- jsonPath + ".methodName", json["methodName"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "methodName");
+- }
+- bool isDeclaration;
+- if (json.containsKey("isDeclaration")) {
+- isDeclaration =3D jsonDecoder.decodeBool(
+- jsonPath + ".isDeclaration", json["isDeclaration"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "isDeclaration");
+- }
+- return new InlineMethodFeedback(methodName, isDeclaration,
+- className: className);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "inlineMethod feedback", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- if (className !=3D null) {
+- result["className"] =3D className;
+- }
+- result["methodName"] =3D methodName;
+- result["isDeclaration"] =3D isDeclaration;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is InlineMethodFeedback) {
+- return className =3D=3D other.className &&
+- methodName =3D=3D other.methodName &&
+- isDeclaration =3D=3D other.isDeclaration;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, className.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, methodName.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, isDeclaration.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * inlineMethod options
+- *
+- * {
+- * "deleteSource": bool
+- * "inlineAll": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class InlineMethodOptions extends RefactoringOptions {
+- bool _deleteSource;
+-
+- bool _inlineAll;
+-
+- /**
+- * True if the method being inlined should be removed. It is an error i=
f this
+- * field is true and inlineAll is false.
+- */
+- bool get deleteSource =3D> _deleteSource;
+-
+- /**
+- * True if the method being inlined should be removed. It is an error i=
f this
+- * field is true and inlineAll is false.
+- */
+- void set deleteSource(bool value) {
+- assert(value !=3D null);
+- this._deleteSource =3D value;
+- }
+-
+- /**
+- * True if all invocations of the method should be inlined, or false if=
only
+- * the invocation site used to create this refactoring should be inline=
d.
+- */
+- bool get inlineAll =3D> _inlineAll;
+-
+- /**
+- * True if all invocations of the method should be inlined, or false if=
only
+- * the invocation site used to create this refactoring should be inline=
d.
+- */
+- void set inlineAll(bool value) {
+- assert(value !=3D null);
+- this._inlineAll =3D value;
+- }
+-
+- InlineMethodOptions(bool deleteSource, bool inlineAll) {
+- this.deleteSource =3D deleteSource;
+- this.inlineAll =3D inlineAll;
+- }
+-
+- factory InlineMethodOptions.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool deleteSource;
+- if (json.containsKey("deleteSource")) {
+- deleteSource =3D jsonDecoder.decodeBool(
+- jsonPath + ".deleteSource", json["deleteSource"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "deleteSource");
+- }
+- bool inlineAll;
+- if (json.containsKey("inlineAll")) {
+- inlineAll =3D
+- jsonDecoder.decodeBool(jsonPath + ".inlineAll", json["inlineA=
ll"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "inlineAll");
+- }
+- return new InlineMethodOptions(deleteSource, inlineAll);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "inlineMethod options", json);
+- }
+- }
+-
+- factory InlineMethodOptions.fromRefactoringParams(
+- EditGetRefactoringParams refactoringParams, Request request) {
+- return new InlineMethodOptions.fromJson(
+- new RequestDecoder(request), "options", refactoringParams.options=
);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["deleteSource"] =3D deleteSource;
+- result["inlineAll"] =3D inlineAll;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is InlineMethodOptions) {
+- return deleteSource =3D=3D other.deleteSource && inlineAll =3D=3D o=
ther.inlineAll;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, deleteSource.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, inlineAll.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * kythe.getKytheEntries params
+- *
+- * {
+- * "file": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class KytheGetKytheEntriesParams implements RequestParams {
+- String _file;
+-
+- /**
+- * The file containing the code for which the Kythe Entry objects are b=
eing
+- * requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the code for which the Kythe Entry objects are b=
eing
+- * requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- KytheGetKytheEntriesParams(String file) {
+- this.file =3D file;
+- }
+-
+- factory KytheGetKytheEntriesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- return new KytheGetKytheEntriesParams(file);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "kythe.getKytheEntries params", json);
+- }
+- }
+-
+- factory KytheGetKytheEntriesParams.fromRequest(Request request) {
+- return new KytheGetKytheEntriesParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "kythe.getKytheEntries", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is KytheGetKytheEntriesParams) {
+- return file =3D=3D other.file;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * kythe.getKytheEntries result
+- *
+- * {
+- * "entries": List<KytheEntry>
+- * "files": List<FilePath>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class KytheGetKytheEntriesResult implements ResponseResult {
+- List<KytheEntry> _entries;
+-
+- List<String> _files;
+-
+- /**
+- * The list of KytheEntry objects for the queried file.
+- */
+- List<KytheEntry> get entries =3D> _entries;
+-
+- /**
+- * The list of KytheEntry objects for the queried file.
+- */
+- void set entries(List<KytheEntry> value) {
+- assert(value !=3D null);
+- this._entries =3D value;
+- }
+-
+- /**
+- * The set of files paths that were required, but not in the file syste=
m, to
+- * give a complete and accurate Kythe graph for the file. This could be=
due
+- * to a referenced file that does not exist or generated files not being
+- * generated or passed before the call to "getKytheEntries".
+- */
+- List<String> get files =3D> _files;
+-
+- /**
+- * The set of files paths that were required, but not in the file syste=
m, to
+- * give a complete and accurate Kythe graph for the file. This could be=
due
+- * to a referenced file that does not exist or generated files not being
+- * generated or passed before the call to "getKytheEntries".
+- */
+- void set files(List<String> value) {
+- assert(value !=3D null);
+- this._files =3D value;
+- }
+-
+- KytheGetKytheEntriesResult(List<KytheEntry> entries, List<String> files=
) {
+- this.entries =3D entries;
+- this.files =3D files;
+- }
+-
+- factory KytheGetKytheEntriesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<KytheEntry> entries;
+- if (json.containsKey("entries")) {
+- entries =3D jsonDecoder.decodeList(
+- jsonPath + ".entries",
+- json["entries"],
+- (String jsonPath, Object json) =3D>
+- new KytheEntry.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "entries");
+- }
+- List<String> files;
+- if (json.containsKey("files")) {
+- files =3D jsonDecoder.decodeList(
+- jsonPath + ".files", json["files"], jsonDecoder.decodeString);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "files");
+- }
+- return new KytheGetKytheEntriesResult(entries, files);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "kythe.getKytheEntries result", json);
+- }
+- }
+-
+- factory KytheGetKytheEntriesResult.fromResponse(Response response) {
+- return new KytheGetKytheEntriesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["entries"] =3D
+- entries.map((KytheEntry value) =3D> value.toJson()).toList();
+- result["files"] =3D files;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is KytheGetKytheEntriesResult) {
+- return listEqual(
+- entries, other.entries, (KytheEntry a, KytheEntry b) =3D> a=
=3D=3D b) &&
+- listEqual(files, other.files, (String a, String b) =3D> a =3D=
=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, entries.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, files.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * moveFile feedback
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class MoveFileFeedback extends RefactoringFeedback implements HasToJson {
+- @override
+- bool operator =3D=3D(other) {
+- if (other is MoveFileFeedback) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 438975893;
+- }
+-}
+-
+-/**
+- * moveFile options
+- *
+- * {
+- * "newFile": FilePath
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class MoveFileOptions extends RefactoringOptions {
+- String _newFile;
+-
+- /**
+- * The new file path to which the given file is being moved.
+- */
+- String get newFile =3D> _newFile;
+-
+- /**
+- * The new file path to which the given file is being moved.
+- */
+- void set newFile(String value) {
+- assert(value !=3D null);
+- this._newFile =3D value;
+- }
+-
+- MoveFileOptions(String newFile) {
+- this.newFile =3D newFile;
+- }
+-
+- factory MoveFileOptions.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String newFile;
+- if (json.containsKey("newFile")) {
+- newFile =3D
+- jsonDecoder.decodeString(jsonPath + ".newFile", json["newFile=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "newFile");
+- }
+- return new MoveFileOptions(newFile);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "moveFile options", json);
+- }
+- }
+-
+- factory MoveFileOptions.fromRefactoringParams(
+- EditGetRefactoringParams refactoringParams, Request request) {
+- return new MoveFileOptions.fromJson(
+- new RequestDecoder(request), "options", refactoringParams.options=
);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["newFile"] =3D newFile;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is MoveFileOptions) {
+- return newFile =3D=3D other.newFile;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, newFile.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * OverriddenMember
+- *
+- * {
+- * "element": Element
+- * "className": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class OverriddenMember implements HasToJson {
+- Element _element;
+-
+- String _className;
+-
+- /**
+- * The element that is being overridden.
+- */
+- Element get element =3D> _element;
+-
+- /**
+- * The element that is being overridden.
+- */
+- void set element(Element value) {
+- assert(value !=3D null);
+- this._element =3D value;
+- }
+-
+- /**
+- * The name of the class in which the member is defined.
+- */
+- String get className =3D> _className;
+-
+- /**
+- * The name of the class in which the member is defined.
+- */
+- void set className(String value) {
+- assert(value !=3D null);
+- this._className =3D value;
+- }
+-
+- OverriddenMember(Element element, String className) {
+- this.element =3D element;
+- this.className =3D className;
+- }
+-
+- factory OverriddenMember.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- Element element;
+- if (json.containsKey("element")) {
+- element =3D new Element.fromJson(
+- jsonDecoder, jsonPath + ".element", json["element"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "element");
+- }
+- String className;
+- if (json.containsKey("className")) {
+- className =3D jsonDecoder.decodeString(
+- jsonPath + ".className", json["className"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "className");
+- }
+- return new OverriddenMember(element, className);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "OverriddenMember", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["element"] =3D element.toJson();
+- result["className"] =3D className;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is OverriddenMember) {
+- return element =3D=3D other.element && className =3D=3D other.class=
Name;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, element.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, className.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * Override
+- *
+- * {
+- * "offset": int
+- * "length": int
+- * "superclassMember": optional OverriddenMember
+- * "interfaceMembers": optional List<OverriddenMember>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class Override implements HasToJson {
+- int _offset;
+-
+- int _length;
+-
+- OverriddenMember _superclassMember;
+-
+- List<OverriddenMember> _interfaceMembers;
+-
+- /**
+- * The offset of the name of the overriding member.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the name of the overriding member.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the name of the overriding member.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the name of the overriding member.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- /**
+- * The member inherited from a superclass that is overridden by the
+- * overriding member. The field is omitted if there is no superclass me=
mber,
+- * in which case there must be at least one interface member.
+- */
+- OverriddenMember get superclassMember =3D> _superclassMember;
+-
+- /**
+- * The member inherited from a superclass that is overridden by the
+- * overriding member. The field is omitted if there is no superclass me=
mber,
+- * in which case there must be at least one interface member.
+- */
+- void set superclassMember(OverriddenMember value) {
+- this._superclassMember =3D value;
+- }
+-
+- /**
+- * The members inherited from interfaces that are overridden by the
+- * overriding member. The field is omitted if there are no interface me=
mbers,
+- * in which case there must be a superclass member.
+- */
+- List<OverriddenMember> get interfaceMembers =3D> _interfaceMembers;
+-
+- /**
+- * The members inherited from interfaces that are overridden by the
+- * overriding member. The field is omitted if there are no interface me=
mbers,
+- * in which case there must be a superclass member.
+- */
+- void set interfaceMembers(List<OverriddenMember> value) {
+- this._interfaceMembers =3D value;
+- }
+-
+- Override(int offset, int length,
+- {OverriddenMember superclassMember,
+- List<OverriddenMember> interfaceMembers}) {
+- this.offset =3D offset;
+- this.length =3D length;
+- this.superclassMember =3D superclassMember;
+- this.interfaceMembers =3D interfaceMembers;
+- }
+-
+- factory Override.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- OverriddenMember superclassMember;
+- if (json.containsKey("superclassMember")) {
+- superclassMember =3D new OverriddenMember.fromJson(jsonDecoder,
+- jsonPath + ".superclassMember", json["superclassMember"]);
+- }
+- List<OverriddenMember> interfaceMembers;
+- if (json.containsKey("interfaceMembers")) {
+- interfaceMembers =3D jsonDecoder.decodeList(
+- jsonPath + ".interfaceMembers",
+- json["interfaceMembers"],
+- (String jsonPath, Object json) =3D>
+- new OverriddenMember.fromJson(jsonDecoder, jsonPath, json=
));
+- }
+- return new Override(offset, length,
+- superclassMember: superclassMember,
+- interfaceMembers: interfaceMembers);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "Override", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- if (superclassMember !=3D null) {
+- result["superclassMember"] =3D superclassMember.toJson();
+- }
+- if (interfaceMembers !=3D null) {
+- result["interfaceMembers"] =3D interfaceMembers
+- .map((OverriddenMember value) =3D> value.toJson())
+- .toList();
+- }
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is Override) {
+- return offset =3D=3D other.offset &&
+- length =3D=3D other.length &&
+- superclassMember =3D=3D other.superclassMember &&
+- listEqual(interfaceMembers, other.interfaceMembers,
+- (OverriddenMember a, OverriddenMember b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, superclassMember.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, interfaceMembers.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * PostfixTemplateDescriptor
+- *
+- * {
+- * "name": String
+- * "key": String
+- * "example": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class PostfixTemplateDescriptor implements HasToJson {
+- String _name;
+-
+- String _key;
+-
+- String _example;
+-
+- /**
+- * The template name, shown in the UI.
+- */
+- String get name =3D> _name;
+-
+- /**
+- * The template name, shown in the UI.
+- */
+- void set name(String value) {
+- assert(value !=3D null);
+- this._name =3D value;
+- }
+-
+- /**
+- * The unique template key, not shown in the UI.
+- */
+- String get key =3D> _key;
+-
+- /**
+- * The unique template key, not shown in the UI.
+- */
+- void set key(String value) {
+- assert(value !=3D null);
+- this._key =3D value;
+- }
+-
+- /**
+- * A short example of the transformation performed when the template is
+- * applied.
+- */
+- String get example =3D> _example;
+-
+- /**
+- * A short example of the transformation performed when the template is
+- * applied.
+- */
+- void set example(String value) {
+- assert(value !=3D null);
+- this._example =3D value;
+- }
+-
+- PostfixTemplateDescriptor(String name, String key, String example) {
+- this.name =3D name;
+- this.key =3D key;
+- this.example =3D example;
+- }
+-
+- factory PostfixTemplateDescriptor.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String name;
+- if (json.containsKey("name")) {
+- name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "name");
+- }
+- String key;
+- if (json.containsKey("key")) {
+- key =3D jsonDecoder.decodeString(jsonPath + ".key", json["key"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "key");
+- }
+- String example;
+- if (json.containsKey("example")) {
+- example =3D
+- jsonDecoder.decodeString(jsonPath + ".example", json["example=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "example");
+- }
+- return new PostfixTemplateDescriptor(name, key, example);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "PostfixTemplateDescriptor", j=
son);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["name"] =3D name;
+- result["key"] =3D key;
+- result["example"] =3D example;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is PostfixTemplateDescriptor) {
+- return name =3D=3D other.name && key =3D=3D other.key && example =
=3D=3D other.example;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, key.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, example.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * PubStatus
+- *
+- * {
+- * "isListingPackageDirs": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class PubStatus implements HasToJson {
+- bool _isListingPackageDirs;
+-
+- /**
+- * True if the server is currently running pub to produce a list of pac=
kage
+- * directories.
+- */
+- bool get isListingPackageDirs =3D> _isListingPackageDirs;
+-
+- /**
+- * True if the server is currently running pub to produce a list of pac=
kage
+- * directories.
+- */
+- void set isListingPackageDirs(bool value) {
+- assert(value !=3D null);
+- this._isListingPackageDirs =3D value;
+- }
+-
+- PubStatus(bool isListingPackageDirs) {
+- this.isListingPackageDirs =3D isListingPackageDirs;
+- }
+-
+- factory PubStatus.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool isListingPackageDirs;
+- if (json.containsKey("isListingPackageDirs")) {
+- isListingPackageDirs =3D jsonDecoder.decodeBool(
+- jsonPath + ".isListingPackageDirs", json["isListingPackageDir=
s"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "isListingPackageDirs");
+- }
+- return new PubStatus(isListingPackageDirs);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "PubStatus", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["isListingPackageDirs"] =3D isListingPackageDirs;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is PubStatus) {
+- return isListingPackageDirs =3D=3D other.isListingPackageDirs;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, isListingPackageDirs.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * RefactoringFeedback
+- *
+- * {
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RefactoringFeedback implements HasToJson {
+- RefactoringFeedback();
+-
+- factory RefactoringFeedback.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json, Map response=
Json) {
+- return refactoringFeedbackFromJson(
+- jsonDecoder, jsonPath, json, responseJson);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is RefactoringFeedback) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * RefactoringOptions
+- *
+- * {
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RefactoringOptions implements HasToJson {
+- RefactoringOptions();
+-
+- factory RefactoringOptions.fromJson(JsonDecoder jsonDecoder, String jso=
nPath,
+- Object json, RefactoringKind kind) {
+- return refactoringOptionsFromJson(jsonDecoder, jsonPath, json, kind);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is RefactoringOptions) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * rename feedback
+- *
+- * {
+- * "offset": int
+- * "length": int
+- * "elementKindName": String
+- * "oldName": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RenameFeedback extends RefactoringFeedback {
+- int _offset;
+-
+- int _length;
+-
+- String _elementKindName;
+-
+- String _oldName;
+-
+- /**
+- * The offset to the beginning of the name selected to be renamed.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset to the beginning of the name selected to be renamed.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * The length of the name selected to be renamed.
+- */
+- int get length =3D> _length;
+-
+- /**
+- * The length of the name selected to be renamed.
+- */
+- void set length(int value) {
+- assert(value !=3D null);
+- this._length =3D value;
+- }
+-
+- /**
+- * The human-readable description of the kind of element being renamed =
(such
+- * as "class" or "function type alias").
+- */
+- String get elementKindName =3D> _elementKindName;
+-
+- /**
+- * The human-readable description of the kind of element being renamed =
(such
+- * as "class" or "function type alias").
+- */
+- void set elementKindName(String value) {
+- assert(value !=3D null);
+- this._elementKindName =3D value;
+- }
+-
+- /**
+- * The old name of the element before the refactoring.
+- */
+- String get oldName =3D> _oldName;
+-
+- /**
+- * The old name of the element before the refactoring.
+- */
+- void set oldName(String value) {
+- assert(value !=3D null);
+- this._oldName =3D value;
+- }
+-
+- RenameFeedback(
+- int offset, int length, String elementKindName, String oldName) {
+- this.offset =3D offset;
+- this.length =3D length;
+- this.elementKindName =3D elementKindName;
+- this.oldName =3D oldName;
+- }
+-
+- factory RenameFeedback.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- int length;
+- if (json.containsKey("length")) {
+- length =3D jsonDecoder.decodeInt(jsonPath + ".length", json["leng=
th"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "length");
+- }
+- String elementKindName;
+- if (json.containsKey("elementKindName")) {
+- elementKindName =3D jsonDecoder.decodeString(
+- jsonPath + ".elementKindName", json["elementKindName"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "elementKindName");
+- }
+- String oldName;
+- if (json.containsKey("oldName")) {
+- oldName =3D
+- jsonDecoder.decodeString(jsonPath + ".oldName", json["oldName=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "oldName");
+- }
+- return new RenameFeedback(offset, length, elementKindName, oldName);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "rename feedback", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["offset"] =3D offset;
+- result["length"] =3D length;
+- result["elementKindName"] =3D elementKindName;
+- result["oldName"] =3D oldName;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is RenameFeedback) {
+- return offset =3D=3D other.offset &&
+- length =3D=3D other.length &&
+- elementKindName =3D=3D other.elementKindName &&
+- oldName =3D=3D other.oldName;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, length.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, elementKindName.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, oldName.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * rename options
+- *
+- * {
+- * "newName": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RenameOptions extends RefactoringOptions {
+- String _newName;
+-
+- /**
+- * The name that the element should have after the refactoring.
+- */
+- String get newName =3D> _newName;
+-
+- /**
+- * The name that the element should have after the refactoring.
+- */
+- void set newName(String value) {
+- assert(value !=3D null);
+- this._newName =3D value;
+- }
+-
+- RenameOptions(String newName) {
+- this.newName =3D newName;
+- }
+-
+- factory RenameOptions.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String newName;
+- if (json.containsKey("newName")) {
+- newName =3D
+- jsonDecoder.decodeString(jsonPath + ".newName", json["newName=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "newName");
+- }
+- return new RenameOptions(newName);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "rename options", json);
+- }
+- }
+-
+- factory RenameOptions.fromRefactoringParams(
+- EditGetRefactoringParams refactoringParams, Request request) {
+- return new RenameOptions.fromJson(
+- new RequestDecoder(request), "options", refactoringParams.options=
);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["newName"] =3D newName;
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is RenameOptions) {
+- return newName =3D=3D other.newName;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, newName.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * RequestError
+- *
+- * {
+- * "code": RequestErrorCode
+- * "message": String
+- * "stackTrace": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RequestError implements HasToJson {
+- RequestErrorCode _code;
+-
+- String _message;
+-
+- String _stackTrace;
+-
+- /**
+- * A code that uniquely identifies the error that occurred.
+- */
+- RequestErrorCode get code =3D> _code;
+-
+- /**
+- * A code that uniquely identifies the error that occurred.
+- */
+- void set code(RequestErrorCode value) {
+- assert(value !=3D null);
+- this._code =3D value;
+- }
+-
+- /**
+- * A short description of the error.
+- */
+- String get message =3D> _message;
+-
+- /**
+- * A short description of the error.
+- */
+- void set message(String value) {
+- assert(value !=3D null);
+- this._message =3D value;
+- }
+-
+- /**
+- * The stack trace associated with processing the request, used for deb=
ugging
+- * the server.
+- */
+- String get stackTrace =3D> _stackTrace;
+-
+- /**
+- * The stack trace associated with processing the request, used for deb=
ugging
+- * the server.
+- */
+- void set stackTrace(String value) {
+- this._stackTrace =3D value;
+- }
+-
+- RequestError(RequestErrorCode code, String message, {String stackTrace}=
) {
+- this.code =3D code;
+- this.message =3D message;
+- this.stackTrace =3D stackTrace;
+- }
+-
+- factory RequestError.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- RequestErrorCode code;
+- if (json.containsKey("code")) {
+- code =3D new RequestErrorCode.fromJson(
+- jsonDecoder, jsonPath + ".code", json["code"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "code");
+- }
+- String message;
+- if (json.containsKey("message")) {
+- message =3D
+- jsonDecoder.decodeString(jsonPath + ".message", json["message=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "message");
+- }
+- String stackTrace;
+- if (json.containsKey("stackTrace")) {
+- stackTrace =3D jsonDecoder.decodeString(
+- jsonPath + ".stackTrace", json["stackTrace"]);
+- }
+- return new RequestError(code, message, stackTrace: stackTrace);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "RequestError", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["code"] =3D code.toJson();
+- result["message"] =3D message;
+- if (stackTrace !=3D null) {
+- result["stackTrace"] =3D stackTrace;
+- }
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is RequestError) {
+- return code =3D=3D other.code &&
+- message =3D=3D other.message &&
+- stackTrace =3D=3D other.stackTrace;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, code.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, message.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, stackTrace.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * RequestErrorCode
+- *
+- * enum {
+- * CONTENT_MODIFIED
+- * DEBUG_PORT_COULD_NOT_BE_OPENED
+- * FILE_NOT_ANALYZED
+- * FORMAT_INVALID_FILE
+- * FORMAT_WITH_ERRORS
+- * GET_ERRORS_INVALID_FILE
+- * GET_IMPORTED_ELEMENTS_INVALID_FILE
+- * GET_KYTHE_ENTRIES_INVALID_FILE
+- * GET_NAVIGATION_INVALID_FILE
+- * GET_REACHABLE_SOURCES_INVALID_FILE
+- * IMPORT_ELEMENTS_INVALID_FILE
+- * INVALID_ANALYSIS_ROOT
+- * INVALID_EXECUTION_CONTEXT
+- * INVALID_FILE_PATH_FORMAT
+- * INVALID_OVERLAY_CHANGE
+- * INVALID_PARAMETER
+- * INVALID_REQUEST
+- * ORGANIZE_DIRECTIVES_ERROR
+- * REFACTORING_REQUEST_CANCELLED
+- * SERVER_ALREADY_STARTED
+- * SERVER_ERROR
+- * SORT_MEMBERS_INVALID_FILE
+- * SORT_MEMBERS_PARSE_ERRORS
+- * UNANALYZED_PRIORITY_FILES
+- * UNKNOWN_REQUEST
+- * UNKNOWN_SOURCE
+- * UNSUPPORTED_FEATURE
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class RequestErrorCode implements Enum {
+- /**
+- * An "analysis.getErrors" or "analysis.getNavigation" request could no=
t be
+- * satisfied because the content of the file changed before the request=
ed
+- * results could be computed.
+- */
+- static const RequestErrorCode CONTENT_MODIFIED =3D
+- const RequestErrorCode._("CONTENT_MODIFIED");
+-
+- /**
+- * The server was unable to open a port for the diagnostic server.
+- */
+- static const RequestErrorCode DEBUG_PORT_COULD_NOT_BE_OPENED =3D
+- const RequestErrorCode._("DEBUG_PORT_COULD_NOT_BE_OPENED");
+-
+- /**
+- * A request specified a FilePath which does not match a file in an ana=
lysis
+- * root, or the requested operation is not available for the file.
+- */
+- static const RequestErrorCode FILE_NOT_ANALYZED =3D
+- const RequestErrorCode._("FILE_NOT_ANALYZED");
+-
+- /**
+- * An "edit.format" request specified a FilePath which does not match a=
Dart
+- * file in an analysis root.
+- */
+- static const RequestErrorCode FORMAT_INVALID_FILE =3D
+- const RequestErrorCode._("FORMAT_INVALID_FILE");
+-
+- /**
+- * An "edit.format" request specified a file that contains syntax error=
s.
+- */
+- static const RequestErrorCode FORMAT_WITH_ERRORS =3D
+- const RequestErrorCode._("FORMAT_WITH_ERRORS");
+-
+- /**
+- * An "analysis.getErrors" request specified a FilePath which does not =
match
+- * a file currently subject to analysis.
+- */
+- static const RequestErrorCode GET_ERRORS_INVALID_FILE =3D
+- const RequestErrorCode._("GET_ERRORS_INVALID_FILE");
+-
+- /**
+- * An "analysis.getImportedElements" request specified a FilePath that =
does
+- * not match a file currently subject to analysis.
+- */
+- static const RequestErrorCode GET_IMPORTED_ELEMENTS_INVALID_FILE =3D
+- const RequestErrorCode._("GET_IMPORTED_ELEMENTS_INVALID_FILE");
+-
+- /**
+- * An "analysis.getKytheEntries" request specified a FilePath that does=
not
+- * match a file that is currently subject to analysis.
+- */
+- static const RequestErrorCode GET_KYTHE_ENTRIES_INVALID_FILE =3D
+- const RequestErrorCode._("GET_KYTHE_ENTRIES_INVALID_FILE");
+-
+- /**
+- * An "analysis.getNavigation" request specified a FilePath which does =
not
+- * match a file currently subject to analysis.
+- */
+- static const RequestErrorCode GET_NAVIGATION_INVALID_FILE =3D
+- const RequestErrorCode._("GET_NAVIGATION_INVALID_FILE");
+-
+- /**
+- * An "analysis.getReachableSources" request specified a FilePath which=
does
+- * not match a file currently subject to analysis.
+- */
+- static const RequestErrorCode GET_REACHABLE_SOURCES_INVALID_FILE =3D
+- const RequestErrorCode._("GET_REACHABLE_SOURCES_INVALID_FILE");
+-
+- /**
+- * An "edit.importElements" request specified a FilePath that does not =
match
+- * a file currently subject to analysis.
+- */
+- static const RequestErrorCode IMPORT_ELEMENTS_INVALID_FILE =3D
+- const RequestErrorCode._("IMPORT_ELEMENTS_INVALID_FILE");
+-
+- /**
+- * A path passed as an argument to a request (such as analysis.reanalyz=
e) is
+- * required to be an analysis root, but isn't.
+- */
+- static const RequestErrorCode INVALID_ANALYSIS_ROOT =3D
+- const RequestErrorCode._("INVALID_ANALYSIS_ROOT");
+-
+- /**
+- * The context root used to create an execution context does not exist.
+- */
+- static const RequestErrorCode INVALID_EXECUTION_CONTEXT =3D
+- const RequestErrorCode._("INVALID_EXECUTION_CONTEXT");
+-
+- /**
+- * The format of the given file path is invalid, e.g. is not absolute a=
nd
+- * normalized.
+- */
+- static const RequestErrorCode INVALID_FILE_PATH_FORMAT =3D
+- const RequestErrorCode._("INVALID_FILE_PATH_FORMAT");
+-
+- /**
+- * An "analysis.updateContent" request contained a ChangeContentOverlay
+- * object which can't be applied, due to an edit having an offset or le=
ngth
+- * that is out of range.
+- */
+- static const RequestErrorCode INVALID_OVERLAY_CHANGE =3D
+- const RequestErrorCode._("INVALID_OVERLAY_CHANGE");
+-
+- /**
+- * One of the method parameters was invalid.
+- */
+- static const RequestErrorCode INVALID_PARAMETER =3D
+- const RequestErrorCode._("INVALID_PARAMETER");
+-
+- /**
+- * A malformed request was received.
+- */
+- static const RequestErrorCode INVALID_REQUEST =3D
+- const RequestErrorCode._("INVALID_REQUEST");
+-
+- /**
+- * An "edit.organizeDirectives" request specified a Dart file that cann=
ot be
+- * analyzed. The reason is described in the message.
+- */
+- static const RequestErrorCode ORGANIZE_DIRECTIVES_ERROR =3D
+- const RequestErrorCode._("ORGANIZE_DIRECTIVES_ERROR");
+-
+- /**
+- * Another refactoring request was received during processing of this o=
ne.
+- */
+- static const RequestErrorCode REFACTORING_REQUEST_CANCELLED =3D
+- const RequestErrorCode._("REFACTORING_REQUEST_CANCELLED");
+-
+- /**
+- * The analysis server has already been started (and hence won't accept=
new
+- * connections).
+- *
+- * This error is included for future expansion; at present the analysis
+- * server can only speak to one client at a time so this error will nev=
er
+- * occur.
+- */
+- static const RequestErrorCode SERVER_ALREADY_STARTED =3D
+- const RequestErrorCode._("SERVER_ALREADY_STARTED");
+-
+- /**
+- * An internal error occurred in the analysis server. Also see the
+- * server.error notification.
+- */
+- static const RequestErrorCode SERVER_ERROR =3D
+- const RequestErrorCode._("SERVER_ERROR");
+-
+- /**
+- * An "edit.sortMembers" request specified a FilePath which does not ma=
tch a
+- * Dart file in an analysis root.
+- */
+- static const RequestErrorCode SORT_MEMBERS_INVALID_FILE =3D
+- const RequestErrorCode._("SORT_MEMBERS_INVALID_FILE");
+-
+- /**
+- * An "edit.sortMembers" request specified a Dart file that has scan or=
parse
+- * errors.
+- */
+- static const RequestErrorCode SORT_MEMBERS_PARSE_ERRORS =3D
+- const RequestErrorCode._("SORT_MEMBERS_PARSE_ERRORS");
+-
+- /**
+- * An "analysis.setPriorityFiles" request includes one or more files th=
at are
+- * not being analyzed.
+- *
+- * This is a legacy error; it will be removed before the API reaches ve=
rsion
+- * 1.0.
+- */
+- static const RequestErrorCode UNANALYZED_PRIORITY_FILES =3D
+- const RequestErrorCode._("UNANALYZED_PRIORITY_FILES");
+-
+- /**
+- * A request was received which the analysis server does not recognize,=
or
+- * cannot handle in its current configuration.
+- */
+- static const RequestErrorCode UNKNOWN_REQUEST =3D
+- const RequestErrorCode._("UNKNOWN_REQUEST");
+-
+- /**
+- * The analysis server was requested to perform an action on a source t=
hat
+- * does not exist.
+- */
+- static const RequestErrorCode UNKNOWN_SOURCE =3D
+- const RequestErrorCode._("UNKNOWN_SOURCE");
+-
+- /**
+- * The analysis server was requested to perform an action which is not
+- * supported.
+- *
+- * This is a legacy error; it will be removed before the API reaches ve=
rsion
+- * 1.0.
+- */
+- static const RequestErrorCode UNSUPPORTED_FEATURE =3D
+- const RequestErrorCode._("UNSUPPORTED_FEATURE");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<RequestErrorCode> VALUES =3D const <RequestErrorCode>[
+- CONTENT_MODIFIED,
+- DEBUG_PORT_COULD_NOT_BE_OPENED,
+- FILE_NOT_ANALYZED,
+- FORMAT_INVALID_FILE,
+- FORMAT_WITH_ERRORS,
+- GET_ERRORS_INVALID_FILE,
+- GET_IMPORTED_ELEMENTS_INVALID_FILE,
+- GET_KYTHE_ENTRIES_INVALID_FILE,
+- GET_NAVIGATION_INVALID_FILE,
+- GET_REACHABLE_SOURCES_INVALID_FILE,
+- IMPORT_ELEMENTS_INVALID_FILE,
+- INVALID_ANALYSIS_ROOT,
+- INVALID_EXECUTION_CONTEXT,
+- INVALID_FILE_PATH_FORMAT,
+- INVALID_OVERLAY_CHANGE,
+- INVALID_PARAMETER,
+- INVALID_REQUEST,
+- ORGANIZE_DIRECTIVES_ERROR,
+- REFACTORING_REQUEST_CANCELLED,
+- SERVER_ALREADY_STARTED,
+- SERVER_ERROR,
+- SORT_MEMBERS_INVALID_FILE,
+- SORT_MEMBERS_PARSE_ERRORS,
+- UNANALYZED_PRIORITY_FILES,
+- UNKNOWN_REQUEST,
+- UNKNOWN_SOURCE,
+- UNSUPPORTED_FEATURE
+- ];
+-
+- @override
+- final String name;
+-
+- const RequestErrorCode._(this.name);
+-
+- factory RequestErrorCode(String name) {
+- switch (name) {
+- case "CONTENT_MODIFIED":
+- return CONTENT_MODIFIED;
+- case "DEBUG_PORT_COULD_NOT_BE_OPENED":
+- return DEBUG_PORT_COULD_NOT_BE_OPENED;
+- case "FILE_NOT_ANALYZED":
+- return FILE_NOT_ANALYZED;
+- case "FORMAT_INVALID_FILE":
+- return FORMAT_INVALID_FILE;
+- case "FORMAT_WITH_ERRORS":
+- return FORMAT_WITH_ERRORS;
+- case "GET_ERRORS_INVALID_FILE":
+- return GET_ERRORS_INVALID_FILE;
+- case "GET_IMPORTED_ELEMENTS_INVALID_FILE":
+- return GET_IMPORTED_ELEMENTS_INVALID_FILE;
+- case "GET_KYTHE_ENTRIES_INVALID_FILE":
+- return GET_KYTHE_ENTRIES_INVALID_FILE;
+- case "GET_NAVIGATION_INVALID_FILE":
+- return GET_NAVIGATION_INVALID_FILE;
+- case "GET_REACHABLE_SOURCES_INVALID_FILE":
+- return GET_REACHABLE_SOURCES_INVALID_FILE;
+- case "IMPORT_ELEMENTS_INVALID_FILE":
+- return IMPORT_ELEMENTS_INVALID_FILE;
+- case "INVALID_ANALYSIS_ROOT":
+- return INVALID_ANALYSIS_ROOT;
+- case "INVALID_EXECUTION_CONTEXT":
+- return INVALID_EXECUTION_CONTEXT;
+- case "INVALID_FILE_PATH_FORMAT":
+- return INVALID_FILE_PATH_FORMAT;
+- case "INVALID_OVERLAY_CHANGE":
+- return INVALID_OVERLAY_CHANGE;
+- case "INVALID_PARAMETER":
+- return INVALID_PARAMETER;
+- case "INVALID_REQUEST":
+- return INVALID_REQUEST;
+- case "ORGANIZE_DIRECTIVES_ERROR":
+- return ORGANIZE_DIRECTIVES_ERROR;
+- case "REFACTORING_REQUEST_CANCELLED":
+- return REFACTORING_REQUEST_CANCELLED;
+- case "SERVER_ALREADY_STARTED":
+- return SERVER_ALREADY_STARTED;
+- case "SERVER_ERROR":
+- return SERVER_ERROR;
+- case "SORT_MEMBERS_INVALID_FILE":
+- return SORT_MEMBERS_INVALID_FILE;
+- case "SORT_MEMBERS_PARSE_ERRORS":
+- return SORT_MEMBERS_PARSE_ERRORS;
+- case "UNANALYZED_PRIORITY_FILES":
+- return UNANALYZED_PRIORITY_FILES;
+- case "UNKNOWN_REQUEST":
+- return UNKNOWN_REQUEST;
+- case "UNKNOWN_SOURCE":
+- return UNKNOWN_SOURCE;
+- case "UNSUPPORTED_FEATURE":
+- return UNSUPPORTED_FEATURE;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory RequestErrorCode.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new RequestErrorCode(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "RequestErrorCode", json);
+- }
+-
+- @override
+- String toString() =3D> "RequestErrorCode.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * search.findElementReferences params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * "includePotential": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindElementReferencesParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- bool _includePotential;
+-
+- /**
+- * The file containing the declaration of or reference to the element u=
sed to
+- * define the search.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the declaration of or reference to the element u=
sed to
+- * define the search.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset within the file of the declaration of or reference to the
+- * element.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset within the file of the declaration of or reference to the
+- * element.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * True if potential matches are to be included in the results.
+- */
+- bool get includePotential =3D> _includePotential;
+-
+- /**
+- * True if potential matches are to be included in the results.
+- */
+- void set includePotential(bool value) {
+- assert(value !=3D null);
+- this._includePotential =3D value;
+- }
+-
+- SearchFindElementReferencesParams(
+- String file, int offset, bool includePotential) {
+- this.file =3D file;
+- this.offset =3D offset;
+- this.includePotential =3D includePotential;
+- }
+-
+- factory SearchFindElementReferencesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- bool includePotential;
+- if (json.containsKey("includePotential")) {
+- includePotential =3D jsonDecoder.decodeBool(
+- jsonPath + ".includePotential", json["includePotential"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "includePotential");
+- }
+- return new SearchFindElementReferencesParams(
+- file, offset, includePotential);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findElementReferences params", json);
+- }
+- }
+-
+- factory SearchFindElementReferencesParams.fromRequest(Request request) {
+- return new SearchFindElementReferencesParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- result["includePotential"] =3D includePotential;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "search.findElementReferences", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindElementReferencesParams) {
+- return file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- includePotential =3D=3D other.includePotential;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, includePotential.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.findElementReferences result
+- *
+- * {
+- * "id": optional SearchId
+- * "element": optional Element
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindElementReferencesResult implements ResponseResult {
+- String _id;
+-
+- Element _element;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- *
+- * If no element was found at the given location, this field will be ab=
sent,
+- * and no results will be reported via the search.results notification.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- *
+- * If no element was found at the given location, this field will be ab=
sent,
+- * and no results will be reported via the search.results notification.
+- */
+- void set id(String value) {
+- this._id =3D value;
+- }
+-
+- /**
+- * The element referenced or defined at the given offset and whose refe=
rences
+- * will be returned in the search results.
+- *
+- * If no element was found at the given location, this field will be ab=
sent.
+- */
+- Element get element =3D> _element;
+-
+- /**
+- * The element referenced or defined at the given offset and whose refe=
rences
+- * will be returned in the search results.
+- *
+- * If no element was found at the given location, this field will be ab=
sent.
+- */
+- void set element(Element value) {
+- this._element =3D value;
+- }
+-
+- SearchFindElementReferencesResult({String id, Element element}) {
+- this.id =3D id;
+- this.element =3D element;
+- }
+-
+- factory SearchFindElementReferencesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- }
+- Element element;
+- if (json.containsKey("element")) {
+- element =3D new Element.fromJson(
+- jsonDecoder, jsonPath + ".element", json["element"]);
+- }
+- return new SearchFindElementReferencesResult(id: id, element: eleme=
nt);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findElementReferences result", json);
+- }
+- }
+-
+- factory SearchFindElementReferencesResult.fromResponse(Response respons=
e) {
+- return new SearchFindElementReferencesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- if (id !=3D null) {
+- result["id"] =3D id;
+- }
+- if (element !=3D null) {
+- result["element"] =3D element.toJson();
+- }
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindElementReferencesResult) {
+- return id =3D=3D other.id && element =3D=3D other.element;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, element.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.findMemberDeclarations params
+- *
+- * {
+- * "name": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberDeclarationsParams implements RequestParams {
+- String _name;
+-
+- /**
+- * The name of the declarations to be found.
+- */
+- String get name =3D> _name;
+-
+- /**
+- * The name of the declarations to be found.
+- */
+- void set name(String value) {
+- assert(value !=3D null);
+- this._name =3D value;
+- }
+-
+- SearchFindMemberDeclarationsParams(String name) {
+- this.name =3D name;
+- }
+-
+- factory SearchFindMemberDeclarationsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String name;
+- if (json.containsKey("name")) {
+- name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "name");
+- }
+- return new SearchFindMemberDeclarationsParams(name);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findMemberDeclarations params", json);
+- }
+- }
+-
+- factory SearchFindMemberDeclarationsParams.fromRequest(Request request)=
{
+- return new SearchFindMemberDeclarationsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["name"] =3D name;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "search.findMemberDeclarations", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindMemberDeclarationsParams) {
+- return name =3D=3D other.name;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.findMemberDeclarations result
+- *
+- * {
+- * "id": SearchId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberDeclarationsResult implements ResponseResult {
+- String _id;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- SearchFindMemberDeclarationsResult(String id) {
+- this.id =3D id;
+- }
+-
+- factory SearchFindMemberDeclarationsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- return new SearchFindMemberDeclarationsResult(id);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findMemberDeclarations result", json);
+- }
+- }
+-
+- factory SearchFindMemberDeclarationsResult.fromResponse(Response respon=
se) {
+- return new SearchFindMemberDeclarationsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindMemberDeclarationsResult) {
+- return id =3D=3D other.id;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.findMemberReferences params
+- *
+- * {
+- * "name": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberReferencesParams implements RequestParams {
+- String _name;
+-
+- /**
+- * The name of the references to be found.
+- */
+- String get name =3D> _name;
+-
+- /**
+- * The name of the references to be found.
+- */
+- void set name(String value) {
+- assert(value !=3D null);
+- this._name =3D value;
+- }
+-
+- SearchFindMemberReferencesParams(String name) {
+- this.name =3D name;
+- }
+-
+- factory SearchFindMemberReferencesParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String name;
+- if (json.containsKey("name")) {
+- name =3D jsonDecoder.decodeString(jsonPath + ".name", json["name"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "name");
+- }
+- return new SearchFindMemberReferencesParams(name);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findMemberReferences params", json);
+- }
+- }
+-
+- factory SearchFindMemberReferencesParams.fromRequest(Request request) {
+- return new SearchFindMemberReferencesParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["name"] =3D name;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "search.findMemberReferences", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindMemberReferencesParams) {
+- return name =3D=3D other.name;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, name.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.findMemberReferences result
+- *
+- * {
+- * "id": SearchId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindMemberReferencesResult implements ResponseResult {
+- String _id;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- SearchFindMemberReferencesResult(String id) {
+- this.id =3D id;
+- }
+-
+- factory SearchFindMemberReferencesResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- return new SearchFindMemberReferencesResult(id);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findMemberReferences result", json);
+- }
+- }
+-
+- factory SearchFindMemberReferencesResult.fromResponse(Response response=
) {
+- return new SearchFindMemberReferencesResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindMemberReferencesResult) {
+- return id =3D=3D other.id;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.findTopLevelDeclarations params
+- *
+- * {
+- * "pattern": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindTopLevelDeclarationsParams implements RequestParams {
+- String _pattern;
+-
+- /**
+- * The regular expression used to match the names of the declarations t=
o be
+- * found.
+- */
+- String get pattern =3D> _pattern;
+-
+- /**
+- * The regular expression used to match the names of the declarations t=
o be
+- * found.
+- */
+- void set pattern(String value) {
+- assert(value !=3D null);
+- this._pattern =3D value;
+- }
+-
+- SearchFindTopLevelDeclarationsParams(String pattern) {
+- this.pattern =3D pattern;
+- }
+-
+- factory SearchFindTopLevelDeclarationsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String pattern;
+- if (json.containsKey("pattern")) {
+- pattern =3D
+- jsonDecoder.decodeString(jsonPath + ".pattern", json["pattern=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "pattern");
+- }
+- return new SearchFindTopLevelDeclarationsParams(pattern);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findTopLevelDeclarations params", json);
+- }
+- }
+-
+- factory SearchFindTopLevelDeclarationsParams.fromRequest(Request reques=
t) {
+- return new SearchFindTopLevelDeclarationsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["pattern"] =3D pattern;
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "search.findTopLevelDeclarations", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindTopLevelDeclarationsParams) {
+- return pattern =3D=3D other.pattern;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, pattern.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.findTopLevelDeclarations result
+- *
+- * {
+- * "id": SearchId
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchFindTopLevelDeclarationsResult implements ResponseResult {
+- String _id;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The identifier used to associate results with this search request.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- SearchFindTopLevelDeclarationsResult(String id) {
+- this.id =3D id;
+- }
+-
+- factory SearchFindTopLevelDeclarationsResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- return new SearchFindTopLevelDeclarationsResult(id);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.findTopLevelDeclarations result", json);
+- }
+- }
+-
+- factory SearchFindTopLevelDeclarationsResult.fromResponse(Response resp=
onse) {
+- return new SearchFindTopLevelDeclarationsResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchFindTopLevelDeclarationsResult) {
+- return id =3D=3D other.id;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.getTypeHierarchy params
+- *
+- * {
+- * "file": FilePath
+- * "offset": int
+- * "superOnly": optional bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchGetTypeHierarchyParams implements RequestParams {
+- String _file;
+-
+- int _offset;
+-
+- bool _superOnly;
+-
+- /**
+- * The file containing the declaration or reference to the type for whi=
ch a
+- * hierarchy is being requested.
+- */
+- String get file =3D> _file;
+-
+- /**
+- * The file containing the declaration or reference to the type for whi=
ch a
+- * hierarchy is being requested.
+- */
+- void set file(String value) {
+- assert(value !=3D null);
+- this._file =3D value;
+- }
+-
+- /**
+- * The offset of the name of the type within the file.
+- */
+- int get offset =3D> _offset;
+-
+- /**
+- * The offset of the name of the type within the file.
+- */
+- void set offset(int value) {
+- assert(value !=3D null);
+- this._offset =3D value;
+- }
+-
+- /**
+- * True if the client is only requesting superclasses and interfaces
+- * hierarchy.
+- */
+- bool get superOnly =3D> _superOnly;
+-
+- /**
+- * True if the client is only requesting superclasses and interfaces
+- * hierarchy.
+- */
+- void set superOnly(bool value) {
+- this._superOnly =3D value;
+- }
+-
+- SearchGetTypeHierarchyParams(String file, int offset, {bool superOnly})=
{
+- this.file =3D file;
+- this.offset =3D offset;
+- this.superOnly =3D superOnly;
+- }
+-
+- factory SearchGetTypeHierarchyParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String file;
+- if (json.containsKey("file")) {
+- file =3D jsonDecoder.decodeString(jsonPath + ".file", json["file"=
]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "file");
+- }
+- int offset;
+- if (json.containsKey("offset")) {
+- offset =3D jsonDecoder.decodeInt(jsonPath + ".offset", json["offs=
et"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "offset");
+- }
+- bool superOnly;
+- if (json.containsKey("superOnly")) {
+- superOnly =3D
+- jsonDecoder.decodeBool(jsonPath + ".superOnly", json["superOn=
ly"]);
+- }
+- return new SearchGetTypeHierarchyParams(file, offset,
+- superOnly: superOnly);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.getTypeHierarchy params", json);
+- }
+- }
+-
+- factory SearchGetTypeHierarchyParams.fromRequest(Request request) {
+- return new SearchGetTypeHierarchyParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["file"] =3D file;
+- result["offset"] =3D offset;
+- if (superOnly !=3D null) {
+- result["superOnly"] =3D superOnly;
+- }
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "search.getTypeHierarchy", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchGetTypeHierarchyParams) {
+- return file =3D=3D other.file &&
+- offset =3D=3D other.offset &&
+- superOnly =3D=3D other.superOnly;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, file.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, offset.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, superOnly.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * search.getTypeHierarchy result
+- *
+- * {
+- * "hierarchyItems": optional List<TypeHierarchyItem>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchGetTypeHierarchyResult implements ResponseResult {
+- List<TypeHierarchyItem> _hierarchyItems;
+-
+- /**
+- * A list of the types in the requested hierarchy. The first element of=
the
+- * list is the item representing the type for which the hierarchy was
+- * requested. The index of other elements of the list is unspecified, b=
ut
+- * correspond to the integers used to reference supertype and subtype i=
tems
+- * within the items.
+- *
+- * This field will be absent if the code at the given file and offset d=
oes
+- * not represent a type, or if the file has not been sufficiently analy=
zed to
+- * allow a type hierarchy to be produced.
+- */
+- List<TypeHierarchyItem> get hierarchyItems =3D> _hierarchyItems;
+-
+- /**
+- * A list of the types in the requested hierarchy. The first element of=
the
+- * list is the item representing the type for which the hierarchy was
+- * requested. The index of other elements of the list is unspecified, b=
ut
+- * correspond to the integers used to reference supertype and subtype i=
tems
+- * within the items.
+- *
+- * This field will be absent if the code at the given file and offset d=
oes
+- * not represent a type, or if the file has not been sufficiently analy=
zed to
+- * allow a type hierarchy to be produced.
+- */
+- void set hierarchyItems(List<TypeHierarchyItem> value) {
+- this._hierarchyItems =3D value;
+- }
+-
+- SearchGetTypeHierarchyResult({List<TypeHierarchyItem> hierarchyItems}) {
+- this.hierarchyItems =3D hierarchyItems;
+- }
+-
+- factory SearchGetTypeHierarchyResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<TypeHierarchyItem> hierarchyItems;
+- if (json.containsKey("hierarchyItems")) {
+- hierarchyItems =3D jsonDecoder.decodeList(
+- jsonPath + ".hierarchyItems",
+- json["hierarchyItems"],
+- (String jsonPath, Object json) =3D>
+- new TypeHierarchyItem.fromJson(jsonDecoder, jsonPath, jso=
n));
+- }
+- return new SearchGetTypeHierarchyResult(hierarchyItems: hierarchyIt=
ems);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "search.getTypeHierarchy result", json);
+- }
+- }
+-
+- factory SearchGetTypeHierarchyResult.fromResponse(Response response) {
+- return new SearchGetTypeHierarchyResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- if (hierarchyItems !=3D null) {
+- result["hierarchyItems"] =3D hierarchyItems
+- .map((TypeHierarchyItem value) =3D> value.toJson())
+- .toList();
+- }
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchGetTypeHierarchyResult) {
+- return listEqual(hierarchyItems, other.hierarchyItems,
+- (TypeHierarchyItem a, TypeHierarchyItem b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, hierarchyItems.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * SearchResult
+- *
+- * {
+- * "location": Location
+- * "kind": SearchResultKind
+- * "isPotential": bool
+- * "path": List<Element>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchResult implements HasToJson {
+- Location _location;
+-
+- SearchResultKind _kind;
+-
+- bool _isPotential;
+-
+- List<Element> _path;
+-
+- /**
+- * The location of the code that matched the search criteria.
+- */
+- Location get location =3D> _location;
+-
+- /**
+- * The location of the code that matched the search criteria.
+- */
+- void set location(Location value) {
+- assert(value !=3D null);
+- this._location =3D value;
+- }
+-
+- /**
+- * The kind of element that was found or the kind of reference that was
+- * found.
+- */
+- SearchResultKind get kind =3D> _kind;
+-
+- /**
+- * The kind of element that was found or the kind of reference that was
+- * found.
+- */
+- void set kind(SearchResultKind value) {
+- assert(value !=3D null);
+- this._kind =3D value;
+- }
+-
+- /**
+- * True if the result is a potential match but cannot be confirmed to b=
e a
+- * match. For example, if all references to a method m defined in some =
class
+- * were requested, and a reference to a method m from an unknown class =
were
+- * found, it would be marked as being a potential match.
+- */
+- bool get isPotential =3D> _isPotential;
+-
+- /**
+- * True if the result is a potential match but cannot be confirmed to b=
e a
+- * match. For example, if all references to a method m defined in some =
class
+- * were requested, and a reference to a method m from an unknown class =
were
+- * found, it would be marked as being a potential match.
+- */
+- void set isPotential(bool value) {
+- assert(value !=3D null);
+- this._isPotential =3D value;
+- }
+-
+- /**
+- * The elements that contain the result, starting with the most immedia=
tely
+- * enclosing ancestor and ending with the library.
+- */
+- List<Element> get path =3D> _path;
+-
+- /**
+- * The elements that contain the result, starting with the most immedia=
tely
+- * enclosing ancestor and ending with the library.
+- */
+- void set path(List<Element> value) {
+- assert(value !=3D null);
+- this._path =3D value;
+- }
+-
+- SearchResult(Location location, SearchResultKind kind, bool isPotential,
+- List<Element> path) {
+- this.location =3D location;
+- this.kind =3D kind;
+- this.isPotential =3D isPotential;
+- this.path =3D path;
+- }
+-
+- factory SearchResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- Location location;
+- if (json.containsKey("location")) {
+- location =3D new Location.fromJson(
+- jsonDecoder, jsonPath + ".location", json["location"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "location");
+- }
+- SearchResultKind kind;
+- if (json.containsKey("kind")) {
+- kind =3D new SearchResultKind.fromJson(
+- jsonDecoder, jsonPath + ".kind", json["kind"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "kind");
+- }
+- bool isPotential;
+- if (json.containsKey("isPotential")) {
+- isPotential =3D jsonDecoder.decodeBool(
+- jsonPath + ".isPotential", json["isPotential"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "isPotential");
+- }
+- List<Element> path;
+- if (json.containsKey("path")) {
+- path =3D jsonDecoder.decodeList(
+- jsonPath + ".path",
+- json["path"],
+- (String jsonPath, Object json) =3D>
+- new Element.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "path");
+- }
+- return new SearchResult(location, kind, isPotential, path);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "SearchResult", json);
+- }
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["location"] =3D location.toJson();
+- result["kind"] =3D kind.toJson();
+- result["isPotential"] =3D isPotential;
+- result["path"] =3D path.map((Element value) =3D> value.toJson()).toLi=
st();
+- return result;
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchResult) {
+- return location =3D=3D other.location &&
+- kind =3D=3D other.kind &&
+- isPotential =3D=3D other.isPotential &&
+- listEqual(path, other.path, (Element a, Element b) =3D> a =3D=
=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, location.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, kind.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, isPotential.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, path.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * SearchResultKind
+- *
+- * enum {
+- * DECLARATION
+- * INVOCATION
+- * READ
+- * READ_WRITE
+- * REFERENCE
+- * UNKNOWN
+- * WRITE
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchResultKind implements Enum {
+- /**
+- * The declaration of an element.
+- */
+- static const SearchResultKind DECLARATION =3D
+- const SearchResultKind._("DECLARATION");
+-
+- /**
+- * The invocation of a function or method.
+- */
+- static const SearchResultKind INVOCATION =3D
+- const SearchResultKind._("INVOCATION");
+-
+- /**
+- * A reference to a field, parameter or variable where it is being read.
+- */
+- static const SearchResultKind READ =3D const SearchResultKind._("READ");
+-
+- /**
+- * A reference to a field, parameter or variable where it is being read=
and
+- * written.
+- */
+- static const SearchResultKind READ_WRITE =3D
+- const SearchResultKind._("READ_WRITE");
+-
+- /**
+- * A reference to an element.
+- */
+- static const SearchResultKind REFERENCE =3D
+- const SearchResultKind._("REFERENCE");
+-
+- /**
+- * Some other kind of search result.
+- */
+- static const SearchResultKind UNKNOWN =3D const SearchResultKind._("UNK=
NOWN");
+-
+- /**
+- * A reference to a field, parameter or variable where it is being writ=
ten.
+- */
+- static const SearchResultKind WRITE =3D const SearchResultKind._("WRITE=
");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<SearchResultKind> VALUES =3D const <SearchResultKind>[
+- DECLARATION,
+- INVOCATION,
+- READ,
+- READ_WRITE,
+- REFERENCE,
+- UNKNOWN,
+- WRITE
+- ];
+-
+- @override
+- final String name;
+-
+- const SearchResultKind._(this.name);
+-
+- factory SearchResultKind(String name) {
+- switch (name) {
+- case "DECLARATION":
+- return DECLARATION;
+- case "INVOCATION":
+- return INVOCATION;
+- case "READ":
+- return READ;
+- case "READ_WRITE":
+- return READ_WRITE;
+- case "REFERENCE":
+- return REFERENCE;
+- case "UNKNOWN":
+- return UNKNOWN;
+- case "WRITE":
+- return WRITE;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory SearchResultKind.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new SearchResultKind(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "SearchResultKind", json);
+- }
+-
+- @override
+- String toString() =3D> "SearchResultKind.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * search.results params
+- *
+- * {
+- * "id": SearchId
+- * "results": List<SearchResult>
+- * "isLast": bool
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class SearchResultsParams implements HasToJson {
+- String _id;
+-
+- List<SearchResult> _results;
+-
+- bool _isLast;
+-
+- /**
+- * The id associated with the search.
+- */
+- String get id =3D> _id;
+-
+- /**
+- * The id associated with the search.
+- */
+- void set id(String value) {
+- assert(value !=3D null);
+- this._id =3D value;
+- }
+-
+- /**
+- * The search results being reported.
+- */
+- List<SearchResult> get results =3D> _results;
+-
+- /**
+- * The search results being reported.
+- */
+- void set results(List<SearchResult> value) {
+- assert(value !=3D null);
+- this._results =3D value;
+- }
+-
+- /**
+- * True if this is that last set of results that will be returned for t=
he
+- * indicated search.
+- */
+- bool get isLast =3D> _isLast;
+-
+- /**
+- * True if this is that last set of results that will be returned for t=
he
+- * indicated search.
+- */
+- void set isLast(bool value) {
+- assert(value !=3D null);
+- this._isLast =3D value;
+- }
+-
+- SearchResultsParams(String id, List<SearchResult> results, bool isLast)=
{
+- this.id =3D id;
+- this.results =3D results;
+- this.isLast =3D isLast;
+- }
+-
+- factory SearchResultsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String id;
+- if (json.containsKey("id")) {
+- id =3D jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "id");
+- }
+- List<SearchResult> results;
+- if (json.containsKey("results")) {
+- results =3D jsonDecoder.decodeList(
+- jsonPath + ".results",
+- json["results"],
+- (String jsonPath, Object json) =3D>
+- new SearchResult.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "results");
+- }
+- bool isLast;
+- if (json.containsKey("isLast")) {
+- isLast =3D jsonDecoder.decodeBool(jsonPath + ".isLast", json["isL=
ast"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "isLast");
+- }
+- return new SearchResultsParams(id, results, isLast);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "search.results params", json);
+- }
+- }
+-
+- factory SearchResultsParams.fromNotification(Notification notification)=
{
+- return new SearchResultsParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["id"] =3D id;
+- result["results"] =3D
+- results.map((SearchResult value) =3D> value.toJson()).toList();
+- result["isLast"] =3D isLast;
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("search.results", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is SearchResultsParams) {
+- return id =3D=3D other.id &&
+- listEqual(results, other.results,
+- (SearchResult a, SearchResult b) =3D> a =3D=3D b) &&
+- isLast =3D=3D other.isLast;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, id.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, results.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, isLast.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * server.connected params
+- *
+- * {
+- * "version": String
+- * "pid": int
+- * "sessionId": optional String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerConnectedParams implements HasToJson {
+- String _version;
+-
+- int _pid;
+-
+- String _sessionId;
+-
+- /**
+- * The version number of the analysis server.
+- */
+- String get version =3D> _version;
+-
+- /**
+- * The version number of the analysis server.
+- */
+- void set version(String value) {
+- assert(value !=3D null);
+- this._version =3D value;
+- }
+-
+- /**
+- * The process id of the analysis server process.
+- */
+- int get pid =3D> _pid;
+-
+- /**
+- * The process id of the analysis server process.
+- */
+- void set pid(int value) {
+- assert(value !=3D null);
+- this._pid =3D value;
+- }
+-
+- /**
+- * The session id for this session.
+- */
+- String get sessionId =3D> _sessionId;
+-
+- /**
+- * The session id for this session.
+- */
+- void set sessionId(String value) {
+- this._sessionId =3D value;
+- }
+-
+- ServerConnectedParams(String version, int pid, {String sessionId}) {
+- this.version =3D version;
+- this.pid =3D pid;
+- this.sessionId =3D sessionId;
+- }
+-
+- factory ServerConnectedParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String version;
+- if (json.containsKey("version")) {
+- version =3D
+- jsonDecoder.decodeString(jsonPath + ".version", json["version=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "version");
+- }
+- int pid;
+- if (json.containsKey("pid")) {
+- pid =3D jsonDecoder.decodeInt(jsonPath + ".pid", json["pid"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "pid");
+- }
+- String sessionId;
+- if (json.containsKey("sessionId")) {
+- sessionId =3D jsonDecoder.decodeString(
+- jsonPath + ".sessionId", json["sessionId"]);
+- }
+- return new ServerConnectedParams(version, pid, sessionId: sessionId=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "server.connected params", jso=
n);
+- }
+- }
+-
+- factory ServerConnectedParams.fromNotification(Notification notificatio=
n) {
+- return new ServerConnectedParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["version"] =3D version;
+- result["pid"] =3D pid;
+- if (sessionId !=3D null) {
+- result["sessionId"] =3D sessionId;
+- }
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("server.connected", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerConnectedParams) {
+- return version =3D=3D other.version &&
+- pid =3D=3D other.pid &&
+- sessionId =3D=3D other.sessionId;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, version.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, pid.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, sessionId.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * server.error params
+- *
+- * {
+- * "isFatal": bool
+- * "message": String
+- * "stackTrace": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerErrorParams implements HasToJson {
+- bool _isFatal;
+-
+- String _message;
+-
+- String _stackTrace;
+-
+- /**
+- * True if the error is a fatal error, meaning that the server will shu=
tdown
+- * automatically after sending this notification.
+- */
+- bool get isFatal =3D> _isFatal;
+-
+- /**
+- * True if the error is a fatal error, meaning that the server will shu=
tdown
+- * automatically after sending this notification.
+- */
+- void set isFatal(bool value) {
+- assert(value !=3D null);
+- this._isFatal =3D value;
+- }
+-
+- /**
+- * The error message indicating what kind of error was encountered.
+- */
+- String get message =3D> _message;
+-
+- /**
+- * The error message indicating what kind of error was encountered.
+- */
+- void set message(String value) {
+- assert(value !=3D null);
+- this._message =3D value;
+- }
+-
+- /**
+- * The stack trace associated with the generation of the error, used for
+- * debugging the server.
+- */
+- String get stackTrace =3D> _stackTrace;
+-
+- /**
+- * The stack trace associated with the generation of the error, used for
+- * debugging the server.
+- */
+- void set stackTrace(String value) {
+- assert(value !=3D null);
+- this._stackTrace =3D value;
+- }
+-
+- ServerErrorParams(bool isFatal, String message, String stackTrace) {
+- this.isFatal =3D isFatal;
+- this.message =3D message;
+- this.stackTrace =3D stackTrace;
+- }
+-
+- factory ServerErrorParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- bool isFatal;
+- if (json.containsKey("isFatal")) {
+- isFatal =3D
+- jsonDecoder.decodeBool(jsonPath + ".isFatal", json["isFatal"]=
);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "isFatal");
+- }
+- String message;
+- if (json.containsKey("message")) {
+- message =3D
+- jsonDecoder.decodeString(jsonPath + ".message", json["message=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "message");
+- }
+- String stackTrace;
+- if (json.containsKey("stackTrace")) {
+- stackTrace =3D jsonDecoder.decodeString(
+- jsonPath + ".stackTrace", json["stackTrace"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "stackTrace");
+- }
+- return new ServerErrorParams(isFatal, message, stackTrace);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "server.error params", json);
+- }
+- }
+-
+- factory ServerErrorParams.fromNotification(Notification notification) {
+- return new ServerErrorParams.fromJson(
+- new ResponseDecoder(null), "params", notification.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["isFatal"] =3D isFatal;
+- result["message"] =3D message;
+- result["stackTrace"] =3D stackTrace;
+- return result;
+- }
+-
+- Notification toNotification() {
+- return new Notification("server.error", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerErrorParams) {
+- return isFatal =3D=3D other.isFatal &&
+- message =3D=3D other.message &&
+- stackTrace =3D=3D other.stackTrace;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, isFatal.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, message.hashCode);
+- hash =3D JenkinsSmiHash.combine(hash, stackTrace.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * server.getVersion params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerGetVersionParams implements RequestParams {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "server.getVersion", null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerGetVersionParams) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 55877452;
+- }
+-}
+-
+-/**
+- * server.getVersion result
+- *
+- * {
+- * "version": String
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerGetVersionResult implements ResponseResult {
+- String _version;
+-
+- /**
+- * The version number of the analysis server.
+- */
+- String get version =3D> _version;
+-
+- /**
+- * The version number of the analysis server.
+- */
+- void set version(String value) {
+- assert(value !=3D null);
+- this._version =3D value;
+- }
+-
+- ServerGetVersionResult(String version) {
+- this.version =3D version;
+- }
+-
+- factory ServerGetVersionResult.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- String version;
+- if (json.containsKey("version")) {
+- version =3D
+- jsonDecoder.decodeString(jsonPath + ".version", json["version=
"]);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "version");
+- }
+- return new ServerGetVersionResult(version);
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "server.getVersion result", js=
on);
+- }
+- }
+-
+- factory ServerGetVersionResult.fromResponse(Response response) {
+- return new ServerGetVersionResult.fromJson(
+- new ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.=
id)),
+- "result",
+- response.result);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["version"] =3D version;
+- return result;
+- }
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerGetVersionResult) {
+- return version =3D=3D other.version;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, version.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * ServerService
+- *
+- * enum {
+- * STATUS
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerService implements Enum {
+- static const ServerService STATUS =3D const ServerService._("STATUS");
+-
+- /**
+- * A list containing all of the enum values that are defined.
+- */
+- static const List<ServerService> VALUES =3D const <ServerService>[STATU=
S];
+-
+- @override
+- final String name;
+-
+- const ServerService._(this.name);
+-
+- factory ServerService(String name) {
+- switch (name) {
+- case "STATUS":
+- return STATUS;
+- }
+- throw new Exception('Illegal enum value: $name');
+- }
+-
+- factory ServerService.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json is String) {
+- try {
+- return new ServerService(json);
+- } catch (_) {
+- // Fall through
+- }
+- }
+- throw jsonDecoder.mismatch(jsonPath, "ServerService", json);
+- }
+-
+- @override
+- String toString() =3D> "ServerService.$name";
+-
+- String toJson() =3D> name;
+-}
+-
+-/**
+- * server.setSubscriptions params
+- *
+- * {
+- * "subscriptions": List<ServerService>
+- * }
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerSetSubscriptionsParams implements RequestParams {
+- List<ServerService> _subscriptions;
+-
+- /**
+- * A list of the services being subscribed to.
+- */
+- List<ServerService> get subscriptions =3D> _subscriptions;
+-
+- /**
+- * A list of the services being subscribed to.
+- */
+- void set subscriptions(List<ServerService> value) {
+- assert(value !=3D null);
+- this._subscriptions =3D value;
+- }
+-
+- ServerSetSubscriptionsParams(List<ServerService> subscriptions) {
+- this.subscriptions =3D subscriptions;
+- }
+-
+- factory ServerSetSubscriptionsParams.fromJson(
+- JsonDecoder jsonDecoder, String jsonPath, Object json) {
+- if (json =3D=3D null) {
+- json =3D {};
+- }
+- if (json is Map) {
+- List<ServerService> subscriptions;
+- if (json.containsKey("subscriptions")) {
+- subscriptions =3D jsonDecoder.decodeList(
+- jsonPath + ".subscriptions",
+- json["subscriptions"],
+- (String jsonPath, Object json) =3D>
+- new ServerService.fromJson(jsonDecoder, jsonPath, json));
+- } else {
+- throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+- }
+- return new ServerSetSubscriptionsParams(subscriptions);
+- } else {
+- throw jsonDecoder.mismatch(
+- jsonPath, "server.setSubscriptions params", json);
+- }
+- }
+-
+- factory ServerSetSubscriptionsParams.fromRequest(Request request) {
+- return new ServerSetSubscriptionsParams.fromJson(
+- new RequestDecoder(request), "params", request.params);
+- }
+-
+- @override
+- Map<String, dynamic> toJson() {
+- Map<String, dynamic> result =3D {};
+- result["subscriptions"] =3D
+- subscriptions.map((ServerService value) =3D> value.toJson()).toLi=
st();
+- return result;
+- }
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "server.setSubscriptions", toJson());
+- }
+-
+- @override
+- String toString() =3D> JSON.encode(toJson());
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerSetSubscriptionsParams) {
+- return listEqual(subscriptions, other.subscriptions,
+- (ServerService a, ServerService b) =3D> a =3D=3D b);
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- int hash =3D 0;
+- hash =3D JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+- return JenkinsSmiHash.finish(hash);
+- }
+-}
+-
+-/**
+- * server.setSubscriptions result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerSetSubscriptionsResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerSetSubscriptionsResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 748820900;
+- }
+-}
+-
+-/**
+- * server.shutdown params
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerShutdownParams implements RequestParams {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Request toRequest(String id) {
+- return new Request(id, "server.shutdown", null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerShutdownParams) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 366630911;
+- }
+-}
+-
+-/**
+- * server.shutdown result
+- *
+- * Clients may not extend, implement or mix-in this class.
+- */
+-class ServerShutdownResult implements ResponseResult {
+- @override
+- Map<String, dynamic> toJson() =3D> <String, dynamic>{};
+-
+- @override
+- Response toResponse(String id) {
+- return new Response(id, result: null);
+- }
+-
+- @override
+- bool operator =3D=3D(other) {
+- if (other is ServerShutdownResult) {
+- return true;
+- }
+- return false;
+- }
+-
+- @override
+- int get hashCode {
+- return 193626532;
+- }
+-}
+-
+-/**
+- * server.status params
+- *
+- * {
+- * "analysis": optional AnalysisStatus
+- * "pub": optional PubStatus
+- * }
+- *
+- * Clients may not extend, implement o