Version 1.8.0-dev.1.0

svn merge -r 41141:41254 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@41257 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/docs/language/dart.sty b/docs/language/dart.sty
index 9f4db5e..7da3c7b 100644
--- a/docs/language/dart.sty
+++ b/docs/language/dart.sty
@@ -113,3 +113,39 @@
 }{
   %\end{verbatim}
 }
+
+
+% ----------------------------------------------------------------------
+% Support for hash valued Location Markers
+
+% very small font, to enable 33 char hash values in the margin
+\makeatletter
+\ifcase \@ptsize \relax% 10pt
+  \newcommand{\miniscule}{\@setfontsize\miniscule{2}{3}}% \tiny: 5/6
+\or% 11pt
+  \newcommand{\miniscule}{\@setfontsize\miniscule{3}{4}}% \tiny: 6/7
+\or% 12pt
+  \newcommand{\miniscule}{\@setfontsize\miniscule{3}{4}}% \tiny: 6/7
+\fi
+\makeatother
+
+% white: location markers should not create visual noise
+\definecolor{LMdim}{gray}{1.0}
+
+% insert location marker showing hash value of following paragraph
+\newcommand{\LMHash}[1]{%
+  \hspace{0pt}\marginpar{\raisebox{0.5ex}{\miniscule{\color{LMdim}#1}}}}
+
+% support convenient renewcommand
+\let\OriginalLMHash\LMHash
+
+% define a label, and show the associated logical location marker
+\newcommand{\LMLabel}[1]{%
+  \vspace{-\baselineskip}\hspace{0pt}\OriginalLMHash{\raisebox{10ex}{sec:#1}}%
+  \label{#1}}
+
+% dummy version of LMHash, always shows the same arbitrary hash value
+\renewcommand{\LMHash}[1]{\OriginalLMHash{ba01b04d58c8c4e259764498f823cc65}}
+
+% ----------------------------------------------------------------------
+
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index 2621476..1b22fd8 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -1,12 +1,19 @@
 \documentclass{article}
 \usepackage{epsfig}
+\usepackage{color}
 \usepackage{dart}
 \usepackage{bnf}
 \usepackage{hyperref}
+\usepackage{lmodern}
 \newcommand{\code}[1]{{\sf #1}}
 \title{Dart Programming Language  Specification \\
 {\large Version 1.6}}
 %\author{The Dart Team}
+
+% For information about Location Markers (and in particular the
+% commands \LMHash and \LMLabel), see the long comment at the
+% end of this file.
+
 \begin{document}
 \maketitle
 \tableofcontents
@@ -19,22 +26,26 @@
 
 % begin Ecma boilerplate
 \section{Scope}
-\label{ecmaScope}
+\LMLabel{ecmaScope}
 
+\LMHash{}
 This Ecma standard specifies the syntax and semantics of the Dart programming language.  It does not specify the APIs of the Dart libraries except where those library elements are essential to the correct functioning of the language itself (e.g., the existence of class \cd{Object} with methods such as \cd{noSuchMethod}, \cd{runtimeType}).
 
 \section{Conformance}
-\label{ecmaConformance}
+\LMLabel{ecmaConformance}
 
+\LMHash{}
 A conforming  implementation of the Dart programming language must provide and support all the  APIs (libraries, types, functions, getters, setters, whether top-level, static, instance or local) mandated in this specification. 
 
+\LMHash{}
 A conforming implementation is permitted to provide additional APIs, but not additional syntax.
 
 % A claim of conformance with this Ecma Standard shall specify?
 
 \section{Normative References}
-\label{ecmaNormativeReferences}
+\LMLabel{ecmaNormativeReferences}
 
+\LMHash{}
 The following referenced documents are indispensable for the application of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.
 
 \begin{enumerate}
@@ -46,15 +57,17 @@
 
 
 \section{Terms and Definitions}
-\label{ecmaTermsAndDefinitions}
+\LMLabel{ecmaTermsAndDefinitions}
 
+\LMHash{}
 Terms and definitions used in this specification are given in the body of the specification proper. Such terms are highlighted in italics when they are introduced, e.g., `we use the term {\em verbosity} to refer to the property of excess verbiage'.
 % End Ecma Boilerplate
 
   
 \section{Notation}
-\label{notation}
+\LMLabel{notation}
 
+\LMHash{}
 We distinguish between normative and non-normative text. Normative text defines the rules of Dart. It is given in this font. At this time, non-normative text includes:
 \begin{itemize}
 \item[Rationale] Discussion of the motivation for language design decisions appears in italics. \rationale{Distinguishing normative from non-normative helps clarify what part of the text is binding and what part is merely expository.}
@@ -62,6 +75,7 @@
 \item[Open questions] (\Q{in this font}). Open questions are points that are unsettled in the mind of the author(s) of the specification; expect them (the questions, not the authors; precision is important in a specification) to be eliminated in the final specification. \Q{Should the text at the end of the previous bullet be rationale or commentary?}
 \end{itemize}
 
+\LMHash{}
 Reserved words and built-in identifiers  (\ref{identifierReference}) appear in {\bf bold}.
 
 \commentary{
@@ -69,6 +83,7 @@
 }
 
 
+\LMHash{}
 Grammar productions are given in a common variant of EBNF.  The left hand side of a production ends with a colon.  On the right hand side, alternation is represented by vertical bars, and sequencing by spacing.  As in PEGs, alternation gives priority to the left. Optional elements of a production are suffixed by a question mark like so: \code{anElephant?}.  Appending a star to an element of a production means it may be repeated zero or more times.  Appending a plus sign to a production means it occurs one or more times. Parentheses are used for grouping. Negation  is represented by prefixing an element of a production with a tilde. Negation is similar to the not combinator of PEGs, but it consumes input if it matches. In the context of a lexical production it consumes a single character if there is one;  otherwise, a single token if there is one.
 
 \commentary{ An example would be:}
@@ -95,17 +110,23 @@
 % The alternative is to define ~X as anything but X, or to introduce an anthingBut(X) 
 % combinator, such as !X
 
+\LMHash{}
 Both syntactic and lexical productions are represented this way. Lexical productions are distinguished by their names. The names of lexical productions consist exclusively of upper case characters and underscores.  As always, within grammatical productions, whitespace and comments between elements of the production are implicitly ignored unless stated otherwise. 
 Punctuation tokens appear in quotes. 
 
+\LMHash{}
 Productions are embedded, as much as possible, in the discussion of the constructs they represent. 
 
+\LMHash{}
 A list $x_1, \ldots, x_n$ denotes any list of $n$ elements of the form $x_i, 1 \le i \le n$. Note that $n$ may be zero, in which case the list is empty. We use such lists extensively throughout this specification.
 
+\LMHash{}
 The notation $[x_1, \ldots, x_n/y_1, \ldots, y_n]E$ denotes a copy of $E$ in which all occurrences of $y_i, 1 \le i \le n$ have been replaced with $x_i$.
 
+\LMHash{}
 We sometimes abuse list or map literal syntax, writing $[o_1, \ldots, o_n]$  (respectively $\{k_1: o_1, \ldots, k_n: o_n\}$) where the $o_i$ and $k_i$ may be objects rather than expressions. The intent is to denote a list (respectively map) object whose elements are the $o_i$ (respectively, whose keys are the $k_i$ and values are the $o_i$).
 
+\LMHash{}
 The specifications of operators often involve statements such as $x$ $op$ $y$ is equivalent to the method invocation $x.op(y)$. Such specifications should be understood as a shorthand for:
 \begin{itemize}
 \item
@@ -115,8 +136,10 @@
  \rationale{This circumlocution is required because x.op(y), where op is an operator, is not legal syntax. However, it is painfully verbose, and we prefer to state this rule once here, and use a concise and clear notation across the specification.
  }
 
+\LMHash{}
 When the specification refers to the order given in the program, it means the order of the program source code text, scanning left-to-right and top-to-bottom.
 
+\LMHash{}
 References to otherwise unspecified names of program entities (such as classes or functions) are interpreted as the names of members of the Dart core library.
 
 \commentary{
@@ -124,12 +147,15 @@
 }
 
 \section{Overview}
-\label{overview}
+\LMLabel{overview}
 
+\LMHash{}
 Dart is a class-based, single-inheritance, pure object-oriented programming language. Dart is optionally typed (\ref{types}) and supports reified generics. The run-time type of every object is represented as an instance of class \code{Type}  which can be obtained by calling the getter  \code{runtimeType} declared in class \code{Object}, the root of the Dart class hierarchy.
 
+\LMHash{}
 Dart programs may be statically checked. The static checker will report some violations of the type rules, but such violations do not abort compilation or preclude execution. 
 
+\LMHash{}
 Dart programs may be executed in one of two modes: production mode or checked mode. In production mode, static type annotations (\ref{staticTypes}) have absolutely no effect on execution with the exception of reflection and structural type tests. 
 
 \commentary{
@@ -138,6 +164,7 @@
 Type tests also examine the types in a program explicitly. Nevertheless, in most cases, these will not depend on type annotations. The exceptions to this rule are type tests involving function types. Function types are structural, and so depend on the types declared for their parameters and on their return types. 
 }
 
+\LMHash{}
 In checked mode, assignments are dynamically checked, and certain violations of the type system raise exceptions at run time.
 
 \commentary{
@@ -150,30 +177,36 @@
 \end{enumerate}
 }
 
+\LMHash{}
 Dart programs are organized in a modular fashion into units called {\em libraries} (\ref{librariesAndScripts}). Libraries are units of encapsulation and may be mutually recursive. 
 
 \commentary{However they are not first class.  To get multiple copies of a library running simultaneously, one needs to spawn an isolate. 
 }
 
 \subsection{Scoping}
-\label{scoping}
+\LMLabel{scoping}
 
+\LMHash{}
 A {\em namespace} is a mapping of names denoting declarations to actual declarations.  Let $NS$ be a namespace. We say that a name $n$ {\em is in }$NS$ if $n$ is a key of $NS$. We say a declaration $d$ {\em is in }$NS$ if a key of $NS$ maps to $d$.
 
+\LMHash{}
 A scope $S_0$ induces a namespace $NS_0$ that maps the simple name of each variable, type or function declaration $d$ declared in $S_0$ to $d$. Labels are not included in the induced namespace of a scope; instead they have their own dedicated namespace.
 
 \commentary{It is therefore impossible, e.g.,  to define a class that declares a method and a field with the same name in Dart. Similarly one cannot declare a top-level function with the same name as a library variable or class.
   }
   
+\LMHash{}
 It is a compile-time error if there is more than one entity with the same name declared in the same scope.
 
 \commentary{
 In some cases, the name of the declaration differs from the identifier used to declare it.  Setters have names that are distinct from the corresponding getters because they always have an = automatically added at the end, and unary minus has the special name unary-.
 }
 
+\LMHash{}
 Dart is lexically scoped.    Scopes may nest.  A name or declaration $d$ is {\em available in scope} $S$ if $d$ is in the namespace induced by $S$ or if $d$ is available in the lexically enclosing scope of $S$. We  say that a name or declaration $d$ is {\em in scope} if $d$ is available in the current scope. 
 
 
+\LMHash{}
 If a  declaration $d$ named $n$ is in the namespace induced by a scope $S$, then $d$ {\em hides} any declaration named $n$ that is available in the lexically enclosing scope of $S$. 
 
 \commentary {
@@ -187,6 +220,7 @@
 \}
 \end{dartCode}
 
+\LMHash{}
 Names may be introduced into a scope by  declarations within the scope or  by other mechanisms such as imports or inheritance.
 
 \rationale{
@@ -227,17 +261,20 @@
 
 
 \subsection{Privacy}
-\label{privacy}
+\LMLabel{privacy}
 
+\LMHash{}
 Dart supports two levels of privacy: {\em public} and {\em private}.  A declaration is {\em private} iff its name is private, otherwise it is {\em public.}  A  name $q$ is private iff any one of the identifiers that comprise $q$ is private,  otherwise it is {\em public.}  An identifier is private iff it
 begins with an underscore (the \_ character) otherwise it is {\em public.} 
 
+\LMHash{}
 A declaration $m$ is {\em accessible to library $L$}  if $m$ is declared in $L$ or if $m$ is public.
 
 \commentary{
 This means private declarations may only be accessed within the library in which they are declared.
 }
 
+\LMHash{}
 Privacy applies only to declarations within a library, not to library declarations themselves. 
 
 \rationale{Libraries do not reference each other by name and so the idea of a private library is meaningless.
@@ -250,16 +287,20 @@
 
 \subsection{Concurrency}
 
+\LMHash{}
 Dart code is always single threaded. There is no shared-state concurrency in Dart. Concurrency is supported via actor-like entities called {\em isolates}.
 
+\LMHash{}
 An isolate is a unit of concurrency. It has its own memory and its own thread of control. Isolates communicate by message passing (\ref{sendingMessages}). No state is ever shared between isolates. Isolates are created by spawning (\ref{spawningAnIsolate}). 
 
 
 \section{Errors and Warnings}
-\label{errorsAndWarnings}
+\LMLabel{errorsAndWarnings}
 
+\LMHash{}
 This specification distinguishes between several kinds of errors.
 
+\LMHash{}
 {\em Compile-time errors} are errors that preclude execution. A compile-time error must be reported by a Dart compiler before the erroneous code is executed. 
 
 \rationale{A Dart implementation has considerable freedom as to when compilation takes place. Modern programming language implementations often interleave compilation and execution, so that compilation of a method may be delayed, e.g.,  until it is first invoked. Consequently, compile-time errors in a method $m$ may be reported as late as the time of $m$'s first invocation.
@@ -269,6 +310,7 @@
 In a development environment a compiler should of course report compilation errors eagerly so as to  best serve the programmer.
 }
 
+\LMHash{}
 If an uncaught compile-time error occurs within the code of a running isolate $A$, $A$ is immediately suspended.  The only circumstance where a compile-time error could be caught would be via code run reflectively, where the mirror system can catch it.
 
 \rationale{Typically, once a compile-time error is thrown and $A$ is suspended, $A$ will then be terminated. However, this depends on the overall environment. 
@@ -276,18 +318,23 @@
 a program that interfaces between the engine and the surrounding computing environment. The embedder will often be a web browser, but need not be; it may be a C++ program on the server for example. When an isolate fails with a compile-time error as described above, control returns to the embedder, along with an exception describing the problem.  This is necessary so that the embedder can clean up resources etc. It is then the embedder's decision whether to terminate the isolate or not.
 }
 
+\LMHash{}
 {\em Static  warnings} are those errors reported by the static checker. They have no effect on execution. Many, but not all, static warnings relate to types, in which case they are known as {\em static type warnings.} Static warnings must be provided by Dart compilers used during development such as those incorporated in IDEs or otherwise intended to be used by developers for developing code. Compilers that are part of runtime execution environments such as virtual machines should not issue static warnings.
 
+\LMHash{}
 {\em Dynamic type errors} are type errors reported in checked mode.
 
+\LMHash{}
 {\em Run-time errors} are exceptions raised during execution. Whenever we say that an exception $ex$ is {\em raised} or {\em thrown}, we mean that a throw expression  (\ref{throw}) of the form: \code{\THROW{} $ex$;} was implicitly evaluated or that a rethrow statement (\ref{rethrow}) of the form \code{\RETHROW} was executed. When we say that {\em a} $C$ {\em is thrown}, where $C$ is a class, we mean that an instance of class $C$ is thrown.
 
+\LMHash{}
 If an uncaught exception is thrown by a running isolate $A$, $A$ is immediately suspended. 
 
 
 \section{Variables}
-\label{variables}
+\LMLabel{variables}
 
+\LMHash{}
 Variables are storage locations in memory.  
 
 \begin{grammar}
@@ -325,19 +372,25 @@
 
   \end{grammar}
 
+\LMHash{}
 A variable that has not been initialized has the initial value \NULL{} (\ref{null}).
 
+\LMHash{}
 A variable declared at the top-level of a library is referred to as either a {\em library variable} or simply a top-level variable. 
 
+\LMHash{}
 A {\em static variable} is a variable that is not associated with a particular instance, but rather with an entire library or class.  Static variables include library variables and class variables. Class variables are variables whose declaration is immediately nested inside a class declaration and includes the modifier \STATIC{}. A library variable is implicitly static. It is a compile-time error to preface a top-level variable declaration with the built-in identifier  (\ref{identifierReference}) \STATIC{}.  
 
+\LMHash{}
 Static variable declarations are initialized lazily. When a static variable $v$ is read, iff it has not yet been assigned,  it is set to the result of evaluating its initializer. The precise rules are given in section \ref{evaluationOfImplicitVariableGetters}. 
 
 \rationale{The lazy semantics are given because we do not want a language where one tends to define expensive initialization computations, causing long application startup times. This is especially crucial for Dart, which must support the coding of  client applications.
 }
 
+\LMHash{}
 A {\em final variable} is a variable whose binding is fixed upon initialization; a final variable $v$ will always refer to the same object after $v$ has been initialized. The declaration of a final variable must  include the modifier \FINAL{}. 
 
+\LMHash{}
 It is a static warning if a final instance variable that has been initialized at its point of declaration  is  also initialized in a constructor. 
 % It is a static warning if a final instance variable that has been initialized by means of an initializing formal of a constructor is  also initialized elsewhere in the same constructor.
 It is a compile-time error if a local variable $v$ is final and $v$ is not initialized at its point of declaration.
@@ -351,20 +404,27 @@
 Taken as a whole, the rules ensure that any attempt to execute multiple assignments to a final variable will yield static warnings and repeated assignments will fail dynamically.
 }
 
+\LMHash{}
 A {\em constant variable} is a variable whose declaration includes the modifier \CONST{}. A constant variable is always implicitly final. A constant variable must be initialized to a compile-time constant (\ref{constants}) or a compile-time error occurs.
 
+\LMHash{}
 We say that a variable $v$ is {\em potentially mutated} in some scope $s$ if $v$ is not final or constant and an assignment to $v$ occurs in $s$.
 
+\LMHash{}
 If a variable declaration does not explicitly specify a type, the type of the declared variable(s) is  \DYNAMIC{}, the unknown type (\ref{typeDynamic}). 
 
+\LMHash{}
 A variable is {\em mutable} if it is not final.
 Static and instance variable declarations always induce implicit getters. If the variable is mutable it also introduces an implicit setter.
 The scope into which the implicit getters and setters are introduced depends on the kind of variable declaration involved. 
 
+\LMHash{}
 A library variable introduces a getter into the top level scope of the enclosing library. A static class variable introduces a static getter into the immediately enclosing class. An instance variable introduces an instance getter into the immediately enclosing class. 
 
+\LMHash{}
 A mutable library variable introduces a setter into the top level scope of the enclosing library. A mutable static class variable introduces a static setter into the immediately enclosing class. A mutable instance variable introduces an instance setter into the immediately enclosing class. 
 
+\LMHash{}
 Local variables are added to the innermost enclosing scope.  They do not induce getters and setters.  A local variable may only be referenced at a source code location that is after its initializer, if any, is complete, or a compile-time error occurs.  The error may be reported either at the point where the premature reference occurs, or at the variable declaration.
 
 \rationale {
@@ -422,8 +482,10 @@
 
 % the grammar does not support local getters and setters. The local var discussion does not seem to mention getters and setters based semantics. It simply discusses the creation of the variable, not its access. Access is either assignment or identifiers. Identifiers ignore the getter story. 
 
+\LMHash{}
 The following rules apply to all static and instance variables.
 
+\LMHash{}
 A  variable declaration  of one of the forms \code{$T$ $v$;},  \code{$T$ $v$ = $e$;} ,  \code{\CONST{} $T$ $v$ = $e$;}, \code{\FINAL{} $T$ $v$;}  or \code{\FINAL{} $T$ $v$ = $e$;} always induces an implicit  getter function (\ref{getters}) with signature 
 
 $T$ \GET{} $v$
@@ -431,18 +493,21 @@
 whose invocation evaluates as described below (\ref{evaluationOfImplicitVariableGetters}).
 
 
+\LMHash{}
 A  variable declaration  of one of the forms \code{\VAR{} $v$;},  \code{\VAR{} $v$ = $e$;} ,  \code{\CONST{} $v$ = $e$;}, \code{\FINAL{} $v$;} or \code{\FINAL{}  $v$ = $e$;}  always induces an implicit  getter function with signature 
 
  \GET{} $v$
 
 whose  invocation evaluates as described below (\ref{evaluationOfImplicitVariableGetters}).
 
+\LMHash{}
 A non-final  variable declaration  of the form \code{{} $T$ $v$;} or the form  \code{$T$ $v$ = $e$;}   always induces an implicit  setter function (\ref{setters}) with signature 
 
  \VOID{} \SET{} $v=(T$ $x)$
 
 whose execution sets the value of $v$ to the incoming argument $x$.
 
+\LMHash{}
 A  non-final variable declaration  of the form \code{\VAR{} $v$;} or the form  \code{\VAR{} $v$ = $e$;}   always induces an implicit  setter function with signature 
 
 \SET{} $v=(x)$
@@ -451,8 +516,9 @@
 
 
 \subsection{Evaluation of Implicit  Variable Getters}
-\label{evaluationOfImplicitVariableGetters}
+\LMLabel{evaluationOfImplicitVariableGetters}
 
+\LMHash{}
 Let $d$ be the declaration of a static or instance variable $v$.  If $d$ is an instance variable, then the invocation of the implicit getter  of $v$ evaluates to the value stored in $v$.
 If $d$ is a static or library variable then the implicit getter method of $v$ executes as follows: 
 \begin{itemize}
@@ -467,8 +533,9 @@
 
 
 \section{Functions}
-\label{functions}
+\LMLabel{functions}
 
+\LMHash{}
 Functions abstract over executable actions.
 
 \begin{grammar}
@@ -491,8 +558,10 @@
 
 \end{grammar}
 
+\LMHash{}
 Functions include  function declarations (\ref{functionDeclarations}), methods (\ref{instanceMethods},  \ref{staticMethods}), getters  (\ref{getters}), setters  (\ref{setters}), constructors  (\ref{constructors}) and function literals  (\ref{functionExpressions}).  
 
+\LMHash{}
 All functions have a signature and a body. The signature describes the formal parameters of the function, and possibly its name and return type.  A function body is either:
 \begin{itemize}
 \item A block statement  (\ref{blocks}) containing the statements  (\ref{statements}) executed by the function, optionally marked with one of the modifiers: \ASYNC, \ASYNC* or \SYNC*. In this case, if the last statement of a function is not a return statement (\ref{return}), the statement \code{\RETURN{};} is implicitly appended to the function body.
@@ -506,12 +575,14 @@
 
 \end{itemize}
 
+\LMHash{}
 A function is {\em asynchronous} if its body is marked with the \ASYNC{} or \ASYNC* modifier. Otherwise the function is {\em synchronous}. A function is a {\em generator} if its body is marked with the \SYNC* or \ASYNC* modifier.  
 
 \commentary{
 Whether a function is synchronous or asynchronous is orthogonal to whether it is a generator or not. Generator functions are a sugar for functions that produce collections in a systematic way, by lazily applying a function that {\em generates} individual elements of a collection. Dart provides such a sugar in both the synchronous case, where one returns an iterable, and in the asynchronous case, where one returns a stream. Dart also allows both synchronous and asynchronous functions that produce a single value. 
 }
 
+\LMHash{}
 It is a compile-time error if an \ASYNC, \ASYNC* or \SYNC* modifier is attached to the body of a setter or constructor.
 
 \rationale{
@@ -524,14 +595,17 @@
 
 
 \subsection{Function Declarations}
-\label{functionDeclarations}
+\LMLabel{functionDeclarations}
 
+\LMHash{}
 A {\em function declaration} is a function that is neither a member of a class nor a function literal. Function declarations include {\em library functions}, which are function declarations 
 %(including getters and setters) 
 at the top level of a library, and {\em local functions}, which are function declarations declared inside other functions. Library functions are often referred to simply as top-level functions.
 
+\LMHash{}
 A function declaration consists of an identifier indicating the function's name, possibly prefaced by a return type. The function name is followed by a signature and body. For getters, the signature  is empty. The body is empty for functions that are external.
 
+\LMHash{}
 The scope of a library function is the scope of the enclosing library. The scope of a local function is  described in section \ref{localFunctionDeclaration}. In both cases, the name of the function is in scope in its formal parameter scope (\ref{formalParameters}).
 
 %A function declaration of the form  $T_0$ $id(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k}= d_k])\{s\}$}, where $F$ is the function type alias (\ref{typedef}) \code{\TYPEDEF{} $T_0$ $F(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}])$}.  Likewise,  a function declaration of the form  $id(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{n+k} = d_k])\{s\}$}, where $F$ is the function type alias \code{\TYPEDEF{}  $F(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}])$}. 
@@ -552,18 +626,23 @@
 
 %A function declaration of the form  $T_0$ $id(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$}, where $F$ is the function type alias (\ref{typedef}) \code{\TYPEDEF{} $T_0$ $F(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]\}$}.  Likewise,  a function declaration of the form  $id(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$ is equivalent to a variable declaration of the form \code{\FINAL{} $F$ $id$ = $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_{n+k} : d_k\})\{s\}$}, where $F$ is the function type alias \code{\TYPEDEF{}  $F(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\})$}.
 
+\LMHash{}
 It is a compile-time error to preface a function declaration with the built-in identifier \STATIC{}.
 
+\LMHash{}
 When we say that a function $f_1$ {\em forwards} to another function $f_2$, we mean that  invoking $f_1$ causes $f_2$ to  be executed with the same arguments and/or receiver as $f_1$, and returns the result of executing $f_2$ to the caller of $f_1$, unless $f_2$ throws an exception, in which case $f_1$ throws the same exception. Furthermore, we only use the term for synthetic functions introduced by the specification.
 
 
 \subsection{Formal Parameters}
-\label{formalParameters}
+\LMLabel{formalParameters}
 
+\LMHash{}
 Every function includes a {\em formal parameter list}, which consists of a list of required positional parameters (\ref{requiredFormals}), followed by any optional parameters (\ref{optionalFormals}). The optional parameters may be specified either as a set of named parameters or as a list of positional parameters, but not both.
 
+\LMHash{}
 The formal parameter list of a function introduces a new scope known as the function's {\em formal parameter scope}. The formal parameter scope of a function $f$  is enclosed in the scope where $f$ is declared.   Every formal parameter introduces a local variable into the formal parameter scope. However, the scope of a function's signature is the function's enclosing scope, not the formal parameter scope.
 
+\LMHash{}
 The body of a function introduces a new scope known as the function's {\em  body scope}. The body scope of a function $f$  is enclosed  in the scope introduced by the formal parameter scope of $f$.
 
 
@@ -572,6 +651,7 @@
 % The formal parameters of a function are processed in the enclosing scope of the function. 
 % \commentary{this means that the parameters themselves may not be referenced within the formal parameter list.}
 
+\LMHash{}
 It is a compile-time error if a formal parameter is declared as a constant variable (\ref{variables}).
 
 \begin{grammar}
@@ -611,8 +691,9 @@
 
 
 \subsubsection{Required Formals} 
-\label{requiredFormals}
+\LMLabel{requiredFormals}
 
+\LMHash{}
 A {\em required formal parameter} may be specified in one of three ways:
 \begin{itemize}
 \item By means of a function signature that names the parameter and describes its type as a function type (\ref{functionTypes}).  It is a compile-time error if any default values are specified in the signature of such a function type.% explain what the type is in this case? Where is this described in general?
@@ -645,8 +726,9 @@
  %\end{grammar}
 
 \subsubsection{Optional Formals}
-\label{optionalFormals}
+\LMLabel{optionalFormals}
 
+\LMHash{}
 Optional parameters may be specified and provided with default values.
 
 \begin{grammar}
@@ -659,8 +741,10 @@
     .   
 \end{grammar}
 
+\LMHash{}
 It is a compile-time error if the default value of an optional parameter is not a compile-time constant (\ref{constants}). If no default is explicitly specified for an optional parameter an implicit default of \NULL{} is provided.
 
+\LMHash{}
 It is a compile-time error if the name of a named optional parameter begins with an `\_' character.
 
 \rationale{
@@ -669,16 +753,21 @@
 }
 
 \subsection{Type of a Function}
-\label{typeOfAFunction}
+\LMLabel{typeOfAFunction}
 
+\LMHash{}
 If a function does not declare a return type explicitly, its return type is \DYNAMIC{} (\ref{typeDynamic}).
 
+\LMHash{}
 Let $F$ be a function with required formal parameters $T_1$ $p_1 \ldots, T_n$ $p_n$, return type $T_0$ and no optional parameters. Then the type of $F$ is $(T_1 ,\ldots, T_n) \rightarrow T_0$.
 
+\LMHash{}
 Let $F$ be a function with required formal parameters $T_1$ $p_1 \ldots, T_n$ $p_n$, return type $T_0$ and positional optional parameters $T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $ p_{n+k}$. Then the type of $F$ is $(T_1 ,\ldots, T_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$  $p_{n+k}]) \rightarrow T_0$.
 
+\LMHash{}
 Let $F$ be a function with required formal parameters $T_1$ $p_1 \ldots, T_n$ $p_n$, return type $T_0$ and named optional parameters $T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $ p_{n+k}$. Then the type of $F$ is $(T_1 ,\ldots, T_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$  $p_{n+k}\}) \rightarrow T_0$.
 
+\LMHash{}
 The run time type of a function object always implements the class \cd{Function}. 
 
 \commentary{
@@ -692,8 +781,9 @@
 }
 
 \subsection{External Functions}
-\label{externalFunctions}
+\LMLabel{externalFunctions}
 
+\LMHash{}
 An {\em external function} is a function whose body is provided separately from its declaration. An external function may be a top-level function (\ref{librariesAndScripts}), a method (\ref{instanceMethods}, \ref{staticMethods}), a getter (\ref{getters}), a setter (\ref{setters}) or a non-redirecting constructor (\ref{generativeConstructors}, \ref{factories}). External functions are introduced via the built-in identifier \EXTERNAL{}  (\ref{identifierReference}) followed by the function signature.  
 
 \rationale{
@@ -704,13 +794,16 @@
 Examples of external functions might be foreign functions (defined in C, or Javascript etc.), primitives of the implementation (as defined by the Dart runtime), or code that was dynamically generated but whose interface is statically known. However, an abstract method is different from an external function, as it has {\em no} body.
 }
 
+\LMHash{}
 An external function is connected to its body by an implementation specific mechanism. Attempting to invoke an external function that has not been connected to its body will raise a \code{NoSuchMethodError} or some subclass thereof.
 
+\LMHash{}
 The actual syntax is given in sections \ref{classes} and \ref{librariesAndScripts} below.
 
 \section{Classes}
-\label{classes}
+\LMLabel{classes}
 
+\LMHash{}
 A {\em class} defines the form and behavior of a set of objects which are its {\em instances}.  Classes may be defined by class declarations as described below, or via mixin applications (\ref{mixinApplication}).
 
 \begin{grammar}
@@ -761,6 +854,7 @@
 
 \end{grammar}
 
+\LMHash{}
 A class has constructors,  instance members and static members. The instance members of a class are its instance methods, getters, setters and instance variables. The static members of a class are its static methods, getters, setters and static variables. The members of a class are its static and instance members.
 
 % A class has a static scope and an instance scope. The enclosing scope of the static scope of a non-generic class is the enclosing scope of the class declaration. The enclosing scope of the static scope of a generic class is the type parameter scope (\ref{}) of the generic class declaration.
@@ -771,12 +865,14 @@
 %The enclosing scope of a static member declaration is the static scope of the class in which it is declared.
 
 
+\LMHash{}
 Every class has a single superclass  except class \code{Object} which has no superclass. A class may implement a number of interfaces
 %, either 
 by declaring them in its implements clause  (\ref{superinterfaces}).
 % or via interface injection declarations (\ref{interfaceInjection}) outside the class declaration
 
 
+\LMHash{}
 An {\em abstract class} is 
 %either 
 a class that is explicitly declared with the  \ABSTRACT{}  modifier, either by means of a class declaration or via a type alias (\ref{typedef}) for a mixin application (\ref{mixinApplication}). A {\em concrete class} is a class that is not abstract.
@@ -787,6 +883,7 @@
 We want different behavior for concrete classes and abstract classes. If $A$ is intended to be abstract, we want the static checker to warn about any attempt to instantiate $A$, and we do not want the checker to complain about unimplemented methods in $A$. In contrast, if $A$ is intended to be concrete, the checker should warn about all unimplemented methods, but allow clients to instantiate it freely.
 }
 
+\LMHash{}
 The {\em interface of class $C$} is an implicit interface that declares instance members that correspond to the instance members declared by $C$, and whose direct superinterfaces are the direct superinterfaces of $C$ (\ref{superinterfaces}). When a class name appears as a type, that name denotes the interface of the class.
 
 % making an exception for the setters generated for final fields is tempting but problematic.
@@ -794,6 +891,7 @@
 % Maybe the final field hides the setter in scope?
 % I think the original rules were best.
 
+\LMHash{}
  It is a compile-time error if a class declares two members of the same name.
  %, except that a getter and a setter may be declared with the same name provided both are instance members or both are static members.
 It is a compile-time error if a class has an instance member and a static member  with the same name. 
@@ -819,27 +917,32 @@
 \}
 \end{dartCode}
 
+\LMHash{}
 It is a compile time error if a class $C$ declares a member with the same name as $C$. It is a compile time error if a generic class declares a type variable with the same name as the class or any of its members or constructors.
 
 \subsection{Instance Methods}
-\label{instanceMethods}
+\LMLabel{instanceMethods}
 
+\LMHash{}
 Instance methods are functions (\ref{functions}) whose declarations are immediately contained within a class declaration and that are not declared \STATIC{}. The instance methods of a class $C$ are those instance methods declared by $C$ and the instance methods inherited by $C$ from its superclass.
 
 %make these warnings if possible
 
+\LMHash{}
 It is a static warning if an instance method $m_1$ overrides  (\ref{inheritanceAndOverriding}) an instance member $m_2$ and  $m_1$ has a greater number of required parameters than $m_2$. It is a static warning if an instance method $m_1$ overrides  an instance member $m_2$ and  $m_1$ has fewer positional parameters than $m_2$.  It is a static warning if an instance method $m_1$ overrides  an instance member $m_2$ and  $m_1$ does not declare all the named parameters declared by $m_2$. 
 
 % not quite right. It should be ok to override a method that requires N parameters with one that requires M < N but accepts the others as optional.
 
+\LMHash{}
 It is a static warning if an instance method $m_1$ overrides an instance member $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$. It is a static warning if an instance method $m_1$ overrides an instance member $m_2$,  the signature of $m_2$ explicitly specifies a default value for a formal parameter $p$ and the signature of $m_1$ implies a different default value for $p$. It is a static warning if a class $C$ declares an instance method named $n$ and has a setter named $n=$. It is a static warning if a class $C$ declares an instance method named $n$ and an accessible static member named $n$ is declared in a superclass of $C$.
 
 % Works. If the name is public, no issue. If it's private, if a subclass has a conflicting inst var, it either is in the same lib and will be flagged, or is in another and is not an issue.
 
 
 \subsubsection{Operators}
-\label{operators}
+\LMLabel{operators}
 
+\LMHash{}
 {\em Operators} are instance methods with special names. 
 
 \begin{grammar}
@@ -862,33 +965,41 @@
     .
  \end{grammar}
 
+\LMHash{}
 An operator declaration is identified using the built-in identifier (\ref{identifierReference}) \OPERATOR{}.
 
+\LMHash{}
 The following names are allowed for user-defined operators: \code{$<$, $>$, $<$=, $>$=, ==,  -, +, /, \~{}/, *, \%, $|$, \^{}, \&, $<<$, $>>$,  []=, [], \~{}.}
 
 
+\LMHash{}
 It is a compile-time error if the arity of the user-declared operator \code{[]=} is not 2. It is a compile-time error if the arity of a user-declared operator with one of the names:  \code{ $<$, $>$, $<$=, $>$=, ==, -, +,  \~{}/, /, *, \%, $|$, \^{}, \&, $<<$, $>>$, []} is not 1. It is a compile-time error if the arity of the user-declared operator  \code{-} is not 0 or 1. 
 
 \commentary{
 The \code{-} operator is unique in that two overloaded versions are permitted. If the operator has no arguments, it denotes unary minus. If it has an argument, it denotes binary subtraction. 
 }
 
+\LMHash{}
 The name of the unary operator \code{-} is \code{unary-}.
 
 \rationale{
 This device allows the two methods to be distinguished for purposes of method lookup, override and reflection.
 }
 
+\LMHash{}
 It is a compile-time error if the arity of the user-declared operator  \code{ \~{}} is not 0. 
 
+\LMHash{}
 It is a compile-time error to declare an optional parameter in an operator.
 
+\LMHash{}
 It is a static warning if the return type of the user-declared operator \code{[]=} is explicitly declared and not \VOID{}.
 
 
 \subsection{Getters} 
-\label{getters}
+\LMLabel{getters}
 
+\LMHash{}
 Getters are functions (\ref{functions})  that are used to retrieve the values of object properties.
 
 \begin{grammar}
@@ -899,29 +1010,36 @@
 
 %\Q{Why does a getter have a formal parameter list at all?}
 
+\LMHash{}
 If no return type is specified, the return type of the getter is  \DYNAMIC{}.
 
+\LMHash{}
 A getter definition that is prefixed with the \STATIC{} modifier defines a static getter. Otherwise, it defines an instance getter. The name of the getter is given by the identifier in the definition. The effect of a static getter declaration in class $C$ is to add an instance getter with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations})  to the static getter.
 
 %It is a compile-time error if a getter`s formal parameter list is not empty.
 
+\LMHash{}
 The instance getters of a class $C$ are those instance getters declared by $C$, either implicitly or explicitly, and the instance getters inherited by $C$ from its superclass. The static getters of a class $C$ are those static getters declared by $C$.
 
+\LMHash{}
 It is a compile-time error if a class has both a getter and a method with the same name. This restriction holds regardless of whether the getter is defined explicitly or implicitly, or whether the getter or the method are inherited or not.
 
 \commentary{
 This implies that a getter can never override a method, and a method can never override a getter or field. 
 }
 
+\LMHash{}
 It is a static warning if the return type of a getter is \VOID.
 It is a static warning if a getter $m_1$ overrides  (\ref{inheritanceAndOverriding}) a getter 
 $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$.   
 
+\LMHash{}
 It is a static warning if a class  declares a static getter named $v$ and also has a non-static setter named $v=$. It is a static warning if a class $C$ declares an instance getter named $v$ and an accessible static member named $v$ or $v=$ is declared in a superclass of $C$. These warnings must be issued regardless of whether the getters or setters are declared explicitly or implicitly.
 
 \subsection{Setters}
-\label{setters}
+\LMLabel{setters}
 
+\LMHash{}
 Setters are functions (\ref{functions}) that are used to set the values of object properties.
 
 % what about top level ones? Same for getters
@@ -932,28 +1050,36 @@
 .
 \end{grammar}
 
+\LMHash{}
 If no return type is specified, the return type of the setter is  \DYNAMIC{}.
 
+\LMHash{}
 A setter definition that is prefixed with the \STATIC{} modifier defines a static setter. Otherwise, it defines an instance setter. The name of a setter is  obtained by appending the  string `='  to the identifier given in its signature. The effect of a static setter declaration in class $C$ is to add an instance setter with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations})  to the static setter.
 
 \commentary{Hence, a setter name can never conflict with, override or be overridden by a getter or method.}
 
+\LMHash{}
 The instance setters of a class $C$ are those instance setters declared by $C$ either implicitly or explicitly, and the instance setters inherited by $C$ from its superclass. The static setters of a class $C$ are those static setters declared by $C$.
 
+\LMHash{}
 It is a compile-time error if a setter's formal parameter list does not consist of exactly one required formal parameter $p$.  \rationale{We could enforce this via the grammar, but we'd have to specify the evaluation rules in that case.}
 
 %It is a compile-time error if a class has both a setter and a method with the same name. This restriction holds regardless of whether the setter is defined explicitly or implicitly, or whether the setter or the method are inherited or not.
 
+\LMHash{}
 It is a static warning if a setter declares a return type other than \VOID{}.
 It is a static warning if a setter $m_1$ overrides  (\ref{inheritanceAndOverriding}) a setter $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$. It is a static warning if a class has a setter named $v=$ with argument type $T$ and a getter named $v$ with return type $S$, and $T$ may not be assigned to $S$. 
 
+\LMHash{}
 It is a static warning if a class  declares a static setter named $v=$ and also has a non-static member named $v$. It is a static warning if a class $C$ declares an instance setter named $v=$ and an accessible static member named $v=$ or $v$ is declared in a superclass of $C$.
 
+\LMHash{}
 These warnings must be issued regardless of whether the getters or setters are declared explicitly or implicitly.
 
 \subsection{Abstract Instance Members}
-\label{abstractInstanceMembers}
+\LMLabel{abstractInstanceMembers}
 
+\LMHash{}
 An {\em abstract method} (respectively, {\em abstract getter} or {\em abstract setter)} is an instance method, getter or setter that is not declared \EXTERNAL{} and does not  provide an implementation. A {\em concrete method} (respectively, {\em concrete getter} or {\em concrete setter)} is an instance method, getter or setter that is not abstract.
 %The declaration of an abstract method is prefixed by the built-in identifier (\ref{identifierReference}) \ABSTRACT{}.
 
@@ -977,6 +1103,7 @@
 }
 %always results in a run-time error. This must be \code{NoSuchMethodError} or an instance of a subclass of \code{NoSuchMethodError}, such as \code{AbstractMethodError}.
 
+\LMHash{}
 It is a static warning if an abstract member is declared or inherited in a concrete class unless that member overrides a concrete one.
 
 \rationale {
@@ -1001,10 +1128,12 @@
 \rationale{At run time, the concrete method \cd{one} declared in \cd{Base} will be executed, and no problem should arise. Therefore no warning should be issued and so we suppress warnings if a corresponding concrete member exists in the hierarchy. }
 
 \subsection{Instance Variables}
-\label{instanceVariables}
+\LMLabel{instanceVariables}
 
+\LMHash{}
 Instance variables are variables whose declarations are immediately contained within a class declaration and that are not declared \STATIC{}. The instance variables of a class $C$ are those instance variables declared by $C$ and the instance variables inherited by $C$ from its superclass.
 
+\LMHash{}
 It is a compile-time error if an instance variable is declared to be constant.
 
 \rationale{
@@ -1048,10 +1177,12 @@
 
 
 \subsection{Constructors}
-\label{constructors}
+\LMLabel{constructors}
 
+\LMHash{}
 A {\em constructor} is a special function that is used in instance creation expressions (\ref{instanceCreation}) to produce objects. Constructors may be generative (\ref{generativeConstructors}) or they may be factories (\ref{factories}). 
 
+\LMHash{}
 A {\em constructor name} always begins with the name of its immediately enclosing class, and may optionally be followed by a dot and an identifier $id$. It is a compile-time error if $id$ is the name of a member  declared in the immediately enclosing class. It is a compile-time error if the name of a  constructor is not a constructor name. 
 
 
@@ -1059,11 +1190,13 @@
 
 % The enclosing scope of a generative constructor is the instance scope of the class in which it is declared (but what about redirecting?) 
 
+\LMHash{}
 Iff no constructor is specified for a class $C$, it implicitly has a default constructor \code{C() : \SUPER{}() \{\}}, unless $C$ is class \code{Object}.
 
 \subsubsection{Generative Constructors}
-\label{generativeConstructors}
+\LMLabel{generativeConstructors}
 
+\LMHash{}
 A {\em generative constructor} consists of a constructor name, a constructor parameter list, and either a redirect clause or an  initializer list and an optional body.
 
 \begin{grammar}
@@ -1072,12 +1205,16 @@
     .
  \end{grammar}
 
+\LMHash{}
 A {\em constructor parameter list} is a parenthesized, comma-separated list of formal constructor parameters. A {\em formal constructor parameter} is either a formal parameter (\ref{formalParameters}) or an initializing formal. An {\em initializing formal} has the form \code{\THIS{}.id}, where \code{id} is the name of an instance variable of the immediately enclosing class.  It is a compile-time error if \code{id} is not an instance variable of the immediately enclosing class. It is a compile-time error if an initializing formal is used by a function other than a non-redirecting generative constructor. 
 
+\LMHash{}
 If an explicit type is attached to the initializing formal, that is its static type. Otherwise, the type of an initializing formal named \code{id} is $T_{id}$, where $T_{id}$ is the type of the field named \code{id} in the immediately enclosing class. It is a static warning if the static type of \code{id} is not assignable to $T_{id}$.
 
+\LMHash{}
 Using an initializing formal \code{\THIS{}.id} in a formal parameter list does not introduce a formal parameter name into the scope of the constructor. However, the initializing formal does effect the type of the constructor function exactly as if a formal parameter  named \code{id}  of the same type were introduced in the same position.
 
+\LMHash{}
 Initializing formals are executed during the execution of generative constructors detailed below. Executing an initializing formal  \code{\THIS{}.id} causes the field \code{id} of the immediately surrounding class to be assigned the value of the corresponding actual parameter, unless $id$ is a final variable that has already been initialized, in which case a runtime error occurs.
 
 
@@ -1101,18 +1238,21 @@
 \}
 \end{dartCode}
 
+\LMHash{}
 A {\em fresh instance} is an instance whose identity  is distinct from any previously allocated instance of its class. A generative constructor always operates on a fresh instance of its immediately enclosing class. 
 
 \commentary{
 The above holds if the constructor is actually run, as it is by \NEW{}. If a constructor $c$ is referenced by \CONST{}, $c$ may not be run; instead, a canonical object may be looked up. See the section on instance creation (\ref{instanceCreation}).
 }
 
+\LMHash{}
 If a generative constructor $c$  is not a redirecting constructor and no body is provided, then $c$ implicitly has an empty body \code{\{\}}.
 
 
 \paragraph{Redirecting Constructors}
-\label{redirectingConstructors}
+\LMLabel{redirectingConstructors}
 
+\LMHash{}
 A generative constructor may be {\em redirecting}, in which case its only action is to invoke another generative constructor.  A redirecting constructor has no body; instead, it has a redirect clause that specifies which constructor the invocation is redirected to, and with what arguments.
 
 \begin{grammar}
@@ -1128,6 +1268,7 @@
 
 \paragraph{Initializer Lists}
 
+\LMHash{}
 An initializer list begins with a colon, and consists of a comma-separated list of individual {\em initializers}. There are two kinds of initializers.
 \begin{itemize}
 \item A {\em superinitializer} identifies a {\em superconstructor} - that is, a specific  constructor of the superclass.  Execution of the superinitializer causes the initializer list of the superconstructor to be executed.
@@ -1152,8 +1293,10 @@
 
 \end{grammar}
 
+\LMHash{}
 Let $k$ be a generative constructor.  Then $k$ may include at most one  superinitializer in its initializer list or a compile-time error occurs. If no superinitializer is provided, an implicit superinitializer of the form \SUPER{}() is added at the end of $k$'s initializer list, unless the enclosing class is class \code{Object}. It is a compile-time error if more than one initializer corresponding to a given instance variable appears in $k$'s initializer list. It is a compile-time error if $k$'s initializer list contains an initializer for a variable that is initialized by means of an initializing formal of $k$. % It is a compile-time error if  $k$'s initializer list contains an initializer for a final variable $f$ whose declaration includes an initialization expression.
  
+\LMHash{}
 Each final instance variable $f$ declared in the immediately enclosing class must have an initializer in $k$'s initializer list unless it has already been initialized by one of the following means:
  \begin{itemize}
  \item Initialization at the declaration of $f$.
@@ -1166,21 +1309,26 @@
 \commentary{The  initializer list may of course contain an initializer for any  instance variable declared by the immediately surrounding class, even if it is not final. 
 }
 
+\LMHash{}
  It is a compile-time error if a  generative constructor of class \code{Object} includes a superinitializer. 
 
+\LMHash{}
 Execution of a generative constructor $k$ is always done with respect to a set of bindings for its formal parameters and with  \THIS{} bound to a fresh instance $i$ and the type parameters of the immediately enclosing class bound to a set of actual type arguments $V_1, \ldots , V_m$. 
 
 \commentary{These bindings are usually determined by the instance creation expression that invoked the constructor (directly or indirectly). However, they may also be determined by a reflective call,.
 }
 
+\LMHash{}
 If $k$ is redirecting then its redirect clause has the form 
 
 \THIS{}$.g(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ 
 
 where $g$ identifies another  generative constructor of the immediately surrounding class. Then execution of $k$ proceeds by evaluating the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$, and then executing $g$ with respect to the bindings resulting from the evaluation of $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ and with  \THIS{} bound to $i$ and the type parameters of the immediately enclosing class bound to $V_1, \ldots , V_m$. 
 
+\LMHash{}
 Otherwise, execution  proceeds as follows:
 
+\LMHash{}
 %First, a fresh instance (\ref{generativeConstructors}) $i$ of the immediately enclosing class is allocated.  Next, the instance variable declarations of the immediately enclosing class are visited in the order they appear in the program text. For each such declaration $d$, if $d$ has the form  \code{$finalConstVarOrType$ $v$ = $e$; } then the instance variable $v$ of $i$ is bound to the value of $e$ (which is necessarily a compile-time constant).
 %Next, a
 Any initializing formals declared in $k$'s parameter list are executed in the order they appear in the program text.  
@@ -1190,18 +1338,23 @@
 
 \rationale {We could observe the order by side  effecting external routines called. So we need to specify the order.}
 
+\LMHash{}
 After all the initializers  have completed, the body of $k$ is executed  in a scope where \THIS{} is bound to $i$. Execution of the body begins with execution of the body of the superconstructor  with \THIS{} bound to $i$, the type parameters of the immediately enclosing class bound to a set of actual type arguments $V_1, \ldots , V_m$ and the formal parameters bindings determined by the argument list of the superinitializer of $k$.
 
 \rationale{
 This process ensures that no uninitialized final field is ever seen by code. Note that \THIS{} is not in scope on the right hand side of an initializer (see \ref{this}) so no instance method can execute during initialization: an instance method cannot be directly invoked, nor can  \THIS{} be passed into any other code being invoked in the initializer. 
 }
 
+\LMHash{}
 Execution of an initializer of the form \code{\THIS{}.$v$ = $e$} proceeds as follows:
 
+\LMHash{}
 First, the expression $e$ is evaluated to an object $o$. Then, the instance variable $v$ of the object denoted by \THIS{} is bound to $o$, unless $v$ is a final variable that has already been initialized, in which case a runtime error occurs. In checked mode, it is a dynamic type error if $o$ is not \NULL{} and the interface of the class of $o$ is not a subtype of the actual type of the field $v$.
 
+\LMHash{}
 An initializer of the form \code{$v$ = $e$} is equivalent to an initializer of the form  \code{\THIS{}.$v$ = $e$}. 
 
+\LMHash{}
 Execution of a superinitializer of the form 
 
 \SUPER{}$(a_1, \ldots, a_n,  x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$ 
@@ -1210,17 +1363,22 @@
 
 proceeds as follows:
 
+\LMHash{}
 First, the argument list $(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$ is evaluated.
 
+\LMHash{}
 Let $C$ be the class in which the superinitializer appears and let $S$ be the superclass of $C$.  If $S$ is generic (\ref{generics}), let $U_1, , \ldots, U_m$ be the actual type arguments passed to $S$ in the superclass clause of $C$.
 
+\LMHash{}
 Then, the initializer list of the constructor $S$ (respectively $S.id$) is executed with respect to the bindings that resulted from the evaluation of the argument list,  with \THIS{} bound to the current binding of \THIS{}, and  the type parameters (if any) of class $S$ bound to the current bindings of $U_1, , \ldots, U_m$.
 
+\LMHash{}
 It is a compile-time error if class $S$ does not declare a generative constructor named $S$ (respectively $S.id$).
 
 \subsubsection{Factories}
-\label{factories}
+\LMLabel{factories}
 
+\LMHash{}
 A {\em factory} is a constructor prefaced by the built-in identifier  (\ref{identifierReference})   \FACTORY{}. 
 
 \begin{grammar}
@@ -1232,10 +1390,13 @@
 
 %The enclosing scope of a factory constructor is the static scope \ref{} of the class in which it is declared.
 
+\LMHash{}
 The {\em return type} of a factory whose signature is of the form \FACTORY{} $M$ or the form \FACTORY{} $M.id$ is $M$ if $M$ is not a generic type; otherwise the return type is  $M <T_1, \ldots, T_n>$ where $T_1, \ldots, T_n$ are the type parameters of the enclosing class
 
+\LMHash{}
 It is a compile-time error if $M$ is not the name of the immediately enclosing class. 
 
+\LMHash{}
 In checked mode, it is a dynamic type error if a factory returns a non-null object whose type is not a subtype of its actual (\ref{actualTypeOfADeclaration}) return type.
 
 \rationale{It seems useless to allow a factory to return null. But it is more uniform to allow it, as the rules currently do.}
@@ -1246,8 +1407,9 @@
 }
 
 \paragraph{Redirecting Factory Constructors}
-\label{redirectingFactoryConstructors}
+\LMLabel{redirectingFactoryConstructors}
 
+\LMHash{}
 A {\em redirecting factory constructor} specifies a call to a constructor of another class that is to be used whenever the redirecting constructor is called.
 
 \begin{grammar}
@@ -1256,16 +1418,19 @@
     .
 \end{grammar}
 
+\LMHash{}
 Calling a redirecting factory constructor $k$ causes the constructor $k^\prime$ denoted by $type$ (respectively, $type.identifier$) to be called with the actual arguments passed to $k$, and returns the result of $k^\prime$ as the result of $k$.  The resulting constructor call is governed by the same rules as an instance creation expression using \NEW{} (\ref{instanceCreation}). 
 
 \commentary{
 It follows that if $type$ or $type.id$ are not defined, or do not refer to a class or constructor, a dynamic error occurs, as with any other undefined constructor call. The same holds if $k$ is called with fewer required parameters or more positional parameters than $k^\prime$ expects, or if $k$  is called with a named parameter that is not declared by $k^\prime$.
 }
 
+\LMHash{}
 It is a compile-time error if $k$ explicitly specifies a default value for an optional parameter.\commentary{
 Default values specified in $k$ would be ignored, since it is the {\em actual} parameters that are passed to $k^\prime$. Hence, default values are disallowed.
 }
 
+\LMHash{}
 It is a run-time error if a redirecting factory constructor redirects to itself, either directly or indirectly via a sequence of redirections. %does not redirect to a non-redirecting factory constructor or to a generative constructor in a finite number of steps.
 
 % Make this a runtime error so deferred loading works
@@ -1275,6 +1440,7 @@
 } 
 
 
+\LMHash{}
 It is a static warning if $type$ does not denote a class accessible in the current scope; if $type$ does denote such a class $C$ it is a static warning if the referenced constructor (be it $type$ or $type.id$) is not a constructor of $C$.
 
 \commentary{
@@ -1316,20 +1482,24 @@
 }
 %\end{dartCode}
 
+\LMHash{}
 It is a compile-time error if $k$ is prefixed with the \CONST{} modifier but $k^\prime$ is not a constant constructor (\ref{constantConstructors}).
 
+\LMHash{}
 It is a static warning if the function type of $k^\prime$ is not a subtype of the type of $k$.
 
 \commentary{
 This implies that the  resulting object conforms to the interface of the immediately enclosing class of $k$.
 }
 
+\LMHash{}
 It is a static type warning if any of the type arguments to $k^\prime$ are not subtypes of the bounds of the corresponding formal type parameters of $type$.
 
 
 \subsubsection{Constant Constructors}
-\label{constantConstructors}
+\LMLabel{constantConstructors}
 
+\LMHash{}
 A {\em constant constructor} may be used to create compile-time constant  (\ref{constants}) objects. A constant constructor is prefixed by the reserved word \CONST{}. 
 
 \begin{grammar}
@@ -1345,22 +1515,27 @@
 
 \commentary{All the work of a constant constructor must be handled via its initializers.}
 
+\LMHash{}
 It is a compile-time error if a constant constructor is declared by a class that has a non-final instance variable.  
 
 \commentary{
 The above refers to both locally declared and inherited instance variables.
 }
 
+\LMHash{}
 It is a compile-time error if a constant constructor is declared by a class $C$ if any instance variable declared in $C$ is initialized with an expression that is not a constant expression.
 
 \commentary {
 A superclass of $C$ cannot declare such an initializer either, because it must necessarily declare constant constructor as well (unless it is \code{Object}, which declares no instance variables).
 }
 
+\LMHash{}
 The superinitializer that appears, explicitly or implicitly, in the initializer list of a constant constructor must specify a constant constructor of the superclass of the immediately enclosing class or a compile-time error occurs.
 
+\LMHash{}
 Any expression that appears within the initializer list of a constant constructor must be a potentially constant expression, or a compile-time error occurs. 
 
+\LMHash{}
 A {\em potentially constant expression} is an expression $e$ that would be a valid constant expression if all formal parameters of $e$'s immediately enclosing constant constructor were treated as compile-time constants that were guaranteed to evaluate to an integer, boolean or string value as required by their immediately enclosing superexpression.
 
 \commentary{
@@ -1424,15 +1599,18 @@
 Careful readers will of course worry about cases where the actual arguments to \code{C()} are constants, but are not numeric. This is precluded by the following rule, combined with the rules for evaluating constant objects (\ref{const}).
 }
 
+\LMHash{}
 When invoked from a constant object expression, a constant constructor must throw an exception if any of its actual parameters is a value that would prevent one of the potentially constant expressions within it from being a valid compile-time constant.
 
 %Discuss External Constructors in ne subsubsection here
 
 \subsection{Static Methods}
-\label{staticMethods}
+\LMLabel{staticMethods}
 
+\LMHash{}
 {\em Static methods} are functions, other than getters or setters, whose declarations are immediately contained within a class declaration and that are declared \STATIC{}. The static methods of a class $C$ are those static methods declared by $C$.
 
+\LMHash{}
 The effect of a static method declaration in class $C$ is to add an instance method with the same name and signature to the \code{Type} object for class $C$ that forwards (\ref{functionDeclarations})  to the static method.
 
 \rationale{
@@ -1441,6 +1619,7 @@
 Of course, the entire notion of static methods is debatable, but it is retained here because so many programmers are familiar with it. Dart static methods may be seen as functions of the enclosing library. 
 }
 
+\LMHash{}
 It is a static warning if a class $C$ declares a static method named $n$ and has a setter named $n=$. 
 %It is a static warning if a class has a static method with the same name as a static member of one of its superclasses.
 
@@ -1453,8 +1632,9 @@
 
 
 \subsection{Static Variables}
-\label{staticVariables}
+\LMLabel{staticVariables}
 
+\LMHash{}
 {\em Static variables} are variables whose declarations are immediately contained within a class declaration and that are declared \STATIC{}. The static variables of a class $C$ are those static variables declared by $C$.
 
 %A static variable declaration  of one of the forms \code{\STATIC{} $T$ $v$;},  \code{\STATIC{} $T$ $v$ = $e$;} ,  \code{\STATIC{} \CONST{} $T$ $v$ = $e$;}  or \code{\STATIC{} \FINAL{} $T$ $v$ = $e$;} always induces an implicit static getter function (\ref{getters}) with signature 
@@ -1485,7 +1665,7 @@
 %Extrernal static functions, getters, setters
 
 %\subsubsection{Evaluation of Implicit Static Variable Getters}
-%\label{evaluationOfStaticVariableGetters}
+%\LMLabel{evaluationOfStaticVariableGetters}
 
 %Let $d$ be the declaration of a static variable $v$. The implicit getter method of $v$ executes as follows: 
 %\begin{itemize}
@@ -1498,14 +1678,16 @@
 
 
 \subsection{Superclasses}
-\label{superclasses}
+\LMLabel{superclasses}
 
+\LMHash{}
 The superclass of a class $C$ that has a with clause \code{\WITH{} $M_1, \ldots, M_k$} and an extends clause \code{\EXTENDS{} S} is the application of mixin (\ref{mixins}) $M_k* \cdots * M_1$  to S.  If no \WITH{} clause is specified then  the \EXTENDS{} clause of a class $C$ specifies its superclass. If no \EXTENDS{} clause is specified, then either:
 \begin{itemize}
 \item $C$ is \code{Object}, which has no superclass. OR
 \item Class $C$ is  deemed to have an \EXTENDS{} clause of the form \code{\EXTENDS{} Object}, and the rules above apply. 
 \end{itemize}
 
+\LMHash{}
 It is a compile-time error to specify an \EXTENDS{} clause for class \code{Object}.
 
 \begin{grammar}
@@ -1519,6 +1701,7 @@
 %This means that in a generic class, the type parameters of the generic are available in the superclass clause.
 %} 
 
+\LMHash{}
 %It is a compile-time error if  the \EXTENDS{} clause of a class $C$ includes a type expression that does not denote a class available in the lexical scope of $C$. 
 It is a compile-time error if  the \EXTENDS{} clause of a class $C$ specifies an enumerated type (\ref{enums}), a malformed  type or a deferred type (\ref{staticTypes}) as a superclass.
 % too strict? Do we e want extends List<Undeclared> to work as List<dynamic>? 
@@ -1535,23 +1718,26 @@
 \end{dartCode}
 
 
+\LMHash{}
 A class $S$ is {\em a superclass} of a class $C$ iff either:
 \begin{itemize}
 \item $S$ is the superclass of $C$, or 
 \item $S$ is a superclass of a class $S^{\prime}$ and $S^{\prime}$ is a superclass of $C$. 
 \end{itemize}
 
+\LMHash{}
 It is a compile-time error if a class $C$ is a superclass of itself.
 
 
     
  
  \subsubsection{Inheritance and Overriding}
- \label{inheritanceAndOverriding}
+ \LMLabel{inheritanceAndOverriding}
 
 
 %A class $C$  {\em inherits} any accessible instance members of its superclass that are not overridden by members declared in $C$. 
 
+\LMHash{}
 Let $C$ be a class,  let $A$ be a superclass of $C$, and let  $S_1 \ldots S_k$ be superclasses of $C$ that are also subclasses of $A$. $C$ {\em inherits} all accessible instance  members of  $A$ that have not been overridden by a declaration in $C$ or in at least one of $S_1 \ldots S_k$.
 
 \rationale {
@@ -1560,8 +1746,10 @@
 the superclass chain of $S$ includes a class declared in $L_1$.
 }
 
+\LMHash{}
 A class may override instance members that would otherwise have been inherited from its superclass. 
 
+\LMHash{}
 Let $C = S_0$ be a class declared in library $L$, and let $\{S_1 \ldots S_k\}$ be the set of all superclasses of $C$, where $S_i$ is the superclass of $S_{i-1}$ for $i \in 1 .. k$. Let $C$ declare a member $m$, and let  $m^\prime$ be a member of $S_j, j  \in 1 .. k$,  that has the same name as $m$, such that $m^\prime$ is accessible to $L$.  Then $m$ overrides $m^\prime$ if $m^\prime$ is not already overridden by a member of at least one of $S_1 \ldots S_{j-1}$ and neither $m$ nor $m^\prime$ are fields.
 
 %Let $C$ be a class declared in library $L$, with superclass $S$ and let $C$ declare an instance member $m$, and  assume $S$ declares an instance member $m^\prime$ with the same name as $m$. Then $m$ {\em overrides} $m^\prime$ iff $m^\prime$ is accessible (\ref{privacy}) to $L$, $m$ has the same name as  $m^\prime$  and neither $m$ nor $m^\prime$ are fields.
@@ -1571,6 +1759,7 @@
 \rationale{Again, a local definition of overriding would be preferable, but fails to account for library privacy.
 }
 
+\LMHash{}
 Whether an override is legal or not is described elsewhere in this specification (see \ref{instanceMethods}, \ref{getters} and \ref{setters}). 
 
 \commentary{For example getters may not legally override methods and vice versa. Setters never override methods or getters, and vice versa, because their names always differ.
@@ -1584,6 +1773,7 @@
 Note that instance variables do not participate in the override relation, but the getters and setters they induce do. Also, getters don't override setters and vice versa.  Finally, static members never override anything.
 }
 
+\LMHash{}
 It is a static warning if a non-abstract class inherits an abstract method.
 
 \commentary {
@@ -1631,9 +1821,10 @@
 %Can we have abstract getters and setters?
 
 \subsection{ Superinterfaces}
-\label{superinterfaces}
+\LMLabel{superinterfaces}
 % what about rules about classes that fail to implement their interfaces?
 
+\LMHash{}
 A class has a set of direct superinterfaces. This set includes the interface of its superclass and the interfaces specified in the the \IMPLEMENTS{}  clause of the class.
 % and any superinterfaces specified by interface injection (\ref{interfaceInjection}).  \Q{The latter needs to be worded carefully - when do interface injection clauses execute and in what scope?}
 
@@ -1643,6 +1834,7 @@
     .
 \end{grammar}
 
+\LMHash{}
 It is a compile-time error if  the \IMPLEMENTS{}  clause of a class $C$ specifies a type variable as a superinterface. It is a compile-time error if  the  \IMPLEMENTS{} clause of a class $C$ specifies an enumerated type (\ref{enums}),  a malformed type or deferred type (\ref{staticTypes}) as a superinterface  It is a compile-time error if the \IMPLEMENTS{} clause of a class $C$ specifies type \DYNAMIC{} as a superinterface. It is a compile-time error if  the  \IMPLEMENTS{} clause of a class $C$ specifies  a type $T$ as a superinterface more than once.
 It is a compile-time error if the superclass of a class $C$ is specified as a superinterface of $C$.
 
@@ -1650,8 +1842,10 @@
 One might argue that it is harmless to repeat a type in the superinterface list, so why make it an error? The issue is not so much that the situation described in program source is erroneous, but that it is pointless. As such, it is an indication that the programmer may very well have meant to say something else - and that is a mistake that should be called to her or his attention.  Nevertheless, we could simply issue a warning; and perhaps we should and will. That said, problems like these are local and easily corrected on the spot, so we feel justified in taking a harder line. 
 }
 
+\LMHash{}
 It is a compile-time error if the interface of a class $C$ is a superinterface of itself.
 
+\LMHash{}
 Let $C$ be a concrete class that does not declare its own \code{noSuchMethod()} method.
 It is a static warning if the implicit interface of  $C$ includes an instance member $m$ of type $F$ and $C$ does not declare or inherit a corresponding non-abstract instance member $m$ of type $F'$ such that $F' <: F$. 
 
@@ -1670,6 +1864,7 @@
 noSuchMethod(inv) =$>$ \SUPER.noSuchMethod(inv);
 \end{dartCode}
 
+\LMHash{}
 It is a static warning if the implicit interface of  a class $C$ includes an instance member $m$ of type $F$ and $C$ declares or inherits a corresponding instance member $m$ of type $F'$ if  $F'$ is not a subtype of $F$. 
 
 \rationale{
@@ -1704,23 +1899,27 @@
 
 
 \section{Interfaces}
-\label{interfaces}
+\LMLabel{interfaces}
 
+\LMHash{}
 An {\em interface} defines how one may interact with an object. An interface has methods, getters and setters and a set of superinterfaces.
 
 \subsection{Superinterfaces}
-\label{interfaceSuperinterfaces}
+\LMLabel{interfaceSuperinterfaces}
 
+\LMHash{}
 An interface has a set of direct superinterfaces. 
 
+\LMHash{}
 An interface $J$ is a superinterface of an interface $I$ iff either $J$ is a direct superinterface of $I$ or $J$ is a superinterface of a direct superinterface of $I$.
 
 
 
 
 \subsubsection{Inheritance and Overriding}
-\label{interfaceInheritanceAndOverriding}
+\LMLabel{interfaceInheritanceAndOverriding}
 
+\LMHash{}
 Let $J$ be an interface and $K$ be a library. We define $inherited(J, K)$  to be the set of members $m$ such that   all of the following hold:
 \begin{itemize}
 \item $m$ is accessible to $K$ and 
@@ -1732,6 +1931,7 @@
 \item $m$ is not overridden by $J$.
 \end{itemize}
 
+\LMHash{}
 Furthermore, we define $overrides(J, K)$  to be the set of members $m^\prime$ such that  all of the following hold:
 \begin{itemize}
 \item $J$ is the implicit interface of a class $C$.
@@ -1746,10 +1946,13 @@
 \end{itemize}
 
 
+\LMHash{}
 Let $I$ be the implicit interface of a class $C$ declared in library $L$.  $I$ {\em inherits} all members of $inherited(I, L)$ and $I$ {\em overrides} $m^\prime$ if  $m^\prime \in overrides(I, L)$. 
 
+\LMHash{}
 All the static warnings pertaining to the overriding of instance members given in section \ref{classes} above hold for overriding between interfaces as well.
 
+\LMHash{}
 It is a static warning if $m$ is a method and $m^\prime$ is a getter, or if $m$ is a getter and $m^\prime$ is a method.
 
 
@@ -1760,10 +1963,13 @@
 
 % tighten definition? do we need chain as for classes?  Definition for interface override?
 
+\LMHash{}
 However, if the above rules would cause multiple members $m_1, \ldots,  m_k$ with the same name $n$ to be inherited (because identically named members existed in several superinterfaces) then at most one member is inherited. 
 
+\LMHash{}
 If some but not all of the $m_i, 1 \le i \le k$ are getters none of the $m_i$ are inherited, and a static warning is issued.
 
+\LMHash{}
 Otherwise, if the static types $T_1, \ldots,  T_k$ of the members $m_1, \ldots,  m_k$  are not identical, then there must be a member $m_x$ such that $T_x <: T_i, 1 \le x \le k$ for all  $i  \in 1..k$, or a static type warning occurs. The member that is inherited  is $m_x$, if it exists; otherwise:
  let $numberOfPositionals(f)$ denote the number of positional parameters of a function $f$, and let $numberOfRequiredParams(f)$ denote the number of required parameters of a function $f$. Furthermore, let $s$ denote the set of all named parameters of the $m_1, \ldots,  m_k$.  Then let 
 
@@ -1771,6 +1977,7 @@
 
 $r = min(numberOfRequiredParams(m_i)), i \in 1..k$. 
 
+\LMHash{}
 Then $I$ has a method named $n$, with $r$ required parameters of type \DYNAMIC{}, $h$  positional parameters of type \DYNAMIC{}, named parameters $s$ of type  \DYNAMIC{} and  return type  \DYNAMIC{}.  
 
 
@@ -1787,11 +1994,13 @@
 % Need warnings if overrider conflicts with overriddee either because signatures are incompatible or because done is a method and one is a getter or setter.
 
 \section{Mixins}
-\label{mixins} 
+\LMLabel{mixins} 
 
 
+\LMHash{}
 A mixin describes the difference between a class and its superclass. A mixin is always derived from an existing class declaration. 
 
+\LMHash{}
 It is a compile-time error if a declared or derived mixin refers to \SUPER{}. It is a compile-time error if a declared or derived mixin explicitly declares a constructor. It is a compile-time error if a mixin is derived from a class whose superclass is not \code{Object}.
 
 \rationale{
@@ -1807,8 +2016,9 @@
 }
 
 \subsection{Mixin Application}
-\label{mixinApplication}
+\LMLabel{mixinApplication}
 
+\LMHash{}
 A mixin may be applied to a superclass, yielding a new class. Mixin application occurs when a mixin is mixed into a class declaration via its \WITH{} clause.  The mixin application may be used to extend a class per section (\ref{classes}); alternately, a class may be defined as a mixin application as described in this section.   It is a compile-time error if the \WITH{} clause of a mixin application $C$ includes a deferred type expression.
 
 
@@ -1821,21 +2031,28 @@
     .
 \end{grammar}
 
+\LMHash{}
 A  mixin application of the form  \code{$S$ \WITH{} $M$;} defines a class  $C$ with superclass  $S$. 
 
+\LMHash{}
 A  mixin application of the form  \code{$S$ \WITH{} $M_1, \ldots, M_k$;} defines a class  $C$ whose superclass is the application of the mixin composition (\ref{mixinComposition}) $M_{k-1} * \ldots * M_1$ to $S$. 
 
+\LMHash{}
 In both cases above, $C$ declares the same instance members as $M$ (respectively, $M_k$). If any of the instance fields of $M$ (respectively, $M_k$) have initializers, they are executed in the scope of $M$ (respectively, $M_k$) to initialize the corresponding fields of $C$. 
 
+\LMHash{}
 For each generative constructor named $q_i(T_{i1}$ $ a_{i1}, \ldots , T_{ik_i}$ $ a_{ik_i}), i \in 1..n$ of $S$, $C$ has an implicitly declared constructor named
 $q'_i = [C/S]q_i$ of the form 
 
 $q'_i(a_{i1}, \ldots , a_{ik_i}):\SUPER(a_{i1}, \ldots , a_{ik_i});$.
 
+\LMHash{}
 If the mixin application declares support for interfaces, the resulting class implements those interfaces.
 
+\LMHash{}
 It is a compile-time error if $S$ is an enumerated type (\ref{enums}) or a malformed type. It is a compile-time error if $M$ (respectively, any of $M_1, \ldots, M_k$) is an enumerated type (\ref{enums}) or a malformed type. It is a compile time error if a well formed mixin cannot be derived from $M$ (respectively, from each of $M_1, \ldots, M_k$). 
 
+\LMHash{}
 Let $K$ be a class declaration  with the same constructors, superclass and interfaces as $C$,  and the instance members declared by $M$ (respectively $M_1, \ldots, M_k$). It is a static warning if the declaration of $K$ would cause a static warning.  It is a compile-time error if the declaration of $K$ would cause a compile-time error.
 
 \commentary{
@@ -1843,17 +2060,19 @@
 
 }
 
+\LMHash{}
 The effect of a class definition of the form \code{\CLASS{} $C$ = $M$; } or the form 
  \code{\CLASS{} $C<T_1, \ldots, T_n>$ = $M$; } in library $L$  is to introduce the name $C$ into the scope of $L$, bound to the class (\ref{classes}) defined by the mixin application $M$. The name of the class is also set to $C$. Iff the  class is prefixed by the built-in identifier \ABSTRACT{}, the class being defined is an abstract class.
  
 
 \subsection{Mixin Composition}
-\label{mixinComposition}
+\LMLabel{mixinComposition}
 
 \rationale{
 Dart does not directly support mixin composition, but the concept is useful when defining how the superclass of a class with a mixin clause is created.
 }
 
+\LMHash{}
 The {\em composition of two mixins}, $M_1<T_1 \ldots T_{k_{M_1}}>$ and $M_2<U_1  \ldots U_{k_{M_2}}>$, written $M_1<T_1 \ldots T_{k_{M_1}}> * M_2<U_1  \ldots U_{k_{M_2}}>$ defines an anonymous mixin such that for any class $S<V_1 \ldots V_{k_S}>$, the application of 
 
 $M_1<T_1 \ldots T_{k_{M_1}}> * M_2<U_1  \ldots U_{k_{M_2}}>$  
@@ -1878,6 +2097,7 @@
 The classes produced by mixin composition are regarded as abstract because they cannot be instantiated independently. They are only introduced as anonymous superclasses of ordinary class declarations and mixin applications. Consequently, no warning is given if a mixin composition includes abstract members, or incompletely implements an interface.
 }
 
+\LMHash{}
 Mixin composition is associative.
 
 
@@ -1887,8 +2107,9 @@
 
 
 \section{Enums}
-\label{enums}
+\LMLabel{enums}
 
+\LMHash{}
 An {\em enumerated type}, or {\em enum}, is used to represent a fixed number of constant values.
 
 \begin{grammar}
@@ -1897,6 +2118,7 @@
     .
 \end{grammar}
 
+\LMHash{}
 The declaration of an enum of the form \code{metadata \ENUM{} E \{ id$_0$, \ldots id$_{n-1}$\};}
 has the same effect as a class declaration
 
@@ -1917,8 +2139,9 @@
 }
 
 \section{Generics}
-\label{generics}
+\LMLabel{generics}
 
+\LMHash{}
 A class declaration (\ref{classes}) or type alias (\ref{typedef}) 
 $G$ may be {\em generic}, that is, $G$ may have formal type parameters declared. A generic declaration induces a family of declarations, one for each set of actual type parameters provided in the program. 
 
@@ -1931,8 +2154,10 @@
     .
 \end{grammar}
 
+\LMHash{}
 A type parameter $T$ may be suffixed with an \EXTENDS{} clause that specifies the {\em upper bound} for $T$. If no  \EXTENDS{} clause is present, the upper bound is \code{Object}.  It is a static type warning if a type parameter is a supertype of its upper bound. The bounds of type variables are a form of type annotation and have no effect on execution in production mode.
 
+\LMHash{}
 The type parameters of a generic $G$ are in scope in the bounds of all of the type parameters of $G$. The type parameters of a generic class declaration $G$ are also in scope in the \EXTENDS{} and \IMPLEMENTS{} clauses of $G$ (if these exist) and in the body of $G$.   However, a type parameter is considered to be a malformed type when referenced by a static member.
 
 \rationale{
@@ -2008,7 +2233,7 @@
 
 
 %\subsection{Interface Injection}
-%\label{interfaceInjection}
+%\LMLabel{interfaceInjection}
 
 %An {\em interface injection declaration} causes a pre-existing class $S$ to be considered a subinterface of another interface $I$. It is a static type warning if $S$ is not a structural subtype of $I$. However, the subinterface relations implied by the interface injection declaration are considered to hold by both the typechecker and the runtime, regardless.
 
@@ -2038,8 +2263,9 @@
 
 
 \section{Metadata}
-\label{metadata}
+\LMLabel{metadata}
 
+\LMHash{}
 Dart supports metadata which is used to attach user defined annotations to program structures.  
 
 \begin{grammar}
@@ -2048,12 +2274,14 @@
     .
 \end{grammar}
 
+\LMHash{}
 Metadata consists of a series of annotations, each of which begin with the character @, followed by  a constant expression that starts with an identifier. It is a compile time error if the expression is not one of the following:
 \begin{itemize}
 \item A reference to a compile-time constant variable.
 \item A call to a constant constructor.
 \end{itemize}
 
+\LMHash{}
 Metadata is associated with the abstract syntax tree of the program construct $p$ that immediately follows the metadata, assuming $p$ is not itself metadata or a comment. Metadata can be retrieved at runtime via a reflective call, provided the annotated program construct $p$ is accessible via reflection.
 
 \commentary{
@@ -2068,14 +2296,17 @@
 It is possible to associate metadata with constructs that may not be accessible via reflection, such as local variables (though it is conceivable that in the future, richer reflective libraries might provide access to these as well).  This is not as useless as it might seem. As noted above, the data can be retrieved statically if source code is available.
 }
 
+\LMHash{}
 Metadata can appear before a library, part header, class, typedef, type parameter, constructor, factory, function, field, parameter, or variable declaration and before an import, export or part directive.
 
+\LMHash{}
 The constant expression given in an annotation  is type checked and evaluated in the scope surrounding the declaration being annotated.  
 
 
 \section{Expressions}
-\label{expressions}
+\LMLabel{expressions}
 
+\LMHash{}
 An {\em expression} is a fragment of Dart code that can be evaluated at run time to yield a {\em value}, which is always an object. Every expression has an associated static type (\ref{staticTypes}). Every value has an associated dynamic type (\ref{dynamicTypeSystem}).
 
 
@@ -2110,6 +2341,7 @@
     
 \end{grammar}   
 
+\LMHash{}
 An expression $e$ may always be enclosed in parentheses, but this never has any semantic effect on $e$.
 
 \commentary{
@@ -2117,8 +2349,9 @@
 }
 
  \subsubsection{Object Identity}
- \label{objectIdentity}
+ \LMLabel{objectIdentity}
  
+\LMHash{}
 The predefined Dart function \cd{identical()} is defined such that \code{identical($c_1$, $c_2$)} iff:
  \begin{itemize}
  \item $c_1$  evaluates to either \NULL{} or  an instance of \code{bool} and \code{$c_1$ == $c_2$}, OR
@@ -2152,10 +2385,12 @@
     
     
 \subsection{Constants}
-\label{constants}
+\LMLabel{constants}
 
+\LMHash{}
 A {\em constant expression} is an expression whose value can never change, and that can be evaluated entirely at compile time. 
 
+\LMHash{}
 A constant expression is one of the following:
 \begin{itemize}
 \item A literal number (\ref{numbers}).
@@ -2190,6 +2425,7 @@
 
 % designed so constants do not depend on check diode being on or not.
 
+\LMHash{}
 It is a compile-time error if an expression is required to be a constant expression but its evaluation  would raise an exception. 
 
 % so, checked mode? analyzers? editor/development compilers?
@@ -2232,6 +2468,7 @@
 \end{enumerate}
 }
 
+\LMHash{}
 It is a compile-time error if the value of a compile-time constant expression depends on itself.
 
 \commentary{
@@ -2261,8 +2498,9 @@
 
 
 \subsection{Null}
-\label{null}
+\LMLabel{null}
 
+\LMHash{}
 The reserved word \NULL{} denotes the {\em null object}.
 %\Q{Any methods, such as \code{isNull}?}
 
@@ -2272,9 +2510,11 @@
 .
 \end{grammar}
 
+\LMHash{}
 The null object is the sole instance of the built-in class \code{Null}. Attempting to instantiate \code{Null} causes a run-time error. It is a compile-time error for a class to attempt to extend or implement \code{Null}. 
 Invoking a method on \NULL{}  yields a \code{NoSuchMethodError} unless the method is explicitly implemented by class \code{Null}.
 
+\LMHash{}
 The static type of \NULL{} is $\bot$.
 
 \rationale{The decision to use $\bot$ instead of \code{Null} allows \NULL{} to be be assigned everywhere without complaint by the static checker. 
@@ -2282,8 +2522,9 @@
 
 
 \subsection{Numbers}
-\label{numbers}
+\LMLabel{numbers}
 
+\LMHash{}
 A {\em numeric literal} is either a decimal or hexadecimal integer of arbitrary size, or a decimal double.
 
 \begin{grammar}
@@ -2309,24 +2550,30 @@
     .
  \end{grammar}
  
+\LMHash{}
 If a numeric literal begins with the prefix `0x' or `0X', it denotes the hexadecimal integer represented by the part of the literal following `0x' (respectively `0X'). Otherwise, if the numeric literal does not include a decimal point  it denotes a decimal integer.  Otherwise, the numeric literal  denotes a 64 bit double precision floating point number as specified by the IEEE 754 standard. 
 
+\LMHash{}
 In principle, the range of integers supported by a Dart implementations is unlimited. In practice, it is limited by available memory. Implementations may also be limited by other considerations.
 
 \commentary{
 For example, implementations may choose to limit the range to facilitate efficient compilation to Javascript. These limitations should be relaxed as soon as technologically feasible.
 }
 
+\LMHash{}
 It is a compile-time error for a class to attempt to extend or implement \code{int}. It is a compile-time error for a class to attempt to extend or implement \code{double}. It is a compile-time error for any type other than the types \code{int} and \code{double} to attempt to extend or implement \code{num}.
 
+\LMHash{}
 An {\em integer literal} is either a hexadecimal integer literal or a  decimal integer literal. Invoking the getter \code{runtimeType} on an integer literal returns the \code{Type} object that is the value of the expression \code{int}. The static type of an integer literal is \code{int}. 
 
+\LMHash{}
 A {\em literal double} is a numeric literal that is not an integer literal. Invoking the getter \code{runtimeType} on a literal double returns the \code{Type} object that is the value of the expression \code{double}.
 The static type of a literal double is \code{double}.
     
 \subsection{Booleans}
-\label{booleans}
+\LMLabel{booleans}
 
+\LMHash{}
 The reserved words \TRUE{} and \FALSE{} denote objects that represent the boolean values true and false respectively. They are the {\em boolean literals}.
 
 \begin{grammar}
@@ -2335,17 +2582,20 @@
     .
 \end{grammar}
 
+\LMHash{}
 Both  \TRUE{} and \FALSE{} implement the built-in class \code{bool}.  It is a compile-time error for a class to attempt to extend or implement\code{ bool}. 
 
 \commentary{
 It follows that the two boolean literals are the only two instances of \code{bool}. 
 }
 
+\LMHash{}
 Invoking the getter \code{runtimeType} on a boolean literal returns the \code{Type} object that is the value of the expression \code{bool}. The static type of a boolean literal is \code{bool}.
 
 \subsubsection{Boolean Conversion}
-\label{booleanConversion}
+\LMLabel{booleanConversion}
 
+\LMHash{}
 {\em Boolean conversion} maps any object $o$ into a boolean. Boolean conversion is  defined by the function application
 
 \begin{dartCode}
@@ -2368,8 +2618,9 @@
  }
     
 \subsection{Strings}
-\label{strings}
+\LMLabel{strings}
 
+\LMHash{}
 A {\em string} is a sequence of UTF-16 code units. 
 
 \rationale{
@@ -2381,6 +2632,7 @@
     .
 \end{grammar}
 
+\LMHash{}
 A string can be either a sequence of single line strings or a multiline string. 
 
 \begin{grammar}
@@ -2391,6 +2643,7 @@
     .
 \end{grammar}
 
+\LMHash{}
 A single line string is delimited by either matching single quotes or matching double quotes.  
 
 \commentary{
@@ -2400,6 +2653,7 @@
 \commentary{The grammar ensures that a single line string cannot span more than one line of source code, unless it includes an interpolated expression that spans multiple lines.
 }
 
+\LMHash{}
 Adjacent 
 %single line 
 strings are implicitly concatenated to form a single string literal.
@@ -2472,6 +2726,7 @@
    
 \end{grammar}
 
+\LMHash{}
 Multiline strings are delimited by either matching triples of single quotes or matching triples of double quotes. If the first line of a multiline string consists solely of the whitespace characters defined by the production {\em WHITESPACE}  \ref{lexicalRules}), possibly prefixed by $\backslash$, then that line is ignored, including the new line at its end.
 
  
@@ -2479,6 +2734,7 @@
  The idea is to ignore whitespace, where whitespace is defined as tabs, spaces and newlines. These can be represented directly, but since for most characters prefixing by backslash is an identity, we allow those forms as well.
  }
 
+\LMHash{}
 Strings support escape sequences for special characters. The escapes are:
 \begin{itemize}
 \item  $\backslash$n for newline, equivalent to $\backslash$x0A.
@@ -2496,8 +2752,10 @@
 \item Otherwise, $\backslash k$ indicates the character $k$ for any $k$ not in $\{n, r, f, b, t, v, x, u\}$.
  \end{itemize}
 
+\LMHash{}
 Any string may be prefixed with the character `r', indicating that it is a {\em raw string}, in which case no escapes or interpolations are recognized.
 
+\LMHash{}
 It is a compile-time error if a non-raw string literal contains a character sequence of the form $\backslash$x that is not followed by a sequence of two hexadecimal digits. It is a compile-time error if a non-raw string literal  contains a character sequence of the form $\backslash$u that is not followed by either a sequence of four hexadecimal digits, or by curly brace delimited sequence of hexadecimal digits.
 
 
@@ -2528,11 +2786,13 @@
 
  \end{grammar}
  
+\LMHash{}
 All string literals implement the built-in class \code{String}. It is a compile-time error for a class to attempt to extend or implement \code{String}. Invoking the getter \code{runtimeType} on a string literal returns the \code{Type} object that is the value of the expression \code{String}. The static type of a string literal is \code{String}.
 
 \subsubsection{String Interpolation}
-\label{stringInterpolation}
+\LMLabel{stringInterpolation}
 
+\LMHash{}
 It is possible to embed expressions within non-raw string literals, such that the these expressions are evaluated, and the resulting values are converted into strings and concatenated with the enclosing string. This process is known as {\em string interpolation}.
 
  \begin{grammar}
@@ -2544,17 +2804,20 @@
 \commentary{The reader will note that the expression inside the interpolation could itself include strings, which could again be interpolated recursively. 
 }
 
+\LMHash{}
 An unescaped \$ character in a string signifies the beginning of an interpolated expression.  The \$ sign may be followed by either:
 \begin{itemize}
 \item A single identifier $id$ that must not contain the \$ character. 
 \item An expression $e$ delimited by curly braces.
 \end{itemize}
 
+\LMHash{}
 The form \code{\$id} is equivalent to the form \code{\$\{id\}}.  An interpolated string \code{`$s_1$\$\{$e$\}$s_2$'}  is equivalent to the concatenation of the  strings \code{`$s_1$'},  \code{$e$.toString()} and  \code{$`s_2$'}. Likewise an interpolated string \code{``$s_1$\$\{e\}$s_2$''} is equivalent to the concatenation of the strings \code{``$s_1$''}, \code{$e$.toString()} and  \code{``$s_2$''}.
 
 \subsection{Symbols}
-\label{symbols}
+\LMLabel{symbols}
 
+\LMHash{}
 A {\em symbol literal} denotes the name of a declaration in a Dart program. 
 
 \begin{grammar}
@@ -2562,9 +2825,11 @@
       `\#'  (operator $|$ (identifier (`{\escapegrammar .}' identifier)*))  .
 \end{grammar}
 
+\LMHash{}
 A symbol literal \code{\#id} where \code{id} does not begin with an underscore ('\code{\_}')  is equivalent to the expression \code{\CONST{} Symbol('id')}.  
 
-A symbol literal \code{\#\_id} evaluates to the object that would be returned by the call \code{mirror.getPrivateSymbol('id')} where mirror is an instance of the class \code{LibraryMirror} defined in the library \code{dart:mirrors}, reflecting the current library. 
+\LMHash{}
+A symbol literal \code{\#\_id} evaluates to the object that would be returned by the call \code{mirror.getPrivateSymbol('id')} where mirror is an instance of the class \code{LibraryMirror} defined in the library \code{dart:mirrors}, reflecting the current library.
 
 \rationale{
 One may well ask what is the motivation for introducing literal symbols? In some languages, symbols are canonicalized whereas strings are not. However literal strings are already canonicalized in Dart.  Symbols are slightly easier to type compared to strings and their use can become strangely addictive, but this is not nearly sufficient justification for adding a literal form to the language. The primary motivation is related to the use of reflection and a web specific practice known as minification. 
@@ -2572,11 +2837,13 @@
 Minification compresses identifiers consistently throughout a program in order to reduce download size.  This practice poses difficulties for reflective programs that refer to program declarations via strings. A string will refer to an identifier in the source, but the identifier will no longer be used in the minified code, and reflective code using these truing would fail.  Therefore, Dart reflection uses  objects of type \code{Symbol} rather than strings. Instances of \code{Symbol} are guaranteed to be stable with repeat to minification. Providing a literal form for symbols makes reflective code easier to read and write. The fact that symbols are easy to type and can often act as convenient substitutes for enums are secondary benefits.
 }
 
+\LMHash{}
 The static type of a symbol literal is \code{Symbol}.
 
 \subsection{Lists}
-\label{lists}
+\LMLabel{lists}
 
+\LMHash{}
 A {\em list literal} denotes a list, which is an integer indexed collection of objects. 
 
 \begin{grammar}
@@ -2585,28 +2852,33 @@
     .
 \end{grammar}
 
+\LMHash{}
 A list may contain zero or more objects. The number of elements in a list is its size. A list has an associated set of indices.  An empty list has an empty set of indices. A non-empty list has the index set $\{0 \ldots n -1\}$ where $n$ is the size of the list. It is a runtime error to attempt to access a list using an index that is not a member of its set of indices.
 
 
+\LMHash{}
 If a list literal begins with the reserved word \CONST{}, it is a {\em constant list literal} which is a compile-time constant (\ref{constants}) and therefore evaluated at compile-time. Otherwise, it is a {\em run-time list literal} and it is evaluated at run-time. Only run-time list literals can be mutated
 after they are created. Attempting to mutate a constant list literal will result in a dynamic error.
 
+\LMHash{}
 It is a compile-time error if an element of a constant list literal is not a compile-time constant. It is a compile-time error if the type argument of a constant list literal includes a type parameter.
 \rationale{The binding of a type parameter is not known at compile-time, so we cannot use type parameters inside compile-time constants.}
 
+\LMHash{}
 The value of a constant list literal  \CONST{} $<E>[e_1\ldots e_n]$ is an object $a$ whose class implements the built-in class $List<E>$. The $i$th element of $a$ is $v_{i+1}$, where $v_i$ is the value of the compile-time expression $e_i$.  The value of a constant list literal  \CONST{} $[e_1 \ldots e_n]$ is defined as the value of the constant list literal \CONST{}$ < \DYNAMIC{}>[e_1\ldots e_n]$.
 
+\LMHash{}
 Let $list_1 =$ \CONST{} $<V>[e_{11} \ldots e_{1n}]$ and $list_2 =$  \CONST{} $<U>[e_{21} \ldots e_{2n}]$ be two constant list literals and let the  elements of $list_1$ and $list_2$  evaluate to  $o_{11} \ldots o_{1n}$ and $o_{21} \ldots o_{2n}$ respectively. Iff \code{identical($o_{1i}$, $o_{2i}$)} for $i \in 1.. n$ and $V = U$ then \code{identical($list_1$, $list_2$)}. 
 
 \commentary{In other words, constant list literals are canonicalized.}
 
+\LMHash{}
 A run-time list literal $<E>[e_1 \ldots e_n]$  is evaluated as follows:
 \begin{itemize}
 \item
 First, the expressions $e_1 \ldots e_n$ are evaluated in order they appear in the program, yielding objects $o_1 \ldots o_n$.
 \item A fresh instance  (\ref{generativeConstructors}) $a$, of size $n$,  whose class implements the built-in class $List<E>$ is allocated. 
 \item
-
 The operator \code{[]=} is invoked on $a$ with  first  argument $i$ and second argument
 %The $i$th element of $a$ is set to 
 $o_{i+1}, 0 \le i < n$.
@@ -2619,6 +2891,7 @@
 Note that this document does not specify an order in which the elements are set. This allows for parallel assignments into the list if an implementation so desires.  The order can only be observed in checked mode (and may not be relied upon): if element $i$ is not a subtype of the element type of the list, a dynamic type error will occur when $a[i]$ is assigned $o_{i-1}$. 
 }
 
+\LMHash{}
 A runtime list literal  $[e_1 \ldots e_n]$ is evaluated as  $< \DYNAMIC{}>[e_1\ldots e_n]$.
 
 
@@ -2627,6 +2900,7 @@
 $<List<int>>[[1, 2, 3], [4, 5, 6]]$ is a list with type parameter $List<int>$, containing two lists with type parameter  \DYNAMIC{}. 
 }
 
+\LMHash{}
 The static type of a list literal of the form  \CONST{}$ <E>[e_1\ldots e_n]$  or the form $<E>[e_1 \ldots e_n]$ is $List<E>$. The static type a list literal of the form  \CONST{} $[e_1 \ldots e_n$]  or the form $[e_1\ldots e_n$] is $List< \DYNAMIC{}>$.
 
 \rationale{
@@ -2637,8 +2911,9 @@
 % what about generics?
     
 \subsection{Maps}
-\label{maps}
+\LMLabel{maps}
 
+\LMHash{}
 A {\em map literal} denotes a map object. 
 
 \begin{grammar}
@@ -2652,22 +2927,28 @@
     .
 \end{grammar}
 
+\LMHash{}
 A {\em map literal} consists of zero or more entries. Each entry has a {\em key} and a {\em value}.  Each key and each value is denoted by an expression. 
  
+\LMHash{}
 If a map literal begins with the reserved word \CONST{}, it is a {\em constant map literal} which is a compile-time constant (\ref{constants}) and therefore evaluated at compile-time. Otherwise, it is a {\em run-time map literal} and it is evaluated at run-time. Only run-time map literals can be mutated
 after they are created. Attempting to mutate a constant map literal will result in a dynamic error.
 
+\LMHash{}
 It is a compile-time error if either a key or a value of an entry in a constant map literal is not a compile-time constant. It is a compile-time error if the key of an entry in a constant map literal is an instance of a class that implements the operator $==$ unless the key is a 
 %symbol, 
 string, an integer, a literal symbol or the result of invoking a constant constructor of class \cd{Symbol}. 
 It is a compile-time error if the type arguments of a constant map literal include a type parameter. 
 
+\LMHash{}
 The value of a constant map literal  \CONST{}$ <K, V>\{k_1:e_1\ldots k_n :e_n\}$ is an object $m$ whose class implements the built-in class $Map<K, V>$. The entries of $m$ are $u_i:v_i, i \in 1 .. n$, where $u_i$ is the value of the compile-time expression $k_i$ and $v_i$ is the value of the compile-time expression $e_i$.  The value of a constant map literal  \CONST{} $\{k_1:e_1\ldots k_n :e_n\}$ is defined as the value of a constant map literal \CONST{} $<\DYNAMIC{}, \DYNAMIC{}>\{k_1:e_1\ldots k_n :e_n\}$.
 
+\LMHash{}
 Let $map_1 =$ \CONST{}$ <K, V>\{k_{11}:e_{11} \ldots k_{1n} :e_{1n}\}$ and  $map_2 =$  \CONST{}$ <J, U>\{k_{21}:e_{21} \ldots k_{2n} :e_{2n}\}$ be two constant map literals. Let the keys of $map_1$ and $map_2$ evaluate to  $s_{11} \ldots  s_{1n}$  and   $s_{21} \ldots  s_{2n}$ respectively, and let the elements of $map_1$ and $map_2$ evaluate to $o_{11} \ldots  o_{1n}$ and $o_{21} \ldots  o_{2n}$ respectively. Iff \code{identical($o_{1i}$, $o_{2i}$)}  and \code{identical($s_{1i}$, $s_{2i}$)} for $i \in 1.. n$, and $K = J, V = U$ then \code{identical($map_1$, $map_2$)}. 
 
 \commentary{In other words, constant map literals are canonicalized.}
 
+\LMHash{}
 A runtime map literal $<K, V>\{k_1:e_1\ldots k_n :e_n\}$  is evaluated as follows:
 \begin{itemize}
 \item
@@ -2682,12 +2963,15 @@
 \end{itemize}
 
 
+\LMHash{}
 A runtime map literal  $\{k_1:e_1\ldots k_n :e_n\}$ is evaluated as  
 
 $<\DYNAMIC{},  \DYNAMIC{}>\{k_1:e_1\ldots k_n :e_n\}$.
 
+\LMHash{}
 Iff all the keys in a map literal are compile-time constants, it is a static warning if the values of any two keys in a map literal are equal.
 
+\LMHash{}
 A map literal is ordered: iterating over the keys and/or values of the maps always happens in the 
  order the keys appeared in the source code.
 
@@ -2695,12 +2979,14 @@
 Of course, if a key repeats, the order is defined by first occurrence, but the value is defined by the last.
 } 
 
+\LMHash{}
 The static type of a map literal of the form  \CONST{}$ <K, V>\{k_1:e_1\ldots k_n :e_n\}$ or the form $<K, V>\{k_1:e_1\ldots k_n :e_n\}$ is $Map<K, V>$. The static type a map literal of the form  \CONST{}$\{k_1:e_1\ldots k_n :e_n\}$ or the form $\{k_1:e_1\ldots k_n :e_n\}$ is $Map<\DYNAMIC{},  \DYNAMIC{}>$. 
 
 
 \subsection{Throw}
-\label{throw}
+\LMLabel{throw}
 
+\LMHash{}
 The {\em throw expression}  is used to raise an exception.
 
  \begin{grammar}
@@ -2714,43 +3000,53 @@
  
  \end{grammar}
  
+\LMHash{}
  The {\em current exception} is the last exception raised and not subsequently caught at a given moment during runtime. 
 
+\LMHash{}
  Evaluation of a throw expression of the form  \code{\THROW{} $e$;} proceeds as follows:
  
+\LMHash{}
 The expression $e$ is evaluated yielding a value $v$. 
 
 \commentary{
 There is no requirement that the expression $e$ evaluate to a special kind of exception or error object.
 }
 
+\LMHash{}
 If $e$ evaluates to \NULL{} (\ref{null}), then a \code{NullThrownError} is thrown. Otherwise the current exception is set to $v$ and the current return value (\ref{return}) becomes undefined.
 
 \rationale{The current exception and the current return value must never be simultaneously defined, as they represent mutually exclusive options for exiting the current function. 
 }
 
+\LMHash{}
 Let $f$ be the immediately enclosing function. 
 
+\LMHash{}
 If $f$ is synchronous (\ref{functions}), control is transferred to the nearest dynamically enclosing exception handler.
 
 \commentary{
 If $f$ is marked \SYNC* then a dynamically enclosing exception handler encloses the call to \code{moveNext()} that initiated the evaluation of the throw expression.
 }
 
+\LMHash{}
 If $f$ is asynchronous  then if there is a dynamically enclosing exception handler $h$  (\ref{try}) introduced by the current activation, control is transferred to $h$, otherwise $f$  terminates.
 
 \rationale{
 The rules for where a thrown exception will be handled must necessarily differ between the synchronous and asynchronous cases. Asynchronous functions cannot transfer control to an exception handler defined outside themselves.  Asynchronous generators post exceptions to their stream. Other asynchronous functions report exceptions via their future.
 }
 
+\LMHash{}
 If the object being thrown is an instance of class \code{Error} or a subclass thereof, its \code{stackTrace} getter will return the stack trace current at the point where the the object was first thrown.
 
+\LMHash{}
 The static type of a throw expression is $\bot$.
 
 
 \subsection{ Function Expressions}
-\label{functionExpressions}
+\LMLabel{functionExpressions}
 
+\LMHash{}
 A {\em function literal} is an object that encapsulates an executable unit of code. 
 
 \begin{grammar}
@@ -2759,6 +3055,7 @@
     .
  \end{grammar}   
  
+\LMHash{}
 The class of a function literal implements the built-in class \code{Function}.   
 %Invoking the getter \code{runtimeType} on a function literal returns the \code{Type} object that is the value of the expression \code{Function}.
 % not necessarily
@@ -2766,6 +3063,7 @@
 
 %Q{Can anyone implement it? Then we should define things via call}
 
+\LMHash{}
 The static type of a function literal of the form 
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k} = d_k]) => e$ 
@@ -2773,11 +3071,13 @@
 
 $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow T_0$, where $T_0$ is the static type of $e$. 
 
+\LMHash{}
 The static type of a function literal of the form 
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k} = d_k])$ \ASYNC{} $=> e$
 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Future<T_0>$, where $T_0$ is the static type of $e$. 
 
+\LMHash{}
 The static type of a function literal of the form 
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\}) => e$ 
@@ -2785,34 +3085,40 @@
 
 $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow T_0$, where $T_0$ is the static type of $e$. 
 
+\LMHash{}
 The static type of a function literal of the form 
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ \ASYNC{}  $=> e$
 
 is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow Future<T_0>$, where $T_0$ is the static type of $e$. 
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])\{s\}$ 
 
 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow  \DYNAMIC{}$.
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])$ $ \ASYNC{}$ $\{s\}$ 
 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Future$. 
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])$ $ \ASYNC*{}$ $\{s\}$ 
 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Stream$. 
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])$ $ \SYNC*{}$ $\{s\}$ 
 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Iterable$. 
 
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])\{s\}$ 
@@ -2820,30 +3126,35 @@
 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow  \DYNAMIC{}$. 
 
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ $\ASYNC{}$ $\{s\}$
  
 is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow  Future{}$.
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ $\ASYNC*{}$ $\{s\}$
  
 is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow  Stream{}$.
 
+\LMHash{}
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ $\SYNC*{}$ $\{s\}$
  
 is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow  Iterable{}$.
 
+\LMHash{}
 In all of the above cases, whenever $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as  \DYNAMIC{}.
 
 
 \subsection{ This}
-\label{this}
+\LMLabel{this}
 
+\LMHash{}
 The reserved word \THIS{} denotes the target of the current instance member invocation.
 
 \begin{grammar}
@@ -2852,23 +3163,27 @@
      .
 \end{grammar}
 
+\LMHash{}
 The static type of \THIS{} is the interface of the immediately enclosing class.
 
 \commentary{
 We do not support self-types at this point. 
 }
 
+\LMHash{}
 It is a compile-time error if \THIS{} appears, implicitly or explicitly,  in a top-level function or variable initializer,  in a factory constructor, or in a static method or variable initializer, or in the initializer of an instance variable. 
 
 \subsection{ Instance Creation}
-\label{instanceCreation}
+\LMLabel{instanceCreation}
 
+\LMHash{}
 Instance creation expressions invoke constructors to produce instances. 
 
 %It is a compile-time error if any of the type arguments to a constructor of a generic type invoked by a new expression or a constant object expression do not denote types in the enclosing lexical scope. 
 
 %It is a compile-time error if a constructor of a non-generic type invoked by a new expression or a constant object expression is passed any type arguments. It is a compile-time error if a constructor of a generic type with $n$ type parameters invoked by a new expression or a constant object expression is passed $m$ type arguments where $m \ne n$, or if any of its type arguments is  misconstructed (\ref{parameterizedTypes}).
 
+\LMHash{}
 It is a static type warning if
 the type $T$ in an instance creation expression of one of  the forms 
 
@@ -2880,6 +3195,7 @@
 
 \CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is malformed (\ref{dynamicTypeSystem}) or malbounded (\ref{parameterizedTypes}).
 
+\LMHash{}
 It is a compile-time error if the type $T$ in an instance creation expression of one of the forms 
 
 \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,  
@@ -2895,8 +3211,9 @@
 
 
 \subsubsection{ New}
-\label{new}
+\LMLabel{new}
 
+\LMHash{}
 The {\em new expression} invokes a constructor (\ref{constructors}).
 
 \begin{grammar}
@@ -2905,6 +3222,7 @@
 .
 \end{grammar}
 
+\LMHash{}
 Let $e$ be a new expression of the form  
 
 \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ or the form  
@@ -2917,12 +3235,14 @@
 
 %not a class accessible in the current scope,  optionally followed by type arguments. 
 
+\LMHash{}
 If $T$ is  a class or parameterized type accessible in the current scope then:
 \begin{itemize}
 \item
 If $e$ is of the form \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a static warning if $T.id$ is not the name of a constructor declared by the type $T$. If $e$ is of the form  \NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a static warning if the type $T$ does not declare a constructor with the same name as the declaration of $T$. 
 \end{itemize}
 
+\LMHash{}
 If $T$ is a parameterized type (\ref{parameterizedTypes}) $S<U_1,  \ldots, U_m>$, let $R = S$.  
 %It is a 
 %compile-time CHANGED
@@ -2931,46 +3251,60 @@
 If $T$ is not a parameterized type, let $R = T$.
 Furthermore, if $e$ is of the form \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ then let  $q$ be the constructor  $T.id$, otherwise let $q$ be the constructor $T$. 
 
+\LMHash{}
 If $R$ is a generic with $l = m$ type parameters then
 \begin{itemize}
 \item  If $T$ is not a parameterized type, then for $ i \in 1 .. l$, let $V_i =  \DYNAMIC{}$.
 \item  If $T$ is  a parameterized type then let $V_i = U_i$ for $ i \in 1 .. m$.  
 \end{itemize}
 
+\LMHash{}
 If $R$ is a generic with $l \ne m$ type parameters then for $ i \in 1 .. l$, let $V_i =  \DYNAMIC{}$. In any other case, let $V_i = U_i$ for $ i \in 1 .. m$.  
 
+\LMHash{}
 Evaluation of $e$ proceeds as follows:
 
+\LMHash{}
 First, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is evaluated. 
 
+\LMHash{}
 If $T$ is a deferred type with prefix $p$, then if $p$ has not been successfully loaded, a dynamic error occurs.
 
+\LMHash{}
 Then, if $q$ is a non-factory constructor of an abstract class then an \code{AbstractClassInstantiationError} is thrown.
 
+\LMHash{}
 If $T$  is malformed or if $T$ is a type variable a dynamic error occurs. In checked mode, if $T$ or any of its superclasses is malbounded a dynamic error occurs.
  Otherwise, if $q$ is not defined or not accessible, a \code{NoSuchMethodError} is thrown.  If $q$ has  less than $n$ positional parameters or more than $n$ required parameters, or if $q$ lacks any of the keyword parameters $\{ x_{n+1}, \ldots, x_{n+k}\}$ a \code{NoSuchMethodError} is thrown.
 
+\LMHash{}
 Otherwise, if $q$ is a generative constructor (\ref{generativeConstructors}), then:
 
 \commentary{Note that it this point we are assured that the number of actual type arguments match the number of formal type parameters.}
 
+\LMHash{}
 A fresh instance (\ref{generativeConstructors}), $i$,  of class $R$ is allocated. For each instance variable $f$ of $i$,  if the variable declaration of $f$ has an initializer expression $e_f$, then $e_f$ is evaluated to an object $o_f$ and $f$ is bound to $o_f$. Otherwise $f$ is bound to \NULL{}.
 
 \commentary{
 Observe that \THIS{} is not in scope in $e_f$. Hence, the initialization cannot depend on other properties of the object being instantiated.
 }
 
+\LMHash{}
 Next,  $q$ is executed  with \THIS{} bound to $i$,  the type parameters (if any) of $R$ bound to the actual type arguments $V_1, \ldots, V_l$ and the formal parameter bindings that resulted from the evaluation of the argument list. The result of the evaluation of $e$ is $i$.
 
+\LMHash{}
 Otherwise, $q$ is a factory constructor (\ref{factories}). Then:
 
+\LMHash{}
 If $q$ is a redirecting factory constructor of the form $T(p_1, \ldots, p_{n+k}) = c;$ or of the form  $T.id(p_1, \ldots, p_{n+k}) = c;$ then the result of the evaluation of $e$ is equivalent to evaluating the expression 
 
 $[V_1,  \ldots, V_m/T_1,  \ldots, T_m]($\code{\NEW{} $c(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k}))$}.  If evaluation of $q$ causes $q$ to be re-evaluated cyclically, a runtime error occurs.
 
 
+\LMHash{}
 Otherwise, the body of $q$ is executed with respect to the bindings that resulted from the evaluation of the argument list and the type parameters (if any) of $q$ bound to the actual type arguments $V_1, \ldots, V_l$ resulting in an object $i$. The result of the evaluation of $e$ is $i$.
 
+\LMHash{}
 It is a static warning if $q$ is a constructor of an abstract class and $q$ is not a factory constructor.
 
 \commentary{The above gives precise meaning to the idea that instantiating an abstract class leads to a warning. 
@@ -2980,6 +3314,7 @@
 \rationale{In particular, a factory constructor can be declared in an abstract class and used safely, as it will either produce a valid instance or lead to a warning inside its own declaration.
 }
 
+\LMHash{}
 The static type of an instance creation expression of either the form 
 
 \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ 
@@ -2994,8 +3329,9 @@
 
 
 \subsubsection{ Const}
-\label{const}
+\LMLabel{const}
 
+\LMHash{}
 A {\em constant object expression} invokes a constant constructor (\ref{constantConstructors}). 
 
 \begin{grammar}
@@ -3004,6 +3340,7 @@
 .
 \end{grammar}
 
+\LMHash{}
 Let $e$ be a constant object expression of the form  
 
 \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ 
@@ -3012,18 +3349,23 @@
 
 \commentary{In particular, $T$ may not be a type variable.}
 
+\LMHash{}
 If $T$ is a parameterized type, it is a compile-time error if $T$ includes a type variable among its type arguments.
 
+\LMHash{}
 If $e$ is of the form \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compile-time error if $T.id$ is not the name of a constant constructor declared by the type $T$. If $e$ is of the form  \CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compile-time error if the type $T$ does not declare a constant constructor with the same name as the declaration of $T$. 
 
+\LMHash{}
 In all of the above cases, it is a compile-time error if $a_i,  i\in 1 .. n + k$, is not a compile-time constant expression.
 
 %If $T$ is a parameterized type (\ref{parameterizedTypes}) $S<U_1,  \ldots, U_m>$, let $R = S$.  It is a compile-time error if $T$ is is malformed. If $T$ is not a parameterized type, let $R = T$.
  %Finally, 
 % If $T$ is a generic with $l$ retype parameters, then for all $ i \in 1 .. l$, let $V_i =  \DYNAMIC{}$.  
 
+\LMHash{}
 Evaluation of $e$ proceeds as follows:
 
+\LMHash{}
 First, if $e$ is of the form 
 
 \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ 
@@ -3032,6 +3374,7 @@
 
 \NEW{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$. 
 
+\LMHash{}
 Otherwise, $e$ must be of the form  
 
 \CONST{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$, 
@@ -3040,6 +3383,7 @@
 
 \NEW{} $T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$. 
 
+\LMHash{}
 Then:
 \begin{itemize}
 \item If during execution of the program, a constant object expression has already evaluated to an instance $j$ of class $R$ with type arguments $V_i, 1 \le i \le m$, then: 
@@ -3053,6 +3397,7 @@
 In other words, constant objects are canonicalized.  In order to determine if an object is actually new, one has to compute it; then it can be compared to any cached instances. If an equivalent object exists in the cache, we throw away the newly created object and use the cached one. Objects are equivalent if they have identical fields and identical type arguments. Since the constructor cannot induce any side effects, the execution of the constructor is unobservable.  The constructor need only be executed once per call site, at compile-time.
 }
 
+\LMHash{}
 The static type of a constant object expression of either the form 
 
 \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ 
@@ -3063,6 +3408,7 @@
 
 is $T$. It is a static warning if the static type of $a_i, 1 \le i \le n+ k$ may not be assigned to the type of the corresponding formal parameter of the constructor $T.id$ (respectively $T$).
 
+\LMHash{}
 It is a compile-time error if evaluation of a constant object results in an uncaught exception being thrown.
 
 \commentary{
@@ -3094,14 +3440,17 @@
 }
 
 
+\LMHash{}
 Given an instance creation expression of the form \CONST{} $q(a_1, \ldots , a_n)$ it is a static warning if $q$ is a constructor of an abstract class  (\ref{abstractInstanceMembers}) but $q$ is not a factory constructor.  
 
 
 \subsection{ Spawning an Isolate}
-\label{spawningAnIsolate}
+\LMLabel{spawningAnIsolate}
 
+\LMHash{}
 Spawning an isolate is accomplished via what is syntactically an ordinary library call, invoking one of the functions \code{spawnUri()} or \code{spawnFunction()}defined in the \code{dart:isolate} library. However, such calls  have the  semantic effect of creating a new isolate with its own memory and thread of control.
 
+\LMHash{}
 An isolate's memory is finite, as is the space available to its thread's call stack. It is possible for a running isolate to exhaust its memory or stack, resulting in a run-time error that cannot be effectively caught, which will force the isolate to be suspended.
 
 \commentary{
@@ -3111,12 +3460,15 @@
 
 
 \subsection{ Function Invocation}
-\label{functionInvocation}
+\LMLabel{functionInvocation}
  
+\LMHash{}
 Function invocation occurs in the following cases: when a function expression  (\ref{functionExpressions}) is invoked (\ref{functionExpressionInvocation}), when a method (\ref{methodInvocation}), getter (\ref{topLevelGetterInvocation}, \ref{propertyExtraction}) or setter (\ref{assignment}) is invoked or when a constructor is invoked (either via instance creation (\ref{instanceCreation}), constructor redirection (\ref{redirectingConstructors}) or super initialization). The various kinds of function invocation differ as to how the function to be invoked, $f$,  is determined, as well as whether \THIS{} (\ref{this}) is bound. Once $f$ has been determined, the formal parameters of $f$ are bound to corresponding actual arguments. When the body of $f$ is executed it will be executed with the aforementioned bindings. 
 
+\LMHash{}
 If $f$ is marked \ASYNC{} (\ref{functions}), then a fresh instance (\ref{generativeConstructors}) $o$ implementing the built-in class \code{Future} is associated with the invocation and immediately returned to the caller. The body of $f$ is scheduled for execution at some future time. The future $o$ will complete when $f$ terminates. The value used to complete $o$ is the current return value (\ref{return}), if it is defined, and the current exception (\ref{throw}) otherwise. 
 
+\LMHash{}
 If $f$ is marked \ASYNC* (\ref{functions}), then a fresh instance $s$ implementing the built-in class \code{Stream} is associated with the invocation and immediately returned. When $s$ is listened to, execution of the body of $f$ will begin.  When $f$ terminates:
 \begin{itemize}
 \item If the current return value is defined then, if $s$ has been canceled then its cancellation future is completed with \NULL{} (\ref{null}). 
@@ -3132,16 +3484,20 @@
 When an asynchronous generator's stream has been canceled, cleanup will occur in the \FINALLY{} clauses (\ref{try}) inside the generator. We choose to direct any exceptions that occur at this time to the cancellation future rather than have them be lost. 
 }
 
+\LMHash{}
 If $f$ is asynchronous then, when $f$ terminates, any open stream subscriptions associated with any asynchronous for loops  (\ref{asynchronousFor-in}) or yield-each statements  (\ref{yieldEach}) executing within $f$ are canceled.
 
 \rationale{Such streams may be left open by for loops that were escaped when an exception was thrown within them for example.
 }
 
+\LMHash{}
 If $f$ is marked \SYNC* (\ref{functions}), then a fresh instance $i$ implementing the built-in class \code{Iterable} is associated with the invocation and immediately returned. When iteration over the iterable is started, by getting an iterator $j$ from the iterable and calling \code{moveNext()} on it, execution of the body of $f$ will begin. When $f$ terminates, $j$ is positioned after its last element, so that its current value is \NULL{} and the current call to \code{moveNext()} on $j$ returns false, as will all further calls.
 
+\LMHash{}
 If $f$ is synchronous and is not a generator (\ref{functions}) then execution of the body of $f$ begins immediately.  When $f$ terminates the current return value is returned to the caller.
 
 
+\LMHash{}
 Execution of $f$ terminates when the first of the following occurs:
 \begin{itemize}
 \item An exception is thrown and not caught within the current function activation. 
@@ -3153,8 +3509,9 @@
 
 
 \subsubsection{ Actual Argument List Evaluation}
-\label{actualArguments}
+\LMLabel{actualArguments}
 
+\LMHash{}
 Function invocation involves evaluation of the list of actual arguments to the function and binding of the results to the function's formal parameters.
 
 \begin{grammar}
@@ -3173,12 +3530,14 @@
     .
  \end{grammar}
 
+\LMHash{}
 Evaluation of an actual argument list of the form 
 
 $(a_1, \ldots, a_m, q_1: a_{m+1}, \ldots, q_l: a_{m+l})$ 
 
 proceeds as follows:
 
+\LMHash{}
 The arguments $a_1, \ldots, a_{m+l}$ are evaluated in the order they appear in the program, yielding objects $o_1, \ldots, o_{m+l}$.
 
 \commentary{Simply stated, an argument list consisting of $m$ positional arguments and $l$ named arguments is evaluated from left to right.
@@ -3186,10 +3545,12 @@
 
 
 \subsubsection{ Binding Actuals to Formals}
-\label{bindingActualsToFormals}
+\LMLabel{bindingActualsToFormals}
 
+\LMHash{}
 Let $f$ be a function with $h$ required parameters,  let $p_1 \ldots p_n$ be the positional parameters of $f$ and let $p_{h+1}, \ldots, p_{h+k}$ be the optional parameters declared by $f$.
 
+\LMHash{}
 An evaluated actual argument list $o_1 \ldots o_{m+l}$ derived from an actual argument list of the form $(a_1, \ldots, a_m, q_1: a_{m+1}, \ldots, q_l: a_{m+l})$ is bound to the formal parameters of $f$ as follows:
 
 \commentary{
@@ -3201,25 +3562,31 @@
 }
 
 
+\LMHash{}
 If  $m < h$, or $m > n$, a \cd{NoSuchMethodError} is thrown. Furthermore, each $q_i, 1 \le i \le l$,  must have a corresponding named parameter in the set $\{p_{n+1}, \ldots, p_{n +k}\}$ or a \cd{NoSuchMethodError} is thrown. Then $p_i$ is bound to $o_i, i \in 1.. m$, and $q_j$  is bound to $o_{m+j}, j \in 1.. l$.  All remaining formal parameters of $f$  are bound to their default values. 
 
 \commentary{All of these remaining parameters are necessarily optional and thus have default values.}
 
+\LMHash{}
 In checked mode, it is a dynamic type error if  $o_i$ is not \NULL{} and the actual type  (\ref{actualTypeOfADeclaration}) of $p_i$ is not a supertype of the type of $o_i, i \in 1.. m$. In checked mode, it is a dynamic type error if  $o_{m+j}$ is not \NULL{} and the actual type  (\ref{actualTypeOfADeclaration}) of $q_j$ is not a supertype of the type of $o_{m+j}, j \in 1.. l$.
 
+\LMHash{}
 It is a compile-time error if $q_i = q_j$ for any $i \ne j$.
 
+\LMHash{}
 Let $T_i$ be the static type of $a_i$, let $S_i$ be the type of $p_i, i \in 1 .. h+k$ and let $S_q$ be the type of the named parameter $q$ of $f$.  It is a static warning if $T_j$ may not be assigned to $S_j, j \in 1..m$.  It is a static warning if $m < h$ or if $m > n$. Furthermore, each $q_i, 1 \le i \le l$,  must have a corresponding named parameter in the set $\{p_{n+1}, \ldots, p_{n +k}\}$ or a static warning occurs.  It is a static warning if $T_{m+j}$ may not be assigned to $S_{q_j}, j \in 1 .. l$.
 
 \subsubsection{ Unqualified Invocation}
-\label{unqualifiedInvocation}
+\LMLabel{unqualifiedInvocation}
 
+\LMHash{}
 An unqualified function invocation $i$ has the form 
 
 $id(a_1, \ldots, a_n, x_{n+1}: a_{n+1}, \ldots, x_{n+k}: a_{n+k})$, 
 
 where $id$ is an identifier. 
 
+\LMHash{}
 If there exists a lexically visible declaration named $id$, let $f_{id}$ be the innermost such declaration. Then:
 \begin{itemize}
 \item
@@ -3235,8 +3602,10 @@
 %Unqualified access to static methods of superclasses is inconsistent with the idea that static methods are not inherited. It is not particularly necessary and  may be restricted in future versions.
 %}
 
+\LMHash{}
 Otherwise, if $i$ occurs inside a top level or static function (be it function, method, getter,  or setter) or variable initializer, evaluation of $i$ causes a \cd{NoSuchMethodError} to be thrown.
 
+\LMHash{}
 If $i$ does not occur inside a top level or static function, $i$ is equivalent to $\THIS{}.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
 
 % Should also say:
@@ -3247,8 +3616,9 @@
 
 
 \subsubsection{ Function Expression Invocation}
-\label{functionExpressionInvocation}
+\LMLabel{functionExpressionInvocation}
 
+\LMHash{}
 A function expression invocation $i$ has the form 
 
 $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$, 
@@ -3259,6 +3629,7 @@
 \code{$a.b(x)$} is parsed as a method invocation of method \code{$b()$} on object \code{$a$}, not as an invocation of getter \code{$b$} on \code{$a$} followed by a function call \code{$(a.b)(x)$}.  If a method or getter \code{$b$} exists, the two will be equivalent. However, if \code{$b$} is not defined on \code{$a$}, the resulting invocation of \code{noSuchMethod()} would differ.  The \code{Invocation} passed to \code{noSuchMethod()} would describe a call to a method \code{$b$} with argument \code{$x$} in the former case, and a call to a getter \code{$b$} (with no arguments) in the latter.
 }
 
+\LMHash{}
 Otherwise:
 
 A function expression invocation $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is equivalent to $e_f.call(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
@@ -3267,6 +3638,7 @@
 The implication of this definition, and the other definitions involving the method \code{call()}, is that user defined types can be used as function values provided they define a \CALL{} method. The method \CALL{} is special in this regard. The signature of the \CALL{} method determines the signature used when using the object via the built-in invocation syntax.
 }
 
+\LMHash{}
 It is a static warning if the static type $F$ of $e_f$ may not be assigned to a function type.  If $F$ is not a function type, the static type of $i$ is \DYNAMIC{}. Otherwise 
 the static type of $i$ is the declared return type of  $F$.  
 %\item Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of  $(T_1, \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \to \bot$.
@@ -3275,10 +3647,12 @@
 \subsection{ Lookup}
 
 \subsubsection{Method Lookup}
-\label{methodLookup}
+\LMLabel{methodLookup}
 
+\LMHash{}
 The result of a lookup of a method $m$ in object $o$ with respect to library $L$ is the result of  a lookup of method $m$ in class $C$ with respect to library $L$, where $C$ is the class of $o$.
 
+\LMHash{}
 The result of  a lookup of method $m$ in class $C$ with respect to library $L$ is:
 If $C$ declares a concrete instance method named $m$ that is accessible to $L$,  then that method is the result of the lookup. Otherwise, if $C$ has a superclass $S$, then the result of the lookup is the result of looking up $m$  in $S$ with respect to $L$. Otherwise, we say that the method lookup has failed.
 
@@ -3288,10 +3662,12 @@
 
 
 \subsubsection{ Getter and Setter Lookup}
-\label{getterAndSetterLookup}
+\LMLabel{getterAndSetterLookup}
 
+\LMHash{}
 The result of a lookup of a getter (respectively setter) $m$ in object $o$  with respect  to  library $L$ is the result of looking up getter (respectively setter) $m$ in class $C$ with respect to $L$, where $C$ is the class of $o$.
 
+\LMHash{}
 The result of a lookup of a getter (respectively setter) $m$ in class $C$  with respect to library $L$ is:
 If $C$ declares a concrete instance getter (respectively setter) named $m$  that is accessible to $L$,  then that getter (respectively setter) is the result of the lookup. Otherwise, if $C$ has a superclass $S$, then the result of the lookup is the result of looking up getter (respectively setter) $m$ in $S$ with respect to $L$. Otherwise, we say that the lookup has failed.
 
@@ -3301,52 +3677,64 @@
 
 
 \subsection{ Top level Getter Invocation}
-\label{topLevelGetterInvocation}
+\LMLabel{topLevelGetterInvocation}
 
+\LMHash{}
 Evaluation of a top-level getter invocation $i$ of the form $m$, where $m$ is an identifier, proceeds as follows:
 
+\LMHash{}
 The getter function $m$ is invoked. The value of $i$ is the result returned by the call to the getter function.
 \commentary{
 Note that the invocation is always defined. Per the rules for identifier references, an identifier will not be treated as a top-level getter invocation unless the getter $i$ is defined. 
 }
 
+\LMHash{}
 The static type of $i$ is the declared return type of $m$.
 
 \subsection{ Method Invocation}
-\label{methodInvocation}
+\LMLabel{methodInvocation}
 
+\LMHash{}
 Method invocation can take several forms as specified below. 
 
 \subsubsection{Ordinary Invocation}
-\label{ordinaryInvocation}
+\LMLabel{ordinaryInvocation}
 
+\LMHash{}
 An ordinary method invocation $i$ has the form 
 
 $o.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
 
+\LMHash{}
 Evaluation of an ordinary method invocation $i$ of the form 
 
 $o.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ 
 
 proceeds as follows:
 
+\LMHash{}
 First, the expression $o$ is evaluated to a value $v_o$. Next, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is evaluated yielding actual argument objects $o_1, \ldots , o_{n+k}$. Let $f$ be the result of looking up (\ref{methodLookup}) method $m$  in $v_o$ with respect to the current library $L$. 
 
+\LMHash{}
 Let $p_1 \ldots p_h$ be the required parameters of $f$,  let $p_1 \ldots p_m$ be the positional parameters of $f$ and let $p_{h+1}, \ldots, p_{h+l}$ be the optional parameters declared by $f$.
 
 \commentary{
 We have an argument list consisting of $n$ positional arguments and $k$ named arguments. We have a function with $h$ required parameters and $l$ optional parameters. The number of positional arguments must be at least as large as the number of required parameters, and no larger than the number of positional parameters. All named arguments must have a corresponding named parameter. 
 }
 
+\LMHash{}
 If  $n < h$, or $n > m$, the method lookup has failed. Furthermore, each $x_i, n+1 \le i \le n+k$,  must have a corresponding named parameter in the set $\{p_{m+1}, \ldots, p_{h+l}\}$ or the method lookup also fails.  If $v_o$ is an instance of \code{Type} but $o$ is not a constant type literal, then if $m$ is a method that forwards (\ref{functionDeclarations}) to a static method, method lookup fails. Otherwise method lookup has succeeded.
 
+\LMHash{}
 If the method lookup succeeded, the body of $f$ is executed with respect to the bindings that resulted from the evaluation of the argument list, and with \THIS{} bound to $v_o$. The value of $i$ is the value returned after $f$ is executed.
 
+\LMHash{}
 If the method lookup has failed, then let $g$ be the result of looking up getter (\ref{getterAndSetterLookup}) $m$ in $v_o$ with respect to $L$. 
 f $v_o$ is an instance of \code{Type} but $o$ is not a constant type literal, then if $g$ is a getter that forwards to a static getter, getter lookup fails.
 If the getter lookup succeeded, let $v_g$ be the value of the getter invocation $o.m$. Then the value of $i$ is the result of invoking 
 the static method \code{Function.apply()} with arguments $v.g, [o_1, \ldots , o_n], \{x_{n+1}: o_{n+1}, \ldots , x_{n+k}: o_{n+k}\}$.
 
+\LMHash{}
 If  getter lookup has also failed, then a new instance $im$  of the predefined class  \code{Invocation}  is created, such that :
 \begin{itemize}
 \item  \code{im.isMethod} evaluates to \code{\TRUE{}}.
@@ -3355,6 +3743,7 @@
 \item \code{im.namedArguments} evaluates to an immutable map with the same keys and values as \code{\{$x_{n+1}: o_{n+1}, \ldots, x_{n+k} : o_{n+k}$\}}.
 \end{itemize}
 
+\LMHash{}
 Then the method \code{noSuchMethod()} is looked up in $v_o$ and invoked with argument $im$, and the result of this invocation is the result of evaluating $i$. However, if the implementation found cannot be invoked with a single positional argument, the implementation  of \code{noSuchMethod()} in class \code{Object} is invoked on $v_o$ with argument $im'$, where $im'$ is an instance of \code{Invocation} such that :
 \begin{itemize}
 \item  \code{im.isMethod} evaluates to \code{\TRUE{}}.
@@ -3378,6 +3767,7 @@
 
 \commentary{Notice that the wording carefully avoids re-evaluating the receiver $o$ and the arguments $a_i$. }
 
+\LMHash{}
 Let $T$ be the  static type of $o$. It is a static type warning if $T$ does not have an accessible  (\ref{privacy}) instance member named $m$ unless  either:
 \begin{itemize}
 \item
@@ -3385,14 +3775,17 @@
 \item  $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ has a static getter named $m$.
 \end{itemize}
 
+\LMHash{}
 If $T.m$ exists, it  is a static type warning if the type $F$ of $T.m$ may not be assigned to a function type. If $T.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$ is the declared return type of  $F$.  
 
+\LMHash{}
 It is a compile-time error to invoke any of the methods of class \cd{Object} on a prefix object (\ref{imports}) or on a constant type literal that is  immediately followed by the token `.'.
 
 
 \subsubsection{Cascaded Invocations}
-\label{cascadedInvocations}
+\LMLabel{cascadedInvocations}
 
+\LMHash{}
 A {\em cascaded method invocation} has the form {\em e..suffix}
 where $e$ is an expression and {\em suffix} is a sequence of operator, method, getter or setter invocations.
 
@@ -3406,27 +3799,35 @@
       .
 \end{grammar}
 
+\LMHash{}
 A cascaded method invocation expression of the form {\em e..suffix} is equivalent to the expression \code{(t)\{t.{\em suffix}; \RETURN{} t;\}($e$)}.
 
 \subsubsection{Super Invocation}
-\label{superInvocation}
+\LMLabel{superInvocation}
 
+\LMHash{}
 A super method invocation $i$ has the form 
 
 $\SUPER{}.m(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$.
 
+\LMHash{}
 Evaluation of $i$ proceeds as follows:
 
+\LMHash{}
 First, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ is evaluated  yielding actual argument objects $o_1, \ldots , o_{n+k}$. Let $S$ be the superclass of the immediately enclosing class, and let $f$ be the result of looking up method (\ref{ordinaryInvocation})  $m$ in $S$  with respect to the current library $L$. 
 Let $p_1 \ldots p_h$ be the required parameters of $f$,  let $p_1 \ldots p_m$ be the positional parameters of $f$ and let $p_{h+1}, \ldots, p_{h+l}$ be the optional parameters declared by $f$.
 
+\LMHash{}
 If  $n < h$, or $n > m$, the method lookup has failed. Furthermore, each $x_i, n+1 \le i \le n+k$,  must have a corresponding named parameter in the set $\{p_{m+1}, \ldots, p_{h+l}\}$ or the method lookup also fails.  Otherwise method lookup has succeeded.
 
+\LMHash{}
 If the method lookup succeeded, the body of $f$ is executed with respect to the bindings that resulted from the evaluation of the argument list, and with \THIS{} bound to the current value of \THIS{}. The value of $i$ is the value returned after $f$ is executed.
 
+\LMHash{}
 If the method lookup has failed, then let $g$ be the result of looking up getter (\ref{getterAndSetterLookup}) $m$ in $S$ with respect to $L$. If the getter lookup succeeded, let $v_g$ be the value of the getter invocation $\SUPER{}.m$. Then the value of $i$ is the result of invoking 
 the static method \code{Function.apply()} with arguments $v.g, [o_1, \ldots , o_n], \{x_{n+1}: o_{n+1}, \ldots , x_{n+k}: o_{n+k}\}$.
  
+\LMHash{}
 If  getter lookup has also failed, then a new instance $im$  of the predefined class  \code{Invocation}  is created, such that :
 \begin{itemize}
 \item  \code{im.isMethod} evaluates to \code{\TRUE{}}.
@@ -3445,8 +3846,10 @@
 and the result of this latter invocation is the result of evaluating $i$.
 
 
+\LMHash{}
 It is a compile-time error if a super method invocation occurs in a top-level function or variable initializer, in an instance variable initializer or initializer list, in class \code{Object}, in a factory constructor or in a static method or variable initializer.
 
+\LMHash{}
 It is a static type warning if $S$ does not have an accessible (\ref{privacy}) instance member named $m$ unless $S$ or a superinterface of $S$ is annotated with an annotation denoting a constant identical to the constant \code{@proxy} defined in \code{dart:core}. If $S.m$ exists, it  is a static type warning if the type $F$ of $S.m$ may not be assigned to a function type. If $S.m$ does not exist, or if $F$ is not a function type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$ is the declared return type of  $F$.  
 % The following is not needed because it is specified in 'Binding Actuals to Formals"
 %Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of  $(T_1, \ldots, t_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \to \bot$.
@@ -3455,9 +3858,9 @@
 
 
 \subsubsection{Sending Messages}
+\LMLabel{sendingMessages}
 
-\label{sendingMessages}
-
+\LMHash{}
 Messages are the sole means of communication among isolates. Messages are sent by invoking specific  methods in the Dart libraries; there is no specific syntax for sending a message. 
 
 \commentary{In other words, the methods supporting sending messages embody primitives of Dart that are not accessible to ordinary code, much like the methods that spawn isolates.
@@ -3466,8 +3869,9 @@
 
 
 \subsection{ Property Extraction}
-\label{propertyExtraction}
+\LMLabel{propertyExtraction}
 
+\LMHash{}
 {\em Property extraction} allows for a member of an object to be concisely extracted from the object.
 A property extraction can be either:
 \begin{enumerate}
@@ -3475,12 +3879,16 @@
 \item A {\em getter invocation} which returns the result of invoking of a getter method.
 \end{enumerate}
 
+\LMHash{}
 Evaluation of a property extraction $i$ of the form $e.m$ proceeds as follows:
 
+\LMHash{}
 First, the expression $e$ is evaluated to an object $o$. Let $f$ be the result of looking up (\ref{methodLookup}) method  (\ref{instanceMethods}) $m$ in $o$ with respect to the current library $L$.  If $o$ is an instance of \code{Type} but $e$ is not a constant type literal, then if $m$ is a method that forwards (\ref{functionDeclarations}) to a static method,  method lookup fails. If method lookup succeeds and $f$ is a concrete method then $i$ evaluates to the closurization of $o.m$.  
 
+\LMHash{}
 Otherwise, $i$ is a getter invocation, and the getter function (\ref{getters}) $m$ is looked up (\ref{getterAndSetterLookup}) in $o$  with respect to $L$. If $o$ is an instance of \code{Type} but $e$ is not a constant type literal, then if $m$ is a getter that forwards  to a static getter,  getter lookup fails. Otherwise, the body of $m$ is executed with \THIS{} bound to $o$.  The value of $i$ is the result returned by the call to the getter function. 
 
+\LMHash{}
 If the getter lookup has failed, then a new instance $im$  of the predefined class  \code{Invocation}  is created, such that :
 \begin{itemize}
 \item  \code{im.isGetter} evaluates to \code{\TRUE{}}.
@@ -3498,12 +3906,14 @@
 
 and the result of this latter invocation is the result of evaluating $i$.
 
+\LMHash{}
 It is a compile-time error if $m$ is a member of class \cd{Object} and $e$ is either a prefix object (\ref{imports}) or a constant type literal.
 
 \commentary {
 This precludes \code{int.toString} but not \code{(int).toString} because in the latter case, $e$ is a parenthesized expression.
 }
 
+\LMHash{}
 Let $T$ be the  static type of $e$. It is a static type warning if $T$ does not have a method or getter named $m$ unless either:
 \begin{itemize}
 \item
@@ -3511,6 +3921,7 @@
 \item  $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ has a static method or getter named $m$.
 \end{itemize}
 
+\LMHash{}
 If $i$ is a getter invocation, the static type of $i$ is:
 \begin{itemize}
 \item The declared return type of $T.m$, if $T.m$ exists.
@@ -3518,14 +3929,19 @@
 \item  The type \DYNAMIC{} otherwise.  
 \end{itemize}
 
+\LMHash{}
 If $i$ is a closurization, its static type is as described in section \ref{closurization}.
 
+\LMHash{}
 Evaluation of a property extraction $i$ of the form $\SUPER.m$ proceeds as follows:
 
+\LMHash{}
  Let $S$ be the superclass of the immediately enclosing class. Let $f$ be the result of looking up method $m$ in $S$ with respect to the current library $L$.  If $f$ is a concrete method then $i$ evaluates to the closurization of $\SUPER.m$ with respect to superclass $S$(\ref{closurization}).  
  
+\LMHash{}
  Otherwise, $i$ is a getter invocation and the getter function $m$ is looked up in $S$  with respect to $L$, and its body is executed with \THIS{} bound to the current value of  \THIS{}.  The value of $i$ is the result returned by the call to the getter function. 
 
+\LMHash{}
 If the getter lookup has failed, then a new instance $im$  of the predefined class  \code{Invocation}  is created, such that :
 \begin{itemize}
 \item  \code{im.isGetter} evaluates to \code{\TRUE{}}.
@@ -3543,12 +3959,14 @@
 
 and the result of this latter invocation is the result of evaluating $i$.
 
+\LMHash{}
 It is a static type warning if $S$ does not have a method or getter named $m$.  If $i$ is a getter invocation, the static type of $i$ is the declared return type of $S.m$, if $S.m$ exists and  \DYNAMIC{} otherwise. If $i$ is a closurization, its static type is as described in section \ref{closurization}.
 
 
 \subsubsection{Closurization}
-\label{closurization}
+\LMLabel{closurization}
 
+\LMHash{}
 The {\em closurization of $o.m$} is defined to be equivalent to:
 
 \begin{itemize}
@@ -3598,6 +4016,7 @@
 
 
  
+\LMHash{}
 The closurization of $\SUPER{}.m$ with respect to superclass $S$ is defined to be equivalent to:
 
 \begin{itemize}
@@ -3622,6 +4041,7 @@
 if $m$ has required parameters $r_1, \ldots, r_n$, and optional positional parameters $p_1, \ldots, p_k$ with defaults $d_1, \ldots, d_k$.
 \end{itemize}
 
+\LMHash{}
 Except that:
 \begin{enumerate}
 \item  iff  \code{identical($o_1, o_2$)}  then \cd{$o_1.m$ == $o_2.m$}.
@@ -3631,8 +4051,9 @@
 
 
 \subsection{ Assignment}
-\label{assignment}
+\LMLabel{assignment}
 
+\LMHash{}
 An assignment changes the value associated with a mutable variable or property.
 
 \begin{grammar}
@@ -3641,6 +4062,7 @@
     .
 \end{grammar}
 
+\LMHash{}
 Evaluation of an assignment $a$ of the form $v$ \code{=} $e$ proceeds as follows:
 
 
@@ -3652,27 +4074,38 @@
  
 %Otherwise,  
 
+\LMHash{}
 Let $d$ be the innermost declaration whose name is $v$ or $v=$, if it exists.
 
+\LMHash{}
 If $d$ is the declaration of a local variable, the expression $e$ is evaluated to an object $o$. Then, the variable $v$ is bound to $o$ unless $v$ is \FINAL{} or \CONST{}, in which case a dynamic error occurs.
 If no error occurs, the value of the assignment expression is $o$.  
 
+\LMHash{}
 If $d$ is the declaration of a library variable, top level getter or top level setter, the expression $e$ is evaluated to an object $o$. Then the setter $v=$ is invoked with its formal parameter bound to $o$. The value of the assignment expression is $o$.  
 
+\LMHash{}
 Otherwise, if $d$ is the declaration of a static variable, static getter or static setter in class $C$, then the assignment is equivalent to the assignment \code{$C.v$ = $e$}.
 
+\LMHash{}
 Otherwise, If  $a$ occurs inside a top level or static function (be it function, method, getter,  or setter) or variable initializer, evaluation of $a$ causes $e$ to be evaluated, after which a \code{NoSuchMethodError} is thrown. 
 
+\LMHash{}
 Otherwise, the assignment is equivalent to the assignment \code{ \THIS{}.$v$ = $e$}. 
 
+\LMHash{}
 In checked mode, it is a dynamic type error if $o$ is not \NULL{} and the interface of the class of $o$ is not a subtype of the actual type (\ref{actualTypeOfADeclaration}) of $v$.
 
+\LMHash{}
 It is a static type warning if the static type of $e$ may not be assigned to the static type of $v$. The static type of the expression $v$ \code{=} $e$ is the static type of $e$.
 
+\LMHash{}
 Evaluation of an assignment of the form $e_1.v$ \code{=} $e_2$ proceeds as follows:
 
+\LMHash{}
 The expression $e_1$ is evaluated to an object $o_1$. Then, the expression $e_2$  is evaluated to an object $o_2$. Then, the setter $v=$ is looked up (\ref{getterAndSetterLookup}) in $o_1$ with respect to the current library.  If $o_1$ is an instance of \code{Type} but $e_1$ is not a constant type literal, then if $v=$ is a setter that forwards (\ref{functionDeclarations}) to a static setter, setter lookup fails. Otherwise, the body  of $v=$ is executed with its formal parameter bound to $o_2$ and \THIS{} bound to $o_1$. 
 
+\LMHash{}
 If the setter lookup has failed, then a new instance $im$  of the predefined class  \code{Invocation}  is created, such that :
 \begin{itemize}
 \item  \code{im.isSetter} evaluates to \code{\TRUE{}}.
@@ -3681,6 +4114,7 @@
 \item \code{im.namedArguments} evaluates to the value of \code{\CONST{} \{\}}.
 \end{itemize}
 
+\LMHash{}
 Then the method \code{noSuchMethod()} is looked up in $o_1$ and invoked  with argument $im$. 
 However, if the implementation found cannot be invoked with a single positional argument, the implementation  of \code{noSuchMethod()} in class \code{Object} is invoked on $o_1$ with argument $im'$, where $im'$ is an instance of \code{Invocation} such that :
 \begin{itemize}
@@ -3690,10 +4124,13 @@
 \item \code{im.namedArguments} evaluates to the value of \code{\CONST{} \{\}}.
 \end{itemize}
 
+\LMHash{}
 The value of the assignment expression is $o_2$ irrespective of whether setter lookup has failed or succeeded.
 
+\LMHash{}
 In checked mode, it is a dynamic type error if $o_2$ is not \NULL{} and the interface of the class of $o_2$ is not a subtype of the actual type of $e_1.v$.
 
+\LMHash{}
 Let $T$ be the static type of $e_1$. It is a static type warning if $T$ does not have an accessible instance setter named $v=$ unless either:
 \begin{itemize}
 \item $T$ or a superinterface of $T$ is annotated with an annotation denoting a constant identical to the constant \code{@proxy} defined in \code{dart:core}. Or
@@ -3702,21 +4139,26 @@
 
 
 
+\LMHash{}
 It is a static type warning if the static type of $e_2$ may not be assigned to the static type of the formal parameter of the setter $v=$.   The static type of the expression $e_1.v$ \code{=} $e_2$ is the static type of $e_2$.
 
+\LMHash{}
 Evaluation of an assignment of the form $e_1[e_2]$ \code{=} $e_3$ is equivalent to the evaluation of the expression \code{(a, i, e)\{a.[]=(i, e); \RETURN{} e; \} ($e_1, e_2, e_3$)}.  The static type of the expression $e_1[e_2]$ \code{=} $e_3$ is the static type of $e_3$.
 
 % Should we add: It is a dynamic error if $e_1$ evaluates to an  constant list or map.
 
+\LMHash{}
 It is a static warning if an assignment of the form $v = e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is neither a local variable declaration with name $v$  nor setter declaration with name $v=$ in the lexical scope enclosing the assignment.
 
+\LMHash{}
 It is a compile-time error to invoke any of the setters of class \cd{Object} on a prefix object (\ref{imports}) or on a constant type literal that is  immediately followed by the token `.'.
 
 
 
 \subsubsection{Compound Assignment}
-\label{compoundAssignment}
+\LMLabel{compoundAssignment}
 
+\LMHash{}
 A compound assignment of the form $v$ $op\code{=} e$ is equivalent to $v \code{=} v$ $op$ $e$. A compound assignment of the form $C.v$ $op \code{=} e$ is equivalent to $C.v \code{=} C.v$ $op$ $e$. A compound assignment of the form $e_1.v$ $op = e_2$ is equivalent to \code{((x) $=>$ x.v = x.v $op$ $e_2$)($e_1$)} where $x$ is a variable that is not used in $e_2$. A compound assignment of the form  $e_1[e_2]$ $op\code{=} e_3$ is equivalent to 
 \code{((a, i) $=>$ a[i] = a[i] $op$ $e_3$)($e_1, e_2$)} where $a$ and $i$ are a variables that are not used in $e_3$. 
 
@@ -3738,8 +4180,9 @@
 
     
 \subsection{ Conditional}
-\label{conditional}
+\LMLabel{conditional}
 
+\LMHash{}
 A {\em conditional expression} evaluates one of two expressions based on a boolean condition.
 
 \begin{grammar}
@@ -3748,10 +4191,13 @@
     . % the first  branches could  top level expressions, it seems, but certainly NOT the second
 \end{grammar}
 
+\LMHash{}
 Evaluation of a conditional expression $c$ of the form $e_1 ? e_2 : e_3$ proceeds as follows:
 
+\LMHash{}
 First, $e_1$ is evaluated to an object $o_1$.  Then, $o_1$ is  subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$.  If $r$ is \TRUE, then the value of $c$ is the result of evaluating the expression $e_2$. Otherwise the value of $c$ is the result of evaluating the expression $e_3$. 
 
+\LMHash{}
 If all of the following hold:
 \begin{itemize}
 \item $e_1$ shows that a variable $v$ has type $T$.
@@ -3762,12 +4208,14 @@
 then the type of $v$ is known to be $T$ in $e_2$.
 
 
+\LMHash{}
  It is a static type warning if the static type of $e_1$ may not be assigned to \code{bool}.  The static type of $c$ is the least upper bound (\ref{leastUpperBounds}) of the static type of $e_2$ and the static type of $e_3$.
   
 
 \subsection{ Logical Boolean Expressions}
-\label{logicalBooleanExpressions}
+\LMLabel{logicalBooleanExpressions}
 
+\LMHash{}
 The logical boolean expressions combine boolean objects using the boolean conjunction and disjunction operators.
 
 \begin{grammar}
@@ -3782,12 +4230,16 @@
     .
  \end{grammar}
  
+\LMHash{}
 A {\em logical boolean expression} is either an equality expression (\ref{equality}), or an invocation of a logical boolean operator on an expression $e_1$ with argument $e_2$.
  
+\LMHash{}
 Evaluation of a logical boolean expression $b$ of the form $e_1 || e_2$ causes the evaluation of $e_1$ which is then  subjected to boolean conversion, yielding an object $o_1$; if $o_1$ is \TRUE, the result of evaluating $b$ is \TRUE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$, which is the value of $b$. 
 
+\LMHash{}
 Evaluation of a logical boolean expression $b$ of the form $e_1 \&\& e_2$ causes the evaluation of $e_1$ which is then subjected to boolean conversion, yielding an object $o_1$; if $o_1$ is not  \TRUE, the result of evaluating $b$ is \FALSE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion producing an object $r$, which is the value of $b$. 
 
+\LMHash{}
 A logical boolean expression $b$ of the form $e_1 \&\& e_2$ shows that a variable $v$ has type 
 $T$ if all of the following conditions hold:
 \begin{itemize}
@@ -3796,6 +4248,7 @@
 \item The variable $v$ is not mutated in $e_2$ or within a closure.
 \end{itemize}
 
+\LMHash{}
 Furthermore, if all of the following hold:
 \begin{itemize}
 \item $e_1$ shows that $v$ has type $T$.
@@ -3804,12 +4257,14 @@
 \end{itemize}
 then the type of $v$ is known to be $T$ in $e_2$.
 
+\LMHash{}
 It is a static warning if the static type of $e_1$ may not be assigned to \cd{bool} or if the static type of $e_2$ may not be assigned to \cd{bool}. The static type of a logical boolean expression is \code{bool}.
 
      
  \subsection{ Equality}
- \label{equality}
+ \LMLabel{equality}
  
+\LMHash{}
 Equality expressions test objects for equality.
 
  \begin{grammar}
@@ -3822,9 +4277,11 @@
     .
  \end{grammar}
  
+\LMHash{}
 An {\em equality expression} is either a relational expression (\ref{relationalExpressions}), or an invocation of an equality operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
 
 
+\LMHash{}
 Evaluation of an equality expression $ee$ of the form \code{$e_1$ == $e_2$} proceeds as follows:
 \begin{itemize}
 \item The expression $e_1$ is evaluated to an object $o_1$.
@@ -3834,6 +4291,7 @@
 \end{itemize}
 
 
+\LMHash{}
 Evaluation of an equality expression $ee$ of the form \code{\SUPER{} == $e$} proceeds as follows:
 \begin{itemize}
 \item The expression $e$ is evaluated to an object $o$.
@@ -3848,6 +4306,7 @@
 Another implication is that there is never a need to use \code{identical()} to test against \NULL{}, nor should anyone ever worry about whether to write \NULL{} == $e$ or $e$ == \NULL{}. 
 }
 
+\LMHash{}
 An equality expression of the form \code{$e_1$ != $e_2$}  is equivalent to the expression \code{!($e_1$ == $e_2$)}. An equality expression of the form \code{\SUPER{} != $e$} is equivalent to the expression \code{!(\SUPER{} == $e$)}.
 
 
@@ -3855,12 +4314,14 @@
  %The expression $e_1$ is evaluated to an object $o_1$; then the expression $e_2$ is evaluated to an object $o_2$.  Next, if $o_1$ and $o_2$ are the same object, then $ee$ evaluates to \TRUE{}, otherwise $ee$ evaluates to \FALSE{}. 
  
 
+\LMHash{}
  The static type of an equality expression is \code{bool}.
  
  
 \subsection{ Relational Expressions}
-\label{relationalExpressions}
+\LMLabel{relationalExpressions}
 
+\LMHash{}
 Relational expressions invoke the relational operators on objects.
 
  \begin{grammar}
@@ -3876,13 +4337,16 @@
     .
  \end{grammar}
  
+\LMHash{}
 A {\em relational expression} is either a bitwise expression (\ref{bitwiseExpressions}), or an invocation of a relational operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
  
+\LMHash{}
 A relational expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. A relational expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}. 
 
 \subsection{ Bitwise Expressions}
-\label{bitwiseExpressions}
+\LMLabel{bitwiseExpressions}
 
+\LMHash{}
 Bitwise expressions invoke the bitwise operators on objects.
 
  \begin{grammar}
@@ -3904,8 +4368,10 @@
     .
  \end{grammar}
  
+\LMHash{}
 A {\em bitwise expression} is either a shift expression (\ref{shift}), or an invocation of a bitwise operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
  
+\LMHash{}
  A bitwise expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation $e_1.op(e_2)$.
 A bitwise expression of the form  \code{\SUPER{} $op$ $e_2$} is equivalent to the method invocation \code{\SUPER{}.op($e_2$)}.
 
@@ -3915,8 +4381,9 @@
 
  
 \subsection{ Shift}
-\label{shift}
+\LMLabel{shift}
 
+\LMHash{}
 Shift expressions invoke the shift operators on objects.
 
  \begin{grammar}
@@ -3929,8 +4396,10 @@
     .
  \end{grammar}
  
+\LMHash{}
 A {\em shift expression} is either an additive expression (\ref{additiveExpressions}), or an invocation of a shift operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
  
+\LMHash{}
  A shift expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. A shift expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}. 
 
 \commentary{
@@ -3943,8 +4412,9 @@
 }
      
  \subsection{ Additive Expressions}
-\label{additiveExpressions}
+\LMLabel{additiveExpressions}
 
+\LMHash{}
 Additive expressions invoke the addition operators on objects.
 
  \begin{grammar}
@@ -3957,16 +4427,20 @@
     .
  \end{grammar}
  
+\LMHash{}
 An {\em additive expression} is either a multiplicative expression (\ref{multiplicativeExpressions}), or an invocation of an additive operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
 
+\LMHash{}
 An additive expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. An additive expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}. 
 
+\LMHash{}
 The static type of an additive expression is usually determined by the signature given in the declaration of the operator used. However, invocations of the operators \cd{+}  and \cd{-} of class \cd{int} are treated specially by the typechecker. The static type of an expression $e_1 + e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}. The static type of an expression $e_1 - e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}.
  
  
 \subsection{ Multiplicative Expressions}
-\label{multiplicativeExpressions}
+\LMLabel{multiplicativeExpressions}
 
+\LMHash{}
 Multiplicative expressions invoke the multiplication operators on objects.
 
  \begin{grammar}
@@ -3982,15 +4456,19 @@
     
  \end{grammar}
     
+\LMHash{}
  A {\em multiplicative expression} is either a unary expression (\ref{unaryExpressions}), or an invocation of a multiplicative operator on either \SUPER{} or an expression $e_1$, with argument $e_2$.
  
+\LMHash{}
  A multiplicative expression of the form  $e_1$ $op$ $e_2$ is equivalent to the method invocation \code{$e_1$.$op$($e_2$)}. A multiplicative expression of the form  \SUPER{} $op$ $e_2$ is equivalent to the method invocation \code{\SUPER{}.$op$($e_2$)}.   
  
+\LMHash{}
 The static type of an multiplicative expression is usually determined by the signature given in the declaration of the operator used. However, invocations of the operators \cd{*}, \cd{\%}  and \cd{\~{}/} of class \cd{int} are treated specially by the typechecker. The static type of an expression $e_1 * e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}. The static type of an expression $e_1 \% e_2$ where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}, and \cd{double} if the static type of $e_2$ is \cd{double}.  The static type of an expression \cd{$e_1$ \~{}/ $e_2$} where $e_1$ has static type \cd{int} is \cd{int} if the static type of $e_2$ is \cd{int}.
  
 \subsection{ Unary Expressions}
-\label{unaryExpressions}
+\LMLabel{unaryExpressions}
 
+\LMHash{}
 Unary expressions invoke unary operators on objects.
 
 \begin{grammar}
@@ -4019,19 +4497,24 @@
     
 \end{grammar}
 
+\LMHash{}
 A {\em unary expression} is either a postfix expression  (\ref{postfixExpressions}), an await expression (\ref{awaitExpressions}) or an invocation of a prefix operator on an expression or an invocation of a unary operator on either \SUPER{} or an expression $e$.
 
+\LMHash{}
 The expression $!e$ is equivalent to the expression $e?$ $ \FALSE{} :\TRUE{}$. 
 
+\LMHash{}
 Evaluation of an expression of the form \code{++$e$} is equivalent to \code{$e$ += 1}.  Evaluation of an expression of the form \code{-{}-$e$} is equivalent to \code{$e$ -= 1}. 
 
 %The expression $-e$ is equivalent to the method invocation \code{$e$.-()}.  The expression \code{-\SUPER{}} is equivalent  to the method invocation \code{\SUPER{}.-()}.
 
+\LMHash{}
 An expression of the form \code{$op$ $e$} is equivalent to the method invocation \code{$e.op()$}. An expression of the form \code{$op$ \SUPER{}} is equivalent to the method invocation  (\ref{superInvocation}) \code{\SUPER{}.$op()$}.
 
 \subsection{ Await Expressions}
-\label{awaitExpressions}
+\LMLabel{awaitExpressions}
 
+\LMHash{}
 An {\em await expression} allows code to yield control until an asynchronous operation (\ref{functions}) completes. 
 
  \begin{grammar}
@@ -4039,11 +4522,14 @@
       \AWAIT{} unaryExpression
  \end{grammar}
 
+\LMHash{}
 Evaluation of an await expression $a$ of the form \AWAIT{} $e$ proceeds as follows:
 First, the expression $e$ is evaluated. Next:
 
+\LMHash{}
 If $e$ raises an exception $x$, then an instance $f$ of class \code{Future} is allocated and later completed with $x$. Otherwise, if $e$ evaluates to an object $o$ that is not an instance of \code{Future}, then let $f$ be the result of calling \code{Future.value()} with $o$ as its argument; otherwise let $f$ be the result of evaluating $e$. 
 
+\LMHash{}
 Next,  execution of the function $m$ immediately enclosing $a$ is suspended until after $f$ completes. The stream associated with the innermost enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused. At some time after $f$ is completed, control returns to the current invocation. The stream associated with the innermost enclosing asynchronous for loop  (\ref{asynchronousFor-in}), if any, is resumed. If $f$ has completed with an exception $x$, $a$ raises $x$. If $f$ completes with a value $v$, $a$ evaluates to $v$.
 
 %Otherwise, the value of $a$ is the value of $e$. If evaluation of $e$ raises an exception $x$, $a$ raises $x$.
@@ -4060,6 +4546,7 @@
 It is not a static warning if the type of $e$ is not a subtype of \code{Future}. Tools may choose to give a hint in such cases.
 }
 
+\LMHash{}
 Let $flatten(T) = flatten(S)$ if $T = Future<S>$, and $T$ otherwise. The static type of $a$ is $flatten(T)$ where $T$ is the static type of $e$.
 
 \rationale{
@@ -4070,8 +4557,9 @@
 
      
 \subsection{ Postfix Expressions}
-\label{postfixExpressions}
+\LMLabel{postfixExpressions}
 
+\LMHash{}
 Postfix expressions invoke the postfix operators on objects.
 
  \begin{grammar}
@@ -4093,45 +4581,55 @@
         
  \end{grammar}
  
+\LMHash{}
  A {\em postfix expression} is either a primary expression, a function, method or getter invocation, or an invocation of a postfix operator on an expression $e$.
 
+\LMHash{}
 A postfix expression of the form \code{$v$++}, where $v$ is an identifier, is equivalent to \code{()\{var r = $v$; $v$ = r + 1; return r\}()}.
 
 \rationale{The above ensures that if $v$ is a field, the getter gets called exactly once. Likewise in the cases below. 
 }
 
+\LMHash{}
 A postfix expression of the form \code{$C.v$ ++} is equivalent to 
 
 \code{()\{var r = $C.v$; $C.v$ = r + 1; return r\}()}.
 
+\LMHash{}
 A postfix expression of the form \code{$e_1.v$++} is equivalent to 
 
 \code{(x)\{var r = x.v; x.v = r + 1; \RETURN{} r\}($e_1$)}.
 
+\LMHash{}
 A postfix expression of the form \code{$e_1[e_2]$++},  is equivalent to 
 
 \code{(a, i)\{var r = a[i]; a[i] = r + 1; return r\}($e_1$, $e_2$)}.
 
+\LMHash{}
 A postfix expression of the form \code{$v$-{}-}, where $v$ is an identifier, is equivalent to 
 
 \code{()\{var r = $v$; $v$ = r - 1; return r\}()}.
 
+\LMHash{}
 A postfix expression of the form \code{$C.v$-{}-} is equivalent to 
 
 \code{()\{var r = $C.v$; $C.v$ = r - 1; return r\}()}.
 
+\LMHash{}
 A postfix expression of the form \code{$e_1.v$-{}-} is equivalent to 
 
 \code{(x)\{var r = x.v; x.v = r - 1; \RETURN{} r\}($e_1$)}.
 
+\LMHash{}
 A postfix expression of the form \code{$e_1[e_2]$-{}-},  is equivalent to 
 
 \code{(a, i)\{var r = a[i]; a[i] = r - 1; return r\}($e_1$, $e_2$)}.
  
 
 \subsection{ Assignable Expressions}
-\label{assignableExpressions}
+\LMLabel{assignableExpressions}
 
+\LMHash{}
 Assignable expressions are expressions that can appear on the left hand side of an assignment.
 This section describes how to evaluate these expressions when they do not constitute the complete left hand side of an assignment.
 
@@ -4154,6 +4652,7 @@
 
 \end{grammar}
 
+\LMHash{}
 An {\em assignable expression} is either:
 \begin{itemize}
  \item An identifier. 
@@ -4162,21 +4661,27 @@
 \end{itemize}
 
 
+\LMHash{}
 An assignable expression of the form $id$ is evaluated as an identifier expression (\ref{identifierReference}).
 
 %An assignable expression of the form $e.id(a_1, \ldots, a_n)$ is evaluated as a method invocation (\ref{methodInvocation}).
 
+\LMHash{}
 An assignable expression of the form $e.id$ is evaluated as a property extraction  (\ref{propertyExtraction}).
 
+\LMHash{}
 An assignable expression of the form \code{$e_1$[$e_2$]} is evaluated as a method invocation of the operator method \code{[]} on $e_1$ with argument $e_2$.
 
+\LMHash{}
 An assignable expression of the form \code{\SUPER{}.id}  is evaluated as a property extraction.
 
+\LMHash{}
 An assignable expression of the form \code{\SUPER{}[$e_2$]} is equivalent to the method invocation  \code{\SUPER{}.[]($e_2$)}.
 
 \subsection{ Identifier Reference}
-\label{identifierReference}
+\LMLabel{identifierReference}
 
+\LMHash{}
 An {\em identifier expression} consists of a single identifier; it provides access to an object via an unqualified name.
 
 \begin{grammar}
@@ -4235,21 +4740,25 @@
       . 
 \end{grammar}
 
+\LMHash{}
 A built-in identifier is one of the identifiers produced by the production {\em BUILT\_IN\_IDENTIFIER}. It is a compile-time error if a built-in identifier is used as the declared name of a prefix, class, type parameter or type alias. It is a compile-time error to use a built-in identifier other than \DYNAMIC{} as a type annotation or type parameter.
 
 \rationale{
 Built-in identifiers are identifiers that are used as keywords in Dart, but are not reserved words in Javascript. To minimize incompatibilities when porting Javascript code to Dart, we do not make these into reserved words. A built-in identifier may not be used to name a class or type. In other words, they are treated as reserved words when used as types.  This eliminates many confusing situations without causing compatibility problems. After all, a Javascript program has no type declarations or annotations so no clash can occur.  Furthermore, types should begin with an uppercase letter (see the appendix) and so no clash should occur in any Dart user program anyway.
 }
 
+\LMHash{}
 It is a compile-time error if any of the identifiers \ASYNC, \AWAIT{} or \YIELD{} is used as an identifier in a function body marked with either \ASYNC{}, \ASYNC* or \SYNC*.
 
 \rationale{
 For compatibility reasons, new constructs cannot  rely upon new reserved words or even built-in identifiers. However, the constructs above are only usable in contexts that require special markers introduced concurrently with these constructs, so no old code could use them. Hence the restriction, which treats these names as reserved words in a limited context.
 }
 
+\LMHash{}
 Evaluation of an identifier expression $e$ of the form $id$ proceeds as follows:
 
 
+\LMHash{}
 Let $d$ be the innermost declaration in the enclosing lexical scope whose name is $id$ or $id=$.  If no such declaration exists in the lexical scope, let $d$ be the declaration of the inherited member named $id$ if it exists. 
 %If no such member exists, let $d$ be the declaration of the static member name $id$ declared in a superclass of the current class, if it exists.
 
@@ -4276,6 +4785,7 @@
 % This implies that referring to an undefined static getter by simple name is an error, whereas doing so by qualified name is only a warning. Same with assignments.  Revise?
 \end{itemize}
 
+\LMHash{}
 The static type of $e$ is determined as follows:
 
 \begin{itemize}
@@ -4294,11 +4804,13 @@
  This prevents situations where one uses uncorrelated setters and getters. The intent is to prevent errors when a  getter in a surrounding scope is used accidentally.
  }
  
+\LMHash{}
 It is a static warning if an identifier expression $id$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is no declaration $d$ with name $id$ in the lexical scope enclosing the expression.
 
 \subsection{ Type Test}
-\label{typeTest}
+\LMLabel{typeTest}
 
+\LMHash{}
 The {\em is-expression} tests if an object is a member of a type.
 
  \begin{grammar}
@@ -4312,8 +4824,10 @@
     .
  \end{grammar}
  
+\LMHash{}
  Evaluation of the is-expression \code{$e$ \IS{} $T$} proceeds as follows:
 
+\LMHash{}
 The expression $e$ is evaluated to a value $v$. Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs. Otherwise, if the interface of the class of $v$ is a subtype of $T$, the is-expression evaluates to \TRUE. Otherwise it evaluates to \FALSE.
 
 \commentary{It follows that \code{$e$ \IS{} Object} is always true. This makes sense in a language where everything is an object. 
@@ -4321,11 +4835,13 @@
 Also note that \code{\NULL{} \IS{} $T$} is false unless $T = \code{Object}$, $T = \code{\DYNAMIC{}}$ or $T = \code{Null}$.  The former two are useless, as is anything of the form \code{$e$ \IS{} Object} or \code{$e$ \IS{} \DYNAMIC{}}.  Users should test for a null value directly rather than via type tests.
 }
 
+\LMHash{}
 The is-expression \code{$e$ \IS{}! $T$} is equivalent to \code{!($e$ \IS{} $T$)}.
 
 % Add flow dependent types
 
 
+\LMHash{}
 Let $v$  be a local variable or a formal parameter. An is-expression of the form \code{$v$ \IS{} $T$} shows that $v$  has type $T$ iff $T$ is more specific than the type $S$ of the expression $v$ and  both $T \ne \DYNAMIC{}$ and $S \ne \DYNAMIC{}$.
 
 \rationale{
@@ -4338,12 +4854,14 @@
 We do not want to refine the type of a variable of type \DYNAMIC{}, as this could lead to more warnings rather than less.  The opposite requirement, that $T \ne \DYNAMIC{}$ is a safeguard lest $S$ ever be $\bot$.
 }
 
+\LMHash{}
 The static type of an is-expression is \code{bool}. 
 
 
 \subsection{ Type Cast}
-\label{typeCast}
+\LMLabel{typeCast}
 
+\LMHash{}
 The {\em cast expression} ensures that an object is a member of a type.
 
  \begin{grammar}
@@ -4357,16 +4875,19 @@
     .
  \end{grammar}
  
+\LMHash{}
  Evaluation of the cast expression \code{$e$ \AS{} $T$} proceeds as follows:
 
+\LMHash{}
 The expression $e$ is evaluated to a value $v$. Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs. Otherwise, if the interface of the class of $v$ is a subtype of $T$, the cast expression evaluates to $v$. Otherwise, if $v$ is \NULL{}, the cast expression evaluates to $v$. 
 In all other cases,  a \code{CastError} is thrown.
  
+\LMHash{}
 The static type of a cast expression  \code{$e$ \AS{} $T$}  is $T$. 
 
 
 \section{Statements}
-\label{statements}
+\LMLabel{statements}
 
  \begin{grammar}
 {\bf statements:}
@@ -4399,21 +4920,26 @@
  \end{grammar}
  
  \subsection{Blocks}
- \label{blocks}
+ \LMLabel{blocks}
  
+\LMHash{}
  A {\em block statement} supports sequencing of code.
 
+\LMHash{}
 Execution of a block statement $\{s_1, \ldots,  s_n\}$ proceeds as follows:
 
+\LMHash{}
 For $i \in 1 .. n, s_i$ is executed.
 
+\LMHash{}
 A block statement introduces a new scope, which is nested in the lexically enclosing scope in which the block statement appears.
 
 
 
  \subsection{Expression Statements}
- \label{expressionStatements}
+ \LMLabel{expressionStatements}
  
+\LMHash{}
 An {\em expression statement} consists of an expression other than a non-constant map literal (\ref{maps}) that has no explicit type arguments. 
 
 \rationale{
@@ -4426,14 +4952,17 @@
   .
  \end{grammar}
  
+\LMHash{}
 Execution of an expression statement \code{$e$;} proceeds by evaluating $e$. 
 
+\LMHash{}
 It is a compile-time error if a non-constant map literal that has no explicit type arguments appears in a place where a statement is expected.
 
 \subsection{Local Variable Declaration}
-\label{localVariableDeclaration}
+\LMLabel{localVariableDeclaration}
 
 
+\LMHash{}
 A {\em variable declaration statement }declares a new local variable.
 
  \begin{grammar}
@@ -4442,10 +4971,13 @@
   .
  \end{grammar}
  
+\LMHash{}
  Executing a variable declaration statement of one of the forms  \VAR{} $v = e;$, $T$ $v = e; $, \CONST{}  $v = e;$, \CONST{} $T$ $v = e;$, \FINAL{}  $v = e;$ or \FINAL{} $T$ $v = e;$ proceeds as follows:
  
+\LMHash{}
  The expression $e$ is evaluated to an object $o$. Then, the variable $v$ is set to $o$.
  
+\LMHash{}
  A variable declaration statement of the form \VAR{} $v;$ is equivalent to \VAR{} $v = \NULL{};$. A variable declaration statement of the form $T$ $v;$ is equivalent to $T$ $v = \NULL{};$. 
 
 \commentary{
@@ -4470,9 +5002,9 @@
 
 
 \subsection{Local Function Declaration}
+\LMLabel{localFunctionDeclaration}
 
-\label{localFunctionDeclaration}
-
+\LMHash{}
 A function declaration statement declares a new local function (\ref{functionDeclarations}). 
 
  \begin{grammar}
@@ -4481,6 +5013,7 @@
   .
  \end{grammar}
  
+\LMHash{}
 A function declaration statement of one of the forms $id$ $signature$ $\{ statements \}$ or $T$ $id$ $signature$ $\{ statements \}$ causes a new function named $id$ to be added to the innermost enclosing scope. It is a compile-time error to reference a local function before its declaration. 
 
 
@@ -4524,8 +5057,9 @@
 % elaborate on function identity and equality, runtime type. Likewsie in function expressions (closures) and declarations
 
 \subsection{If}
-\label{if}
+\LMLabel{if}
 
+\LMHash{}
 The {\em if statement} allows for conditional execution of statements.
 
 \begin{grammar}
@@ -4536,6 +5070,7 @@
  
 Execution of an if statement of the form  \code {\IF{} (}$b$\code{)}$s_1$ \code{\ELSE{} } $s_2$ proceeds as follows:
  
+\LMHash{}
  First, the expression $b$ is evaluated to an object $o$. Then, $o$ is  subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$. If $r$ is \TRUE{}, then the statement $\{s_1\}$ is executed, otherwise statement $\{s_2\}$ is executed.
 
  
@@ -4559,8 +5094,10 @@
 Under reasonable scope rules  such code is problematic. If we assume that \code{v} is declared in the scope of the method \code{main()}, then when \code{somePredicate} is false, \code{v} will be uninitialized when accessed.  The cleanest approach would be to require a block following the test, rather than an arbitrary statement. However, this goes against long standing custom, undermining Dart's goal of familiarity.  Instead, we choose to insert a block, introducing a scope,  around the statement following the predicate (and similarly for \ELSE{} and loops). This will cause both a warning and a runtime error in the case above.  Of course, if there is a declaration of \code{v} in the surrounding scope, programmers might still be surprised. We expect tools to highlight cases of shadowing to help avoid such situations.
  }
  
+\LMHash{}
   It is a static type warning if the type of the expression $b$ may not be assigned to \code{bool}.  
   
+\LMHash{}
 If:
 \begin{itemize}
 \item  $b$ shows that a variable $v$ has type $T$.
@@ -4569,6 +5106,7 @@
 \end{itemize}
 then the type of $v$ is known to be $T$ in $s_1$.  
 
+\LMHash{}
  An if statement of the form  \code {\IF{} (}$b$\code{)}$s_1$ is equivalent to the if statement  
  
  \code {\IF{} (}$b$\code{)}$s_1$ \code{\ELSE{} \{\}}.
@@ -4576,8 +5114,9 @@
 
     
 \subsection{For}
-\label{for}
+\LMLabel{for}
 
+\LMHash{}
 The {\em for statement} supports iteration.
 
 \begin{grammar}
@@ -4595,16 +5134,20 @@
     .
  \end{grammar}
  
+\LMHash{}
  The for statement has three forms - the traditional for loop and two forms of the for-in statement - synchronous and asynchronous.
 
 \subsubsection{For Loop}
-\label{forLoop}
+\LMLabel{forLoop}
 
 
+\LMHash{}
 Execution of a for statement of the form   \code{ \FOR{} (\VAR{} $v = e_0$ ; $c$; $e$) $s$} proceeds as follows:
 
+\LMHash{}
 If $c$ is empty then let $c^\prime$ be \TRUE{} otherwise let  $c^\prime$ be $c$.
 
+\LMHash{}
 First the variable declaration statement \VAR{} $v = e_0$ is executed. Then:
 \begin{enumerate}
 \item
@@ -4630,6 +5173,7 @@
 Instead, each iteration has its own distinct variable.  The first iteration uses the variable created by the initial declaration. The expression executed at the end of each iteration uses a fresh variable $v^{\prime\prime}$, bound to the value of the current iteration variable, and then modifies $v^{\prime\prime}$ as required for the next iteration.
 }
 
+\LMHash{}
 It is a static warning if the static type of $c$ may not be assigned to \cd{bool}.
 
 %A for statement of the form \code{ \FOR{} ($d$ ; $c$; $e$) $s$} is equivalent to the the following code:
@@ -4645,8 +5189,9 @@
 %If $c$ is empty, it is interpreted as \TRUE{}.
 
 \subsubsection{For-in}
-\label{for-in}
+\LMLabel{for-in}
 
+\LMHash{}
 A for statement of the form \code{ \FOR{} ($finalConstVarOrType?$ id \IN{} $e$) $s$} is equivalent to the following code: 
 
 \begin{dartCode}
@@ -4663,30 +5208,37 @@
 }
  
 \subsubsection{Asynchronous For-in}
-\label{asynchronousFor-in}
+\LMLabel{asynchronousFor-in}
 
+\LMHash{}
 A for-in statement may be asynchronous. The asynchronous form is designed to iterate over streams. An asynchronous for loop is distinguished by the keyword \AWAIT{} immediately preceding the keyword \FOR.
 
+\LMHash{}
 Execution of a for-in statement of the form  \code{\AWAIT{} \FOR{} (finalConstVarOrType? id \IN{} $e$) $s$} proceeds as follows:
 
+\LMHash{}
 The expression $e$ is evaluated to an object $o$. It is a dynamic error if $o$ is not an instance of a class that implements \code{Stream}. Otherwise, the expression \code{\AWAIT{} $v_f$}  (\ref{awaitExpressions}) is evaluated, where $v_f$ is a fresh variable whose value is a fresh instance (\ref{generativeConstructors}) $f$ implementing the built-in class \code{Future}.
 
+\LMHash{}
 The stream $o$ is listened to,  and on each data event in $o$ the statement $s$ is executed with \code{id} bound to the value of the current element of the stream. If $s$ raises an exception, or if $o$ raises an exception, then $f$ is completed with that exception. Otherwise, when all events in the stream $o$ have been processed, $f$ is completed with \NULL{}  (\ref{null}).
 
+\LMHash{}
 Let $u$ be the stream associated with the immediately enclosing asynchronous for loop or generator function (\ref{functions}), if any. If another event $e_u$ of $u$ occurs before execution of $s$ is complete, handling of $e_u$ must wait until $s$ is complete.
 
 \rationale{
 The future $f$ and the corresponding \AWAIT{} expression ensure that execution suspends as an asynchronous for loop begins and resumes after the \FOR{} statement when it ends. They also ensure that the stream of any enclosing asynchronous \FOR{} loop is paused for the duration of this loop.
 }
 
+\LMHash{}
 It is a compile-time error if an asynchronous for-in statement appears inside a synchronous function (\ref{functions}). It is a compile-time error if a traditional for loop  (\ref{forLoop}) is prefixed by the \AWAIT{}  keyword.
 
 \rationale{An asynchronous loop would make no sense within a synchronous function, for the same reasons that an await expression makes no sense in a synchronous function.}
 
  
 \subsection{While}
-\label{while}
+\LMLabel{while}
 
+\LMHash{}
 The while statement supports conditional iteration, where the condition is evaluated prior to the loop.
 
 \begin{grammar}
@@ -4695,16 +5247,20 @@
 .
  \end{grammar}
  
+\LMHash{}
  Execution of a while statement of the form \code{\WHILE{} ($e$) $s$;} proceeds as follows: 
 
+\LMHash{}
 The expression $e$ is evaluated to an object $o$. Then, $o$ is  subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$.  If $r$ is \TRUE{}, then the statement $\{s\}$ is executed and then the while statement is re-executed recursively. If $r$ is \FALSE{}, execution of the while statement is complete.
 
+\LMHash{}
 It is a static type warning if the static type of $e$ may not be assigned to \code{bool}.
     
 
 \subsection{Do}
-\label{do}
+\LMLabel{do}
 
+\LMHash{}
 The do statement supports conditional iteration, where the condition is evaluated after the loop.
 
 \begin{grammar}
@@ -4714,15 +5270,19 @@
  \end{grammar}
 
     
+\LMHash{}
 Execution of a do statement of the form \code{\DO{} $s$ \WHILE{} ($e$);} proceeds as follows: 
 
+\LMHash{}
 The statement $\{s\}$ is executed. Then, the expression $e$ is evaluated to an object $o$. Then, $o$ is  subjected to boolean conversion (\ref{booleanConversion}), producing an object $r$. If $r$ is \FALSE{}, execution of the do statement is complete. If $r$ is \TRUE{}, then the do statement is re-executed recursively. 
 
+\LMHash{}
 It is a static type warning if the static type of $e$ may not be assigned to \code{bool}. 
 
 \subsection{Switch}
-\label{switch}
+\LMLabel{switch}
 
+\LMHash{}
 The {\em switch statement} supports dispatching control among a large number of cases.
 
  \begin{grammar}
@@ -4740,6 +5300,7 @@
     .
  \end{grammar}
  
+\LMHash{}
  Given a switch statement of the form 
  
 \begin{dartCode}
@@ -4771,6 +5332,7 @@
 \commentary{In other words,  all the expressions in the cases evaluate to constants of the exact same user defined class or are of certain known types.  Note that the values of the expressions are known at compile-time, and are independent of any static type annotations.
 }
 
+\LMHash{}
 It is a compile-time error if the class $C$ has an implementation of the operator $==$ other than the one inherited from \code{Object} unless the value of the expression is a string, an integer, literal symbol or the result of invoking a constant constructor of class \cd{Symbol}.
  
  \rationale{
@@ -4782,6 +5344,7 @@
 The \SWITCH{}  statement should only be used in very limited situations (e.g., interpreters or scanners).  
 }
 
+\LMHash{}
 Execution of a switch statement of the form
 
 \begin{dartCode}
@@ -4805,14 +5368,18 @@
 
 proceeds as follows:
 
+\LMHash{}
 The statement \code{\VAR{} id = $e$;} is evaluated, where \code{id} is a variable whose name is distinct from any other variable in the program. In checked mode, it is a run time error if the value of $e$ is not an instance of the same class as the constants $e_1 \ldots e_n$. 
 
 \commentary{Note that if there are no case clauses ($n = 0$), the type of $e$ does not matter.}
 
+\LMHash{}
 Next, the case clause \CASE{} $e_{1}: s_{1}$ is executed if it exists. If \CASE{} $e_{1}: s_{1}$ does not exist, then if there is a  \DEFAULT{} clause it is executed by executing $s_{n+1}$.
 
+\LMHash{}
 A case clause introduces a new scope, nested in the lexically surrounding scope. The scope of a case clause ends immediately after the case clause's statement list.
 
+\LMHash{}
 Execution of a \CASE{} clause \CASE{} $e_{k}: s_{k}$ of a  switch statement  
 
 \begin{dartCode}
@@ -4826,11 +5393,13 @@
 
 proceeds as follows:
 
+\LMHash{}
 The expression \code{$e_k$ == id} is evaluated to an object $o$ which is then subjected to boolean conversion yielding a value $v$. 
 If $v$ is not  \TRUE{} the following case,  \CASE{} $e_{k+1}: s_{k+1}$ is executed if it exists. If  \CASE{} $e_{k+1}: s_{k+1}$ does not exist, then the \DEFAULT{} clause is executed by executing $s_{n+1}$.
 If $v$ is \TRUE{},   let $h$ be the smallest number such that $h \ge k$ and $s_h$ is non-empty. If no such $h$ exists, let $h = n + 1$. The  sequence of statements $s_h$ is then executed.
 If execution reaches the point after $s_h$  then  a runtime error occurs, unless $h = n+1$.
 
+\LMHash{}
 Execution of a \CASE{} clause \CASE{} $e_{k}: s_{k}$ of a  switch statement  
 
 \begin{dartCode}
@@ -4843,6 +5412,7 @@
 
 proceeds as follows:
 
+\LMHash{}
 The expression \code{$e_k$ == id} is evaluated to an object $o$ which is then subjected to boolean conversion yielding a value $v$. 
 If $v$ is not  \TRUE{} the following case,  \CASE{} $e_{k+1}: s_{k+1}$ is executed if it exists. 
 If $v$ is \TRUE{},   let $h$ be the smallest integer such that $h \ge k$ and $s_h$ is non-empty. The  sequence of statements $s_h$ is  executed if it exists.
@@ -4853,6 +5423,7 @@
 In other words, there is no implicit fall-through between cases. The last case in a switch (default or otherwise) can `fall-through' to the end of the statement.
 }
 
+\LMHash{}
 It is a static warning if the type of $e$ may not be assigned to the type of $e_k$. It is a static warning if the last statement of the statement sequence $s_k$ is not a \BREAK{}, \CONTINUE{}, \RETURN{} or \THROW{} statement.
 
 \rationale{
@@ -4871,6 +5442,7 @@
   Very elaborate code in a case clause is probably bad style in any case, and such code can always be refactored.
 }
  
+\LMHash{}
  It is a static warning if all of the following conditions hold:
  \begin{itemize}
 \item  The switch statement does not have a default clause.
@@ -4884,9 +5456,10 @@
 
  
 \subsection{ Rethrow}
-\label{rethrow}
+\LMLabel{rethrow}
 
 
+\LMHash{}
 The {\em rethrow statement}  is used to re-raise an exception.
 
  \begin{grammar}
@@ -4895,33 +5468,40 @@
     .
  \end{grammar}
  
+\LMHash{}
 Execution of a \code{\RETHROW{}} statement proceeds as follows:
 
+\LMHash{}
 Let $f$ be the immediately enclosing function, and let \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$)}  be the immediately enclosing catch clause (\ref{try}).
 
 \rationale{
 A \RETHROW{} statement always appears inside a \CATCH{} clause, and any \CATCH{} clause is semantically equivalent to some \CATCH{} clause of the form \code{\ON{} $T$ \CATCH{} (p1, p2)}.  So we can assume that the \RETHROW{} is enclosed in a \CATCH{} clause of that form.
 }
 
+\LMHash{}
 The current exception (\ref{throw}) is set to $p_1$, the current return value (\ref{return}) becomes undefined, and the active stack trace (\ref{try}) is set to $p_2$.
 
+\LMHash{}
 If $f$ is marked \ASYNC{} or \ASYNC* (\ref{functions}) and there is a dynamically enclosing exception handler (\ref{try}) $h$ introduced by the current activation, control is transferred to $h$, otherwise $f$  terminates.
 
 \rationale{
 In the case of an asynchronous function, the dynamically enclosing exception handler is only relevant within the function. If an exception is not caught within the function, the exception value is channelled through a future or stream rather than propagating via exception handlers.
 }
 
+\LMHash{}
 Otherwise, control is transferred to the  innermost enclosing exception handler.
 
 \commentary{The change in control may result in multiple functions terminating if these functions do not catch the exception via a \CATCH{} or \FINALLY{} clause, both of which introduce a dynamically enclosing exception handler.}
 
+\LMHash{}
 It is a compile-time error if a  \code{\RETHROW{}} statement is not enclosed within an \ON-\CATCH{} clause. 
 
 
 
 \subsection{ Try}
-\label{try}
+\LMLabel{try}
 
+\LMHash{}
 The try statement supports the definition of exception handling code in a structured way.
 
 \begin{grammar}
@@ -4942,6 +5522,7 @@
     .
  \end{grammar}
  
+\LMHash{}
  A try statement consists of a block statement, followed by at least one of:
  \begin{enumerate}
  \item
@@ -4954,23 +5535,28 @@
 The syntax is designed to be upward compatible with existing Javascript programs. The \ON{} clause can be omitted, leaving what looks like a Javascript catch clause.
 }
 
+\LMHash{}
 An \ON{}-\CATCH{} clause of the form   \code{\ON{} $T$ \CATCH{} ($p_1, p_2$) $s$}  {\em matches} an object $o$  if the type of $o$ is a subtype of $T$.  If $T$ is a malformed or deferred type  (\ref{staticTypes}), then performing a match causes a run time error.
 
 \commentary {
 It is of course a static warning if $T$ is a deferred or malformed type.
 }
 
+\LMHash{}
 An \ON{}-\CATCH{} clause of the form   \code{\ON{} $T$ \CATCH{} ($p_1, p_2$) $s$} introduces a new scope $CS$ in which final local variables specified by $p_1$ and $p_2$ are defined. The statement $s$ is enclosed within $CS$. The static type of $p_1$ is $T$ and the static type of $p_2$ is \code{StackTrace}.
 
 
+\LMHash{}
 An \ON{}-\CATCH{} clause of the form  \code{\ON{} $T$ \CATCH{} ($p_1$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} $T$ \CATCH{} ($p_1, p_2$) $s$} where $p_2$ is an identifier that does not occur anywhere else in the program. 
 
 
+\LMHash{}
 An \ON{}-\CATCH{} clause of the form  \code{\CATCH{} ($p$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} \DYNAMIC{} \CATCH{} ($p$) $s$}. An \ON{}-\CATCH{} clause of the form  \code{\CATCH{} ($p_1, p_2$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} \DYNAMIC{} \CATCH{} ($p_1, p_2$) $s$}.
 
 
 %If an explicit type is associated with of $p_2$, it is a static warning if that type is not \code{Object} or \DYNAMIC{}.
 
+\LMHash{}
 The {\em active stack trace} is an object whose \code{toString()} method produces a string that is a record of exactly those function activations within the current isolate that had not completed execution at the point where the current exception (\ref{throw}) was thrown.
 %\begin{enumerate}
 %\item Started execution after the currently executing function.
@@ -5001,19 +5587,24 @@
  
  % A position can be represented via a Token. If we make that part of the core reflection facility, we can state this here.
 
+\LMHash{}
 A try statement \TRY{} $s_1$ $on-catch_1 \ldots  on-catch_n$ \FINALLY{} $s_f$  defines an exception handler $h$ that executes as follows:
 
+\LMHash{}
 The \ON{}-\CATCH{} clauses are examined in order, starting with $catch_1$, until either an \ON{}-\CATCH{} clause that matches the current exception (\ref{throw}) is found, or the list of \ON{}-\CATCH{} clauses has been exhausted. If an \ON{}-\CATCH{} clause $on-catch_k$ is found, then $p_{k1}$ is bound to the current exception,  $p_{k2}$, if declared,  is bound to the active stack trace, and then $catch_k$ is executed. If no \ON{}-\CATCH{} clause is found, the \FINALLY{} clause is executed. Then, execution resumes at the end of the try statement.
 
 
+\LMHash{}
 A finally clause \FINALLY{} $s$ defines an exception handler $h$ that executes as follows:
 
+\LMHash{}
 Let $r$ be the current return value (\ref{return}). Then the current return value becomes undefined. Any open streams associated with any asynchronous for loops (\ref{asynchronousFor-in}) and yield-each (\ref{yieldEach}) statements executing within the dynamic scope of $h$ are canceled. 
 
 \rationale{
 Streams left open by for loops that were escaped for whatever reason would be canceled at function termination, but it is best to cancel them as soon as possible.
 }
 
+\LMHash{}
 Then the \FINALLY{} clause is executed. Let $m$ be the immediately enclosing function. If $r$ is defined then the current return value is set to $r$ and then:
 \begin{itemize}
 \item
@@ -5024,15 +5615,20 @@
 
 Otherwise, execution resumes at the end of the try statement.
 
+\LMHash{}
 Execution of an \ON{}-\CATCH{} clause \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$)} $s$ of a try statement $t$ proceeds as follows: The statement $s$ is executed in the dynamic scope of the exception handler defined by the finally clause of $t$. Then, the current exception and active stack trace both become undefined.
 
+\LMHash{}
 Execution of a \FINALLY{} clause \FINALLY{} $s$ of a try statement proceeds as follows: 
 
+\LMHash{}
 Let $x$ be the current exception and let $t$ be the active stack trace. Then the current exception and the active stack trace both become undefined. The statement $s$ is executed. Then, if $x$ is defined,  it is rethrown as if by a rethrow statement (\ref{rethrow}) enclosed in a \CATCH{} clause of the form \code{\CATCH{} ($v_x$, $v_t$)} where $v_x$ and $v_t$ are fresh variables bound to $x$ and $t$ respectively.
 
 
+\LMHash{}
 Execution of a try statement of the form \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$ \FINALLY{} $s_f$;}  proceeds as follows:
 
+\LMHash{}
 The statement $s_1$ is executed in the dynamic scope of the exception handler defined by the try statement. Then, the \FINALLY{} clause is executed.
 
 \commentary{
@@ -5047,12 +5643,14 @@
 If no exception was raised, the \FINALLY{} clause is also executed. Execution of the \FINALLY{} clause could also raise an exception, which will cause transfer of control to the next enclosing handler. 
 }
 
+\LMHash{}
 A try statement of the form \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$;} is equivalent to the statement \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$ \FINALLY{} $\{\}$}.
  
 
 \subsection{ Return}
-\label{return}
+\LMLabel{return}
 
+\LMHash{}
 The {\em return statement} returns a result to the caller of a synchronous function,  completes the future associated with an asynchronous function or terminates the stream or iterable associated with a generator (\ref{functions}).
 
 
@@ -5066,10 +5664,13 @@
  Due to \FINALLY{} clauses, the precise behavior of \RETURN{} is a little more involved. Whether the value a return statement is supposed to return is actually returned depends on the behavior of any \FINALLY{} clauses in effect when executing the return. A \FINALLY{} clause may choose to return another value, or throw an exception, or even redirect control flow leading to other returns or throws. All a return statement really does is set a value that is intended to be returned when the function terminates. 
  }
 
+\LMHash{}
 The {\em current return value} is a unique value specific to a given function activation. It is undefined unless explicitly set in this specification.
     
+\LMHash{}
 Executing a return statement \code{\RETURN{} $e$;} proceeds as follows:
 
+\LMHash{}
 First the expression $e$ is evaluated, producing an object $o$. Next:
 \begin{itemize}
 \item  
@@ -5085,28 +5686,34 @@
 The enclosing function cannot be marked as generator (i.e, \ASYNC* or \SYNC*), since generators are not allowed to contain a statement of the form \code{\RETURN{} $e$;} as discussed below.
 }
 
+\LMHash{}
 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  
 
+\LMHash{}
 It is a static type warning if the body of $f$ is marked \ASYNC{} and the type \code{Future$<$flatten(T)$>$} (\ref{awaitExpressions}) may not be assigned to the declared return type of $f$.   Otherwise, it is a static type warning if $T$ may not be assigned to the declared return type of $f$. 
 
+\LMHash{}
 Let $S$ be the runtime type of $o$. In checked mode:
 \begin{itemize}
 \item  If the body of $f$ is marked \ASYNC{} (\ref{functions}) it is a dynamic type error if $o$ is not \NULL{} (\ref{null}) and \code{Future$<$S$>$} is not a subtype of the actual return type  (\ref{actualTypeOfADeclaration}) of $f$.
 \item Otherwise, it is a dynamic type error if $o$ is not \NULL{} and the runtime type of $o$ is not a subtype of the actual return type of $f$.
 \end{itemize}
 
+\LMHash{}
 It is a compile-time error if a return statement of the form \code{\RETURN{} $e$;} appears in a generative constructor (\ref{generativeConstructors}).
 
 \rationale{
 It is quite easy to forget to add the factory prefix for a constructor, accidentally converting a factory into a generative constructor. The static checker may detect a type mismatch in some, but not all, of these cases. The rule above helps catch such errors, which can otherwise be very hard to recognize. There is no real downside to it, as returning a value from a generative constructor is meaningless.
 }
 
+\LMHash{}
 It is a compile-time error if a return statement of the form \code{\RETURN{} $e$;} appears in a generator function.
 
 \rationale{
 In the case of a generator function, the value returned by the function is the iterable or stream associated with it, and individual elements are added to that iterable using yield statements, and so returning a value makes no sense. 
 }
 
+\LMHash{}
 Let $f$ be the function immediately enclosing a return statement of the form \RETURN{}; It is a static warning  $f$ is neither a generator nor a generative constructor and either:
 \begin{itemize}
 \item  $f$ is synchronous and the return type of $f$ may not be assigned to \VOID{} (\ref{typeVoid}) or, 
@@ -5120,8 +5727,10 @@
 
 \rationale{ An asynchronous non-generator always returns a future of some sort. If no expression is given, the future will be completed with \NULL{} and this motivates the requirement above.} \commentary{Leaving the return type of a function marked \ASYNC{}  blank will be interpreted as \DYNAMIC{} as always, and cause no type error. Using \code{Future} or \code{Future$<$Object$>$} is acceptable as well, but any other type will cause a warning, since \NULL{} has no subtypes.}
 
+\LMHash{}
 A return statement with no expression, \code{\RETURN;} is executed as follows:
 
+\LMHash{}
 If the immediately enclosing function $f$ is a generator, then:
 \begin{itemize}
 \item
@@ -5132,6 +5741,7 @@
 Otherwise, execution of the current method terminates. 
 \end{itemize}
 
+\LMHash{}
 Otherwise the return statement is executed by executing the statement  \code{\RETURN{} \NULL{};} if it occurs inside a method, getter, setter or factory; otherwise, the return statement necessarily occurs inside a generative constructor, in which case it is executed by executing  \code{\RETURN{} \THIS{};}.
 
 \commentary{Despite the fact that \code{\RETURN{};} is executed as if by a \code{\RETURN{} $e$;}, it is important to understand that it is not a static warning to include a statement of the form \code{\RETURN{};} 
@@ -5146,14 +5756,16 @@
 The question then becomes, what value should a return statement return when no return expression is given. In a generative constructor, it is obviously the object being constructed (\THIS{}). A void function is not expected to participate in an expression, which is why it is marked \VOID{} in the first place. Hence, this situation is a mistake which should be detected as soon as possible. The static rules help here, but if the code is executed, using \NULL{} leads to fast failure, which is desirable in this case. The same rationale applies for function bodies that do not contain a return statement at all.
 }
 
+\LMHash{}
 It is a static warning if a  function contains both one or more explicit return statements of the form \code{\RETURN;} and one or more return statements of the form \code{\RETURN{} $e$;}.
 
 
 
 
 \subsection{ Labels}
-\label{labels}
+\LMLabel{labels}
 
+\LMHash{}
 A {\em label} is an identifier followed by a colon. A {\em labeled statement} is a statement prefixed by a label $L$.  A {\em labeled case clause} is a case clause within a switch statement (\ref{switch}) prefixed by a label $L$.
 
 \rationale{The sole role of labels is to provide targets for the break (\ref{break}) and continue (\ref{continue}) statements.}
@@ -5166,8 +5778,10 @@
     .
  \end{grammar}
  
+\LMHash{}
  The semantics of a labeled statement $L: s$ are identical to those of the statement $s$. The namespace of labels is distinct from the one used for types, functions and variables.
 
+\LMHash{}
 The scope of a label that labels a statement $s$ is $s$. The scope of a label that labels a case clause of a switch statement $s$ is $s$.
 
 \rationale{Labels should be avoided by programmers at all costs. The motivation for including labels in the language is primarily making Dart a better target for code generation.
@@ -5175,8 +5789,9 @@
 
  
 \subsection{ Break}
-\label{break}
+\LMLabel{break}
 
+\LMHash{}
 The {\em break statement} consists of the reserved word \BREAK{} and an optional label (\ref{labels}). 
 
 \begin{grammar}
@@ -5185,15 +5800,18 @@
     .
  \end{grammar}
  
+\LMHash{}
 Let $s_b$ be a \BREAK{} statement. If $s_b$ is of the form  \code{\BREAK{} $L$;}, then let $s_E$ be the the innermost labeled statement with label $L$ enclosing $s_b$. If $s_b$ is of the form \code{\BREAK{};},  then let $s_E$ be the the innermost  \DO{} (\ref{do}), \FOR{} (\ref{for}), \SWITCH{} (\ref{switch}) or \WHILE{} (\ref{while}) statement enclosing  $s_b$. It is a compile-time error if no such statement $s_E$ exists within the innermost function in which  $s_b$ occurs.  Furthermore, let $s_1, \ldots, s_n$ be those \TRY{} statements that are both enclosed in $s_E$ and that enclose  $s_b$, and that have a \FINALLY{} clause. Lastly, let $f_j$ be the \FINALLY{} clause of $s_j, 1 \le j \le n$.   Executing  $s_b$ first executes $f_1, \ldots,  f_n$ in innermost-clause-first  order and then terminates $s_E$. 
 
+\LMHash{}
 If $s_E$ is an asynchronous for loop (\ref{asynchronousFor-in}), its associated stream subscription is canceled. Furthermore, let $a_k$ be the set of asynchronous for loops  and yield-each statements (\ref{yieldEach}) enclosing $s_b$ that are enclosed in $s_E , 1 \le k \le m$.   The stream subscriptions associated with $a_j$ are canceled, $1 \le j \le m$. 
 
 
 
 \subsection{ Continue}
-\label{continue}
+\LMLabel{continue}
 
+\LMHash{}
 The {\em continue statement} consists of the reserved word \CONTINUE{} and an optional label (\ref{labels}). 
 
 \begin{grammar}
@@ -5202,20 +5820,23 @@
         .
  \end{grammar}      
  
+\LMHash{}
  Let $s_c$ be a \CONTINUE{} statement. If $s_c$ is of the form  \code{\CONTINUE{} $L$;}, then let $s_E$ be the the innermost labeled \DO{} (\ref{do}), \FOR{} (\ref{for}) or \WHILE{} (\ref{while}) statement or case clause with label $L$ enclosing $s_c$. If $s_c$ is of the form \code{\CONTINUE{};}  then let $s_E$ be the the innermost  \DO{} (\ref{do}), \FOR{} (\ref{for}) or \WHILE{} (\ref{while}) statement enclosing  $s_c$. It is a compile-time error if no such statement or case clause $s_E$ exists within the innermost function in which  $s_c$ occurs.  Furthermore, let $s_1, \ldots, s_n$ be those \TRY{} statements that are both enclosed in $s_E$ and that enclose  $s_c$, and that have a \FINALLY{} clause. Lastly, let $f_j$ be the \FINALLY{} clause of $s_j, 1 \le j \le n$.   Executing  $s_c$ first executes $f_1, \ldots,  f_n$ in innermost-clause-first  order. Then, if $s_E$ is a case clause, control is transferred to the case clause. Otherwise, $s_E$ is necessarily a loop and execution resumes after the last statement in the loop body.
  
  \commentary{
  In a while loop, that would be the boolean expression before the body. In a do loop, it would be the boolean expression after the body. In a for loop, it would be the increment clause.  In other words, execution continues to the next iteration of the loop.
  }
  
+\LMHash{}
  If $s_E$ is an asynchronous for loop (\ref{asynchronousFor-in}), let $a_k$ be the set of asynchronous for loops and yield-each statements (\ref{yieldEach}) enclosing $s_c$ that are enclosed in $s_E , 1 \le k \le m$.   The stream subscriptions associated with $a_j$ are canceled, $1 \le j \le m$. 
  
  \subsection{ Yield and Yield-Each}
- \label{yieldAndYieldEach}
+ \LMLabel{yieldAndYieldEach}
  
  \subsubsection{ Yield}
- \label{yield}
+ \LMLabel{yield}
  
+\LMHash{}
  The {\em yield statement} adds an element to the result of a generator function (\ref{functions}).
 
  \begin{grammar}
@@ -5224,18 +5845,23 @@
       .
 \end{grammar}
 
+\LMHash{}
 Execution of a statement $s$ of the form \code{\YIELD{} $e$;}  proceeds as follows:
 
+\LMHash{}
 First, the expression $e$ is evaluated to an object $o$. If the enclosing function $m$ is marked \ASYNC* (\ref{functions}) and the stream $u$ associated with $m$ has been paused,  then execution of $m$ is suspended until $u$ is resumed or canceled.
 
+\LMHash{}
 Next, $o$ is added to the iterable or stream associated with the immediately enclosing function. 
 
+\LMHash{}
 If the enclosing function $m$ is marked \ASYNC* and the stream $u$ associated with $m$ has been canceled, then let $c$ be the \FINALLY{} clause (\ref{try}) of the innermost enclosing try-finally statement, if any. If $c$ is defined, let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$. If $h$ is undefined, the immediately enclosing function terminates.
 
 \rationale{
 The stream associated with an asynchronous generator could be canceled by any code with a reference to that stream at any point where the generator was passivated.  Such a cancellation constitutes an irretrievable error for the generator. At this point, the only plausible action for the generator is to clean up after itself via its \FINALLY{} clauses.
 }
 
+\LMHash{}
 If the enclosing function $m$ is marked \SYNC* (\ref{functions}) then:
 \begin{itemize}
 \item
@@ -5244,8 +5870,10 @@
 The current call to \code{moveNext()} returns \TRUE.
 \end{itemize}
 
+\LMHash{}
 It is a compile-time error if a yield statement appears in a function that is not a generator function.
 
+\LMHash{}
 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  It is a static type warning if either:
 \begin{itemize}
 \item
@@ -5256,8 +5884,9 @@
 
  
  \subsubsection{ Yield-Each}
- \label{yieldEach}
+ \LMLabel{yieldEach}
  
+\LMHash{}
  The {\em yield-each statement} adds a series of values to the result of a generator function (\ref{functions}).
  
  \begin{grammar}
@@ -5266,8 +5895,10 @@
       .
 \end{grammar}
 
+\LMHash{}
 Execution of a statement s of the form \code{\YIELD* $e$;}  proceeds as follows:
 
+\LMHash{}
 First, the expression $e$ is evaluated to an object $o$. If the immediately enclosing function $m$ is synchronous, then it is a dynamic error if the class of $o$ does not implement \code{Iterable}.  If $m$ asynchronous, then it is a dynamic error if the class of $o$ does not implement \code{Stream}. Next, for each element $x$ of $o$:
 \begin{itemize}
 \item
@@ -5278,6 +5909,7 @@
 If $m$ is marked \ASYNC* and the stream $u$ associated with $m$ has been canceled, then let $c$ be the \FINALLY{} clause (\ref{try}) of the innermost enclosing try-finally statement, if any. If $c$ is defined,  let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$. If $h$ is undefined, the immediately enclosing function terminates.
 \end{itemize}
 
+\LMHash{}
 If the enclosing function is marked \SYNC* (\ref{functions}) then:
 \begin{itemize}
 \item
@@ -5286,14 +5918,17 @@
 The current call to \code{moveNext()} returns \TRUE.
 \end{itemize}
 
+\LMHash{}
 It is a compile-time error if a yield-each statement appears in a function that is not a generator function.
 
+\LMHash{}
 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  It is a static type warning if $T$ may not be assigned to the declared return type of $f$. 
 
 
 \subsection{ Assert}
-\label{assert}
+\LMLabel{assert}
 
+\LMHash{}
 An {\em assert statement} is used to disrupt normal execution if a given boolean condition does not hold.
 
 \begin{grammar}
@@ -5302,14 +5937,17 @@
       .
 \end{grammar}
       
+\LMHash{}
 The assert statement has no effect in production mode. In checked mode, execution of an assert statement \code{\ASSERT{}($e$);} proceeds as follows:
 
+\LMHash{}
 The conditional expression $e$ is evaluated to an object $o$. If the class of $o$ is a subtype of \code{Function} then let $r$ be the result of invoking $o$ with no arguments. Otherwise, let $r$ be $o$. 
 It is a dynamic type error if $o$ is not of type \code{bool} or of type \code{Function}, or if $r$ is not of type \code{bool}.  If $r$ is \FALSE{}, we say that the assertion failed. If $r$ is \TRUE{}, we say that the assertion succeeded. If the assertion succeeded, execution of the assert statement is complete. If the assertion failed, an \code{AssertionError} is thrown.
 
 %\Q{Might be cleaner to define it as \code{if (!$e$) \{\THROW{} \NEW{} AssertionError();\}} (in checked mode only).
 %What about an error message as part of the assert?}
 
+\LMHash{}
  It is a static type warning if the type of $e$ may not be assigned to either  \code{bool} or $() \rightarrow$ \code{bool}.  
 
 \rationale{Why is this a statement, not a built in function call? Because it is handled magically so it has no effect and no overhead in production mode. Also, in the absence of final methods. one could not prevent it being overridden (though there is no real harm in that).  It cannot be viewed as a function call that is being optimized away because the argument might have side effects.
@@ -5339,10 +5977,12 @@
 %\rationale{therefore, we opt for the second option. Alternately, one could insist that assert be a reserved word, which may have an undesirable effect with respect to compatibility of Javascript code ported to Dart.}
 
 \section{Libraries and Scripts}
-\label{librariesAndScripts}
+\LMLabel{librariesAndScripts}
 
+\LMHash{}
 A Dart program consists of one or more libraries, and may be built out of one or more {\em compilation units}. A compilation unit may be a library or a part (\ref{parts}). 
 
+\LMHash{}
 A library consists of (a possibly empty) set of imports, a set of exports,  and a set of top-level declarations. A top-level declaration is either a class (\ref{classes}), a type alias declaration (\ref{typedef}), a function (\ref{functions}) or a variable declaration (\ref{variables}). The members of a library $L$ are those top level declarations given within $L$.
 
  \begin{grammar}
@@ -5393,12 +6033,14 @@
   libraryExport   
  \end{grammar}
  
+\LMHash{}
  Libraries may be {\em explicitly named} or {\em implicitly named}. An explicitly named library begins with  the  word \LIBRARY{} (possibly prefaced with any applicable metadata annotations), followed by a qualified identifier that gives the name of the library.
  
  \commentary{
  Technically, each dot and identifier is a separate token and so spaces between them are acceptable. However, the actual library name is the concatenation of the simple identifiers and dots and contains no spaces.
  }
  
+\LMHash{}
 An implicitly named library has the empty string as its name. 
 
  \rationale{
@@ -5409,19 +6051,23 @@
 Libraries intended for widespread use should avoid name collisions.  Dart's \code{pub} package management system provides a mechanism for doing so.  Each pub package is guaranteed a unique name, effectively enforcing a global namespace.
  }
  
+\LMHash{}
  A library may optionally begin with a {\em script tag}. Script tags are intended for use with scripts (\ref{scripts}).  A script tag can be used to identify the interpreter of the script to whatever computing environment the script is embedded in. The script tag must appear before any whitespace or comments.  A script  tag begins with the characters \#! and ends at the end of the line. Any characters that follow \#!  in the script tag are ignored by the Dart implementation.
  
+\LMHash{}
 Libraries are units of privacy. A private declaration declared within a library $L$ can only be accessed by code within $L$. Any attempt to access a private member declaration from outside $L$ will cause a method, getter or setter lookup failure.
 
 \commentary{Since top level privates are not imported, using the top level privates of another library is never possible. }
 
+\LMHash{}
 The {\em public namespace} of library $L$ is the mapping that maps the simple name of each public top-level member $m$ of $L$ to $m$. 
 The scope of a library $L$ consists of the names introduced by all top-level declarations declared in $L$, and the names added by $L$'s imports (\ref{imports}).
 
 
 \subsection{Imports}
-\label{imports}
+\LMLabel{imports}
 
+\LMHash{}
 An {\em import} specifies a library to be used in the scope of another library. 
 \begin{grammar}
 {\bf libraryImport:}
@@ -5442,12 +6088,16 @@
  \end{grammar}
  
 
+\LMHash{}
 An import specifies a URI $x$ where the declaration of an imported library is to be found. 
 
+\LMHash{}
 Imports may be {\em deferred} or {\em immediate}. A deferred import is distinguished by the appearance of the built-in identifier \DEFERRED{} after the URI. Any import that is not deferred is immediate.
 
+\LMHash{}
 It is a compile-time error if  the specified URI of an immediate import does not refer to a library declaration.  The interpretation of URIs is described in section \ref{uris} below.
 
+\LMHash{}
 It is a static warning if the specified URI of a deferred import does not refer to a library declaration.
 
 \rationale{
@@ -5455,14 +6105,19 @@
  }
 
  
+\LMHash{}
 The {\em current library} is the library currently being compiled. The import modifies the  namespace of the current library in a manner that is determined by the imported library and by the optional elements of  the import.
      
+\LMHash{}
 An immediate import directive $I$ may optionally include a prefix clause of the form \AS{} \code{Id} used to prefix names imported by $I$. A deferred import must include a prefix clause or a compile time error occurs. It is a compile-time error if a prefix used in a deferred import is used in another import clause.
 
+\LMHash{}
 An import directive $I$ may optionally include a namespace combinator clauses used to restrict the set of names imported by $I$. Currently, two namespace combinators are supported: \HIDE{} and \SHOW{}.
 
+\LMHash{}
 Let $I$ be an import directive that refers to a URI via the string $s_1$. Evaluation of $I$  proceeds as follows:
 
+\LMHash{}
 If $I$ is a deferred import, no evaluation takes place. Instead, an mapping the name of the prefix, $p$ to a {\em deferred prefix object} is added to the scope of $L$.
 The deferred prefix object has the following methods:
 
@@ -5474,8 +6129,10 @@
 \item For every type $T$ named $id$ in $L$, a corresponding getter named $id$ with return type \code{Type}.  Calling the method results in a runtime error.
 \end{itemize}
 
+\LMHash{}
 After a call succeeds, the name $p$ is mapped to a non-deferred prefix object as described below. In addition, the prefix object also supports the \code{loadLibrary} method, and so it is possible to call \code{loadLibrary} again. If a call fails, nothing happens, and one again has the option to call \code{loadLibrary} again. Whether a repeated call to \code{loadLibrary} succeeds will vary as described below.
 
+\LMHash{}
 The effect of a repeated call to \code{$p$.loadLibrary} is as follows:
 \begin{itemize}
 \item
@@ -5497,6 +6154,7 @@
 We do not specify what value the future returned resolves to.
 }
 
+\LMHash{}
 If $I$ is an immediate import then, first
 
  \begin{itemize}
@@ -5507,6 +6165,7 @@
 \end{itemize}
 
 
+\LMHash{}
 Let $NS_0$ be the exported namespace (\ref{exports}) of $B$. Then, for each combinator clause $C_i, i \in 1..n$ in $I$:
 \begin{itemize}
 \item If $C_i$ is of the form 
@@ -5526,6 +6185,7 @@
 where $hide(l, n)$ takes a list of identfiers $l$ and a namespace $n$, and produces a namespace that is identical to $n$ except that for each name $k$ in $l$, $k$ and $k=$ are undefined. 
 \end{itemize}
  
+\LMHash{}
 Next, if $I$ includes a prefix clause of the form \AS{} $p$, let $NS =  NS_n \cup \{p: prefixObject(NS_n)\}$ where $prefixObject(NS_n)$ is a {\em prefix object} for the namespace $NS_n$, which is an object that has the following members:
 
 \begin{itemize}
@@ -5535,12 +6195,14 @@
 \item For every type $T$ named $id$ in $NS_n$, a corresponding getter named $id$ with return type \code{Type}, that, when invoked, returns the type object for $T$.
 \end{itemize}
 
+\LMHash{}
 Otherwise, let $NS = NS_n$.
 It is a compile-time error if the current library declares a top-level member named $p$.
 
 % This is problematic, because it implies that p.T would be available even in a scope that declared p. We really need to think of p as a single object with properties p.T etc., except it isn't really that
 % either. After all, p isn't actually available as a stand alone name.
 
+\LMHash{}
 Then, for each entry mapping key $k$ to declaration $d$ in $NS$,  $d$ is made available in the top level scope of $L$ under the name $k$ unless either:
 \begin{itemize}
 \item
@@ -5550,6 +6212,7 @@
 
 \rationale{The greatly increases the chance that a member can be added to a library without breaking its importers.}
 
+\LMHash{}
 A {\em system library} is a library that is part of the Dart implementation. Any other library is a {\em non-system library}. If a name $N$ is referenced by a library $L$ and $N$ would be introduced into the top level scope of $L$ by 
 imports of two libraries, $L_1$ and $L_2$, and the exported namespace of $L_1$ binds $N$ to a declaration originating in a system library:
 
@@ -5565,6 +6228,7 @@
 It is recommended that tools that deploy Dart code produce output in which all imports use show clauses to ensure that additions to the namespace of a library never impact deployed code.
 }
 
+\LMHash{}
 If a name $N$ is referenced by a library $L$ and $N$ is  introduced into  the top level scope of $L$ by more than one import, and not all the imports denote the same declaration, then:
 \begin{itemize}
 \item A static warning occurs.
@@ -5573,6 +6237,7 @@
 
 \end{itemize}
 
+\LMHash{}
 We say that the namespace $NS$ {\em has been imported into} $L$.
 
 \commentary{
@@ -5589,6 +6254,7 @@
 %On a related note, the provenance of the conflicting elements is not considered. An  element that is imported via distinct paths may conflict with itself. This avoids variants of the well known "diamond" problem.
 }
 
+\LMHash{}
 It is a static warning to import two different libraries with the same name.
 
 \commentary{
@@ -5600,6 +6266,7 @@
 This prevents situations where removing a name from a library would cause breakage of a client library.
 }
 
+\LMHash{}
 The dart core library \code{dart:core} is implicitly imported into every dart library other than itself via an  import clause of the form
 
 \code{\IMPORT{}  `dart:core';} 
@@ -5615,8 +6282,9 @@
 }
 
 \subsection{Exports}
-\label{exports}
+\LMLabel{exports}
 
+\LMHash{}
 A library $L$ exports a namespace (\ref{scoping}), meaning that the declarations in the namespace are made available to other libraries if they choose to import $L$ (\ref{imports}).  The namespace that $L$ exports is known as its {\em exported namespace}.
 
 \begin{grammar}
@@ -5625,14 +6293,19 @@
     .
  \end{grammar}
  
+\LMHash{}
  An export specifies a URI $x$ where the declaration of an exported library is to be found.  It is a compile-time error if  the specified URI does not refer to a library declaration.  
 
+\LMHash{}
 We say that a name {\em is exported by a library} (or equivalently, that a library {\em exports a name}) if the name is in the library's exported namespace. We say that a declaration {\em is exported by a library} (or equivalently, that a library {\em exports a declaration}) if the declaration is in the library's exported namespace.
 
+\LMHash{}
 A library always exports all names and all declarations in its public namespace. In addition, a library may choose to re-export additional libraries via {\em export directives}, often referred to simply as {\em exports}.
 
+\LMHash{}
 Let $E$ be an export directive that refers to a URI via the string $s_1$. Evaluation of $E$  proceeds as follows:
 
+\LMHash{}
 First,
 
  \begin{itemize}
@@ -5642,6 +6315,7 @@
 \end{itemize}
 
 
+\LMHash{}
 Let $NS_0$ be the exported namespace of $B$. Then, for each combinator clause $C_i, i \in 1..n$ in $E$:
 \begin{itemize}
 \item If $C_i$ is of the form \code{\SHOW{} $id_1, \ldots, id_k$} then let 
@@ -5652,9 +6326,11 @@
 then let $NS_i = \HIDE{}([id_1, \ldots, id_k], NS_{i-1}$). 
 \end{itemize}
 
+\LMHash{}
 For each
 entry mapping key $k$ to declaration $d$ in $NS_n$ an entry mapping $k$ to $d$ is added to the exported namespace of $L$ unless a  top-level declaration with the name $k$ exists in $L$.  
 
+\LMHash{}
 If a name $N$ is referenced by a library $L$ and $N$ would be introduced into the exported namespace of $L$ by exports of two libraries, $L_1$ and $L_2$, and the exported namespace of $L_1$ binds $N$ to a declaration originating in a system library:
 %an export of a system library and an export of a non-system library:
 \begin{itemize}
@@ -5666,17 +6342,21 @@
 See the discussion in section \ref{imports} for the reasoning behind this rule.
 }
 
+\LMHash{}
 We say that $L$ {\em re-exports library } $B$, and also that $L$ {\em re-exports namespace } $NS_n$. When no confusion can arise, we may simply state that $L$ {\em re-exports }$B$, or that $L$ {\em re-exports }$NS_n$.
 
+\LMHash{}
 It is a compile-time error if a name $N$ is re-exported by a library $L$ and $N$ is  introduced into the export namespace of $L$ by more than one export, unless all  exports refer to same declaration for the name $N$.  It is a static warning to export two different libraries with the same name.
 
 
 
 \subsection{Parts}
-\label{parts}
+\LMLabel{parts}
 
+\LMHash{}
 A library may be divided into {\em parts}, each of which can be stored in a separate location. A library identifies its parts by listing them via \PART{} directives. 
 
+\LMHash{}
 A {\em part directive} specifies a URI where a Dart compilation unit that should be incorporated into the current library may be found.
 
 \begin{grammar}
@@ -5692,22 +6372,27 @@
     .
 \end{grammar}
 
+\LMHash{}
 A {\em part header} begins with  \PART{} \OF{}  followed by the name of the library the part belongs to.  A part declaration consists of a part header followed by a sequence of top-level declarations.
 
+\LMHash{}
 Compiling a part directive of the form \code{\PART{} $s$;} causes the Dart system to attempt to compile the contents of the URI that is the value of $s$. The top-level declarations at that URI are then compiled by the Dart compiler in the scope of the current library. It is a compile-time error if the contents of the URI are not a valid part declaration. It is a static warning if the referenced part declaration $p$ names a library other than the current library as the library to which $p$ belongs.
 
 \subsection{Scripts}
-\label{scripts}
+\LMLabel{scripts}
 
+\LMHash{}
 A {\em script} is a library whose exported namespace  (\ref{exports}) includes a top-level function \code{main}. 
 A script $S$ may be executed as follows:
 
+\LMHash{}
 First, $S$ is compiled as a library as specified above. Then, the top-level function \code{main} that is in the exported namespace of $S$ is invoked. If \code{main} has no positional parameters, it is invoked with no arguments. Otherwise if \code{main} has exactly one positional parameter, it is invoked with a single actual argument whose runtime type implements \code{List$<$String$>$}.  Otherwise \code{main} is invoked with the following two actual arguments:
 \begin{enumerate}
 \item An object whose runtime type implements \code{List$<$String$>$}.
 \item The initial message of the current isolate $i$ as determined by the invocation of \code{Isolate.spawnUri} that spawned $i$. 
 \end{enumerate}
 
+\LMHash{}
 It is a run time error if $S$ does not declare or import a top-level function \code{main}. It is a static warning if \code{main} has more than two required parameters.
 
 \commentary {
@@ -5723,8 +6408,9 @@
 }
 
 \subsection{URIs}
-\label{uris}
+\LMLabel{uris}
 
+\LMHash{}
 URIs are specified by means of string literals:
 
 \begin{grammar}
@@ -5733,16 +6419,20 @@
     .
 \end{grammar}
 
+\LMHash{}
 It is a compile-time error if  the string literal $x$ that describes a URI is not a compile-time constant, or if $x$ involves string interpolation.
  
+\LMHash{}
 This specification does not discuss the interpretation of URIs, with the following exceptions. 
  
  \rationale{
  The interpretation of URIs is mostly left to the surrounding computing environment. For example, if Dart is running in a web browser, that browser will likely interpret some URIs. While it might seem attractive to specify, say, that URIs are interpreted with respect to a standard such as IETF RFC 3986, in practice this will usually depend on the browser and cannot be relied upon.
  }
  
+\LMHash{}
 A URI of the form \code{dart:$s$} is interpreted as a reference to a system library (\ref{imports}) $s$. 
  
+\LMHash{}
 A URI of the form \code{package:$s$} is interpreted as a URI of the form \code{packages/s} relative to an implementation specified location.
 
 \commentary{ 
@@ -5753,22 +6443,25 @@
 The intent is that, during development, Dart programmers can rely on a package manager to find elements of their program. Such package managers may provide a directory structure starting at a local directory \code{packages} where they place the required dart code (or links thereto).
 }
 
+\LMHash{}
 Otherwise, any relative URI is interpreted as relative to the the location of the current library. All further interpretation of URIs is implementation dependent. 
 
 \commentary{This means it is dependent on the embedder.}
 
 
 \section{Types}
-\label{types}
+\LMLabel{types}
 
+\LMHash{}
 Dart supports optional typing based on interface types.
 
 \rationale{The type system is unsound, due to the covariance of generic types. This is a deliberate choice (and undoubtedly controversial).  Experience has shown that sound type rules for generics fly in the face of programmer intuition. It is easy for tools to provide a sound type analysis if they choose, which may be useful for tasks like refactoring.
 }
 
 \subsection{Static Types}
-\label{staticTypes}
+\LMLabel{staticTypes}
 
+\LMHash{}
 Static type annotations are used in variable declarations (\ref{variables}) (including formal parameters (\ref{formalParameters})), in the return types of functions (\ref{functions}) and in the bounds of type variables.  Static type annotations are used during static  checking and when running programs in checked mode. They have no effect whatsoever in production mode.
 
  \begin{grammar}
@@ -5789,6 +6482,7 @@
     .
  \end{grammar}
 
+\LMHash{}
 A Dart implementation must provide a static checker that detects and reports exactly those situations this specification identifies as static warnings and only those situations. However:
 \begin{itemize}
 \item Running  the static checker on a program $P$ is not required for compiling and running $P$.  
@@ -5800,6 +6494,7 @@
 
 %\Q{Should we do something with respect to non-nullable types?}
 
+\LMHash{}
 A type $T$ is {\em malformed} iff:
 \begin{itemize}
 \item $T$ has the form $id$ or the form $prefix.id$, and in the enclosing lexical scope, the name $id$ (respectively $prefix.id$) does not denote a type.
@@ -5812,29 +6507,35 @@
 %  \end{itemize}
 \end{itemize}
 
+\LMHash{}
  Any use of a malformed  type gives rise to a static warning. A malformed type is then interpreted as \DYNAMIC{} by the static type checker and the runtime unless explicitly specified otherwise.
   
  \rationale{
 This ensures that the developer is spared a series of cascading warnings as the malformed type interacts with other types.
 }
 
+\LMHash{}
 A type $T$ is {\em deferred} iff it is of the form $p.T$ where $p$ is a deferred prefix.
 It is a static warning to use a deferred type in a type annotation, type test, type cast or as a type parameter. However, all other static warnings must be issued under the assumption that all deferred libraries have successfully been loaded.
 
 
 \subsubsection{Type Promotion}   
-\label{typePromotion}
+\LMLabel{typePromotion}
 
+\LMHash{}
 The static type system ascribes a static type to every expression.  In some cases, the types of local variables and formal parameters may be promoted from their declared types based on control flow. 
 
+\LMHash{}
 We say that a variable $v$ is known to have type $T$ whenever we allow the type of $v$ to be promoted. The exact circumstances when type promotion is allowed are given in the relevant sections of the specification (\ref{logicalBooleanExpressions}, \ref{conditional} and \ref{if}).
 
+\LMHash{}
 Type promotion for a variable $v$ is allowed only when we can deduce that such promotion is valid based on an analysis of certain boolean expressions. In such cases, we say that the boolean expression $b$ shows that $v$ has type $T$. As a rule, for all variables $v$ and types $T$, a boolean expression does not show that $v$ has type $T$. Those situations where an expression does show that a variable has a type are mentioned explicitly in the relevant sections of this specification (\ref{typeTest} and \ref{logicalBooleanExpressions}).
 
 
 \subsection{Dynamic Type System}
-\label{dynamicTypeSystem}
+\LMLabel{dynamicTypeSystem}
 
+\LMHash{}
 A Dart implementation must support execution in both {\em production mode} and {\em checked mode}.  Those dynamic checks specified as occurring specifically in checked mode must be performed iff the code is executed in checked mode.
 
 \commentary{
@@ -5848,6 +6549,7 @@
 
 %It is a run-time type error to access an undeclared type outside .
 
+\LMHash{}
 %It is a dynamic type error if a malformed type is used in a subtype test.  
 In checked mode, it is a dynamic type error if a deferred, malformed or malbounded (\ref{parameterizedTypes}) 
 type is used in a subtype test.  
@@ -5929,11 +6631,12 @@
 
 
 \subsection{Type Declarations}
-\label{typeDeclarations}
+\LMLabel{typeDeclarations}
 
 \subsubsection{Typedef}
-\label{typedef}
+\LMLabel{typedef}
 
+\LMHash{}
 A {\em type alias} declares a name for a type expression.
 
 
@@ -5957,8 +6660,10 @@
     
  \end{grammar}
  
+\LMHash{}
  The effect of a type alias of the form  \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \ldots, T_n$ $p_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}])$} declared in a library $L$ is is to introduce the name $id$ into the scope of $L$, bound to the function type $(T_1, \ldots, T_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}])  \rightarrow T$.  The effect of a type alias of the form   \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \ldots, T_n$ $p_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}\})$} declared in a library $L$ is is to introduce the name $id$ into the scope of $L$, bound to the function type $(T_1, \ldots, T_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}\})  \rightarrow T$. . In either case, iff no return type is specified, it is taken to be \DYNAMIC{}. Likewise, if a type annotation is omitted on a formal parameter, it is taken to be \DYNAMIC{}.
  
+\LMHash{}
 It is a compile-time error if any default values are specified in the signature of a function type alias. 
 %A typedef may only refer to itself  via the bounds of its generic parameters. 
 Any  self reference in a typedef, either directly, or recursively via another typedef, is a compile time error.
@@ -5967,8 +6672,9 @@
 
 
 \subsection{Interface Types}
-\label{interfaceTypes}
+\LMLabel{interfaceTypes}
 
+\LMHash{}
 The implicit interface of class $I$ is a direct supertype of the implicit interface of class  $J$ iff:
 \begin{itemize}
 \item
@@ -5991,6 +6697,7 @@
 %\Q{Can wacky stuff happen with interface injection, e.g., a direct superinterface becomes indirect? What about side effects - loading order can affect type relationships.
 %}
 
+\LMHash{}
 A type $T$ is more specific than a type $S$, written $T << S$,  if one of the following conditions is met:
 \begin{itemize}
 \item $T$ is $S$.
@@ -6006,6 +6713,7 @@
 \item $T << U$ and $U << S$.
 \end{itemize}
 
+\LMHash{}
 $<<$ is a partial order on types.
 $T$ is a subtype of $S$, written $T <: S$, iff $[\bot/\DYNAMIC{}]T << S$.
 
@@ -6015,10 +6723,12 @@
 Although $<:$ is not a partial order on types, it does contain a partial order, namely $<<$. This means that, barring raw types, intuition about classical subtype rules does apply.
 }
 
+\LMHash{}
 $S$ is a supertype of $T$, written $S :> T$, iff $T$ is a subtype of $S$.
 
 \commentary{The supertypes of an interface are its direct supertypes and their supertypes. }
 
+\LMHash{}
 An interface type $T$ may be assigned to a type $S$, written  $T \Longleftrightarrow S$, iff either $T <: S$ or $S <: T$. 
 
 \rationale{This rule may surprise readers accustomed to conventional typechecking. The intent of the $\Longleftrightarrow$ relation is not to ensure that an assignment is correct. Instead, it aims to only flag assignments that are almost certain to be erroneous, without precluding assignments that may work. 
@@ -6027,8 +6737,9 @@
 }
 
 \subsection{Function Types}
-\label{functionTypes}
+\LMLabel{functionTypes}
 
+\LMHash{}
 Function types come in two variants: 
 \begin{enumerate}
 \item
@@ -6047,6 +6758,7 @@
 %\item$ \forall i \in 1 .. n, T_i \Longleftrightarrow S_i$.
 %\end{enumerate}
 
+\LMHash{}
 %A function type $(T_1, \ldots T_n, [T_{n+1}  \ldots, T_{n+k}]) \rightarrow T$ is a subtype of the 
 % the line below revises the rule to be more liberal
 A function type $(T_1, \ldots T_{k}, [T_{k+1}  \ldots, T_{n+m}]) \rightarrow T$ is a subtype of the
@@ -6061,6 +6773,7 @@
 \end{enumerate}
 
 
+\LMHash{}
 A function type $(T_1, \ldots T_n, \{T_{x_1}$ $x_1, \ldots, T_{x_k}$ $x_k\}) \rightarrow T$ is a subtype of the function type $(S_1, \ldots, S_n, \{S_{y_1}$ $y_1, \ldots, S_{y_m}$ $y_m\}) \rightarrow S$, if all of the following conditions are met:
 \begin{enumerate}
 \item Either
@@ -6083,6 +6796,7 @@
 %The rules above need to be sanity checked, but the intent is that we view functions with rest parameters as having type $(T_1, ..., T_n, [\_{Tn+1}[] \_]) \rightarrow T$, where \_ is some magical identifier. Then the rules above may cover everything.
 % This is wrong - from the outside, the type takes an unbounded sequence of types, not a list. This can be modeled as $(T_1, \ldots, T_n, [T_{n+1}, \_ \ldots, T_{n+k} \_]) \rightarrow T$ for some finite $k$. 
 
+\LMHash{}
 In addition, the following subtype rules apply:
 
 
@@ -6098,8 +6812,10 @@
 The naive reader might conclude that, since it is not legal to declare a function with an empty optional parameter list, these rules are pointless. However, they induce  useful relationships between function types that declare no optional parameters and those that do.
 }
 
+\LMHash{}
 A function type $T$ may be assigned to a function type $S$, written  $T \Longleftrightarrow S$, iff  $T <: S$. 
 
+\LMHash{}
 % ensure that Object  and dynamic may be assign dot a function type
 A function is always an instance of some class that implements the class \code{Function} and implements a \CALL{} method with the same signature as the function. All function types are subtypes of \code{Function}.
 If a type $I$ includes an instance method named \CALL{}, and the type of \CALL{} is the function type $F$, then $I$ is considered to be more specific than $F$.  It is a static warning if a concrete class implements \cd{Function} and does not have a concrete method named \CALL{} unless that class declares its own implementation of \cd{noSuchMethod()}.
@@ -6109,6 +6825,7 @@
 
 %\commentary{Need to specify how a function values dynamic type is derived from its static signature.}
 
+\LMHash{}
 A function type $(T_1, \ldots T_{k}, [T_{k+1}  \ldots, T_{n+m}]) \rightarrow T$ is a more specific than the
 function type $(S_1, \ldots, S_{k+j}, [S_{k+j+1} \ldots, S_{n}]) \rightarrow S$, if all of the following conditions are met:
 \begin{enumerate}
@@ -6121,6 +6838,7 @@
 \end{enumerate}
 
 
+\LMHash{}
 A function type $(T_1, \ldots T_n, \{T_{x_1}$ $x_1, \ldots, T_{x_k}$ $x_k\}) \rightarrow T$ is more specific than the function type $(S_1, \ldots, S_n, \{S_{y_1}$ $y_1, \ldots, S_{y_m}$ $y_m\}) \rightarrow S$, if all of the following conditions are met:
 \begin{enumerate}
 \item Either
@@ -6134,19 +6852,23 @@
 \item For all $y_i \in \{y_1,  \ldots, y_m\}, y_i = x_j \Rightarrow T_j << S_i$
 \end{enumerate}
 
+\LMHash{}
 Furthermore, if $F$ is a function type, $F << \code{Function}$.
 
 
 \subsection{Type \DYNAMIC{}}
-\label{typeDynamic}
+\LMLabel{typeDynamic}
 
+\LMHash{}
 The type  \DYNAMIC{}  denotes the unknown type. 
 
+\LMHash{}
 If no static type annotation has been provided the type system assumes the declaration has the unknown type. If a generic type is used but type arguments are not provided, then the  type arguments default to the unknown type.
 
 \commentary{This means that given a generic declaration $G<T_1, \ldots, T_n>$, the type $G$ is equivalent to $G< \DYNAMIC{},  \ldots,  \DYNAMIC{}>$.
 }
 
+\LMHash{}
 Type  \DYNAMIC{} has methods for every possible identifier and arity, with every possible combination of named parameters. These methods all have  \DYNAMIC{} as their return type, and their formal parameters all have type  \DYNAMIC{}.
 Type  \DYNAMIC{} has properties for every possible identifier. These properties all have type  \DYNAMIC{}.
 
@@ -6169,6 +6891,7 @@
 What of static checking? Surely we would want to flag (2) when users have explicitly asked for static typechecking? Yes, but the reality is that the Dart static checker is likely to be running in the background by default. Engineering teams typically desire a ``clean build'' free of warnings and so the checker is designed to be extremely charitable. Other tools can interpret the type information more aggressively and warn about violations of conventional (and sound) static type discipline.
 }
 
+\LMHash{}
 The name \DYNAMIC{} denotes a \cd{Type} object even though \DYNAMIC{} is not a class.
 
 %\rationale {
@@ -6176,8 +6899,9 @@
 %}
 
 \subsection{Type Void}
-\label{typeVoid}
+\LMLabel{typeVoid}
 
+\LMHash{}
 The special type \VOID{} may only be used as the return type of a function: it is a compile-time error to use \VOID{} in any other context. 
 
 \commentary{
@@ -6212,15 +6936,18 @@
 
 
 \subsection{Parameterized Types}
-\label{parameterizedTypes} 
+\LMLabel{parameterizedTypes} 
 
+\LMHash{}
 A {\em parameterized type} is an invocation of a generic type declaration.
 
+\LMHash{}
 Let $T$ be a parameterized type  $G<S_1,  \ldots, S_n>$. If $G$ is not a generic type, the type arguments $S_i$, $1 \le i \le n$ are discarded. If $G$ has $m \ne n$ type parameters, $T$ is treated as as a parameterized type with $m$ arguments, all of which are \DYNAMIC{}. 
 
 \commentary{In short, any arity mismatch results in all type arguments being dropped, and replaced with the correct number of type arguments, all set to \DYNAMIC{}. Of course, a static warning will be issued. 
 }
 
+\LMHash{}
 Otherwise, let
  $T_i$ be the type parameters of $G$ and let $B_i$ be the bound of $T_i,  i \in 1.. n$,. $T$ is {\em malbounded} iff either $S_i$ is malbounded  or $S_i$ is not a subtype of $[S_1,  \ldots, S_n/T_1, \ldots, T_n]B_i,   i \in 1.. n$. 
  
@@ -6228,8 +6955,10 @@
 Note, that, in checked mode, it is a dynamic type error if a malbounded type is used in a type test as specified in \ref{dynamicTypeSystem}.
 }
  
+\LMHash{}
 Any use of a malbounded type gives rise to a static warning.
 
+\LMHash{}
 If $S$ is the static type of a member $m$ of $G$, then the static type of the member $m$ of  $G<A_1, \ldots, A_n>$  is $[A_1,  \ldots, A_n/T_1,  \ldots, T_n]S$ where $T_1,  \ldots, T_n$ are the formal type parameters of $G$.   Let $B_i$, be the bounds of $T_i, 1 \le i \le n$. It is a static type warning if $A_i$ is not a subtype of  $[A_1,  \ldots, A_n/T_1,  \ldots, T_n]B_i, i \in 1..n$. It is a static type warning if $G$ is not a generic type with exactly $n$ type parameters.
 
 
@@ -6237,14 +6966,16 @@
 
 
 \subsubsection{Actual Type of Declaration}
-\label{actualTypeOfADeclaration}
+\LMLabel{actualTypeOfADeclaration}
 
+\LMHash{}
 A type $T$ {\em depends on a type parameter} $U$ iff:
 \begin{itemize}
 \item $T$ is $U$.
 \item $T$ is a parameterized type, and one of the type arguments of $T$ depends on $U$.
 \end{itemize}
 
+\LMHash{}
 Let $T$ be the declared type of a declaration $d$, as it appears in the program source. The {\em actual type} of $d$ is
 
 \begin{itemize}
@@ -6253,20 +6984,24 @@
 \end{itemize}
 
 \subsubsection{Least Upper Bounds}
-\label{leastUpperBounds}
+\LMLabel{leastUpperBounds}
 
+\LMHash{}
 % does this diverge in some cases?
 Given two interfaces $I$ and $J$, let $S_I$ be the set of superinterfaces of $I$,  let $S_J$ be the set of superinterfaces of $J$ and let $S =  (I \cup S_I) \cap (J \cup S_J)$.  Furthermore, we define $S_n = \{T | T \in S  \wedge depth(T) =n\}$ for any finite $n$ %, and $k=max(depth(T_1), \ldots, depth(T_m)), T_i \in S, i \in 1..m$, 
 where $depth(T)$ is the number of steps in the longest inheritance path from $T$ to \code{Object}. Let $q$ be the largest number such that $S_q$ has cardinality one. The least upper bound of $I$ and $J$ is the sole element of  $S_q$.
 
+\LMHash{}
 The least upper bound of \DYNAMIC{} and any type $T$ is \DYNAMIC{}.
 The least upper bound of \VOID{} and any type $T \ne \DYNAMIC{}$ is \VOID{}.
 Let $U$ be a type variable with upper bound $B$. The least upper bound of $U$ and a type $T$ is the least upper bound of $B$ and $T$. 
 
+\LMHash{}
 The least upper bound relation is symmetric and reflexive.
 
 % Function types
 
+\LMHash{}
 The least upper bound of a function type and an interface type $T$ is the least upper bound of \cd{Function} and $T$.
 Let $F$ and $G$ be function types. If $F$ and $G$ differ in their number of required parameters, then the least upper bound of $F$ and $G$ is \cd{Function}.  Otherwise:
 \begin{itemize}
@@ -6309,16 +7044,18 @@
 
 
 \section{Reference}
-\label{reference}
+\LMLabel{reference}
 
 \subsection{Lexical Rules}
-\label{lexicalRules}
+\LMLabel{lexicalRules}
 
+\LMHash{}
 Dart source text is represented as a sequence of Unicode code points.  This sequence is first converted into a sequence of tokens according to the lexical rules given in this specification.  At any point in the tokenization process, the longest possible token is recognized.
 
 \subsubsection{Reserved Words} 
-\label{reservedWords}
+\LMLabel{reservedWords}
 
+\LMHash{}
 A {\em reserved word} may not be used as an identifier; it is a compile-time error if a reserved word is used where an identifier is expected.
 
 \ASSERT{}, \BREAK{}, \CASE{}, \CATCH{}, \CLASS{}, \CONST{}, \CONTINUE{}, \DEFAULT{}, \DO{}, \ELSE{}, \ENUM{}, \EXTENDS{}, \FALSE{}, \FINAL{}, \FINALLY{}, \FOR{}, \IF{}, \IN{}, \IS{}, \NEW{}, \NULL{}, \RETHROW, \RETURN{}, \SUPER{}, \SWITCH{}, \THIS{}, \THROW{}, \TRUE{}, \TRY{}, \VAR{}, \VOID{}, \WHILE{}, \WITH{}.
@@ -6342,8 +7079,9 @@
 \end{grammar}
 
 \subsubsection{Comments}
-\label{comments}
+\LMLabel{comments}
 
+\LMHash{}
 {\em Comments} are sections of program text that are used for documentation.
 
 \begin{grammar}{\bf SINGLE\_LINE\_COMMENT:}
@@ -6355,16 +7093,22 @@
     .
  \end{grammar}
   
+\LMHash{}
 Dart supports both single-line and multi-line comments. A {\em single line comment} begins with the token \code{//}. Everything between \code{//} and the end of line must be ignored by the Dart compiler unless the comment is a documentation comment. . 
 
+\LMHash{}
 A {\em multi-line comment} begins with the token \code{/*} and ends with the token \code{*/}.  Everything between \code{/}* and \code{*}/ must be ignored by the Dart compiler unless the comment is a documentation comment. Comments may nest. 
 
+\LMHash{}
 {\em Documentation comments} are comments that begin with the tokens  \code{///} or  \code{/**}. Documentation comments are intended to be processed by a tool that produces human readable documentation. 
 
+\LMHash{}
 The scope of a documentation comment  always excludes the imported namespace of the enclosing library. Only names declared in the enclosing library are considered in scope within a documentation comment.
 
+\LMHash{}
 The scope of a documentation comment immediately preceding the declaration of a class $C$ is the instance scope of $C$, excluding any names introduced via the import namespace of the enclosing library.
 
+\LMHash{}
 The scope of a documentation comment immediately preceding the declaration of a function $f$  is the  scope in force at the very beginning of the body of $f$,  excluding any names introduced via the import namespace of the enclosing library.
 
 
@@ -6373,8 +7117,9 @@
 
 %\subsection{Grammar}
 \subsection{Operator Precedence}
-\label{operatorPrecedence}
+\LMLabel{operatorPrecedence}
 
+\LMHash{}
 Operator precedence is given implicitly by the grammar.
 
 \commentary{The following non-normative table may be helpful
@@ -6435,3 +7180,156 @@
 
 
 \end{document}
+
+[Text after \end{document} is ignored, hence we do not need "%"]
+----------------------------------------------------------------------
+
+* On Location Markers
+
+This is a description of location markers, giving some information
+about the underlying motivation and rationale, the actual
+implementation, and the relevant tool support.
+
+** What is a Location Marker?
+
+In order to support more fine-grained update propagation from this
+language specification to artifacts that depend on it, location
+markers have been added.  The idea is that each logical unit (section,
+subsection, etc) and each paragraph containing normative text should
+be addressable using these markers, such that source code (compilers
+and other tools, tests, etc.) can contain location markers, and the
+corresponding location in the spec may be looked up using standard
+document viewer search features.
+
+An SHA1 hash value of the text is associated with each location
+marker, such that changes in the text will incur changes in this hash
+value.  Consequently, source code in tools/tests that depend on
+specific parts of the spec may be flagged for revision by checking
+whether these hash values have changed:  If a given test T depends on
+a paragraph with hash value V in the spec, and the search for V fails
+in a new version of the spec, then that paragraph has changed and T
+should be revisited and possible revised.
+
+As a result, the search for parts of source code and similar artifacts
+in likely need of updates because of spec changes can be performed
+mechanically, which should help ensure that the conformance of all
+artifacts depending on this spec is maintained more easily, and hence
+more consistently.  Note that it makes no difference whether the need
+for an update has arisen in a very recent version of the spec or it
+has existed for a long time, because the hash value just remains
+different as long as the text is different from what it was when the
+location marker was harvested from the spec.
+
+** LaTeX Commands Supporting Location Markers
+
+Concretely, this is based on the commands \LMHash and \LMLabel.
+\LMHash{V} is used to add the text V in the margin, intended to mark
+a paragraph of normative text with the SHA1 hash value of the text, V.
+\LMLabel{L} has the effect of \label{L}, and moreover it shows the
+text sec:L in the margin.  In order to indicate a dependency on a
+section or subsection an \LMLabel location marker is used, and in
+order to indicate a dependency on a specific paragraph, the hash value
+of that paragraph is used.
+
+In this file, each normative paragraph has had the command \LMHash{}
+added at the beginning, such that each of these paragraphs can be
+decorated with their hash value.  Similarly, all \section{}s,
+\subsection{}s, \subsubsection{}s, and \paragraph{}s have had
+their \label commands changed to \LMLabel, such that they are
+decorated with logical names.
+
+** Rationale
+
+The design of location markers was proposed by Erik Ernst and
+developed through discussions with several others, in particular Gilad
+Bracha and Lars Bak.  Some discussions along the way that gave rise to
+the given design are outlined below.
+
+The basic idea is that a hash value based on the actual text will
+serve well to identify a piece of text, because it will change
+whenever the text changes, and it remains the same if the text is
+moved to a different location; in other words, it characterizes the
+text itself, independently of the rest of the document.  Hence:
+
+  - references to specific paragraphs in the spec are easy to create:
+    copy the marker and paste it into the source code (but see below
+    why this uses an extra indirection as far as possible)
+
+  - such references would be robust in the sense that they depend on
+    the actual text alone, i.e., they would not be invalidated by
+    updates to section numbers, relocation of the paragraph, or
+    updates to text in different paragraphs; as Lars mentioned, we
+    should use a "stripped" version of the text, removing comments,
+    normalizing white space, etc., which would make the refs even more
+    robust in case of "inessential" changes
+
+  - artifacts depending on a given part of the spec that was
+    changed could easily be pointed out: After an update to a
+    part of the spec, that artifact would hold a marker associated
+    with a hash value which does not any more occur in the spec,
+    maintainers of the artifact would then receive a notification
+    ("test1773 depends on a part of the spec that was updated").
+    Nice tool support would show them the paragraph in the most recent
+    version of the spec as well as the old version that the artifact
+    used to depend on, and a comparison of the two would help
+    clarifying what needs fixing because of this change, if anything.
+
+However, there is a conflict in this scenario:  Lars pointed out that
+it is very inconvenient to have to create a lot of revision control
+commits (e.g., new versions of tests), just because a large number of
+artifacts depend on a specific hash value that changed, if that change
+has no real impact on each of those artifacts.  The obvious solution
+to this problem would be to use symbolic names and keep the actual
+hash values out of the primary artifacts.
+
+This approach has been used for \section{}s, \subsection{}s, etc., by
+using their labels as location markers.  For instance, dependency on
+\subsubsection{New} would be marked as a dependency on 'sec:new',
+which will (most likely) exist with the same label in the spec for a
+long time.  To detect a need for updates, the hash value associated
+with \subsubsection{New} from the date of the latest check of this
+kind to the dependent artifact should be compared with the current
+hash value for the same \subsubsection{}:  The artifact should be
+revisited iff those hash values differ.  As an easy approximation to
+this scheme, the hash values for all location markers would be
+computed for each spec update, and the location markers that have new
+hash values should cause revisits to all artifacts depending on that
+location marker.
+
+The symbolic location markers on larger units like \section{}
+etc. enable location marking in a hierarchical fashion: Dependencies
+on a \subsubsection{} or on a \section{} can be chosen according to
+the actual needs with each dependent artifact.  In general, fine
+granularity helps avoiding false positives, where an update somewhere
+in a large unit will flag too many dependent artifacts for revisits.
+In contrast, coarse granularity enables other artifacts to declare the
+actual dependencies when small units would be impractical because the
+artifact depends on so many of them.  But there is a problem at the
+bottom of this hierarchy, namely with paragraphs.
+
+It would be very inconvenient to have to invent a logical name for
+every paragraph.  Similarly, using a simple paragraph numbering would
+be unstable (add one new paragraph in the beginning of a section, and
+all the rest have new numbers, creating a massive flood of false
+update alerts, or, even worse, corrupting the declared dependencies in
+artifacts because they point to the wrong paragraphs).
+
+Hence, paragraphs have no other label than their actual hash value.
+Artifacts that depend on very specific elements in the spec may
+declare so by using an actual hash value for a given paragraph, and in
+return they pay in terms of potential updates to the marker when that
+paragraph changes, even in cases where the actual change makes no
+difference for that particular artifact.  This choice of granularity
+vs. stability is up to the creator of each artifact.
+
+** Maintenance of this document
+
+The invariant that each normative paragraph is associated with a line
+containing the text \LMHash{} should be maintained.  Extra occurrences
+of \LMHash{} can be added if needed, e.g., in order to make
+individual \item{}s in itemized lists addressable.  Each \LM.. command
+must occur on a separate line.  \LMHash{} must occur immediately
+before the associated paragraph, and \LMLabel must occur immediately
+after the associated \section{}, \subsection{} etc.
+
+----------------------------------------------------------------------
diff --git a/pkg/analysis_server/bin/fuzz/byte_stream_channel.dart b/pkg/analysis_server/bin/fuzz/byte_stream_channel.dart
deleted file mode 100644
index 1b62506..0000000
--- a/pkg/analysis_server/bin/fuzz/byte_stream_channel.dart
+++ /dev/null
@@ -1,137 +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.
-
-library channel.byte_stream;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'channel.dart';
-import 'protocol.dart';
-
-/**
- * Instances of the class [ByteStreamClientChannel] implement a
- * [ClientCommunicationChannel] that uses a stream and a sink (typically,
- * standard input and standard output) to communicate with servers.
- */
-class ByteStreamClientChannel implements ClientCommunicationChannel {
-  final Stream input;
-  final IOSink output;
-
-  @override
-  Stream<Response> responseStream;
-
-  @override
-  Stream<Notification> notificationStream;
-
-  ByteStreamClientChannel(this.input, this.output) {
-    Stream jsonStream = input.transform((new Utf8Codec()).decoder)
-        .transform(new LineSplitter())
-        .transform(new JsonStreamDecoder())
-        .where((json) => json is Map)
-        .asBroadcastStream();
-    responseStream = jsonStream
-        .where((json) => json[Notification.EVENT] == null)
-        .transform(new ResponseConverter())
-        .asBroadcastStream();
-    notificationStream = jsonStream
-        .where((json) => json[Notification.EVENT] != null)
-        .transform(new NotificationConverter())
-        .asBroadcastStream();
-  }
-
-  @override
-  Future close() {
-    return output.close();
-  }
-
-  @override
-  Future<Response> sendRequest(Request request) {
-    String id = request.id;
-    output.writeln(JSON.encode(request.toJson()));
-    return responseStream.firstWhere((Response response) => response.id == id);
-  }
-}
-
-/**
- * Instances of the class [ByteStreamServerChannel] implement a
- * [ServerCommunicationChannel] that uses a stream and a sink (typically,
- * standard input and standard output) to communicate with clients.
- */
-class ByteStreamServerChannel implements ServerCommunicationChannel {
-  final Stream input;
-  final IOSink output;
-
-  /**
-   * Completer that will be signalled when the input stream is closed.
-   */
-  final Completer _closed = new Completer();
-
-  ByteStreamServerChannel(this.input, this.output);
-
-  /**
-   * Future that will be completed when the input stream is closed.
-   */
-  Future get closed {
-    return _closed.future;
-  }
-
-  @override
-  void close() {
-    if (!_closed.isCompleted) {
-      _closed.complete();
-    }
-  }
-
-  @override
-  void listen(void onRequest(Request request), {Function onError, void
-      onDone()}) {
-    input.transform((new Utf8Codec()).decoder).transform(new LineSplitter()
-        ).listen((String data) => _readRequest(data, onRequest), onError: onError,
-        onDone: () {
-      close();
-      onDone();
-    });
-  }
-
-  @override
-  void sendNotification(Notification notification) {
-    // Don't send any further notifications after the communication channel is
-    // closed.
-    if (_closed.isCompleted) {
-      return;
-    }
-    output.writeln(JSON.encode(notification.toJson()));
-  }
-
-  @override
-  void sendResponse(Response response) {
-    // Don't send any further responses after the communication channel is
-    // closed.
-    if (_closed.isCompleted) {
-      return;
-    }
-    output.writeln(JSON.encode(response.toJson()));
-  }
-
-  /**
-   * Read a request from the given [data] and use the given function to handle
-   * the request.
-   */
-  void _readRequest(Object data, void onRequest(Request request)) {
-    // Ignore any further requests after the communication channel is closed.
-    if (_closed.isCompleted) {
-      return;
-    }
-    // Parse the string as a JSON descriptor and process the resulting
-    // structure as a request.
-    Request request = new Request.fromString(data);
-    if (request == null) {
-      sendResponse(new Response.invalidRequestFormat());
-      return;
-    }
-    onRequest(request);
-  }
-}
diff --git a/pkg/analysis_server/bin/fuzz/channel.dart b/pkg/analysis_server/bin/fuzz/channel.dart
deleted file mode 100644
index 1130ace..0000000
--- a/pkg/analysis_server/bin/fuzz/channel.dart
+++ /dev/null
@@ -1,151 +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.
-
-library channel;
-
-import 'dart:async';
-import 'dart:convert';
-
-import 'protocol.dart';
-
-/**
- * The abstract class [ClientCommunicationChannel] defines the behavior of
- * objects that allow a client to send [Request]s to an [AnalysisServer] and to
- * receive both [Response]s and [Notification]s.
- */
-abstract class ClientCommunicationChannel {
-  /**
-   * The stream of notifications from the server.
-   */
-  Stream<Notification> notificationStream;
-
-  /**
-   * The stream of responses from the server.
-   */
-  Stream<Response> responseStream;
-
-  /**
-   * Send the given [request] to the server
-   * and return a future with the associated [Response].
-   */
-  Future<Response> sendRequest(Request request);
-
-  /**
-   * Close the channel to the server. Once called, all future communication
-   * with the server via [sendRequest] will silently be ignored.
-   */
-  Future close();
-}
-
-/**
- * The abstract class [ServerCommunicationChannel] defines the behavior of
- * objects that allow an [AnalysisServer] to receive [Request]s and to return
- * both [Response]s and [Notification]s.
- */
-abstract class ServerCommunicationChannel {
-  /**
-   * Listen to the channel for requests. If a request is received, invoke the
-   * [onRequest] function. If an error is encountered while trying to read from
-   * the socket, invoke the [onError] function. If the socket is closed by the
-   * client, invoke the [onDone] function.
-   * Only one listener is allowed per channel.
-   */
-  void listen(void onRequest(Request request), {Function onError, void onDone()});
-
-  /**
-   * Send the given [notification] to the client.
-   */
-  void sendNotification(Notification notification);
-
-  /**
-   * Send the given [response] to the client.
-   */
-  void sendResponse(Response response);
-
-  /**
-   * Close the communication channel.
-   */
-  void close();
-}
-
-/**
- * Instances of the class [JsonStreamDecoder] convert JSON strings to JSON
- * maps.
- */
-class JsonStreamDecoder extends Converter<String, Map> {
-  @override
-  Map convert(String text) => JSON.decode(text);
-
-  @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
-      new ChannelChunkSink<String, Map>(this, sink);
-}
-
-/**
- * Instances of the class [ResponseConverter] convert JSON maps to [Response]s.
- */
-class ResponseConverter extends Converter<Map, Response> {
-  @override
-  Response convert(Map json) => new Response.fromJson(json);
-
-  @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
-      new ChannelChunkSink<Map, Response>(this, sink);
-}
-
-/**
- * Instances of the class [NotificationConverter] convert JSON maps to
- * [Notification]s.
- */
-class NotificationConverter extends Converter<Map, Notification> {
-  @override
-  Notification convert(Map json) => new Notification.fromJson(json);
-
-  @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
-      new ChannelChunkSink<Map, Notification>(this, sink);
-}
-
-/**
- * Instances of the class [ChannelChunkSink] uses a [Converter] to translate
- * chunks.
- */
-class ChannelChunkSink<S, T> extends ChunkedConversionSink<S> {
-  /**
-   * The converter used to translate chunks.
-   */
-  final Converter<S, T> converter;
-
-  /**
-   * The sink to which the converted chunks are added.
-   */
-  final Sink sink;
-
-  /**
-   * A flag indicating whether the sink has been closed.
-   */
-  bool closed = false;
-
-  /**
-   * Initialize a newly create sink to use the given [converter] to convert
-   * chunks before adding them to the given [sink].
-   */
-  ChannelChunkSink(this.converter, this.sink);
-
-  @override
-  void add(S chunk) {
-    if (!closed) {
-      T convertedChunk = converter.convert(chunk);
-      if (convertedChunk != null) {
-        sink.add(convertedChunk);
-      }
-    }
-  }
-
-  @override
-  void close() {
-    closed = true;
-    sink.close();
-  }
-}
diff --git a/pkg/analysis_server/bin/fuzz/generated_protocol.dart b/pkg/analysis_server/bin/fuzz/generated_protocol.dart
deleted file mode 100644
index 21bc896..0000000
--- a/pkg/analysis_server/bin/fuzz/generated_protocol.dart
+++ /dev/null
@@ -1,10023 +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.
-//
-// This file has been automatically generated.  Please do not edit it manually.
-// To regenerate the file, use the script
-// "pkg/analysis_server/tool/spec/generate_files".
-
-part of protocol;
-/**
- * server.getVersion params
- */
-class ServerGetVersionParams {
-  Request toRequest(String id) {
-    return new Request(id, "server.getVersion", null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is ServerGetVersionParams) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 55877452;
-  }
-}
-
-/**
- * server.getVersion result
- *
- * {
- *   "version": String
- * }
- */
-class ServerGetVersionResult implements HasToJson {
-  /**
-   * The version number of the analysis server.
-   */
-  String version;
-
-  ServerGetVersionResult(this.version);
-
-  factory ServerGetVersionResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String version;
-      if (json.containsKey("version")) {
-        version = jsonDecoder._decodeString(jsonPath + ".version", json["version"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "version");
-      }
-      return new ServerGetVersionResult(version);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.getVersion result");
-    }
-  }
-
-  factory ServerGetVersionResult.fromResponse(Response response) {
-    return new ServerGetVersionResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["version"] = version;
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ServerGetVersionResult) {
-      return version == other.version;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, version.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * server.shutdown params
- */
-class ServerShutdownParams {
-  Request toRequest(String id) {
-    return new Request(id, "server.shutdown", null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is ServerShutdownParams) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 366630911;
-  }
-}
-/**
- * server.shutdown result
- */
-class ServerShutdownResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is ServerShutdownResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 193626532;
-  }
-}
-
-/**
- * server.setSubscriptions params
- *
- * {
- *   "subscriptions": List<ServerService>
- * }
- */
-class ServerSetSubscriptionsParams implements HasToJson {
-  /**
-   * A list of the services being subscribed to.
-   */
-  List<ServerService> subscriptions;
-
-  ServerSetSubscriptionsParams(this.subscriptions);
-
-  factory ServerSetSubscriptionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<ServerService> subscriptions;
-      if (json.containsKey("subscriptions")) {
-        subscriptions = jsonDecoder._decodeList(jsonPath + ".subscriptions", json["subscriptions"], (String jsonPath, Object json) => new ServerService.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "subscriptions");
-      }
-      return new ServerSetSubscriptionsParams(subscriptions);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.setSubscriptions params");
-    }
-  }
-
-  factory ServerSetSubscriptionsParams.fromRequest(Request request) {
-    return new ServerSetSubscriptionsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["subscriptions"] = subscriptions.map((ServerService value) => value.toJson()).toList();
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "server.setSubscriptions", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ServerSetSubscriptionsParams) {
-      return _listEqual(subscriptions, other.subscriptions, (ServerService a, ServerService b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, subscriptions.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * server.setSubscriptions result
- */
-class ServerSetSubscriptionsResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is ServerSetSubscriptionsResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 748820900;
-  }
-}
-/**
- * server.connected params
- */
-class ServerConnectedParams {
-  Notification toNotification() {
-    return new Notification("server.connected", null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is ServerConnectedParams) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 509239412;
-  }
-}
-
-/**
- * server.error params
- *
- * {
- *   "isFatal": bool
- *   "message": String
- *   "stackTrace": String
- * }
- */
-class ServerErrorParams implements HasToJson {
-  /**
-   * True if the error is a fatal error, meaning that the server will shutdown
-   * automatically after sending this notification.
-   */
-  bool isFatal;
-
-  /**
-   * The error message indicating what kind of error was encountered.
-   */
-  String message;
-
-  /**
-   * The stack trace associated with the generation of the error, used for
-   * debugging the server.
-   */
-  String stackTrace;
-
-  ServerErrorParams(this.isFatal, this.message, this.stackTrace);
-
-  factory ServerErrorParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      bool isFatal;
-      if (json.containsKey("isFatal")) {
-        isFatal = jsonDecoder._decodeBool(jsonPath + ".isFatal", json["isFatal"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isFatal");
-      }
-      String message;
-      if (json.containsKey("message")) {
-        message = jsonDecoder._decodeString(jsonPath + ".message", json["message"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "message");
-      }
-      String stackTrace;
-      if (json.containsKey("stackTrace")) {
-        stackTrace = jsonDecoder._decodeString(jsonPath + ".stackTrace", json["stackTrace"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "stackTrace");
-      }
-      return new ServerErrorParams(isFatal, message, stackTrace);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.error params");
-    }
-  }
-
-  factory ServerErrorParams.fromNotification(Notification notification) {
-    return new ServerErrorParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["isFatal"] = isFatal;
-    result["message"] = message;
-    result["stackTrace"] = stackTrace;
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("server.error", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ServerErrorParams) {
-      return isFatal == other.isFatal &&
-          message == other.message &&
-          stackTrace == other.stackTrace;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, isFatal.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, message.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, stackTrace.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * server.status params
- *
- * {
- *   "analysis": optional AnalysisStatus
- * }
- */
-class ServerStatusParams implements HasToJson {
-  /**
-   * The current status of analysis, including whether analysis is being
-   * performed and if so what is being analyzed.
-   */
-  AnalysisStatus analysis;
-
-  ServerStatusParams({this.analysis});
-
-  factory ServerStatusParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      AnalysisStatus analysis;
-      if (json.containsKey("analysis")) {
-        analysis = new AnalysisStatus.fromJson(jsonDecoder, jsonPath + ".analysis", json["analysis"]);
-      }
-      return new ServerStatusParams(analysis: analysis);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.status params");
-    }
-  }
-
-  factory ServerStatusParams.fromNotification(Notification notification) {
-    return new ServerStatusParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    if (analysis != null) {
-      result["analysis"] = analysis.toJson();
-    }
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("server.status", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ServerStatusParams) {
-      return analysis == other.analysis;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, analysis.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.getErrors params
- *
- * {
- *   "file": FilePath
- * }
- */
-class AnalysisGetErrorsParams implements HasToJson {
-  /**
-   * The file for which errors are being requested.
-   */
-  String file;
-
-  AnalysisGetErrorsParams(this.file);
-
-  factory AnalysisGetErrorsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      return new AnalysisGetErrorsParams(file);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors params");
-    }
-  }
-
-  factory AnalysisGetErrorsParams.fromRequest(Request request) {
-    return new AnalysisGetErrorsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "analysis.getErrors", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisGetErrorsParams) {
-      return file == other.file;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.getErrors result
- *
- * {
- *   "errors": List<AnalysisError>
- * }
- */
-class AnalysisGetErrorsResult implements HasToJson {
-  /**
-   * The errors associated with the file.
-   */
-  List<AnalysisError> errors;
-
-  AnalysisGetErrorsResult(this.errors);
-
-  factory AnalysisGetErrorsResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<AnalysisError> errors;
-      if (json.containsKey("errors")) {
-        errors = jsonDecoder._decodeList(jsonPath + ".errors", json["errors"], (String jsonPath, Object json) => new AnalysisError.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "errors");
-      }
-      return new AnalysisGetErrorsResult(errors);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors result");
-    }
-  }
-
-  factory AnalysisGetErrorsResult.fromResponse(Response response) {
-    return new AnalysisGetErrorsResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["errors"] = errors.map((AnalysisError value) => value.toJson()).toList();
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisGetErrorsResult) {
-      return _listEqual(errors, other.errors, (AnalysisError a, AnalysisError b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, errors.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.getHover params
- *
- * {
- *   "file": FilePath
- *   "offset": int
- * }
- */
-class AnalysisGetHoverParams implements HasToJson {
-  /**
-   * The file in which hover information is being requested.
-   */
-  String file;
-
-  /**
-   * The offset for which hover information is being requested.
-   */
-  int offset;
-
-  AnalysisGetHoverParams(this.file, this.offset);
-
-  factory AnalysisGetHoverParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      return new AnalysisGetHoverParams(file, offset);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover params");
-    }
-  }
-
-  factory AnalysisGetHoverParams.fromRequest(Request request) {
-    return new AnalysisGetHoverParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "analysis.getHover", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisGetHoverParams) {
-      return file == other.file &&
-          offset == other.offset;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.getHover result
- *
- * {
- *   "hovers": List<HoverInformation>
- * }
- */
-class AnalysisGetHoverResult implements HasToJson {
-  /**
-   * The hover information associated with the location. The list will be empty
-   * if no information could be determined for the location. The list can
-   * contain multiple items if the file is being analyzed in multiple contexts
-   * in conflicting ways (such as a part that is included in multiple
-   * libraries).
-   */
-  List<HoverInformation> hovers;
-
-  AnalysisGetHoverResult(this.hovers);
-
-  factory AnalysisGetHoverResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<HoverInformation> hovers;
-      if (json.containsKey("hovers")) {
-        hovers = jsonDecoder._decodeList(jsonPath + ".hovers", json["hovers"], (String jsonPath, Object json) => new HoverInformation.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "hovers");
-      }
-      return new AnalysisGetHoverResult(hovers);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover result");
-    }
-  }
-
-  factory AnalysisGetHoverResult.fromResponse(Response response) {
-    return new AnalysisGetHoverResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["hovers"] = hovers.map((HoverInformation value) => value.toJson()).toList();
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisGetHoverResult) {
-      return _listEqual(hovers, other.hovers, (HoverInformation a, HoverInformation b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, hovers.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * analysis.reanalyze params
- */
-class AnalysisReanalyzeParams {
-  Request toRequest(String id) {
-    return new Request(id, "analysis.reanalyze", null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisReanalyzeParams) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 613039876;
-  }
-}
-/**
- * analysis.reanalyze result
- */
-class AnalysisReanalyzeResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisReanalyzeResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 846803925;
-  }
-}
-
-/**
- * analysis.setAnalysisRoots params
- *
- * {
- *   "included": List<FilePath>
- *   "excluded": List<FilePath>
- * }
- */
-class AnalysisSetAnalysisRootsParams implements HasToJson {
-  /**
-   * A list of the files and directories that should be analyzed.
-   */
-  List<String> included;
-
-  /**
-   * A list of the files and directories within the included directories that
-   * should not be analyzed.
-   */
-  List<String> excluded;
-
-  AnalysisSetAnalysisRootsParams(this.included, this.excluded);
-
-  factory AnalysisSetAnalysisRootsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<String> included;
-      if (json.containsKey("included")) {
-        included = jsonDecoder._decodeList(jsonPath + ".included", json["included"], jsonDecoder._decodeString);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "included");
-      }
-      List<String> excluded;
-      if (json.containsKey("excluded")) {
-        excluded = jsonDecoder._decodeList(jsonPath + ".excluded", json["excluded"], jsonDecoder._decodeString);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "excluded");
-      }
-      return new AnalysisSetAnalysisRootsParams(included, excluded);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.setAnalysisRoots params");
-    }
-  }
-
-  factory AnalysisSetAnalysisRootsParams.fromRequest(Request request) {
-    return new AnalysisSetAnalysisRootsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["included"] = included;
-    result["excluded"] = excluded;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "analysis.setAnalysisRoots", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisSetAnalysisRootsParams) {
-      return _listEqual(included, other.included, (String a, String b) => a == b) &&
-          _listEqual(excluded, other.excluded, (String a, String b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, included.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, excluded.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * analysis.setAnalysisRoots result
- */
-class AnalysisSetAnalysisRootsResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisSetAnalysisRootsResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 866004753;
-  }
-}
-
-/**
- * analysis.setPriorityFiles params
- *
- * {
- *   "files": List<FilePath>
- * }
- */
-class AnalysisSetPriorityFilesParams implements HasToJson {
-  /**
-   * The files that are to be a priority for analysis.
-   */
-  List<String> files;
-
-  AnalysisSetPriorityFilesParams(this.files);
-
-  factory AnalysisSetPriorityFilesParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<String> files;
-      if (json.containsKey("files")) {
-        files = jsonDecoder._decodeList(jsonPath + ".files", json["files"], jsonDecoder._decodeString);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "files");
-      }
-      return new AnalysisSetPriorityFilesParams(files);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.setPriorityFiles params");
-    }
-  }
-
-  factory AnalysisSetPriorityFilesParams.fromRequest(Request request) {
-    return new AnalysisSetPriorityFilesParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["files"] = files;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "analysis.setPriorityFiles", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisSetPriorityFilesParams) {
-      return _listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, files.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * analysis.setPriorityFiles result
- */
-class AnalysisSetPriorityFilesResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisSetPriorityFilesResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 330050055;
-  }
-}
-
-/**
- * analysis.setSubscriptions params
- *
- * {
- *   "subscriptions": Map<AnalysisService, List<FilePath>>
- * }
- */
-class AnalysisSetSubscriptionsParams implements HasToJson {
-  /**
-   * A table mapping services to a list of the files being subscribed to the
-   * service.
-   */
-  Map<AnalysisService, List<String>> subscriptions;
-
-  AnalysisSetSubscriptionsParams(this.subscriptions);
-
-  factory AnalysisSetSubscriptionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      Map<AnalysisService, List<String>> subscriptions;
-      if (json.containsKey("subscriptions")) {
-        subscriptions = jsonDecoder._decodeMap(jsonPath + ".subscriptions", json["subscriptions"], keyDecoder: (String jsonPath, Object json) => new AnalysisService.fromJson(jsonDecoder, jsonPath, json), valueDecoder: (String jsonPath, Object json) => jsonDecoder._decodeList(jsonPath, json, jsonDecoder._decodeString));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "subscriptions");
-      }
-      return new AnalysisSetSubscriptionsParams(subscriptions);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.setSubscriptions params");
-    }
-  }
-
-  factory AnalysisSetSubscriptionsParams.fromRequest(Request request) {
-    return new AnalysisSetSubscriptionsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["subscriptions"] = mapMap(subscriptions, keyCallback: (AnalysisService value) => value.toJson());
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "analysis.setSubscriptions", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisSetSubscriptionsParams) {
-      return _mapEqual(subscriptions, other.subscriptions, (List<String> a, List<String> b) => _listEqual(a, b, (String a, String b) => a == b));
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, subscriptions.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * analysis.setSubscriptions result
- */
-class AnalysisSetSubscriptionsResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisSetSubscriptionsResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 218088493;
-  }
-}
-
-/**
- * analysis.updateContent params
- *
- * {
- *   "files": Map<FilePath, AddContentOverlay | ChangeContentOverlay | RemoveContentOverlay>
- * }
- */
-class AnalysisUpdateContentParams implements HasToJson {
-  /**
-   * A table mapping the files whose content has changed to a description of
-   * the content change.
-   */
-  Map<String, dynamic> files;
-
-  AnalysisUpdateContentParams(this.files);
-
-  factory AnalysisUpdateContentParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      Map<String, dynamic> files;
-      if (json.containsKey("files")) {
-        files = jsonDecoder._decodeMap(jsonPath + ".files", json["files"], valueDecoder: (String jsonPath, Object json) => jsonDecoder._decodeUnion(jsonPath, json, "type", {"add": (String jsonPath, Object json) => new AddContentOverlay.fromJson(jsonDecoder, jsonPath, json), "change": (String jsonPath, Object json) => new ChangeContentOverlay.fromJson(jsonDecoder, jsonPath, json), "remove": (String jsonPath, Object json) => new RemoveContentOverlay.fromJson(jsonDecoder, jsonPath, json)}));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "files");
-      }
-      return new AnalysisUpdateContentParams(files);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.updateContent params");
-    }
-  }
-
-  factory AnalysisUpdateContentParams.fromRequest(Request request) {
-    return new AnalysisUpdateContentParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["files"] = mapMap(files, valueCallback: (dynamic value) => value.toJson());
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "analysis.updateContent", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisUpdateContentParams) {
-      return _mapEqual(files, other.files, (dynamic a, dynamic b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, files.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * analysis.updateContent result
- */
-class AnalysisUpdateContentResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisUpdateContentResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 468798730;
-  }
-}
-
-/**
- * analysis.updateOptions params
- *
- * {
- *   "options": AnalysisOptions
- * }
- */
-class AnalysisUpdateOptionsParams implements HasToJson {
-  /**
-   * The options that are to be used to control analysis.
-   */
-  AnalysisOptions options;
-
-  AnalysisUpdateOptionsParams(this.options);
-
-  factory AnalysisUpdateOptionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      AnalysisOptions options;
-      if (json.containsKey("options")) {
-        options = new AnalysisOptions.fromJson(jsonDecoder, jsonPath + ".options", json["options"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "options");
-      }
-      return new AnalysisUpdateOptionsParams(options);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.updateOptions params");
-    }
-  }
-
-  factory AnalysisUpdateOptionsParams.fromRequest(Request request) {
-    return new AnalysisUpdateOptionsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["options"] = options.toJson();
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "analysis.updateOptions", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisUpdateOptionsParams) {
-      return options == other.options;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, options.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * analysis.updateOptions result
- */
-class AnalysisUpdateOptionsResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisUpdateOptionsResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 179689467;
-  }
-}
-
-/**
- * analysis.errors params
- *
- * {
- *   "file": FilePath
- *   "errors": List<AnalysisError>
- * }
- */
-class AnalysisErrorsParams implements HasToJson {
-  /**
-   * The file containing the errors.
-   */
-  String file;
-
-  /**
-   * The errors contained in the file.
-   */
-  List<AnalysisError> errors;
-
-  AnalysisErrorsParams(this.file, this.errors);
-
-  factory AnalysisErrorsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      List<AnalysisError> errors;
-      if (json.containsKey("errors")) {
-        errors = jsonDecoder._decodeList(jsonPath + ".errors", json["errors"], (String jsonPath, Object json) => new AnalysisError.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "errors");
-      }
-      return new AnalysisErrorsParams(file, errors);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.errors params");
-    }
-  }
-
-  factory AnalysisErrorsParams.fromNotification(Notification notification) {
-    return new AnalysisErrorsParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["errors"] = errors.map((AnalysisError value) => value.toJson()).toList();
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.errors", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisErrorsParams) {
-      return file == other.file &&
-          _listEqual(errors, other.errors, (AnalysisError a, AnalysisError b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, errors.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.flushResults params
- *
- * {
- *   "files": List<FilePath>
- * }
- */
-class AnalysisFlushResultsParams implements HasToJson {
-  /**
-   * The files that are no longer being analyzed.
-   */
-  List<String> files;
-
-  AnalysisFlushResultsParams(this.files);
-
-  factory AnalysisFlushResultsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<String> files;
-      if (json.containsKey("files")) {
-        files = jsonDecoder._decodeList(jsonPath + ".files", json["files"], jsonDecoder._decodeString);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "files");
-      }
-      return new AnalysisFlushResultsParams(files);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.flushResults params");
-    }
-  }
-
-  factory AnalysisFlushResultsParams.fromNotification(Notification notification) {
-    return new AnalysisFlushResultsParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["files"] = files;
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.flushResults", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisFlushResultsParams) {
-      return _listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, files.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.folding params
- *
- * {
- *   "file": FilePath
- *   "regions": List<FoldingRegion>
- * }
- */
-class AnalysisFoldingParams implements HasToJson {
-  /**
-   * The file containing the folding regions.
-   */
-  String file;
-
-  /**
-   * The folding regions contained in the file.
-   */
-  List<FoldingRegion> regions;
-
-  AnalysisFoldingParams(this.file, this.regions);
-
-  factory AnalysisFoldingParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      List<FoldingRegion> regions;
-      if (json.containsKey("regions")) {
-        regions = jsonDecoder._decodeList(jsonPath + ".regions", json["regions"], (String jsonPath, Object json) => new FoldingRegion.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "regions");
-      }
-      return new AnalysisFoldingParams(file, regions);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.folding params");
-    }
-  }
-
-  factory AnalysisFoldingParams.fromNotification(Notification notification) {
-    return new AnalysisFoldingParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["regions"] = regions.map((FoldingRegion value) => value.toJson()).toList();
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.folding", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisFoldingParams) {
-      return file == other.file &&
-          _listEqual(regions, other.regions, (FoldingRegion a, FoldingRegion b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, regions.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.highlights params
- *
- * {
- *   "file": FilePath
- *   "regions": List<HighlightRegion>
- * }
- */
-class AnalysisHighlightsParams implements HasToJson {
-  /**
-   * The file containing the highlight regions.
-   */
-  String file;
-
-  /**
-   * The highlight regions contained in the file. Each highlight region
-   * represents a particular syntactic or semantic meaning associated with some
-   * range. Note that the highlight regions that are returned can overlap other
-   * highlight regions if there is more than one meaning associated with a
-   * particular region.
-   */
-  List<HighlightRegion> regions;
-
-  AnalysisHighlightsParams(this.file, this.regions);
-
-  factory AnalysisHighlightsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      List<HighlightRegion> regions;
-      if (json.containsKey("regions")) {
-        regions = jsonDecoder._decodeList(jsonPath + ".regions", json["regions"], (String jsonPath, Object json) => new HighlightRegion.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "regions");
-      }
-      return new AnalysisHighlightsParams(file, regions);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.highlights params");
-    }
-  }
-
-  factory AnalysisHighlightsParams.fromNotification(Notification notification) {
-    return new AnalysisHighlightsParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["regions"] = regions.map((HighlightRegion value) => value.toJson()).toList();
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.highlights", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisHighlightsParams) {
-      return file == other.file &&
-          _listEqual(regions, other.regions, (HighlightRegion a, HighlightRegion b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, regions.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.navigation params
- *
- * {
- *   "file": FilePath
- *   "regions": List<NavigationRegion>
- * }
- */
-class AnalysisNavigationParams implements HasToJson {
-  /**
-   * The file containing the navigation regions.
-   */
-  String file;
-
-  /**
-   * The navigation regions contained in the file. Each navigation region
-   * represents a list of targets associated with some range. The lists will
-   * usually contain a single target, but can contain more in the case of a
-   * part that is included in multiple libraries or in Dart code that is
-   * compiled against multiple versions of a package. Note that the navigation
-   * regions that are returned do not overlap other navigation regions.
-   */
-  List<NavigationRegion> regions;
-
-  AnalysisNavigationParams(this.file, this.regions);
-
-  factory AnalysisNavigationParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      List<NavigationRegion> regions;
-      if (json.containsKey("regions")) {
-        regions = jsonDecoder._decodeList(jsonPath + ".regions", json["regions"], (String jsonPath, Object json) => new NavigationRegion.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "regions");
-      }
-      return new AnalysisNavigationParams(file, regions);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.navigation params");
-    }
-  }
-
-  factory AnalysisNavigationParams.fromNotification(Notification notification) {
-    return new AnalysisNavigationParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["regions"] = regions.map((NavigationRegion value) => value.toJson()).toList();
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.navigation", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisNavigationParams) {
-      return file == other.file &&
-          _listEqual(regions, other.regions, (NavigationRegion a, NavigationRegion b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, regions.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.occurrences params
- *
- * {
- *   "file": FilePath
- *   "occurrences": List<Occurrences>
- * }
- */
-class AnalysisOccurrencesParams implements HasToJson {
-  /**
-   * The file in which the references occur.
-   */
-  String file;
-
-  /**
-   * The occurrences of references to elements within the file.
-   */
-  List<Occurrences> occurrences;
-
-  AnalysisOccurrencesParams(this.file, this.occurrences);
-
-  factory AnalysisOccurrencesParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      List<Occurrences> occurrences;
-      if (json.containsKey("occurrences")) {
-        occurrences = jsonDecoder._decodeList(jsonPath + ".occurrences", json["occurrences"], (String jsonPath, Object json) => new Occurrences.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "occurrences");
-      }
-      return new AnalysisOccurrencesParams(file, occurrences);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.occurrences params");
-    }
-  }
-
-  factory AnalysisOccurrencesParams.fromNotification(Notification notification) {
-    return new AnalysisOccurrencesParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["occurrences"] = occurrences.map((Occurrences value) => value.toJson()).toList();
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.occurrences", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisOccurrencesParams) {
-      return file == other.file &&
-          _listEqual(occurrences, other.occurrences, (Occurrences a, Occurrences b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, occurrences.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.outline params
- *
- * {
- *   "file": FilePath
- *   "outline": Outline
- * }
- */
-class AnalysisOutlineParams implements HasToJson {
-  /**
-   * The file with which the outline is associated.
-   */
-  String file;
-
-  /**
-   * The outline associated with the file.
-   */
-  Outline outline;
-
-  AnalysisOutlineParams(this.file, this.outline);
-
-  factory AnalysisOutlineParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      Outline outline;
-      if (json.containsKey("outline")) {
-        outline = new Outline.fromJson(jsonDecoder, jsonPath + ".outline", json["outline"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "outline");
-      }
-      return new AnalysisOutlineParams(file, outline);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.outline params");
-    }
-  }
-
-  factory AnalysisOutlineParams.fromNotification(Notification notification) {
-    return new AnalysisOutlineParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["outline"] = outline.toJson();
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.outline", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisOutlineParams) {
-      return file == other.file &&
-          outline == other.outline;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, outline.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * analysis.overrides params
- *
- * {
- *   "file": FilePath
- *   "overrides": List<Override>
- * }
- */
-class AnalysisOverridesParams implements HasToJson {
-  /**
-   * The file with which the overrides are associated.
-   */
-  String file;
-
-  /**
-   * The overrides associated with the file.
-   */
-  List<Override> overrides;
-
-  AnalysisOverridesParams(this.file, this.overrides);
-
-  factory AnalysisOverridesParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      List<Override> overrides;
-      if (json.containsKey("overrides")) {
-        overrides = jsonDecoder._decodeList(jsonPath + ".overrides", json["overrides"], (String jsonPath, Object json) => new Override.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "overrides");
-      }
-      return new AnalysisOverridesParams(file, overrides);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.overrides params");
-    }
-  }
-
-  factory AnalysisOverridesParams.fromNotification(Notification notification) {
-    return new AnalysisOverridesParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["overrides"] = overrides.map((Override value) => value.toJson()).toList();
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("analysis.overrides", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisOverridesParams) {
-      return file == other.file &&
-          _listEqual(overrides, other.overrides, (Override a, Override b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, overrides.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * completion.getSuggestions params
- *
- * {
- *   "file": FilePath
- *   "offset": int
- * }
- */
-class CompletionGetSuggestionsParams implements HasToJson {
-  /**
-   * The file containing the point at which suggestions are to be made.
-   */
-  String file;
-
-  /**
-   * The offset within the file at which suggestions are to be made.
-   */
-  int offset;
-
-  CompletionGetSuggestionsParams(this.file, this.offset);
-
-  factory CompletionGetSuggestionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      return new CompletionGetSuggestionsParams(file, offset);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "completion.getSuggestions params");
-    }
-  }
-
-  factory CompletionGetSuggestionsParams.fromRequest(Request request) {
-    return new CompletionGetSuggestionsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "completion.getSuggestions", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is CompletionGetSuggestionsParams) {
-      return file == other.file &&
-          offset == other.offset;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * completion.getSuggestions result
- *
- * {
- *   "id": CompletionId
- * }
- */
-class CompletionGetSuggestionsResult implements HasToJson {
-  /**
-   * The identifier used to associate results with this completion request.
-   */
-  String id;
-
-  CompletionGetSuggestionsResult(this.id);
-
-  factory CompletionGetSuggestionsResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      return new CompletionGetSuggestionsResult(id);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "completion.getSuggestions result");
-    }
-  }
-
-  factory CompletionGetSuggestionsResult.fromResponse(Response response) {
-    return new CompletionGetSuggestionsResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is CompletionGetSuggestionsResult) {
-      return id == other.id;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * completion.results params
- *
- * {
- *   "id": CompletionId
- *   "replacementOffset": int
- *   "replacementLength": int
- *   "results": List<CompletionSuggestion>
- *   "isLast": bool
- * }
- */
-class CompletionResultsParams implements HasToJson {
-  /**
-   * The id associated with the completion.
-   */
-  String id;
-
-  /**
-   * The offset of the start of the text to be replaced. This will be different
-   * than the offset used to request the completion suggestions if there was a
-   * portion of an identifier before the original offset. In particular, the
-   * replacementOffset will be the offset of the beginning of said identifier.
-   */
-  int replacementOffset;
-
-  /**
-   * The length of the text to be replaced if the remainder of the identifier
-   * containing the cursor is to be replaced when the suggestion is applied
-   * (that is, the number of characters in the existing identifier).
-   */
-  int replacementLength;
-
-  /**
-   * The completion suggestions being reported. The notification contains all
-   * possible completions at the requested cursor position, even those that do
-   * not match the characters the user has already typed. This allows the
-   * client to respond to further keystrokes from the user without having to
-   * make additional requests.
-   */
-  List<CompletionSuggestion> results;
-
-  /**
-   * True if this is that last set of results that will be returned for the
-   * indicated completion.
-   */
-  bool isLast;
-
-  CompletionResultsParams(this.id, this.replacementOffset, this.replacementLength, this.results, this.isLast);
-
-  factory CompletionResultsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      int replacementOffset;
-      if (json.containsKey("replacementOffset")) {
-        replacementOffset = jsonDecoder._decodeInt(jsonPath + ".replacementOffset", json["replacementOffset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "replacementOffset");
-      }
-      int replacementLength;
-      if (json.containsKey("replacementLength")) {
-        replacementLength = jsonDecoder._decodeInt(jsonPath + ".replacementLength", json["replacementLength"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "replacementLength");
-      }
-      List<CompletionSuggestion> results;
-      if (json.containsKey("results")) {
-        results = jsonDecoder._decodeList(jsonPath + ".results", json["results"], (String jsonPath, Object json) => new CompletionSuggestion.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "results");
-      }
-      bool isLast;
-      if (json.containsKey("isLast")) {
-        isLast = jsonDecoder._decodeBool(jsonPath + ".isLast", json["isLast"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isLast");
-      }
-      return new CompletionResultsParams(id, replacementOffset, replacementLength, results, isLast);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "completion.results params");
-    }
-  }
-
-  factory CompletionResultsParams.fromNotification(Notification notification) {
-    return new CompletionResultsParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    result["replacementOffset"] = replacementOffset;
-    result["replacementLength"] = replacementLength;
-    result["results"] = results.map((CompletionSuggestion value) => value.toJson()).toList();
-    result["isLast"] = isLast;
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("completion.results", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is CompletionResultsParams) {
-      return id == other.id &&
-          replacementOffset == other.replacementOffset &&
-          replacementLength == other.replacementLength &&
-          _listEqual(results, other.results, (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
-          isLast == other.isLast;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, replacementOffset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, replacementLength.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, results.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, isLast.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findElementReferences params
- *
- * {
- *   "file": FilePath
- *   "offset": int
- *   "includePotential": bool
- * }
- */
-class SearchFindElementReferencesParams implements HasToJson {
-  /**
-   * The file containing the declaration of or reference to the element used to
-   * define the search.
-   */
-  String file;
-
-  /**
-   * The offset within the file of the declaration of or reference to the
-   * element.
-   */
-  int offset;
-
-  /**
-   * True if potential matches are to be included in the results.
-   */
-  bool includePotential;
-
-  SearchFindElementReferencesParams(this.file, this.offset, this.includePotential);
-
-  factory SearchFindElementReferencesParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      bool includePotential;
-      if (json.containsKey("includePotential")) {
-        includePotential = jsonDecoder._decodeBool(jsonPath + ".includePotential", json["includePotential"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "includePotential");
-      }
-      return new SearchFindElementReferencesParams(file, offset, includePotential);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findElementReferences params");
-    }
-  }
-
-  factory SearchFindElementReferencesParams.fromRequest(Request request) {
-    return new SearchFindElementReferencesParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    result["includePotential"] = includePotential;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "search.findElementReferences", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindElementReferencesParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          includePotential == other.includePotential;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, includePotential.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findElementReferences result
- *
- * {
- *   "id": optional SearchId
- *   "element": optional Element
- * }
- */
-class SearchFindElementReferencesResult implements HasToJson {
-  /**
-   * The identifier used to associate results with this search request.
-   *
-   * If no element was found at the given location, this field will be absent,
-   * and no results will be reported via the search.results notification.
-   */
-  String id;
-
-  /**
-   * The element referenced or defined at the given offset and whose references
-   * will be returned in the search results.
-   *
-   * If no element was found at the given location, this field will be absent.
-   */
-  Element element;
-
-  SearchFindElementReferencesResult({this.id, this.element});
-
-  factory SearchFindElementReferencesResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      }
-      Element element;
-      if (json.containsKey("element")) {
-        element = new Element.fromJson(jsonDecoder, jsonPath + ".element", json["element"]);
-      }
-      return new SearchFindElementReferencesResult(id: id, element: element);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findElementReferences result");
-    }
-  }
-
-  factory SearchFindElementReferencesResult.fromResponse(Response response) {
-    return new SearchFindElementReferencesResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    if (id != null) {
-      result["id"] = id;
-    }
-    if (element != null) {
-      result["element"] = element.toJson();
-    }
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindElementReferencesResult) {
-      return id == other.id &&
-          element == other.element;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, element.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findMemberDeclarations params
- *
- * {
- *   "name": String
- * }
- */
-class SearchFindMemberDeclarationsParams implements HasToJson {
-  /**
-   * The name of the declarations to be found.
-   */
-  String name;
-
-  SearchFindMemberDeclarationsParams(this.name);
-
-  factory SearchFindMemberDeclarationsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String name;
-      if (json.containsKey("name")) {
-        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "name");
-      }
-      return new SearchFindMemberDeclarationsParams(name);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberDeclarations params");
-    }
-  }
-
-  factory SearchFindMemberDeclarationsParams.fromRequest(Request request) {
-    return new SearchFindMemberDeclarationsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["name"] = name;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "search.findMemberDeclarations", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindMemberDeclarationsParams) {
-      return name == other.name;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findMemberDeclarations result
- *
- * {
- *   "id": SearchId
- * }
- */
-class SearchFindMemberDeclarationsResult implements HasToJson {
-  /**
-   * The identifier used to associate results with this search request.
-   */
-  String id;
-
-  SearchFindMemberDeclarationsResult(this.id);
-
-  factory SearchFindMemberDeclarationsResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      return new SearchFindMemberDeclarationsResult(id);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberDeclarations result");
-    }
-  }
-
-  factory SearchFindMemberDeclarationsResult.fromResponse(Response response) {
-    return new SearchFindMemberDeclarationsResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindMemberDeclarationsResult) {
-      return id == other.id;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findMemberReferences params
- *
- * {
- *   "name": String
- * }
- */
-class SearchFindMemberReferencesParams implements HasToJson {
-  /**
-   * The name of the references to be found.
-   */
-  String name;
-
-  SearchFindMemberReferencesParams(this.name);
-
-  factory SearchFindMemberReferencesParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String name;
-      if (json.containsKey("name")) {
-        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "name");
-      }
-      return new SearchFindMemberReferencesParams(name);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberReferences params");
-    }
-  }
-
-  factory SearchFindMemberReferencesParams.fromRequest(Request request) {
-    return new SearchFindMemberReferencesParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["name"] = name;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "search.findMemberReferences", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindMemberReferencesParams) {
-      return name == other.name;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findMemberReferences result
- *
- * {
- *   "id": SearchId
- * }
- */
-class SearchFindMemberReferencesResult implements HasToJson {
-  /**
-   * The identifier used to associate results with this search request.
-   */
-  String id;
-
-  SearchFindMemberReferencesResult(this.id);
-
-  factory SearchFindMemberReferencesResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      return new SearchFindMemberReferencesResult(id);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberReferences result");
-    }
-  }
-
-  factory SearchFindMemberReferencesResult.fromResponse(Response response) {
-    return new SearchFindMemberReferencesResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindMemberReferencesResult) {
-      return id == other.id;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findTopLevelDeclarations params
- *
- * {
- *   "pattern": String
- * }
- */
-class SearchFindTopLevelDeclarationsParams implements HasToJson {
-  /**
-   * The regular expression used to match the names of the declarations to be
-   * found.
-   */
-  String pattern;
-
-  SearchFindTopLevelDeclarationsParams(this.pattern);
-
-  factory SearchFindTopLevelDeclarationsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String pattern;
-      if (json.containsKey("pattern")) {
-        pattern = jsonDecoder._decodeString(jsonPath + ".pattern", json["pattern"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "pattern");
-      }
-      return new SearchFindTopLevelDeclarationsParams(pattern);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findTopLevelDeclarations params");
-    }
-  }
-
-  factory SearchFindTopLevelDeclarationsParams.fromRequest(Request request) {
-    return new SearchFindTopLevelDeclarationsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["pattern"] = pattern;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "search.findTopLevelDeclarations", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindTopLevelDeclarationsParams) {
-      return pattern == other.pattern;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, pattern.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.findTopLevelDeclarations result
- *
- * {
- *   "id": SearchId
- * }
- */
-class SearchFindTopLevelDeclarationsResult implements HasToJson {
-  /**
-   * The identifier used to associate results with this search request.
-   */
-  String id;
-
-  SearchFindTopLevelDeclarationsResult(this.id);
-
-  factory SearchFindTopLevelDeclarationsResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      return new SearchFindTopLevelDeclarationsResult(id);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findTopLevelDeclarations result");
-    }
-  }
-
-  factory SearchFindTopLevelDeclarationsResult.fromResponse(Response response) {
-    return new SearchFindTopLevelDeclarationsResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchFindTopLevelDeclarationsResult) {
-      return id == other.id;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.getTypeHierarchy params
- *
- * {
- *   "file": FilePath
- *   "offset": int
- * }
- */
-class SearchGetTypeHierarchyParams implements HasToJson {
-  /**
-   * The file containing the declaration or reference to the type for which a
-   * hierarchy is being requested.
-   */
-  String file;
-
-  /**
-   * The offset of the name of the type within the file.
-   */
-  int offset;
-
-  SearchGetTypeHierarchyParams(this.file, this.offset);
-
-  factory SearchGetTypeHierarchyParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      return new SearchGetTypeHierarchyParams(file, offset);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.getTypeHierarchy params");
-    }
-  }
-
-  factory SearchGetTypeHierarchyParams.fromRequest(Request request) {
-    return new SearchGetTypeHierarchyParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "search.getTypeHierarchy", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchGetTypeHierarchyParams) {
-      return file == other.file &&
-          offset == other.offset;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.getTypeHierarchy result
- *
- * {
- *   "hierarchyItems": optional List<TypeHierarchyItem>
- * }
- */
-class SearchGetTypeHierarchyResult implements HasToJson {
-  /**
-   * A list of the types in the requested hierarchy. The first element of the
-   * list is the item representing the type for which the hierarchy was
-   * requested. The index of other elements of the list is unspecified, but
-   * correspond to the integers used to reference supertype and subtype items
-   * within the items.
-   *
-   * This field will be absent if the code at the given file and offset does
-   * not represent a type, or if the file has not been sufficiently analyzed to
-   * allow a type hierarchy to be produced.
-   */
-  List<TypeHierarchyItem> hierarchyItems;
-
-  SearchGetTypeHierarchyResult({this.hierarchyItems}) {
-    if (hierarchyItems == null) {
-      hierarchyItems = <TypeHierarchyItem>[];
-    }
-  }
-
-  factory SearchGetTypeHierarchyResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<TypeHierarchyItem> hierarchyItems;
-      if (json.containsKey("hierarchyItems")) {
-        hierarchyItems = jsonDecoder._decodeList(jsonPath + ".hierarchyItems", json["hierarchyItems"], (String jsonPath, Object json) => new TypeHierarchyItem.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        hierarchyItems = <TypeHierarchyItem>[];
-      }
-      return new SearchGetTypeHierarchyResult(hierarchyItems: hierarchyItems);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.getTypeHierarchy result");
-    }
-  }
-
-  factory SearchGetTypeHierarchyResult.fromResponse(Response response) {
-    return new SearchGetTypeHierarchyResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    if (hierarchyItems.isNotEmpty) {
-      result["hierarchyItems"] = hierarchyItems.map((TypeHierarchyItem value) => value.toJson()).toList();
-    }
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchGetTypeHierarchyResult) {
-      return _listEqual(hierarchyItems, other.hierarchyItems, (TypeHierarchyItem a, TypeHierarchyItem b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, hierarchyItems.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * search.results params
- *
- * {
- *   "id": SearchId
- *   "results": List<SearchResult>
- *   "isLast": bool
- * }
- */
-class SearchResultsParams implements HasToJson {
-  /**
-   * The id associated with the search.
-   */
-  String id;
-
-  /**
-   * The search results being reported.
-   */
-  List<SearchResult> results;
-
-  /**
-   * True if this is that last set of results that will be returned for the
-   * indicated search.
-   */
-  bool isLast;
-
-  SearchResultsParams(this.id, this.results, this.isLast);
-
-  factory SearchResultsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      List<SearchResult> results;
-      if (json.containsKey("results")) {
-        results = jsonDecoder._decodeList(jsonPath + ".results", json["results"], (String jsonPath, Object json) => new SearchResult.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "results");
-      }
-      bool isLast;
-      if (json.containsKey("isLast")) {
-        isLast = jsonDecoder._decodeBool(jsonPath + ".isLast", json["isLast"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isLast");
-      }
-      return new SearchResultsParams(id, results, isLast);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.results params");
-    }
-  }
-
-  factory SearchResultsParams.fromNotification(Notification notification) {
-    return new SearchResultsParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    result["results"] = results.map((SearchResult value) => value.toJson()).toList();
-    result["isLast"] = isLast;
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("search.results", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchResultsParams) {
-      return id == other.id &&
-          _listEqual(results, other.results, (SearchResult a, SearchResult b) => a == b) &&
-          isLast == other.isLast;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, results.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, isLast.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getAssists params
- *
- * {
- *   "file": FilePath
- *   "offset": int
- *   "length": int
- * }
- */
-class EditGetAssistsParams implements HasToJson {
-  /**
-   * The file containing the code for which assists are being requested.
-   */
-  String file;
-
-  /**
-   * The offset of the code for which assists are being requested.
-   */
-  int offset;
-
-  /**
-   * The length of the code for which assists are being requested.
-   */
-  int length;
-
-  EditGetAssistsParams(this.file, this.offset, this.length);
-
-  factory EditGetAssistsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      return new EditGetAssistsParams(file, offset, length);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists params");
-    }
-  }
-
-  factory EditGetAssistsParams.fromRequest(Request request) {
-    return new EditGetAssistsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    result["length"] = length;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "edit.getAssists", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetAssistsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getAssists result
- *
- * {
- *   "assists": List<SourceChange>
- * }
- */
-class EditGetAssistsResult implements HasToJson {
-  /**
-   * The assists that are available at the given location.
-   */
-  List<SourceChange> assists;
-
-  EditGetAssistsResult(this.assists);
-
-  factory EditGetAssistsResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<SourceChange> assists;
-      if (json.containsKey("assists")) {
-        assists = jsonDecoder._decodeList(jsonPath + ".assists", json["assists"], (String jsonPath, Object json) => new SourceChange.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "assists");
-      }
-      return new EditGetAssistsResult(assists);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists result");
-    }
-  }
-
-  factory EditGetAssistsResult.fromResponse(Response response) {
-    return new EditGetAssistsResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["assists"] = assists.map((SourceChange value) => value.toJson()).toList();
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetAssistsResult) {
-      return _listEqual(assists, other.assists, (SourceChange a, SourceChange b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, assists.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getAvailableRefactorings params
- *
- * {
- *   "file": FilePath
- *   "offset": int
- *   "length": int
- * }
- */
-class EditGetAvailableRefactoringsParams implements HasToJson {
-  /**
-   * The file containing the code on which the refactoring would be based.
-   */
-  String file;
-
-  /**
-   * The offset of the code on which the refactoring would be based.
-   */
-  int offset;
-
-  /**
-   * The length of the code on which the refactoring would be based.
-   */
-  int length;
-
-  EditGetAvailableRefactoringsParams(this.file, this.offset, this.length);
-
-  factory EditGetAvailableRefactoringsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      return new EditGetAvailableRefactoringsParams(file, offset, length);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAvailableRefactorings params");
-    }
-  }
-
-  factory EditGetAvailableRefactoringsParams.fromRequest(Request request) {
-    return new EditGetAvailableRefactoringsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    result["length"] = length;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "edit.getAvailableRefactorings", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetAvailableRefactoringsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getAvailableRefactorings result
- *
- * {
- *   "kinds": List<RefactoringKind>
- * }
- */
-class EditGetAvailableRefactoringsResult implements HasToJson {
-  /**
-   * The kinds of refactorings that are valid for the given selection.
-   */
-  List<RefactoringKind> kinds;
-
-  EditGetAvailableRefactoringsResult(this.kinds);
-
-  factory EditGetAvailableRefactoringsResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<RefactoringKind> kinds;
-      if (json.containsKey("kinds")) {
-        kinds = jsonDecoder._decodeList(jsonPath + ".kinds", json["kinds"], (String jsonPath, Object json) => new RefactoringKind.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kinds");
-      }
-      return new EditGetAvailableRefactoringsResult(kinds);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAvailableRefactorings result");
-    }
-  }
-
-  factory EditGetAvailableRefactoringsResult.fromResponse(Response response) {
-    return new EditGetAvailableRefactoringsResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["kinds"] = kinds.map((RefactoringKind value) => value.toJson()).toList();
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetAvailableRefactoringsResult) {
-      return _listEqual(kinds, other.kinds, (RefactoringKind a, RefactoringKind b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, kinds.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getFixes params
- *
- * {
- *   "file": FilePath
- *   "offset": int
- * }
- */
-class EditGetFixesParams implements HasToJson {
-  /**
-   * The file containing the errors for which fixes are being requested.
-   */
-  String file;
-
-  /**
-   * The offset used to select the errors for which fixes will be returned.
-   */
-  int offset;
-
-  EditGetFixesParams(this.file, this.offset);
-
-  factory EditGetFixesParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      return new EditGetFixesParams(file, offset);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes params");
-    }
-  }
-
-  factory EditGetFixesParams.fromRequest(Request request) {
-    return new EditGetFixesParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "edit.getFixes", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetFixesParams) {
-      return file == other.file &&
-          offset == other.offset;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getFixes result
- *
- * {
- *   "fixes": List<AnalysisErrorFixes>
- * }
- */
-class EditGetFixesResult implements HasToJson {
-  /**
-   * The fixes that are available for the errors at the given offset.
-   */
-  List<AnalysisErrorFixes> fixes;
-
-  EditGetFixesResult(this.fixes);
-
-  factory EditGetFixesResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<AnalysisErrorFixes> fixes;
-      if (json.containsKey("fixes")) {
-        fixes = jsonDecoder._decodeList(jsonPath + ".fixes", json["fixes"], (String jsonPath, Object json) => new AnalysisErrorFixes.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "fixes");
-      }
-      return new EditGetFixesResult(fixes);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes result");
-    }
-  }
-
-  factory EditGetFixesResult.fromResponse(Response response) {
-    return new EditGetFixesResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["fixes"] = fixes.map((AnalysisErrorFixes value) => value.toJson()).toList();
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetFixesResult) {
-      return _listEqual(fixes, other.fixes, (AnalysisErrorFixes a, AnalysisErrorFixes b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, fixes.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getRefactoring params
- *
- * {
- *   "kind": RefactoringKind
- *   "file": FilePath
- *   "offset": int
- *   "length": int
- *   "validateOnly": bool
- *   "options": optional RefactoringOptions
- * }
- */
-class EditGetRefactoringParams implements HasToJson {
-  /**
-   * The kind of refactoring to be performed.
-   */
-  RefactoringKind kind;
-
-  /**
-   * The file containing the code involved in the refactoring.
-   */
-  String file;
-
-  /**
-   * The offset of the region involved in the refactoring.
-   */
-  int offset;
-
-  /**
-   * The length of the region involved in the refactoring.
-   */
-  int length;
-
-  /**
-   * True if the client is only requesting that the values of the options be
-   * validated and no change be generated.
-   */
-  bool validateOnly;
-
-  /**
-   * Data used to provide values provided by the user. The structure of the
-   * data is dependent on the kind of refactoring being performed. The data
-   * that is expected is documented in the section titled Refactorings, labeled
-   * as “Options”. This field can be omitted if the refactoring does not
-   * require any options or if the values of those options are not known.
-   */
-  RefactoringOptions options;
-
-  EditGetRefactoringParams(this.kind, this.file, this.offset, this.length, this.validateOnly, {this.options});
-
-  factory EditGetRefactoringParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      RefactoringKind kind;
-      if (json.containsKey("kind")) {
-        kind = new RefactoringKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      bool validateOnly;
-      if (json.containsKey("validateOnly")) {
-        validateOnly = jsonDecoder._decodeBool(jsonPath + ".validateOnly", json["validateOnly"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "validateOnly");
-      }
-      RefactoringOptions options;
-      if (json.containsKey("options")) {
-        options = new RefactoringOptions.fromJson(jsonDecoder, jsonPath + ".options", json["options"], kind);
-      }
-      return new EditGetRefactoringParams(kind, file, offset, length, validateOnly, options: options);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring params");
-    }
-  }
-
-  factory EditGetRefactoringParams.fromRequest(Request request) {
-    var params = new EditGetRefactoringParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-    REQUEST_ID_REFACTORING_KINDS[request.id] = params.kind;
-    return params;
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["kind"] = kind.toJson();
-    result["file"] = file;
-    result["offset"] = offset;
-    result["length"] = length;
-    result["validateOnly"] = validateOnly;
-    if (options != null) {
-      result["options"] = options.toJson();
-    }
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "edit.getRefactoring", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetRefactoringParams) {
-      return kind == other.kind &&
-          file == other.file &&
-          offset == other.offset &&
-          length == other.length &&
-          validateOnly == other.validateOnly &&
-          options == other.options;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, validateOnly.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, options.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * edit.getRefactoring result
- *
- * {
- *   "initialProblems": List<RefactoringProblem>
- *   "optionsProblems": List<RefactoringProblem>
- *   "finalProblems": List<RefactoringProblem>
- *   "feedback": optional RefactoringFeedback
- *   "change": optional SourceChange
- *   "potentialEdits": optional List<String>
- * }
- */
-class EditGetRefactoringResult implements HasToJson {
-  /**
-   * The initial status of the refactoring, i.e. problems related to the
-   * context in which the refactoring is requested. The array will be empty if
-   * there are no known problems.
-   */
-  List<RefactoringProblem> initialProblems;
-
-  /**
-   * The options validation status, i.e. problems in the given options, such as
-   * light-weight validation of a new name, flags compatibility, etc. The array
-   * will be empty if there are no known problems.
-   */
-  List<RefactoringProblem> optionsProblems;
-
-  /**
-   * 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> finalProblems;
-
-  /**
-   * 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 feedback;
-
-  /**
-   * The changes that are to be applied to affect the refactoring. This field
-   * will be omitted if there are problems that prevent a set of changes from
-   * being computed, such as having no options specified for a refactoring that
-   * requires them, or if only validation was requested.
-   */
-  SourceChange change;
-
-  /**
-   * The ids of source edits that are not known to be valid. An edit is not
-   * known to be valid if there was insufficient type information for the
-   * server to be able to determine whether or not the code needs to be
-   * modified, such as when a member is being renamed and there is a reference
-   * to a member from an unknown type. This field will be omitted if the change
-   * field is omitted or if there are no potential edits for the refactoring.
-   */
-  List<String> potentialEdits;
-
-  EditGetRefactoringResult(this.initialProblems, this.optionsProblems, this.finalProblems, {this.feedback, this.change, this.potentialEdits}) {
-    if (potentialEdits == null) {
-      potentialEdits = <String>[];
-    }
-  }
-
-  factory EditGetRefactoringResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<RefactoringProblem> initialProblems;
-      if (json.containsKey("initialProblems")) {
-        initialProblems = jsonDecoder._decodeList(jsonPath + ".initialProblems", json["initialProblems"], (String jsonPath, Object json) => new RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "initialProblems");
-      }
-      List<RefactoringProblem> optionsProblems;
-      if (json.containsKey("optionsProblems")) {
-        optionsProblems = jsonDecoder._decodeList(jsonPath + ".optionsProblems", json["optionsProblems"], (String jsonPath, Object json) => new RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "optionsProblems");
-      }
-      List<RefactoringProblem> finalProblems;
-      if (json.containsKey("finalProblems")) {
-        finalProblems = jsonDecoder._decodeList(jsonPath + ".finalProblems", json["finalProblems"], (String jsonPath, Object json) => new RefactoringProblem.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "finalProblems");
-      }
-      RefactoringFeedback feedback;
-      if (json.containsKey("feedback")) {
-        feedback = new RefactoringFeedback.fromJson(jsonDecoder, jsonPath + ".feedback", json["feedback"], json);
-      }
-      SourceChange change;
-      if (json.containsKey("change")) {
-        change = new SourceChange.fromJson(jsonDecoder, jsonPath + ".change", json["change"]);
-      }
-      List<String> potentialEdits;
-      if (json.containsKey("potentialEdits")) {
-        potentialEdits = jsonDecoder._decodeList(jsonPath + ".potentialEdits", json["potentialEdits"], jsonDecoder._decodeString);
-      } else {
-        potentialEdits = <String>[];
-      }
-      return new EditGetRefactoringResult(initialProblems, optionsProblems, finalProblems, feedback: feedback, change: change, potentialEdits: potentialEdits);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring result");
-    }
-  }
-
-  factory EditGetRefactoringResult.fromResponse(Response response) {
-    return new EditGetRefactoringResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["initialProblems"] = initialProblems.map((RefactoringProblem value) => value.toJson()).toList();
-    result["optionsProblems"] = optionsProblems.map((RefactoringProblem value) => value.toJson()).toList();
-    result["finalProblems"] = finalProblems.map((RefactoringProblem value) => value.toJson()).toList();
-    if (feedback != null) {
-      result["feedback"] = feedback.toJson();
-    }
-    if (change != null) {
-      result["change"] = change.toJson();
-    }
-    if (potentialEdits.isNotEmpty) {
-      result["potentialEdits"] = potentialEdits;
-    }
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is EditGetRefactoringResult) {
-      return _listEqual(initialProblems, other.initialProblems, (RefactoringProblem a, RefactoringProblem b) => a == b) &&
-          _listEqual(optionsProblems, other.optionsProblems, (RefactoringProblem a, RefactoringProblem b) => a == b) &&
-          _listEqual(finalProblems, other.finalProblems, (RefactoringProblem a, RefactoringProblem b) => a == b) &&
-          feedback == other.feedback &&
-          change == other.change &&
-          _listEqual(potentialEdits, other.potentialEdits, (String a, String b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, initialProblems.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, optionsProblems.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, finalProblems.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, feedback.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, change.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, potentialEdits.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * execution.createContext params
- *
- * {
- *   "contextRoot": FilePath
- * }
- */
-class ExecutionCreateContextParams implements HasToJson {
-  /**
-   * The path of the Dart or HTML file that will be launched.
-   */
-  String contextRoot;
-
-  ExecutionCreateContextParams(this.contextRoot);
-
-  factory ExecutionCreateContextParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String contextRoot;
-      if (json.containsKey("contextRoot")) {
-        contextRoot = jsonDecoder._decodeString(jsonPath + ".contextRoot", json["contextRoot"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "contextRoot");
-      }
-      return new ExecutionCreateContextParams(contextRoot);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.createContext params");
-    }
-  }
-
-  factory ExecutionCreateContextParams.fromRequest(Request request) {
-    return new ExecutionCreateContextParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["contextRoot"] = contextRoot;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "execution.createContext", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionCreateContextParams) {
-      return contextRoot == other.contextRoot;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, contextRoot.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * execution.createContext result
- *
- * {
- *   "id": ExecutionContextId
- * }
- */
-class ExecutionCreateContextResult implements HasToJson {
-  /**
-   * The identifier used to refer to the execution context that was created.
-   */
-  String id;
-
-  ExecutionCreateContextResult(this.id);
-
-  factory ExecutionCreateContextResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      return new ExecutionCreateContextResult(id);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.createContext result");
-    }
-  }
-
-  factory ExecutionCreateContextResult.fromResponse(Response response) {
-    return new ExecutionCreateContextResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionCreateContextResult) {
-      return id == other.id;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * execution.deleteContext params
- *
- * {
- *   "id": ExecutionContextId
- * }
- */
-class ExecutionDeleteContextParams implements HasToJson {
-  /**
-   * The identifier of the execution context that is to be deleted.
-   */
-  String id;
-
-  ExecutionDeleteContextParams(this.id);
-
-  factory ExecutionDeleteContextParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      return new ExecutionDeleteContextParams(id);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.deleteContext params");
-    }
-  }
-
-  factory ExecutionDeleteContextParams.fromRequest(Request request) {
-    return new ExecutionDeleteContextParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "execution.deleteContext", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionDeleteContextParams) {
-      return id == other.id;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * execution.deleteContext result
- */
-class ExecutionDeleteContextResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionDeleteContextResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 479954425;
-  }
-}
-
-/**
- * execution.mapUri params
- *
- * {
- *   "id": ExecutionContextId
- *   "file": optional FilePath
- *   "uri": optional String
- * }
- */
-class ExecutionMapUriParams implements HasToJson {
-  /**
-   * The identifier of the execution context in which the URI is to be mapped.
-   */
-  String id;
-
-  /**
-   * The path of the file to be mapped into a URI.
-   */
-  String file;
-
-  /**
-   * The URI to be mapped into a file path.
-   */
-  String uri;
-
-  ExecutionMapUriParams(this.id, {this.file, this.uri});
-
-  factory ExecutionMapUriParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "id");
-      }
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      }
-      String uri;
-      if (json.containsKey("uri")) {
-        uri = jsonDecoder._decodeString(jsonPath + ".uri", json["uri"]);
-      }
-      return new ExecutionMapUriParams(id, file: file, uri: uri);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri params");
-    }
-  }
-
-  factory ExecutionMapUriParams.fromRequest(Request request) {
-    return new ExecutionMapUriParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["id"] = id;
-    if (file != null) {
-      result["file"] = file;
-    }
-    if (uri != null) {
-      result["uri"] = uri;
-    }
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "execution.mapUri", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionMapUriParams) {
-      return id == other.id &&
-          file == other.file &&
-          uri == other.uri;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, uri.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * execution.mapUri result
- *
- * {
- *   "file": optional FilePath
- *   "uri": optional String
- * }
- */
-class ExecutionMapUriResult implements HasToJson {
-  /**
-   * The file to which the URI was mapped. This field is omitted if the uri
-   * field was not given in the request.
-   */
-  String file;
-
-  /**
-   * The URI to which the file path was mapped. This field is omitted if the
-   * file field was not given in the request.
-   */
-  String uri;
-
-  ExecutionMapUriResult({this.file, this.uri});
-
-  factory ExecutionMapUriResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      }
-      String uri;
-      if (json.containsKey("uri")) {
-        uri = jsonDecoder._decodeString(jsonPath + ".uri", json["uri"]);
-      }
-      return new ExecutionMapUriResult(file: file, uri: uri);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri result");
-    }
-  }
-
-  factory ExecutionMapUriResult.fromResponse(Response response) {
-    return new ExecutionMapUriResult.fromJson(
-        new ResponseDecoder(response), "result", response._result);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    if (file != null) {
-      result["file"] = file;
-    }
-    if (uri != null) {
-      result["uri"] = uri;
-    }
-    return result;
-  }
-
-  Response toResponse(String id) {
-    return new Response(id, result: toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionMapUriResult) {
-      return file == other.file &&
-          uri == other.uri;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, uri.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * execution.setSubscriptions params
- *
- * {
- *   "subscriptions": List<ExecutionService>
- * }
- */
-class ExecutionSetSubscriptionsParams implements HasToJson {
-  /**
-   * A list of the services being subscribed to.
-   */
-  List<ExecutionService> subscriptions;
-
-  ExecutionSetSubscriptionsParams(this.subscriptions);
-
-  factory ExecutionSetSubscriptionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<ExecutionService> subscriptions;
-      if (json.containsKey("subscriptions")) {
-        subscriptions = jsonDecoder._decodeList(jsonPath + ".subscriptions", json["subscriptions"], (String jsonPath, Object json) => new ExecutionService.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "subscriptions");
-      }
-      return new ExecutionSetSubscriptionsParams(subscriptions);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.setSubscriptions params");
-    }
-  }
-
-  factory ExecutionSetSubscriptionsParams.fromRequest(Request request) {
-    return new ExecutionSetSubscriptionsParams.fromJson(
-        new RequestDecoder(request), "params", request._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["subscriptions"] = subscriptions.map((ExecutionService value) => value.toJson()).toList();
-    return result;
-  }
-
-  Request toRequest(String id) {
-    return new Request(id, "execution.setSubscriptions", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionSetSubscriptionsParams) {
-      return _listEqual(subscriptions, other.subscriptions, (ExecutionService a, ExecutionService b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, subscriptions.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * execution.setSubscriptions result
- */
-class ExecutionSetSubscriptionsResult {
-  Response toResponse(String id) {
-    return new Response(id, result: null);
-  }
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionSetSubscriptionsResult) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 287678780;
-  }
-}
-
-/**
- * execution.launchData params
- *
- * {
- *   "executables": List<ExecutableFile>
- *   "dartToHtml": Map<FilePath, List<FilePath>>
- *   "htmlToDart": Map<FilePath, List<FilePath>>
- * }
- */
-class ExecutionLaunchDataParams implements HasToJson {
-  /**
-   * A list of the files that are executable. This list replaces any previous
-   * list provided.
-   */
-  List<ExecutableFile> executables;
-
-  /**
-   * A mapping from the paths of Dart files that are referenced by HTML files
-   * to a list of the HTML files that reference the Dart files.
-   */
-  Map<String, List<String>> dartToHtml;
-
-  /**
-   * A mapping from the paths of HTML files that reference Dart files to a list
-   * of the Dart files they reference.
-   */
-  Map<String, List<String>> htmlToDart;
-
-  ExecutionLaunchDataParams(this.executables, this.dartToHtml, this.htmlToDart);
-
-  factory ExecutionLaunchDataParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<ExecutableFile> executables;
-      if (json.containsKey("executables")) {
-        executables = jsonDecoder._decodeList(jsonPath + ".executables", json["executables"], (String jsonPath, Object json) => new ExecutableFile.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "executables");
-      }
-      Map<String, List<String>> dartToHtml;
-      if (json.containsKey("dartToHtml")) {
-        dartToHtml = jsonDecoder._decodeMap(jsonPath + ".dartToHtml", json["dartToHtml"], valueDecoder: (String jsonPath, Object json) => jsonDecoder._decodeList(jsonPath, json, jsonDecoder._decodeString));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "dartToHtml");
-      }
-      Map<String, List<String>> htmlToDart;
-      if (json.containsKey("htmlToDart")) {
-        htmlToDart = jsonDecoder._decodeMap(jsonPath + ".htmlToDart", json["htmlToDart"], valueDecoder: (String jsonPath, Object json) => jsonDecoder._decodeList(jsonPath, json, jsonDecoder._decodeString));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "htmlToDart");
-      }
-      return new ExecutionLaunchDataParams(executables, dartToHtml, htmlToDart);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.launchData params");
-    }
-  }
-
-  factory ExecutionLaunchDataParams.fromNotification(Notification notification) {
-    return new ExecutionLaunchDataParams.fromJson(
-        new ResponseDecoder(null), "params", notification._params);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["executables"] = executables.map((ExecutableFile value) => value.toJson()).toList();
-    result["dartToHtml"] = dartToHtml;
-    result["htmlToDart"] = htmlToDart;
-    return result;
-  }
-
-  Notification toNotification() {
-    return new Notification("execution.launchData", toJson());
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutionLaunchDataParams) {
-      return _listEqual(executables, other.executables, (ExecutableFile a, ExecutableFile b) => a == b) &&
-          _mapEqual(dartToHtml, other.dartToHtml, (List<String> a, List<String> b) => _listEqual(a, b, (String a, String b) => a == b)) &&
-          _mapEqual(htmlToDart, other.htmlToDart, (List<String> a, List<String> b) => _listEqual(a, b, (String a, String b) => a == b));
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, executables.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, dartToHtml.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, htmlToDart.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * AddContentOverlay
- *
- * {
- *   "type": "add"
- *   "content": String
- * }
- */
-class AddContentOverlay implements HasToJson {
-  /**
-   * The new content of the file.
-   */
-  String content;
-
-  AddContentOverlay(this.content);
-
-  factory AddContentOverlay.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      if (json["type"] != "add") {
-        throw jsonDecoder.mismatch(jsonPath, "equal " + "add");
-      }
-      String content;
-      if (json.containsKey("content")) {
-        content = jsonDecoder._decodeString(jsonPath + ".content", json["content"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "content");
-      }
-      return new AddContentOverlay(content);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "AddContentOverlay");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["type"] = "add";
-    result["content"] = content;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AddContentOverlay) {
-      return content == other.content;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, 704418402);
-    hash = _JenkinsSmiHash.combine(hash, content.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * AnalysisError
- *
- * {
- *   "severity": AnalysisErrorSeverity
- *   "type": AnalysisErrorType
- *   "location": Location
- *   "message": String
- *   "correction": optional String
- * }
- */
-class AnalysisError implements HasToJson {
-
-  /**
-   * The severity of the error.
-   */
-  AnalysisErrorSeverity severity;
-
-  /**
-   * The type of the error.
-   */
-  AnalysisErrorType type;
-
-  /**
-   * The location associated with the error.
-   */
-  Location location;
-
-  /**
-   * The message to be displayed for this error. The message should indicate
-   * what is wrong with the code and why it is wrong.
-   */
-  String message;
-
-  /**
-   * The correction message to be displayed for this error. The correction
-   * message should indicate how the user can fix the error. The field is
-   * omitted if there is no correction message associated with the error code.
-   */
-  String correction;
-
-  AnalysisError(this.severity, this.type, this.location, this.message, {this.correction});
-
-  factory AnalysisError.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      AnalysisErrorSeverity severity;
-      if (json.containsKey("severity")) {
-        severity = new AnalysisErrorSeverity.fromJson(jsonDecoder, jsonPath + ".severity", json["severity"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "severity");
-      }
-      AnalysisErrorType type;
-      if (json.containsKey("type")) {
-        type = new AnalysisErrorType.fromJson(jsonDecoder, jsonPath + ".type", json["type"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "type");
-      }
-      Location location;
-      if (json.containsKey("location")) {
-        location = new Location.fromJson(jsonDecoder, jsonPath + ".location", json["location"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "location");
-      }
-      String message;
-      if (json.containsKey("message")) {
-        message = jsonDecoder._decodeString(jsonPath + ".message", json["message"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "message");
-      }
-      String correction;
-      if (json.containsKey("correction")) {
-        correction = jsonDecoder._decodeString(jsonPath + ".correction", json["correction"]);
-      }
-      return new AnalysisError(severity, type, location, message, correction: correction);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisError");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["severity"] = severity.toJson();
-    result["type"] = type.toJson();
-    result["location"] = location.toJson();
-    result["message"] = message;
-    if (correction != null) {
-      result["correction"] = correction;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisError) {
-      return severity == other.severity &&
-          type == other.type &&
-          location == other.location &&
-          message == other.message &&
-          correction == other.correction;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, severity.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, type.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, location.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, message.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, correction.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * AnalysisErrorFixes
- *
- * {
- *   "error": AnalysisError
- *   "fixes": List<SourceChange>
- * }
- */
-class AnalysisErrorFixes implements HasToJson {
-  /**
-   * The error with which the fixes are associated.
-   */
-  AnalysisError error;
-
-  /**
-   * The fixes associated with the error.
-   */
-  List<SourceChange> fixes;
-
-  AnalysisErrorFixes(this.error, {this.fixes}) {
-    if (fixes == null) {
-      fixes = <SourceChange>[];
-    }
-  }
-
-  factory AnalysisErrorFixes.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      AnalysisError error;
-      if (json.containsKey("error")) {
-        error = new AnalysisError.fromJson(jsonDecoder, jsonPath + ".error", json["error"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "error");
-      }
-      List<SourceChange> fixes;
-      if (json.containsKey("fixes")) {
-        fixes = jsonDecoder._decodeList(jsonPath + ".fixes", json["fixes"], (String jsonPath, Object json) => new SourceChange.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "fixes");
-      }
-      return new AnalysisErrorFixes(error, fixes: fixes);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorFixes");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["error"] = error.toJson();
-    result["fixes"] = fixes.map((SourceChange value) => value.toJson()).toList();
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisErrorFixes) {
-      return error == other.error &&
-          _listEqual(fixes, other.fixes, (SourceChange a, SourceChange b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, error.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, fixes.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * AnalysisErrorSeverity
- *
- * enum {
- *   INFO
- *   WARNING
- *   ERROR
- * }
- */
-class AnalysisErrorSeverity {
-  static const INFO = const AnalysisErrorSeverity._("INFO");
-
-  static const WARNING = const AnalysisErrorSeverity._("WARNING");
-
-  static const ERROR = const AnalysisErrorSeverity._("ERROR");
-
-  final String name;
-
-  const AnalysisErrorSeverity._(this.name);
-
-  factory AnalysisErrorSeverity(String name) {
-    switch (name) {
-      case "INFO":
-        return INFO;
-      case "WARNING":
-        return WARNING;
-      case "ERROR":
-        return ERROR;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory AnalysisErrorSeverity.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new AnalysisErrorSeverity(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorSeverity");
-  }
-
-  @override
-  String toString() => "AnalysisErrorSeverity.$name";
-
-  String toJson() => name;
-}
-
-/**
- * AnalysisErrorType
- *
- * enum {
- *   ANGULAR
- *   COMPILE_TIME_ERROR
- *   HINT
- *   POLYMER
- *   STATIC_TYPE_WARNING
- *   STATIC_WARNING
- *   SYNTACTIC_ERROR
- *   TODO
- * }
- */
-class AnalysisErrorType {
-  static const ANGULAR = const AnalysisErrorType._("ANGULAR");
-
-  static const COMPILE_TIME_ERROR = const AnalysisErrorType._("COMPILE_TIME_ERROR");
-
-  static const HINT = const AnalysisErrorType._("HINT");
-
-  static const POLYMER = const AnalysisErrorType._("POLYMER");
-
-  static const STATIC_TYPE_WARNING = const AnalysisErrorType._("STATIC_TYPE_WARNING");
-
-  static const STATIC_WARNING = const AnalysisErrorType._("STATIC_WARNING");
-
-  static const SYNTACTIC_ERROR = const AnalysisErrorType._("SYNTACTIC_ERROR");
-
-  static const TODO = const AnalysisErrorType._("TODO");
-
-  final String name;
-
-  const AnalysisErrorType._(this.name);
-
-  factory AnalysisErrorType(String name) {
-    switch (name) {
-      case "ANGULAR":
-        return ANGULAR;
-      case "COMPILE_TIME_ERROR":
-        return COMPILE_TIME_ERROR;
-      case "HINT":
-        return HINT;
-      case "POLYMER":
-        return POLYMER;
-      case "STATIC_TYPE_WARNING":
-        return STATIC_TYPE_WARNING;
-      case "STATIC_WARNING":
-        return STATIC_WARNING;
-      case "SYNTACTIC_ERROR":
-        return SYNTACTIC_ERROR;
-      case "TODO":
-        return TODO;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory AnalysisErrorType.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new AnalysisErrorType(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorType");
-  }
-
-  @override
-  String toString() => "AnalysisErrorType.$name";
-
-  String toJson() => name;
-}
-
-/**
- * AnalysisOptions
- *
- * {
- *   "enableAsync": optional bool
- *   "enableDeferredLoading": optional bool
- *   "enableEnums": optional bool
- *   "generateDart2jsHints": optional bool
- *   "generateHints": optional bool
- * }
- */
-class AnalysisOptions implements HasToJson {
-  /**
-   * True if the client wants to enable support for the proposed async feature.
-   */
-  bool enableAsync;
-
-  /**
-   * True if the client wants to enable support for the proposed deferred
-   * loading feature.
-   */
-  bool enableDeferredLoading;
-
-  /**
-   * True if the client wants to enable support for the proposed enum feature.
-   */
-  bool enableEnums;
-
-  /**
-   * True if hints that are specific to dart2js should be generated. This
-   * option is ignored if generateHints is false.
-   */
-  bool generateDart2jsHints;
-
-  /**
-   * True is hints should be generated as part of generating errors and
-   * warnings.
-   */
-  bool generateHints;
-
-  AnalysisOptions({this.enableAsync, this.enableDeferredLoading, this.enableEnums, this.generateDart2jsHints, this.generateHints});
-
-  factory AnalysisOptions.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      bool enableAsync;
-      if (json.containsKey("enableAsync")) {
-        enableAsync = jsonDecoder._decodeBool(jsonPath + ".enableAsync", json["enableAsync"]);
-      }
-      bool enableDeferredLoading;
-      if (json.containsKey("enableDeferredLoading")) {
-        enableDeferredLoading = jsonDecoder._decodeBool(jsonPath + ".enableDeferredLoading", json["enableDeferredLoading"]);
-      }
-      bool enableEnums;
-      if (json.containsKey("enableEnums")) {
-        enableEnums = jsonDecoder._decodeBool(jsonPath + ".enableEnums", json["enableEnums"]);
-      }
-      bool generateDart2jsHints;
-      if (json.containsKey("generateDart2jsHints")) {
-        generateDart2jsHints = jsonDecoder._decodeBool(jsonPath + ".generateDart2jsHints", json["generateDart2jsHints"]);
-      }
-      bool generateHints;
-      if (json.containsKey("generateHints")) {
-        generateHints = jsonDecoder._decodeBool(jsonPath + ".generateHints", json["generateHints"]);
-      }
-      return new AnalysisOptions(enableAsync: enableAsync, enableDeferredLoading: enableDeferredLoading, enableEnums: enableEnums, generateDart2jsHints: generateDart2jsHints, generateHints: generateHints);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisOptions");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    if (enableAsync != null) {
-      result["enableAsync"] = enableAsync;
-    }
-    if (enableDeferredLoading != null) {
-      result["enableDeferredLoading"] = enableDeferredLoading;
-    }
-    if (enableEnums != null) {
-      result["enableEnums"] = enableEnums;
-    }
-    if (generateDart2jsHints != null) {
-      result["generateDart2jsHints"] = generateDart2jsHints;
-    }
-    if (generateHints != null) {
-      result["generateHints"] = generateHints;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisOptions) {
-      return enableAsync == other.enableAsync &&
-          enableDeferredLoading == other.enableDeferredLoading &&
-          enableEnums == other.enableEnums &&
-          generateDart2jsHints == other.generateDart2jsHints &&
-          generateHints == other.generateHints;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, enableAsync.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, enableDeferredLoading.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, enableEnums.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, generateDart2jsHints.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, generateHints.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * AnalysisService
- *
- * enum {
- *   FOLDING
- *   HIGHLIGHTS
- *   NAVIGATION
- *   OCCURRENCES
- *   OUTLINE
- *   OVERRIDES
- * }
- */
-class AnalysisService {
-  static const FOLDING = const AnalysisService._("FOLDING");
-
-  static const HIGHLIGHTS = const AnalysisService._("HIGHLIGHTS");
-
-  static const NAVIGATION = const AnalysisService._("NAVIGATION");
-
-  static const OCCURRENCES = const AnalysisService._("OCCURRENCES");
-
-  static const OUTLINE = const AnalysisService._("OUTLINE");
-
-  static const OVERRIDES = const AnalysisService._("OVERRIDES");
-
-  final String name;
-
-  const AnalysisService._(this.name);
-
-  factory AnalysisService(String name) {
-    switch (name) {
-      case "FOLDING":
-        return FOLDING;
-      case "HIGHLIGHTS":
-        return HIGHLIGHTS;
-      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");
-  }
-
-  @override
-  String toString() => "AnalysisService.$name";
-
-  String toJson() => name;
-}
-
-/**
- * AnalysisStatus
- *
- * {
- *   "isAnalyzing": bool
- *   "analysisTarget": optional String
- * }
- */
-class AnalysisStatus implements HasToJson {
-  /**
-   * True if analysis is currently being performed.
-   */
-  bool isAnalyzing;
-
-  /**
-   * The name of the current target of analysis. This field is omitted if
-   * analyzing is false.
-   */
-  String analysisTarget;
-
-  AnalysisStatus(this.isAnalyzing, {this.analysisTarget});
-
-  factory AnalysisStatus.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      bool isAnalyzing;
-      if (json.containsKey("isAnalyzing")) {
-        isAnalyzing = jsonDecoder._decodeBool(jsonPath + ".isAnalyzing", json["isAnalyzing"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isAnalyzing");
-      }
-      String analysisTarget;
-      if (json.containsKey("analysisTarget")) {
-        analysisTarget = jsonDecoder._decodeString(jsonPath + ".analysisTarget", json["analysisTarget"]);
-      }
-      return new AnalysisStatus(isAnalyzing, analysisTarget: analysisTarget);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisStatus");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["isAnalyzing"] = isAnalyzing;
-    if (analysisTarget != null) {
-      result["analysisTarget"] = analysisTarget;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is AnalysisStatus) {
-      return isAnalyzing == other.isAnalyzing &&
-          analysisTarget == other.analysisTarget;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, isAnalyzing.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, analysisTarget.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * ChangeContentOverlay
- *
- * {
- *   "type": "change"
- *   "edits": List<SourceEdit>
- * }
- */
-class ChangeContentOverlay implements HasToJson {
-  /**
-   * The edits to be applied to the file.
-   */
-  List<SourceEdit> edits;
-
-  ChangeContentOverlay(this.edits);
-
-  factory ChangeContentOverlay.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      if (json["type"] != "change") {
-        throw jsonDecoder.mismatch(jsonPath, "equal " + "change");
-      }
-      List<SourceEdit> edits;
-      if (json.containsKey("edits")) {
-        edits = jsonDecoder._decodeList(jsonPath + ".edits", json["edits"], (String jsonPath, Object json) => new SourceEdit.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "edits");
-      }
-      return new ChangeContentOverlay(edits);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "ChangeContentOverlay");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["type"] = "change";
-    result["edits"] = edits.map((SourceEdit value) => value.toJson()).toList();
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ChangeContentOverlay) {
-      return _listEqual(edits, other.edits, (SourceEdit a, SourceEdit b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, 873118866);
-    hash = _JenkinsSmiHash.combine(hash, edits.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * CompletionRelevance
- *
- * enum {
- *   LOW
- *   DEFAULT
- *   HIGH
- * }
- */
-class CompletionRelevance {
-  static const LOW = const CompletionRelevance._("LOW");
-
-  static const DEFAULT = const CompletionRelevance._("DEFAULT");
-
-  static const HIGH = const CompletionRelevance._("HIGH");
-
-  final String name;
-
-  const CompletionRelevance._(this.name);
-
-  factory CompletionRelevance(String name) {
-    switch (name) {
-      case "LOW":
-        return LOW;
-      case "DEFAULT":
-        return DEFAULT;
-      case "HIGH":
-        return HIGH;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory CompletionRelevance.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new CompletionRelevance(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "CompletionRelevance");
-  }
-
-  @override
-  String toString() => "CompletionRelevance.$name";
-
-  String toJson() => name;
-}
-
-/**
- * CompletionSuggestion
- *
- * {
- *   "kind": CompletionSuggestionKind
- *   "relevance": CompletionRelevance
- *   "completion": String
- *   "selectionOffset": int
- *   "selectionLength": int
- *   "isDeprecated": bool
- *   "isPotential": bool
- *   "docSummary": optional String
- *   "docComplete": optional String
- *   "declaringType": optional String
- *   "element": optional Element
- *   "returnType": optional String
- *   "parameterNames": optional List<String>
- *   "parameterTypes": optional List<String>
- *   "requiredParameterCount": optional int
- *   "positionalParameterCount": optional int
- *   "parameterName": optional String
- *   "parameterType": optional String
- * }
- */
-class CompletionSuggestion implements HasToJson {
-  /**
-   * The kind of element being suggested.
-   */
-  CompletionSuggestionKind kind;
-
-  /**
-   * The relevance of this completion suggestion.
-   */
-  CompletionRelevance relevance;
-
-  /**
-   * The identifier to be inserted if the suggestion is selected. If the
-   * suggestion is for a method or function, the client might want to
-   * additionally insert a template for the parameters. The information
-   * required in order to do so is contained in other fields.
-   */
-  String completion;
-
-  /**
-   * The offset, relative to the beginning of the completion, of where the
-   * selection should be placed after insertion.
-   */
-  int selectionOffset;
-
-  /**
-   * The number of characters that should be selected after insertion.
-   */
-  int selectionLength;
-
-  /**
-   * True if the suggested element is deprecated.
-   */
-  bool isDeprecated;
-
-  /**
-   * True if the element is not known to be valid for the target. This happens
-   * if the type of the target is dynamic.
-   */
-  bool isPotential;
-
-  /**
-   * An abbreviated version of the Dartdoc associated with the element being
-   * suggested, This field is omitted if there is no Dartdoc associated with
-   * the element.
-   */
-  String docSummary;
-
-  /**
-   * The Dartdoc associated with the element being suggested, This field is
-   * omitted if there is no Dartdoc associated with the element.
-   */
-  String docComplete;
-
-  /**
-   * The class that declares the element being suggested. This field is omitted
-   * if the suggested element is not a member of a class.
-   */
-  String declaringType;
-
-  /**
-   * Information about the element reference being suggested.
-   */
-  Element element;
-
-  /**
-   * The return type of the getter, function or method being suggested. This
-   * field is omitted if the suggested element is not a getter, function or
-   * method.
-   */
-  String returnType;
-
-  /**
-   * The names of the parameters of the function or method being suggested.
-   * This field is omitted if the suggested element is not a setter, function
-   * or method.
-   */
-  List<String> parameterNames;
-
-  /**
-   * The types of the parameters of the function or method being suggested.
-   * This field is omitted if the parameterNames field is omitted.
-   */
-  List<String> parameterTypes;
-
-  /**
-   * The number of required parameters for the function or method being
-   * suggested. This field is omitted if the parameterNames field is omitted.
-   */
-  int requiredParameterCount;
-
-  /**
-   * The number of positional parameters for the function or method being
-   * suggested. This field is omitted if the parameterNames field is omitted.
-   */
-  int positionalParameterCount;
-
-  /**
-   * The name of the optional parameter being suggested. This field is omitted
-   * if the suggestion is not the addition of an optional argument within an
-   * argument list.
-   */
-  String parameterName;
-
-  /**
-   * The type of the options parameter being suggested. This field is omitted
-   * if the parameterName field is omitted.
-   */
-  String parameterType;
-
-  CompletionSuggestion(this.kind, this.relevance, this.completion, this.selectionOffset, this.selectionLength, this.isDeprecated, this.isPotential, {this.docSummary, this.docComplete, this.declaringType, this.element, this.returnType, this.parameterNames, this.parameterTypes, this.requiredParameterCount, this.positionalParameterCount, this.parameterName, this.parameterType}) {
-    if (parameterNames == null) {
-      parameterNames = <String>[];
-    }
-    if (parameterTypes == null) {
-      parameterTypes = <String>[];
-    }
-  }
-
-  factory CompletionSuggestion.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      CompletionSuggestionKind kind;
-      if (json.containsKey("kind")) {
-        kind = new CompletionSuggestionKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      CompletionRelevance relevance;
-      if (json.containsKey("relevance")) {
-        relevance = new CompletionRelevance.fromJson(jsonDecoder, jsonPath + ".relevance", json["relevance"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "relevance");
-      }
-      String completion;
-      if (json.containsKey("completion")) {
-        completion = jsonDecoder._decodeString(jsonPath + ".completion", json["completion"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "completion");
-      }
-      int selectionOffset;
-      if (json.containsKey("selectionOffset")) {
-        selectionOffset = jsonDecoder._decodeInt(jsonPath + ".selectionOffset", json["selectionOffset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "selectionOffset");
-      }
-      int selectionLength;
-      if (json.containsKey("selectionLength")) {
-        selectionLength = jsonDecoder._decodeInt(jsonPath + ".selectionLength", json["selectionLength"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "selectionLength");
-      }
-      bool isDeprecated;
-      if (json.containsKey("isDeprecated")) {
-        isDeprecated = jsonDecoder._decodeBool(jsonPath + ".isDeprecated", json["isDeprecated"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isDeprecated");
-      }
-      bool isPotential;
-      if (json.containsKey("isPotential")) {
-        isPotential = jsonDecoder._decodeBool(jsonPath + ".isPotential", json["isPotential"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isPotential");
-      }
-      String docSummary;
-      if (json.containsKey("docSummary")) {
-        docSummary = jsonDecoder._decodeString(jsonPath + ".docSummary", json["docSummary"]);
-      }
-      String docComplete;
-      if (json.containsKey("docComplete")) {
-        docComplete = jsonDecoder._decodeString(jsonPath + ".docComplete", json["docComplete"]);
-      }
-      String declaringType;
-      if (json.containsKey("declaringType")) {
-        declaringType = jsonDecoder._decodeString(jsonPath + ".declaringType", json["declaringType"]);
-      }
-      Element element;
-      if (json.containsKey("element")) {
-        element = new Element.fromJson(jsonDecoder, jsonPath + ".element", json["element"]);
-      }
-      String returnType;
-      if (json.containsKey("returnType")) {
-        returnType = jsonDecoder._decodeString(jsonPath + ".returnType", json["returnType"]);
-      }
-      List<String> parameterNames;
-      if (json.containsKey("parameterNames")) {
-        parameterNames = jsonDecoder._decodeList(jsonPath + ".parameterNames", json["parameterNames"], jsonDecoder._decodeString);
-      } else {
-        parameterNames = <String>[];
-      }
-      List<String> parameterTypes;
-      if (json.containsKey("parameterTypes")) {
-        parameterTypes = jsonDecoder._decodeList(jsonPath + ".parameterTypes", json["parameterTypes"], jsonDecoder._decodeString);
-      } else {
-        parameterTypes = <String>[];
-      }
-      int requiredParameterCount;
-      if (json.containsKey("requiredParameterCount")) {
-        requiredParameterCount = jsonDecoder._decodeInt(jsonPath + ".requiredParameterCount", json["requiredParameterCount"]);
-      }
-      int positionalParameterCount;
-      if (json.containsKey("positionalParameterCount")) {
-        positionalParameterCount = jsonDecoder._decodeInt(jsonPath + ".positionalParameterCount", json["positionalParameterCount"]);
-      }
-      String parameterName;
-      if (json.containsKey("parameterName")) {
-        parameterName = jsonDecoder._decodeString(jsonPath + ".parameterName", json["parameterName"]);
-      }
-      String parameterType;
-      if (json.containsKey("parameterType")) {
-        parameterType = jsonDecoder._decodeString(jsonPath + ".parameterType", json["parameterType"]);
-      }
-      return new CompletionSuggestion(kind, relevance, completion, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary: docSummary, docComplete: docComplete, declaringType: declaringType, element: element, returnType: returnType, parameterNames: parameterNames, parameterTypes: parameterTypes, requiredParameterCount: requiredParameterCount, positionalParameterCount: positionalParameterCount, parameterName: parameterName, parameterType: parameterType);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "CompletionSuggestion");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["kind"] = kind.toJson();
-    result["relevance"] = relevance.toJson();
-    result["completion"] = completion;
-    result["selectionOffset"] = selectionOffset;
-    result["selectionLength"] = selectionLength;
-    result["isDeprecated"] = isDeprecated;
-    result["isPotential"] = isPotential;
-    if (docSummary != null) {
-      result["docSummary"] = docSummary;
-    }
-    if (docComplete != null) {
-      result["docComplete"] = docComplete;
-    }
-    if (declaringType != null) {
-      result["declaringType"] = declaringType;
-    }
-    if (element != null) {
-      result["element"] = element.toJson();
-    }
-    if (returnType != null) {
-      result["returnType"] = returnType;
-    }
-    if (parameterNames.isNotEmpty) {
-      result["parameterNames"] = parameterNames;
-    }
-    if (parameterTypes.isNotEmpty) {
-      result["parameterTypes"] = parameterTypes;
-    }
-    if (requiredParameterCount != null) {
-      result["requiredParameterCount"] = requiredParameterCount;
-    }
-    if (positionalParameterCount != null) {
-      result["positionalParameterCount"] = positionalParameterCount;
-    }
-    if (parameterName != null) {
-      result["parameterName"] = parameterName;
-    }
-    if (parameterType != null) {
-      result["parameterType"] = parameterType;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is CompletionSuggestion) {
-      return kind == other.kind &&
-          relevance == other.relevance &&
-          completion == other.completion &&
-          selectionOffset == other.selectionOffset &&
-          selectionLength == other.selectionLength &&
-          isDeprecated == other.isDeprecated &&
-          isPotential == other.isPotential &&
-          docSummary == other.docSummary &&
-          docComplete == other.docComplete &&
-          declaringType == other.declaringType &&
-          element == other.element &&
-          returnType == other.returnType &&
-          _listEqual(parameterNames, other.parameterNames, (String a, String b) => a == b) &&
-          _listEqual(parameterTypes, other.parameterTypes, (String a, String b) => a == b) &&
-          requiredParameterCount == other.requiredParameterCount &&
-          positionalParameterCount == other.positionalParameterCount &&
-          parameterName == other.parameterName &&
-          parameterType == other.parameterType;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, relevance.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, completion.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, selectionLength.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, isDeprecated.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, isPotential.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, docSummary.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, docComplete.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, declaringType.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, element.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, returnType.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameterNames.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameterTypes.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, requiredParameterCount.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, positionalParameterCount.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameterName.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameterType.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * CompletionSuggestionKind
- *
- * enum {
- *   ARGUMENT_LIST
- *   CLASS
- *   CLASS_ALIAS
- *   CONSTRUCTOR
- *   FIELD
- *   FUNCTION
- *   FUNCTION_TYPE_ALIAS
- *   GETTER
- *   IMPORT
- *   KEYWORD
- *   LABEL
- *   LIBRARY_PREFIX
- *   LOCAL_VARIABLE
- *   METHOD
- *   METHOD_NAME
- *   NAMED_ARGUMENT
- *   OPTIONAL_ARGUMENT
- *   PARAMETER
- *   SETTER
- *   TOP_LEVEL_VARIABLE
- *   TYPE_PARAMETER
- * }
- */
-class CompletionSuggestionKind {
-  static const ARGUMENT_LIST = const CompletionSuggestionKind._("ARGUMENT_LIST");
-
-  static const CLASS = const CompletionSuggestionKind._("CLASS");
-
-  static const CLASS_ALIAS = const CompletionSuggestionKind._("CLASS_ALIAS");
-
-  static const CONSTRUCTOR = const CompletionSuggestionKind._("CONSTRUCTOR");
-
-  static const FIELD = const CompletionSuggestionKind._("FIELD");
-
-  static const FUNCTION = const CompletionSuggestionKind._("FUNCTION");
-
-  static const FUNCTION_TYPE_ALIAS = const CompletionSuggestionKind._("FUNCTION_TYPE_ALIAS");
-
-  static const GETTER = const CompletionSuggestionKind._("GETTER");
-
-  static const IMPORT = const CompletionSuggestionKind._("IMPORT");
-
-  static const KEYWORD = const CompletionSuggestionKind._("KEYWORD");
-
-  static const LABEL = const CompletionSuggestionKind._("LABEL");
-
-  static const LIBRARY_PREFIX = const CompletionSuggestionKind._("LIBRARY_PREFIX");
-
-  static const LOCAL_VARIABLE = const CompletionSuggestionKind._("LOCAL_VARIABLE");
-
-  static const METHOD = const CompletionSuggestionKind._("METHOD");
-
-  static const METHOD_NAME = const CompletionSuggestionKind._("METHOD_NAME");
-
-  static const NAMED_ARGUMENT = const CompletionSuggestionKind._("NAMED_ARGUMENT");
-
-  static const OPTIONAL_ARGUMENT = const CompletionSuggestionKind._("OPTIONAL_ARGUMENT");
-
-  static const PARAMETER = const CompletionSuggestionKind._("PARAMETER");
-
-  static const SETTER = const CompletionSuggestionKind._("SETTER");
-
-  static const TOP_LEVEL_VARIABLE = const CompletionSuggestionKind._("TOP_LEVEL_VARIABLE");
-
-  static const TYPE_PARAMETER = const CompletionSuggestionKind._("TYPE_PARAMETER");
-
-  final String name;
-
-  const CompletionSuggestionKind._(this.name);
-
-  factory CompletionSuggestionKind(String name) {
-    switch (name) {
-      case "ARGUMENT_LIST":
-        return ARGUMENT_LIST;
-      case "CLASS":
-        return CLASS;
-      case "CLASS_ALIAS":
-        return CLASS_ALIAS;
-      case "CONSTRUCTOR":
-        return CONSTRUCTOR;
-      case "FIELD":
-        return FIELD;
-      case "FUNCTION":
-        return FUNCTION;
-      case "FUNCTION_TYPE_ALIAS":
-        return FUNCTION_TYPE_ALIAS;
-      case "GETTER":
-        return GETTER;
-      case "IMPORT":
-        return IMPORT;
-      case "KEYWORD":
-        return KEYWORD;
-      case "LABEL":
-        return LABEL;
-      case "LIBRARY_PREFIX":
-        return LIBRARY_PREFIX;
-      case "LOCAL_VARIABLE":
-        return LOCAL_VARIABLE;
-      case "METHOD":
-        return METHOD;
-      case "METHOD_NAME":
-        return METHOD_NAME;
-      case "NAMED_ARGUMENT":
-        return NAMED_ARGUMENT;
-      case "OPTIONAL_ARGUMENT":
-        return OPTIONAL_ARGUMENT;
-      case "PARAMETER":
-        return PARAMETER;
-      case "SETTER":
-        return SETTER;
-      case "TOP_LEVEL_VARIABLE":
-        return TOP_LEVEL_VARIABLE;
-      case "TYPE_PARAMETER":
-        return TYPE_PARAMETER;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory CompletionSuggestionKind.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new CompletionSuggestionKind(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "CompletionSuggestionKind");
-  }
-
-  @override
-  String toString() => "CompletionSuggestionKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * Element
- *
- * {
- *   "kind": ElementKind
- *   "name": String
- *   "location": optional Location
- *   "flags": int
- *   "parameters": optional String
- *   "returnType": optional String
- * }
- */
-class Element implements HasToJson {
-  static const int FLAG_ABSTRACT = 0x01;
-  static const int FLAG_CONST = 0x02;
-  static const int FLAG_FINAL = 0x04;
-  static const int FLAG_STATIC = 0x08;
-  static const int FLAG_PRIVATE = 0x10;
-  static const int FLAG_DEPRECATED = 0x20;
-
-  static int makeFlags({isAbstract: false, isConst: false, isFinal: false, isStatic: false, isPrivate: false, isDeprecated: false}) {
-    int flags = 0;
-    if (isAbstract) flags |= FLAG_ABSTRACT;
-    if (isConst) flags |= FLAG_CONST;
-    if (isFinal) flags |= FLAG_FINAL;
-    if (isStatic) flags |= FLAG_STATIC;
-    if (isPrivate) flags |= FLAG_PRIVATE;
-    if (isDeprecated) flags |= FLAG_DEPRECATED;
-    return flags;
-  }
-
-  /**
-   * The kind of the element.
-   */
-  ElementKind kind;
-
-  /**
-   * The name of the element. This is typically used as the label in the
-   * outline.
-   */
-  String name;
-
-  /**
-   * The location of the name in the declaration of the element.
-   */
-  Location location;
-
-  /**
-   * A bit-map containing the following flags:
-   *
-   * - 0x01 - set if the element is explicitly or implicitly abstract
-   * - 0x02 - set if the element was declared to be ‘const’
-   * - 0x04 - set if the element was declared to be ‘final’
-   * - 0x08 - set if the element is a static member of a class or is a
-   *   top-level function or field
-   * - 0x10 - set if the element is private
-   * - 0x20 - set if the element is deprecated
-   */
-  int flags;
-
-  /**
-   * The parameter list for the element. If the element is not a method or
-   * function this field will not be defined. If the element has zero
-   * parameters, this field will have a value of "()".
-   */
-  String parameters;
-
-  /**
-   * The return type of the element. If the element is not a method or function
-   * this field will not be defined. If the element does not have a declared
-   * return type, this field will contain an empty string.
-   */
-  String returnType;
-
-  Element(this.kind, this.name, this.flags, {this.location, this.parameters, this.returnType});
-
-  factory Element.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      ElementKind kind;
-      if (json.containsKey("kind")) {
-        kind = new ElementKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      String name;
-      if (json.containsKey("name")) {
-        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "name");
-      }
-      Location location;
-      if (json.containsKey("location")) {
-        location = new Location.fromJson(jsonDecoder, jsonPath + ".location", json["location"]);
-      }
-      int flags;
-      if (json.containsKey("flags")) {
-        flags = jsonDecoder._decodeInt(jsonPath + ".flags", json["flags"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "flags");
-      }
-      String parameters;
-      if (json.containsKey("parameters")) {
-        parameters = jsonDecoder._decodeString(jsonPath + ".parameters", json["parameters"]);
-      }
-      String returnType;
-      if (json.containsKey("returnType")) {
-        returnType = jsonDecoder._decodeString(jsonPath + ".returnType", json["returnType"]);
-      }
-      return new Element(kind, name, flags, location: location, parameters: parameters, returnType: returnType);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "Element");
-    }
-  }
-
-  bool get isAbstract => (flags & FLAG_ABSTRACT) != 0;
-  bool get isConst => (flags & FLAG_CONST) != 0;
-  bool get isFinal => (flags & FLAG_FINAL) != 0;
-  bool get isStatic => (flags & FLAG_STATIC) != 0;
-  bool get isPrivate => (flags & FLAG_PRIVATE) != 0;
-  bool get isDeprecated => (flags & FLAG_DEPRECATED) != 0;
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["kind"] = kind.toJson();
-    result["name"] = name;
-    if (location != null) {
-      result["location"] = location.toJson();
-    }
-    result["flags"] = flags;
-    if (parameters != null) {
-      result["parameters"] = parameters;
-    }
-    if (returnType != null) {
-      result["returnType"] = returnType;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is Element) {
-      return kind == other.kind &&
-          name == other.name &&
-          location == other.location &&
-          flags == other.flags &&
-          parameters == other.parameters &&
-          returnType == other.returnType;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, location.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, flags.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameters.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, returnType.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * ElementKind
- *
- * enum {
- *   CLASS
- *   CLASS_TYPE_ALIAS
- *   COMPILATION_UNIT
- *   CONSTRUCTOR
- *   FIELD
- *   FUNCTION
- *   FUNCTION_TYPE_ALIAS
- *   GETTER
- *   LABEL
- *   LIBRARY
- *   LOCAL_VARIABLE
- *   METHOD
- *   PARAMETER
- *   SETTER
- *   TOP_LEVEL_VARIABLE
- *   TYPE_PARAMETER
- *   UNIT_TEST_GROUP
- *   UNIT_TEST_TEST
- *   UNKNOWN
- * }
- */
-class ElementKind {
-  static const CLASS = const ElementKind._("CLASS");
-
-  static const CLASS_TYPE_ALIAS = const ElementKind._("CLASS_TYPE_ALIAS");
-
-  static const COMPILATION_UNIT = const ElementKind._("COMPILATION_UNIT");
-
-  static const CONSTRUCTOR = const ElementKind._("CONSTRUCTOR");
-
-  static const FIELD = const ElementKind._("FIELD");
-
-  static const FUNCTION = const ElementKind._("FUNCTION");
-
-  static const FUNCTION_TYPE_ALIAS = const ElementKind._("FUNCTION_TYPE_ALIAS");
-
-  static const GETTER = const ElementKind._("GETTER");
-
-  static const LABEL = const ElementKind._("LABEL");
-
-  static const LIBRARY = const ElementKind._("LIBRARY");
-
-  static const LOCAL_VARIABLE = const ElementKind._("LOCAL_VARIABLE");
-
-  static const METHOD = const ElementKind._("METHOD");
-
-  static const PARAMETER = const ElementKind._("PARAMETER");
-
-  static const SETTER = const ElementKind._("SETTER");
-
-  static const TOP_LEVEL_VARIABLE = const ElementKind._("TOP_LEVEL_VARIABLE");
-
-  static const TYPE_PARAMETER = const ElementKind._("TYPE_PARAMETER");
-
-  static const UNIT_TEST_GROUP = const ElementKind._("UNIT_TEST_GROUP");
-
-  static const UNIT_TEST_TEST = const ElementKind._("UNIT_TEST_TEST");
-
-  static const UNKNOWN = const ElementKind._("UNKNOWN");
-
-  final String name;
-
-  const ElementKind._(this.name);
-
-  factory ElementKind(String name) {
-    switch (name) {
-      case "CLASS":
-        return CLASS;
-      case "CLASS_TYPE_ALIAS":
-        return CLASS_TYPE_ALIAS;
-      case "COMPILATION_UNIT":
-        return COMPILATION_UNIT;
-      case "CONSTRUCTOR":
-        return CONSTRUCTOR;
-      case "FIELD":
-        return FIELD;
-      case "FUNCTION":
-        return FUNCTION;
-      case "FUNCTION_TYPE_ALIAS":
-        return FUNCTION_TYPE_ALIAS;
-      case "GETTER":
-        return GETTER;
-      case "LABEL":
-        return LABEL;
-      case "LIBRARY":
-        return LIBRARY;
-      case "LOCAL_VARIABLE":
-        return LOCAL_VARIABLE;
-      case "METHOD":
-        return METHOD;
-      case "PARAMETER":
-        return PARAMETER;
-      case "SETTER":
-        return SETTER;
-      case "TOP_LEVEL_VARIABLE":
-        return TOP_LEVEL_VARIABLE;
-      case "TYPE_PARAMETER":
-        return TYPE_PARAMETER;
-      case "UNIT_TEST_GROUP":
-        return UNIT_TEST_GROUP;
-      case "UNIT_TEST_TEST":
-        return UNIT_TEST_TEST;
-      case "UNKNOWN":
-        return UNKNOWN;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory ElementKind.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new ElementKind(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "ElementKind");
-  }
-
-  @override
-  String toString() => "ElementKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * ExecutableFile
- *
- * {
- *   "file": FilePath
- *   "kind": ExecutableKind
- * }
- */
-class ExecutableFile implements HasToJson {
-  /**
-   * The path of the executable file.
-   */
-  String file;
-
-  /**
-   * The kind of the executable file.
-   */
-  ExecutableKind kind;
-
-  ExecutableFile(this.file, this.kind);
-
-  factory ExecutableFile.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      ExecutableKind kind;
-      if (json.containsKey("kind")) {
-        kind = new ExecutableKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      return new ExecutableFile(file, kind);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "ExecutableFile");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["kind"] = kind.toJson();
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExecutableFile) {
-      return file == other.file &&
-          kind == other.kind;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * ExecutableKind
- *
- * enum {
- *   CLIENT
- *   EITHER
- *   SERVER
- * }
- */
-class ExecutableKind {
-  static const CLIENT = const ExecutableKind._("CLIENT");
-
-  static const EITHER = const ExecutableKind._("EITHER");
-
-  static const SERVER = const ExecutableKind._("SERVER");
-
-  final String name;
-
-  const ExecutableKind._(this.name);
-
-  factory ExecutableKind(String name) {
-    switch (name) {
-      case "CLIENT":
-        return CLIENT;
-      case "EITHER":
-        return EITHER;
-      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");
-  }
-
-  @override
-  String toString() => "ExecutableKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * ExecutionService
- *
- * enum {
- *   LAUNCH_DATA
- * }
- */
-class ExecutionService {
-  static const LAUNCH_DATA = const ExecutionService._("LAUNCH_DATA");
-
-  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");
-  }
-
-  @override
-  String toString() => "ExecutionService.$name";
-
-  String toJson() => name;
-}
-
-/**
- * FoldingKind
- *
- * enum {
- *   COMMENT
- *   CLASS_MEMBER
- *   DIRECTIVES
- *   DOCUMENTATION_COMMENT
- *   TOP_LEVEL_DECLARATION
- * }
- */
-class FoldingKind {
-  static const COMMENT = const FoldingKind._("COMMENT");
-
-  static const CLASS_MEMBER = const FoldingKind._("CLASS_MEMBER");
-
-  static const DIRECTIVES = const FoldingKind._("DIRECTIVES");
-
-  static const DOCUMENTATION_COMMENT = const FoldingKind._("DOCUMENTATION_COMMENT");
-
-  static const TOP_LEVEL_DECLARATION = const FoldingKind._("TOP_LEVEL_DECLARATION");
-
-  final String name;
-
-  const FoldingKind._(this.name);
-
-  factory FoldingKind(String name) {
-    switch (name) {
-      case "COMMENT":
-        return COMMENT;
-      case "CLASS_MEMBER":
-        return CLASS_MEMBER;
-      case "DIRECTIVES":
-        return DIRECTIVES;
-      case "DOCUMENTATION_COMMENT":
-        return DOCUMENTATION_COMMENT;
-      case "TOP_LEVEL_DECLARATION":
-        return TOP_LEVEL_DECLARATION;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory FoldingKind.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new FoldingKind(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "FoldingKind");
-  }
-
-  @override
-  String toString() => "FoldingKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * FoldingRegion
- *
- * {
- *   "kind": FoldingKind
- *   "offset": int
- *   "length": int
- * }
- */
-class FoldingRegion implements HasToJson {
-  /**
-   * The kind of the region.
-   */
-  FoldingKind kind;
-
-  /**
-   * The offset of the region to be folded.
-   */
-  int offset;
-
-  /**
-   * The length of the region to be folded.
-   */
-  int length;
-
-  FoldingRegion(this.kind, this.offset, this.length);
-
-  factory FoldingRegion.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      FoldingKind kind;
-      if (json.containsKey("kind")) {
-        kind = new FoldingKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      return new FoldingRegion(kind, offset, length);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "FoldingRegion");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["kind"] = kind.toJson();
-    result["offset"] = offset;
-    result["length"] = length;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is FoldingRegion) {
-      return kind == other.kind &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * HighlightRegion
- *
- * {
- *   "type": HighlightRegionType
- *   "offset": int
- *   "length": int
- * }
- */
-class HighlightRegion implements HasToJson {
-  /**
-   * The type of highlight associated with the region.
-   */
-  HighlightRegionType type;
-
-  /**
-   * The offset of the region to be highlighted.
-   */
-  int offset;
-
-  /**
-   * The length of the region to be highlighted.
-   */
-  int length;
-
-  HighlightRegion(this.type, this.offset, this.length);
-
-  factory HighlightRegion.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      HighlightRegionType type;
-      if (json.containsKey("type")) {
-        type = new HighlightRegionType.fromJson(jsonDecoder, jsonPath + ".type", json["type"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "type");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      return new HighlightRegion(type, offset, length);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "HighlightRegion");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["type"] = type.toJson();
-    result["offset"] = offset;
-    result["length"] = length;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is HighlightRegion) {
-      return type == other.type &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, type.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * HighlightRegionType
- *
- * enum {
- *   ANNOTATION
- *   BUILT_IN
- *   CLASS
- *   COMMENT_BLOCK
- *   COMMENT_DOCUMENTATION
- *   COMMENT_END_OF_LINE
- *   CONSTRUCTOR
- *   DIRECTIVE
- *   DYNAMIC_TYPE
- *   FIELD
- *   FIELD_STATIC
- *   FUNCTION
- *   FUNCTION_DECLARATION
- *   FUNCTION_TYPE_ALIAS
- *   GETTER_DECLARATION
- *   IDENTIFIER_DEFAULT
- *   IMPORT_PREFIX
- *   KEYWORD
- *   LABEL
- *   LITERAL_BOOLEAN
- *   LITERAL_DOUBLE
- *   LITERAL_INTEGER
- *   LITERAL_LIST
- *   LITERAL_MAP
- *   LITERAL_STRING
- *   LOCAL_VARIABLE
- *   LOCAL_VARIABLE_DECLARATION
- *   METHOD
- *   METHOD_DECLARATION
- *   METHOD_DECLARATION_STATIC
- *   METHOD_STATIC
- *   PARAMETER
- *   SETTER_DECLARATION
- *   TOP_LEVEL_VARIABLE
- *   TYPE_NAME_DYNAMIC
- *   TYPE_PARAMETER
- * }
- */
-class HighlightRegionType {
-  static const ANNOTATION = const HighlightRegionType._("ANNOTATION");
-
-  static const BUILT_IN = const HighlightRegionType._("BUILT_IN");
-
-  static const CLASS = const HighlightRegionType._("CLASS");
-
-  static const COMMENT_BLOCK = const HighlightRegionType._("COMMENT_BLOCK");
-
-  static const COMMENT_DOCUMENTATION = const HighlightRegionType._("COMMENT_DOCUMENTATION");
-
-  static const COMMENT_END_OF_LINE = const HighlightRegionType._("COMMENT_END_OF_LINE");
-
-  static const CONSTRUCTOR = const HighlightRegionType._("CONSTRUCTOR");
-
-  static const DIRECTIVE = const HighlightRegionType._("DIRECTIVE");
-
-  static const DYNAMIC_TYPE = const HighlightRegionType._("DYNAMIC_TYPE");
-
-  static const FIELD = const HighlightRegionType._("FIELD");
-
-  static const FIELD_STATIC = const HighlightRegionType._("FIELD_STATIC");
-
-  static const FUNCTION = const HighlightRegionType._("FUNCTION");
-
-  static const FUNCTION_DECLARATION = const HighlightRegionType._("FUNCTION_DECLARATION");
-
-  static const FUNCTION_TYPE_ALIAS = const HighlightRegionType._("FUNCTION_TYPE_ALIAS");
-
-  static const GETTER_DECLARATION = const HighlightRegionType._("GETTER_DECLARATION");
-
-  static const IDENTIFIER_DEFAULT = const HighlightRegionType._("IDENTIFIER_DEFAULT");
-
-  static const IMPORT_PREFIX = const HighlightRegionType._("IMPORT_PREFIX");
-
-  static const KEYWORD = const HighlightRegionType._("KEYWORD");
-
-  static const LABEL = const HighlightRegionType._("LABEL");
-
-  static const LITERAL_BOOLEAN = const HighlightRegionType._("LITERAL_BOOLEAN");
-
-  static const LITERAL_DOUBLE = const HighlightRegionType._("LITERAL_DOUBLE");
-
-  static const LITERAL_INTEGER = const HighlightRegionType._("LITERAL_INTEGER");
-
-  static const LITERAL_LIST = const HighlightRegionType._("LITERAL_LIST");
-
-  static const LITERAL_MAP = const HighlightRegionType._("LITERAL_MAP");
-
-  static const LITERAL_STRING = const HighlightRegionType._("LITERAL_STRING");
-
-  static const LOCAL_VARIABLE = const HighlightRegionType._("LOCAL_VARIABLE");
-
-  static const LOCAL_VARIABLE_DECLARATION = const HighlightRegionType._("LOCAL_VARIABLE_DECLARATION");
-
-  static const METHOD = const HighlightRegionType._("METHOD");
-
-  static const METHOD_DECLARATION = const HighlightRegionType._("METHOD_DECLARATION");
-
-  static const METHOD_DECLARATION_STATIC = const HighlightRegionType._("METHOD_DECLARATION_STATIC");
-
-  static const METHOD_STATIC = const HighlightRegionType._("METHOD_STATIC");
-
-  static const PARAMETER = const HighlightRegionType._("PARAMETER");
-
-  static const SETTER_DECLARATION = const HighlightRegionType._("SETTER_DECLARATION");
-
-  static const TOP_LEVEL_VARIABLE = const HighlightRegionType._("TOP_LEVEL_VARIABLE");
-
-  static const TYPE_NAME_DYNAMIC = const HighlightRegionType._("TYPE_NAME_DYNAMIC");
-
-  static const TYPE_PARAMETER = const HighlightRegionType._("TYPE_PARAMETER");
-
-  final String name;
-
-  const HighlightRegionType._(this.name);
-
-  factory HighlightRegionType(String name) {
-    switch (name) {
-      case "ANNOTATION":
-        return ANNOTATION;
-      case "BUILT_IN":
-        return BUILT_IN;
-      case "CLASS":
-        return CLASS;
-      case "COMMENT_BLOCK":
-        return COMMENT_BLOCK;
-      case "COMMENT_DOCUMENTATION":
-        return COMMENT_DOCUMENTATION;
-      case "COMMENT_END_OF_LINE":
-        return COMMENT_END_OF_LINE;
-      case "CONSTRUCTOR":
-        return CONSTRUCTOR;
-      case "DIRECTIVE":
-        return DIRECTIVE;
-      case "DYNAMIC_TYPE":
-        return DYNAMIC_TYPE;
-      case "FIELD":
-        return FIELD;
-      case "FIELD_STATIC":
-        return FIELD_STATIC;
-      case "FUNCTION":
-        return FUNCTION;
-      case "FUNCTION_DECLARATION":
-        return FUNCTION_DECLARATION;
-      case "FUNCTION_TYPE_ALIAS":
-        return FUNCTION_TYPE_ALIAS;
-      case "GETTER_DECLARATION":
-        return GETTER_DECLARATION;
-      case "IDENTIFIER_DEFAULT":
-        return IDENTIFIER_DEFAULT;
-      case "IMPORT_PREFIX":
-        return IMPORT_PREFIX;
-      case "KEYWORD":
-        return KEYWORD;
-      case "LABEL":
-        return LABEL;
-      case "LITERAL_BOOLEAN":
-        return LITERAL_BOOLEAN;
-      case "LITERAL_DOUBLE":
-        return LITERAL_DOUBLE;
-      case "LITERAL_INTEGER":
-        return LITERAL_INTEGER;
-      case "LITERAL_LIST":
-        return LITERAL_LIST;
-      case "LITERAL_MAP":
-        return LITERAL_MAP;
-      case "LITERAL_STRING":
-        return LITERAL_STRING;
-      case "LOCAL_VARIABLE":
-        return LOCAL_VARIABLE;
-      case "LOCAL_VARIABLE_DECLARATION":
-        return LOCAL_VARIABLE_DECLARATION;
-      case "METHOD":
-        return METHOD;
-      case "METHOD_DECLARATION":
-        return METHOD_DECLARATION;
-      case "METHOD_DECLARATION_STATIC":
-        return METHOD_DECLARATION_STATIC;
-      case "METHOD_STATIC":
-        return METHOD_STATIC;
-      case "PARAMETER":
-        return PARAMETER;
-      case "SETTER_DECLARATION":
-        return SETTER_DECLARATION;
-      case "TOP_LEVEL_VARIABLE":
-        return TOP_LEVEL_VARIABLE;
-      case "TYPE_NAME_DYNAMIC":
-        return TYPE_NAME_DYNAMIC;
-      case "TYPE_PARAMETER":
-        return TYPE_PARAMETER;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory HighlightRegionType.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new HighlightRegionType(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "HighlightRegionType");
-  }
-
-  @override
-  String toString() => "HighlightRegionType.$name";
-
-  String toJson() => name;
-}
-
-/**
- * HoverInformation
- *
- * {
- *   "offset": int
- *   "length": int
- *   "containingLibraryPath": optional String
- *   "containingLibraryName": optional String
- *   "dartdoc": optional String
- *   "elementDescription": optional String
- *   "elementKind": optional String
- *   "parameter": optional String
- *   "propagatedType": optional String
- *   "staticType": optional String
- * }
- */
-class HoverInformation implements HasToJson {
-  /**
-   * The offset of the range of characters that encompases the cursor position
-   * and has the same hover information as the cursor position.
-   */
-  int offset;
-
-  /**
-   * The length of the range of characters that encompases the cursor position
-   * and has the same hover information as the cursor position.
-   */
-  int length;
-
-  /**
-   * The path to the defining compilation unit of the library in which the
-   * referenced element is declared. This data is omitted if there is no
-   * referenced element, or if the element is declared inside an HTML file.
-   */
-  String containingLibraryPath;
-
-  /**
-   * 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 containingLibraryName;
-
-  /**
-   * The dartdoc associated with the referenced element. Other than the removal
-   * of the comment delimiters, including leading asterisks in the case of a
-   * block comment, the dartdoc is unprocessed markdown. This data is omitted
-   * if there is no referenced element, or if the element has no dartdoc.
-   */
-  String dartdoc;
-
-  /**
-   * A human-readable description of the element being referenced. This data is
-   * omitted if there is no referenced element.
-   */
-  String elementDescription;
-
-  /**
-   * 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 elementKind;
-
-  /**
-   * 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 parameter;
-
-  /**
-   * The name of the propagated type of the expression. This data is omitted if
-   * the location does not correspond to an expression or if there is no
-   * propagated type information.
-   */
-  String propagatedType;
-
-  /**
-   * The name of the static type of the expression. This data is omitted if the
-   * location does not correspond to an expression.
-   */
-  String staticType;
-
-  HoverInformation(this.offset, this.length, {this.containingLibraryPath, this.containingLibraryName, this.dartdoc, this.elementDescription, this.elementKind, this.parameter, this.propagatedType, this.staticType});
-
-  factory HoverInformation.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      String containingLibraryPath;
-      if (json.containsKey("containingLibraryPath")) {
-        containingLibraryPath = jsonDecoder._decodeString(jsonPath + ".containingLibraryPath", json["containingLibraryPath"]);
-      }
-      String containingLibraryName;
-      if (json.containsKey("containingLibraryName")) {
-        containingLibraryName = jsonDecoder._decodeString(jsonPath + ".containingLibraryName", json["containingLibraryName"]);
-      }
-      String dartdoc;
-      if (json.containsKey("dartdoc")) {
-        dartdoc = jsonDecoder._decodeString(jsonPath + ".dartdoc", json["dartdoc"]);
-      }
-      String elementDescription;
-      if (json.containsKey("elementDescription")) {
-        elementDescription = jsonDecoder._decodeString(jsonPath + ".elementDescription", json["elementDescription"]);
-      }
-      String elementKind;
-      if (json.containsKey("elementKind")) {
-        elementKind = jsonDecoder._decodeString(jsonPath + ".elementKind", json["elementKind"]);
-      }
-      String parameter;
-      if (json.containsKey("parameter")) {
-        parameter = jsonDecoder._decodeString(jsonPath + ".parameter", json["parameter"]);
-      }
-      String propagatedType;
-      if (json.containsKey("propagatedType")) {
-        propagatedType = jsonDecoder._decodeString(jsonPath + ".propagatedType", json["propagatedType"]);
-      }
-      String staticType;
-      if (json.containsKey("staticType")) {
-        staticType = jsonDecoder._decodeString(jsonPath + ".staticType", json["staticType"]);
-      }
-      return new HoverInformation(offset, length, containingLibraryPath: containingLibraryPath, containingLibraryName: containingLibraryName, dartdoc: dartdoc, elementDescription: elementDescription, elementKind: elementKind, parameter: parameter, propagatedType: propagatedType, staticType: staticType);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "HoverInformation");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["offset"] = offset;
-    result["length"] = length;
-    if (containingLibraryPath != null) {
-      result["containingLibraryPath"] = containingLibraryPath;
-    }
-    if (containingLibraryName != null) {
-      result["containingLibraryName"] = containingLibraryName;
-    }
-    if (dartdoc != null) {
-      result["dartdoc"] = dartdoc;
-    }
-    if (elementDescription != null) {
-      result["elementDescription"] = elementDescription;
-    }
-    if (elementKind != null) {
-      result["elementKind"] = elementKind;
-    }
-    if (parameter != null) {
-      result["parameter"] = parameter;
-    }
-    if (propagatedType != null) {
-      result["propagatedType"] = propagatedType;
-    }
-    if (staticType != null) {
-      result["staticType"] = staticType;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is HoverInformation) {
-      return offset == other.offset &&
-          length == other.length &&
-          containingLibraryPath == other.containingLibraryPath &&
-          containingLibraryName == other.containingLibraryName &&
-          dartdoc == other.dartdoc &&
-          elementDescription == other.elementDescription &&
-          elementKind == other.elementKind &&
-          parameter == other.parameter &&
-          propagatedType == other.propagatedType &&
-          staticType == other.staticType;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, containingLibraryPath.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, containingLibraryName.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, dartdoc.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, elementDescription.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, elementKind.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameter.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, propagatedType.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, staticType.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * LinkedEditGroup
- *
- * {
- *   "positions": List<Position>
- *   "length": int
- *   "suggestions": List<LinkedEditSuggestion>
- * }
- */
-class LinkedEditGroup implements HasToJson {
-  /**
-   * The positions of the regions that should be edited simultaneously.
-   */
-  List<Position> positions;
-
-  /**
-   * The length of the regions that should be edited simultaneously.
-   */
-  int length;
-
-  /**
-   * Pre-computed suggestions for what every region might want to be changed
-   * to.
-   */
-  List<LinkedEditSuggestion> suggestions;
-
-  LinkedEditGroup(this.positions, this.length, this.suggestions);
-
-  factory LinkedEditGroup.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<Position> positions;
-      if (json.containsKey("positions")) {
-        positions = jsonDecoder._decodeList(jsonPath + ".positions", json["positions"], (String jsonPath, Object json) => new Position.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "positions");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      List<LinkedEditSuggestion> suggestions;
-      if (json.containsKey("suggestions")) {
-        suggestions = jsonDecoder._decodeList(jsonPath + ".suggestions", json["suggestions"], (String jsonPath, Object json) => new LinkedEditSuggestion.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "suggestions");
-      }
-      return new LinkedEditGroup(positions, length, suggestions);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "LinkedEditGroup");
-    }
-  }
-
-  /**
-   * Construct an empty LinkedEditGroup.
-   */
-  LinkedEditGroup.empty() : this(<Position>[], 0, <LinkedEditSuggestion>[]);
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["positions"] = positions.map((Position value) => value.toJson()).toList();
-    result["length"] = length;
-    result["suggestions"] = suggestions.map((LinkedEditSuggestion value) => value.toJson()).toList();
-    return result;
-  }
-
-  /**
-   * Add a new position and change the length.
-   */
-  void addPosition(Position position, int length) {
-    positions.add(position);
-    this.length = length;
-  }
-
-  /**
-   * Add a new suggestion.
-   */
-  void addSuggestion(LinkedEditSuggestion suggestion) {
-    suggestions.add(suggestion);
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is LinkedEditGroup) {
-      return _listEqual(positions, other.positions, (Position a, Position b) => a == b) &&
-          length == other.length &&
-          _listEqual(suggestions, other.suggestions, (LinkedEditSuggestion a, LinkedEditSuggestion b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, positions.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, suggestions.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * LinkedEditSuggestion
- *
- * {
- *   "value": String
- *   "kind": LinkedEditSuggestionKind
- * }
- */
-class LinkedEditSuggestion implements HasToJson {
-  /**
-   * The value that could be used to replace all of the linked edit regions.
-   */
-  String value;
-
-  /**
-   * The kind of value being proposed.
-   */
-  LinkedEditSuggestionKind kind;
-
-  LinkedEditSuggestion(this.value, this.kind);
-
-  factory LinkedEditSuggestion.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String value;
-      if (json.containsKey("value")) {
-        value = jsonDecoder._decodeString(jsonPath + ".value", json["value"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "value");
-      }
-      LinkedEditSuggestionKind kind;
-      if (json.containsKey("kind")) {
-        kind = new LinkedEditSuggestionKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      return new LinkedEditSuggestion(value, kind);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "LinkedEditSuggestion");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["value"] = value;
-    result["kind"] = kind.toJson();
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is LinkedEditSuggestion) {
-      return value == other.value &&
-          kind == other.kind;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, value.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * LinkedEditSuggestionKind
- *
- * enum {
- *   METHOD
- *   PARAMETER
- *   TYPE
- *   VARIABLE
- * }
- */
-class LinkedEditSuggestionKind {
-  static const METHOD = const LinkedEditSuggestionKind._("METHOD");
-
-  static const PARAMETER = const LinkedEditSuggestionKind._("PARAMETER");
-
-  static const TYPE = const LinkedEditSuggestionKind._("TYPE");
-
-  static const VARIABLE = const LinkedEditSuggestionKind._("VARIABLE");
-
-  final String name;
-
-  const LinkedEditSuggestionKind._(this.name);
-
-  factory LinkedEditSuggestionKind(String name) {
-    switch (name) {
-      case "METHOD":
-        return METHOD;
-      case "PARAMETER":
-        return PARAMETER;
-      case "TYPE":
-        return TYPE;
-      case "VARIABLE":
-        return VARIABLE;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory LinkedEditSuggestionKind.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new LinkedEditSuggestionKind(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "LinkedEditSuggestionKind");
-  }
-
-  @override
-  String toString() => "LinkedEditSuggestionKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * Location
- *
- * {
- *   "file": FilePath
- *   "offset": int
- *   "length": int
- *   "startLine": int
- *   "startColumn": int
- * }
- */
-class Location implements HasToJson {
-  /**
-   * The file containing the range.
-   */
-  String file;
-
-  /**
-   * The offset of the range.
-   */
-  int offset;
-
-  /**
-   * The length of the range.
-   */
-  int length;
-
-  /**
-   * The one-based index of the line containing the first character of the
-   * range.
-   */
-  int startLine;
-
-  /**
-   * The one-based index of the column containing the first character of the
-   * range.
-   */
-  int startColumn;
-
-  Location(this.file, this.offset, this.length, this.startLine, this.startColumn);
-
-  factory Location.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      int startLine;
-      if (json.containsKey("startLine")) {
-        startLine = jsonDecoder._decodeInt(jsonPath + ".startLine", json["startLine"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "startLine");
-      }
-      int startColumn;
-      if (json.containsKey("startColumn")) {
-        startColumn = jsonDecoder._decodeInt(jsonPath + ".startColumn", json["startColumn"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "startColumn");
-      }
-      return new Location(file, offset, length, startLine, startColumn);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "Location");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    result["length"] = length;
-    result["startLine"] = startLine;
-    result["startColumn"] = startColumn;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is Location) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length &&
-          startLine == other.startLine &&
-          startColumn == other.startColumn;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, startLine.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, startColumn.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * NavigationRegion
- *
- * {
- *   "offset": int
- *   "length": int
- *   "targets": List<Element>
- * }
- */
-class NavigationRegion implements HasToJson {
-  /**
-   * The offset of the region from which the user can navigate.
-   */
-  int offset;
-
-  /**
-   * The length of the region from which the user can navigate.
-   */
-  int length;
-
-  /**
-   * The elements to which the given region is bound. By opening the
-   * declaration of the elements, clients can implement one form of navigation.
-   */
-  List<Element> targets;
-
-  NavigationRegion(this.offset, this.length, this.targets);
-
-  factory NavigationRegion.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      List<Element> targets;
-      if (json.containsKey("targets")) {
-        targets = jsonDecoder._decodeList(jsonPath + ".targets", json["targets"], (String jsonPath, Object json) => new Element.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "targets");
-      }
-      return new NavigationRegion(offset, length, targets);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "NavigationRegion");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["offset"] = offset;
-    result["length"] = length;
-    result["targets"] = targets.map((Element value) => value.toJson()).toList();
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is NavigationRegion) {
-      return offset == other.offset &&
-          length == other.length &&
-          _listEqual(targets, other.targets, (Element a, Element b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, targets.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * Occurrences
- *
- * {
- *   "element": Element
- *   "offsets": List<int>
- *   "length": int
- * }
- */
-class Occurrences implements HasToJson {
-  /**
-   * The element that was referenced.
-   */
-  Element element;
-
-  /**
-   * The offsets of the name of the referenced element within the file.
-   */
-  List<int> offsets;
-
-  /**
-   * The length of the name of the referenced element.
-   */
-  int length;
-
-  Occurrences(this.element, this.offsets, this.length);
-
-  factory Occurrences.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      Element element;
-      if (json.containsKey("element")) {
-        element = new Element.fromJson(jsonDecoder, jsonPath + ".element", json["element"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "element");
-      }
-      List<int> offsets;
-      if (json.containsKey("offsets")) {
-        offsets = jsonDecoder._decodeList(jsonPath + ".offsets", json["offsets"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offsets");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      return new Occurrences(element, offsets, length);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "Occurrences");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["element"] = element.toJson();
-    result["offsets"] = offsets;
-    result["length"] = length;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is Occurrences) {
-      return element == other.element &&
-          _listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
-          length == other.length;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, element.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offsets.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * Outline
- *
- * {
- *   "element": Element
- *   "offset": int
- *   "length": int
- *   "children": optional List<Outline>
- * }
- */
-class Outline implements HasToJson {
-  /**
-   * A description of the element represented by this node.
-   */
-  Element element;
-
-  /**
-   * The offset of the first character of the element. This is different than
-   * the offset in the Element, which if the offset of the name of the element.
-   * It can be used, for example, to map locations in the file back to an
-   * outline.
-   */
-  int offset;
-
-  /**
-   * The length of the element.
-   */
-  int length;
-
-  /**
-   * The children of the node. The field will be omitted if the node has no
-   * children.
-   */
-  List<Outline> children;
-
-  Outline(this.element, this.offset, this.length, {this.children}) {
-    if (children == null) {
-      children = <Outline>[];
-    }
-  }
-
-  factory Outline.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      Element element;
-      if (json.containsKey("element")) {
-        element = new Element.fromJson(jsonDecoder, jsonPath + ".element", json["element"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "element");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      List<Outline> children;
-      if (json.containsKey("children")) {
-        children = jsonDecoder._decodeList(jsonPath + ".children", json["children"], (String jsonPath, Object json) => new Outline.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        children = <Outline>[];
-      }
-      return new Outline(element, offset, length, children: children);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "Outline");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["element"] = element.toJson();
-    result["offset"] = offset;
-    result["length"] = length;
-    if (children.isNotEmpty) {
-      result["children"] = children.map((Outline value) => value.toJson()).toList();
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is Outline) {
-      return element == other.element &&
-          offset == other.offset &&
-          length == other.length &&
-          _listEqual(children, other.children, (Outline a, Outline b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, element.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, children.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * Override
- *
- * {
- *   "offset": int
- *   "length": int
- *   "superclassMember": optional OverriddenMember
- *   "interfaceMembers": optional List<OverriddenMember>
- * }
- */
-class Override implements HasToJson {
-  /**
-   * The offset of the name of the overriding member.
-   */
-  int offset;
-
-  /**
-   * The length of the name of the overriding member.
-   */
-  int length;
-
-  /**
-   * The member inherited from a superclass that is overridden by the
-   * overriding member. The field is omitted if there is no superclass member,
-   * in which case there must be at least one interface member.
-   */
-  OverriddenMember superclassMember;
-
-  /**
-   * The members inherited from interfaces that are overridden by the
-   * overriding member. The field is omitted if there are no interface members,
-   * in which case there must be a superclass member.
-   */
-  List<OverriddenMember> interfaceMembers;
-
-  Override(this.offset, this.length, {this.superclassMember, this.interfaceMembers}) {
-    if (interfaceMembers == null) {
-      interfaceMembers = <OverriddenMember>[];
-    }
-  }
-
-  factory Override.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      OverriddenMember superclassMember;
-      if (json.containsKey("superclassMember")) {
-        superclassMember = new OverriddenMember.fromJson(jsonDecoder, jsonPath + ".superclassMember", json["superclassMember"]);
-      }
-      List<OverriddenMember> interfaceMembers;
-      if (json.containsKey("interfaceMembers")) {
-        interfaceMembers = jsonDecoder._decodeList(jsonPath + ".interfaceMembers", json["interfaceMembers"], (String jsonPath, Object json) => new OverriddenMember.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        interfaceMembers = <OverriddenMember>[];
-      }
-      return new Override(offset, length, superclassMember: superclassMember, interfaceMembers: interfaceMembers);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "Override");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["offset"] = offset;
-    result["length"] = length;
-    if (superclassMember != null) {
-      result["superclassMember"] = superclassMember.toJson();
-    }
-    if (interfaceMembers.isNotEmpty) {
-      result["interfaceMembers"] = interfaceMembers.map((OverriddenMember value) => value.toJson()).toList();
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is Override) {
-      return offset == other.offset &&
-          length == other.length &&
-          superclassMember == other.superclassMember &&
-          _listEqual(interfaceMembers, other.interfaceMembers, (OverriddenMember a, OverriddenMember b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, superclassMember.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, interfaceMembers.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * OverriddenMember
- *
- * {
- *   "element": Element
- *   "className": String
- * }
- */
-class OverriddenMember implements HasToJson {
-  /**
-   * The element that is being overridden.
-   */
-  Element element;
-
-  /**
-   * The name of the class in which the member is defined.
-   */
-  String className;
-
-  OverriddenMember(this.element, this.className);
-
-  factory OverriddenMember.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      Element element;
-      if (json.containsKey("element")) {
-        element = new Element.fromJson(jsonDecoder, jsonPath + ".element", json["element"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "element");
-      }
-      String className;
-      if (json.containsKey("className")) {
-        className = jsonDecoder._decodeString(jsonPath + ".className", json["className"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "className");
-      }
-      return new OverriddenMember(element, className);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "OverriddenMember");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["element"] = element.toJson();
-    result["className"] = className;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is OverriddenMember) {
-      return element == other.element &&
-          className == other.className;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, element.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, className.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * Position
- *
- * {
- *   "file": FilePath
- *   "offset": int
- * }
- */
-class Position implements HasToJson {
-  /**
-   * The file containing the position.
-   */
-  String file;
-
-  /**
-   * The offset of the position.
-   */
-  int offset;
-
-  Position(this.file, this.offset);
-
-  factory Position.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      return new Position(file, offset);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "Position");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["offset"] = offset;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is Position) {
-      return file == other.file &&
-          offset == other.offset;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * RefactoringKind
- *
- * enum {
- *   CONVERT_GETTER_TO_METHOD
- *   CONVERT_METHOD_TO_GETTER
- *   EXTRACT_LOCAL_VARIABLE
- *   EXTRACT_METHOD
- *   INLINE_LOCAL_VARIABLE
- *   INLINE_METHOD
- *   RENAME
- * }
- */
-class RefactoringKind {
-  static const CONVERT_GETTER_TO_METHOD = const RefactoringKind._("CONVERT_GETTER_TO_METHOD");
-
-  static const CONVERT_METHOD_TO_GETTER = const RefactoringKind._("CONVERT_METHOD_TO_GETTER");
-
-  static const EXTRACT_LOCAL_VARIABLE = const RefactoringKind._("EXTRACT_LOCAL_VARIABLE");
-
-  static const EXTRACT_METHOD = const RefactoringKind._("EXTRACT_METHOD");
-
-  static const INLINE_LOCAL_VARIABLE = const RefactoringKind._("INLINE_LOCAL_VARIABLE");
-
-  static const INLINE_METHOD = const RefactoringKind._("INLINE_METHOD");
-
-  static const RENAME = const RefactoringKind._("RENAME");
-
-  final String name;
-
-  const RefactoringKind._(this.name);
-
-  factory RefactoringKind(String name) {
-    switch (name) {
-      case "CONVERT_GETTER_TO_METHOD":
-        return CONVERT_GETTER_TO_METHOD;
-      case "CONVERT_METHOD_TO_GETTER":
-        return CONVERT_METHOD_TO_GETTER;
-      case "EXTRACT_LOCAL_VARIABLE":
-        return EXTRACT_LOCAL_VARIABLE;
-      case "EXTRACT_METHOD":
-        return EXTRACT_METHOD;
-      case "INLINE_LOCAL_VARIABLE":
-        return INLINE_LOCAL_VARIABLE;
-      case "INLINE_METHOD":
-        return INLINE_METHOD;
-      case "RENAME":
-        return RENAME;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory RefactoringKind.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new RefactoringKind(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "RefactoringKind");
-  }
-
-  @override
-  String toString() => "RefactoringKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * RefactoringMethodParameter
- *
- * {
- *   "id": optional String
- *   "kind": RefactoringMethodParameterKind
- *   "type": String
- *   "name": String
- *   "parameters": optional String
- * }
- */
-class RefactoringMethodParameter implements HasToJson {
-  /**
-   * The unique identifier of the parameter. Clients may omit this field for
-   * the parameters they want to add.
-   */
-  String id;
-
-  /**
-   * The kind of the parameter.
-   */
-  RefactoringMethodParameterKind kind;
-
-  /**
-   * The type that should be given to the parameter, or the return type of the
-   * parameter's function type.
-   */
-  String type;
-
-  /**
-   * The name that should be given to the parameter.
-   */
-  String name;
-
-  /**
-   * The parameter list of the parameter's function type. If the parameter is
-   * not of a function type, this field will not be defined. If the function
-   * type has zero parameters, this field will have a value of "()".
-   */
-  String parameters;
-
-  RefactoringMethodParameter(this.kind, this.type, this.name, {this.id, this.parameters});
-
-  factory RefactoringMethodParameter.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      }
-      RefactoringMethodParameterKind kind;
-      if (json.containsKey("kind")) {
-        kind = new RefactoringMethodParameterKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      String type;
-      if (json.containsKey("type")) {
-        type = jsonDecoder._decodeString(jsonPath + ".type", json["type"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "type");
-      }
-      String name;
-      if (json.containsKey("name")) {
-        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "name");
-      }
-      String parameters;
-      if (json.containsKey("parameters")) {
-        parameters = jsonDecoder._decodeString(jsonPath + ".parameters", json["parameters"]);
-      }
-      return new RefactoringMethodParameter(kind, type, name, id: id, parameters: parameters);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "RefactoringMethodParameter");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    if (id != null) {
-      result["id"] = id;
-    }
-    result["kind"] = kind.toJson();
-    result["type"] = type;
-    result["name"] = name;
-    if (parameters != null) {
-      result["parameters"] = parameters;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RefactoringMethodParameter) {
-      return id == other.id &&
-          kind == other.kind &&
-          type == other.type &&
-          name == other.name &&
-          parameters == other.parameters;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, type.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameters.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * RefactoringFeedback
- *
- * {
- * }
- */
-class RefactoringFeedback implements HasToJson {
-  RefactoringFeedback();
-
-  factory RefactoringFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json, Map responseJson) {
-    return _refactoringFeedbackFromJson(jsonDecoder, jsonPath, json, responseJson);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RefactoringFeedback) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * RefactoringOptions
- *
- * {
- * }
- */
-class RefactoringOptions implements HasToJson {
-  RefactoringOptions();
-
-  factory RefactoringOptions.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json, RefactoringKind kind) {
-    return _refactoringOptionsFromJson(jsonDecoder, jsonPath, json, kind);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RefactoringOptions) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * RefactoringMethodParameterKind
- *
- * enum {
- *   REQUIRED
- *   POSITIONAL
- *   NAMED
- * }
- */
-class RefactoringMethodParameterKind {
-  static const REQUIRED = const RefactoringMethodParameterKind._("REQUIRED");
-
-  static const POSITIONAL = const RefactoringMethodParameterKind._("POSITIONAL");
-
-  static const NAMED = const RefactoringMethodParameterKind._("NAMED");
-
-  final String name;
-
-  const RefactoringMethodParameterKind._(this.name);
-
-  factory RefactoringMethodParameterKind(String name) {
-    switch (name) {
-      case "REQUIRED":
-        return REQUIRED;
-      case "POSITIONAL":
-        return POSITIONAL;
-      case "NAMED":
-        return NAMED;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory RefactoringMethodParameterKind.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new RefactoringMethodParameterKind(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "RefactoringMethodParameterKind");
-  }
-
-  @override
-  String toString() => "RefactoringMethodParameterKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * RefactoringProblem
- *
- * {
- *   "severity": RefactoringProblemSeverity
- *   "message": String
- *   "location": optional Location
- * }
- */
-class RefactoringProblem implements HasToJson {
-  /**
-   * The severity of the problem being represented.
-   */
-  RefactoringProblemSeverity severity;
-
-  /**
-   * A human-readable description of the problem being represented.
-   */
-  String message;
-
-  /**
-   * The location of the problem being represented. This field is omitted
-   * unless there is a specific location associated with the problem (such as a
-   * location where an element being renamed will be shadowed).
-   */
-  Location location;
-
-  RefactoringProblem(this.severity, this.message, {this.location});
-
-  factory RefactoringProblem.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      RefactoringProblemSeverity severity;
-      if (json.containsKey("severity")) {
-        severity = new RefactoringProblemSeverity.fromJson(jsonDecoder, jsonPath + ".severity", json["severity"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "severity");
-      }
-      String message;
-      if (json.containsKey("message")) {
-        message = jsonDecoder._decodeString(jsonPath + ".message", json["message"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "message");
-      }
-      Location location;
-      if (json.containsKey("location")) {
-        location = new Location.fromJson(jsonDecoder, jsonPath + ".location", json["location"]);
-      }
-      return new RefactoringProblem(severity, message, location: location);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "RefactoringProblem");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["severity"] = severity.toJson();
-    result["message"] = message;
-    if (location != null) {
-      result["location"] = location.toJson();
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RefactoringProblem) {
-      return severity == other.severity &&
-          message == other.message &&
-          location == other.location;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, severity.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, message.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, location.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * RefactoringProblemSeverity
- *
- * enum {
- *   INFO
- *   WARNING
- *   ERROR
- *   FATAL
- * }
- */
-class RefactoringProblemSeverity {
-  static const INFO = const RefactoringProblemSeverity._("INFO");
-
-  static const WARNING = const RefactoringProblemSeverity._("WARNING");
-
-  static const ERROR = const RefactoringProblemSeverity._("ERROR");
-
-  static const FATAL = const RefactoringProblemSeverity._("FATAL");
-
-  final String name;
-
-  const RefactoringProblemSeverity._(this.name);
-
-  factory RefactoringProblemSeverity(String name) {
-    switch (name) {
-      case "INFO":
-        return INFO;
-      case "WARNING":
-        return WARNING;
-      case "ERROR":
-        return ERROR;
-      case "FATAL":
-        return FATAL;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory RefactoringProblemSeverity.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new RefactoringProblemSeverity(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "RefactoringProblemSeverity");
-  }
-
-  /**
-   * Returns the [RefactoringProblemSeverity] with the maximal severity.
-   */
-  static RefactoringProblemSeverity max(RefactoringProblemSeverity a, RefactoringProblemSeverity b) =>
-      _maxRefactoringProblemSeverity(a, b);
-
-  @override
-  String toString() => "RefactoringProblemSeverity.$name";
-
-  String toJson() => name;
-}
-
-/**
- * RemoveContentOverlay
- *
- * {
- *   "type": "remove"
- * }
- */
-class RemoveContentOverlay implements HasToJson {
-  RemoveContentOverlay();
-
-  factory RemoveContentOverlay.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      if (json["type"] != "remove") {
-        throw jsonDecoder.mismatch(jsonPath, "equal " + "remove");
-      }
-      return new RemoveContentOverlay();
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "RemoveContentOverlay");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["type"] = "remove";
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RemoveContentOverlay) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, 114870849);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * RequestError
- *
- * {
- *   "code": RequestErrorCode
- *   "message": String
- *   "stackTrace": optional String
- * }
- */
-class RequestError implements HasToJson {
-  /**
-   * A code that uniquely identifies the error that occurred.
-   */
-  RequestErrorCode code;
-
-  /**
-   * A short description of the error.
-   */
-  String message;
-
-  /**
-   * The stack trace associated with processing the request, used for debugging
-   * the server.
-   */
-  String stackTrace;
-
-  RequestError(this.code, this.message, {this.stackTrace});
-
-  factory RequestError.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      RequestErrorCode code;
-      if (json.containsKey("code")) {
-        code = new RequestErrorCode.fromJson(jsonDecoder, jsonPath + ".code", json["code"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "code");
-      }
-      String message;
-      if (json.containsKey("message")) {
-        message = jsonDecoder._decodeString(jsonPath + ".message", json["message"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "message");
-      }
-      String stackTrace;
-      if (json.containsKey("stackTrace")) {
-        stackTrace = jsonDecoder._decodeString(jsonPath + ".stackTrace", json["stackTrace"]);
-      }
-      return new RequestError(code, message, stackTrace: stackTrace);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "RequestError");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["code"] = code.toJson();
-    result["message"] = message;
-    if (stackTrace != null) {
-      result["stackTrace"] = stackTrace;
-    }
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RequestError) {
-      return code == other.code &&
-          message == other.message &&
-          stackTrace == other.stackTrace;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, code.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, message.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, stackTrace.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * RequestErrorCode
- *
- * enum {
- *   GET_ERRORS_INVALID_FILE
- *   INVALID_OVERLAY_CHANGE
- *   INVALID_PARAMETER
- *   INVALID_REQUEST
- *   SERVER_ALREADY_STARTED
- *   SERVER_ERROR
- *   UNANALYZED_PRIORITY_FILES
- *   UNKNOWN_REQUEST
- *   UNSUPPORTED_FEATURE
- * }
- */
-class RequestErrorCode {
-  /**
-   * An "analysis.getErrors" request specified a FilePath which does not match
-   * a file currently subject to analysis.
-   */
-  static const GET_ERRORS_INVALID_FILE = const RequestErrorCode._("GET_ERRORS_INVALID_FILE");
-
-  /**
-   * An analysis.updateContent request contained a ChangeContentOverlay object
-   * which can't be applied, due to an edit having an offset or length that is
-   * out of range.
-   */
-  static const INVALID_OVERLAY_CHANGE = const RequestErrorCode._("INVALID_OVERLAY_CHANGE");
-
-  /**
-   * One of the method parameters was invalid.
-   */
-  static const INVALID_PARAMETER = const RequestErrorCode._("INVALID_PARAMETER");
-
-  /**
-   * A malformed request was received.
-   */
-  static const INVALID_REQUEST = const RequestErrorCode._("INVALID_REQUEST");
-
-  /**
-   * The analysis server has already been started (and hence won't accept new
-   * connections).
-   *
-   * This error is included for future expansion; at present the analysis
-   * server can only speak to one client at a time so this error will never
-   * occur.
-   */
-  static const SERVER_ALREADY_STARTED = const RequestErrorCode._("SERVER_ALREADY_STARTED");
-
-  /**
-   * An internal error occurred in the analysis server. Also see the
-   * server.error notification.
-   */
-  static const SERVER_ERROR = const RequestErrorCode._("SERVER_ERROR");
-
-  /**
-   * An "analysis.setPriorityFiles" request includes one or more files that are
-   * not being analyzed.
-   *
-   * This is a legacy error; it will be removed before the API reaches version
-   * 1.0.
-   */
-  static const UNANALYZED_PRIORITY_FILES = const RequestErrorCode._("UNANALYZED_PRIORITY_FILES");
-
-  /**
-   * A request was received which the analysis server does not recognize, or
-   * cannot handle in its current configuation.
-   */
-  static const UNKNOWN_REQUEST = const RequestErrorCode._("UNKNOWN_REQUEST");
-
-  /**
-   * The analysis server was requested to perform an action which is not
-   * supported.
-   *
-   * This is a legacy error; it will be removed before the API reaches version
-   * 1.0.
-   */
-  static const UNSUPPORTED_FEATURE = const RequestErrorCode._("UNSUPPORTED_FEATURE");
-
-  final String name;
-
-  const RequestErrorCode._(this.name);
-
-  factory RequestErrorCode(String name) {
-    switch (name) {
-      case "GET_ERRORS_INVALID_FILE":
-        return GET_ERRORS_INVALID_FILE;
-      case "INVALID_OVERLAY_CHANGE":
-        return INVALID_OVERLAY_CHANGE;
-      case "INVALID_PARAMETER":
-        return INVALID_PARAMETER;
-      case "INVALID_REQUEST":
-        return INVALID_REQUEST;
-      case "SERVER_ALREADY_STARTED":
-        return SERVER_ALREADY_STARTED;
-      case "SERVER_ERROR":
-        return SERVER_ERROR;
-      case "UNANALYZED_PRIORITY_FILES":
-        return UNANALYZED_PRIORITY_FILES;
-      case "UNKNOWN_REQUEST":
-        return UNKNOWN_REQUEST;
-      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");
-  }
-
-  @override
-  String toString() => "RequestErrorCode.$name";
-
-  String toJson() => name;
-}
-
-/**
- * SearchResult
- *
- * {
- *   "location": Location
- *   "kind": SearchResultKind
- *   "isPotential": bool
- *   "path": List<Element>
- * }
- */
-class SearchResult implements HasToJson {
-  /**
-   * The location of the code that matched the search criteria.
-   */
-  Location location;
-
-  /**
-   * The kind of element that was found or the kind of reference that was
-   * found.
-   */
-  SearchResultKind kind;
-
-  /**
-   * True if the result is a potential match but cannot be confirmed to be a
-   * match. For example, if all references to a method m defined in some class
-   * were requested, and a reference to a method m from an unknown class were
-   * found, it would be marked as being a potential match.
-   */
-  bool isPotential;
-
-  /**
-   * The elements that contain the result, starting with the most immediately
-   * enclosing ancestor and ending with the library.
-   */
-  List<Element> path;
-
-  SearchResult(this.location, this.kind, this.isPotential, this.path);
-
-  factory SearchResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      Location location;
-      if (json.containsKey("location")) {
-        location = new Location.fromJson(jsonDecoder, jsonPath + ".location", json["location"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "location");
-      }
-      SearchResultKind kind;
-      if (json.containsKey("kind")) {
-        kind = new SearchResultKind.fromJson(jsonDecoder, jsonPath + ".kind", json["kind"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "kind");
-      }
-      bool isPotential;
-      if (json.containsKey("isPotential")) {
-        isPotential = jsonDecoder._decodeBool(jsonPath + ".isPotential", json["isPotential"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isPotential");
-      }
-      List<Element> path;
-      if (json.containsKey("path")) {
-        path = jsonDecoder._decodeList(jsonPath + ".path", json["path"], (String jsonPath, Object json) => new Element.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "path");
-      }
-      return new SearchResult(location, kind, isPotential, path);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "SearchResult");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["location"] = location.toJson();
-    result["kind"] = kind.toJson();
-    result["isPotential"] = isPotential;
-    result["path"] = path.map((Element value) => value.toJson()).toList();
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SearchResult) {
-      return location == other.location &&
-          kind == other.kind &&
-          isPotential == other.isPotential &&
-          _listEqual(path, other.path, (Element a, Element b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, location.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, kind.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, isPotential.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, path.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * SearchResultKind
- *
- * enum {
- *   DECLARATION
- *   INVOCATION
- *   READ
- *   READ_WRITE
- *   REFERENCE
- *   UNKNOWN
- *   WRITE
- * }
- */
-class SearchResultKind {
-  /**
-   * The declaration of an element.
-   */
-  static const DECLARATION = const SearchResultKind._("DECLARATION");
-
-  /**
-   * The invocation of a function or method.
-   */
-  static const INVOCATION = const SearchResultKind._("INVOCATION");
-
-  /**
-   * A reference to a field, parameter or variable where it is being read.
-   */
-  static const READ = const SearchResultKind._("READ");
-
-  /**
-   * A reference to a field, parameter or variable where it is being read and
-   * written.
-   */
-  static const READ_WRITE = const SearchResultKind._("READ_WRITE");
-
-  /**
-   * A reference to an element.
-   */
-  static const REFERENCE = const SearchResultKind._("REFERENCE");
-
-  /**
-   * Some other kind of search result.
-   */
-  static const UNKNOWN = const SearchResultKind._("UNKNOWN");
-
-  /**
-   * A reference to a field, parameter or variable where it is being written.
-   */
-  static const WRITE = const SearchResultKind._("WRITE");
-
-  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");
-  }
-
-  @override
-  String toString() => "SearchResultKind.$name";
-
-  String toJson() => name;
-}
-
-/**
- * ServerService
- *
- * enum {
- *   STATUS
- * }
- */
-class ServerService {
-  static const STATUS = const ServerService._("STATUS");
-
-  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");
-  }
-
-  @override
-  String toString() => "ServerService.$name";
-
-  String toJson() => name;
-}
-
-/**
- * SourceChange
- *
- * {
- *   "message": String
- *   "edits": List<SourceFileEdit>
- *   "linkedEditGroups": List<LinkedEditGroup>
- *   "selection": optional Position
- * }
- */
-class SourceChange implements HasToJson {
-  /**
-   * A human-readable description of the change to be applied.
-   */
-  String message;
-
-  /**
-   * A list of the edits used to effect the change, grouped by file.
-   */
-  List<SourceFileEdit> edits;
-
-  /**
-   * A list of the linked editing groups used to customize the changes that
-   * were made.
-   */
-  List<LinkedEditGroup> linkedEditGroups;
-
-  /**
-   * The position that should be selected after the edits have been applied.
-   */
-  Position selection;
-
-  SourceChange(this.message, {this.edits, this.linkedEditGroups, this.selection}) {
-    if (edits == null) {
-      edits = <SourceFileEdit>[];
-    }
-    if (linkedEditGroups == null) {
-      linkedEditGroups = <LinkedEditGroup>[];
-    }
-  }
-
-  factory SourceChange.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String message;
-      if (json.containsKey("message")) {
-        message = jsonDecoder._decodeString(jsonPath + ".message", json["message"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "message");
-      }
-      List<SourceFileEdit> edits;
-      if (json.containsKey("edits")) {
-        edits = jsonDecoder._decodeList(jsonPath + ".edits", json["edits"], (String jsonPath, Object json) => new SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "edits");
-      }
-      List<LinkedEditGroup> linkedEditGroups;
-      if (json.containsKey("linkedEditGroups")) {
-        linkedEditGroups = jsonDecoder._decodeList(jsonPath + ".linkedEditGroups", json["linkedEditGroups"], (String jsonPath, Object json) => new LinkedEditGroup.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "linkedEditGroups");
-      }
-      Position selection;
-      if (json.containsKey("selection")) {
-        selection = new Position.fromJson(jsonDecoder, jsonPath + ".selection", json["selection"]);
-      }
-      return new SourceChange(message, edits: edits, linkedEditGroups: linkedEditGroups, selection: selection);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "SourceChange");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["message"] = message;
-    result["edits"] = edits.map((SourceFileEdit value) => value.toJson()).toList();
-    result["linkedEditGroups"] = linkedEditGroups.map((LinkedEditGroup value) => value.toJson()).toList();
-    if (selection != null) {
-      result["selection"] = selection.toJson();
-    }
-    return result;
-  }
-
-  /**
-   * Adds [edit] to the [FileEdit] for the given [file].
-   */
-  void addEdit(String file, int fileStamp, SourceEdit edit) =>
-      _addEditToSourceChange(this, file, fileStamp, edit);
-
-  /**
-   * Adds the given [FileEdit].
-   */
-  void addFileEdit(SourceFileEdit edit) {
-    edits.add(edit);
-  }
-
-  /**
-   * Adds the given [LinkedEditGroup].
-   */
-  void addLinkedEditGroup(LinkedEditGroup linkedEditGroup) {
-    linkedEditGroups.add(linkedEditGroup);
-  }
-
-  /**
-   * Returns the [FileEdit] for the given [file], maybe `null`.
-   */
-  SourceFileEdit getFileEdit(String file) =>
-      _getChangeFileEdit(this, file);
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SourceChange) {
-      return message == other.message &&
-          _listEqual(edits, other.edits, (SourceFileEdit a, SourceFileEdit b) => a == b) &&
-          _listEqual(linkedEditGroups, other.linkedEditGroups, (LinkedEditGroup a, LinkedEditGroup b) => a == b) &&
-          selection == other.selection;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, message.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, edits.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, linkedEditGroups.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, selection.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * SourceEdit
- *
- * {
- *   "offset": int
- *   "length": int
- *   "replacement": String
- *   "id": optional String
- * }
- */
-class SourceEdit implements HasToJson {
-  /**
-   * Get the result of applying a set of [edits] to the given [code]. Edits are
-   * applied in the order they appear in [edits].
-   */
-  static String applySequence(String code, Iterable<SourceEdit> edits) =>
-      _applySequence(code, edits);
-
-  /**
-   * The offset of the region to be modified.
-   */
-  int offset;
-
-  /**
-   * The length of the region to be modified.
-   */
-  int length;
-
-  /**
-   * The code that is to replace the specified region in the original code.
-   */
-  String replacement;
-
-  /**
-   * An identifier that uniquely identifies this source edit from other edits
-   * in the same response. This field is omitted unless a containing structure
-   * needs to be able to identify the edit for some reason.
-   *
-   * For example, some refactoring operations can produce edits that might not
-   * be appropriate (referred to as potential edits). Such edits will have an
-   * id so that they can be referenced. Edits in the same response that do not
-   * need to be referenced will not have an id.
-   */
-  String id;
-
-  SourceEdit(this.offset, this.length, this.replacement, {this.id});
-
-  factory SourceEdit.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      String replacement;
-      if (json.containsKey("replacement")) {
-        replacement = jsonDecoder._decodeString(jsonPath + ".replacement", json["replacement"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "replacement");
-      }
-      String id;
-      if (json.containsKey("id")) {
-        id = jsonDecoder._decodeString(jsonPath + ".id", json["id"]);
-      }
-      return new SourceEdit(offset, length, replacement, id: id);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "SourceEdit");
-    }
-  }
-
-  /**
-   * The end of the region to be modified.
-   */
-  int get end => offset + length;
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["offset"] = offset;
-    result["length"] = length;
-    result["replacement"] = replacement;
-    if (id != null) {
-      result["id"] = id;
-    }
-    return result;
-  }
-
-  /**
-   * Get the result of applying the edit to the given [code].
-   */
-  String apply(String code) => _applyEdit(code, this);
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SourceEdit) {
-      return offset == other.offset &&
-          length == other.length &&
-          replacement == other.replacement &&
-          id == other.id;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, replacement.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, id.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * SourceFileEdit
- *
- * {
- *   "file": FilePath
- *   "fileStamp": long
- *   "edits": List<SourceEdit>
- * }
- */
-class SourceFileEdit implements HasToJson {
-  /**
-   * The file containing the code to be modified.
-   */
-  String file;
-
-  /**
-   * The modification stamp of the file at the moment when the change was
-   * created, in milliseconds since the "Unix epoch". Will be -1 if the file
-   * did not exist and should be created. The client may use this field to make
-   * sure that the file was not changed since then, so it is safe to apply the
-   * change.
-   */
-  int fileStamp;
-
-  /**
-   * A list of the edits used to effect the change.
-   */
-  List<SourceEdit> edits;
-
-  SourceFileEdit(this.file, this.fileStamp, {this.edits}) {
-    if (edits == null) {
-      edits = <SourceEdit>[];
-    }
-  }
-
-  factory SourceFileEdit.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String file;
-      if (json.containsKey("file")) {
-        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "file");
-      }
-      int fileStamp;
-      if (json.containsKey("fileStamp")) {
-        fileStamp = jsonDecoder._decodeInt(jsonPath + ".fileStamp", json["fileStamp"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "fileStamp");
-      }
-      List<SourceEdit> edits;
-      if (json.containsKey("edits")) {
-        edits = jsonDecoder._decodeList(jsonPath + ".edits", json["edits"], (String jsonPath, Object json) => new SourceEdit.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "edits");
-      }
-      return new SourceFileEdit(file, fileStamp, edits: edits);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "SourceFileEdit");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["file"] = file;
-    result["fileStamp"] = fileStamp;
-    result["edits"] = edits.map((SourceEdit value) => value.toJson()).toList();
-    return result;
-  }
-
-  /**
-   * Adds the given [Edit] to the list.
-   */
-  void add(SourceEdit edit) => _addEditForSource(this, edit);
-
-  /**
-   * Adds the given [Edit]s.
-   */
-  void addAll(Iterable<SourceEdit> edits) =>
-      _addAllEditsForSource(this, edits);
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is SourceFileEdit) {
-      return file == other.file &&
-          fileStamp == other.fileStamp &&
-          _listEqual(edits, other.edits, (SourceEdit a, SourceEdit b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, fileStamp.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, edits.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * TypeHierarchyItem
- *
- * {
- *   "classElement": Element
- *   "displayName": optional String
- *   "memberElement": optional Element
- *   "superclass": optional int
- *   "interfaces": List<int>
- *   "mixins": List<int>
- *   "subclasses": List<int>
- * }
- */
-class TypeHierarchyItem implements HasToJson {
-  /**
-   * The class element represented by this item.
-   */
-  Element classElement;
-
-  /**
-   * The name to be displayed for the class. This field will be omitted if the
-   * display name is the same as the name of the element. The display name is
-   * different if there is additional type information to be displayed, such as
-   * type arguments.
-   */
-  String displayName;
-
-  /**
-   * The member in the class corresponding to the member on which the hierarchy
-   * was requested. This field will be omitted if the hierarchy was not
-   * requested for a member or if the class does not have a corresponding
-   * member.
-   */
-  Element memberElement;
-
-  /**
-   * The index of the item representing the superclass of this class. This
-   * field will be omitted if this item represents the class Object.
-   */
-  int superclass;
-
-  /**
-   * The indexes of the items representing the interfaces implemented by this
-   * class. The list will be empty if there are no implemented interfaces.
-   */
-  List<int> interfaces;
-
-  /**
-   * The indexes of the items representing the mixins referenced by this class.
-   * The list will be empty if there are no classes mixed in to this class.
-   */
-  List<int> mixins;
-
-  /**
-   * The indexes of the items representing the subtypes of this class. The list
-   * will be empty if there are no subtypes or if this item represents a
-   * supertype of the pivot type.
-   */
-  List<int> subclasses;
-
-  TypeHierarchyItem(this.classElement, {this.displayName, this.memberElement, this.superclass, this.interfaces, this.mixins, this.subclasses}) {
-    if (interfaces == null) {
-      interfaces = <int>[];
-    }
-    if (mixins == null) {
-      mixins = <int>[];
-    }
-    if (subclasses == null) {
-      subclasses = <int>[];
-    }
-  }
-
-  factory TypeHierarchyItem.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      Element classElement;
-      if (json.containsKey("classElement")) {
-        classElement = new Element.fromJson(jsonDecoder, jsonPath + ".classElement", json["classElement"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "classElement");
-      }
-      String displayName;
-      if (json.containsKey("displayName")) {
-        displayName = jsonDecoder._decodeString(jsonPath + ".displayName", json["displayName"]);
-      }
-      Element memberElement;
-      if (json.containsKey("memberElement")) {
-        memberElement = new Element.fromJson(jsonDecoder, jsonPath + ".memberElement", json["memberElement"]);
-      }
-      int superclass;
-      if (json.containsKey("superclass")) {
-        superclass = jsonDecoder._decodeInt(jsonPath + ".superclass", json["superclass"]);
-      }
-      List<int> interfaces;
-      if (json.containsKey("interfaces")) {
-        interfaces = jsonDecoder._decodeList(jsonPath + ".interfaces", json["interfaces"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "interfaces");
-      }
-      List<int> mixins;
-      if (json.containsKey("mixins")) {
-        mixins = jsonDecoder._decodeList(jsonPath + ".mixins", json["mixins"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "mixins");
-      }
-      List<int> subclasses;
-      if (json.containsKey("subclasses")) {
-        subclasses = jsonDecoder._decodeList(jsonPath + ".subclasses", json["subclasses"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "subclasses");
-      }
-      return new TypeHierarchyItem(classElement, displayName: displayName, memberElement: memberElement, superclass: superclass, interfaces: interfaces, mixins: mixins, subclasses: subclasses);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "TypeHierarchyItem");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["classElement"] = classElement.toJson();
-    if (displayName != null) {
-      result["displayName"] = displayName;
-    }
-    if (memberElement != null) {
-      result["memberElement"] = memberElement.toJson();
-    }
-    if (superclass != null) {
-      result["superclass"] = superclass;
-    }
-    result["interfaces"] = interfaces;
-    result["mixins"] = mixins;
-    result["subclasses"] = subclasses;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is TypeHierarchyItem) {
-      return classElement == other.classElement &&
-          displayName == other.displayName &&
-          memberElement == other.memberElement &&
-          superclass == other.superclass &&
-          _listEqual(interfaces, other.interfaces, (int a, int b) => a == b) &&
-          _listEqual(mixins, other.mixins, (int a, int b) => a == b) &&
-          _listEqual(subclasses, other.subclasses, (int a, int b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, classElement.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, displayName.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, memberElement.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, superclass.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, interfaces.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, mixins.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, subclasses.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * convertGetterToMethod feedback
- */
-class ConvertGetterToMethodFeedback {
-  @override
-  bool operator==(other) {
-    if (other is ConvertGetterToMethodFeedback) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 616032599;
-  }
-}
-/**
- * convertGetterToMethod options
- */
-class ConvertGetterToMethodOptions {
-  @override
-  bool operator==(other) {
-    if (other is ConvertGetterToMethodOptions) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 488848400;
-  }
-}
-/**
- * convertMethodToGetter feedback
- */
-class ConvertMethodToGetterFeedback {
-  @override
-  bool operator==(other) {
-    if (other is ConvertMethodToGetterFeedback) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 165291526;
-  }
-}
-/**
- * convertMethodToGetter options
- */
-class ConvertMethodToGetterOptions {
-  @override
-  bool operator==(other) {
-    if (other is ConvertMethodToGetterOptions) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 27952290;
-  }
-}
-
-/**
- * extractLocalVariable feedback
- *
- * {
- *   "names": List<String>
- *   "offsets": List<int>
- *   "lengths": List<int>
- * }
- */
-class ExtractLocalVariableFeedback extends RefactoringFeedback implements HasToJson {
-  /**
-   * The proposed names for the local variable.
-   */
-  List<String> names;
-
-  /**
-   * The offsets of the expressions that would be replaced by a reference to
-   * the variable.
-   */
-  List<int> offsets;
-
-  /**
-   * The lengths of the expressions that would be replaced by a reference to
-   * the variable. The lengths correspond to the offsets. In other words, for a
-   * given expression, if the offset of that expression is offsets[i], then the
-   * length of that expression is lengths[i].
-   */
-  List<int> lengths;
-
-  ExtractLocalVariableFeedback(this.names, this.offsets, this.lengths);
-
-  factory ExtractLocalVariableFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      List<String> names;
-      if (json.containsKey("names")) {
-        names = jsonDecoder._decodeList(jsonPath + ".names", json["names"], jsonDecoder._decodeString);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "names");
-      }
-      List<int> offsets;
-      if (json.containsKey("offsets")) {
-        offsets = jsonDecoder._decodeList(jsonPath + ".offsets", json["offsets"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offsets");
-      }
-      List<int> lengths;
-      if (json.containsKey("lengths")) {
-        lengths = jsonDecoder._decodeList(jsonPath + ".lengths", json["lengths"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "lengths");
-      }
-      return new ExtractLocalVariableFeedback(names, offsets, lengths);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractLocalVariable feedback");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["names"] = names;
-    result["offsets"] = offsets;
-    result["lengths"] = lengths;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExtractLocalVariableFeedback) {
-      return _listEqual(names, other.names, (String a, String b) => a == b) &&
-          _listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
-          _listEqual(lengths, other.lengths, (int a, int b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, names.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offsets.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, lengths.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * extractLocalVariable options
- *
- * {
- *   "name": String
- *   "extractAll": bool
- * }
- */
-class ExtractLocalVariableOptions extends RefactoringOptions implements HasToJson {
-  /**
-   * The name that the local variable should be given.
-   */
-  String name;
-
-  /**
-   * True if all occurrences of the expression within the scope in which the
-   * variable will be defined should be replaced by a reference to the local
-   * variable. The expression used to initiate the refactoring will always be
-   * replaced.
-   */
-  bool extractAll;
-
-  ExtractLocalVariableOptions(this.name, this.extractAll);
-
-  factory ExtractLocalVariableOptions.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String name;
-      if (json.containsKey("name")) {
-        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "name");
-      }
-      bool extractAll;
-      if (json.containsKey("extractAll")) {
-        extractAll = jsonDecoder._decodeBool(jsonPath + ".extractAll", json["extractAll"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "extractAll");
-      }
-      return new ExtractLocalVariableOptions(name, extractAll);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractLocalVariable options");
-    }
-  }
-
-  factory ExtractLocalVariableOptions.fromRefactoringParams(EditGetRefactoringParams refactoringParams, Request request) {
-    return new ExtractLocalVariableOptions.fromJson(
-        new RequestDecoder(request), "options", refactoringParams.options);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["name"] = name;
-    result["extractAll"] = extractAll;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExtractLocalVariableOptions) {
-      return name == other.name &&
-          extractAll == other.extractAll;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, extractAll.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * extractMethod feedback
- *
- * {
- *   "offset": int
- *   "length": int
- *   "returnType": String
- *   "names": List<String>
- *   "canCreateGetter": bool
- *   "parameters": List<RefactoringMethodParameter>
- *   "offsets": List<int>
- *   "lengths": List<int>
- * }
- */
-class ExtractMethodFeedback extends RefactoringFeedback implements HasToJson {
-  /**
-   * The offset to the beginning of the expression or statements that will be
-   * extracted.
-   */
-  int offset;
-
-  /**
-   * The length of the expression or statements that will be extracted.
-   */
-  int length;
-
-  /**
-   * The proposed return type for the method.
-   */
-  String returnType;
-
-  /**
-   * The proposed names for the method.
-   */
-  List<String> names;
-
-  /**
-   * True if a getter could be created rather than a method.
-   */
-  bool canCreateGetter;
-
-  /**
-   * The proposed parameters for the method.
-   */
-  List<RefactoringMethodParameter> parameters;
-
-  /**
-   * The offsets of the expressions or statements that would be replaced by an
-   * invocation of the method.
-   */
-  List<int> offsets;
-
-  /**
-   * The lengths of the expressions or statements that would be replaced by an
-   * invocation of the method. The lengths correspond to the offsets. In other
-   * words, for a given expression (or block of statements), if the offset of
-   * that expression is offsets[i], then the length of that expression is
-   * lengths[i].
-   */
-  List<int> lengths;
-
-  ExtractMethodFeedback(this.offset, this.length, this.returnType, this.names, this.canCreateGetter, this.parameters, this.offsets, this.lengths);
-
-  factory ExtractMethodFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      String returnType;
-      if (json.containsKey("returnType")) {
-        returnType = jsonDecoder._decodeString(jsonPath + ".returnType", json["returnType"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "returnType");
-      }
-      List<String> names;
-      if (json.containsKey("names")) {
-        names = jsonDecoder._decodeList(jsonPath + ".names", json["names"], jsonDecoder._decodeString);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "names");
-      }
-      bool canCreateGetter;
-      if (json.containsKey("canCreateGetter")) {
-        canCreateGetter = jsonDecoder._decodeBool(jsonPath + ".canCreateGetter", json["canCreateGetter"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "canCreateGetter");
-      }
-      List<RefactoringMethodParameter> parameters;
-      if (json.containsKey("parameters")) {
-        parameters = jsonDecoder._decodeList(jsonPath + ".parameters", json["parameters"], (String jsonPath, Object json) => new RefactoringMethodParameter.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "parameters");
-      }
-      List<int> offsets;
-      if (json.containsKey("offsets")) {
-        offsets = jsonDecoder._decodeList(jsonPath + ".offsets", json["offsets"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offsets");
-      }
-      List<int> lengths;
-      if (json.containsKey("lengths")) {
-        lengths = jsonDecoder._decodeList(jsonPath + ".lengths", json["lengths"], jsonDecoder._decodeInt);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "lengths");
-      }
-      return new ExtractMethodFeedback(offset, length, returnType, names, canCreateGetter, parameters, offsets, lengths);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractMethod feedback");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["offset"] = offset;
-    result["length"] = length;
-    result["returnType"] = returnType;
-    result["names"] = names;
-    result["canCreateGetter"] = canCreateGetter;
-    result["parameters"] = parameters.map((RefactoringMethodParameter value) => value.toJson()).toList();
-    result["offsets"] = offsets;
-    result["lengths"] = lengths;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExtractMethodFeedback) {
-      return offset == other.offset &&
-          length == other.length &&
-          returnType == other.returnType &&
-          _listEqual(names, other.names, (String a, String b) => a == b) &&
-          canCreateGetter == other.canCreateGetter &&
-          _listEqual(parameters, other.parameters, (RefactoringMethodParameter a, RefactoringMethodParameter b) => a == b) &&
-          _listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
-          _listEqual(lengths, other.lengths, (int a, int b) => a == b);
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, returnType.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, names.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, canCreateGetter.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameters.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, offsets.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, lengths.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * extractMethod options
- *
- * {
- *   "returnType": String
- *   "createGetter": bool
- *   "name": String
- *   "parameters": List<RefactoringMethodParameter>
- *   "extractAll": bool
- * }
- */
-class ExtractMethodOptions extends RefactoringOptions implements HasToJson {
-  /**
-   * The return type that should be defined for the method.
-   */
-  String returnType;
-
-  /**
-   * True if a getter should be created rather than a method. It is an error if
-   * this field is true and the list of parameters is non-empty.
-   */
-  bool createGetter;
-
-  /**
-   * The name that the method should be given.
-   */
-  String name;
-
-  /**
-   * The parameters that should be defined for the method.
-   *
-   * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL
-   * parameter. It is an error if a REQUIRED or POSITIONAL parameter follows a
-   * NAMED parameter.
-   *
-   * - To change the order and/or update proposed parameters, add parameters
-   *   with the same identifiers as proposed.
-   * - To add new parameters, omit their identifier.
-   * - To remove some parameters, omit them in this list.
-   */
-  List<RefactoringMethodParameter> parameters;
-
-  /**
-   * True if all occurrences of the expression or statements should be replaced
-   * by an invocation of the method. The expression or statements used to
-   * initiate the refactoring will always be replaced.
-   */
-  bool extractAll;
-
-  ExtractMethodOptions(this.returnType, this.createGetter, this.name, this.parameters, this.extractAll);
-
-  factory ExtractMethodOptions.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String returnType;
-      if (json.containsKey("returnType")) {
-        returnType = jsonDecoder._decodeString(jsonPath + ".returnType", json["returnType"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "returnType");
-      }
-      bool createGetter;
-      if (json.containsKey("createGetter")) {
-        createGetter = jsonDecoder._decodeBool(jsonPath + ".createGetter", json["createGetter"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "createGetter");
-      }
-      String name;
-      if (json.containsKey("name")) {
-        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "name");
-      }
-      List<RefactoringMethodParameter> parameters;
-      if (json.containsKey("parameters")) {
-        parameters = jsonDecoder._decodeList(jsonPath + ".parameters", json["parameters"], (String jsonPath, Object json) => new RefactoringMethodParameter.fromJson(jsonDecoder, jsonPath, json));
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "parameters");
-      }
-      bool extractAll;
-      if (json.containsKey("extractAll")) {
-        extractAll = jsonDecoder._decodeBool(jsonPath + ".extractAll", json["extractAll"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "extractAll");
-      }
-      return new ExtractMethodOptions(returnType, createGetter, name, parameters, extractAll);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractMethod options");
-    }
-  }
-
-  factory ExtractMethodOptions.fromRefactoringParams(EditGetRefactoringParams refactoringParams, Request request) {
-    return new ExtractMethodOptions.fromJson(
-        new RequestDecoder(request), "options", refactoringParams.options);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["returnType"] = returnType;
-    result["createGetter"] = createGetter;
-    result["name"] = name;
-    result["parameters"] = parameters.map((RefactoringMethodParameter value) => value.toJson()).toList();
-    result["extractAll"] = extractAll;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is ExtractMethodOptions) {
-      return returnType == other.returnType &&
-          createGetter == other.createGetter &&
-          name == other.name &&
-          _listEqual(parameters, other.parameters, (RefactoringMethodParameter a, RefactoringMethodParameter b) => a == b) &&
-          extractAll == other.extractAll;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, returnType.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, createGetter.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, parameters.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, extractAll.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * inlineLocalVariable feedback
- *
- * {
- *   "name": String
- *   "occurrences": int
- * }
- */
-class InlineLocalVariableFeedback extends RefactoringFeedback implements HasToJson {
-  /**
-   * The name of the variable being inlined.
-   */
-  String name;
-
-  /**
-   * The number of times the variable occurs.
-   */
-  int occurrences;
-
-  InlineLocalVariableFeedback(this.name, this.occurrences);
-
-  factory InlineLocalVariableFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String name;
-      if (json.containsKey("name")) {
-        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "name");
-      }
-      int occurrences;
-      if (json.containsKey("occurrences")) {
-        occurrences = jsonDecoder._decodeInt(jsonPath + ".occurrences", json["occurrences"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "occurrences");
-      }
-      return new InlineLocalVariableFeedback(name, occurrences);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "inlineLocalVariable feedback");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["name"] = name;
-    result["occurrences"] = occurrences;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is InlineLocalVariableFeedback) {
-      return name == other.name &&
-          occurrences == other.occurrences;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, occurrences.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-/**
- * inlineLocalVariable options
- */
-class InlineLocalVariableOptions {
-  @override
-  bool operator==(other) {
-    if (other is InlineLocalVariableOptions) {
-      return true;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    return 540364977;
-  }
-}
-
-/**
- * inlineMethod feedback
- *
- * {
- *   "className": optional String
- *   "methodName": String
- *   "isDeclaration": bool
- * }
- */
-class InlineMethodFeedback extends RefactoringFeedback implements HasToJson {
-  /**
-   * The name of the class enclosing the method being inlined. If not a class
-   * member is being inlined, this field will be absent.
-   */
-  String className;
-
-  /**
-   * The name of the method (or function) being inlined.
-   */
-  String methodName;
-
-  /**
-   * True if the declaration of the method is selected. So all references
-   * should be inlined.
-   */
-  bool isDeclaration;
-
-  InlineMethodFeedback(this.methodName, this.isDeclaration, {this.className});
-
-  factory InlineMethodFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String className;
-      if (json.containsKey("className")) {
-        className = jsonDecoder._decodeString(jsonPath + ".className", json["className"]);
-      }
-      String methodName;
-      if (json.containsKey("methodName")) {
-        methodName = jsonDecoder._decodeString(jsonPath + ".methodName", json["methodName"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "methodName");
-      }
-      bool isDeclaration;
-      if (json.containsKey("isDeclaration")) {
-        isDeclaration = jsonDecoder._decodeBool(jsonPath + ".isDeclaration", json["isDeclaration"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "isDeclaration");
-      }
-      return new InlineMethodFeedback(methodName, isDeclaration, className: className);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "inlineMethod feedback");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    if (className != null) {
-      result["className"] = className;
-    }
-    result["methodName"] = methodName;
-    result["isDeclaration"] = isDeclaration;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is InlineMethodFeedback) {
-      return className == other.className &&
-          methodName == other.methodName &&
-          isDeclaration == other.isDeclaration;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, className.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, methodName.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, isDeclaration.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * inlineMethod options
- *
- * {
- *   "deleteSource": bool
- *   "inlineAll": bool
- * }
- */
-class InlineMethodOptions extends RefactoringOptions implements HasToJson {
-  /**
-   * True if the method being inlined should be removed. It is an error if this
-   * field is true and inlineAll is false.
-   */
-  bool deleteSource;
-
-  /**
-   * True if all invocations of the method should be inlined, or false if only
-   * the invocation site used to create this refactoring should be inlined.
-   */
-  bool inlineAll;
-
-  InlineMethodOptions(this.deleteSource, this.inlineAll);
-
-  factory InlineMethodOptions.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      bool deleteSource;
-      if (json.containsKey("deleteSource")) {
-        deleteSource = jsonDecoder._decodeBool(jsonPath + ".deleteSource", json["deleteSource"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "deleteSource");
-      }
-      bool inlineAll;
-      if (json.containsKey("inlineAll")) {
-        inlineAll = jsonDecoder._decodeBool(jsonPath + ".inlineAll", json["inlineAll"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "inlineAll");
-      }
-      return new InlineMethodOptions(deleteSource, inlineAll);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "inlineMethod options");
-    }
-  }
-
-  factory InlineMethodOptions.fromRefactoringParams(EditGetRefactoringParams refactoringParams, Request request) {
-    return new InlineMethodOptions.fromJson(
-        new RequestDecoder(request), "options", refactoringParams.options);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["deleteSource"] = deleteSource;
-    result["inlineAll"] = inlineAll;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is InlineMethodOptions) {
-      return deleteSource == other.deleteSource &&
-          inlineAll == other.inlineAll;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, deleteSource.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, inlineAll.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * rename feedback
- *
- * {
- *   "offset": int
- *   "length": int
- *   "elementKindName": String
- *   "oldName": String
- * }
- */
-class RenameFeedback extends RefactoringFeedback implements HasToJson {
-  /**
-   * The offset to the beginning of the name selected to be renamed.
-   */
-  int offset;
-
-  /**
-   * The length of the name selected to be renamed.
-   */
-  int length;
-
-  /**
-   * The human-readable description of the kind of element being renamed (such
-   * as “class” or “function type alias”).
-   */
-  String elementKindName;
-
-  /**
-   * The old name of the element before the refactoring.
-   */
-  String oldName;
-
-  RenameFeedback(this.offset, this.length, this.elementKindName, this.oldName);
-
-  factory RenameFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      int offset;
-      if (json.containsKey("offset")) {
-        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "offset");
-      }
-      int length;
-      if (json.containsKey("length")) {
-        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "length");
-      }
-      String elementKindName;
-      if (json.containsKey("elementKindName")) {
-        elementKindName = jsonDecoder._decodeString(jsonPath + ".elementKindName", json["elementKindName"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "elementKindName");
-      }
-      String oldName;
-      if (json.containsKey("oldName")) {
-        oldName = jsonDecoder._decodeString(jsonPath + ".oldName", json["oldName"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "oldName");
-      }
-      return new RenameFeedback(offset, length, elementKindName, oldName);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "rename feedback");
-    }
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["offset"] = offset;
-    result["length"] = length;
-    result["elementKindName"] = elementKindName;
-    result["oldName"] = oldName;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RenameFeedback) {
-      return offset == other.offset &&
-          length == other.length &&
-          elementKindName == other.elementKindName &&
-          oldName == other.oldName;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, elementKindName.hashCode);
-    hash = _JenkinsSmiHash.combine(hash, oldName.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
-
-/**
- * rename options
- *
- * {
- *   "newName": String
- * }
- */
-class RenameOptions extends RefactoringOptions implements HasToJson {
-  /**
-   * The name that the element should have after the refactoring.
-   */
-  String newName;
-
-  RenameOptions(this.newName);
-
-  factory RenameOptions.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json == null) {
-      json = {};
-    }
-    if (json is Map) {
-      String newName;
-      if (json.containsKey("newName")) {
-        newName = jsonDecoder._decodeString(jsonPath + ".newName", json["newName"]);
-      } else {
-        throw jsonDecoder.missingKey(jsonPath, "newName");
-      }
-      return new RenameOptions(newName);
-    } else {
-      throw jsonDecoder.mismatch(jsonPath, "rename options");
-    }
-  }
-
-  factory RenameOptions.fromRefactoringParams(EditGetRefactoringParams refactoringParams, Request request) {
-    return new RenameOptions.fromJson(
-        new RequestDecoder(request), "options", refactoringParams.options);
-  }
-
-  Map<String, dynamic> toJson() {
-    Map<String, dynamic> result = {};
-    result["newName"] = newName;
-    return result;
-  }
-
-  @override
-  String toString() => JSON.encode(toJson());
-
-  @override
-  bool operator==(other) {
-    if (other is RenameOptions) {
-      return newName == other.newName;
-    }
-    return false;
-  }
-
-  @override
-  int get hashCode {
-    int hash = 0;
-    hash = _JenkinsSmiHash.combine(hash, newName.hashCode);
-    return _JenkinsSmiHash.finish(hash);
-  }
-}
diff --git a/pkg/analysis_server/bin/fuzz/json.dart b/pkg/analysis_server/bin/fuzz/json.dart
deleted file mode 100644
index 462bea8..0000000
--- a/pkg/analysis_server/bin/fuzz/json.dart
+++ /dev/null
@@ -1,16 +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.
-
-library services.json;
-
-/**
- * Instances of the class [HasToJson] implement [toJson] method that returns
- * a JSON presentation.
- */
-abstract class HasToJson {
-  /**
-   * Returns a JSON presentation of the object.
-   */
-  Map<String, Object> toJson();
-}
diff --git a/pkg/analysis_server/bin/fuzz/protocol.dart b/pkg/analysis_server/bin/fuzz/protocol.dart
deleted file mode 100644
index b41b28e..0000000
--- a/pkg/analysis_server/bin/fuzz/protocol.dart
+++ /dev/null
@@ -1,771 +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.
-
-library protocol;
-
-import 'dart:collection';
-import 'dart:convert';
-
-import 'json.dart';
-
-part 'generated_protocol.dart';
-
-
-final Map<String, RefactoringKind> REQUEST_ID_REFACTORING_KINDS =
-    new HashMap<String, RefactoringKind>();
-
-/**
- * Translate the input [map], applying [keyCallback] to all its keys, and
- * [valueCallback] to all its values.
- */
-mapMap(Map map, {dynamic keyCallback(key), dynamic valueCallback(value)}) {
-  Map result = {};
-  map.forEach((key, value) {
-    if (keyCallback != null) {
-      key = keyCallback(key);
-    }
-    if (valueCallback != null) {
-      value = valueCallback(value);
-    }
-    result[key] = value;
-  });
-  return result;
-}
-
-/**
- * Adds the given [sourceEdits] to the list in [sourceFileEdit].
- */
-void _addAllEditsForSource(SourceFileEdit sourceFileEdit,
-    Iterable<SourceEdit> edits) {
-  edits.forEach(sourceFileEdit.add);
-}
-
-/**
- * Adds the given [sourceEdit] to the list in [sourceFileEdit].
- */
-void _addEditForSource(SourceFileEdit sourceFileEdit, SourceEdit sourceEdit) {
-  List<SourceEdit> edits = sourceFileEdit.edits;
-  int index = 0;
-  while (index < edits.length && edits[index].offset > sourceEdit.offset) {
-    index++;
-  }
-  edits.insert(index, sourceEdit);
-}
-
-/**
- * Adds [edit] to the [FileEdit] for the given [file].
- */
-void _addEditToSourceChange(SourceChange change, String file, int fileStamp,
-    SourceEdit edit) {
-  SourceFileEdit fileEdit = change.getFileEdit(file);
-  if (fileEdit == null) {
-    fileEdit = new SourceFileEdit(file, fileStamp);
-    change.addFileEdit(fileEdit);
-  }
-  fileEdit.add(edit);
-}
-
-/**
- * Get the result of applying the edit to the given [code].  Access via
- * SourceEdit.apply().
- */
-String _applyEdit(String code, SourceEdit edit) {
-  if (edit.length < 0) {
-    throw new RangeError('length is negative');
-  }
-  return code.substring(0, edit.offset) +
-      edit.replacement +
-      code.substring(edit.end);
-}
-
-/**
- * Get the result of applying a set of [edits] to the given [code].  Edits
- * are applied in the order they appear in [edits].  Access via
- * SourceEdit.applySequence().
- */
-String _applySequence(String code, Iterable<SourceEdit> edits) {
-  edits.forEach((SourceEdit edit) {
-    code = edit.apply(code);
-  });
-  return code;
-}
-
-/**
- * Returns the [FileEdit] for the given [file], maybe `null`.
- */
-SourceFileEdit _getChangeFileEdit(SourceChange change, String file) {
-  for (SourceFileEdit fileEdit in change.edits) {
-    if (fileEdit.file == file) {
-      return fileEdit;
-    }
-  }
-  return null;
-}
-
-/**
- * Compare the lists [listA] and [listB], using [itemEqual] to compare
- * list elements.
- */
-bool _listEqual(List listA, List listB, bool itemEqual(a, b)) {
-  if (listA.length != listB.length) {
-    return false;
-  }
-  for (int i = 0; i < listA.length; i++) {
-    if (!itemEqual(listA[i], listB[i])) {
-      return false;
-    }
-  }
-  return true;
-}
-
-/**
- * Compare the maps [mapA] and [mapB], using [valueEqual] to compare map
- * values.
- */
-bool _mapEqual(Map mapA, Map mapB, bool valueEqual(a, b)) {
-  if (mapA.length != mapB.length) {
-    return false;
-  }
-  for (var key in mapA.keys) {
-    if (!mapB.containsKey(key)) {
-      return false;
-    }
-    if (!valueEqual(mapA[key], mapB[key])) {
-      return false;
-    }
-  }
-  return true;
-}
-
-RefactoringProblemSeverity
-    _maxRefactoringProblemSeverity(RefactoringProblemSeverity a,
-    RefactoringProblemSeverity b) {
-  if (b == null) {
-    return a;
-  }
-  if (a == null) {
-    return b;
-  } else if (a == RefactoringProblemSeverity.INFO) {
-    return b;
-  } else if (a == RefactoringProblemSeverity.WARNING) {
-    if (b == RefactoringProblemSeverity.ERROR ||
-        b == RefactoringProblemSeverity.FATAL) {
-      return b;
-    }
-  } else if (a == RefactoringProblemSeverity.ERROR) {
-    if (b == RefactoringProblemSeverity.FATAL) {
-      return b;
-    }
-  }
-  return a;
-}
-
-/**
- * Create a [RefactoringFeedback] corresponding the given [kind].
- */
-RefactoringFeedback _refactoringFeedbackFromJson(JsonDecoder jsonDecoder,
-    String jsonPath, Object json, Map feedbackJson) {
-  String requestId;
-  if (jsonDecoder is ResponseDecoder) {
-    requestId = jsonDecoder.response.id;
-  }
-  RefactoringKind kind = REQUEST_ID_REFACTORING_KINDS.remove(requestId);
-  if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
-    return new ExtractLocalVariableFeedback.fromJson(
-        jsonDecoder,
-        jsonPath,
-        json);
-  }
-  if (kind == RefactoringKind.EXTRACT_METHOD) {
-    return new ExtractMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
-  }
-  if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) {
-    return new InlineLocalVariableFeedback.fromJson(
-        jsonDecoder,
-        jsonPath,
-        json);
-  }
-  if (kind == RefactoringKind.INLINE_METHOD) {
-    return new InlineMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
-  }
-  if (kind == RefactoringKind.RENAME) {
-    return new RenameFeedback.fromJson(jsonDecoder, jsonPath, json);
-  }
-  return null;
-}
-
-
-/**
- * Create a [RefactoringOptions] corresponding the given [kind].
- */
-RefactoringOptions _refactoringOptionsFromJson(JsonDecoder jsonDecoder,
-    String jsonPath, Object json, RefactoringKind kind) {
-  if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
-    return new ExtractLocalVariableOptions.fromJson(
-        jsonDecoder,
-        jsonPath,
-        json);
-  }
-  if (kind == RefactoringKind.EXTRACT_METHOD) {
-    return new ExtractMethodOptions.fromJson(jsonDecoder, jsonPath, json);
-  }
-  if (kind == RefactoringKind.INLINE_METHOD) {
-    return new InlineMethodOptions.fromJson(jsonDecoder, jsonPath, json);
-  }
-  if (kind == RefactoringKind.RENAME) {
-    return new RenameOptions.fromJson(jsonDecoder, jsonPath, json);
-  }
-  return null;
-}
-
-/**
- * Type of callbacks used to decode parts of JSON objects.  [jsonPath] is a
- * string describing the part of the JSON object being decoded, and [value] is
- * the part to decode.
- */
-typedef Object JsonDecoderCallback(String jsonPath, Object value);
-
-/**
- * Base class for decoding JSON objects.  The derived class must implement
- * error reporting logic.
- */
-abstract class JsonDecoder {
-  /**
-   * Create an exception to throw if the JSON object at [jsonPath] fails to
-   * match the API definition of [expected].
-   */
-  dynamic mismatch(String jsonPath, String expected);
-
-  /**
-   * Create an exception to throw if the JSON object at [jsonPath] is missing
-   * the key [key].
-   */
-  dynamic missingKey(String jsonPath, String key);
-
-  /**
-   * Decode a JSON object that is expected to be a boolean.  The strings "true"
-   * and "false" are also accepted.
-   */
-  bool _decodeBool(String jsonPath, Object json) {
-    if (json is bool) {
-      return json;
-    } else if (json == 'true') {
-      return true;
-    } else if (json == 'false') {
-      return false;
-    }
-    throw mismatch(jsonPath, 'bool');
-  }
-
-  /**
-   * Decode a JSON object that is expected to be an integer.  A string
-   * representation of an integer is also accepted.
-   */
-  int _decodeInt(String jsonPath, Object json) {
-    if (json is int) {
-      return json;
-    } else if (json is String) {
-      return int.parse(json, onError: (String value) {
-        throw mismatch(jsonPath, 'int');
-      });
-    }
-    throw mismatch(jsonPath, 'int');
-  }
-
-  /**
-   * Decode a JSON object that is expected to be a List.  [decoder] is used to
-   * decode the items in the list.
-   */
-  List _decodeList(String jsonPath, Object json,
-      [JsonDecoderCallback decoder]) {
-    if (json == null) {
-      return [];
-    } else if (json is List) {
-      List result = [];
-      for (int i = 0; i < json.length; i++) {
-        result.add(decoder('$jsonPath[$i]', json[i]));
-      }
-      return result;
-    } else {
-      throw mismatch(jsonPath, 'List');
-    }
-  }
-
-  /**
-   * Decode a JSON object that is expected to be a Map.  [keyDecoder] is used
-   * to decode the keys, and [valueDecoder] is used to decode the values.
-   */
-  Map _decodeMap(String jsonPath, Object json, {JsonDecoderCallback keyDecoder,
-      JsonDecoderCallback valueDecoder}) {
-    if (json == null) {
-      return {};
-    } else if (json is Map) {
-      Map result = {};
-      json.forEach((String key, value) {
-        Object decodedKey;
-        if (keyDecoder != null) {
-          decodedKey = keyDecoder('$jsonPath.key', key);
-        } else {
-          decodedKey = key;
-        }
-        if (valueDecoder != null) {
-          value = valueDecoder('$jsonPath[${JSON.encode(key)}]', value);
-        }
-        result[decodedKey] = value;
-      });
-      return result;
-    } else {
-      throw mismatch(jsonPath, 'Map');
-    }
-  }
-
-  /**
-   * Decode a JSON object that is expected to be a string.
-   */
-  String _decodeString(String jsonPath, Object json) {
-    if (json is String) {
-      return json;
-    } else {
-      throw mismatch(jsonPath, 'String');
-    }
-  }
-
-  /**
-   * Decode a JSON object that is expected to be one of several choices,
-   * where the choices are disambiguated by the contents of the field [field].
-   * [decoders] is a map from each possible string in the field to the decoder
-   * that should be used to decode the JSON object.
-   */
-  Object _decodeUnion(String jsonPath, Map json, String field, Map<String,
-      JsonDecoderCallback> decoders) {
-    if (json is Map) {
-      if (!json.containsKey(field)) {
-        throw missingKey(jsonPath, field);
-      }
-      var disambiguatorPath = '$jsonPath[${JSON.encode(field)}]';
-      String disambiguator = _decodeString(disambiguatorPath, json[field]);
-      if (!decoders.containsKey(disambiguator)) {
-        throw mismatch(disambiguatorPath, 'One of: ${decoders.keys.toList()}');
-      }
-      return decoders[disambiguator](jsonPath, json);
-    } else {
-      throw mismatch(jsonPath, 'Map');
-    }
-  }
-}
-
-
-/**
- * Instances of the class [Notification] represent a notification from the
- * server about an event that occurred.
- */
-class Notification {
-  /**
-   * The name of the JSON attribute containing the name of the event that
-   * triggered the notification.
-   */
-  static const String EVENT = 'event';
-
-  /**
-   * The name of the JSON attribute containing the result values.
-   */
-  static const String PARAMS = 'params';
-
-  /**
-   * The name of the event that triggered the notification.
-   */
-  final String event;
-
-  /**
-   * A table mapping the names of notification parameters to their values, or
-   * null if there are no notification parameters.
-   */
-  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 upon the given JSON data
-   */
-  factory Notification.fromJson(Map<String, Object> json) {
-    return new Notification(
-        json[Notification.EVENT],
-        json[Notification.PARAMS]);
-  }
-
-  /**
-   * Return a table representing the structure of the Json object that will be
-   * sent to the client to represent this response.
-   */
-  Map<String, Object> toJson() {
-    Map<String, Object> jsonObject = {};
-    jsonObject[EVENT] = event;
-    if (_params != null) {
-      jsonObject[PARAMS] = _params;
-    }
-    return jsonObject;
-  }
-}
-
-
-/**
- * Instances of the class [Request] represent a request that was received.
- */
-class Request {
-  /**
-   * The name of the JSON attribute containing the id of the request.
-   */
-  static const String ID = 'id';
-
-  /**
-   * The name of the JSON attribute containing the name of the request.
-   */
-  static const String METHOD = 'method';
-
-  /**
-   * The name of the JSON attribute containing the request parameters.
-   */
-  static const String PARAMS = 'params';
-
-  /**
-   * The 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;
-
-  /**
-   * Initialize a newly created [Request] to have the given [id] and [method]
-   * name.  If [params] is supplied, it is used as the "params" map for the
-   * request.  Otherwise an empty "params" map is allocated.
-   */
-  Request(this.id, this.method, [Map<String, Object> params])
-      : _params = params != null ? params : new HashMap<String, Object>();
-
-  /**
-   * Return a request parsed from the given [data], or `null` if the [data] is
-   * not a valid json representation of a request. The [data] is expected to
-   * have the following format:
-   *
-   *   {
-   *     'id': String,
-   *     'method': methodName,
-   *     'params': {
-   *       paramter_name: value
-   *     }
-   *   }
-   *
-   * where the parameters are optional and can contain any number of name/value
-   * pairs.
-   */
-  factory Request.fromString(String data) {
-    try {
-      var result = JSON.decode(data);
-      if (result is! Map) {
-        return null;
-      }
-      var id = result[Request.ID];
-      var method = result[Request.METHOD];
-      if (id is! String || method is! String) {
-        return null;
-      }
-      var params = result[Request.PARAMS];
-      if (params is Map || params == null) {
-        return new Request(id, method, params);
-      } else {
-        return null;
-      }
-    } catch (exception) {
-      return null;
-    }
-  }
-
-  /**
-   * Return a table representing the structure of the Json object that will be
-   * sent to the client to represent this response.
-   */
-  Map<String, Object> toJson() {
-    Map<String, Object> jsonObject = new HashMap<String, Object>();
-    jsonObject[ID] = id;
-    jsonObject[METHOD] = method;
-    if (_params.isNotEmpty) {
-      jsonObject[PARAMS] = _params;
-    }
-    return jsonObject;
-  }
-}
-
-/**
- * JsonDecoder for decoding requests.  Errors are reporting by throwing a
- * [RequestFailure].
- */
-class RequestDecoder extends JsonDecoder {
-  /**
-   * The request being deserialized.
-   */
-  final Request _request;
-
-  RequestDecoder(this._request);
-
-  @override
-  dynamic mismatch(String jsonPath, String expected) {
-    return new RequestFailure(
-        new Response.invalidParameter(_request, jsonPath, 'be $expected'));
-  }
-
-  @override
-  dynamic missingKey(String jsonPath, String key) {
-    return new RequestFailure(
-        new Response.invalidParameter(
-            _request,
-            jsonPath,
-            'contain key ${JSON.encode(key)}'));
-  }
-}
-
-
-/**
- * Instances of the class [RequestFailure] represent an exception that occurred
- * during the handling of a request that requires that an error be returned to
- * the client.
- */
-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);
-}
-
-/**
- * Instances of the class [RequestHandler] implement a handler that can handle
- * requests and produce responses for them.
- */
-abstract class RequestHandler {
-  /**
-   * Attempt to handle the given [request]. If the request is not recognized by
-   * this handler, return `null` so that other handlers will be given a chance
-   * to handle it. Otherwise, return the response that should be passed back to
-   * the client.
-   */
-  Response handleRequest(Request request);
-}
-
-/**
- * Instances of the class [Response] represent a response to a request.
- */
-class Response {
-  /**
-   * The [Response] instance that is returned when a real [Response] cannot
-   * be provided at the moment.
-   */
-  static final Response DELAYED_RESPONSE = new Response('DELAYED_RESPONSE');
-
-  /**
-   * The name of the JSON attribute containing the id of the request for which
-   * this is a response.
-   */
-  static const String ID = 'id';
-
-  /**
-   * The name of the JSON attribute containing the error message.
-   */
-  static const String ERROR = 'error';
-
-  /**
-   * The name of the JSON attribute containing the result values.
-   */
-  static const String RESULT = 'result';
-
-  /**
-   * The unique identifier used to identify the request that this response is
-   * associated with.
-   */
-  final String id;
-
-  /**
-   * The error that was caused by attempting to handle the request, or `null` if
-   * there was no error.
-   */
-  final RequestError error;
-
-  /**
-   * A table mapping the names of result fields to their values.  Should be
-   * null if there is no result to send.
-   */
-  Map<String, Object> _result;
-
-  /**
-   * Initialize a newly created instance to represent a response to a request
-   * with the given [id].  If [_result] is provided, it will be used as the
-   * result; otherwise an empty result will be used.  If an [error] is provided
-   * then the response will represent an error condition.
-   */
-  Response(this.id, {Map<String, Object> result, this.error})
-      : _result = result;
-
-  /**
-   * Initialize a newly created instance based upon the given JSON data
-   */
-  factory Response.fromJson(Map<String, Object> json) {
-    try {
-      Object id = json[Response.ID];
-      if (id is! String) {
-        return null;
-      }
-      Object error = json[Response.ERROR];
-      RequestError decodedError;
-      if (error is Map) {
-        decodedError =
-            new RequestError.fromJson(new ResponseDecoder(null), '.error', error);
-      }
-      Object result = json[Response.RESULT];
-      Map<String, Object> decodedResult;
-      if (result is Map) {
-        decodedResult = result;
-      }
-      return new Response(id, error: decodedError, result: decodedResult);
-    } catch (exception) {
-      return null;
-    }
-  }
-
-  /**
-   * Initialize a newly created instance to represent the
-   * GET_ERRORS_INVALID_FILE error condition.
-   */
-  Response.getErrorsInvalidFile(Request request)
-      : this(
-          request.id,
-          error: new RequestError(
-              RequestErrorCode.GET_ERRORS_INVALID_FILE,
-              'Error during `analysis.getErrors`: invalid file.'));
-
-  /**
-   * Initialize a newly created instance to represent an error condition caused
-   * by a [request] that had invalid parameter.  [path] is the path to the
-   * invalid parameter, in Javascript notation (e.g. "foo.bar" means that the
-   * parameter "foo" contained a key "bar" whose value was the wrong type).
-   * [expectation] is a description of the type of data that was expected.
-   */
-  Response.invalidParameter(Request request, String path, String expectation)
-      : this(
-          request.id,
-          error: new RequestError(
-              RequestErrorCode.INVALID_PARAMETER,
-              "Expected parameter $path to $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 an error condition caused
-   * by a `analysis.setPriorityFiles` [request] that includes one or more files
-   * that are not being analyzed.
-   */
-  Response.unanalyzedPriorityFiles(Request request, String fileNames)
-      : this(
-          request.id,
-          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'));
-
-  Response.unsupportedFeature(String requestId, String message)
-      : this(
-          requestId,
-          error: new RequestError(RequestErrorCode.UNSUPPORTED_FEATURE, message));
-
-  /**
-   * Return a table representing the structure of the Json object that will be
-   * sent to the client to represent this response.
-   */
-  Map<String, Object> toJson() {
-    Map<String, Object> jsonObject = new HashMap<String, Object>();
-    jsonObject[ID] = id;
-    if (error != null) {
-      jsonObject[ERROR] = error.toJson();
-    }
-    if (_result != null) {
-      jsonObject[RESULT] = _result;
-    }
-    return jsonObject;
-  }
-}
-
-/**
- * JsonDecoder for decoding responses from the server.  This is intended to be
- * used only for testing.  Errors are reported using bare [Exception] objects.
- */
-class ResponseDecoder extends JsonDecoder {
-  final Response response;
-
-  ResponseDecoder(this.response);
-
-  @override
-  dynamic mismatch(String jsonPath, String expected) {
-    return new Exception('Expected $expected at $jsonPath');
-  }
-
-  @override
-  dynamic missingKey(String jsonPath, String key) {
-    return new Exception('Missing key $key at $jsonPath');
-  }
-}
-
-/**
- * Jenkins hash function, optimized for small integers.  Borrowed from
- * sdk/lib/math/jenkins_smi_hash.dart.
- *
- * TODO(paulberry): Move to somewhere that can be shared with other code.
- */
-class _JenkinsSmiHash {
-  static int combine(int hash, int value) {
-    hash = 0x1fffffff & (hash + value);
-    hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
-    return hash ^ (hash >> 6);
-  }
-
-  static int finish(int hash) {
-    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
-    hash = hash ^ (hash >> 11);
-    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
-  }
-
-  static int hash2(a, b) => finish(combine(combine(0, a), b));
-
-  static int hash4(a, b, c, d) =>
-      finish(combine(combine(combine(combine(0, a), b), c), d));
-}
diff --git a/pkg/analysis_server/bin/fuzz/server_manager.dart b/pkg/analysis_server/bin/fuzz/server_manager.dart
index c59e18c..59c1b03 100644
--- a/pkg/analysis_server/bin/fuzz/server_manager.dart
+++ b/pkg/analysis_server/bin/fuzz/server_manager.dart
@@ -9,10 +9,9 @@
 import 'dart:io';
 
 import 'package:matcher/matcher.dart';
-
-import 'byte_stream_channel.dart';
-import 'channel.dart';
-import 'protocol.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:analysis_server/src/channel/channel.dart';
+import 'package:analysis_server/src/channel/byte_stream_channel.dart';
 
 part 'logging_client_channel.dart';
 
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 598a9e6..12552c5 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -451,6 +451,7 @@
   "params": {
     "<b>included</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
     "<b>excluded</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
+    "<b>packageRoots</b>": <span style="color:#999999">optional</span> Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_FilePath">FilePath</a>&gt;
   }
 }</pre><br><pre>response: {
   "id": String
@@ -498,6 +499,26 @@
               A list of the files and directories within the
               included directories that should not be analyzed.
             </p>
+          </dd><dt class="field"><b><i>packageRoots ( <span style="color:#999999">optional</span> Map&lt;<a href="#type_FilePath">FilePath</a>, <a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
+            
+            <p>
+              A mapping from source directories to target directories
+              that should override the normal package: URI resolution
+              mechanism.  The analyzer will behave as though each
+              source directory in the map contains a special
+              pubspec.yaml file which resolves any package: URI to the
+              corresponding path within the target directory.  The
+              effect is the same as specifying the target directory as
+              a "--package_root" parameter to the Dart VM when
+              executing any Dart file inside the source directory.
+            </p>
+            <p>
+              Files in any directories that are not overridden by this
+              mapping have their package: URI's resolved using the
+              normal pubspec.yaml mechanism.  If this field is absent,
+              or the empty map is specified, that indicates that the
+              normal pubspec.yaml mechanism should always be used.
+            </p>
           </dd></dl></dd><dt class="request">analysis.setPriorityFiles</dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "analysis.setPriorityFiles"
diff --git a/pkg/analysis_server/lib/driver.dart b/pkg/analysis_server/lib/driver.dart
index e210777..284cf60 100644
--- a/pkg/analysis_server/lib/driver.dart
+++ b/pkg/analysis_server/lib/driver.dart
@@ -13,7 +13,6 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/sdk_io.dart';
 import 'package:args/args.dart';
-import 'package:logging/logging.dart';
 
 /**
  * The [Driver] class represents a single running instance of the analysis
@@ -27,22 +26,28 @@
   static const BINARY_NAME = 'server';
 
   /**
+   * The name of the option used to enable instrumentation.
+   */
+  static const String ENABLE_INSTRUMENTATION_OPTION = "enable-instrumentation";
+
+  /**
    * The name of the option used to print usage information.
    */
   static const String HELP_OPTION = "help";
 
   /**
+   * The name of the option used to specify the log file to which
+   * instrumentation data is to be written.
+   */
+  static const String INSTRUMENTATION_LOG_FILE_OPTION = "instrumentation-log-file";
+
+  /**
    * The name of the option used to specify the port to which the server will
    * connect.
    */
   static const String PORT_OPTION = "port";
 
   /**
-   * The name of the option used to specify the log file.
-   */
-  static const String LOG_FILE_OPTION = "log";
-
-  /**
    * The path to the SDK.
    * TODO(paulberry): get rid of this once the 'analysis.updateSdks' request is
    * operational.
@@ -63,32 +68,31 @@
    */
   void start(List<String> args) {
     ArgParser parser = new ArgParser();
-    parser.addFlag(HELP_OPTION, help:
-        "print this help message without starting a server", defaultsTo: false,
+    parser.addFlag(ENABLE_INSTRUMENTATION_OPTION,
+        help: "enable sending instrumentation information to a server",
+        defaultsTo: false,
         negatable: false);
-    parser.addOption(PORT_OPTION, help:
-        "[port] the port on which the server will listen");
-    parser.addOption(LOG_FILE_OPTION, help:
-        "[path] file to log debugging messages to");
-    parser.addOption(SDK_OPTION, help:
-        "[path] path to the sdk");
+    parser.addFlag(HELP_OPTION,
+        help: "print this help message without starting a server",
+        defaultsTo: false,
+        negatable: false);
+    parser.addOption(INSTRUMENTATION_LOG_FILE_OPTION,
+        help: "[path] the file to which instrumentation data will be logged");
+    parser.addOption(PORT_OPTION,
+        help: "[port] the port on which the server will listen");
+    parser.addOption(SDK_OPTION,
+        help: "[path] the path to the sdk");
 
     ArgResults results = parser.parse(args);
     if (results[HELP_OPTION]) {
       _printUsage(parser);
       return;
     }
-    if (results[LOG_FILE_OPTION] != null) {
-      try {
-        File file = new File(results[LOG_FILE_OPTION]);
-        IOSink sink = file.openWrite();
-        Logger.root.onRecord.listen((LogRecord record) {
-          sink.writeln(record);
-        });
-      } catch (exception) {
-        print('Could not open log file: $exception');
-        exitCode = 1;
-        return;
+    if (results[ENABLE_INSTRUMENTATION_OPTION]) {
+      if (results[INSTRUMENTATION_LOG_FILE_OPTION] != null) {
+        // TODO(brianwilkerson) Initialize the instrumentation system with logging.
+      } else {
+        // TODO(brianwilkerson) Initialize the instrumentation system without logging.
       }
     }
     int port;
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index f2e2da6..6daf3e1 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -436,9 +436,8 @@
           channel.sendResponse(exception.response);
           return;
         } catch (exception, stackTrace) {
-          RequestError error = new RequestError(
-              RequestErrorCode.SERVER_ERROR,
-              exception);
+          RequestError error =
+              new RequestError(RequestErrorCode.SERVER_ERROR, exception);
           if (stackTrace != null) {
             error.stackTrace = stackTrace.toString();
           }
@@ -563,9 +562,12 @@
    * projects/contexts support.
    */
   void setAnalysisRoots(String requestId, List<String> includedPaths,
-      List<String> excludedPaths) {
+      List<String> excludedPaths, Map<String, String> packageRoots) {
     try {
-      contextDirectoryManager.setRoots(includedPaths, excludedPaths);
+      contextDirectoryManager.setRoots(
+          includedPaths,
+          excludedPaths,
+          packageRoots);
     } on UnimplementedError catch (e) {
       throw new RequestFailure(
           new Response.unsupportedFeature(requestId, e.message));
@@ -651,10 +653,11 @@
                 sendAnalysisNotificationOccurrences(this, file, dartUnit);
                 break;
               case AnalysisService.OUTLINE:
+                LineInfo lineInfo = context.getLineInfo(source);
                 sendAnalysisNotificationOutline(
                     this,
-                    context,
                     source,
+                    lineInfo,
                     dartUnit);
                 break;
               case AnalysisService.OVERRIDES:
@@ -684,7 +687,7 @@
   AnalysisContext getAnalysisContext(String path) {
     // try to find a containing context
     for (Folder folder in folderMap.keys) {
-      if (path.startsWith(folder.path)) {
+      if (folder.contains(path)) {
         return folderMap[folder];
       }
     }
diff --git a/pkg/analysis_server/lib/src/computer/computer_occurrences.dart b/pkg/analysis_server/lib/src/computer/computer_occurrences.dart
index a4d53e0..d1c941f 100644
--- a/pkg/analysis_server/lib/src/computer/computer_occurrences.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_occurrences.dart
@@ -37,10 +37,10 @@
   }
 
   void _addOccurrence(Element element, int offset) {
+    element = _canonicalizeElement(element);
     if (element == null || element == DynamicElementImpl.instance) {
       return;
     }
-    element = _canonicalizeElement(element);
     List<int> offsets = _elementsOffsets[element];
     if (offsets == null) {
       offsets = <int>[];
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index da43b61..bb16047 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -8,7 +8,6 @@
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart' as engine;
-import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 
 
@@ -16,21 +15,19 @@
  * A computer for [CompilationUnit] outline.
  */
 class DartUnitOutlineComputer {
-  final CompilationUnit _unit;
-  String file;
-  LineInfo lineInfo;
+  final String file;
+  final CompilationUnit unit;
+  final LineInfo lineInfo;
 
-  DartUnitOutlineComputer(AnalysisContext context, Source source, this._unit) {
-    file = source.fullName;
-    lineInfo = context.getLineInfo(source);
-  }
+  DartUnitOutlineComputer(Source source, this.lineInfo, this.unit)
+      : file = source.fullName;
 
   /**
    * Returns the computed outline, not `null`.
    */
   Outline compute() {
     List<Outline> unitContents = <Outline>[];
-    for (CompilationUnitMember unitMember in _unit.declarations) {
+    for (CompilationUnitMember unitMember in unit.declarations) {
       if (unitMember is ClassDeclaration) {
         ClassDeclaration classDeclaration = unitMember;
         List<Outline> classContents = <Outline>[];
@@ -328,11 +325,11 @@
         ElementKind.COMPILATION_UNIT,
         '<unit>',
         Element.makeFlags(),
-        location: _getLocationNode(_unit));
+        location: _getLocationNode(unit));
     return new Outline(
         element,
-        _unit.offset,
-        _unit.length,
+        unit.offset,
+        unit.length,
         children: nullIfEmpty(unitContents));
   }
 
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index c46d214..7b9b4e1 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -61,6 +61,11 @@
   List<String> includedPaths = <String>[];
 
   /**
+   * The map of package roots most recently passed to [setRoots].
+   */
+  Map<String, String> packageRoots = <String, String>{};
+
+  /**
    * Provider which is used to determine the mapping from package name to
    * package folder.
    */
@@ -116,14 +121,17 @@
     contextFolders.forEach(_destroyContext);
 
     // Rebuild contexts based on the data last sent to setRoots().
-    setRoots(includedPaths, excludedPaths);
+    setRoots(includedPaths, excludedPaths, packageRoots);
   }
 
   /**
    * Change the set of paths which should be used as starting points to
    * determine the context directories.
    */
-  void setRoots(List<String> includedPaths, List<String> excludedPaths) {
+  void setRoots(List<String> includedPaths, List<String> excludedPaths,
+      Map<String, String> packageRoots) {
+    // TODO(paulberry): process package roots.
+    this.packageRoots = packageRoots;
     List<Folder> contextFolders = _contexts.keys.toList();
     // included
     Set<Folder> includedFolders = new HashSet<Folder>();
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index 4ea12bf..3d3deb5 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -47,10 +47,10 @@
           if (errorInfo == null) {
             server.sendResponse(new Response.getErrorsInvalidFile(request));
           } else {
-            errors = doAnalysisError_listFromEngine(errorInfo.lineInfo,
-                errorInfo.errors);
-            server.sendResponse(new AnalysisGetErrorsResult(errors).toResponse(
-                request.id));
+            errors =
+                doAnalysisError_listFromEngine(errorInfo.lineInfo, errorInfo.errors);
+            server.sendResponse(
+                new AnalysisGetErrorsResult(errors).toResponse(request.id));
           }
           break;
         case AnalysisDoneReason.CONTEXT_REMOVED:
@@ -128,7 +128,11 @@
   Response setAnalysisRoots(Request request) {
     var params = new AnalysisSetAnalysisRootsParams.fromRequest(request);
     // continue in server
-    server.setAnalysisRoots(request.id, params.included, params.excluded);
+    server.setAnalysisRoots(
+        request.id,
+        params.included,
+        params.excluded,
+        params.packageRoots == null ? {} : params.packageRoots);
     return new AnalysisSetAnalysisRootsResult().toResponse(request.id);
   }
 
@@ -147,9 +151,9 @@
   Response setSubscriptions(Request request) {
     var params = new AnalysisSetSubscriptionsParams.fromRequest(request);
     // parse subscriptions
-    Map<AnalysisService, Set<String>> subMap =
-        mapMap(params.subscriptions, valueCallback:
-          (List<String> subscriptions) => subscriptions.toSet());
+    Map<AnalysisService, Set<String>> subMap = mapMap(
+        params.subscriptions,
+        valueCallback: (List<String> subscriptions) => subscriptions.toSet());
     server.setAnalysisSubscriptions(subMap);
     return new AnalysisSetSubscriptionsResult().toResponse(request.id);
   }
diff --git a/pkg/analysis_server/lib/src/domain_execution.dart b/pkg/analysis_server/lib/src/domain_execution.dart
index 4c77144..d4c371a 100644
--- a/pkg/analysis_server/lib/src/domain_execution.dart
+++ b/pkg/analysis_server/lib/src/domain_execution.dart
@@ -105,7 +105,7 @@
             'file',
             'Either file or uri must be provided, but not both');
       }
-      Source source = server.getSource(path);
+      Source source = server.getSource(params.file);
       String uri = context.sourceFactory.restoreUri(source).toString();
       return new ExecutionMapUriResult(uri: uri).toResponse(request.id);
     } else if (params.uri != null) {
diff --git a/pkg/analysis_server/lib/src/generated_protocol.dart b/pkg/analysis_server/lib/src/generated_protocol.dart
index c1a12ff..11aaca3 100644
--- a/pkg/analysis_server/lib/src/generated_protocol.dart
+++ b/pkg/analysis_server/lib/src/generated_protocol.dart
@@ -741,6 +741,7 @@
  * {
  *   "included": List<FilePath>
  *   "excluded": List<FilePath>
+ *   "packageRoots": optional Map<FilePath, FilePath>
  * }
  */
 class AnalysisSetAnalysisRootsParams implements HasToJson {
@@ -755,7 +756,23 @@
    */
   List<String> excluded;
 
-  AnalysisSetAnalysisRootsParams(this.included, this.excluded);
+  /**
+   * A mapping from source directories to target directories that should
+   * override the normal package: URI resolution mechanism. The analyzer will
+   * behave as though each source directory in the map contains a special
+   * pubspec.yaml file which resolves any package: URI to the corresponding
+   * path within the target directory. The effect is the same as specifying the
+   * target directory as a "--package_root" parameter to the Dart VM when
+   * executing any Dart file inside the source directory.
+   *
+   * Files in any directories that are not overridden by this mapping have
+   * their package: URI's resolved using the normal pubspec.yaml mechanism. If
+   * this field is absent, or the empty map is specified, that indicates that
+   * the normal pubspec.yaml mechanism should always be used.
+   */
+  Map<String, String> packageRoots;
+
+  AnalysisSetAnalysisRootsParams(this.included, this.excluded, {this.packageRoots});
 
   factory AnalysisSetAnalysisRootsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
@@ -774,7 +791,11 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "excluded");
       }
-      return new AnalysisSetAnalysisRootsParams(included, excluded);
+      Map<String, String> packageRoots;
+      if (json.containsKey("packageRoots")) {
+        packageRoots = jsonDecoder._decodeMap(jsonPath + ".packageRoots", json["packageRoots"], valueDecoder: jsonDecoder._decodeString);
+      }
+      return new AnalysisSetAnalysisRootsParams(included, excluded, packageRoots: packageRoots);
     } else {
       throw jsonDecoder.mismatch(jsonPath, "analysis.setAnalysisRoots params");
     }
@@ -789,6 +810,9 @@
     Map<String, dynamic> result = {};
     result["included"] = included;
     result["excluded"] = excluded;
+    if (packageRoots != null) {
+      result["packageRoots"] = packageRoots;
+    }
     return result;
   }
 
@@ -803,7 +827,8 @@
   bool operator==(other) {
     if (other is AnalysisSetAnalysisRootsParams) {
       return _listEqual(included, other.included, (String a, String b) => a == b) &&
-          _listEqual(excluded, other.excluded, (String a, String b) => a == b);
+          _listEqual(excluded, other.excluded, (String a, String b) => a == b) &&
+          _mapEqual(packageRoots, other.packageRoots, (String a, String b) => a == b);
     }
     return false;
   }
@@ -813,6 +838,7 @@
     int hash = 0;
     hash = _JenkinsSmiHash.combine(hash, included.hashCode);
     hash = _JenkinsSmiHash.combine(hash, excluded.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, packageRoots.hashCode);
     return _JenkinsSmiHash.finish(hash);
   }
 }
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index d9e46f2..6ce6fbd 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -22,44 +22,50 @@
 
 void sendAnalysisNotificationErrors(AnalysisServer server, String file,
     LineInfo lineInfo, List<AnalysisError> errors) {
-  server.sendNotification(new protocol.AnalysisErrorsParams(file,
-      protocol.doAnalysisError_listFromEngine(lineInfo, errors)).toNotification());
+  var serverErrors = protocol.doAnalysisError_listFromEngine(lineInfo, errors);
+  var params = new protocol.AnalysisErrorsParams(file, serverErrors);
+  server.sendNotification(params.toNotification());
 }
 
 
 void sendAnalysisNotificationHighlights(AnalysisServer server, String file,
     CompilationUnit dartUnit) {
-  server.sendNotification(new protocol.AnalysisHighlightsParams(file,
-      new DartUnitHighlightsComputer(dartUnit).compute()).toNotification());
+  var regions = new DartUnitHighlightsComputer(dartUnit).compute();
+  var params = new protocol.AnalysisHighlightsParams(file, regions);
+  server.sendNotification(params.toNotification());
 }
 
 
 void sendAnalysisNotificationNavigation(AnalysisServer server, String file,
     CompilationUnit dartUnit) {
-  server.sendNotification(new protocol.AnalysisNavigationParams(file,
-      new DartUnitNavigationComputer(dartUnit).compute()).toNotification());
+  var regions = new DartUnitNavigationComputer(dartUnit).compute();
+  var params = new protocol.AnalysisNavigationParams(file, regions);
+  server.sendNotification(params.toNotification());
 }
 
 
 void sendAnalysisNotificationOccurrences(AnalysisServer server, String file,
     CompilationUnit dartUnit) {
-  server.sendNotification(new protocol.AnalysisOccurrencesParams(file,
-      new DartUnitOccurrencesComputer(dartUnit).compute()).toNotification());
+  var occurrences = new DartUnitOccurrencesComputer(dartUnit).compute();
+  var params = new protocol.AnalysisOccurrencesParams(file, occurrences);
+  server.sendNotification(params.toNotification());
 }
 
 
-void sendAnalysisNotificationOutline(AnalysisServer server,
-    AnalysisContext context, Source source, CompilationUnit dartUnit) {
-  server.sendNotification(new protocol.AnalysisOutlineParams(source.fullName,
-      new DartUnitOutlineComputer(context, source,
-          dartUnit).compute()).toNotification());
+void sendAnalysisNotificationOutline(AnalysisServer server, Source source,
+    LineInfo lineInfo, CompilationUnit dartUnit) {
+  var outline =
+      new DartUnitOutlineComputer(source, lineInfo, dartUnit).compute();
+  var params = new protocol.AnalysisOutlineParams(source.fullName, outline);
+  server.sendNotification(params.toNotification());
 }
 
 
 void sendAnalysisNotificationOverrides(AnalysisServer server, String file,
     CompilationUnit dartUnit) {
-  server.sendNotification(new protocol.AnalysisOverridesParams(file,
-      new DartUnitOverridesComputer(dartUnit).compute()).toNotification());
+  var overrides = new DartUnitOverridesComputer(dartUnit).compute();
+  var params = new protocol.AnalysisOverridesParams(file, overrides);
+  server.sendNotification(params.toNotification());
 }
 
 
@@ -95,7 +101,8 @@
     AnalysisResult result = context.performAnalysisTask();
     List<ChangeNotice> notices = result.changeNotices;
     if (notices == null) {
-      server.sendContextAnalysisDoneNotifications(context,
+      server.sendContextAnalysisDoneNotifications(
+          context,
           AnalysisDoneReason.COMPLETE);
       return;
     }
@@ -117,19 +124,30 @@
       // Dart
       CompilationUnit dartUnit = notice.compilationUnit;
       if (dartUnit != null) {
-        if (server.hasAnalysisSubscription(protocol.AnalysisService.HIGHLIGHTS, file)) {
+        if (server.hasAnalysisSubscription(
+            protocol.AnalysisService.HIGHLIGHTS,
+            file)) {
           sendAnalysisNotificationHighlights(server, file, dartUnit);
         }
-        if (server.hasAnalysisSubscription(protocol.AnalysisService.NAVIGATION, file)) {
+        if (server.hasAnalysisSubscription(
+            protocol.AnalysisService.NAVIGATION,
+            file)) {
           sendAnalysisNotificationNavigation(server, file, dartUnit);
         }
-        if (server.hasAnalysisSubscription(protocol.AnalysisService.OCCURRENCES, file)) {
+        if (server.hasAnalysisSubscription(
+            protocol.AnalysisService.OCCURRENCES,
+            file)) {
           sendAnalysisNotificationOccurrences(server, file, dartUnit);
         }
-        if (server.hasAnalysisSubscription(protocol.AnalysisService.OUTLINE, file)) {
-          sendAnalysisNotificationOutline(server, context, source, dartUnit);
+        if (server.hasAnalysisSubscription(
+            protocol.AnalysisService.OUTLINE,
+            file)) {
+          LineInfo lineInfo = notice.lineInfo;
+          sendAnalysisNotificationOutline(server, source, lineInfo, dartUnit);
         }
-        if (server.hasAnalysisSubscription(protocol.AnalysisService.OVERRIDES, file)) {
+        if (server.hasAnalysisSubscription(
+            protocol.AnalysisService.OVERRIDES,
+            file)) {
           sendAnalysisNotificationOverrides(server, file, dartUnit);
         }
       }
diff --git a/pkg/analysis_server/lib/src/protocol.dart b/pkg/analysis_server/lib/src/protocol.dart
index 94da4ea..d2afd17 100644
--- a/pkg/analysis_server/lib/src/protocol.dart
+++ b/pkg/analysis_server/lib/src/protocol.dart
@@ -129,6 +129,12 @@
  * values.
  */
 bool _mapEqual(Map mapA, Map mapB, bool valueEqual(a, b)) {
+  if (mapA == null) {
+    return mapB == null;
+  }
+  if (mapB == null) {
+    return false;
+  }
   if (mapA.length != mapB.length) {
     return false;
   }
diff --git a/pkg/analysis_server/lib/src/services/completion/imported_computer.dart b/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
index e5a5072..d16b80d 100644
--- a/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
@@ -58,7 +58,7 @@
     // InvocationComputer makes selector suggestions
     Expression target = node.target;
     if (target != null && request.offset <= target.end) {
-      return _addImportedElementSuggestions(node);
+      return _addImportedElementSuggestions(node, excludeVoidReturn: true);
     }
     return new Future.value(false);
   }
@@ -80,7 +80,7 @@
 
   @override
   Future<bool> visitExpression(Expression node) {
-    return _addImportedElementSuggestions(node);
+    return _addImportedElementSuggestions(node, excludeVoidReturn: true);
   }
 
   @override
@@ -109,7 +109,7 @@
     if (leftParen != null && request.offset >= leftParen.end) {
       Token rightParen = node.rightParenthesis;
       if (rightParen == null || request.offset <= rightParen.offset) {
-        return _addImportedElementSuggestions(node);
+        return _addImportedElementSuggestions(node, excludeVoidReturn: true);
       }
     }
     return new Future.value(false);
@@ -119,7 +119,7 @@
   Future<bool> visitInterpolationExpression(InterpolationExpression node) {
     Expression expression = node.expression;
     if (expression is SimpleIdentifier) {
-      return _addImportedElementSuggestions(node);
+      return _addImportedElementSuggestions(node, excludeVoidReturn: true);
     }
     return new Future.value(false);
   }
@@ -128,7 +128,7 @@
   Future<bool> visitMethodInvocation(MethodInvocation node) {
     Token period = node.period;
     if (period == null || request.offset <= period.offset) {
-      return _addImportedElementSuggestions(node);
+      return _addImportedElementSuggestions(node, excludeVoidReturn: true);
     }
     return new Future.value(false);
   }
@@ -144,7 +144,7 @@
     // InvocationComputer makes selector suggestions
     Token period = node.period;
     if (period != null && request.offset <= period.offset) {
-      return _addImportedElementSuggestions(node);
+      return _addImportedElementSuggestions(node, excludeVoidReturn: true);
     }
     return new Future.value(false);
   }
@@ -155,7 +155,7 @@
     // InvocationComputer makes property name suggestions
     var operator = node.operator;
     if (operator != null && request.offset < operator.offset) {
-      return _addImportedElementSuggestions(node);
+      return _addImportedElementSuggestions(node, excludeVoidReturn: true);
     }
     return new Future.value(false);
   }
@@ -180,7 +180,7 @@
     Token equals = node.equals;
     // Make suggestions for the RHS of a variable declaration
     if (equals != null && request.offset >= equals.end) {
-      return _addImportedElementSuggestions(node);
+      return _addImportedElementSuggestions(node, excludeVoidReturn: true);
     }
     return new Future.value(false);
   }
@@ -196,12 +196,22 @@
     return new Future.value(false);
   }
 
-  void _addElementSuggestion(Element element, CompletionRelevance relevance) {
+  void _addElementSuggestion(Element element, bool typesOnly,
+      bool excludeVoidReturn, CompletionRelevance relevance) {
 
     if (element is ExecutableElement) {
       if (element.isOperator) {
         return;
       }
+      if (excludeVoidReturn) {
+        DartType returnType = element.returnType;
+        if (returnType != null && returnType.isVoid) {
+          return;
+        }
+      }
+    }
+    if (typesOnly && element is! ClassElement) {
+      return;
     }
 
     CompletionSuggestionKind kind =
@@ -237,14 +247,19 @@
     request.suggestions.add(suggestion);
   }
 
-  void _addElementSuggestions(List<Element> elements) {
+  void _addElementSuggestions(List<Element> elements, bool typesOnly,
+      bool excludeVoidReturn) {
     elements.forEach((Element elem) {
-      _addElementSuggestion(elem, CompletionRelevance.DEFAULT);
+      _addElementSuggestion(
+          elem,
+          typesOnly,
+          excludeVoidReturn,
+          CompletionRelevance.DEFAULT);
     });
   }
 
   Future<bool> _addImportedElementSuggestions(AstNode node, {bool typesOnly:
-      false}) {
+      false, bool excludeVoidReturn: false}) {
 
     // Exclude elements from local library
     // because they are provided by LocalComputer
@@ -264,10 +279,12 @@
             importNamespace.definedNames.forEach((String name, Element elem) {
               if (elem is ClassElement) {
                 classMap[name] = elem;
-                _addElementSuggestion(elem, CompletionRelevance.DEFAULT);
-              } else if (!typesOnly) {
-                _addElementSuggestion(elem, CompletionRelevance.DEFAULT);
               }
+              _addElementSuggestion(
+                  elem,
+                  typesOnly,
+                  excludeVoidReturn,
+                  CompletionRelevance.DEFAULT);
             });
           } else {
             // Exclude elements from prefixed imports
@@ -287,10 +304,12 @@
     coreNamespace.definedNames.forEach((String name, Element elem) {
       if (elem is ClassElement) {
         classMap[name] = elem;
-        _addElementSuggestion(elem, CompletionRelevance.DEFAULT);
-      } else if (!typesOnly) {
-        _addElementSuggestion(elem, CompletionRelevance.DEFAULT);
       }
+      _addElementSuggestion(
+          elem,
+          typesOnly,
+          excludeVoidReturn,
+          CompletionRelevance.DEFAULT);
     });
 
     // Build a list of inherited types that are imported
@@ -308,12 +327,18 @@
         String name = inheritedTypes.removeLast();
         ClassElement elem = classMap[name];
         if (visited.add(name) && elem != null) {
-          _addElementSuggestions(elem.accessors);
-          _addElementSuggestions(elem.methods);
+          _addElementSuggestions(elem.accessors, typesOnly, excludeVoidReturn);
+          _addElementSuggestions(elem.methods, typesOnly, excludeVoidReturn);
           elem.allSupertypes.forEach((InterfaceType type) {
             if (visited.add(type.name)) {
-              _addElementSuggestions(type.accessors);
-              _addElementSuggestions(type.methods);
+              _addElementSuggestions(
+                  type.accessors,
+                  typesOnly,
+                  excludeVoidReturn);
+              _addElementSuggestions(
+                  type.methods,
+                  typesOnly,
+                  excludeVoidReturn);
             }
           });
         }
@@ -334,7 +359,11 @@
               !excludedLibs.contains(element.library) &&
               !completionSet.contains(element.displayName)) {
             if (!typesOnly || element is ClassElement) {
-              _addElementSuggestion(element, CompletionRelevance.LOW);
+              _addElementSuggestion(
+                  element,
+                  typesOnly,
+                  excludeVoidReturn,
+                  CompletionRelevance.LOW);
             }
           }
         }
diff --git a/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart b/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
index 4091f9f..714c483 100644
--- a/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
@@ -87,12 +87,12 @@
     // Very simplistic suggestion because analyzer will warn if
     // the extends / with / implements keywords are out of order
     if (node.extendsClause == null) {
-      _addSuggestion(Keyword.EXTENDS);
+      _addSuggestion(Keyword.EXTENDS, CompletionRelevance.HIGH);
     } else if (node.withClause == null) {
-      _addSuggestion(Keyword.WITH);
+      _addSuggestion(Keyword.WITH, CompletionRelevance.HIGH);
     }
     if (node.implementsClause == null) {
-      _addSuggestion(Keyword.IMPLEMENTS);
+      _addSuggestion(Keyword.IMPLEMENTS, CompletionRelevance.HIGH);
     }
   }
 
@@ -120,16 +120,18 @@
     if (firstDirective is! LibraryDirective) {
       if (firstDirective != null) {
         if (request.offset <= firstDirective.offset) {
-          _addSuggestions([Keyword.LIBRARY]);
+          _addSuggestions([Keyword.LIBRARY], CompletionRelevance.HIGH);
         }
       } else {
         if (request.offset <= startOfDeclarations) {
-          _addSuggestions([Keyword.LIBRARY]);
+          _addSuggestions([Keyword.LIBRARY], CompletionRelevance.HIGH);
         }
       }
     }
     if (request.offset <= startOfDeclarations) {
-      _addSuggestions([Keyword.EXPORT, Keyword.IMPORT, Keyword.PART]);
+      _addSuggestions(
+          [Keyword.EXPORT, Keyword.IMPORT, Keyword.PART],
+          CompletionRelevance.HIGH);
     }
     if (request.offset >= endOfDirectives) {
       _addSuggestions(
@@ -139,7 +141,8 @@
               Keyword.CONST,
               Keyword.FINAL,
               Keyword.TYPEDEF,
-              Keyword.VAR]);
+              Keyword.VAR],
+          CompletionRelevance.HIGH);
     }
   }
 
@@ -164,12 +167,13 @@
     }
   }
 
-  void _addSuggestion(Keyword keyword) {
+  void _addSuggestion(Keyword keyword, [CompletionRelevance relevance =
+      CompletionRelevance.DEFAULT]) {
     String completion = keyword.syntax;
     request.suggestions.add(
         new CompletionSuggestion(
             CompletionSuggestionKind.KEYWORD,
-            CompletionRelevance.DEFAULT,
+            relevance,
             completion,
             completion.length,
             0,
@@ -177,9 +181,10 @@
             false));
   }
 
-  void _addSuggestions(List<Keyword> keywords) {
+  void _addSuggestions(List<Keyword> keywords, [CompletionRelevance relevance =
+      CompletionRelevance.DEFAULT]) {
     keywords.forEach((Keyword keyword) {
-      _addSuggestion(keyword);
+      _addSuggestion(keyword, relevance);
     });
   }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/local_computer.dart b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
index fd0a63ba..19e28f4 100644
--- a/pkg/analysis_server/lib/src/services/completion/local_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
@@ -59,8 +59,11 @@
 
   final DartCompletionRequest request;
   bool typesOnly = false;
+  bool excludeVoidReturn;
 
-  _LocalVisitor(this.request);
+  _LocalVisitor(this.request) {
+    excludeVoidReturn = _computeExcludeVoidReturn(request.node);
+  }
 
   @override
   visitBlock(Block node) {
@@ -210,6 +213,19 @@
   }
 
   @override
+  visitMethodInvocation(MethodInvocation node) {
+    // InvocationComputer adds suggestions for method selector
+    Token period = node.period;
+    if (period != null && period.offset < request.offset) {
+      ArgumentList argumentList = node.argumentList;
+      if (argumentList == null || request.offset <= argumentList.offset) {
+        return;
+      }
+    }
+    visitNode(node);
+  }
+
+  @override
   visitNamespaceDirective(NamespaceDirective node) {
     // No suggestions
   }
@@ -280,6 +296,7 @@
       suggestion.element = _createElement(
           protocol.ElementKind.CLASS,
           declaration.name,
+          null,
           NO_RETURN_TYPE,
           declaration.isAbstract,
           _isDeprecated(declaration.metadata));
@@ -301,6 +318,7 @@
         suggestion.element = _createElement(
             protocol.ElementKind.GETTER,
             varDecl.name,
+            '()',
             fieldDecl.fields.type,
             false,
             isDeprecated || _isDeprecated(varDecl.metadata));
@@ -312,6 +330,9 @@
     if (typesOnly) {
       return;
     }
+    if (excludeVoidReturn && _isVoid(declaration.returnType)) {
+      return;
+    }
     CompletionSuggestion suggestion = _addSuggestion(
         declaration.name,
         CompletionSuggestionKind.FUNCTION,
@@ -321,6 +342,7 @@
       suggestion.element = _createElement(
           protocol.ElementKind.FUNCTION,
           declaration.name,
+          declaration.functionExpression.parameters.toSource(),
           declaration.returnType,
           false,
           _isDeprecated(declaration.metadata));
@@ -337,6 +359,7 @@
       suggestion.element = _createElement(
           protocol.ElementKind.LOCAL_VARIABLE,
           id,
+          null,
           returnType,
           false,
           false);
@@ -349,24 +372,37 @@
     }
     protocol.ElementKind kind;
     CompletionSuggestionKind csKind;
+    String parameters;
     if (classMbr.isGetter) {
       kind = protocol.ElementKind.GETTER;
       csKind = CompletionSuggestionKind.GETTER;
+      parameters = '()';
     } else if (classMbr.isSetter) {
+      if (excludeVoidReturn) {
+        return;
+      }
       kind = protocol.ElementKind.SETTER;
       csKind = CompletionSuggestionKind.SETTER;
+      parameters = '(${classMbr.returnType.toSource()} value)';
     } else {
+      if (excludeVoidReturn && _isVoid(classMbr.returnType)) {
+        return;
+      }
       kind = protocol.ElementKind.METHOD;
       csKind = CompletionSuggestionKind.METHOD;
+      parameters = classMbr.parameters.toSource();
     }
     CompletionSuggestion suggestion =
         _addSuggestion(classMbr.name, csKind, classMbr.returnType, node);
-    suggestion.element = _createElement(
-        kind,
-        classMbr.name,
-        classMbr.returnType,
-        classMbr.isAbstract,
-        _isDeprecated(classMbr.metadata));
+    if (suggestion != null) {
+      suggestion.element = _createElement(
+          kind,
+          classMbr.name,
+          parameters,
+          classMbr.returnType,
+          classMbr.isAbstract,
+          _isDeprecated(classMbr.metadata));
+    }
   }
 
   void _addParamListSuggestions(FormalParameterList paramList) {
@@ -401,8 +437,13 @@
     CompletionSuggestion suggestion =
         _addSuggestion(identifier, CompletionSuggestionKind.PARAMETER, type, null);
     if (suggestion != null) {
-      suggestion.element =
-          _createElement(protocol.ElementKind.PARAMETER, identifier, type, false, false);
+      suggestion.element = _createElement(
+          protocol.ElementKind.PARAMETER,
+          identifier,
+          null,
+          type,
+          false,
+          false);
     }
   }
 
@@ -410,7 +451,7 @@
       CompletionSuggestionKind kind, TypeName typeName, ClassDeclaration classDecl) {
     if (id != null) {
       String completion = id.name;
-      if (completion != null && completion.length > 0) {
+      if (completion != null && completion.length > 0 && completion != '_') {
         CompletionSuggestion suggestion = new CompletionSuggestion(
             kind,
             CompletionRelevance.DEFAULT,
@@ -460,6 +501,7 @@
           suggestion.element = _createElement(
               protocol.ElementKind.TOP_LEVEL_VARIABLE,
               varDecl.name,
+              null,
               varList.type,
               false,
               isDeprecated || _isDeprecated(varDecl.metadata));
@@ -468,11 +510,22 @@
     }
   }
 
+  bool _computeExcludeVoidReturn(AstNode node) {
+    if (node is Block) {
+      return false;
+    } else if (node is SimpleIdentifier) {
+      return node.parent is ExpressionStatement ? false : true;
+    } else {
+      return true;
+    }
+  }
+
   /**
    * Create a new protocol Element for inclusion in a completion suggestion.
    */
   protocol.Element _createElement(protocol.ElementKind kind,
-      SimpleIdentifier id, TypeName returnType, bool isAbstract, bool isDeprecated) {
+      SimpleIdentifier id, String parameters, TypeName returnType,
+      bool isAbstract, bool isDeprecated) {
     String name = id.name;
     int flags = protocol.Element.makeFlags(
         isAbstract: isAbstract,
@@ -482,6 +535,7 @@
         kind,
         name,
         flags,
+        parameters: parameters,
         returnType: _nameForType(returnType));
   }
 
@@ -493,6 +547,16 @@
           metadata.any(
               (Annotation a) => a.name is SimpleIdentifier && a.name.name == 'deprecated');
 
+  bool _isVoid(TypeName returnType) {
+    if (returnType != null) {
+      Identifier id = returnType.name;
+      if (id != null && id.name == 'void') {
+        return true;
+      }
+    }
+    return false;
+  }
+
   /**
    * Return the name for the given type.
    */
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index f10ebfe..964c87b 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -114,6 +114,13 @@
       }
     }
     {
+      ConstructorDeclaration constructor =
+          node.getAncestor((node) => node is ConstructorDeclaration);
+      if (constructor != null) {
+        return constructor.body;
+      }
+    }
+    {
       MethodDeclaration method =
           node.getAncestor((node) => node is MethodDeclaration);
       if (method != null) {
@@ -317,62 +324,6 @@
     _addAssist(AssistKind.CONVERT_INTO_EXPRESSION_BODY, []);
   }
 
-  /**
-   * Converts "!isEmpty" -> "isNotEmpty" if possible.
-   */
-  void _addProposal_convertToIsNotEmpty() {
-    // prepare "expr.isEmpty"
-    AstNode isEmptyAccess = null;
-    SimpleIdentifier isEmptyIdentifier = null;
-    if (node is SimpleIdentifier) {
-      SimpleIdentifier identifier = node as SimpleIdentifier;
-      AstNode parent = identifier.parent;
-      // normal case (but rare)
-      if (parent is PropertyAccess) {
-        isEmptyIdentifier = parent.propertyName;
-        isEmptyAccess = parent;
-      }
-      // usual case
-      if (parent is PrefixedIdentifier) {
-        isEmptyIdentifier = parent.identifier;
-        isEmptyAccess = parent;
-      }
-    }
-    if (isEmptyIdentifier == null) {
-      _coverageMarker();
-      return;
-    }
-    // should be "isEmpty"
-    Element propertyElement = isEmptyIdentifier.bestElement;
-    if (propertyElement == null || "isEmpty" != propertyElement.name) {
-      _coverageMarker();
-      return;
-    }
-    // should have "isNotEmpty"
-    Element propertyTarget = propertyElement.enclosingElement;
-    if (propertyTarget == null ||
-        getChildren(propertyTarget, "isNotEmpty").isEmpty) {
-      _coverageMarker();
-      return;
-    }
-    // should be in PrefixExpression
-    if (isEmptyAccess.parent is! PrefixExpression) {
-      _coverageMarker();
-      return;
-    }
-    PrefixExpression prefixExpression =
-        isEmptyAccess.parent as PrefixExpression;
-    // should be !
-    if (prefixExpression.operator.type != TokenType.BANG) {
-      return;
-    }
-    // do replace
-    _addRemoveEdit(rangeStartStart(prefixExpression, prefixExpression.operand));
-    _addReplaceEdit(rangeNode(isEmptyIdentifier), "isNotEmpty");
-    // add proposal
-    _addAssist(AssistKind.CONVERT_INTO_IS_NOT_EMPTY, []);
-  }
-
   void _addProposal_convertToIsNot_onIs() {
     // may be child of "is"
     AstNode node = this.node;
@@ -471,6 +422,62 @@
     _addAssist(AssistKind.CONVERT_INTO_IS_NOT, []);
   }
 
+  /**
+   * Converts "!isEmpty" -> "isNotEmpty" if possible.
+   */
+  void _addProposal_convertToIsNotEmpty() {
+    // prepare "expr.isEmpty"
+    AstNode isEmptyAccess = null;
+    SimpleIdentifier isEmptyIdentifier = null;
+    if (node is SimpleIdentifier) {
+      SimpleIdentifier identifier = node as SimpleIdentifier;
+      AstNode parent = identifier.parent;
+      // normal case (but rare)
+      if (parent is PropertyAccess) {
+        isEmptyIdentifier = parent.propertyName;
+        isEmptyAccess = parent;
+      }
+      // usual case
+      if (parent is PrefixedIdentifier) {
+        isEmptyIdentifier = parent.identifier;
+        isEmptyAccess = parent;
+      }
+    }
+    if (isEmptyIdentifier == null) {
+      _coverageMarker();
+      return;
+    }
+    // should be "isEmpty"
+    Element propertyElement = isEmptyIdentifier.bestElement;
+    if (propertyElement == null || "isEmpty" != propertyElement.name) {
+      _coverageMarker();
+      return;
+    }
+    // should have "isNotEmpty"
+    Element propertyTarget = propertyElement.enclosingElement;
+    if (propertyTarget == null ||
+        getChildren(propertyTarget, "isNotEmpty").isEmpty) {
+      _coverageMarker();
+      return;
+    }
+    // should be in PrefixExpression
+    if (isEmptyAccess.parent is! PrefixExpression) {
+      _coverageMarker();
+      return;
+    }
+    PrefixExpression prefixExpression =
+        isEmptyAccess.parent as PrefixExpression;
+    // should be !
+    if (prefixExpression.operator.type != TokenType.BANG) {
+      return;
+    }
+    // do replace
+    _addRemoveEdit(rangeStartStart(prefixExpression, prefixExpression.operand));
+    _addReplaceEdit(rangeNode(isEmptyIdentifier), "isNotEmpty");
+    // add proposal
+    _addAssist(AssistKind.CONVERT_INTO_IS_NOT_EMPTY, []);
+  }
+
   void _addProposal_exchangeOperands() {
     // check that user invokes quick assist on binary expression
     if (node is! BinaryExpression) {
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index d0078ae..3bf24eb 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -888,8 +888,8 @@
    */
   String getTypeSource(DartType type) {
     StringBuffer sb = new StringBuffer();
-    // just some Function, maybe find Function Type Alias later
-    if (type is FunctionType) {
+    // just a Function, not FunctionTypeAliasElement
+    if (type is FunctionType && type.element is! FunctionTypeAliasElement) {
       return "Function";
     }
     // prepare element
@@ -912,9 +912,8 @@
     String name = element.displayName;
     sb.write(name);
     // may be type arguments
-    if (type is InterfaceType) {
-      InterfaceType interfaceType = type;
-      List<DartType> arguments = interfaceType.typeArguments;
+    if (type is ParameterizedType) {
+      List<DartType> arguments = type.typeArguments;
       // check if has arguments
       bool hasArguments = false;
       for (DartType argument in arguments) {
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index f769395..1fd1a09 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -6,7 +6,7 @@
 environment:
   sdk: '>=1.0.0 <2.0.0'
 dependencies:
-  analyzer: 0.23.0-dev.11
+  analyzer: 0.23.0-dev.13
   args: any
   logging: any
   path: any
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index 34fcac7..7daf84d 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -136,6 +136,16 @@
     });
   }
 
+  test_field_unresolved() {
+    addTestFile('''
+class A {
+  A(this.noSuchField);
+}
+''');
+    // no checks for occurrences, just ensure that there is no NPE
+    return prepareOccurrences();
+  }
+
   test_localVariable() {
     addTestFile('''
 main() {
diff --git a/pkg/analysis_server/test/analysis/notification_outline_test.dart b/pkg/analysis_server/test/analysis/notification_outline_test.dart
index 5ab5182..23567cb 100644
--- a/pkg/analysis_server/test/analysis/notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_outline_test.dart
@@ -256,6 +256,26 @@
     });
   }
 
+  /**
+   * Code like this caused NPE in the past.
+   *
+   * https://code.google.com/p/dart/issues/detail?id=21373
+   */
+  test_invalidGetterInConstructor() {
+    addTestFile('''
+class A {
+  A() {
+    get badGetter {
+      const int CONST = 0;
+    }
+  }
+}
+''');
+    return prepareOutline().then((_) {
+      expect(outline, isNotNull);
+    });
+  }
+
   test_localFunctions() {
     addTestFile('''
 class A {
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 9086618..e2ba17c 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -46,7 +46,7 @@
     String filePath1 = posix.join(projPath, 'packages', 'file1.dart');
     resourceProvider.newFile(filePath1, 'contents');
     // "packages" files are ignored initially
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(manager.currentContextFilePaths[projPath], isEmpty);
     // "packages" files are ignored during watch
     String filePath2 = posix.join(projPath, 'packages', 'file2.dart');
@@ -63,18 +63,19 @@
     // set roots
     resourceProvider.newFolder(project);
     resourceProvider.newFolder(excludedFolder);
-    manager.setRoots(<String>[project], <String>[excludedFolder]);
+    manager.setRoots(<String>[project], <String>[excludedFolder],
+        <String, String>{});
     // verify
     expect(manager.isInAnalysisRoot('$excludedFolder/test.dart'), isFalse);
   }
 
   void test_isInAnalysisRoot_inRoot() {
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(manager.isInAnalysisRoot('$projPath/test.dart'), isTrue);
   }
 
   void test_isInAnalysisRoot_notInRoot() {
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(manager.isInAnalysisRoot('/test.dart'), isFalse);
   }
 
@@ -82,7 +83,7 @@
     // create a context with a pubspec.yaml file
     String pubspecPath = posix.join(projPath, 'pubspec.yaml');
     resourceProvider.newFile(pubspecPath, 'pubspec');
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     return pumpEventQueue().then((_) {
       expect(manager.currentContextPaths.toList(), [projPath]);
       manager.now++;
@@ -103,7 +104,7 @@
     String pubspec2Path = posix.join(subdir2Path, 'pubspec.yaml');
     resourceProvider.newFile(pubspec1Path, 'pubspec');
     resourceProvider.newFile(pubspec2Path, 'pubspec');
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     return pumpEventQueue().then((_) {
       expect(manager.currentContextPaths.toSet(),
           [subdir1Path, subdir2Path, projPath].toSet());
@@ -122,7 +123,7 @@
   void test_setRoots_addFolderWithDartFile() {
     String filePath = posix.join(projPath, 'foo.dart');
     resourceProvider.newFile(filePath, 'contents');
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // verify
     var filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, hasLength(1));
@@ -132,7 +133,7 @@
   void test_setRoots_addFolderWithDartFileInSubfolder() {
     String filePath = posix.join(projPath, 'foo', 'bar.dart');
     resourceProvider.newFile(filePath, 'contents');
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // verify
     var filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, hasLength(1));
@@ -142,7 +143,7 @@
   void test_setRoots_addFolderWithDummyLink() {
     String filePath = posix.join(projPath, 'foo.dart');
     resourceProvider.newDummyLink(filePath);
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // verify
     var filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, isEmpty);
@@ -151,7 +152,7 @@
   void test_setRoots_addFolderWithPubspec() {
     String pubspecPath = posix.join(projPath, 'pubspec.yaml');
     resourceProvider.newFile(pubspecPath, 'pubspec');
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // verify
     expect(manager.currentContextPaths, hasLength(1));
     expect(manager.currentContextPaths, contains(projPath));
@@ -182,7 +183,7 @@
       },
     };
     // set roots
-    manager.setRoots(<String>[root], <String>[]);
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
     manager.assertContextPaths([root, subProjectA, subProjectB]);
     // verify files
     manager.assertContextFiles(root, [rootFile]);
@@ -202,7 +203,7 @@
 
   void test_setRoots_addFolderWithoutPubspec() {
     packageMapProvider.packageMap = null;
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // verify
     expect(manager.currentContextPaths, hasLength(1));
     expect(manager.currentContextPaths, contains(projPath));
@@ -218,7 +219,7 @@
     resourceProvider.newFile(file1, '// 1');
     resourceProvider.newFile(file2, '// 2');
     // set roots
-    manager.setRoots(<String>[project], <String>[file1]);
+    manager.setRoots(<String>[project], <String>[file1], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [file2]);
   }
@@ -234,7 +235,7 @@
     resourceProvider.newFile(fileA, 'library a;');
     resourceProvider.newFile(fileB, 'library b;');
     // set roots
-    manager.setRoots(<String>[project], <String>[folderB]);
+    manager.setRoots(<String>[project], <String>[folderB], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [fileA]);
   }
@@ -248,11 +249,11 @@
     resourceProvider.newFile(file1, '// 1');
     resourceProvider.newFile(file2, '// 2');
     // set roots
-    manager.setRoots(<String>[project], <String>[]);
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [file1, file2]);
     // exclude "2"
-    manager.setRoots(<String>[project], <String>[file2]);
+    manager.setRoots(<String>[project], <String>[file2], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [file1]);
   }
@@ -268,11 +269,11 @@
     resourceProvider.newFile(fileA, 'library a;');
     resourceProvider.newFile(fileB, 'library b;');
     // initially both "aaa/a" and "bbb/b" are included
-    manager.setRoots(<String>[project], <String>[]);
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [fileA, fileB]);
     // exclude "bbb/"
-    manager.setRoots(<String>[project], <String>[folderB]);
+    manager.setRoots(<String>[project], <String>[folderB], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [fileA]);
   }
@@ -286,11 +287,11 @@
     resourceProvider.newFile(file1, '// 1');
     resourceProvider.newFile(file2, '// 2');
     // set roots
-    manager.setRoots(<String>[project], <String>[file2]);
+    manager.setRoots(<String>[project], <String>[file2], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [file1]);
     // stop excluding "2"
-    manager.setRoots(<String>[project], <String>[]);
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [file1, file2]);
   }
@@ -306,11 +307,11 @@
     resourceProvider.newFile(fileA, 'library a;');
     resourceProvider.newFile(fileB, 'library b;');
     // exclude "bbb/"
-    manager.setRoots(<String>[project], <String>[folderB]);
+    manager.setRoots(<String>[project], <String>[folderB], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [fileA]);
     // stop excluding "bbb/"
-    manager.setRoots(<String>[project], <String>[]);
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [fileA, fileB]);
   }
@@ -329,7 +330,7 @@
     resourceProvider.newFile(subFile, 'library sub;');
     resourceProvider.newFile(subSubPubspec, 'pubspec');
     // set roots
-    manager.setRoots(<String>[root], <String>[]);
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
     manager.assertContextPaths([root, subProject]);
     manager.assertContextFiles(root, [rootFile]);
     manager.assertContextFiles(subProject, [subFile]);
@@ -341,7 +342,7 @@
     packageMapProvider.packageMap = {
       'foo': [packageFolder]
     };
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(
         manager.currentContextPackageMaps[projPath],
         equals(packageMapProvider.packageMap));
@@ -352,10 +353,10 @@
     String pubspecPath = posix.join(projPath, 'pubspec.yaml');
     resourceProvider.newFile(pubspecPath, 'pubspec');
     // add one root - there is a context
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(manager.currentContextPaths, hasLength(1));
     // set empty roots - no contexts
-    manager.setRoots(<String>[], <String>[]);
+    manager.setRoots(<String>[], <String>[], <String, String>{});
     expect(manager.currentContextPaths, hasLength(0));
     expect(manager.currentContextFilePaths, hasLength(0));
   }
@@ -380,14 +381,15 @@
     resourceProvider.newFile(subProjectA_file, '// sub-a');
     resourceProvider.newFile(subProjectB_file, '// sub-b');
     // set roots
-    manager.setRoots(<String>[projectA, projectB], <String>[]);
+    manager.setRoots(<String>[projectA, projectB], <String>[],
+        <String, String>{});
     manager.assertContextPaths([projectA, subProjectA, projectB, subProjectB]);
     manager.assertContextFiles(projectA, [projectA_file]);
     manager.assertContextFiles(projectB, [projectB_file]);
     manager.assertContextFiles(subProjectA, [subProjectA_file]);
     manager.assertContextFiles(subProjectB, [subProjectB_file]);
     // remove "projectB"
-    manager.setRoots(<String>[projectA], <String>[]);
+    manager.setRoots(<String>[projectA], <String>[], <String, String>{});
     manager.assertContextPaths([projectA, subProjectA]);
     manager.assertContextFiles(projectA, [projectA_file]);
     manager.assertContextFiles(subProjectA, [subProjectA_file]);
@@ -396,16 +398,16 @@
   void test_setRoots_removeFolderWithoutPubspec() {
     packageMapProvider.packageMap = null;
     // add one root - there is a context
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(manager.currentContextPaths, hasLength(1));
     // set empty roots - no contexts
-    manager.setRoots(<String>[], <String>[]);
+    manager.setRoots(<String>[], <String>[], <String, String>{});
     expect(manager.currentContextPaths, hasLength(0));
     expect(manager.currentContextFilePaths, hasLength(0));
   }
 
   test_watch_addDummyLink() {
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
     Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, isEmpty);
@@ -419,7 +421,7 @@
   }
 
   test_watch_addFile() {
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
     Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, hasLength(0));
@@ -434,7 +436,7 @@
   }
 
   test_watch_addFileInSubfolder() {
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
     Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, hasLength(0));
@@ -458,7 +460,7 @@
     // create files
     resourceProvider.newFile(fileA, 'library a;');
     // set roots
-    manager.setRoots(<String>[project], <String>[folderB]);
+    manager.setRoots(<String>[project], <String>[folderB], <String, String>{});
     manager.assertContextPaths([project]);
     manager.assertContextFiles(project, [fileA]);
     // add a file, ignored as excluded
@@ -477,7 +479,7 @@
     // create files
     resourceProvider.newFile(rootFile, 'library root;');
     // set roots
-    manager.setRoots(<String>[root], <String>[]);
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
     manager.assertContextPaths([root]);
     // verify files
     manager.assertContextFiles(root, [rootFile]);
@@ -500,7 +502,7 @@
     resourceProvider.newFile(rootFile, 'library root;');
     resourceProvider.newFile(subFile, 'library a;');
     // set roots
-    manager.setRoots(<String>[root], <String>[]);
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
     manager.assertContextPaths([root]);
     // verify files
     manager.assertContextFiles(root, [rootFile, subFile]);
@@ -526,7 +528,7 @@
     resourceProvider.newFile(subPubspec, 'pubspec');
     resourceProvider.newFile(subFile, 'library sub;');
     // set roots
-    manager.setRoots(<String>[root], <String>[]);
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
     manager.assertContextPaths([root, subProject]);
     manager.assertContextFiles(root, [rootFile]);
     manager.assertContextFiles(subProject, [subFile]);
@@ -543,7 +545,7 @@
     String filePath = posix.join(projPath, 'foo.dart');
     // add root with a file
     resourceProvider.newFile(filePath, 'contents');
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // the file was added
     Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, hasLength(1));
@@ -564,7 +566,7 @@
     resourceProvider.newFile(rootPubspec, 'pubspec');
     resourceProvider.newFile(rootFile, 'library root;');
     // set roots
-    manager.setRoots(<String>[root], <String>[]);
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
     manager.assertContextPaths([root]);
     manager.assertContextFiles(root, [rootFile]);
     // delete the pubspec
@@ -587,7 +589,7 @@
     resourceProvider.newFile(rootFile, 'library root;');
     resourceProvider.newFile(subFile, 'library a;');
     // set roots
-    manager.setRoots(<String>[root], <String>[]);
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
     manager.assertContextPaths([root, subProject]);
     // verify files
     manager.assertContextFiles(root, [rootFile]);
@@ -604,7 +606,7 @@
     String filePath = posix.join(projPath, 'foo.dart');
     // add root with a file
     resourceProvider.newFile(filePath, 'contents');
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // the file was added
     Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, hasLength(1));
@@ -627,7 +629,7 @@
     String dartFilePath = posix.join(projPath, 'main.dart');
     resourceProvider.newFile(dartFilePath, 'contents');
     // the created context has the expected empty package map
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(manager.currentContextPackageMaps[projPath], isEmpty);
     // configure package map
     String packagePath = '/package/foo';
@@ -659,7 +661,7 @@
     String dartFilePath = posix.join(projPath, 'main.dart');
     resourceProvider.newFile(dartFilePath, 'contents');
     // the created context has the expected empty package map
-    manager.setRoots(<String>[projPath], <String>[]);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     expect(manager.currentContextPackageMaps[projPath], isEmpty);
     // Change the package map dependency so that the packageMapProvider is
     // re-run, and arrange for it to return null from computePackageMap().
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 7ef999e..7413542 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -37,13 +37,13 @@
     int nextOffset = content.indexOf('^', completionOffset + 1);
     expect(nextOffset, equals(-1), reason: 'too many ^');
     return super.addTestFile(
-        content.substring(0, completionOffset)
-        + content.substring(completionOffset + 1));
+        content.substring(0, completionOffset) +
+            content.substring(completionOffset + 1));
   }
 
   void assertHasResult(CompletionSuggestionKind kind, String completion,
-      [CompletionRelevance relevance = CompletionRelevance.DEFAULT,
-      bool isDeprecated = false, bool isPotential = false]) {
+      [CompletionRelevance relevance = CompletionRelevance.DEFAULT, bool isDeprecated
+      = false, bool isPotential = false]) {
     var cs;
     suggestions.forEach((s) {
       if (s.completion == completion) {
@@ -84,8 +84,8 @@
 
   Future getSuggestions() {
     return waitForTasksFinished().then((_) {
-      Request request = new CompletionGetSuggestionsParams(testFile,
-          completionOffset).toRequest('0');
+      Request request =
+          new CompletionGetSuggestionsParams(testFile, completionOffset).toRequest('0');
       Response response = handleSuccessfulRequest(request);
       var result = new CompletionGetSuggestionsResult.fromResponse(response);
       completionId = response.id;
@@ -165,8 +165,14 @@
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset - 2));
       expect(replacementLength, equals(2));
-      assertHasResult(CompletionSuggestionKind.KEYWORD, 'import');
-      assertHasResult(CompletionSuggestionKind.KEYWORD, 'class');
+      assertHasResult(
+          CompletionSuggestionKind.KEYWORD,
+          'import',
+          CompletionRelevance.HIGH);
+      assertHasResult(
+          CompletionSuggestionKind.KEYWORD,
+          'class',
+          CompletionRelevance.HIGH);
     });
   }
 
diff --git a/pkg/analysis_server/test/integration/asynchrony_test.dart b/pkg/analysis_server/test/integration/asynchrony_test.dart
new file mode 100644
index 0000000..4ae0e19
--- /dev/null
+++ b/pkg/analysis_server/test/integration/asynchrony_test.dart
@@ -0,0 +1,70 @@
+// 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.
+
+library test.integration.analysis.error;
+
+import 'dart:async';
+
+import 'package:unittest/unittest.dart';
+
+import '../reflective_tests.dart';
+import 'integration_tests.dart';
+
+/**
+ * Verify that the server's input and output streams are asynchronous by
+ * attempting to flood its input buffer with commands without listening to
+ * its output buffer for responses.  The server should continue to train its
+ * input buffer even though its output buffer is full.
+ *
+ * Once enough commands have been sent, we begin reading from the server's
+ * output buffer, and verify that it responds to the last command.
+ */
+@ReflectiveTestCase()
+class AsynchronyIntegrationTest {
+  /**
+   * Connection to the analysis server.
+   */
+  final Server server = new Server();
+
+  /**
+   * Number of messages to queue up before listening for responses.
+   */
+  static const MESSAGE_COUNT = 10000;
+
+  Future setUp() {
+    return server.start();
+  }
+
+  test_asynchrony() {
+    // Send MESSAGE_COUNT messages to the server without listening for
+    // responses.
+    Future lastMessageResult;
+    for (int i = 0; i < MESSAGE_COUNT; i++) {
+      lastMessageResult = server.send('server.getVersion', null);
+    }
+
+    // Flush the server's standard input stream to verify that it has really
+    // received them all.  If the server is blocked waiting for us to read
+    // its responses, the flush will never complete.
+    return server.flushCommands().then((_) {
+
+      // Begin processing responses from the server.
+      server.listenToOutput((String event, params) {
+        // No notifications are expected.
+        fail('Unexpected notification: $event');
+      });
+
+      // Terminate the test when the response to the last message is received.
+      lastMessageResult.then((_) {
+        server.send("server.shutdown", null).then((_) {
+          return server.exitCode;
+        });
+      });
+    });
+  }
+}
+
+main() {
+  runReflectiveTests(AsynchronyIntegrationTest);
+}
diff --git a/pkg/analysis_server/test/integration/integration_test_methods.dart b/pkg/analysis_server/test/integration/integration_test_methods.dart
index 743bf3d..8bc1a98 100644
--- a/pkg/analysis_server/test/integration/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/integration_test_methods.dart
@@ -269,9 +269,24 @@
    *
    *   A list of the files and directories within the included directories that
    *   should not be analyzed.
+   *
+   * packageRoots ( optional Map<FilePath, FilePath> )
+   *
+   *   A mapping from source directories to target directories that should
+   *   override the normal package: URI resolution mechanism. The analyzer will
+   *   behave as though each source directory in the map contains a special
+   *   pubspec.yaml file which resolves any package: URI to the corresponding
+   *   path within the target directory. The effect is the same as specifying
+   *   the target directory as a "--package_root" parameter to the Dart VM when
+   *   executing any Dart file inside the source directory.
+   *
+   *   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.
    */
-  Future sendAnalysisSetAnalysisRoots(List<String> included, List<String> excluded) {
-    var params = new AnalysisSetAnalysisRootsParams(included, excluded).toJson();
+  Future sendAnalysisSetAnalysisRoots(List<String> included, List<String> excluded, {Map<String, String> packageRoots}) {
+    var params = new AnalysisSetAnalysisRootsParams(included, excluded, packageRoots: packageRoots).toJson();
     return server.send("analysis.setAnalysisRoots", params)
         .then((result) {
       expect(result, isNull);
diff --git a/pkg/analysis_server/test/integration/integration_tests.dart b/pkg/analysis_server/test/integration/integration_tests.dart
index 189b701..372293d 100644
--- a/pkg/analysis_server/test/integration/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/integration_tests.dart
@@ -52,12 +52,6 @@
   bool skipShutdown = false;
 
   /**
-   * Data associated with the "server.connected" notification that was received
-   * when the server started up.
-   */
-  var serverConnectedParams;
-
-  /**
    * True if we are currently subscribed to [SERVER_STATUS] updates.
    */
   bool _subscribedToServerStatus = false;
@@ -156,8 +150,8 @@
       expect(serverConnected.isCompleted, isFalse);
       serverConnected.complete();
     });
-    return server.start(dispatchNotification).then((params) {
-      serverConnectedParams = params;
+    return server.start().then((_) {
+      server.listenToOutput(dispatchNotification);
       server.exitCode.then((_) {
         skipShutdown = true;
       });
@@ -688,14 +682,11 @@
    * Start the server.  If [debugServer] is true, the server will be started
    * with "--debug", allowing a debugger to be attached.
    */
-  Future start(NotificationProcessor notificationProcessor, {bool debugServer:
-      false}) {
+  Future start({bool debugServer: false}) {
     if (_process != null) {
       throw new Exception('Process already started');
     }
     _time.start();
-    // TODO(paulberry): move the logic for finding the script, the dart
-    // executable, and the package root into a shell script.
     String dartBinary = Platform.executable;
     String rootDir =
         findRoot(Platform.script.toFilePath(windows: Platform.isWindows));
@@ -711,58 +702,6 @@
     arguments.add(serverPath);
     return Process.start(dartBinary, arguments).then((Process process) {
       _process = process;
-      process.stdout.transform(
-          (new Utf8Codec()).decoder).transform(new LineSplitter()).listen((String line) {
-        String trimmedLine = line.trim();
-        _recordStdio('RECV: $trimmedLine');
-        var message;
-        try {
-          message = JSON.decoder.convert(trimmedLine);
-        } catch (exception) {
-          _badDataFromServer();
-          return;
-        }
-        expect(message, isMap);
-        Map messageAsMap = message;
-        if (messageAsMap.containsKey('id')) {
-          expect(messageAsMap['id'], isString);
-          String id = message['id'];
-          Completer completer = _pendingCommands[id];
-          if (completer == null) {
-            fail('Unexpected response from server: id=$id');
-          } else {
-            _pendingCommands.remove(id);
-          }
-          if (messageAsMap.containsKey('error')) {
-            // TODO(paulberry): propagate the error info to the completer.
-            completer.completeError(
-                new UnimplementedError(
-                    'Server responded with an error: ${JSON.encode(message)}'));
-          } else {
-            completer.complete(messageAsMap['result']);
-          }
-          // Check that the message is well-formed.  We do this after calling
-          // completer.complete() or completer.completeError() so that we don't
-          // stall the test in the event of an error.
-          expect(message, isResponse);
-        } else {
-          // Message is a notification.  It should have an event and possibly
-          // params.
-          expect(messageAsMap, contains('event'));
-          expect(messageAsMap['event'], isString);
-          notificationProcessor(messageAsMap['event'], messageAsMap['params']);
-          // Check that the message is well-formed.  We do this after calling
-          // notificationController.add() so that we don't stall the test in the
-          // event of an error.
-          expect(message, isNotification);
-        }
-      });
-      process.stderr.transform(
-          (new Utf8Codec()).decoder).transform(new LineSplitter()).listen((String line) {
-        String trimmedLine = line.trim();
-        _recordStdio('ERR:  $trimmedLine');
-        _badDataFromServer();
-      });
       process.exitCode.then((int code) {
         _recordStdio('TERMINATED WITH EXIT CODE $code');
         if (code != 0) {
@@ -773,6 +712,65 @@
   }
 
   /**
+   * Start listening to output from the server, and deliver notifications to
+   * [notificationProcessor].
+   */
+  void listenToOutput(NotificationProcessor notificationProcessor) {
+    _process.stdout.transform(
+        (new Utf8Codec()).decoder).transform(new LineSplitter()).listen((String line) {
+      String trimmedLine = line.trim();
+      _recordStdio('RECV: $trimmedLine');
+      var message;
+      try {
+        message = JSON.decoder.convert(trimmedLine);
+      } catch (exception) {
+        _badDataFromServer();
+        return;
+      }
+      expect(message, isMap);
+      Map messageAsMap = message;
+      if (messageAsMap.containsKey('id')) {
+        expect(messageAsMap['id'], isString);
+        String id = message['id'];
+        Completer completer = _pendingCommands[id];
+        if (completer == null) {
+          fail('Unexpected response from server: id=$id');
+        } else {
+          _pendingCommands.remove(id);
+        }
+        if (messageAsMap.containsKey('error')) {
+          // TODO(paulberry): propagate the error info to the completer.
+          completer.completeError(
+              new UnimplementedError(
+                  'Server responded with an error: ${JSON.encode(message)}'));
+        } else {
+          completer.complete(messageAsMap['result']);
+        }
+        // Check that the message is well-formed.  We do this after calling
+        // completer.complete() or completer.completeError() so that we don't
+        // stall the test in the event of an error.
+        expect(message, isResponse);
+      } else {
+        // Message is a notification.  It should have an event and possibly
+        // params.
+        expect(messageAsMap, contains('event'));
+        expect(messageAsMap['event'], isString);
+        notificationProcessor(messageAsMap['event'], messageAsMap['params']);
+        // Check that the message is well-formed.  We do this after calling
+        // notificationController.add() so that we don't stall the test in the
+        // event of an error.
+        expect(message, isNotification);
+      }
+    });
+    _process.stderr.transform(
+        (new Utf8Codec()).decoder).transform(new LineSplitter()).listen((String line) {
+      String trimmedLine = line.trim();
+      _recordStdio('ERR:  $trimmedLine');
+      _badDataFromServer();
+    });
+  }
+
+  /**
    * Future that completes when the server process exits.
    */
   Future<int> get exitCode => _process.exitCode;
@@ -827,6 +825,14 @@
   }
 
   /**
+   * Return a future that will complete when all commands that have been sent
+   * to the server so far have been flushed to the OS buffer.
+   */
+  Future flushCommands() {
+    return _process.stdin.flush();
+  }
+
+  /**
    * Deal with bad data received from the server.
    */
   void _badDataFromServer() {
diff --git a/pkg/analysis_server/test/integration/protocol_matchers.dart b/pkg/analysis_server/test/integration/protocol_matchers.dart
index d3af473..adeb2af 100644
--- a/pkg/analysis_server/test/integration/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/protocol_matchers.dart
@@ -159,12 +159,15 @@
  * {
  *   "included": List<FilePath>
  *   "excluded": List<FilePath>
+ *   "packageRoots": optional Map<FilePath, FilePath>
  * }
  */
 final Matcher isAnalysisSetAnalysisRootsParams = new LazyMatcher(() => new MatchesJsonObject(
   "analysis.setAnalysisRoots params", {
     "included": isListOf(isFilePath),
     "excluded": isListOf(isFilePath)
+  }, optionalFields: {
+    "packageRoots": isMapOf(isFilePath, isFilePath)
   }));
 
 /**
diff --git a/pkg/analysis_server/test/integration/test_all.dart b/pkg/analysis_server/test/integration/test_all.dart
index d9251f0e..be609ce 100644
--- a/pkg/analysis_server/test/integration/test_all.dart
+++ b/pkg/analysis_server/test/integration/test_all.dart
@@ -7,10 +7,15 @@
 import 'package:unittest/unittest.dart';
 
 import 'analysis/test_all.dart' as analysis_test_all;
+import 'asynchrony_test.dart' as asynchrony_test;
 import 'completion/test_all.dart' as completion_test_all;
 import 'search/test_all.dart' as search_test_all;
 import 'server/test_all.dart' as server_test_all;
 
+// Disable asynchrony test for now.
+// TODO(paulberry): re-enable when issue 21252 is fixed.
+const bool _ENABLE_ASYNCHRONY_TEST = false;
+
 /**
  * Utility for manually running all integration tests.
  */
@@ -18,6 +23,9 @@
   groupSep = ' | ';
   group('analysis_server_integration', () {
     analysis_test_all.main();
+    if (_ENABLE_ASYNCHRONY_TEST) {
+      asynchrony_test.main();
+    }
     completion_test_all.main();
     search_test_all.main();
     server_test_all.main();
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index 7b704ca..ca6198d 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -243,6 +243,7 @@
       expect(location.startLine, 2);
       expect(location.startColumn, 16);
     }
+    expect(element.parameters, isNull);
     expect(
         element.flags,
         Element.FLAG_ABSTRACT | Element.FLAG_DEPRECATED | Element.FLAG_PRIVATE);
@@ -300,7 +301,7 @@
   void test_fromElement_GETTER() {
     engine.Source source = addSource('/test.dart', '''
 class A {
-  String myGetter => 42;
+  String get myGetter => 42;
 }''');
     engine.CompilationUnit unit = resolveLibraryUnit(source);
     engine.PropertyAccessorElement engineElement =
@@ -312,10 +313,10 @@
     {
       Location location = element.location;
       expect(location.file, '/test.dart');
-      expect(location.offset, 19);
+      expect(location.offset, 23);
       expect(location.length, 'myGetter'.length);
       expect(location.startLine, 2);
-      expect(location.startColumn, 10);
+      expect(location.startColumn, 14);
     }
     expect(element.parameters, '()');
     expect(element.returnType, 'String');
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index 1174254..3c830a5 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -107,6 +107,7 @@
     expect(element, isNotNull);
     expect(element.kind, equals(protocol.ElementKind.CLASS));
     expect(element.name, equals(name));
+    expect(element.parameters, isNull);
     expect(element.returnType, isNull);
     return cs;
   }
@@ -125,6 +126,10 @@
     expect(element.kind, equals(protocol.ElementKind.FUNCTION));
     expect(element.name, equals(name));
     expect(element.isDeprecated, equals(isDeprecated));
+    String param = element.parameters;
+    expect(param, isNotNull);
+    expect(param[0], equals('('));
+    expect(param[param.length - 1], equals(')'));
     expect(
         element.returnType,
         equals(returnType != null ? returnType : 'dynamic'));
@@ -140,6 +145,9 @@
     expect(element, isNotNull);
     expect(element.kind, equals(protocol.ElementKind.GETTER));
     expect(element.name, equals(name));
+    //TODO (danrubel) getter should have parameters
+    // but not used in code completion
+    //expect(element.parameters, '()');
     expect(
         element.returnType,
         equals(returnType != null ? returnType : 'dynamic'));
@@ -155,6 +163,7 @@
       protocol.Element element = cs.element;
       expect(element, isNotNull);
       expect(element.kind, equals(protocol.ElementKind.LIBRARY));
+      expect(element.parameters, isNull);
       expect(element.returnType, isNull);
       return cs;
     } else {
@@ -174,6 +183,7 @@
       expect(element, isNotNull);
       expect(element.kind, equals(protocol.ElementKind.LOCAL_VARIABLE));
       expect(element.name, equals(name));
+      expect(element.parameters, isNull);
       expect(
           element.returnType,
           equals(returnType != null ? returnType : 'dynamic'));
@@ -194,6 +204,10 @@
     expect(element, isNotNull);
     expect(element.kind, equals(protocol.ElementKind.METHOD));
     expect(element.name, equals(name));
+    String param = element.parameters;
+    expect(param, isNotNull);
+    expect(param[0], equals('('));
+    expect(param[param.length - 1], equals(')'));
     expect(
         element.returnType,
         equals(returnType != null ? returnType : 'dynamic'));
@@ -210,6 +224,10 @@
       expect(element, isNotNull);
       expect(element.kind, equals(protocol.ElementKind.CONSTRUCTOR));
       expect(element.name, equals(name));
+      String param = element.parameters;
+      expect(param, isNotNull);
+      expect(param[0], equals('('));
+      expect(param[param.length - 1], equals(')'));
       expect(element.returnType, equals(returnType));
       return cs;
     } else {
@@ -228,6 +246,7 @@
       expect(element, isNotNull);
       expect(element.kind, equals(protocol.ElementKind.PARAMETER));
       expect(element.name, equals(name));
+      expect(element.parameters, isNull);
       expect(
           element.returnType,
           equals(returnType != null ? returnType : 'dynamic'));
@@ -245,6 +264,8 @@
     expect(element, isNotNull);
     expect(element.kind, equals(protocol.ElementKind.SETTER));
     expect(element.name, equals(name));
+    // TODO (danrubel) assert setter param
+    //expect(element.parameters, isNull);
     expect(element.returnType, isNull);
     return cs;
   }
@@ -258,6 +279,7 @@
     expect(element, isNotNull);
     expect(element.kind, equals(protocol.ElementKind.TOP_LEVEL_VARIABLE));
     expect(element.name, equals(name));
+    expect(element.parameters, isNull);
     //TODO (danrubel) return type level variable 'type' but not as 'returnType'
 //    expect(
 //        element.returnType,
@@ -962,12 +984,15 @@
       class _B { }''');
     addTestSource('''
       import "/testA.dart";
-      class C {foo(){O^}}''');
+      class C {foo(){O^} void bar() {}}''');
     computeFast();
     return computeFull(true).then((_) {
       assertSuggestImportedClass('A');
       assertSuggestImportedFunction('F1', '_B', false);
       assertSuggestLocalClass('C');
+      assertSuggestLocalMethod('foo', 'C', null);
+      assertSuggestLocalMethod('bar', 'C', 'void');
+      assertSuggestLocalClass('C');
       assertNotSuggested('x');
       assertNotSuggested('_B');
     });
@@ -1074,22 +1099,29 @@
 
   test_ForStatement_updaters_prefix_expression() {
     // SimpleIdentifier  PrefixExpression  ForStatement
-    addTestSource('main() {for (int index = 0; index < 10; ++i^)}');
+    addTestSource('''
+      void bar() { }
+      main() {for (int index = 0; index < 10; ++i^)}''');
     computeFast();
     return computeFull(true).then((_) {
       assertSuggestLocalVariable('index', 'int');
+      assertSuggestLocalFunction('main', null);
+      assertNotSuggested('bar');
     });
   }
 
   test_FunctionExpression_body_function() {
     // Block  BlockFunctionBody  FunctionExpression
-    addTestSource('String foo(List args) {x.then((R b) {^});}');
+    addTestSource('''
+      void bar() { }
+      String foo(List args) {x.then((R b) {^});}''');
     computeFast();
     return computeFull(true).then((_) {
       var f = assertSuggestLocalFunction('foo', 'String', false);
       if (f != null) {
         expect(f.element.isPrivate, isFalse);
       }
+      assertSuggestLocalFunction('bar', 'void');
       assertSuggestParameter('args', 'List');
       assertSuggestParameter('b', 'R');
       assertSuggestImportedClass('Object');
@@ -1215,12 +1247,16 @@
   test_IsExpression_target() {
     // IfStatement  Block  BlockFunctionBody
     addTestSource('''
+      foo() { }
+      void bar() { }
       class A {int x; int y() => 0;}
       main(){var a; if (^ is A)}''');
     computeFast();
     return computeFull(true).then((_) {
       assertSuggestLocalVariable('a', null);
       assertSuggestLocalFunction('main', null);
+      assertSuggestLocalFunction('foo', null);
+      assertNotSuggested('bar');
       assertSuggestLocalClass('A');
       assertSuggestImportedClass('Object');
     });
@@ -1298,7 +1334,7 @@
 
   test_MethodDeclaration_parameters_named() {
     // Block  BlockFunctionBody  MethodDeclaration
-    addTestSource('class A {@deprecated Z a(X x, {y: boo}) {^}}');
+    addTestSource('class A {@deprecated Z a(X x, _, b, {y: boo}) {^}}');
     computeFast();
     return computeFull(true).then((_) {
       CompletionSuggestion methodA = assertSuggestLocalMethod('a', 'A', 'Z');
@@ -1308,15 +1344,22 @@
       }
       assertSuggestParameter('x', 'X');
       assertSuggestParameter('y', null);
+      assertSuggestParameter('b', null);
       assertSuggestImportedClass('int');
+      assertNotSuggested('_');
     });
   }
 
   test_MethodDeclaration_parameters_positional() {
     // Block  BlockFunctionBody  MethodDeclaration
-    addTestSource('class A {Z a(X x, [int y=1]) {^}}');
+    addTestSource('''
+      foo() { }
+      void bar() { }
+      class A {Z a(X x, [int y=1]) {^}}''');
     computeFast();
     return computeFull(true).then((_) {
+      assertSuggestLocalFunction('foo', null);
+      assertSuggestLocalFunction('bar', 'void');
       assertSuggestLocalMethod('a', 'A', 'Z');
       assertSuggestParameter('x', 'X');
       assertSuggestParameter('y', 'int');
@@ -1324,6 +1367,38 @@
     });
   }
 
+  test_MethodInvocation_no_semicolon() {
+    // MethodInvocation  ExpressionStatement  Block
+    addTestSource('''
+      main() { }
+      class I {X get f => new A();get _g => new A();}
+      class A implements I {
+        var b; X _c;
+        X get d => new A();get _e => new A();
+        // no semicolon between completion point and next statement
+        set s1(I x) {} set _s2(I x) {x.^ m(null);}
+        m(X x) {} I _n(X x) {}}
+      class X{}''');
+    computeFast();
+    return computeFull(true).then((_) {
+      assertSuggestInvocationGetter('f', 'X');
+      assertSuggestInvocationGetter('_g', null);
+      assertNotSuggested('b');
+      assertNotSuggested('_c');
+      assertNotSuggested('d');
+      assertNotSuggested('_e');
+      assertNotSuggested('s1');
+      assertNotSuggested('_s2');
+      assertNotSuggested('m');
+      assertNotSuggested('_n');
+      assertNotSuggested('a');
+      assertNotSuggested('A');
+      assertNotSuggested('X');
+      assertNotSuggested('Object');
+      assertNotSuggested('==');
+    });
+  }
+
   test_PrefixedIdentifier_class_imported() {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
     addSource('/testB.dart', '''
@@ -1456,7 +1531,6 @@
     computeFast();
     return computeFull(true).then((_) {
       assertSuggestInvocationGetter('length', 'int');
-      assertNotSuggested('==');
       assertNotSuggested('A');
       assertNotSuggested('a');
       assertNotSuggested('Object');
@@ -1544,16 +1618,23 @@
     // VariableDeclarationStatement
     addSource('/testB.dart', '''
       lib B;
-      foo() { }
+      foo1() { }
+      void bar1() { }
       class _B { }
       class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
       import "/testB.dart";
+      foo2() { }
+      void bar2() { }
       class Y {Y.c(); Y._d(); z() {}}
       class C {bar(){var f; {var x;} var e = ^ var g}}''');
     computeFast();
     return computeFull(true).then((_) {
       assertSuggestImportedClass('X');
+      assertSuggestImportedFunction('foo1', null);
+      assertNotSuggested('bar1');
+      assertSuggestLocalFunction('foo2', null);
+      assertNotSuggested('bar2');
       assertNotSuggested('_B');
       assertSuggestLocalClass('Y');
       assertSuggestLocalClass('C');
diff --git a/pkg/analysis_server/test/services/completion/keyword_computer_test.dart b/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
index c796475..558fbdf 100644
--- a/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
@@ -20,7 +20,8 @@
 @ReflectiveTestCase()
 class KeywordComputerTest extends AbstractCompletionTest {
 
-  void assertSuggestKeywords(Iterable<Keyword> expectedKeywords) {
+  void assertSuggestKeywords(Iterable<Keyword> expectedKeywords,
+      [CompletionRelevance relevance = CompletionRelevance.DEFAULT]) {
     Set<Keyword> actualKeywords = new Set<Keyword>();
     request.suggestions.forEach((CompletionSuggestion s) {
       if (s.kind == CompletionSuggestionKind.KEYWORD) {
@@ -32,7 +33,7 @@
             fail('Duplicate keyword suggested: ${s.completion}');
           }
         }
-        expect(s.relevance, equals(CompletionRelevance.DEFAULT));
+        expect(s.relevance, equals(relevance));
         expect(s.selectionOffset, equals(s.completion.length));
         expect(s.selectionLength, equals(0));
         expect(s.isDeprecated, equals(false));
@@ -74,26 +75,32 @@
             Keyword.CONST,
             Keyword.FINAL,
             Keyword.TYPEDEF,
-            Keyword.VAR]);
+            Keyword.VAR],
+        CompletionRelevance.HIGH);
   }
 
   test_before_import() {
     addTestSource('^ import foo;');
     expect(computeFast(), isTrue);
     assertSuggestKeywords(
-        [Keyword.EXPORT, Keyword.IMPORT, Keyword.LIBRARY, Keyword.PART]);
+        [Keyword.EXPORT, Keyword.IMPORT, Keyword.LIBRARY, Keyword.PART],
+        CompletionRelevance.HIGH);
   }
 
   test_class() {
     addTestSource('class A ^');
     expect(computeFast(), isTrue);
-    assertSuggestKeywords([Keyword.EXTENDS, Keyword.IMPLEMENTS]);
+    assertSuggestKeywords(
+        [Keyword.EXTENDS, Keyword.IMPLEMENTS],
+        CompletionRelevance.HIGH);
   }
 
   test_class_extends() {
     addTestSource('class A extends foo ^');
     expect(computeFast(), isTrue);
-    assertSuggestKeywords([Keyword.IMPLEMENTS, Keyword.WITH]);
+    assertSuggestKeywords(
+        [Keyword.IMPLEMENTS, Keyword.WITH],
+        CompletionRelevance.HIGH);
   }
 
   test_class_extends_name() {
@@ -105,7 +112,7 @@
   test_class_implements() {
     addTestSource('class A ^ implements foo');
     expect(computeFast(), isTrue);
-    assertSuggestKeywords([Keyword.EXTENDS]);
+    assertSuggestKeywords([Keyword.EXTENDS], CompletionRelevance.HIGH);
   }
 
   test_class_implements_name() {
@@ -140,7 +147,8 @@
             Keyword.LIBRARY,
             Keyword.PART,
             Keyword.TYPEDEF,
-            Keyword.VAR]);
+            Keyword.VAR],
+        CompletionRelevance.HIGH);
   }
 
   test_function_body() {
@@ -199,7 +207,8 @@
             Keyword.IMPORT,
             Keyword.PART,
             Keyword.TYPEDEF,
-            Keyword.VAR]);
+            Keyword.VAR],
+        CompletionRelevance.HIGH);
   }
 
   test_library_name() {
@@ -253,7 +262,8 @@
             Keyword.IMPORT,
             Keyword.PART,
             Keyword.TYPEDEF,
-            Keyword.VAR]);
+            Keyword.VAR],
+        CompletionRelevance.HIGH);
   }
 
   test_partial_class() {
@@ -270,7 +280,8 @@
             Keyword.LIBRARY,
             Keyword.PART,
             Keyword.TYPEDEF,
-            Keyword.VAR]);
+            Keyword.VAR],
+        CompletionRelevance.HIGH);
   }
 
   test_partial_class2() {
@@ -286,7 +297,8 @@
             Keyword.IMPORT,
             Keyword.PART,
             Keyword.TYPEDEF,
-            Keyword.VAR]);
+            Keyword.VAR],
+        CompletionRelevance.HIGH);
   }
 
   void _appendKeywords(StringBuffer msg, Iterable<Keyword> keywords) {
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index d37d3e6..06e6509 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -146,19 +146,6 @@
 ''');
   }
 
-  void test_addTypeAnnotation_local_OK_List() {
-    _indexTestUnit('''
-main() {
-  var v = <String>[];
-}
-''');
-    assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
-main() {
-  List<String> v = <String>[];
-}
-''');
-  }
-
   void test_addTypeAnnotation_local_OK_int() {
     _indexTestUnit('''
 main() {
@@ -172,6 +159,19 @@
 ''');
   }
 
+  void test_addTypeAnnotation_local_OK_List() {
+    _indexTestUnit('''
+main() {
+  var v = <String>[];
+}
+''');
+    assertHasAssistAt('v =', AssistKind.ADD_TYPE_ANNOTATION, '''
+main() {
+  List<String> v = <String>[];
+}
+''');
+  }
+
   void test_addTypeAnnotation_local_OK_onInitializer() {
     _indexTestUnit('''
 main() {
@@ -350,6 +350,21 @@
 ''');
   }
 
+  void test_convertToBlockBody_OK_constructor() {
+    _indexTestUnit('''
+class A {
+  factory A() => null;
+}
+''');
+    assertHasAssistAt('A()', AssistKind.CONVERT_INTO_BLOCK_BODY, '''
+class A {
+  factory A() {
+    return null;
+  }
+}
+''');
+  }
+
   void test_convertToBlockBody_OK_method() {
     _indexTestUnit('''
 class A {
@@ -420,6 +435,21 @@
 ''');
   }
 
+  void test_convertToExpressionBody_OK_constructor() {
+    _indexTestUnit('''
+class A {
+  factory A() {
+    return null;
+  }
+}
+''');
+    assertHasAssistAt('A()', AssistKind.CONVERT_INTO_EXPRESSION_BODY, '''
+class A {
+  factory A() => null;
+}
+''');
+  }
+
   void test_convertToExpressionBody_OK_function_onBlock() {
     _indexTestUnit('''
 fff() {
@@ -513,75 +543,6 @@
     assertNoAssistAt('fff()', AssistKind.CONVERT_INTO_EXPRESSION_BODY);
   }
 
-  void test_convertToIsNotEmpty_OK_on_isEmpty() {
-    _indexTestUnit('''
-main(String str) {
-  !str.isEmpty;
-}
-''');
-    assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
-main(String str) {
-  str.isNotEmpty;
-}
-''');
-  }
-
-  void test_convertToIsNotEmpty_OK_on_str() {
-    _indexTestUnit('''
-main(String str) {
-  !str.isEmpty;
-}
-''');
-    assertHasAssistAt('str.', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
-main(String str) {
-  str.isNotEmpty;
-}
-''');
-  }
-
-  void test_convertToIsNotEmpty_OK_propertyAccess() {
-    _indexTestUnit('''
-main(String str) {
-  !'text'.isEmpty;
-}
-''');
-    assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
-main(String str) {
-  'text'.isNotEmpty;
-}
-''');
-  }
-
-  void test_convertToIsNotEmpty_wrong_notInPrefixExpression() {
-    _indexTestUnit('''
-main(String str) {
-  str.isEmpty;
-}
-''');
-    assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
-  }
-
-  void test_convertToIsNotEmpty_wrong_notIsEmpty() {
-    _indexTestUnit('''
-main(int p) {
-  !p.isEven;
-}
-''');
-    assertNoAssistAt('isEven;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
-  }
-
-  void test_convertToIsNotEmpty_wrote_noIsNotEmpty() {
-    _indexTestUnit('''
-class A {
-  bool get isEmpty => false;
-}
-main(A a) {
-  !a.isEmpty;
-}
-''');
-    assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
-  }
-
   void test_convertToIsNot_OK_childOfIs_left() {
     _indexTestUnit('''
 main(p) {
@@ -756,6 +717,75 @@
     assertNoAssistAt('++(', AssistKind.CONVERT_INTO_IS_NOT);
   }
 
+  void test_convertToIsNotEmpty_OK_on_isEmpty() {
+    _indexTestUnit('''
+main(String str) {
+  !str.isEmpty;
+}
+''');
+    assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
+main(String str) {
+  str.isNotEmpty;
+}
+''');
+  }
+
+  void test_convertToIsNotEmpty_OK_on_str() {
+    _indexTestUnit('''
+main(String str) {
+  !str.isEmpty;
+}
+''');
+    assertHasAssistAt('str.', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
+main(String str) {
+  str.isNotEmpty;
+}
+''');
+  }
+
+  void test_convertToIsNotEmpty_OK_propertyAccess() {
+    _indexTestUnit('''
+main(String str) {
+  !'text'.isEmpty;
+}
+''');
+    assertHasAssistAt('isEmpty', AssistKind.CONVERT_INTO_IS_NOT_EMPTY, '''
+main(String str) {
+  'text'.isNotEmpty;
+}
+''');
+  }
+
+  void test_convertToIsNotEmpty_wrong_notInPrefixExpression() {
+    _indexTestUnit('''
+main(String str) {
+  str.isEmpty;
+}
+''');
+    assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
+  }
+
+  void test_convertToIsNotEmpty_wrong_notIsEmpty() {
+    _indexTestUnit('''
+main(int p) {
+  !p.isEven;
+}
+''');
+    assertNoAssistAt('isEven;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
+  }
+
+  void test_convertToIsNotEmpty_wrote_noIsNotEmpty() {
+    _indexTestUnit('''
+class A {
+  bool get isEmpty => false;
+}
+main(A a) {
+  !a.isEmpty;
+}
+''');
+    assertNoAssistAt('isEmpty;', AssistKind.CONVERT_INTO_IS_NOT_EMPTY);
+  }
+
   void test_exchangeBinaryExpressionArguments_OK_extended_mixOperator_1() {
     _indexTestUnit('''
 main() {
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 8001fc0..67e46cc 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -9,9 +9,9 @@
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/refactoring/extract_method.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
+import '../../reflective_tests.dart';
 import 'abstract_refactoring.dart';
 
 
@@ -1323,6 +1323,25 @@
 ''');
   }
 
+  test_singleExpression_parameter_functionTypeAlias() {
+    indexTestUnit('''
+typedef R Foo<S, R>(S s);
+void main(Foo<String, int> foo, String s) {
+  int a = foo(s);
+}
+''');
+    _createRefactoringForString('foo(s)');
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+typedef R Foo<S, R>(S s);
+void main(Foo<String, int> foo, String s) {
+  int a = res(foo, s);
+}
+
+int res(Foo<String, int> foo, String s) => foo(s);
+''');
+  }
+
   test_singleExpression_returnTypeGeneric() {
     indexTestUnit('''
 main() {
diff --git a/pkg/analysis_server/test/timing/timing_framework.dart b/pkg/analysis_server/test/timing/timing_framework.dart
index cbaf1e6..cf10ee4 100644
--- a/pkg/analysis_server/test/timing/timing_framework.dart
+++ b/pkg/analysis_server/test/timing/timing_framework.dart
@@ -89,7 +89,8 @@
     onServerConnected.listen((_) {
       serverConnected.complete();
     });
-    return server.start(dispatchNotification).then((params) {
+    return server.start().then((params) {
+      server.listenToOutput(dispatchNotification);
       server.exitCode.then((_) {
         skipShutdown = true;
       });
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index b55d4fe..16bd463 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -389,6 +389,30 @@
               included directories that should not be analyzed.
             </p>
           </field>
+          <field name="packageRoots" optional="true">
+            <map>
+              <key><ref>FilePath</ref></key>
+              <value><ref>FilePath</ref></value>
+            </map>
+            <p>
+              A mapping from source directories to target directories
+              that should override the normal package: URI resolution
+              mechanism.  The analyzer will behave as though each
+              source directory in the map contains a special
+              pubspec.yaml file which resolves any package: URI to the
+              corresponding path within the target directory.  The
+              effect is the same as specifying the target directory as
+              a "--package_root" parameter to the Dart VM when
+              executing any Dart file inside the source directory.
+            </p>
+            <p>
+              Files in any directories that are not overridden by this
+              mapping have their package: URI's resolved using the
+              normal pubspec.yaml mechanism.  If this field is absent,
+              or the empty map is specified, that indicates that the
+              normal pubspec.yaml mechanism should always be used.
+            </p>
+          </field>
         </params>
       </request>
       <request method="setPriorityFiles">
diff --git a/pkg/analyzer/lib/src/generated/constant.dart b/pkg/analyzer/lib/src/generated/constant.dart
index 2c00d92..fa82b57 100644
--- a/pkg/analyzer/lib/src/generated/constant.dart
+++ b/pkg/analyzer/lib/src/generated/constant.dart
@@ -791,6 +791,15 @@
           superName = name.name;
         }
         superArguments = superConstructorInvocation.argumentList.arguments;
+      } else if (initializer is RedirectingConstructorInvocation) {
+        // This is a redirecting constructor, so just evaluate the constructor
+        // it redirects to.
+        ConstructorElement constructor = initializer.staticElement;
+        if (constructor != null && constructor.isConst) {
+          return _evaluateConstructorCall(
+              node, initializer.argumentList.arguments, constructor,
+              initializerVisitor, errorReporter);
+        }
       }
     }
     // Evaluate explicit or implicit call to super().
@@ -915,6 +924,15 @@
     invocation.staticElement = node.staticElement;
     return invocation;
   }
+
+  @override
+  RedirectingConstructorInvocation visitRedirectingConstructorInvocation(
+      RedirectingConstructorInvocation node) {
+    RedirectingConstructorInvocation invocation =
+        super.visitRedirectingConstructorInvocation(node);
+    invocation.staticElement = node.staticElement;
+    return invocation;
+  }
 }
 
 /**
@@ -4458,6 +4476,19 @@
     }
     return null;
   }
+
+  @override
+  Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
+    super.visitRedirectingConstructorInvocation(node);
+    ConstructorElement target = node.staticElement;
+    if (target != null && target.isConst) {
+      ConstructorDeclaration targetDeclaration = _constructorDeclarationMap[target];
+      if (targetDeclaration != null) {
+        _referenceGraph.addEdge(_source, targetDeclaration);
+      }
+    }
+    return null;
+  }
 }
 
 /**
diff --git a/pkg/analyzer/lib/src/generated/element.dart b/pkg/analyzer/lib/src/generated/element.dart
index 5cbdc89..51fb4d1 100644
--- a/pkg/analyzer/lib/src/generated/element.dart
+++ b/pkg/analyzer/lib/src/generated/element.dart
@@ -5134,9 +5134,18 @@
   /**
    * Initialize a newly created type alias element to have the given name.
    *
+   * [name] the name of this element
+   * [nameOffset] the offset of the name of this element in the file that
+   *    contains the declaration of this element
+   */
+  FunctionTypeAliasElementImpl(String name, int nameOffset) : super(name, nameOffset);
+
+  /**
+   * Initialize a newly created type alias element to have the given name.
+   *
    * @param name the name of this element
    */
-  FunctionTypeAliasElementImpl(Identifier name) : super.forNode(name);
+  FunctionTypeAliasElementImpl.forNode(Identifier name) : super.forNode(name);
 
   @override
   accept(ElementVisitor visitor) => visitor.visitFunctionTypeAliasElement(this);
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index e9d12e8..ea758e7 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -8,6 +8,9 @@
 library engine;
 
 import 'dart:collection';
+
+import 'package:analyzer/src/task/task_dart.dart';
+
 import 'java_core.dart';
 import 'java_engine.dart';
 import 'utilities_collection.dart';
@@ -1436,7 +1439,7 @@
   List<Source> getLibrariesContaining(Source source) {
     SourceEntry sourceEntry = _getReadableSourceEntryOrNull(source);
     if (sourceEntry is DartEntry) {
-      return sourceEntry.getValue(DartEntry.CONTAINING_LIBRARIES);
+      return sourceEntry.containingLibraries;
     }
     return Source.EMPTY_ARRAY;
   }
@@ -2007,7 +2010,6 @@
             dartEntry.recordResolutionErrorInLibrary(
                 librarySource,
                 thrownException);
-            _cache.remove(source);
           }
           if (source != librarySource) {
             _workManager.add(source, SourcePriority.PRIORITY_PART);
@@ -2478,6 +2480,19 @@
   }
 
   /**
+   * Create a [BuildUnitElementTask] for the given [source].
+   */
+  AnalysisContextImpl_TaskData _createBuildUnitElementTask(Source source, DartEntry dartEntry, Source librarySource) {
+    CompilationUnit unit = dartEntry.resolvableCompilationUnit;
+    if (unit == null) {
+      return _createParseDartTask(source, dartEntry);
+    }
+    return new AnalysisContextImpl_TaskData(
+        new BuildUnitElementTask(this, source, librarySource, unit),
+        false);
+  }
+
+  /**
    * Create a [GenerateDartErrorsTask] for the given source, marking the verification errors
    * as being in-process. The compilation unit and the library can be the same if the compilation
    * unit is the defining compilation unit of the library.
@@ -2553,12 +2568,7 @@
   }
 
   /**
-   * Create a [ParseDartTask] for the given source, marking the parse errors as being
-   * in-process.
-   *
-   * @param source the source whose content is to be parsed
-   * @param dartEntry the entry for the source
-   * @return task data representing the created task
+   * Create a [ParseDartTask] for the given [source].
    */
   AnalysisContextImpl_TaskData _createParseDartTask(Source source, DartEntry dartEntry) {
     if (dartEntry.getState(DartEntry.TOKEN_STREAM) != CacheState.VALID || dartEntry.getState(SourceEntry.LINE_INFO) != CacheState.VALID) {
@@ -2571,12 +2581,7 @@
   }
 
   /**
-   * Create a [ParseHtmlTask] for the given source, marking the parse errors as being
-   * in-process.
-   *
-   * @param source the source whose content is to be parsed
-   * @param htmlEntry the entry for the source
-   * @return task data representing the created task
+   * Create a [ParseHtmlTask] for the given [source].
    */
   AnalysisContextImpl_TaskData _createParseHtmlTask(Source source, HtmlEntry htmlEntry) {
     if (htmlEntry.getState(SourceEntry.CONTENT) != CacheState.VALID) {
@@ -3176,7 +3181,7 @@
           return _createResolveDartLibraryTask(source, dartEntry);
         }
       }
-      List<Source> librariesContaining = dartEntry.getValue(DartEntry.CONTAINING_LIBRARIES);
+      List<Source> librariesContaining = dartEntry.containingLibraries;
       for (Source librarySource in librariesContaining) {
         SourceEntry librarySourceEntry = _cache.get(librarySource);
         if (librarySourceEntry is DartEntry) {
@@ -3811,6 +3816,27 @@
   }
 
   /**
+   * Record the results produced by performing a [task] and return the cache
+   * entry associated with the results.
+   */
+  DartEntry _recordBuildUnitElementTask(BuildUnitElementTask task) {
+    Source source = task.source;
+    Source library = task.library;
+    DartEntry dartEntry = _cache.get(source);
+    CaughtException thrownException = task.exception;
+    if (thrownException != null) {
+      dartEntry.recordBuildElementErrorInLibrary(library, thrownException);
+      throw new AnalysisException('<rethrow>', thrownException);
+    }
+    dartEntry.setValueInLibrary(DartEntry.BUILT_UNIT, library, task.unit);
+    dartEntry.setValueInLibrary(DartEntry.BUILT_ELEMENT, library, task.unitElement);
+    ChangeNoticeImpl notice = _getNotice(source);
+    LineInfo lineInfo = dartEntry.getValue(SourceEntry.LINE_INFO);
+    notice.setErrors(dartEntry.allErrors, lineInfo);
+    return dartEntry;
+  }
+
+  /**
    * Given a cache entry and a library element, record the library element and other information
    * gleaned from the element in the cache entry.
    *
@@ -3841,7 +3867,7 @@
     dartEntry.setValueInLibrary(
         DartEntry.VERIFICATION_ERRORS,
         librarySource,
-            task.errors);
+        task.errors);
     ChangeNoticeImpl notice = _getNotice(source);
     LineInfo lineInfo = dartEntry.getValue(SourceEntry.LINE_INFO);
     notice.setErrors(dartEntry.allErrors, lineInfo);
@@ -4411,8 +4437,8 @@
 }
 
 /**
- * Instances of the class `AnalysisTaskResultRecorder` are used by an analysis context to
- * record the results of a task.
+ * An `AnalysisTaskResultRecorder` is used by an analysis context to record the
+ * results of a task.
  */
 class AnalysisContextImpl_AnalysisTaskResultRecorder implements AnalysisTaskVisitor<SourceEntry> {
   final AnalysisContextImpl AnalysisContextImpl_this;
@@ -4420,49 +4446,68 @@
   AnalysisContextImpl_AnalysisTaskResultRecorder(this.AnalysisContextImpl_this);
 
   @override
-  DartEntry visitGenerateDartErrorsTask(GenerateDartErrorsTask task) => AnalysisContextImpl_this._recordGenerateDartErrorsTask(task);
+  DartEntry visitBuildUnitElementTask(BuildUnitElementTask task)
+      => AnalysisContextImpl_this._recordBuildUnitElementTask(task);
 
   @override
-  DartEntry visitGenerateDartHintsTask(GenerateDartHintsTask task) => AnalysisContextImpl_this._recordGenerateDartHintsTask(task);
+  DartEntry visitGenerateDartErrorsTask(GenerateDartErrorsTask task)
+      => AnalysisContextImpl_this._recordGenerateDartErrorsTask(task);
 
   @override
-  SourceEntry visitGetContentTask(GetContentTask task) => AnalysisContextImpl_this._recordGetContentsTask(task);
+  DartEntry visitGenerateDartHintsTask(GenerateDartHintsTask task)
+      => AnalysisContextImpl_this._recordGenerateDartHintsTask(task);
 
   @override
-  DartEntry visitIncrementalAnalysisTask(IncrementalAnalysisTask task) => AnalysisContextImpl_this._recordIncrementalAnalysisTaskResults(task);
+  SourceEntry visitGetContentTask(GetContentTask task)
+      => AnalysisContextImpl_this._recordGetContentsTask(task);
 
   @override
-  DartEntry visitParseDartTask(ParseDartTask task) => AnalysisContextImpl_this._recordParseDartTaskResults(task);
+  DartEntry visitIncrementalAnalysisTask(IncrementalAnalysisTask task)
+      => AnalysisContextImpl_this._recordIncrementalAnalysisTaskResults(task);
 
   @override
-  HtmlEntry visitParseHtmlTask(ParseHtmlTask task) => AnalysisContextImpl_this._recordParseHtmlTaskResults(task);
+  DartEntry visitParseDartTask(ParseDartTask task)
+      => AnalysisContextImpl_this._recordParseDartTaskResults(task);
 
   @override
-  HtmlEntry visitPolymerBuildHtmlTask(PolymerBuildHtmlTask task) => AnalysisContextImpl_this._recordPolymerBuildHtmlTaskResults(task);
+  HtmlEntry visitParseHtmlTask(ParseHtmlTask task)
+      => AnalysisContextImpl_this._recordParseHtmlTaskResults(task);
 
   @override
-  HtmlEntry visitPolymerResolveHtmlTask(PolymerResolveHtmlTask task) => AnalysisContextImpl_this._recordPolymerResolveHtmlTaskResults(task);
+  HtmlEntry visitPolymerBuildHtmlTask(PolymerBuildHtmlTask task)
+      => AnalysisContextImpl_this._recordPolymerBuildHtmlTaskResults(task);
 
   @override
-  HtmlEntry visitResolveAngularComponentTemplateTask(ResolveAngularComponentTemplateTask task) => AnalysisContextImpl_this._recordResolveAngularComponentTemplateTaskResults(task);
+  HtmlEntry visitPolymerResolveHtmlTask(PolymerResolveHtmlTask task)
+      => AnalysisContextImpl_this._recordPolymerResolveHtmlTaskResults(task);
 
   @override
-  HtmlEntry visitResolveAngularEntryHtmlTask(ResolveAngularEntryHtmlTask task) => AnalysisContextImpl_this._recordResolveAngularEntryHtmlTaskResults(task);
+  HtmlEntry visitResolveAngularComponentTemplateTask(ResolveAngularComponentTemplateTask task)
+      => AnalysisContextImpl_this._recordResolveAngularComponentTemplateTaskResults(task);
 
   @override
-  DartEntry visitResolveDartLibraryCycleTask(ResolveDartLibraryCycleTask task) => AnalysisContextImpl_this.recordResolveDartLibraryCycleTaskResults(task);
+  HtmlEntry visitResolveAngularEntryHtmlTask(ResolveAngularEntryHtmlTask task)
+      => AnalysisContextImpl_this._recordResolveAngularEntryHtmlTaskResults(task);
 
   @override
-  DartEntry visitResolveDartLibraryTask(ResolveDartLibraryTask task) => AnalysisContextImpl_this.recordResolveDartLibraryTaskResults(task);
+  DartEntry visitResolveDartLibraryCycleTask(ResolveDartLibraryCycleTask task)
+      => AnalysisContextImpl_this.recordResolveDartLibraryCycleTaskResults(task);
 
   @override
-  DartEntry visitResolveDartUnitTask(ResolveDartUnitTask task) => AnalysisContextImpl_this._recordResolveDartUnitTaskResults(task);
+  DartEntry visitResolveDartLibraryTask(ResolveDartLibraryTask task)
+      => AnalysisContextImpl_this.recordResolveDartLibraryTaskResults(task);
 
   @override
-  HtmlEntry visitResolveHtmlTask(ResolveHtmlTask task) => AnalysisContextImpl_this._recordResolveHtmlTaskResults(task);
+  DartEntry visitResolveDartUnitTask(ResolveDartUnitTask task)
+      => AnalysisContextImpl_this._recordResolveDartUnitTaskResults(task);
 
   @override
-  DartEntry visitScanDartTask(ScanDartTask task) => AnalysisContextImpl_this._recordScanDartTaskResults(task);
+  HtmlEntry visitResolveHtmlTask(ResolveHtmlTask task)
+      => AnalysisContextImpl_this._recordResolveHtmlTaskResults(task);
+
+  @override
+  DartEntry visitScanDartTask(ScanDartTask task)
+      => AnalysisContextImpl_this._recordScanDartTaskResults(task);
 }
 
 class AnalysisContextImpl_ContextRetentionPolicy implements CacheRetentionPolicy {
@@ -5937,143 +5982,104 @@
 }
 
 /**
- * The interface `AnalysisTaskVisitor` defines the behavior of objects that can visit tasks.
- * While tasks are not structured in any interesting way, this class provides the ability to
- * dispatch to an appropriate method.
+ * An `AnalysisTaskVisitor` visits tasks. While tasks are not structured in any
+ * interesting way, this class provides the ability to dispatch to an
+ * appropriate method.
  */
 abstract class AnalysisTaskVisitor<E> {
   /**
-   * Visit a [GenerateDartErrorsTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
+   */
+  E visitBuildUnitElementTask(BuildUnitElementTask task);
+
+  /**
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitGenerateDartErrorsTask(GenerateDartErrorsTask task);
 
   /**
-   * Visit a [GenerateDartHintsTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitGenerateDartHintsTask(GenerateDartHintsTask task);
 
   /**
-   * Visit a [GetContentTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitGetContentTask(GetContentTask task);
 
   /**
-   * Visit an [IncrementalAnalysisTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitIncrementalAnalysisTask(IncrementalAnalysisTask incrementalAnalysisTask);
 
   /**
-   * Visit a [ParseDartTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitParseDartTask(ParseDartTask task);
 
   /**
-   * Visit a [ParseHtmlTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitParseHtmlTask(ParseHtmlTask task);
 
   /**
-   * Visit a [PolymerBuildHtmlTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitPolymerBuildHtmlTask(PolymerBuildHtmlTask task);
 
   /**
-   * Visit a [PolymerResolveHtmlTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitPolymerResolveHtmlTask(PolymerResolveHtmlTask task);
 
   /**
-   * Visit a [ResolveAngularComponentTemplateTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitResolveAngularComponentTemplateTask(ResolveAngularComponentTemplateTask task);
 
   /**
-   * Visit a [ResolveAngularEntryHtmlTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitResolveAngularEntryHtmlTask(ResolveAngularEntryHtmlTask task);
 
   /**
-   * Visit a [ResolveDartLibraryCycleTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitResolveDartLibraryCycleTask(ResolveDartLibraryCycleTask task);
 
   /**
-   * Visit a [ResolveDartLibraryTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitResolveDartLibraryTask(ResolveDartLibraryTask task);
 
   /**
-   * Visit a [ResolveDartUnitTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitResolveDartUnitTask(ResolveDartUnitTask task);
 
   /**
-   * Visit a [ResolveHtmlTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitResolveHtmlTask(ResolveHtmlTask task);
 
   /**
-   * Visit a [ScanDartTask].
-   *
-   * @param task the task to be visited
-   * @return the result of visiting the task
-   * @throws AnalysisException if the visitor throws an exception for some reason
+   * Visit the given [task], returning the result of the visit. This method will
+   * throw an AnalysisException if the visitor throws an exception.
    */
   E visitScanDartTask(ScanDartTask task);
 }
@@ -7309,6 +7315,32 @@
 }
 
 /**
+ * A `CachedResult` is a single analysis result that is stored in a
+ * [SourceEntry].
+ */
+class CachedResult<E> {
+  /**
+   * The state of the cached value.
+   */
+  CacheState state;
+
+  /**
+   * The value being cached, or `null` if there is no value (for example, when
+   * the [state] is [CacheState.INVALID].
+   */
+  E value;
+
+  /**
+   * Initialize a newly created result holder to represent the value of data
+   * described by the given [descriptor].
+   */
+  CachedResult(DataDescriptor descriptor) {
+    state = CacheState.INVALID;
+    value = descriptor.defaultValue;
+  }
+}
+
+/**
  * The interface `ChangeNotice` defines the behavior of objects that represent a change to the
  * analysis results associated with a given source.
  */
@@ -7727,103 +7759,6 @@
  */
 class DartEntry extends SourceEntry {
   /**
-   * The state of the cached token stream.
-   */
-  CacheState _tokenStreamState = CacheState.INVALID;
-
-  /**
-   * The head of the token stream, or `null` if the token stream is not
-   * currently cached.
-   */
-  Token _tokenStream;
-
-  /**
-   * The state of the cached scan errors.
-   */
-  CacheState _scanErrorsState = CacheState.INVALID;
-
-  /**
-   * The errors produced while scanning the compilation unit, or an empty array
-   * if the errors are not currently cached.
-   */
-  List<AnalysisError> _scanErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached source kind.
-   */
-  CacheState _sourceKindState = CacheState.INVALID;
-
-  /**
-   * The kind of this source.
-   */
-  SourceKind _sourceKind = SourceKind.UNKNOWN;
-
-  /**
-   * The state of the cached parsed compilation unit.
-   */
-  CacheState _parsedUnitState = CacheState.INVALID;
-
-  /**
-   * A flag indicating whether the parsed AST structure has been accessed since
-   * it was set. This is used to determine whether the structure needs to be
-   * copied before it is resolved.
-   */
-  bool _parsedUnitAccessed = false;
-
-  /**
-   * The parsed compilation unit, or `null` if the parsed compilation unit is
-   * not currently cached.
-   */
-  CompilationUnit _parsedUnit;
-
-  /**
-   * The state of the cached parse errors.
-   */
-  CacheState _parseErrorsState = CacheState.INVALID;
-
-  /**
-   * The errors produced while parsing the compilation unit, or an empty array
-   * if the errors are not currently cached.
-   */
-  List<AnalysisError> _parseErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached list of imported libraries.
-   */
-  CacheState _importedLibrariesState = CacheState.INVALID;
-
-  /**
-   * The list of libraries imported by the library, or an empty array if the
-   * list is not currently cached. The list will be empty if the Dart file is a
-   * part rather than a library.
-   */
-  List<Source> _importedLibraries = Source.EMPTY_ARRAY;
-
-  /**
-   * The state of the cached list of exported libraries.
-   */
-  CacheState _exportedLibrariesState = CacheState.INVALID;
-
-  /**
-   * The list of libraries exported by the library, or an empty array if the
-   * list is not currently cached. The list will be empty if the Dart file is a
-   * part rather than a library.
-   */
-  List<Source> _exportedLibraries = Source.EMPTY_ARRAY;
-
-  /**
-   * The state of the cached list of included parts.
-   */
-  CacheState _includedPartsState = CacheState.INVALID;
-
-  /**
-   * The list of parts included in the library, or an empty array if the list is
-   * not currently cached. The list will be empty if the Dart file is a part
-   * rather than a library.
-   */
-  List<Source> _includedParts = Source.EMPTY_ARRAY;
-
-  /**
    * The list of libraries that contain this compilation unit. The list will be
    * empty if there are no known libraries that contain this compilation unit.
    */
@@ -7838,56 +7773,34 @@
       = new ResolutionState();
 
   /**
-   * The state of the cached library element.
-   */
-  CacheState _elementState = CacheState.INVALID;
-
-  /**
-   * The element representing the library, or `null` if the element is not
-   * currently cached.
-   */
-  LibraryElement _element;
-
-  /**
-   * The state of the cached public namespace.
-   */
-  CacheState _publicNamespaceState = CacheState.INVALID;
-
-  /**
-   * The public namespace of the library, or `null` if the namespace is not
-   * currently cached.
-   */
-  Namespace _publicNamespace;
-
-  /**
-   * The state of the cached client/ server flag.
-   */
-  CacheState _clientServerState = CacheState.INVALID;
-
-  /**
-   * The state of the cached launchable flag.
-   */
-  CacheState _launchableState = CacheState.INVALID;
-
-  /**
-   * The error produced while performing Angular resolution, or an empty array
-   * if there are no errors if the error are not currently cached.
-   */
-  List<AnalysisError> _angularErrors = AnalysisError.NO_ERRORS;
-
-  /**
    * The data descriptor representing the errors reported during Angular
    * resolution.
    */
   static final DataDescriptor<List<AnalysisError>> ANGULAR_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("DartEntry.ANGULAR_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("DartEntry.ANGULAR_ERRORS", AnalysisError.NO_ERRORS);
+
+  /**
+   * The data descriptor representing the element model representing a single
+   * compilation unit. This model is incomplete and should not be used except as
+   * input to another task.
+   */
+  static final DataDescriptor<List<AnalysisError>> BUILT_ELEMENT
+      = new DataDescriptor<List<AnalysisError>>("DartEntry.BUILT_ELEMENT");
+
+  /**
+   * The data descriptor representing the AST structure after the element model
+   * has been built (and declarations are resolved) but before other resolution
+   * has been performed.
+   */
+  static final DataDescriptor<CompilationUnit> BUILT_UNIT
+      = new DataDescriptor<CompilationUnit>("DartEntry.BUILT_UNIT");
 
   /**
    * The data descriptor representing the list of libraries that contain this
    * compilation unit.
    */
   static final DataDescriptor<List<Source>> CONTAINING_LIBRARIES
-      = new DataDescriptor<List<Source>>("DartEntry.CONTAINING_LIBRARIES");
+      = new DataDescriptor<List<Source>>("DartEntry.CONTAINING_LIBRARIES", Source.EMPTY_ARRAY);
 
   /**
    * The data descriptor representing the library element for the library. This
@@ -7903,14 +7816,14 @@
    * a library.
    */
   static final DataDescriptor<List<Source>> EXPORTED_LIBRARIES
-      = new DataDescriptor<List<Source>>("DartEntry.EXPORTED_LIBRARIES");
+      = new DataDescriptor<List<Source>>("DartEntry.EXPORTED_LIBRARIES", Source.EMPTY_ARRAY);
 
   /**
    * The data descriptor representing the hints resulting from auditing the
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> HINTS
-      = new DataDescriptor<List<AnalysisError>>("DartEntry.HINTS");
+      = new DataDescriptor<List<AnalysisError>>("DartEntry.HINTS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the list of imported libraries. This data
@@ -7918,7 +7831,7 @@
    * a library.
    */
   static final DataDescriptor<List<Source>> IMPORTED_LIBRARIES
-      = new DataDescriptor<List<Source>>("DartEntry.IMPORTED_LIBRARIES");
+      = new DataDescriptor<List<Source>>("DartEntry.IMPORTED_LIBRARIES", Source.EMPTY_ARRAY);
 
   /**
    * The data descriptor representing the list of included parts. This data is
@@ -7926,7 +7839,7 @@
    * library.
    */
   static final DataDescriptor<List<Source>> INCLUDED_PARTS
-      = new DataDescriptor<List<Source>>("DartEntry.INCLUDED_PARTS");
+      = new DataDescriptor<List<Source>>("DartEntry.INCLUDED_PARTS", Source.EMPTY_ARRAY);
 
   /**
    * The data descriptor representing the client flag. This data is only
@@ -7934,7 +7847,7 @@
    * library.
    */
   static final DataDescriptor<bool> IS_CLIENT
-      = new DataDescriptor<bool>("DartEntry.IS_CLIENT");
+      = new DataDescriptor<bool>("DartEntry.IS_CLIENT", false);
 
   /**
    * The data descriptor representing the launchable flag. This data is only
@@ -7942,14 +7855,14 @@
    * library.
    */
   static final DataDescriptor<bool> IS_LAUNCHABLE
-      = new DataDescriptor<bool>("DartEntry.IS_LAUNCHABLE");
+      = new DataDescriptor<bool>("DartEntry.IS_LAUNCHABLE", false);
 
   /**
    * The data descriptor representing the errors resulting from parsing the
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> PARSE_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("DartEntry.PARSE_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("DartEntry.PARSE_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the parsed AST structure.
@@ -7970,7 +7883,7 @@
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> RESOLUTION_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("DartEntry.RESOLUTION_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("DartEntry.RESOLUTION_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the resolved AST structure.
@@ -7982,13 +7895,13 @@
    * The data descriptor representing the token stream.
    */
   static final DataDescriptor<List<AnalysisError>> SCAN_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("DartEntry.SCAN_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("DartEntry.SCAN_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the source kind.
    */
   static final DataDescriptor<SourceKind> SOURCE_KIND
-      = new DataDescriptor<SourceKind>("DartEntry.SOURCE_KIND");
+      = new DataDescriptor<SourceKind>("DartEntry.SOURCE_KIND", SourceKind.UNKNOWN);
 
   /**
    * The data descriptor representing the token stream.
@@ -8001,20 +7914,7 @@
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> VERIFICATION_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("DartEntry.VERIFICATION_ERRORS");
-
-  /**
-   * The index of the flag indicating whether this library is launchable
-   * (whether the file has a main method).
-   */
-  static int _LAUNCHABLE_INDEX = 1;
-
-  /**
-   * The index of the flag indicating whether the library is client code
-   * (whether the library depends on the html library). If the library is not
-   * "client code", then it is referred to as "server code".
-   */
-  static int _CLIENT_CODE_INDEX = 2;
+      = new DataDescriptor<List<AnalysisError>>("DartEntry.VERIFICATION_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * Add the given [librarySource] to the list of libraries that contain this
@@ -8028,15 +7928,8 @@
    * Flush any AST structures being maintained by this entry.
    */
   void flushAstStructures() {
-    if (_tokenStreamState == CacheState.VALID) {
-      _tokenStreamState = CacheState.FLUSHED;
-      _tokenStream = null;
-    }
-    if (_parsedUnitState == CacheState.VALID) {
-      _parsedUnitState = CacheState.FLUSHED;
-      _parsedUnitAccessed = false;
-      _parsedUnit = null;
-    }
+    _flush(TOKEN_STREAM);
+    _flush(PARSED_UNIT);
     _resolutionState.flushAstStructures();
   }
 
@@ -8046,17 +7939,16 @@
    */
   List<AnalysisError> get allErrors {
     List<AnalysisError> errors = new List<AnalysisError>();
-    ListUtilities.addAll(errors, _scanErrors);
-    ListUtilities.addAll(errors, _parseErrors);
+    errors.addAll(getValue(SCAN_ERRORS));
+    errors.addAll(getValue(PARSE_ERRORS));
     ResolutionState state = _resolutionState;
     while (state != null) {
-      ListUtilities.addAll(errors, state._buildElementErrors);
-      ListUtilities.addAll(errors, state._resolutionErrors);
-      ListUtilities.addAll(errors, state._verificationErrors);
-      ListUtilities.addAll(errors, state._hints);
+      errors.addAll(state.getValue(RESOLUTION_ERRORS));
+      errors.addAll(state.getValue(VERIFICATION_ERRORS));
+      errors.addAll(state.getValue(HINTS));
       state = state._nextState;
     }
-    ListUtilities.addAll(errors, _angularErrors);
+    errors.addAll(getValue(ANGULAR_ERRORS));
     if (errors.length == 0) {
       return AnalysisError.NO_ERRORS;
     }
@@ -8069,14 +7961,13 @@
    * or `null` if there is no parsed compilation unit available.
    */
   CompilationUnit get anyParsedCompilationUnit {
-    if (_parsedUnitState == CacheState.VALID) {
-      _parsedUnitAccessed = true;
-      return _parsedUnit;
+    if (getState(PARSED_UNIT) == CacheState.VALID) {
+      return getValue(PARSED_UNIT);
     }
     ResolutionState state = _resolutionState;
     while (state != null) {
-      if (state._builtUnitState == CacheState.VALID) {
-        return state._builtUnit;
+      if (state.getState(BUILT_UNIT) == CacheState.VALID) {
+        return state.getValue(BUILT_UNIT);
       }
       state = state._nextState;
     }
@@ -8091,12 +7982,11 @@
   CompilationUnit get anyResolvedCompilationUnit {
     ResolutionState state = _resolutionState;
     while (state != null) {
-      if (state._resolvedUnitState == CacheState.VALID) {
-        return state._resolvedUnit;
+      if (state.getState(RESOLVED_UNIT) == CacheState.VALID) {
+        return state.getValue(RESOLVED_UNIT);
       }
       state = state._nextState;
     }
-    ;
     return null;
   }
 
@@ -8106,7 +7996,7 @@
   List<Source> get containingLibraries => _containingLibraries;
 
   @override
-  SourceKind get kind => _sourceKind;
+  SourceKind get kind => getValue(SOURCE_KIND);
 
   /**
    * The library sources containing the receiver's source.
@@ -8129,129 +8019,42 @@
    * not been parsed.
    */
   CompilationUnit get resolvableCompilationUnit {
-    if (_parsedUnitState == CacheState.VALID) {
-      if (_parsedUnitAccessed) {
-        return _parsedUnit.accept(new AstCloner()) as CompilationUnit;
-      }
-      CompilationUnit unit = _parsedUnit;
-      _parsedUnitState = CacheState.FLUSHED;
-      _parsedUnitAccessed = false;
-      _parsedUnit = null;
+    if (getState(PARSED_UNIT) == CacheState.VALID) {
+      CompilationUnit unit = getValue(PARSED_UNIT);
+      setState(PARSED_UNIT, CacheState.FLUSHED);
       return unit;
     }
     ResolutionState state = _resolutionState;
     while (state != null) {
-      if (state._builtUnitState == CacheState.VALID) {
+      if (state.getState(BUILT_UNIT) == CacheState.VALID) {
         // TODO(brianwilkerson) We're cloning the structure to remove any
         // previous resolution data, but I'm not sure that's necessary.
-        return state._builtUnit.accept(new AstCloner()) as CompilationUnit;
+        return state.getValue(BUILT_UNIT).accept(new AstCloner()) as CompilationUnit;
       }
-      if (state._resolvedUnitState == CacheState.VALID) {
-        return state._resolvedUnit.accept(new AstCloner()) as CompilationUnit;
+      if (state.getState(RESOLVED_UNIT) == CacheState.VALID) {
+        return state.getValue(RESOLVED_UNIT).accept(new AstCloner()) as CompilationUnit;
       }
       state = state._nextState;
     }
-    ;
     return null;
   }
 
-  @override
-  CacheState getState(DataDescriptor descriptor) {
-    if (identical(descriptor, DartEntry.ELEMENT)) {
-      return _elementState;
-    } else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
-      return _exportedLibrariesState;
-    } else if (identical(descriptor, DartEntry.IMPORTED_LIBRARIES)) {
-      return _importedLibrariesState;
-    } else if (identical(descriptor, DartEntry.INCLUDED_PARTS)) {
-      return _includedPartsState;
-    } else if (identical(descriptor, DartEntry.IS_CLIENT)) {
-      return _clientServerState;
-    } else if (identical(descriptor, DartEntry.IS_LAUNCHABLE)) {
-      return _launchableState;
-    } else if (identical(descriptor, DartEntry.PARSE_ERRORS)) {
-      return _parseErrorsState;
-    } else if (identical(descriptor, DartEntry.PARSED_UNIT)) {
-      return _parsedUnitState;
-    } else if (identical(descriptor, DartEntry.PUBLIC_NAMESPACE)) {
-      return _publicNamespaceState;
-    } else if (identical(descriptor, DartEntry.SCAN_ERRORS)) {
-      return _scanErrorsState;
-    } else if (identical(descriptor, DartEntry.SOURCE_KIND)) {
-      return _sourceKindState;
-    } else if (identical(descriptor, DartEntry.TOKEN_STREAM)) {
-      return _tokenStreamState;
-    } else {
-      return super.getState(descriptor);
-    }
-  }
-
   /**
    * Return the state of the data represented by the given [descriptor] in the
    * context of the given [librarySource].
    */
   CacheState getStateInLibrary(DataDescriptor descriptor, Source librarySource) {
+    if (!_isValidLibraryDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
+    }
     ResolutionState state = _resolutionState;
     while (state != null) {
       if (librarySource == state._librarySource) {
-        if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)) {
-          return state._resolutionErrorsState;
-        } else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
-          return state._resolvedUnitState;
-        } else if (identical(descriptor, DartEntry.VERIFICATION_ERRORS)) {
-          return state._verificationErrorsState;
-        } else if (identical(descriptor, DartEntry.HINTS)) {
-          return state._hintsState;
-        } else {
-          throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
-        }
+        return state.getState(descriptor);
       }
       state = state._nextState;
     }
-    ;
-    if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)
-        || identical(descriptor, DartEntry.RESOLVED_UNIT)
-        || identical(descriptor, DartEntry.VERIFICATION_ERRORS)
-        || identical(descriptor, DartEntry.HINTS)) {
-      return CacheState.INVALID;
-    } else {
-      throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
-    }
-  }
-
-  @override
-  Object getValue(DataDescriptor descriptor) {
-    if (identical(descriptor, DartEntry.ANGULAR_ERRORS)) {
-      return _angularErrors;
-    } else if (identical(descriptor, DartEntry.CONTAINING_LIBRARIES)) {
-      return new List.from(_containingLibraries);
-    } else if (identical(descriptor, DartEntry.ELEMENT)) {
-      return _element;
-    } else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
-      return _exportedLibraries;
-    } else if (identical(descriptor, DartEntry.IMPORTED_LIBRARIES)) {
-      return _importedLibraries;
-    } else if (identical(descriptor, DartEntry.INCLUDED_PARTS)) {
-      return _includedParts;
-    } else if (identical(descriptor, DartEntry.IS_CLIENT)) {
-      return getFlag(_CLIENT_CODE_INDEX);
-    } else if (identical(descriptor, DartEntry.IS_LAUNCHABLE)) {
-      return getFlag(_LAUNCHABLE_INDEX);
-    } else if (identical(descriptor, DartEntry.PARSE_ERRORS)) {
-      return _parseErrors;
-    } else if (identical(descriptor, DartEntry.PARSED_UNIT)) {
-      _parsedUnitAccessed = true;
-      return _parsedUnit;
-    } else if (identical(descriptor, DartEntry.PUBLIC_NAMESPACE)) {
-      return _publicNamespace;
-    } else if (identical(descriptor, DartEntry.SCAN_ERRORS)) {
-      return _scanErrors;
-    } else if (identical(descriptor, DartEntry.SOURCE_KIND)) {
-      return _sourceKind;
-    } else if (identical(descriptor, DartEntry.TOKEN_STREAM)) {
-      return _tokenStream;
-    }
-    return super.getValue(descriptor);
+    return CacheState.INVALID;
   }
 
   /**
@@ -8260,33 +8063,17 @@
    * the descriptor is not in the cache.
    */
   Object getValueInLibrary(DataDescriptor descriptor, Source librarySource) {
+    if (!_isValidLibraryDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
+    }
     ResolutionState state = _resolutionState;
     while (state != null) {
       if (librarySource == state._librarySource) {
-        if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)) {
-          return state._resolutionErrors;
-        } else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
-          return state._resolvedUnit;
-        } else if (identical(descriptor, DartEntry.VERIFICATION_ERRORS)) {
-          return state._verificationErrors;
-        } else if (identical(descriptor, DartEntry.HINTS)) {
-          return state._hints;
-        } else {
-          throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
-        }
+        return state.getValue(descriptor);
       }
       state = state._nextState;
     }
-    ;
-    if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)
-        || identical(descriptor, DartEntry.VERIFICATION_ERRORS)
-        || identical(descriptor, DartEntry.HINTS)) {
-      return AnalysisError.NO_ERRORS;
-    } else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
-      return null;
-    } else {
-      throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
-    }
+    return descriptor.defaultValue;
   }
 
   /**
@@ -8296,50 +8083,18 @@
    * marked as invalid.
    */
   bool hasInvalidData(DataDescriptor descriptor) {
-    if (identical(descriptor, DartEntry.ELEMENT)) {
-      return _elementState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
-      return _exportedLibrariesState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.IMPORTED_LIBRARIES)) {
-      return _importedLibrariesState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.INCLUDED_PARTS)) {
-      return _includedPartsState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.IS_CLIENT)) {
-      return _clientServerState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.IS_LAUNCHABLE)) {
-      return _launchableState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.PARSE_ERRORS)) {
-      return _parseErrorsState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.PARSED_UNIT)) {
-      return _parsedUnitState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.PUBLIC_NAMESPACE)) {
-      return _publicNamespaceState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.SCAN_ERRORS)) {
-      return _scanErrorsState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.SOURCE_KIND)) {
-      return _sourceKindState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.TOKEN_STREAM)) {
-      return _tokenStreamState == CacheState.INVALID;
-    } else if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)
-        || identical(descriptor, DartEntry.RESOLVED_UNIT)
-        || identical(descriptor, DartEntry.VERIFICATION_ERRORS)
-        || identical(descriptor, DartEntry.HINTS)) {
+    if (_isValidDescriptor(descriptor)) {
+      return getState(descriptor) == CacheState.INVALID;
+    } else if (_isValidLibraryDescriptor(descriptor)) {
       ResolutionState state = _resolutionState;
       while (state != null) {
-        if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)) {
-          return state._resolutionErrorsState == CacheState.INVALID;
-        } else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
-          return state._resolvedUnitState == CacheState.INVALID;
-        } else if (identical(descriptor, DartEntry.VERIFICATION_ERRORS)) {
-          return state._verificationErrorsState == CacheState.INVALID;
-        } else if (identical(descriptor, DartEntry.HINTS)) {
-          return state._hintsState == CacheState.INVALID;
+        if (state.getState(descriptor) == CacheState.INVALID) {
+          return true;
         }
+        state = state._nextState;
       }
-      return false;
-    } else {
-      return super.getState(descriptor) == CacheState.INVALID;
     }
+    return false;
   }
 
   /**
@@ -8348,13 +8103,13 @@
    * [resolvableCompilationUnit] will return a non-`null` result.
    */
   bool get hasResolvableCompilationUnit {
-    if (_parsedUnitState == CacheState.VALID) {
+    if (getState(PARSED_UNIT) == CacheState.VALID) {
       return true;
     }
     ResolutionState state = _resolutionState;
     while (state != null) {
-      if (state._builtUnitState == CacheState.VALID
-          || state._resolvedUnitState == CacheState.VALID) {
+      if (state.getState(BUILT_UNIT) == CacheState.VALID
+          || state.getState(RESOLVED_UNIT) == CacheState.VALID) {
         return true;
       }
       state = state._nextState;
@@ -8366,17 +8121,11 @@
   @override
   void invalidateAllInformation() {
     super.invalidateAllInformation();
-    _scanErrors = AnalysisError.NO_ERRORS;
-    _scanErrorsState = CacheState.INVALID;
-    _tokenStream = null;
-    _tokenStreamState = CacheState.INVALID;
-    _sourceKind = SourceKind.UNKNOWN;
-    _sourceKindState = CacheState.INVALID;
-    _parseErrors = AnalysisError.NO_ERRORS;
-    _parseErrorsState = CacheState.INVALID;
-    _parsedUnit = null;
-    _parsedUnitAccessed = false;
-    _parsedUnitState = CacheState.INVALID;
+    setState(SCAN_ERRORS, CacheState.INVALID);
+    setState(TOKEN_STREAM, CacheState.INVALID);
+    setState(SOURCE_KIND, CacheState.INVALID);
+    setState(PARSE_ERRORS, CacheState.INVALID);
+    setState(PARSED_UNIT, CacheState.INVALID);
     _discardCachedResolutionInformation(true);
   }
 
@@ -8386,18 +8135,14 @@
    * results of converting URIs to source files should also be invalidated.
    */
   void invalidateAllResolutionInformation(bool invalidateUris) {
-    if (_parsedUnitState == CacheState.FLUSHED) {
+    if (getState(PARSED_UNIT) == CacheState.FLUSHED) {
       ResolutionState state = _resolutionState;
       while (state != null) {
-        if (state._builtUnitState == CacheState.VALID) {
-          _parsedUnit = state._builtUnit;
-          _parsedUnitAccessed = true;
-          _parsedUnitState = CacheState.VALID;
+        if (state.getState(BUILT_UNIT) == CacheState.VALID) {
+          setValue(PARSED_UNIT, state.getValue(BUILT_UNIT));
           break;
-        } else if (state._resolvedUnitState == CacheState.VALID) {
-          _parsedUnit = state._resolvedUnit;
-          _parsedUnitAccessed = true;
-          _parsedUnitState = CacheState.VALID;
+        } else if (state.getState(RESOLVED_UNIT) == CacheState.VALID) {
+          setValue(PARSED_UNIT, state.getValue(RESOLVED_UNIT));
           break;
         }
         state = state._nextState;
@@ -8412,7 +8157,7 @@
   bool get isRefactoringSafe {
     ResolutionState state = _resolutionState;
     while (state != null) {
-      CacheState resolvedState = state._resolvedUnitState;
+      CacheState resolvedState = state.getState(RESOLVED_UNIT);
       if (resolvedState != CacheState.VALID
           && resolvedState != CacheState.FLUSHED) {
         return false;
@@ -8423,39 +8168,15 @@
   }
 
   /**
-   * Record that an error occurred while attempting to build the element model
-   * for the source represented by this entry. This will set the state of all
-   * resolution-based information as being in error, but will not change the
-   * state of any parse results.
-   *
-   * @param librarySource the source of the library in which the element model was being built
-   * @param exception the exception that shows where the error occurred
+   * Record that an [exception] occurred while attempting to build the element
+   * model for the source represented by this entry in the context of the given
+   * [library]. This will set the state of all resolution-based information as
+   * being in error, but will not change the state of any parse results.
    */
   void recordBuildElementErrorInLibrary(Source librarySource, CaughtException exception) {
-    this.exception = exception;
-    _element = null;
-    _elementState = CacheState.ERROR;
-    clearFlags([_LAUNCHABLE_INDEX, _CLIENT_CODE_INDEX]);
-    _clientServerState = CacheState.ERROR;
-    _launchableState = CacheState.ERROR;
-    ResolutionState state = _getOrCreateResolutionState(librarySource);
-    state.recordBuildElementError();
-  }
-
-  /**
-   * Record that an in-process model build has stopped without recording results
-   * because the results were invalidated before they could be recorded.
-   */
-  void recordBuildElementNotInProcess() {
-    if (_elementState == CacheState.IN_PROCESS) {
-      _elementState = CacheState.INVALID;
-    }
-    if (_clientServerState == CacheState.IN_PROCESS) {
-      _clientServerState = CacheState.INVALID;
-    }
-    if (_launchableState == CacheState.IN_PROCESS) {
-      _launchableState = CacheState.INVALID;
-    }
+    setStateInLibrary(BUILT_ELEMENT, librarySource, CacheState.ERROR);
+    setStateInLibrary(BUILT_UNIT, librarySource, CacheState.ERROR);
+    recordResolutionErrorInLibrary(librarySource, exception);
   }
 
   @override
@@ -8484,76 +8205,16 @@
    * including any resolution-based information, as being in error.
    */
   void recordParseError(CaughtException exception) {
-    _sourceKind = SourceKind.UNKNOWN;
-    _sourceKindState = CacheState.ERROR;
-    _parseErrors = AnalysisError.NO_ERRORS;
-    _parseErrorsState = CacheState.ERROR;
-    _parsedUnit = null;
-    _parsedUnitAccessed = false;
-    _parsedUnitState = CacheState.ERROR;
-    _exportedLibraries = Source.EMPTY_ARRAY;
-    _exportedLibrariesState = CacheState.ERROR;
-    _importedLibraries = Source.EMPTY_ARRAY;
-    _importedLibrariesState = CacheState.ERROR;
-    _includedParts = Source.EMPTY_ARRAY;
-    _includedPartsState = CacheState.ERROR;
+    setState(SOURCE_KIND, CacheState.ERROR);
+    setState(PARSE_ERRORS, CacheState.ERROR);
+    setState(PARSED_UNIT, CacheState.ERROR);
+    setState(EXPORTED_LIBRARIES, CacheState.ERROR);
+    setState(IMPORTED_LIBRARIES, CacheState.ERROR);
+    setState(INCLUDED_PARTS, CacheState.ERROR);
     recordResolutionError(exception);
   }
 
   /**
-   * Record that the parse-related information for the associated source is
-   * about to be computed by the current thread.
-   */
-  void recordParseInProcess() {
-    if (_sourceKindState != CacheState.VALID) {
-      _sourceKindState = CacheState.IN_PROCESS;
-    }
-    if (_parseErrorsState != CacheState.VALID) {
-      _parseErrorsState = CacheState.IN_PROCESS;
-    }
-    if (_parsedUnitState != CacheState.VALID) {
-      _parsedUnitState = CacheState.IN_PROCESS;
-    }
-    if (_exportedLibrariesState != CacheState.VALID) {
-      _exportedLibrariesState = CacheState.IN_PROCESS;
-    }
-    if (_importedLibrariesState != CacheState.VALID) {
-      _importedLibrariesState = CacheState.IN_PROCESS;
-    }
-    if (_includedPartsState != CacheState.VALID) {
-      _includedPartsState = CacheState.IN_PROCESS;
-    }
-  }
-
-  /**
-   * Record that an in-process parse has stopped without recording results
-   * because the results were invalidated before they could be recorded.
-   */
-  void recordParseNotInProcess() {
-    if (getState(SourceEntry.LINE_INFO) == CacheState.IN_PROCESS) {
-      setState(SourceEntry.LINE_INFO, CacheState.INVALID);
-    }
-    if (_sourceKindState == CacheState.IN_PROCESS) {
-      _sourceKindState = CacheState.INVALID;
-    }
-    if (_parseErrorsState == CacheState.IN_PROCESS) {
-      _parseErrorsState = CacheState.INVALID;
-    }
-    if (_parsedUnitState == CacheState.IN_PROCESS) {
-      _parsedUnitState = CacheState.INVALID;
-    }
-    if (_exportedLibrariesState == CacheState.IN_PROCESS) {
-      _exportedLibrariesState = CacheState.INVALID;
-    }
-    if (_importedLibrariesState == CacheState.IN_PROCESS) {
-      _importedLibrariesState = CacheState.INVALID;
-    }
-    if (_includedPartsState == CacheState.IN_PROCESS) {
-      _includedPartsState = CacheState.INVALID;
-    }
-  }
-
-  /**
    * Record that an [exception] occurred while attempting to resolve the source
    * represented by this entry. This will set the state of all resolution-based
    * information as being in error, but will not change the state of any parse
@@ -8563,13 +8224,10 @@
    */
   void recordResolutionError(CaughtException exception) {
     this.exception = exception;
-    _element = null;
-    _elementState = CacheState.ERROR;
-    clearFlags([_LAUNCHABLE_INDEX, _CLIENT_CODE_INDEX]);
-    _clientServerState = CacheState.ERROR;
-    _launchableState = CacheState.ERROR;
-    _publicNamespace = null;
-    _publicNamespaceState = CacheState.ERROR;
+    setState(ELEMENT, CacheState.ERROR);
+    setState(IS_CLIENT, CacheState.ERROR);
+    setState(IS_LAUNCHABLE, CacheState.ERROR);
+    setState(PUBLIC_NAMESPACE, CacheState.ERROR);
     _resolutionState.recordResolutionErrorsInAllLibraries();
   }
 
@@ -8583,40 +8241,15 @@
    */
   void recordResolutionErrorInLibrary(Source librarySource, CaughtException exception) {
     this.exception = exception;
-    _element = null;
-    _elementState = CacheState.ERROR;
-    clearFlags([_LAUNCHABLE_INDEX, _CLIENT_CODE_INDEX]);
-    _clientServerState = CacheState.ERROR;
-    _launchableState = CacheState.ERROR;
-    _publicNamespace = null;
-    _publicNamespaceState = CacheState.ERROR;
+    setState(ELEMENT, CacheState.ERROR);
+    setState(IS_CLIENT, CacheState.ERROR);
+    setState(IS_LAUNCHABLE, CacheState.ERROR);
+    setState(PUBLIC_NAMESPACE, CacheState.ERROR);
     ResolutionState state = _getOrCreateResolutionState(librarySource);
     state.recordResolutionError();
   }
 
   /**
-   * Record that an in-process resolution has stopped without recording results because the results
-   * were invalidated before they could be recorded.
-   */
-  void recordResolutionNotInProcess() {
-    if (_elementState == CacheState.IN_PROCESS) {
-      _elementState = CacheState.INVALID;
-    }
-    if (_clientServerState == CacheState.IN_PROCESS) {
-      _clientServerState = CacheState.INVALID;
-    }
-    if (_launchableState == CacheState.IN_PROCESS) {
-      _launchableState = CacheState.INVALID;
-    }
-    // TODO(brianwilkerson) Remove the code above this line after resolution and element building
-    // are separated.
-    if (_publicNamespaceState == CacheState.IN_PROCESS) {
-      _publicNamespaceState = CacheState.INVALID;
-    }
-    _resolutionState.recordResolutionNotInProcess();
-  }
-
-  /**
    * Record that an [exception] occurred while attempting to scan or parse the
    * entry represented by this entry. This will set the state of all information,
    * including any resolution-based information, as being in error.
@@ -8624,46 +8257,12 @@
   @override
   void recordScanError(CaughtException exception) {
     super.recordScanError(exception);
-    _scanErrors = AnalysisError.NO_ERRORS;
-    _scanErrorsState = CacheState.ERROR;
-    _tokenStream = null;
-    _tokenStreamState = CacheState.ERROR;
+    setState(SCAN_ERRORS, CacheState.ERROR);
+    setState(TOKEN_STREAM, CacheState.ERROR);
     recordParseError(exception);
   }
 
   /**
-   * Record that the scan-related information for the associated source is about
-   * to be computed by the current thread.
-   */
-  void recordScanInProcess() {
-    if (getState(SourceEntry.LINE_INFO) != CacheState.VALID) {
-      setState(SourceEntry.LINE_INFO, CacheState.IN_PROCESS);
-    }
-    if (_scanErrorsState != CacheState.VALID) {
-      _scanErrorsState = CacheState.IN_PROCESS;
-    }
-    if (_tokenStreamState != CacheState.VALID) {
-      _tokenStreamState = CacheState.IN_PROCESS;
-    }
-  }
-
-  /**
-   * Record that an in-process scan has stopped without recording results
-   * because the results were invalidated before they could be recorded.
-   */
-  void recordScanNotInProcess() {
-    if (getState(SourceEntry.LINE_INFO) == CacheState.IN_PROCESS) {
-      setState(SourceEntry.LINE_INFO, CacheState.INVALID);
-    }
-    if (_scanErrorsState == CacheState.IN_PROCESS) {
-      _scanErrorsState = CacheState.INVALID;
-    }
-    if (_tokenStreamState == CacheState.IN_PROCESS) {
-      _tokenStreamState = CacheState.INVALID;
-    }
-  }
-
-  /**
    * Record that an [exception] occurred while attempting to generate errors and
    * warnings for the source represented by this entry. This will set the state
    * of all verification information as being in error.
@@ -8727,53 +8326,6 @@
     _containingLibraries.add(librarySource);
   }
 
-  @override
-  void setState(DataDescriptor descriptor, CacheState state) {
-    if (identical(descriptor, DartEntry.ELEMENT)) {
-      _element = updatedValue(state, _element, null);
-      _elementState = state;
-    } else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
-      _exportedLibraries = updatedValue(state, _exportedLibraries, Source.EMPTY_ARRAY);
-      _exportedLibrariesState = state;
-    } else if (identical(descriptor, DartEntry.IMPORTED_LIBRARIES)) {
-      _importedLibraries = updatedValue(state, _importedLibraries, Source.EMPTY_ARRAY);
-      _importedLibrariesState = state;
-    } else if (identical(descriptor, DartEntry.INCLUDED_PARTS)) {
-      _includedParts = updatedValue(state, _includedParts, Source.EMPTY_ARRAY);
-      _includedPartsState = state;
-    } else if (identical(descriptor, DartEntry.IS_CLIENT)) {
-      _updateValueOfFlag(_CLIENT_CODE_INDEX, state);
-      _clientServerState = state;
-    } else if (identical(descriptor, DartEntry.IS_LAUNCHABLE)) {
-      _updateValueOfFlag(_LAUNCHABLE_INDEX, state);
-      _launchableState = state;
-    } else if (identical(descriptor, DartEntry.PARSE_ERRORS)) {
-      _parseErrors = updatedValue(state, _parseErrors, AnalysisError.NO_ERRORS);
-      _parseErrorsState = state;
-    } else if (identical(descriptor, DartEntry.PARSED_UNIT)) {
-      CompilationUnit newUnit = updatedValue(state, _parsedUnit, null);
-      if (!identical(newUnit, _parsedUnit)) {
-        _parsedUnitAccessed = false;
-      }
-      _parsedUnit = newUnit;
-      _parsedUnitState = state;
-    } else if (identical(descriptor, DartEntry.PUBLIC_NAMESPACE)) {
-      _publicNamespace = updatedValue(state, _publicNamespace, null);
-      _publicNamespaceState = state;
-    } else if (identical(descriptor, DartEntry.SCAN_ERRORS)) {
-      _scanErrors = updatedValue(state, _scanErrors, AnalysisError.NO_ERRORS);
-      _scanErrorsState = state;
-    } else if (identical(descriptor, DartEntry.SOURCE_KIND)) {
-      _sourceKind = updatedValue(state, _sourceKind, SourceKind.UNKNOWN);
-      _sourceKindState = state;
-    } else if (identical(descriptor, DartEntry.TOKEN_STREAM)) {
-      _tokenStream = updatedValue(state, _tokenStream, null);
-      _tokenStreamState = state;
-    } else {
-      super.setState(descriptor, state);
-    }
-  }
-
   /**
    * Set the state of the data represented by the given descriptor in the context of the given
    * library to the given state.
@@ -8784,68 +8336,11 @@
    * @param cacheState the new state of the data represented by the given descriptor
    */
   void setStateInLibrary(DataDescriptor descriptor, Source librarySource, CacheState cacheState) {
+    if (!_isValidLibraryDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
+    }
     ResolutionState state = _getOrCreateResolutionState(librarySource);
-    if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)) {
-      state._resolutionErrors = updatedValue(cacheState, state._resolutionErrors, AnalysisError.NO_ERRORS);
-      state._resolutionErrorsState = cacheState;
-    } else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
-      state._resolvedUnit = updatedValue(cacheState, state._resolvedUnit, null);
-      state._resolvedUnitState = cacheState;
-    } else if (identical(descriptor, DartEntry.VERIFICATION_ERRORS)) {
-      state._verificationErrors = updatedValue(cacheState, state._verificationErrors, AnalysisError.NO_ERRORS);
-      state._verificationErrorsState = cacheState;
-    } else if (identical(descriptor, DartEntry.HINTS)) {
-      state._hints = updatedValue(cacheState, state._hints, AnalysisError.NO_ERRORS);
-      state._hintsState = cacheState;
-    } else {
-      throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
-    }
-  }
-
-  @override
-  void setValue(DataDescriptor descriptor, Object value) {
-    if (identical(descriptor, DartEntry.ANGULAR_ERRORS)) {
-      _angularErrors = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
-    } else if (identical(descriptor, DartEntry.ELEMENT)) {
-      _element = value as LibraryElement;
-      _elementState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.EXPORTED_LIBRARIES)) {
-      _exportedLibraries = value == null ? Source.EMPTY_ARRAY : (value as List<Source>);
-      _exportedLibrariesState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.IMPORTED_LIBRARIES)) {
-      _importedLibraries = value == null ? Source.EMPTY_ARRAY : (value as List<Source>);
-      _importedLibrariesState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.INCLUDED_PARTS)) {
-      _includedParts = value == null ? Source.EMPTY_ARRAY : (value as List<Source>);
-      _includedPartsState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.IS_CLIENT)) {
-      setFlag(_CLIENT_CODE_INDEX, value as bool);
-      _clientServerState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.IS_LAUNCHABLE)) {
-      setFlag(_LAUNCHABLE_INDEX, value as bool);
-      _launchableState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.PARSE_ERRORS)) {
-      _parseErrors = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
-      _parseErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.PARSED_UNIT)) {
-      _parsedUnit = value as CompilationUnit;
-      _parsedUnitAccessed = false;
-      _parsedUnitState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.PUBLIC_NAMESPACE)) {
-      _publicNamespace = value as Namespace;
-      _publicNamespaceState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.SCAN_ERRORS)) {
-      _scanErrors = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
-      _scanErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.SOURCE_KIND)) {
-      _sourceKind = value as SourceKind;
-      _sourceKindState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.TOKEN_STREAM)) {
-      _tokenStream = value as Token;
-      _tokenStreamState = CacheState.VALID;
-    } else {
-      super.setValue(descriptor, value);
-    }
+    state.setState(descriptor, cacheState);
   }
 
   /**
@@ -8858,59 +8353,48 @@
    * @param value the new value of the data represented by the given descriptor and library
    */
   void setValueInLibrary(DataDescriptor descriptor, Source librarySource, Object value) {
-    ResolutionState state = _getOrCreateResolutionState(librarySource);
-    if (identical(descriptor, DartEntry.RESOLUTION_ERRORS)) {
-      state._resolutionErrors = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
-      state._resolutionErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.RESOLVED_UNIT)) {
-      state._resolvedUnit = value as CompilationUnit;
-      state._resolvedUnitState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.VERIFICATION_ERRORS)) {
-      state._verificationErrors = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
-      state._verificationErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, DartEntry.HINTS)) {
-      state._hints = value == null ? AnalysisError.NO_ERRORS : (value as List<AnalysisError>);
-      state._hintsState = CacheState.VALID;
+    if (!_isValidLibraryDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
     }
+    ResolutionState state = _getOrCreateResolutionState(librarySource);
+    state.setValue(descriptor, value);
   }
 
   @override
-  bool get hasErrorState => super.hasErrorState || _scanErrorsState == CacheState.ERROR || _tokenStreamState == CacheState.ERROR || _sourceKindState == CacheState.ERROR || _parsedUnitState == CacheState.ERROR || _parseErrorsState == CacheState.ERROR || _importedLibrariesState == CacheState.ERROR || _exportedLibrariesState == CacheState.ERROR || _includedPartsState == CacheState.ERROR || _elementState == CacheState.ERROR || _publicNamespaceState == CacheState.ERROR || _clientServerState == CacheState.ERROR || _launchableState == CacheState.ERROR || _resolutionState.hasErrorState;
-
-  @override
-  bool writeDiffOn(JavaStringBuilder builder, SourceEntry oldEntry) {
-    bool needsSeparator = super.writeDiffOn(builder, oldEntry);
+  bool _writeDiffOn(StringBuffer buffer, SourceEntry oldEntry) {
+    bool needsSeparator = super._writeDiffOn(buffer, oldEntry);
     if (oldEntry is! DartEntry) {
       if (needsSeparator) {
-        builder.append("; ");
+        buffer.write("; ");
       }
-      builder.append("entry type changed; was ${oldEntry.runtimeType.toString()}");
+      buffer.write("entry type changed; was ");
+      buffer.write(oldEntry.runtimeType.toString());
       return true;
     }
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.TOKEN_STREAM, "tokenStream");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.SCAN_ERRORS, "scanErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.SOURCE_KIND, "sourceKind");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.PARSED_UNIT, "parsedUnit");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.PARSE_ERRORS, "parseErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.IMPORTED_LIBRARIES, "importedLibraries");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.EXPORTED_LIBRARIES, "exportedLibraries");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.INCLUDED_PARTS, "includedParts");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.ELEMENT, "element");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.PUBLIC_NAMESPACE, "publicNamespace");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.IS_CLIENT, "clientServer");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.IS_LAUNCHABLE, "launchable");
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "tokenStream", DartEntry.TOKEN_STREAM, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "scanErrors", DartEntry.SCAN_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "sourceKind", DartEntry.SOURCE_KIND, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "parsedUnit", DartEntry.PARSED_UNIT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "parseErrors", DartEntry.PARSE_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "importedLibraries", DartEntry.IMPORTED_LIBRARIES, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "exportedLibraries", DartEntry.EXPORTED_LIBRARIES, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "includedParts", DartEntry.INCLUDED_PARTS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "element", DartEntry.ELEMENT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "publicNamespace", DartEntry.PUBLIC_NAMESPACE, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "clientServer", DartEntry.IS_CLIENT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "launchable", DartEntry.IS_LAUNCHABLE, oldEntry);
     // TODO(brianwilkerson) Add better support for containingLibraries. It would be nice to be able
     // to report on size-preserving changes.
     int oldLibraryCount = (oldEntry as DartEntry)._containingLibraries.length;
     int libraryCount = _containingLibraries.length;
     if (oldLibraryCount != libraryCount) {
       if (needsSeparator) {
-        builder.append("; ");
+        buffer.write("; ");
       }
-      builder.append("containingLibraryCount = ");
-      builder.append(oldLibraryCount);
-      builder.append(" -> ");
-      builder.append(libraryCount);
+      buffer.write("containingLibraryCount = ");
+      buffer.write(oldLibraryCount);
+      buffer.write(" -> ");
+      buffer.write(libraryCount);
       needsSeparator = true;
     }
     //
@@ -8932,60 +8416,46 @@
         ResolutionState oldState = oldStateMap.remove(librarySource);
         if (oldState == null) {
           if (needsSeparator) {
-            builder.append("; ");
+            buffer.write("; ");
           }
-          builder.append("added resolution for ");
-          builder.append(librarySource.fullName);
+          buffer.write("added resolution for ");
+          buffer.write(librarySource.fullName);
           needsSeparator = true;
         } else {
-          needsSeparator = oldState.writeDiffOn(builder, needsSeparator, oldEntry as DartEntry);
+          needsSeparator = oldState._writeDiffOn(buffer, needsSeparator, oldEntry as DartEntry);
         }
       }
       state = state._nextState;
     }
     for (Source librarySource in oldStateMap.keys.toSet()) {
       if (needsSeparator) {
-        builder.append("; ");
+        buffer.write("; ");
       }
-      builder.append("removed resolution for ");
-      builder.append(librarySource.fullName);
+      buffer.write("removed resolution for ");
+      buffer.write(librarySource.fullName);
       needsSeparator = true;
     }
     return needsSeparator;
   }
 
   @override
-  void writeOn(JavaStringBuilder builder) {
-    builder.append("Dart: ");
-    super.writeOn(builder);
-    builder.append("; tokenStream = ");
-    builder.append(_tokenStreamState);
-    builder.append("; scanErrors = ");
-    builder.append(_scanErrorsState);
-    builder.append("; sourceKind = ");
-    builder.append(_sourceKindState);
-    builder.append("; parsedUnit = ");
-    builder.append(_parsedUnitState);
-    builder.append(" (");
-    builder.append(_parsedUnitAccessed ? "T" : "F");
-    builder.append("); parseErrors = ");
-    builder.append(_parseErrorsState);
-    builder.append("; exportedLibraries = ");
-    builder.append(_exportedLibrariesState);
-    builder.append("; importedLibraries = ");
-    builder.append(_importedLibrariesState);
-    builder.append("; includedParts = ");
-    builder.append(_includedPartsState);
-    builder.append("; element = ");
-    builder.append(_elementState);
-    builder.append("; publicNamespace = ");
-    builder.append(_publicNamespaceState);
-    builder.append("; clientServer = ");
-    builder.append(_clientServerState);
-    builder.append("; launchable = ");
-    builder.append(_launchableState);
-    //    builder.append("; angularElements = ");
-    _resolutionState.writeOn(builder);
+  void _writeOn(StringBuffer buffer) {
+    buffer.write("Dart: ");
+    super._writeOn(buffer);
+    _writeStateOn(buffer, "tokenStream", TOKEN_STREAM);
+    _writeStateOn(buffer, "scanErrors", SCAN_ERRORS);
+    _writeStateOn(buffer, "sourceKind", SOURCE_KIND);
+    _writeStateOn(buffer, "parsedUnit", PARSED_UNIT);
+    _writeStateOn(buffer, "parseErrors", PARSE_ERRORS);
+    _writeStateOn(buffer, "exportedLibraries", EXPORTED_LIBRARIES);
+    _writeStateOn(buffer, "importedLibraries", IMPORTED_LIBRARIES);
+    _writeStateOn(buffer, "includedParts", INCLUDED_PARTS);
+    _writeStateOn(buffer, "element", ELEMENT);
+    _writeStateOn(buffer, "publicNamespace", PUBLIC_NAMESPACE);
+    _writeStateOn(buffer, "clientServer", IS_CLIENT);
+    _writeStateOn(buffer, "launchable", IS_LAUNCHABLE);
+    _writeStateOn(buffer, "angularErrors", ANGULAR_ERRORS);
+    _resolutionState._writeOn(buffer);
   }
 
   /**
@@ -8995,21 +8465,15 @@
    *          be invalidated.
    */
   void _discardCachedResolutionInformation(bool invalidateUris) {
-    _element = null;
-    _elementState = CacheState.INVALID;
-    clearFlags([_LAUNCHABLE_INDEX, _CLIENT_CODE_INDEX]);
-    _clientServerState = CacheState.INVALID;
-    _launchableState = CacheState.INVALID;
-    _publicNamespace = null;
-    _publicNamespaceState = CacheState.INVALID;
+    setState(ELEMENT, CacheState.INVALID);
+    setState(IS_CLIENT, CacheState.INVALID);
+    setState(IS_LAUNCHABLE, CacheState.INVALID);
+    setState(PUBLIC_NAMESPACE, CacheState.INVALID);
     _resolutionState.invalidateAllResolutionInformation();
     if (invalidateUris) {
-      _importedLibraries = Source.EMPTY_ARRAY;
-      _importedLibrariesState = CacheState.INVALID;
-      _exportedLibraries = Source.EMPTY_ARRAY;
-      _exportedLibrariesState = CacheState.INVALID;
-      _includedParts = Source.EMPTY_ARRAY;
-      _includedPartsState = CacheState.INVALID;
+      setState(EXPORTED_LIBRARIES, CacheState.INVALID);
+      setState(IMPORTED_LIBRARIES, CacheState.INVALID);
+      setState(INCLUDED_PARTS, CacheState.INVALID);
     }
   }
 
@@ -9037,6 +8501,38 @@
     return state;
   }
 
+  @override
+  bool _isValidDescriptor(DataDescriptor descriptor) {
+    return descriptor == ANGULAR_ERRORS
+        || descriptor == CONTAINING_LIBRARIES
+        || descriptor == ELEMENT
+        || descriptor == EXPORTED_LIBRARIES
+        || descriptor == IMPORTED_LIBRARIES
+        || descriptor == INCLUDED_PARTS
+        || descriptor == IS_CLIENT
+        || descriptor == IS_LAUNCHABLE
+        || descriptor == PARSED_UNIT
+        || descriptor == PARSE_ERRORS
+        || descriptor == PUBLIC_NAMESPACE
+        || descriptor == SCAN_ERRORS
+        || descriptor == SOURCE_KIND
+        || descriptor == TOKEN_STREAM
+        || super._isValidDescriptor(descriptor);
+  }
+
+  /**
+   * Return `true` if the [descriptor] is valid for this entry when the data is
+   * relative to a library.
+   */
+  bool _isValidLibraryDescriptor(DataDescriptor descriptor) {
+    return descriptor == BUILT_ELEMENT
+        || descriptor == BUILT_UNIT
+        || descriptor == HINTS
+        || descriptor == RESOLUTION_ERRORS
+        || descriptor == RESOLVED_UNIT
+        || descriptor == VERIFICATION_ERRORS;
+  }
+
   /**
    * Given that the specified flag is being transitioned to the given state, set the value of the
    * flag to the value that should be kept in the cache.
@@ -9052,7 +8548,7 @@
       // If the value is in process, we can leave the current value in the cache for any 'get'
       // methods to access.
       //
-      setFlag(index, false);
+      _setFlag(index, false);
     }
   }
 }
@@ -9068,11 +8564,15 @@
   final String _name;
 
   /**
-   * Initialize a newly created descriptor to have the given name.
-   *
-   * @param name the name of the descriptor
+   * The default value used when the data does not exist.
    */
-  DataDescriptor(this._name);
+  final E defaultValue;
+
+  /**
+   * Initialize a newly created descriptor to have the given [name] and
+   * [defaultValue].
+   */
+  DataDescriptor(this._name, [this.defaultValue = null]);
 
   @override
   String toString() => _name;
@@ -9441,143 +8941,6 @@
  */
 class HtmlEntry extends SourceEntry {
   /**
-   * The state of the cached parsed (but not resolved) HTML unit.
-   */
-  CacheState _parsedUnitState = CacheState.INVALID;
-
-  /**
-   * The parsed HTML unit, or `null` if the parsed HTML unit is not currently cached.
-   */
-  ht.HtmlUnit _parsedUnit;
-
-  /**
-   * The state of the cached resolved HTML unit.
-   */
-  CacheState _resolvedUnitState = CacheState.INVALID;
-
-  /**
-   * The resolved HTML unit, or `null` if the resolved HTML unit is not currently cached.
-   */
-  ht.HtmlUnit _resolvedUnit;
-
-  /**
-   * The state of the cached parse errors.
-   */
-  CacheState _parseErrorsState = CacheState.INVALID;
-
-  /**
-   * The errors produced while scanning and parsing the HTML, or `null` if the errors are not
-   * currently cached.
-   */
-  List<AnalysisError> _parseErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached resolution errors.
-   */
-  CacheState _resolutionErrorsState = CacheState.INVALID;
-
-  /**
-   * The errors produced while resolving the HTML, or `null` if the errors are not currently
-   * cached.
-   */
-  List<AnalysisError> _resolutionErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached list of referenced libraries.
-   */
-  CacheState _referencedLibrariesState = CacheState.INVALID;
-
-  /**
-   * The list of libraries referenced in the HTML, or `null` if the list is not currently
-   * cached. Note that this list does not include libraries defined directly within the HTML file.
-   */
-  List<Source> _referencedLibraries = Source.EMPTY_ARRAY;
-
-  /**
-   * The state of the cached HTML element.
-   */
-  CacheState _elementState = CacheState.INVALID;
-
-  /**
-   * The element representing the HTML file, or `null` if the element is not currently cached.
-   */
-  HtmlElement _element;
-
-  /**
-   * The state of the [angularApplication].
-   */
-  CacheState _angularApplicationState = CacheState.VALID;
-
-  /**
-   * Information about the Angular Application this unit is used in.
-   */
-  AngularApplication _angularApplication;
-
-  /**
-   * The state of the [angularEntry].
-   */
-  CacheState _angularEntryState = CacheState.INVALID;
-
-  /**
-   * Information about the Angular Application this unit is entry point for.
-   */
-  AngularApplication _angularEntry = null;
-
-  /**
-   * The state of the [angularComponent].
-   */
-  CacheState _angularComponentState = CacheState.VALID;
-
-  /**
-   * Information about the [AngularComponentElement] this unit is used as template for.
-   */
-  AngularComponentElement _angularComponent = null;
-
-  /**
-   * The state of the Angular resolution errors.
-   */
-  CacheState _angularErrorsState = CacheState.INVALID;
-
-  /**
-   * The hints produced while performing Angular resolution, or an empty array if the error are not
-   * currently cached.
-   */
-  List<AnalysisError> _angularErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached hints.
-   */
-  CacheState _hintsState = CacheState.INVALID;
-
-  /**
-   * The hints produced while auditing the compilation unit, or an empty array if the hints are not
-   * currently cached.
-   */
-  List<AnalysisError> _hints = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the Polymer elements.
-   */
-  CacheState _polymerBuildErrorsState = CacheState.INVALID;
-
-  /**
-   * The hints produced while performing Polymer HTML elements building, or an empty array if the
-   * error are not currently cached.
-   */
-  List<AnalysisError> _polymerBuildErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the Polymer resolution errors.
-   */
-  CacheState _polymerResolutionErrorsState = CacheState.INVALID;
-
-  /**
-   * The hints produced while performing Polymer resolution, or an empty array if the error are not
-   * currently cached.
-   */
-  List<AnalysisError> _polymerResolutionErrors = AnalysisError.NO_ERRORS;
-
-  /**
    * The data descriptor representing the information about an Angular
    * application this source is used in.
    */
@@ -9603,7 +8966,7 @@
    * resolution.
    */
   static final DataDescriptor<List<AnalysisError>> ANGULAR_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.ANGULAR_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.ANGULAR_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the HTML element.
@@ -9616,14 +8979,14 @@
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> HINTS
-      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.HINTS");
+      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.HINTS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the errors resulting from parsing the
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> PARSE_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.PARSE_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.PARSE_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the parsed AST structure.
@@ -9641,89 +9004,55 @@
    * The data descriptor representing the list of referenced libraries.
    */
   static final DataDescriptor<List<Source>> REFERENCED_LIBRARIES
-      = new DataDescriptor<List<Source>>("HtmlEntry.REFERENCED_LIBRARIES");
+      = new DataDescriptor<List<Source>>("HtmlEntry.REFERENCED_LIBRARIES", Source.EMPTY_ARRAY);
 
   /**
    * The data descriptor representing the errors resulting from resolving the
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> RESOLUTION_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.RESOLUTION_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.RESOLUTION_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the status of Polymer elements in the
    * source.
    */
   static final DataDescriptor<List<AnalysisError>> POLYMER_BUILD_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.POLYMER_BUILD_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.POLYMER_BUILD_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * The data descriptor representing the errors reported during Polymer
    * resolution.
    */
   static final DataDescriptor<List<AnalysisError>> POLYMER_RESOLUTION_ERRORS
-      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.POLYMER_RESOLUTION_ERRORS");
+      = new DataDescriptor<List<AnalysisError>>("HtmlEntry.POLYMER_RESOLUTION_ERRORS", AnalysisError.NO_ERRORS);
 
   /**
    * Flush any AST structures being maintained by this entry.
    */
   void flushAstStructures() {
-    if (_parsedUnitState == CacheState.VALID) {
-      _parsedUnitState = CacheState.FLUSHED;
-      _parsedUnit = null;
-    }
-    if (_resolvedUnitState == CacheState.VALID) {
-      _resolvedUnitState = CacheState.FLUSHED;
-      _resolvedUnit = null;
-    }
-    if (_angularEntryState == CacheState.VALID) {
-      _angularEntryState = CacheState.FLUSHED;
-    }
-    if (_angularErrorsState == CacheState.VALID) {
-      _angularErrorsState = CacheState.FLUSHED;
-    }
+    _flush(PARSED_UNIT);
+    _flush(RESOLVED_UNIT);
+    _flush(ANGULAR_ENTRY);
+    _flush(ANGULAR_ERRORS);
   }
 
   /**
-   * Return all of the errors associated with the compilation unit that are
-   * currently cached.
+   * Return all of the errors associated with the HTML file that are currently
+   * cached.
    */
   List<AnalysisError> get allErrors {
     List<AnalysisError> errors = new List<AnalysisError>();
-    if (_parseErrors != null) {
-      for (AnalysisError error in _parseErrors) {
-        errors.add(error);
-      }
-    }
-    if (_resolutionErrors != null) {
-      for (AnalysisError error in _resolutionErrors) {
-        errors.add(error);
-      }
-    }
-    if (_angularErrors != null) {
-      for (AnalysisError error in _angularErrors) {
-        errors.add(error);
-      }
-    }
-    if (_hints != null) {
-      for (AnalysisError error in _hints) {
-        errors.add(error);
-      }
-    }
-    if (_polymerBuildErrors != null) {
-      for (AnalysisError error in _polymerBuildErrors) {
-        errors.add(error);
-      }
-    }
-    if (_polymerResolutionErrors != null) {
-      for (AnalysisError error in _polymerResolutionErrors) {
-        errors.add(error);
-      }
-    }
+    errors.addAll(getValue(PARSE_ERRORS));
+    errors.addAll(getValue(RESOLUTION_ERRORS));
+    errors.addAll(getValue(ANGULAR_ERRORS));
+    errors.addAll(getValue(HINTS));
+    errors.addAll(getValue(POLYMER_BUILD_ERRORS));
+    errors.addAll(getValue(POLYMER_RESOLUTION_ERRORS));
     if (errors.length == 0) {
       return AnalysisError.NO_ERRORS;
     }
-    return new List.from(errors);
+    return errors;
   }
 
   /**
@@ -9732,13 +9061,11 @@
    * available.
    */
   ht.HtmlUnit get anyParsedUnit {
-    if (_parsedUnitState == CacheState.VALID) {
-      //      parsedUnitAccessed = true;
-      return _parsedUnit;
+    if (getState(PARSED_UNIT) == CacheState.VALID) {
+      return getValue(PARSED_UNIT);
     }
-    if (_resolvedUnitState == CacheState.VALID) {
-      //      resovledUnitAccessed = true;
-      return _resolvedUnit;
+    if (getState(RESOLVED_UNIT) == CacheState.VALID) {
+      return getValue(RESOLVED_UNIT);
     }
     return null;
   }
@@ -9747,105 +9074,29 @@
   SourceKind get kind => SourceKind.HTML;
 
   @override
-  CacheState getState(DataDescriptor descriptor) {
-    if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
-      return _angularApplicationState;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_COMPONENT)) {
-      return _angularComponentState;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ENTRY)) {
-      return _angularEntryState;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ERRORS)) {
-      return _angularErrorsState;
-    } else if (identical(descriptor, HtmlEntry.ELEMENT)) {
-      return _elementState;
-    } else if (identical(descriptor, HtmlEntry.PARSE_ERRORS)) {
-      return _parseErrorsState;
-    } else if (identical(descriptor, HtmlEntry.PARSED_UNIT)) {
-      return _parsedUnitState;
-    } else if (identical(descriptor, HtmlEntry.RESOLVED_UNIT)) {
-      return _resolvedUnitState;
-    } else if (identical(descriptor, HtmlEntry.REFERENCED_LIBRARIES)) {
-      return _referencedLibrariesState;
-    } else if (identical(descriptor, HtmlEntry.RESOLUTION_ERRORS)) {
-      return _resolutionErrorsState;
-    } else if (identical(descriptor, HtmlEntry.HINTS)) {
-      return _hintsState;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_BUILD_ERRORS)) {
-      return _polymerBuildErrorsState;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_RESOLUTION_ERRORS)) {
-      return _polymerResolutionErrorsState;
-    }
-    return super.getState(descriptor);
-  }
-
-  @override
-  Object getValue(DataDescriptor descriptor) {
-    if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
-      return _angularApplication;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_COMPONENT)) {
-      return _angularComponent;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ENTRY)) {
-      return _angularEntry;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ERRORS)) {
-      return _angularErrors;
-    } else if (identical(descriptor, HtmlEntry.ELEMENT)) {
-      return _element;
-    } else if (identical(descriptor, HtmlEntry.PARSE_ERRORS)) {
-      return _parseErrors;
-    } else if (identical(descriptor, HtmlEntry.PARSED_UNIT)) {
-      return _parsedUnit;
-    } else if (identical(descriptor, HtmlEntry.RESOLVED_UNIT)) {
-      return _resolvedUnit;
-    } else if (identical(descriptor, HtmlEntry.REFERENCED_LIBRARIES)) {
-      return _referencedLibraries;
-    } else if (identical(descriptor, HtmlEntry.RESOLUTION_ERRORS)) {
-      return _resolutionErrors;
-    } else if (identical(descriptor, HtmlEntry.HINTS)) {
-      return _hints;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_BUILD_ERRORS)) {
-      return _polymerBuildErrors;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_RESOLUTION_ERRORS)) {
-      return _polymerResolutionErrors;
-    }
-    return super.getValue(descriptor);
-  }
-
-  @override
   void invalidateAllInformation() {
     super.invalidateAllInformation();
-    _parseErrors = AnalysisError.NO_ERRORS;
-    _parseErrorsState = CacheState.INVALID;
-    _parsedUnit = null;
-    _parsedUnitState = CacheState.INVALID;
-    _resolvedUnit = null;
-    _resolvedUnitState = CacheState.INVALID;
+    setState(PARSE_ERRORS, CacheState.INVALID);
+    setState(PARSED_UNIT, CacheState.INVALID);
+    setState(RESOLVED_UNIT, CacheState.INVALID);
     invalidateAllResolutionInformation(true);
   }
 
   /**
    * Invalidate all of the resolution information associated with the HTML file.
-   *
-   * @param invalidateUris true if the cached results of converting URIs to source files should also
-   *          be invalidated.
+   * If [invalidateUris] is `true`, the cached results of converting URIs to
+   * source files should also be invalidated.
    */
   void invalidateAllResolutionInformation(bool invalidateUris) {
-    _angularEntry = null;
-    _angularEntryState = CacheState.INVALID;
-    _angularErrors = AnalysisError.NO_ERRORS;
-    _angularErrorsState = CacheState.INVALID;
-    _polymerBuildErrors = AnalysisError.NO_ERRORS;
-    _polymerBuildErrorsState = CacheState.INVALID;
-    _polymerResolutionErrors = AnalysisError.NO_ERRORS;
-    _polymerResolutionErrorsState = CacheState.INVALID;
-    _element = null;
-    _elementState = CacheState.INVALID;
-    _resolutionErrors = AnalysisError.NO_ERRORS;
-    _resolutionErrorsState = CacheState.INVALID;
-    _hints = AnalysisError.NO_ERRORS;
-    _hintsState = CacheState.INVALID;
+    setState(ANGULAR_ENTRY, CacheState.INVALID);
+    setState(ANGULAR_ERRORS, CacheState.INVALID);
+    setState(POLYMER_BUILD_ERRORS, CacheState.INVALID);
+    setState(POLYMER_RESOLUTION_ERRORS, CacheState.INVALID);
+    setState(ELEMENT, CacheState.INVALID);
+    setState(RESOLUTION_ERRORS, CacheState.INVALID);
+    setState(HINTS, CacheState.INVALID);
     if (invalidateUris) {
-      _referencedLibraries = Source.EMPTY_ARRAY;
-      _referencedLibrariesState = CacheState.INVALID;
+      setState(REFERENCED_LIBRARIES, CacheState.INVALID);
     }
   }
 
@@ -9856,195 +9107,93 @@
   }
 
   /**
-   * Record that an error was encountered while attempting to parse the source associated with this
-   * entry.
-   *
-   * @param exception the exception that shows where the error occurred
+   * Record that an [exception] was encountered while attempting to parse the
+   * source associated with this entry.
    */
   void recordParseError(CaughtException exception) {
     // If the scanning and parsing of HTML are separated, the following line can be removed.
     recordScanError(exception);
-    _parseErrors = AnalysisError.NO_ERRORS;
-    _parseErrorsState = CacheState.ERROR;
-    _parsedUnit = null;
-    _parsedUnitState = CacheState.ERROR;
-    _referencedLibraries = Source.EMPTY_ARRAY;
-    _referencedLibrariesState = CacheState.ERROR;
+    setState(PARSE_ERRORS, CacheState.ERROR);
+    setState(PARSED_UNIT, CacheState.ERROR);
+    setState(REFERENCED_LIBRARIES, CacheState.ERROR);
     recordResolutionError(exception);
   }
 
   /**
-   * Record that an error was encountered while attempting to resolve the source associated with
-   * this entry.
-   *
-   * @param exception the exception that shows where the error occurred
+   * Record that an [exception] was encountered while attempting to resolve the
+   * source associated with this entry.
    */
   void recordResolutionError(CaughtException exception) {
     this.exception = exception;
-    _angularErrors = AnalysisError.NO_ERRORS;
-    _angularErrorsState = CacheState.ERROR;
-    _resolvedUnit = null;
-    _resolvedUnitState = CacheState.ERROR;
-    _element = null;
-    _elementState = CacheState.ERROR;
-    _resolutionErrors = AnalysisError.NO_ERRORS;
-    _resolutionErrorsState = CacheState.ERROR;
-    _hints = AnalysisError.NO_ERRORS;
-    _hintsState = CacheState.ERROR;
-    _polymerBuildErrors = AnalysisError.NO_ERRORS;
-    _polymerBuildErrorsState = CacheState.ERROR;
-    _polymerResolutionErrors = AnalysisError.NO_ERRORS;
-    _polymerResolutionErrorsState = CacheState.ERROR;
+    setState(ANGULAR_ERRORS, CacheState.ERROR);
+    setState(RESOLVED_UNIT, CacheState.ERROR);
+    setState(ELEMENT, CacheState.ERROR);
+    setState(RESOLUTION_ERRORS, CacheState.ERROR);
+    setState(HINTS, CacheState.ERROR);
+    setState(POLYMER_BUILD_ERRORS, CacheState.ERROR);
+    setState(POLYMER_RESOLUTION_ERRORS, CacheState.ERROR);
   }
 
   @override
-  void setState(DataDescriptor descriptor, CacheState state) {
-    if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
-      _angularApplication = updatedValue(state, _angularApplication, null);
-      _angularApplicationState = state;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_COMPONENT)) {
-      _angularComponent = updatedValue(state, _angularComponent, null);
-      _angularComponentState = state;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ENTRY)) {
-      _angularEntry = updatedValue(state, _angularEntry, null);
-      _angularEntryState = state;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ERRORS)) {
-      _angularErrors = updatedValue(state, _angularErrors, null);
-      _angularErrorsState = state;
-    } else if (identical(descriptor, HtmlEntry.ELEMENT)) {
-      _element = updatedValue(state, _element, null);
-      _elementState = state;
-    } else if (identical(descriptor, HtmlEntry.PARSE_ERRORS)) {
-      _parseErrors = updatedValue(state, _parseErrors, null);
-      _parseErrorsState = state;
-    } else if (identical(descriptor, HtmlEntry.PARSED_UNIT)) {
-      _parsedUnit = updatedValue(state, _parsedUnit, null);
-      _parsedUnitState = state;
-    } else if (identical(descriptor, HtmlEntry.RESOLVED_UNIT)) {
-      _resolvedUnit = updatedValue(state, _resolvedUnit, null);
-      _resolvedUnitState = state;
-    } else if (identical(descriptor, HtmlEntry.REFERENCED_LIBRARIES)) {
-      _referencedLibraries = updatedValue(state, _referencedLibraries, Source.EMPTY_ARRAY);
-      _referencedLibrariesState = state;
-    } else if (identical(descriptor, HtmlEntry.RESOLUTION_ERRORS)) {
-      _resolutionErrors = updatedValue(state, _resolutionErrors, AnalysisError.NO_ERRORS);
-      _resolutionErrorsState = state;
-    } else if (identical(descriptor, HtmlEntry.HINTS)) {
-      _hints = updatedValue(state, _hints, AnalysisError.NO_ERRORS);
-      _hintsState = state;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_BUILD_ERRORS)) {
-      _polymerBuildErrors = updatedValue(state, _polymerBuildErrors, null);
-      _polymerBuildErrorsState = state;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_RESOLUTION_ERRORS)) {
-      _polymerResolutionErrors = updatedValue(state, _polymerResolutionErrors, null);
-      _polymerResolutionErrorsState = state;
-    } else {
-      super.setState(descriptor, state);
-    }
+  bool _isValidDescriptor(DataDescriptor descriptor) {
+    return descriptor == ANGULAR_APPLICATION
+        || descriptor == ANGULAR_COMPONENT
+        || descriptor == ANGULAR_ENTRY
+        || descriptor == ANGULAR_ERRORS
+        || descriptor == ELEMENT
+        || descriptor == HINTS
+        || descriptor == PARSED_UNIT
+        || descriptor == PARSE_ERRORS
+        || descriptor == POLYMER_BUILD_ERRORS
+        || descriptor == POLYMER_RESOLUTION_ERRORS
+        || descriptor == REFERENCED_LIBRARIES
+        || descriptor == RESOLUTION_ERRORS
+        || descriptor == RESOLVED_UNIT
+        || super._isValidDescriptor(descriptor);
   }
 
   @override
-  void setValue(DataDescriptor descriptor, Object value) {
-    if (identical(descriptor, HtmlEntry.ANGULAR_APPLICATION)) {
-      _angularApplication = value as AngularApplication;
-      _angularApplicationState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_COMPONENT)) {
-      _angularComponent = value as AngularComponentElement;
-      _angularComponentState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ENTRY)) {
-      _angularEntry = value as AngularApplication;
-      _angularEntryState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.ANGULAR_ERRORS)) {
-      _angularErrors = value as List<AnalysisError>;
-      _angularErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.ELEMENT)) {
-      _element = value as HtmlElement;
-      _elementState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.PARSE_ERRORS)) {
-      _parseErrors = value as List<AnalysisError>;
-      _parseErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.PARSED_UNIT)) {
-      _parsedUnit = value as ht.HtmlUnit;
-      _parsedUnitState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.RESOLVED_UNIT)) {
-      _resolvedUnit = value as ht.HtmlUnit;
-      _resolvedUnitState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.REFERENCED_LIBRARIES)) {
-      _referencedLibraries = value == null ? Source.EMPTY_ARRAY : (value as List<Source>);
-      _referencedLibrariesState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.RESOLUTION_ERRORS)) {
-      _resolutionErrors = value as List<AnalysisError>;
-      _resolutionErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.HINTS)) {
-      _hints = value as List<AnalysisError>;
-      _hintsState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_BUILD_ERRORS)) {
-      _polymerBuildErrors = value as List<AnalysisError>;
-      _polymerBuildErrorsState = CacheState.VALID;
-    } else if (identical(descriptor, HtmlEntry.POLYMER_RESOLUTION_ERRORS)) {
-      _polymerResolutionErrors = value as List<AnalysisError>;
-      _polymerResolutionErrorsState = CacheState.VALID;
-    } else {
-      super.setValue(descriptor, value);
-    }
-  }
-
-  @override
-  bool get hasErrorState => super.hasErrorState || _parsedUnitState == CacheState.ERROR || _resolvedUnitState == CacheState.ERROR || _parseErrorsState == CacheState.ERROR || _resolutionErrorsState == CacheState.ERROR || _referencedLibrariesState == CacheState.ERROR || _elementState == CacheState.ERROR || _angularErrorsState == CacheState.ERROR || _hintsState == CacheState.ERROR || _polymerBuildErrorsState == CacheState.ERROR || _polymerResolutionErrorsState == CacheState.ERROR;
-
-  @override
-  bool writeDiffOn(JavaStringBuilder builder, SourceEntry oldEntry) {
-    bool needsSeparator = super.writeDiffOn(builder, oldEntry);
+  bool _writeDiffOn(StringBuffer buffer, SourceEntry oldEntry) {
+    bool needsSeparator = super._writeDiffOn(buffer, oldEntry);
     if (oldEntry is! HtmlEntry) {
       if (needsSeparator) {
-        builder.append("; ");
+        buffer.write("; ");
       }
-      builder.append("entry type changed; was ${oldEntry.runtimeType.toString()}");
+      buffer.write("entry type changed; was ");
+      buffer.write(oldEntry.runtimeType);
       return true;
     }
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.PARSE_ERRORS, "parseErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.PARSED_UNIT, "parsedUnit");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.RESOLVED_UNIT, "resolvedUnit");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.RESOLUTION_ERRORS, "resolutionErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.REFERENCED_LIBRARIES, "referencedLibraries");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.ELEMENT, "element");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.ANGULAR_APPLICATION, "angularApplicationState");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.ANGULAR_COMPONENT, "angularComponent");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.ANGULAR_ENTRY, "angularEntry");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.ANGULAR_ERRORS, "angularErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.POLYMER_BUILD_ERRORS, "polymerBuildErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, HtmlEntry.POLYMER_RESOLUTION_ERRORS, "polymerResolutionErrors");
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "parseErrors", HtmlEntry.PARSE_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "parsedUnit", HtmlEntry.PARSED_UNIT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "resolvedUnit", HtmlEntry.RESOLVED_UNIT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "resolutionErrors", HtmlEntry.RESOLUTION_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "referencedLibraries", HtmlEntry.REFERENCED_LIBRARIES, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "element", HtmlEntry.ELEMENT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "angularApplicationState", HtmlEntry.ANGULAR_APPLICATION, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "angularComponent", HtmlEntry.ANGULAR_COMPONENT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "angularEntry", HtmlEntry.ANGULAR_ENTRY, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "angularErrors", HtmlEntry.ANGULAR_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "polymerBuildErrors", HtmlEntry.POLYMER_BUILD_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "polymerResolutionErrors", HtmlEntry.POLYMER_RESOLUTION_ERRORS, oldEntry);
     return needsSeparator;
   }
 
   @override
-  void writeOn(JavaStringBuilder builder) {
-    builder.append("Html: ");
-    super.writeOn(builder);
-    builder.append("; parseErrors = ");
-    builder.append(_parseErrorsState);
-    builder.append("; parsedUnit = ");
-    builder.append(_parsedUnitState);
-    builder.append("; resolvedUnit = ");
-    builder.append(_resolvedUnitState);
-    builder.append("; resolutionErrors = ");
-    builder.append(_resolutionErrorsState);
-    builder.append("; referencedLibraries = ");
-    builder.append(_referencedLibrariesState);
-    builder.append("; element = ");
-    builder.append(_elementState);
-    builder.append("; angularApplication = ");
-    builder.append(_angularApplicationState);
-    builder.append("; angularComponent = ");
-    builder.append(_angularComponentState);
-    builder.append("; angularEntry = ");
-    builder.append(_angularEntryState);
-    builder.append("; angularErrors = ");
-    builder.append(_angularErrorsState);
-    builder.append("; polymerBuildErrors = ");
-    builder.append(_polymerBuildErrorsState);
-    builder.append("; polymerResolutionErrors = ");
-    builder.append(_polymerResolutionErrorsState);
+  void _writeOn(StringBuffer buffer) {
+    buffer.write("Html: ");
+    super._writeOn(buffer);
+    _writeStateOn(buffer, "parseErrors", PARSE_ERRORS);
+    _writeStateOn(buffer, "parsedUnit", PARSED_UNIT);
+    _writeStateOn(buffer, "resolvedUnit", RESOLVED_UNIT);
+    _writeStateOn(buffer, "resolutionErrors", RESOLUTION_ERRORS);
+    _writeStateOn(buffer, "referencedLibraries", REFERENCED_LIBRARIES);
+    _writeStateOn(buffer, "element", ELEMENT);
+    _writeStateOn(buffer, "angularApplication", ANGULAR_APPLICATION);
+    _writeStateOn(buffer, "angularComponent", ANGULAR_COMPONENT);
+    _writeStateOn(buffer, "angularEntry", ANGULAR_ENTRY);
+    _writeStateOn(buffer, "angularErrors", ANGULAR_ERRORS);
+    _writeStateOn(buffer, "polymerBuildErrors", POLYMER_BUILD_ERRORS);
+    _writeStateOn(buffer, "polymerResolutionErrors", POLYMER_RESOLUTION_ERRORS);
   }
 }
 
@@ -12754,89 +11903,58 @@
   Source _librarySource;
 
   /**
-   * The state of the cached compilation unit that contains references to the built element model.
+   * A table mapping descriptors to the cached results for those descriptors.
+   * If there is no entry for a given descriptor then the state is implicitly
+   * [CacheState.INVALID] and the value is implicitly the default value.
    */
-  CacheState _builtUnitState = CacheState.INVALID;
-
-  /**
-   * The compilation unit that contains references to the built element model, or `null` if
-   * that compilation unit is not currently cached.
-   */
-  CompilationUnit _builtUnit;
-
-  /**
-   * The state of the cached errors reported while building an element model.
-   */
-  CacheState _buildElementErrorsState = CacheState.INVALID;
-
-  /**
-   * The errors produced while building an element model, or an empty array if the errors are not
-   * currently cached.
-   */
-  List<AnalysisError> _buildElementErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached resolved compilation unit.
-   */
-  CacheState _resolvedUnitState = CacheState.INVALID;
-
-  /**
-   * The resolved compilation unit, or `null` if the resolved compilation unit is not
-   * currently cached.
-   */
-  CompilationUnit _resolvedUnit;
-
-  /**
-   * The state of the cached resolution errors.
-   */
-  CacheState _resolutionErrorsState = CacheState.INVALID;
-
-  /**
-   * The errors produced while resolving the compilation unit, or an empty array if the errors are
-   * not currently cached.
-   */
-  List<AnalysisError> _resolutionErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached verification errors.
-   */
-  CacheState _verificationErrorsState = CacheState.INVALID;
-
-  /**
-   * The errors produced while verifying the compilation unit, or an empty array if the errors are
-   * not currently cached.
-   */
-  List<AnalysisError> _verificationErrors = AnalysisError.NO_ERRORS;
-
-  /**
-   * The state of the cached hints.
-   */
-  CacheState _hintsState = CacheState.INVALID;
-
-  /**
-   * The hints produced while auditing the compilation unit, or an empty array if the hints are
-   * not currently cached.
-   */
-  List<AnalysisError> _hints = AnalysisError.NO_ERRORS;
+  Map<DataDescriptor, CachedResult> resultMap
+      = new HashMap<DataDescriptor, CachedResult>();
 
   /**
    * Flush any AST structures being maintained by this state.
    */
   void flushAstStructures() {
-    if (_builtUnitState == CacheState.VALID) {
-      _builtUnitState = CacheState.FLUSHED;
-      _builtUnit = null;
-    }
-    if (_resolvedUnitState == CacheState.VALID) {
-      _resolvedUnitState = CacheState.FLUSHED;
-      _resolvedUnit = null;
-    }
+    _flush(DartEntry.BUILT_UNIT);
+    _flush(DartEntry.RESOLVED_UNIT);
     if (_nextState != null) {
       _nextState.flushAstStructures();
     }
   }
 
-  bool get hasErrorState => _builtUnitState == CacheState.ERROR || _buildElementErrorsState == CacheState.ERROR || _resolvedUnitState == CacheState.ERROR || _resolutionErrorsState == CacheState.ERROR || _verificationErrorsState == CacheState.ERROR || _hintsState == CacheState.ERROR || (_nextState != null && _nextState.hasErrorState);
+  /**
+   * Return the state of the data represented by the given [descriptor].
+   */
+  CacheState getState(DataDescriptor descriptor) {
+    CachedResult result = resultMap[descriptor];
+    if (result == null) {
+      return CacheState.INVALID;
+    }
+    return result.state;
+  }
+
+  /**
+   * Return the value of the data represented by the given [descriptor], or
+   * `null` if the data represented by the descriptor is not valid.
+   */
+  /*<V>*/ dynamic /*V*/ getValue(DataDescriptor/*<V>*/ descriptor) {
+    CachedResult result = resultMap[descriptor];
+    if (result == null) {
+      return descriptor.defaultValue;
+    }
+    return result.value;
+  }
+
+  /**
+   * Return `true` if the state of any data value is [CacheState.ERROR].
+   */
+  bool hasErrorState() {
+    for (CachedResult result in resultMap.values) {
+      if (result.state == CacheState.ERROR) {
+        return true;
+      }
+    }
+    return false;
+  }
 
   /**
    * Invalidate all of the resolution information associated with the compilation unit.
@@ -12844,104 +11962,109 @@
   void invalidateAllResolutionInformation() {
     _nextState = null;
     _librarySource = null;
-    _builtUnitState = CacheState.INVALID;
-    _builtUnit = null;
-    _buildElementErrorsState = CacheState.INVALID;
-    _buildElementErrors = AnalysisError.NO_ERRORS;
-    _resolvedUnitState = CacheState.INVALID;
-    _resolvedUnit = null;
-    _resolutionErrorsState = CacheState.INVALID;
-    _resolutionErrors = AnalysisError.NO_ERRORS;
-    _verificationErrorsState = CacheState.INVALID;
-    _verificationErrors = AnalysisError.NO_ERRORS;
-    _hintsState = CacheState.INVALID;
-    _hints = AnalysisError.NO_ERRORS;
+    setState(DartEntry.RESOLVED_UNIT, CacheState.INVALID);
+    setState(DartEntry.RESOLUTION_ERRORS, CacheState.INVALID);
+    setState(DartEntry.VERIFICATION_ERRORS, CacheState.INVALID);
+    setState(DartEntry.HINTS, CacheState.INVALID);
   }
 
   /**
-   * Record that an error occurred while attempting to build the element model for the source
-   * represented by this state.
+   * Record that an exception occurred while attempting to build the element
+   * model for the source associated with this state.
    */
   void recordBuildElementError() {
-    _builtUnitState = CacheState.ERROR;
-    _builtUnit = null;
-    _buildElementErrorsState = CacheState.ERROR;
-    _buildElementErrors = AnalysisError.NO_ERRORS;
+    setState(DartEntry.BUILT_UNIT, CacheState.ERROR);
+    setState(DartEntry.BUILT_ELEMENT, CacheState.ERROR);
     recordResolutionError();
   }
 
   /**
-   * Record that an error occurred while attempting to generate hints for the source represented
-   * by this entry. This will set the state of all verification information as being in error.
+   * Record that an exception occurred while attempting to generate hints for
+   * the source associated with this entry. This will set the state of all
+   * verification information as being in error.
    */
   void recordHintError() {
-    _hints = AnalysisError.NO_ERRORS;
-    _hintsState = CacheState.ERROR;
+    setState(DartEntry.HINTS, CacheState.ERROR);
   }
 
   /**
-   * Record that an error occurred while attempting to resolve the source represented by this
-   * state.
+   * Record that an exception occurred while attempting to resolve the source
+   * associated with this state.
    */
   void recordResolutionError() {
-    _resolvedUnitState = CacheState.ERROR;
-    _resolvedUnit = null;
-    _resolutionErrorsState = CacheState.ERROR;
-    _resolutionErrors = AnalysisError.NO_ERRORS;
+    setState(DartEntry.RESOLVED_UNIT, CacheState.ERROR);
+    setState(DartEntry.RESOLUTION_ERRORS, CacheState.ERROR);
     recordVerificationError();
   }
 
   /**
-   * Record that an error occurred while attempting to scan or parse the entry represented by this
-   * entry. This will set the state of all resolution-based information as being in error, but
-   * will not change the state of any parse results.
+   * Record that an exception occurred while attempting to scan or parse the
+   * source associated with this entry. This will set the state of all
+   * resolution-based information as being in error.
    */
   void recordResolutionErrorsInAllLibraries() {
-    _builtUnitState = CacheState.ERROR;
-    _builtUnit = null;
-    _buildElementErrorsState = CacheState.ERROR;
-    _buildElementErrors = AnalysisError.NO_ERRORS;
-    _resolvedUnitState = CacheState.ERROR;
-    _resolvedUnit = null;
-    _resolutionErrorsState = CacheState.ERROR;
-    _resolutionErrors = AnalysisError.NO_ERRORS;
-    recordVerificationError();
+    recordBuildElementError();
     if (_nextState != null) {
       _nextState.recordResolutionErrorsInAllLibraries();
     }
   }
 
   /**
-   * Record that an in-process parse has stopped without recording results because the results
-   * were invalidated before they could be recorded.
+   * Record that an exception occurred while attempting to generate errors and
+   * warnings for the source associated with this entry. This will set the state
+   * of all verification information as being in error.
    */
-  void recordResolutionNotInProcess() {
-    if (_resolvedUnitState == CacheState.IN_PROCESS) {
-      _resolvedUnitState = CacheState.INVALID;
+  void recordVerificationError() {
+    setState(DartEntry.VERIFICATION_ERRORS, CacheState.ERROR);
+    recordHintError();
+  }
+
+  /**
+   * Set the state of the data represented by the given [descriptor] to the
+   * given [state].
+   */
+  void setState(DataDescriptor descriptor, CacheState state) {
+    if (state == CacheState.VALID) {
+      throw new ArgumentError("use setValue() to set the state to VALID");
     }
-    if (_resolutionErrorsState == CacheState.IN_PROCESS) {
-      _resolutionErrorsState = CacheState.INVALID;
-    }
-    if (_verificationErrorsState == CacheState.IN_PROCESS) {
-      _verificationErrorsState = CacheState.INVALID;
-    }
-    if (_hintsState == CacheState.IN_PROCESS) {
-      _hintsState = CacheState.INVALID;
-    }
-    if (_nextState != null) {
-      _nextState.recordResolutionNotInProcess();
+    if (state == CacheState.INVALID) {
+      resultMap.remove(descriptor);
+    } else {
+      CachedResult result = resultMap.putIfAbsent(
+          descriptor,
+          () => new CachedResult(descriptor));
+      result.state = state;
+      if (state != CacheState.IN_PROCESS) {
+        //
+        // If the state is in-process, we can leave the current value in the cache
+        // for any 'get' methods to access.
+        //
+        result.value = descriptor.defaultValue;
+      }
     }
   }
 
   /**
-   * Record that an error occurred while attempting to generate errors and warnings for the source
-   * represented by this entry. This will set the state of all verification information as being
-   * in error.
+   * Set the value of the data represented by the given [descriptor] to the
+   * given [value].
    */
-  void recordVerificationError() {
-    _verificationErrors = AnalysisError.NO_ERRORS;
-    _verificationErrorsState = CacheState.ERROR;
-    recordHintError();
+  void setValue(DataDescriptor/*<V>*/ descriptor, dynamic /*V*/ value) {
+    CachedResult result = resultMap.putIfAbsent(
+        descriptor,
+        () => new CachedResult(descriptor));
+    result.state = CacheState.VALID;
+    result.value = value == null ? descriptor.defaultValue : value;
+  }
+
+  /**
+   * Flush the value of the data described by the [descriptor].
+   */
+  void _flush(DataDescriptor descriptor) {
+    CachedResult result = resultMap[descriptor];
+    if (result != null && result.state == CacheState.VALID) {
+      result.state = CacheState.FLUSHED;
+      result.value = descriptor.defaultValue;
+    }
   }
 
   /**
@@ -12952,11 +12075,11 @@
    * @param oldEntry the entry that was replaced by this entry
    * @return `true` if some difference was written
    */
-  bool writeDiffOn(JavaStringBuilder builder, bool needsSeparator, DartEntry oldEntry) {
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.RESOLVED_UNIT, _resolvedUnitState, "resolvedUnit");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.RESOLUTION_ERRORS, _resolutionErrorsState, "resolutionErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.VERIFICATION_ERRORS, _verificationErrorsState, "verificationErrors");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, DartEntry.HINTS, _hintsState, "hints");
+  bool _writeDiffOn(StringBuffer buffer, bool needsSeparator, DartEntry oldEntry) {
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "resolvedUnit", DartEntry.RESOLVED_UNIT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "resolutionErrors", DartEntry.RESOLUTION_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "verificationErrors", DartEntry.VERIFICATION_ERRORS, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "hints", DartEntry.HINTS, oldEntry);
     return needsSeparator;
   }
 
@@ -12966,52 +12089,55 @@
    *
    * @param builder the builder to which the text should be written
    */
-  void writeOn(JavaStringBuilder builder) {
+  void _writeOn(StringBuffer buffer) {
     if (_librarySource != null) {
-      builder.append("; builtUnit = ");
-      builder.append(_builtUnitState);
-      builder.append("; buildElementErrors = ");
-      builder.append(_buildElementErrorsState);
-      builder.append("; resolvedUnit = ");
-      builder.append(_resolvedUnitState);
-      builder.append("; resolutionErrors = ");
-      builder.append(_resolutionErrorsState);
-      builder.append("; verificationErrors = ");
-      builder.append(_verificationErrorsState);
-      builder.append("; hints = ");
-      builder.append(_hintsState);
+      _writeStateOn(buffer, "builtElement", DartEntry.BUILT_ELEMENT);
+      _writeStateOn(buffer, "builtUnit", DartEntry.BUILT_UNIT);
+      _writeStateOn(buffer, "resolvedUnit", DartEntry.RESOLVED_UNIT);
+      _writeStateOn(buffer, "resolutionErrors", DartEntry.RESOLUTION_ERRORS);
+      _writeStateOn(buffer, "verificationErrors", DartEntry.VERIFICATION_ERRORS);
+      _writeStateOn(buffer, "hints", DartEntry.HINTS);
       if (_nextState != null) {
-        _nextState.writeOn(builder);
+        _nextState._writeOn(buffer);
       }
     }
   }
 
   /**
-   * Write a textual representation of the difference between the state of the specified data
-   * between the old entry and this entry to the given string builder.
-   *
-   * @param builder the string builder to which the difference is to be written
-   * @param needsSeparator `true` if any data that is written
-   * @param oldEntry the entry that was replaced by this entry
-   * @param descriptor the descriptor defining the data whose state is being compared
-   * @param label the label used to describe the state
-   * @return `true` if some difference was written
+   * Write a textual representation of the difference between the state of the
+   * value described by the given [descriptor] between the [oldEntry] and this
+   * entry to the given [buffer]. Return `true` if some difference was written.
    */
-  bool writeStateDiffOn(JavaStringBuilder builder, bool needsSeparator, SourceEntry oldEntry, DataDescriptor descriptor, CacheState newState, String label) {
-    CacheState oldState = (oldEntry as DartEntry).getStateInLibrary(descriptor, _librarySource);
+  bool _writeStateDiffOn(StringBuffer buffer, bool needsSeparator, String label,
+        DataDescriptor descriptor, SourceEntry oldEntry) {
+    CacheState oldState = oldEntry.getState(descriptor);
+    CacheState newState = getState(descriptor);
     if (oldState != newState) {
       if (needsSeparator) {
-        builder.append("; ");
+        buffer.write("; ");
       }
-      builder.append(label);
-      builder.append(" = ");
-      builder.append(oldState);
-      builder.append(" -> ");
-      builder.append(newState);
+      buffer.write(label);
+      buffer.write(" = ");
+      buffer.write(oldState);
+      buffer.write(" -> ");
+      buffer.write(newState);
       return true;
     }
     return needsSeparator;
   }
+
+  /**
+   * Write a textual representation of the state of the value described by the
+   * given [descriptor] to the given bugger, prefixed by the given [label] to
+   * the given [buffer].
+   */
+  void _writeStateOn(StringBuffer buffer, String label, DataDescriptor descriptor) {
+    CachedResult result = resultMap[descriptor];
+    buffer.write("; ");
+    buffer.write(label);
+    buffer.write(" = ");
+    buffer.write(result == null ? CacheState.INVALID : result.state);
+  }
 }
 
 /**
@@ -13712,7 +12838,13 @@
    * The most recent time at which the state of the source matched the state
    * represented by this entry.
    */
-  int _modificationTime = 0;
+  int modificationTime = 0;
+
+  /**
+   * The exception that caused one or more values to have a state of
+   * [CacheState.ERROR].
+   */
+  CaughtException exception;
 
   /**
    * A bit-encoding of boolean flags associated with this element.
@@ -13720,31 +12852,11 @@
   int _flags = 0;
 
   /**
-   * The exception that caused one or more values to have a state of
-   * [CacheState.ERROR].
+   * A table mapping data descriptors to the cached results for those
+   * descriptors.
    */
-  CaughtException _exception;
-
-  /**
-   * The state of the cached content.
-   */
-  CacheState _contentState = CacheState.INVALID;
-
-  /**
-   * The content of the source, or `null` if the content is not currently cached.
-   */
-  String _content;
-
-  /**
-   * The state of the cached line information.
-   */
-  CacheState _lineInfoState = CacheState.INVALID;
-
-  /**
-   * The line information computed for the source, or `null` if the line
-   * information is not currently cached.
-   */
-  LineInfo _lineInfo;
+  Map<DataDescriptor, CachedResult> resultMap
+      = new HashMap<DataDescriptor, CachedResult>();
 
   /**
    * The data descriptor representing the contents of the source.
@@ -13766,48 +12878,97 @@
   static int _EXPLICITLY_ADDED_FLAG = 0;
 
   /**
-   * Fix the state of the [exception] to match the current state of the entry.
-   */
-  void fixExceptionState() {
-    if (hasErrorState) {
-      if (_exception == null) {
-        //
-        // This code should never be reached, but is a fail-safe in case an exception is not
-        // recorded when it should be.
-        //
-        _exception = new CaughtException(new AnalysisException("State set to ERROR without setting an exception"), null);
-      }
-    } else {
-      _exception = null;
-    }
-  }
-
-  /**
-   * Return a textual representation of the difference between the old entry and this entry. The
-   * difference is represented as a sequence of fields whose value would change if the old entry
-   * were converted into the new entry.
-   *
-   * @param oldEntry the entry being diff'd with this entry
-   * @return a textual representation of the difference
-   */
-  String getDiff(SourceEntry oldEntry) {
-    JavaStringBuilder builder = new JavaStringBuilder();
-    writeDiffOn(builder, oldEntry);
-    return builder.toString();
-  }
-
-  /**
-   * Return the exception that caused one or more values to have a state of
-   * [CacheState.ERROR].
-   */
-  CaughtException get exception => _exception;
-
-  /**
    * Return `true` if the source was explicitly added to the context or `false`
    * if the source was implicitly added because it was referenced by another
    * source.
    */
-  bool get explicitlyAdded => getFlag(_EXPLICITLY_ADDED_FLAG);
+  bool get explicitlyAdded => _getFlag(_EXPLICITLY_ADDED_FLAG);
+
+  /**
+   * Set whether the source was explicitly added to the context to match the
+   * [explicitlyAdded] flag.
+   */
+  void set explicitlyAdded(bool explicitlyAdded) {
+    _setFlag(_EXPLICITLY_ADDED_FLAG, explicitlyAdded);
+  }
+
+  /**
+   * Fix the state of the [exception] to match the current state of the entry.
+   */
+  void fixExceptionState() {
+    if (hasErrorState()) {
+      if (exception == null) {
+        //
+        // This code should never be reached, but is a fail-safe in case an
+        // exception is not recorded when it should be.
+        //
+        String message = "State set to ERROR without setting an exception";
+        exception = new CaughtException(new AnalysisException(message), null);
+      }
+    } else {
+      exception = null;
+    }
+  }
+
+  /**
+   * Return a textual representation of the difference between the [oldEntry]
+   * and this entry. The difference is represented as a sequence of fields whose
+   * value would change if the old entry were converted into the new entry.
+   */
+  String getDiff(SourceEntry oldEntry) {
+    StringBuffer buffer = new StringBuffer();
+    _writeDiffOn(buffer, oldEntry);
+    return buffer.toString();
+  }
+
+  /**
+   * Return the state of the data represented by the given [descriptor].
+   */
+  CacheState getState(DataDescriptor descriptor) {
+    if (!_isValidDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
+    }
+    CachedResult result = resultMap[descriptor];
+    if (result == null) {
+      return CacheState.INVALID;
+    }
+    return result.state;
+  }
+
+  /**
+   * Return the value of the data represented by the given [descriptor], or
+   * `null` if the data represented by the descriptor is not valid.
+   */
+  /*<V>*/ dynamic /*V*/ getValue(DataDescriptor/*<V>*/ descriptor) {
+    if (!_isValidDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
+    }
+    CachedResult result = resultMap[descriptor];
+    if (result == null) {
+      return descriptor.defaultValue;
+    }
+    return result.value;
+  }
+
+  /**
+   * Return `true` if the state of any data value is [CacheState.ERROR].
+   */
+  bool hasErrorState() {
+    for (CachedResult result in resultMap.values) {
+      if (result.state == CacheState.ERROR) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Invalidate all of the information associated with this source.
+   */
+  void invalidateAllInformation() {
+    setState(CONTENT, CacheState.INVALID);
+    setState(LINE_INFO, CacheState.INVALID);
+  }
 
   /**
    * Return the kind of the source, or `null` if the kind is not currently
@@ -13816,294 +12977,214 @@
   SourceKind get kind;
 
   /**
-   * Return the most recent time at which the state of the source matched the
-   * state represented by this entry.
-   */
-  int get modificationTime => _modificationTime;
-
-  /**
-   * Return the state of the data represented by the given [descriptor].
-   */
-  CacheState getState(DataDescriptor descriptor) {
-    if (identical(descriptor, SourceEntry.CONTENT)) {
-      return _contentState;
-    } else if (identical(descriptor, SourceEntry.LINE_INFO)) {
-      return _lineInfoState;
-    } else {
-      throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
-    }
-  }
-
-  /**
-   * Return the value of the data represented by the given [descriptor], or
-   * `null` if the data represented by the descriptor is not in the cache.
-   */
-  Object getValue(DataDescriptor descriptor) {
-    if (identical(descriptor, SourceEntry.CONTENT)) {
-      return _content;
-    } else if (identical(descriptor, SourceEntry.LINE_INFO)) {
-      return _lineInfo;
-    } else {
-      throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
-    }
-  }
-
-  /**
-   * Invalidate all of the information associated with this source.
-   */
-  void invalidateAllInformation() {
-    _content = null;
-    _contentState = _checkContentState(CacheState.INVALID);
-    _lineInfo = null;
-    _lineInfoState = CacheState.INVALID;
-  }
-
-  /**
-   * Record that an error occurred while attempting to get the contents of the source represented by
-   * this entry. This will set the state of all information, including any resolution-based
-   * information, as being in error.
-   *
-   * @param exception the exception that shows where the error occurred
+   * Record that an [exception] occurred while attempting to get the contents of
+   * the source represented by this entry. This will set the state of all
+   * information, including any resolution-based information, as being in error.
    */
   void recordContentError(CaughtException exception) {
-    _content = null;
-    _contentState = CacheState.ERROR;
+    setState(CONTENT, CacheState.ERROR);
     recordScanError(exception);
   }
 
   /**
-   * Record that an error occurred while attempting to scan or parse the entry represented by this
-   * entry. This will set the state of all information, including any resolution-based information,
-   * as being in error.
-   *
-   * @param exception the exception that shows where the error occurred
+   * Record that an [exception] occurred while attempting to scan or parse the
+   * entry represented by this entry. This will set the state of all
+   * information, including any resolution-based information, as being in error.
    */
   void recordScanError(CaughtException exception) {
     this.exception = exception;
-    _lineInfo = null;
-    _lineInfoState = CacheState.ERROR;
+    setState(LINE_INFO, CacheState.ERROR);
   }
 
   /**
-   * Set whether the source was explicitly added to the context to match the
-   * given value.
-   */
-  void set explicitlyAdded(bool explicitlyAdded) {
-    setFlag(_EXPLICITLY_ADDED_FLAG, explicitlyAdded);
-  }
-
-  /**
-   * Set the most recent time at which the state of the source matched the state
-   * represented by this entry to the given time.
-   */
-  void set modificationTime(int time) {
-    _modificationTime = time;
-  }
-
-  /**
-   * Set the state of the data represented by the given descriptor to the given state.
-   *
-   * @param descriptor the descriptor representing the data whose state is to be set
-   * @param the new state of the data represented by the given descriptor
+   * Set the state of the data represented by the given [descriptor] to the
+   * given [state].
    */
   void setState(DataDescriptor descriptor, CacheState state) {
-    if (identical(descriptor, SourceEntry.CONTENT)) {
-      _content = updatedValue(state, _content, null);
-      _contentState = _checkContentState(state);
-    } else if (identical(descriptor, SourceEntry.LINE_INFO)) {
-      _lineInfo = updatedValue(state, _lineInfo, null);
-      _lineInfoState = state;
+    if (!_isValidDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
+    }
+    if (state == CacheState.VALID) {
+      throw new ArgumentError("use setValue() to set the state to VALID");
+    }
+    _validateStateChange(descriptor, state);
+    if (state == CacheState.INVALID) {
+      resultMap.remove(descriptor);
     } else {
-      throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
+      CachedResult result = resultMap.putIfAbsent(
+          descriptor,
+          () => new CachedResult(descriptor));
+      result.state = state;
+      if (state != CacheState.IN_PROCESS) {
+        //
+        // If the state is in-process, we can leave the current value in the cache
+        // for any 'get' methods to access.
+        //
+        result.value = descriptor.defaultValue;
+      }
     }
   }
 
   /**
-   * Set the value of the data represented by the given descriptor to the given value.
-   *
-   * @param descriptor the descriptor representing the data whose value is to be set
-   * @param value the new value of the data represented by the given descriptor
+   * Set the value of the data represented by the given [descriptor] to the
+   * given [value].
    */
-  void setValue(DataDescriptor descriptor, Object value) {
-    if (identical(descriptor, SourceEntry.CONTENT)) {
-      _content = value as String;
-      _contentState = _checkContentState(CacheState.VALID);
-    } else if (identical(descriptor, SourceEntry.LINE_INFO)) {
-      _lineInfo = value as LineInfo;
-      _lineInfoState = CacheState.VALID;
-    } else {
-      throw new IllegalArgumentException("Invalid descriptor: ${descriptor}");
+  void setValue(DataDescriptor/*<V>*/ descriptor, dynamic /*V*/ value) {
+    if (!_isValidDescriptor(descriptor)) {
+      throw new ArgumentError("Invalid descriptor: $descriptor");
     }
+    _validateStateChange(descriptor, CacheState.VALID);
+    CachedResult result = resultMap.putIfAbsent(
+        descriptor,
+        () => new CachedResult(descriptor));
+    result.state = CacheState.VALID;
+    result.value = value == null ? descriptor.defaultValue : value;
   }
 
   @override
   String toString() {
-    JavaStringBuilder builder = new JavaStringBuilder();
-    writeOn(builder);
-    return builder.toString();
+    StringBuffer buffer = new StringBuffer();
+    _writeOn(buffer);
+    return buffer.toString();
   }
 
   /**
-   * Set the value of all of the flags with the given indexes to false.
-   *
-   * @param indexes the indexes of the flags whose value is to be set to false
+   * Set the value of all of the flags with the given [indexes] to false.
    */
-  void clearFlags(List<int> indexes) {
+  void _clearFlags(List<int> indexes) {
     for (int i = 0; i < indexes.length; i++) {
       _flags = BooleanArray.set(_flags, indexes[i], false);
     }
   }
 
   /**
-   * Return the value of the flag with the given index.
-   *
-   * @param index the index of the flag whose value is to be returned
-   * @return the value of the flag with the given index
+   * Flush the value of the data described by the [descriptor].
    */
-  bool getFlag(int index) => BooleanArray.get(_flags, index);
-
-  /**
-   * Return `true` if the state of any data value is [CacheState.ERROR].
-   *
-   * @return `true` if the state of any data value is [CacheState.ERROR]
-   */
-  bool get hasErrorState => _contentState == CacheState.ERROR || _lineInfoState == CacheState.ERROR;
-
-  /**
-   * Set the exception that caused one or more values to have a state of
-   * [CacheState.ERROR] to the given [exception].
-   */
-  void set exception(CaughtException exception) {
-    if (exception == null) {
-      throw new IllegalArgumentException("exception cannot be null");
+  void _flush(DataDescriptor descriptor) {
+    CachedResult result = resultMap[descriptor];
+    if (result != null && result.state == CacheState.VALID) {
+      _validateStateChange(descriptor, CacheState.FLUSHED);
+      result.state = CacheState.FLUSHED;
+      result.value = descriptor.defaultValue;
     }
-    this._exception = exception;
   }
 
   /**
-   * Set the value of the flag with the given index to the given value.
-   *
-   * @param index the index of the flag whose value is to be returned
-   * @param value the value of the flag with the given index
+   * Return the value of the flag with the given [index].
    */
-  void setFlag(int index, bool value) {
+  bool _getFlag(int index) => BooleanArray.get(_flags, index);
+
+  /**
+   * Return `true` if the [descriptor] is valid for this entry.
+   */
+  bool _isValidDescriptor(DataDescriptor descriptor) {
+    return descriptor == CONTENT
+        || descriptor == LINE_INFO;
+  }
+
+  /**
+   * Set the value of the flag with the given [index] to the given [value].
+   */
+  void _setFlag(int index, bool value) {
     _flags = BooleanArray.set(_flags, index, value);
   }
 
   /**
-   * Given that some data is being transitioned to the given state, return the value that should be
-   * kept in the cache.
-   *
-   * @param state the state to which the data is being transitioned
-   * @param currentValue the value of the data before the transition
-   * @param defaultValue the value to be used if the current value is to be removed from the cache
-   * @return the value of the data that should be kept in the cache
+   * Write a textual representation of the difference between the [oldEntry] and
+   * this entry to the given string [buffer]. Return `true` if some difference
+   * was written.
    */
-  Object updatedValue(CacheState state, Object currentValue, Object defaultValue) {
-    if (state == CacheState.VALID) {
-      throw new IllegalArgumentException("Use setValue() to set the state to VALID");
-    } else if (state == CacheState.IN_PROCESS) {
-      //
-      // We can leave the current value in the cache for any 'get' methods to access.
-      //
-      return currentValue;
-    }
-    return defaultValue;
-  }
-
-  /**
-   * Write a textual representation of the difference between the old entry and this entry to the
-   * given string builder.
-   *
-   * @param builder the string builder to which the difference is to be written
-   * @param oldEntry the entry that was replaced by this entry
-   * @return `true` if some difference was written
-   */
-  bool writeDiffOn(JavaStringBuilder builder, SourceEntry oldEntry) {
+  bool _writeDiffOn(StringBuffer buffer, SourceEntry oldEntry) {
     bool needsSeparator = false;
     CaughtException oldException = oldEntry.exception;
-    if (!identical(oldException, _exception)) {
-      builder.append("exception = ");
-      builder.append(oldException.runtimeType);
-      builder.append(" -> ");
-      builder.append(_exception.runtimeType);
+    if (!identical(oldException, exception)) {
+      buffer.write("exception = ");
+      buffer.write(oldException.runtimeType);
+      buffer.write(" -> ");
+      buffer.write(exception.runtimeType);
       needsSeparator = true;
     }
     int oldModificationTime = oldEntry.modificationTime;
-    if (oldModificationTime != _modificationTime) {
+    if (oldModificationTime != modificationTime) {
       if (needsSeparator) {
-        builder.append("; ");
+        buffer.write("; ");
       }
-      builder.append("time = ");
-      builder.append(oldModificationTime);
-      builder.append(" -> ");
-      builder.append(_modificationTime);
+      buffer.write("time = ");
+      buffer.write(oldModificationTime);
+      buffer.write(" -> ");
+      buffer.write(modificationTime);
       needsSeparator = true;
     }
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, SourceEntry.CONTENT, "content");
-    needsSeparator = writeStateDiffOn(builder, needsSeparator, oldEntry, SourceEntry.LINE_INFO, "lineInfo");
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "content", CONTENT, oldEntry);
+    needsSeparator = _writeStateDiffOn(buffer, needsSeparator, "lineInfo", LINE_INFO, oldEntry);
     return needsSeparator;
   }
 
   /**
-   * Write a textual representation of this entry to the given builder. The result will only be used
-   * for debugging purposes.
-   *
-   * @param builder the builder to which the text should be written
+   * Write a textual representation of this entry to the given [buffer]. The
+   * result should only be used for debugging purposes.
    */
-  void writeOn(JavaStringBuilder builder) {
-    builder.append("time = ");
-    builder.append(_modificationTime);
-    builder.append("; content = ");
-    builder.append(_contentState);
-    builder.append("; lineInfo = ");
-    builder.append(_lineInfoState);
+  void _writeOn(StringBuffer buffer) {
+    buffer.write("time = ");
+    buffer.write(modificationTime);
+    _writeStateOn(buffer, "content", CONTENT);
+    _writeStateOn(buffer, "lineInfo", LINE_INFO);
   }
 
   /**
-   * Write a textual representation of the difference between the state of the specified data
-   * between the old entry and this entry to the given string builder.
-   *
-   * @param builder the string builder to which the difference is to be written
-   * @param needsSeparator `true` if any data that is written
-   * @param oldEntry the entry that was replaced by this entry
-   * @param descriptor the descriptor defining the data whose state is being compared
-   * @param label the label used to describe the state
-   * @return `true` if some difference was written
+   * Write a textual representation of the difference between the state of the
+   * value described by the given [descriptor] between the [oldEntry] and this
+   * entry to the given [buffer]. Return `true` if some difference was written.
    */
-  bool writeStateDiffOn(JavaStringBuilder builder, bool needsSeparator, SourceEntry oldEntry, DataDescriptor descriptor, String label) {
+  bool _writeStateDiffOn(StringBuffer buffer, bool needsSeparator, String label,
+        DataDescriptor descriptor, SourceEntry oldEntry) {
     CacheState oldState = oldEntry.getState(descriptor);
     CacheState newState = getState(descriptor);
     if (oldState != newState) {
       if (needsSeparator) {
-        builder.append("; ");
+        buffer.write("; ");
       }
-      builder.append(label);
-      builder.append(" = ");
-      builder.append(oldState);
-      builder.append(" -> ");
-      builder.append(newState);
+      buffer.write(label);
+      buffer.write(" = ");
+      buffer.write(oldState);
+      buffer.write(" -> ");
+      buffer.write(newState);
       return true;
     }
     return needsSeparator;
   }
 
   /**
-   * If the state is changing from ERROR to anything else, capture the information. This is an
-   * attempt to discover the underlying cause of a long-standing bug.
-   *
-   * @param newState the new state of the content
-   * @return the new state of the content
+   * Write a textual representation of the state of the value described by the
+   * given [descriptor] to the given bugger, prefixed by the given [label] to
+   * the given [buffer].
    */
-  CacheState _checkContentState(CacheState newState) {
-    if (_contentState == CacheState.ERROR) {
-      InstrumentationBuilder builder = Instrumentation.builder2("SourceEntryImpl-checkContentState");
-      builder.data3("message", "contentState changing from ${_contentState} to ${newState}");
+  void _writeStateOn(StringBuffer buffer, String label, DataDescriptor descriptor) {
+    CachedResult result = resultMap[descriptor];
+    buffer.write("; ");
+    buffer.write(label);
+    buffer.write(" = ");
+    buffer.write(result == null ? CacheState.INVALID : result.state);
+  }
+
+  /**
+   * If the state of the value described by the given [descriptor] is changing
+   * from ERROR to anything else, capture the information. This is an attempt to
+   * discover the underlying cause of a long-standing bug.
+   */
+  void _validateStateChange(DataDescriptor descriptor, CacheState newState) {
+    if (descriptor != CONTENT) {
+      return;
+    }
+    CachedResult result = resultMap[CONTENT];
+    if (result != null && result.state == CacheState.ERROR) {
+      String message = "contentState changing from ${result.state} to ${newState}";
+      InstrumentationBuilder builder = Instrumentation.builder2("SourceEntry-validateStateChange");
+      builder.data3("message", message);
       //builder.data("source", source.getFullName());
-      builder.record(new CaughtException(new AnalysisException(), null));
+      builder.record(new CaughtException(new AnalysisException(message), null));
       builder.log();
     }
-    return newState;
   }
 }
 
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index beeb4a2..c776fb3 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -3190,9 +3190,8 @@
   }
 
   /**
-   * Return `true` if the current token appears to be the beginning of a function declaration.
-   *
-   * @return `true` if the current token appears to be the beginning of a function declaration
+   * Return `true` if the current token appears to be the beginning of a
+   * function declaration.
    */
   bool _isFunctionDeclaration() {
     if (_matchesKeyword(Keyword.VOID)) {
@@ -3200,13 +3199,14 @@
     }
     Token afterReturnType = _skipTypeName(_currentToken);
     if (afterReturnType == null) {
-      // There was no return type, but it is optional, so go back to where we started.
+      // There was no return type, but it is optional, so go back to where we
+      // started.
       afterReturnType = _currentToken;
     }
     Token afterIdentifier = _skipSimpleIdentifier(afterReturnType);
     if (afterIdentifier == null) {
-      // It's possible that we parsed the function name as if it were a type name, so see whether
-      // it makes sense if we assume that there is no type.
+      // It's possible that we parsed the function name as if it were a type
+      // name, so see whether it makes sense if we assume that there is no type.
       afterIdentifier = _skipSimpleIdentifier(_currentToken);
     }
     if (afterIdentifier == null) {
@@ -3215,14 +3215,22 @@
     if (_isFunctionExpression(afterIdentifier)) {
       return true;
     }
-    // It's possible that we have found a getter. While this isn't valid at this point we test for
-    // it in order to recover better.
+    // It's possible that we have found a getter. While this isn't valid at this
+    // point we test for it in order to recover better.
     if (_matchesKeyword(Keyword.GET)) {
       Token afterName = _skipSimpleIdentifier(_currentToken.next);
       if (afterName == null) {
         return false;
       }
-      return _tokenMatches(afterName, TokenType.FUNCTION) || _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
+      return _tokenMatches(afterName, TokenType.FUNCTION)
+          || _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
+    } else if (_tokenMatchesKeyword(afterReturnType, Keyword.GET)) {
+      Token afterName = _skipSimpleIdentifier(afterReturnType.next);
+      if (afterName == null) {
+        return false;
+      }
+      return _tokenMatches(afterName, TokenType.FUNCTION)
+          || _tokenMatches(afterName, TokenType.OPEN_CURLY_BRACKET);
     }
     return false;
   }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 6e26b9e..1717d76 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1269,17 +1269,14 @@
 }
 
 /**
- * Instances of the class `CompilationUnitBuilder` build an element model for a single
- * compilation unit.
+ * A `CompilationUnitBuilder` builds an element model for a single compilation
+ * unit.
  */
 class CompilationUnitBuilder {
   /**
-   * Build the compilation unit element for the given source.
-   *
-   * @param source the source describing the compilation unit
-   * @param unit the AST structure representing the compilation unit
-   * @return the compilation unit element that was built
-   * @throws AnalysisException if the analysis could not be performed
+   * Build the compilation unit element for the given [source] based on the
+   * compilation [unit] associated with the source. Throw an AnalysisException
+   * if the element could not be built.
    */
   CompilationUnitElementImpl buildCompilationUnit(Source source, CompilationUnit unit) {
     TimeCounter_TimeCounterHandle timeCounter = PerformanceStatistics.resolve.start();
@@ -1299,6 +1296,7 @@
       element.types = holder.types;
       element.topLevelVariables = holder.topLevelVariables;
       unit.element = element;
+      holder.validate();
       return element;
     } finally {
       timeCounter.stop();
@@ -3722,7 +3720,7 @@
       }
       FunctionBody body = expression.body;
       sc.Token property = node.propertyKeyword;
-      if (property == null) {
+      if (property == null || _inFunction) {
         SimpleIdentifier functionName = node.name;
         FunctionElementImpl element = new FunctionElementImpl.forNode(functionName);
         element.functions = holder.functions;
@@ -3853,7 +3851,7 @@
     SimpleIdentifier aliasName = node.name;
     List<ParameterElement> parameters = holder.parameters;
     List<TypeParameterElement> typeParameters = holder.typeParameters;
-    FunctionTypeAliasElementImpl element = new FunctionTypeAliasElementImpl(aliasName);
+    FunctionTypeAliasElementImpl element = new FunctionTypeAliasElementImpl.forNode(aliasName);
     element.parameters = parameters;
     element.typeParameters = typeParameters;
     FunctionTypeImpl type = new FunctionTypeImpl.con2(element);
@@ -21742,9 +21740,9 @@
   Object visitMethodInvocation(MethodInvocation node) {
     SimpleIdentifier methodNameNode = node.methodName;
     Element staticMethodElement = methodNameNode.staticElement;
-    // Record types of the local variable invoked as a function.
-    if (staticMethodElement is LocalVariableElement) {
-      LocalVariableElement variable = staticMethodElement;
+    // Record types of the variable invoked as a function.
+    if (staticMethodElement is VariableElement) {
+      VariableElement variable = staticMethodElement;
       DartType staticType = variable.type;
       _recordStaticType(methodNameNode, staticType);
       DartType propagatedType = _overrideManager.getType(variable);
@@ -24803,7 +24801,7 @@
    */
   void _setFunctionTypedParameterType(ParameterElementImpl element, TypeName returnType, FormalParameterList parameterList) {
     List<ParameterElement> parameters = _getElements(parameterList);
-    FunctionTypeAliasElementImpl aliasElement = new FunctionTypeAliasElementImpl(null);
+    FunctionTypeAliasElementImpl aliasElement = new FunctionTypeAliasElementImpl.forNode(null);
     aliasElement.synthetic = true;
     aliasElement.shareParameters(parameters);
     aliasElement.returnType = _computeReturnType(returnType);
diff --git a/pkg/analyzer/lib/src/task/task_dart.dart b/pkg/analyzer/lib/src/task/task_dart.dart
new file mode 100644
index 0000000..8e123b3
--- /dev/null
+++ b/pkg/analyzer/lib/src/task/task_dart.dart
@@ -0,0 +1,86 @@
+// 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.
+
+library engine.task.dart;
+
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+/**
+ * A `BuildUnitElementTask` builds a compilation unit element for a single
+ * compilation unit.
+ */
+class BuildUnitElementTask extends AnalysisTask {
+  /**
+   * The source for which an element model will be built.
+   */
+  final Source source;
+
+  /**
+   * The source of the library in which an element model will be built.
+   */
+  final Source library;
+
+  /**
+   * The compilation unit from which an element model will be built.
+   */
+  final CompilationUnit unit;
+
+  /**
+   * The element model that was built.
+   */
+  CompilationUnitElement unitElement;
+
+  /**
+   * Initialize a newly created task to build a compilation unit element for
+   * the given [source] in the given [library] based on the compilation [unit]
+   * that was parsed.
+   */
+  BuildUnitElementTask(InternalAnalysisContext context, this.source, this.library, this.unit)
+      : super(context);
+
+  @override
+  accept(AnalysisTaskVisitor visitor) {
+    return visitor.visitBuildUnitElementTask(this);
+  }
+
+  /**
+   * Return the compilation unit from which the element model was built.
+   */
+  CompilationUnit getCompilationUnit() {
+    return unit;
+  }
+
+  /**
+   * Return the source that is to be parsed.
+   */
+  Source getSource() {
+    return source;
+  }
+
+  /**
+   * Return the compilation unit element that was produced, or `null` if the
+   * task has not yet been performed or if an exception occurred.
+   */
+  CompilationUnitElement getUnitElement() {
+    return unitElement;
+  }
+
+  @override
+  void internalPerform() {
+    CompilationUnitBuilder builder = new CompilationUnitBuilder();
+    unitElement = builder.buildCompilationUnit(source, unit);
+  }
+
+  @override
+  String get taskDescription {
+    if (source == null) {
+      return "build the unit element model for null source";
+    }
+    return "build the unit element model for " + source.fullName;
+  }
+}
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 6d69db6..54c3359 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 0.23.0-dev.11
+version: 0.23.0-dev.13
 author: Dart Team <misc@dartlang.org>
 description: Static analyzer for Dart.
 homepage: http://www.dartlang.org
diff --git a/pkg/analyzer/test/generated/all_the_rest.dart b/pkg/analyzer/test/generated/all_the_rest.dart
index 05a433b..c194f19 100644
--- a/pkg/analyzer/test/generated/all_the_rest.dart
+++ b/pkg/analyzer/test/generated/all_the_rest.dart
@@ -3806,6 +3806,89 @@
         []);
   }
 
+  void test_dependencyOnNonFactoryRedirect() {
+    // a depends on A.foo() depends on A.bar()
+    _assertProperDependencies(
+        EngineTestCase.createSource(
+            [
+                "const A a = const A.foo();",
+                "class A {",
+                "  const A.foo() : this.bar();",
+                "  const A.bar();",
+                "}"]),
+        []);
+  }
+
+  void test_dependencyOnNonFactoryRedirect_arg() {
+    // a depends on A.foo() depends on b
+    _assertProperDependencies(
+        EngineTestCase.createSource(
+            [
+                "const A a = const A.foo();",
+                "const int b = 1;",
+                "class A {",
+                "  const A.foo() : this.bar(b);",
+                "  const A.bar(x) : y = x;",
+                "  final int y;"
+                "}"]),
+        []);
+  }
+
+  void test_dependencyOnNonFactoryRedirect_defaultValue() {
+    // a depends on A.foo() depends on A.bar() depends on b
+    _assertProperDependencies(
+        EngineTestCase.createSource(
+            [
+                "const A a = const A.foo();",
+                "const int b = 1;",
+                "class A {",
+                "  const A.foo() : this.bar();",
+                "  const A.bar([x = b]) : y = x;",
+                "  final int y;",
+                "}"]),
+        []);
+  }
+
+  void test_dependencyOnNonFactoryRedirect_toMissing() {
+    // a depends on A.foo() which depends on nothing, since A.bar() is
+    // missing.
+    _assertProperDependencies(
+        EngineTestCase.createSource(
+            [
+                "const A a = const A.foo();",
+                "class A {",
+                "  const A.foo() : this.bar();",
+                "}"]),
+        [CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR]);
+  }
+
+  void test_dependencyOnNonFactoryRedirect_toNonConst() {
+    // a depends on A.foo() which depends on nothing, since A.bar() is
+    // non-const.
+    _assertProperDependencies(
+        EngineTestCase.createSource(
+            [
+                "const A a = const A.foo();",
+                "class A {",
+                "  const A.foo() : this.bar();",
+                "  A.bar();",
+                "}"]),
+        []);
+  }
+
+  void test_dependencyOnNonFactoryRedirect_unnamed() {
+    // a depends on A.foo() depends on A()
+    _assertProperDependencies(
+        EngineTestCase.createSource(
+            [
+                "const A a = const A.foo();",
+                "class A {",
+                "  const A.foo() : this();",
+                "  const A();",
+                "}"]),
+        []);
+  }
+
   void test_dependencyOnOptionalParameterDefault() {
     // a depends on A() depends on B()
     _assertProperDependencies(
@@ -4126,6 +4209,119 @@
     _assertIntField(superclassFields, "x", 3);
   }
 
+  void test_instanceCreationExpression_nonFactoryRedirect() {
+    CompilationUnit compilationUnit = resolveSource(
+        EngineTestCase.createSource(
+            [
+                "const foo = const A.a1();",
+                "class A {",
+                "  const A.a1() : this.a2();",
+                "  const A.a2() : x = 5;",
+                "  final int x;",
+                "}"]));
+    Map<String, DartObjectImpl> aFields = _assertType(
+        _evaluateInstanceCreationExpression(compilationUnit, "foo"),
+        "A");
+    _assertIntField(aFields, 'x', 5);
+  }
+
+  void test_instanceCreationExpression_nonFactoryRedirect_arg() {
+    CompilationUnit compilationUnit = resolveSource(
+        EngineTestCase.createSource(
+            [
+                "const foo = const A.a1(1);",
+                "class A {",
+                "  const A.a1(x) : this.a2(x + 100);",
+                "  const A.a2(x) : y = x + 10;",
+                "  final int y;",
+                "}"]));
+    Map<String, DartObjectImpl> aFields = _assertType(
+        _evaluateInstanceCreationExpression(compilationUnit, "foo"),
+        "A");
+    _assertIntField(aFields, 'y', 111);
+  }
+
+  void test_instanceCreationExpression_nonFactoryRedirect_cycle() {
+    // It is an error to have a cycle in non-factory redirects; however, we
+    // need to make sure that even if the error occurs, attempting to evaluate
+    // the constant will terminate.
+    CompilationUnit compilationUnit = resolveSource(
+        EngineTestCase.createSource(
+            [
+                "const foo = const A();",
+                "class A {",
+                "  const A() : this.b();",
+                "  const A.b() : this();",
+                "}"]));
+    _assertValidUnknown(
+        _evaluateInstanceCreationExpression(compilationUnit, "foo"));
+  }
+
+  void test_instanceCreationExpression_nonFactoryRedirect_defaultArg() {
+    CompilationUnit compilationUnit = resolveSource(
+        EngineTestCase.createSource(
+            [
+                "const foo = const A.a1();",
+                "class A {",
+                "  const A.a1() : this.a2();",
+                "  const A.a2([x = 100]) : y = x + 10;",
+                "  final int y;",
+                "}"]));
+    Map<String, DartObjectImpl> aFields = _assertType(
+        _evaluateInstanceCreationExpression(compilationUnit, "foo"),
+        "A");
+    _assertIntField(aFields, 'y', 110);
+  }
+
+  void test_instanceCreationExpression_nonFactoryRedirect_toMissing() {
+    CompilationUnit compilationUnit = resolveSource(
+        EngineTestCase.createSource(
+            [
+                "const foo = const A.a1();",
+                "class A {",
+                "  const A.a1() : this.a2();",
+                "}"]));
+    // We don't care what value foo evaluates to (since there is a compile
+    // error), but we shouldn't crash, and we should figure
+    // out that it evaluates to an instance of class A.
+    _assertType(
+        _evaluateInstanceCreationExpression(compilationUnit, "foo"),
+        "A");
+  }
+
+  void test_instanceCreationExpression_nonFactoryRedirect_toNonConst() {
+    CompilationUnit compilationUnit = resolveSource(
+        EngineTestCase.createSource(
+            [
+                "const foo = const A.a1();",
+                "class A {",
+                "  const A.a1() : this.a2();",
+                "  A.a2();",
+                "}"]));
+    // We don't care what value foo evaluates to (since there is a compile
+    // error), but we shouldn't crash, and we should figure
+    // out that it evaluates to an instance of class A.
+    _assertType(
+        _evaluateInstanceCreationExpression(compilationUnit, "foo"),
+        "A");
+  }
+
+  void test_instanceCreationExpression_nonFactoryRedirect_unnamed() {
+    CompilationUnit compilationUnit = resolveSource(
+        EngineTestCase.createSource(
+            [
+                "const foo = const A.a1();",
+                "class A {",
+                "  const A.a1() : this();",
+                "  const A() : x = 5;",
+                "  final int x;",
+                "}"]));
+    Map<String, DartObjectImpl> aFields = _assertType(
+        _evaluateInstanceCreationExpression(compilationUnit, "foo"),
+        "A");
+    _assertIntField(aFields, 'x', 5);
+  }
+
   void test_instanceCreationExpression_redirect() {
     CompilationUnit compilationUnit = resolveSource(
         EngineTestCase.createSource(
diff --git a/pkg/analyzer/test/generated/engine_test.dart b/pkg/analyzer/test/generated/engine_test.dart
index f7e2a16..845636e 100644
--- a/pkg/analyzer/test/generated/engine_test.dart
+++ b/pkg/analyzer/test/generated/engine_test.dart
@@ -28,6 +28,7 @@
 import 'package:analyzer/src/generated/testing/ast_factory.dart';
 import 'package:analyzer/src/generated/testing/element_factory.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
+import 'package:analyzer/src/task/task_dart.dart';
 import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart' as _ut;
 
@@ -543,7 +544,7 @@
     CompilationUnit resolvedUnit =
         _context.computeResolvableCompilationUnit(source);
     JUnitTestCase.assertNotNull(resolvedUnit);
-    JUnitTestCase.assertNotSame(parsedUnit, resolvedUnit);
+    JUnitTestCase.assertSame(parsedUnit, resolvedUnit);
   }
 
   void test_dispose() {
@@ -2200,19 +2201,20 @@
   }
 
   void test_getResolvableCompilationUnit_parsed_accessed() {
-    String importUri = "f1.dart";
+    Source librarySource = new TestSource("/lib.dart");
+    String importUri = "/f1.dart";
     Source importSource = new TestSource(importUri);
     ImportDirective importDirective =
         AstFactory.importDirective3(importUri, null, []);
     importDirective.source = importSource;
     importDirective.uriContent = importUri;
-    String exportUri = "f2.dart";
+    String exportUri = "/f2.dart";
     Source exportSource = new TestSource(exportUri);
     ExportDirective exportDirective =
         AstFactory.exportDirective2(exportUri, []);
     exportDirective.source = exportSource;
     exportDirective.uriContent = exportUri;
-    String partUri = "f3.dart";
+    String partUri = "/f3.dart";
     Source partSource = new TestSource(partUri);
     PartDirective partDirective = AstFactory.partDirective2(partUri);
     partDirective.source = partSource;
@@ -2223,6 +2225,9 @@
     entry.setValue(DartEntry.PARSED_UNIT, unit);
     entry.getValue(DartEntry.PARSED_UNIT);
     CompilationUnit result = entry.resolvableCompilationUnit;
+    JUnitTestCase.assertSame(unit, result);
+    entry.setValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource, unit);
+    result = entry.resolvableCompilationUnit;
     JUnitTestCase.assertNotSame(unit, result);
     NodeList<Directive> directives = result.directives;
     ImportDirective resultImportDirective = directives[0] as ImportDirective;
@@ -2287,7 +2292,7 @@
     try {
       entry.getStateInLibrary(DartEntry.ELEMENT, new TestSource());
       JUnitTestCase.fail("Expected IllegalArgumentException for ELEMENT");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
@@ -2298,7 +2303,7 @@
       entry.getState(DartEntry.RESOLUTION_ERRORS);
       JUnitTestCase.fail(
           "Expected IllegalArgumentException for RESOLUTION_ERRORS");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
@@ -2309,17 +2314,31 @@
       entry.getState(DartEntry.VERIFICATION_ERRORS);
       JUnitTestCase.fail(
           "Expected IllegalArgumentException for VERIFICATION_ERRORS");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
 
+  void test_getValue_containingLibraries() {
+    Source testSource = new TestSource();
+    DartEntry entry = new DartEntry();
+    List<Source> value = entry.containingLibraries;
+    EngineTestCase.assertLength(0, value);
+    entry.addContainingLibrary(testSource);
+    value = entry.containingLibraries;
+    EngineTestCase.assertLength(1, value);
+    JUnitTestCase.assertEquals(testSource, value[0]);
+    entry.removeContainingLibrary(testSource);
+    value = entry.containingLibraries;
+    EngineTestCase.assertLength(0, value);
+  }
+
   void test_getValueInLibrary_invalid_element() {
     DartEntry entry = new DartEntry();
     try {
       entry.getValueInLibrary(DartEntry.ELEMENT, new TestSource());
       JUnitTestCase.fail("Expected IllegalArgumentException for ELEMENT");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
@@ -2344,32 +2363,18 @@
     try {
       entry.getValueInLibrary(DartEntry.ELEMENT, source3);
       JUnitTestCase.fail("Expected IllegalArgumentException for ELEMENT");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
 
-  void test_getValue_containingLibraries() {
-    Source testSource = new TestSource();
-    DartEntry entry = new DartEntry();
-    List<Source> value = entry.getValue(DartEntry.CONTAINING_LIBRARIES);
-    EngineTestCase.assertLength(0, value);
-    entry.addContainingLibrary(testSource);
-    value = entry.getValue(DartEntry.CONTAINING_LIBRARIES);
-    EngineTestCase.assertLength(1, value);
-    JUnitTestCase.assertEquals(testSource, value[0]);
-    entry.removeContainingLibrary(testSource);
-    value = entry.getValue(DartEntry.CONTAINING_LIBRARIES);
-    EngineTestCase.assertLength(0, value);
-  }
-
   void test_getValue_invalid_resolutionErrors() {
     DartEntry entry = new DartEntry();
     try {
       entry.getValue(DartEntry.RESOLUTION_ERRORS);
       JUnitTestCase.fail(
           "Expected IllegalArgumentException for RESOLUTION_ERRORS");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
     }
   }
 
@@ -2379,7 +2384,7 @@
       entry.getValue(DartEntry.VERIFICATION_ERRORS);
       JUnitTestCase.fail(
           "Expected IllegalArgumentException for VERIFICATION_ERRORS");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
@@ -2583,7 +2588,7 @@
         entry.getState(DartEntry.IS_LAUNCHABLE));
   }
 
-  void test_recordBuildElementErrorInLibrary() {
+  void test_recordBuildElementError() {
     // TODO(brianwilkerson) This test should set the state for two libraries,
     // record an error in one library, then verify that the data for the other
     // library is still valid.
@@ -2597,6 +2602,12 @@
         entry.getState(SourceEntry.CONTENT));
     JUnitTestCase.assertSame(
         CacheState.ERROR,
+        entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, source));
+    JUnitTestCase.assertSame(
+        CacheState.ERROR,
+        entry.getStateInLibrary(DartEntry.BUILT_UNIT, source));
+    JUnitTestCase.assertSame(
+        CacheState.ERROR,
         entry.getState(DartEntry.ELEMENT));
     JUnitTestCase.assertSame(
         CacheState.INVALID,
@@ -2623,7 +2634,7 @@
         CacheState.INVALID,
         entry.getState(DartEntry.PARSED_UNIT));
     JUnitTestCase.assertSame(
-        CacheState.INVALID,
+        CacheState.ERROR,
         entry.getState(DartEntry.PUBLIC_NAMESPACE));
     JUnitTestCase.assertSame(
         CacheState.INVALID,
@@ -2826,20 +2837,6 @@
 //    assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, source));
   }
 
-  void test_recordParseInProcess() {
-    DartEntry entry = new DartEntry();
-    entry.recordParseInProcess();
-    JUnitTestCase.assertSame(
-        CacheState.IN_PROCESS,
-        entry.getState(DartEntry.PARSE_ERRORS));
-    JUnitTestCase.assertSame(
-        CacheState.IN_PROCESS,
-        entry.getState(DartEntry.PARSED_UNIT));
-    JUnitTestCase.assertSame(
-        CacheState.IN_PROCESS,
-        entry.getState(DartEntry.SOURCE_KIND));
-  }
-
   void test_recordResolutionError() {
     //    Source source = new TestSource();
     DartEntry entry = new DartEntry();
@@ -2964,7 +2961,7 @@
   }
 
   void test_recordScanError() {
-    //    Source source = new TestSource();
+//    Source source = new TestSource();
     DartEntry entry = new DartEntry();
     entry.recordScanError(new CaughtException(new AnalysisException(), null));
     JUnitTestCase.assertSame(
@@ -3012,26 +3009,12 @@
     // The following lines are commented out because we don't currently have
     // any way of setting the state for data associated with a library we
     // don't know anything about.
-//    assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.BUILD_ELEMENT_ERRORS, source));
-//    assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.BUILT_UNIT, source));
-//    assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.HINTS, source));
-//    assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, source));
-//    assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, source));
-//    assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, source));
-  }
-
-  void test_recordScanInProcess() {
-    DartEntry entry = new DartEntry();
-    entry.recordScanInProcess();
-    JUnitTestCase.assertSame(
-        CacheState.IN_PROCESS,
-        entry.getState(SourceEntry.LINE_INFO));
-    JUnitTestCase.assertSame(
-        CacheState.IN_PROCESS,
-        entry.getState(DartEntry.SCAN_ERRORS));
-    JUnitTestCase.assertSame(
-        CacheState.IN_PROCESS,
-        entry.getState(DartEntry.TOKEN_STREAM));
+//    JUnitTestCase.assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.BUILT_ELEMENT, source));
+//    JUnitTestCase.assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.BUILT_UNIT, source));
+//    JUnitTestCase.assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.HINTS, source));
+//    JUnitTestCase.assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.RESOLUTION_ERRORS, source));
+//    JUnitTestCase.assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, source));
+//    JUnitTestCase.assertSame(CacheState.ERROR, entry.getStateInLibrary(DartEntry.VERIFICATION_ERRORS, source));
   }
 
   void test_recordVerificationErrorInLibrary() {
@@ -3194,7 +3177,7 @@
     try {
       entry.setStateInLibrary(DartEntry.ELEMENT, null, CacheState.FLUSHED);
       JUnitTestCase.fail("Expected IllegalArgumentException for ELEMENT");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
@@ -3205,7 +3188,7 @@
       entry.setState(DartEntry.RESOLUTION_ERRORS, CacheState.FLUSHED);
       JUnitTestCase.fail(
           "Expected IllegalArgumentException for RESOLUTION_ERRORS");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
     }
   }
@@ -3215,8 +3198,8 @@
     try {
       entry.setState(SourceEntry.LINE_INFO, CacheState.VALID);
       JUnitTestCase.fail(
-          "Expected IllegalArgumentException for a state of VALID");
-    } on IllegalArgumentException catch (exception) {
+          "Expected ArgumentError for a state of VALID");
+    } on ArgumentError catch (exception) {
     }
   }
 
@@ -3226,10 +3209,10 @@
       entry.setState(DartEntry.VERIFICATION_ERRORS, CacheState.FLUSHED);
       JUnitTestCase.fail(
           "Expected IllegalArgumentException for VERIFICATION_ERRORS");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
       // Expected
-    }
-  }
+     }
+   }
 
   void test_setState_isClient() {
     state2 = DartEntry.IS_CLIENT;
@@ -3935,7 +3918,7 @@
       entry.setValue(DartEntry.ELEMENT, null);
       JUnitTestCase.fail(
           "Expected IllegalArgumentException for DartEntry.ELEMENT");
-    } on IllegalArgumentException catch (exception) {
+    } on ArgumentError catch (exception) {
     }
   }
 
@@ -3981,6 +3964,8 @@
 
   HtmlEntry _entryWithValidState() {
     HtmlEntry entry = new HtmlEntry();
+    entry.setValue(HtmlEntry.ANGULAR_APPLICATION, null);
+    entry.setValue(HtmlEntry.ANGULAR_COMPONENT, null);
     entry.setValue(HtmlEntry.ANGULAR_ERRORS, null);
     entry.setValue(HtmlEntry.ELEMENT, null);
     entry.setValue(HtmlEntry.HINTS, null);
@@ -6879,6 +6864,12 @@
  */
 class TestTaskVisitor<E> implements AnalysisTaskVisitor<E> {
   @override
+  E visitBuildUnitElementTask(BuildUnitElementTask task) {
+    JUnitTestCase.fail("Unexpectedly invoked visitGenerateDartErrorsTask");
+    return null;
+  }
+
+  @override
   E visitGenerateDartErrorsTask(GenerateDartErrorsTask task) {
     JUnitTestCase.fail("Unexpectedly invoked visitGenerateDartErrorsTask");
     return null;
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index d3d0117..78bee70 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -922,14 +922,22 @@
     ParserTestCase.parseCompilationUnit("void f(var x()) {}", [ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR]);
   }
 
-  void test_getterInFunction_block() {
+  void test_getterInFunction_block_noReturnType() {
     ParserTestCase.parseStatement("get x { return _x; }", [ParserErrorCode.GETTER_IN_FUNCTION]);
   }
 
-  void test_getterInFunction_expression() {
+  void test_getterInFunction_block_returnType() {
+    ParserTestCase.parseStatement("int get x { return _x; }", [ParserErrorCode.GETTER_IN_FUNCTION]);
+  }
+
+  void test_getterInFunction_expression_noReturnType() {
     ParserTestCase.parseStatement("get x => _x;", [ParserErrorCode.GETTER_IN_FUNCTION]);
   }
 
+  void test_getterInFunction_expression_returnType() {
+    ParserTestCase.parseStatement("int get x => _x;", [ParserErrorCode.GETTER_IN_FUNCTION]);
+  }
+
   void test_getterWithParameters() {
     ParserTestCase.parse3("parseClassMember", <Object> ["C"], "int get x() {}", [ParserErrorCode.GETTER_WITH_PARAMETERS]);
   }
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 6c7e93c..a11bf52 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -132,7 +132,7 @@
     futureElement.constructors = <ConstructorElement> [futureConstructor];
     //   Future then(onValue(T value), { Function onError });
     List<ParameterElement> parameters = <ParameterElement> [ElementFactory.requiredParameter2("value", futureElement.typeParameters[0].type)];
-    FunctionTypeAliasElementImpl aliasElement = new FunctionTypeAliasElementImpl(null);
+    FunctionTypeAliasElementImpl aliasElement = new FunctionTypeAliasElementImpl.forNode(null);
     aliasElement.synthetic = true;
     aliasElement.shareParameters(parameters);
     aliasElement.returnType = provider.dynamicType;
@@ -842,6 +842,19 @@
     verify([source]);
   }
 
+  void test_redirectingConstructor_paramTypeMismatch() {
+    Source source = addSource(EngineTestCase.createSource([
+        "class A {",
+        "  const A.a1(x) : this.a2(x);",
+        "  const A.a2(String x);",
+        "}",
+        "var v = const A.a1(0);"]));
+    resolve(source);
+    assertErrors(source, [
+        CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]);
+    verify([source]);
+  }
+
   void test_parameterAssignable_null() {
     // Null is assignable to anything.
     Source source = addSource(EngineTestCase.createSource([
@@ -1905,6 +1918,34 @@
     assertErrors(source, [ResolverErrorCode.CONTINUE_LABEL_ON_SWITCH]);
     verify([source]);
   }
+
+  void test_enclosingElement_invalidLocalFunction() {
+    Source source = addSource(EngineTestCase.createSource([
+        "class C {",
+        "  C() {",
+        "    int get x => 0;",
+        "  }",
+        "}"]));
+    LibraryElement library = resolve(source);
+    JUnitTestCase.assertNotNull(library);
+    var unit = library.definingCompilationUnit;
+    JUnitTestCase.assertNotNull(unit);
+    var types = unit.types;
+    JUnitTestCase.assertNotNull(types);
+    EngineTestCase.assertSizeOfList(1, types);
+    var type = types[0];
+    JUnitTestCase.assertNotNull(type);
+    var constructors = type.constructors;
+    JUnitTestCase.assertNotNull(constructors);
+    EngineTestCase.assertSizeOfList(1, constructors);
+    ConstructorElement constructor = constructors[0];
+    JUnitTestCase.assertNotNull(constructor);
+    List<FunctionElement> functions = constructor.functions;
+    JUnitTestCase.assertNotNull(functions);
+    EngineTestCase.assertSizeOfList(1, functions);
+    JUnitTestCase.assertEquals(constructor, functions[0].enclosingElement);
+    assertErrors(source, [ParserErrorCode.GETTER_IN_FUNCTION]);
+  }
 }
 
 class HintCodeTest extends ResolverTestCase {
@@ -6373,7 +6414,7 @@
     FunctionTypeAlias aliasNode = AstFactory.typeAlias(AstFactory.typeName4("A", []), "F", AstFactory.typeParameterList([]), AstFactory.formalParameterList([]));
     unit.declarations.add(aliasNode);
     SimpleIdentifier aliasName = aliasNode.name;
-    FunctionTypeAliasElement aliasElement = new FunctionTypeAliasElementImpl(aliasName);
+    FunctionTypeAliasElement aliasElement = new FunctionTypeAliasElementImpl.forNode(aliasName);
     aliasName.staticElement = aliasElement;
     (unit.element as CompilationUnitElementImpl).typeAliases = <FunctionTypeAliasElement> [aliasElement];
     return aliasNode;
@@ -8405,6 +8446,82 @@
   }
 }
 
+
+/**
+ * Like [StaticTypeAnalyzerTest], but as end-to-end tests.
+ */
+class StaticTypeAnalyzer2Test extends ResolverTestCase {
+  String testCode;
+  Source testSource;
+  CompilationUnit testUnit;
+
+  void test_MethodInvocation_nameType_localVariable() {
+    String code = r"""
+typedef Foo();
+main() {
+  Foo foo;
+  foo();
+}
+""";
+    _resolveTestUnit(code);
+    // "foo" should be resolved to the "Foo" type
+    SimpleIdentifier identifier = _findIdentifier("foo();");
+    DartType type = identifier.staticType;
+    _ut.expect(type, new _ut.isInstanceOf<FunctionType>());
+  }
+
+  void test_MethodInvocation_nameType_parameter_FunctionTypeAlias() {
+    String code = r"""
+typedef Foo();
+main(Foo foo) {
+  foo();
+}
+""";
+    _resolveTestUnit(code);
+    // "foo" should be resolved to the "Foo" type
+    SimpleIdentifier identifier = _findIdentifier("foo();");
+    DartType type = identifier.staticType;
+    _ut.expect(type, new _ut.isInstanceOf<FunctionType>());
+  }
+
+  void test_MethodInvocation_nameType_parameter_propagatedType() {
+    String code = r"""
+typedef Foo();
+main(p) {
+  if (p is Foo) {
+    p();
+  }
+}
+""";
+    _resolveTestUnit(code);
+    SimpleIdentifier identifier = _findIdentifier("p()");
+    _ut.expect(identifier.staticType, DynamicTypeImpl.instance);
+    {
+      FunctionType type = identifier.propagatedType;
+      _ut.expect(type, _ut.isNotNull);
+      _ut.expect(type.name, 'Foo');
+    }
+  }
+
+  SimpleIdentifier _findIdentifier(String search) {
+    SimpleIdentifier identifier = EngineTestCase.findNode(
+        testUnit,
+        testCode,
+        search,
+        (node) => node is SimpleIdentifier);
+    return identifier;
+  }
+
+  void _resolveTestUnit(String code) {
+    testCode = code;
+    testSource = addSource(testCode);
+    LibraryElement library = resolve(testSource);
+    assertNoErrors(testSource);
+    verify([testSource]);
+    testUnit = resolveCompilationUnit(testSource, library);
+  }
+}
+
 /**
  * Instances of the class `StaticTypeVerifier` verify that all of the nodes in an AST
  * structure that should have a static type associated with them do have a static type.
@@ -9357,6 +9474,7 @@
   }
 }
 
+
 class TypePropagationTest extends ResolverTestCase {
   void fail_mergePropagatedTypesAtJoinPoint_1() {
     // https://code.google.com/p/dart/issues/detail?id=19929
@@ -11032,6 +11150,7 @@
   runReflectiveTests(LibraryResolverTest);
   runReflectiveTests(LibraryTest);
   runReflectiveTests(StaticTypeAnalyzerTest);
+  runReflectiveTests(StaticTypeAnalyzer2Test);
   runReflectiveTests(SubtypeManagerTest);
   runReflectiveTests(TypeOverrideManagerTest);
   runReflectiveTests(TypeProviderImplTest);
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index 9a8ac18..cb249cb 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -18,7 +18,6 @@
 import 'package:analyzer/src/generated/java_junit.dart';
 import 'package:analyzer/src/generated/scanner.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:unittest/unittest.dart' as _ut;
 
 
 /**
diff --git a/pkg/analyzer/test/task/task_dart_test.dart b/pkg/analyzer/test/task/task_dart_test.dart
new file mode 100644
index 0000000..b9e86ec
--- /dev/null
+++ b/pkg/analyzer/test/task/task_dart_test.dart
@@ -0,0 +1,121 @@
+// 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.
+
+library test.engine.task.dart;
+
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/java_engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/task/task_dart.dart';
+import 'package:unittest/unittest.dart';
+
+import '../generated/engine_test.dart';
+import '../generated/resolver_test.dart';
+import '../generated/test_support.dart';
+import '../reflective_tests.dart';
+
+main() {
+  groupSep = ' | ';
+//  runReflectiveTests(BuildUnitElementTaskTest);
+}
+
+class BuildUnitElementTaskTest extends EngineTestCase {
+  void test_accept() {
+    BuildUnitElementTask task = new BuildUnitElementTask(null, null, null, null);
+    expect(task.accept(new BuildUnitElementTaskTV_accept()), isTrue);
+  }
+
+  void test_getException() {
+    BuildUnitElementTask task = new BuildUnitElementTask(null, null, null, null);
+    expect(task.exception, isNull);
+  }
+
+  void test_getLibrarySource() {
+    Source source = new TestSource('/part.dart');
+    Source library = new TestSource('/lib.dart');
+    BuildUnitElementTask task =
+        new BuildUnitElementTask(null, source, library, null);
+    expect(task.library, equals(library));
+  }
+
+  void test_getUnitSource() {
+    Source source = new TestSource('/part.dart');
+    Source library = new TestSource('/lib.dart');
+    BuildUnitElementTask task =
+        new BuildUnitElementTask(null, source, library, null);
+    expect(task.source, equals(source));
+  }
+
+  void test_perform_exception() {
+    TestSource source = new TestSource();
+    source.generateExceptionOnRead = true;
+    InternalAnalysisContext context = new AnalysisContextImpl();
+    context.sourceFactory = new SourceFactory([new FileUriResolver()]);
+    CompilationUnit unit = parseUnit(context, source, "");
+    BuildUnitElementTask task =
+        new BuildUnitElementTask(context, null, source, unit);
+    task.perform(new BuildUnitElementTaskTV_perform_exception());
+  }
+
+  void test_perform_valid() {
+    var content = EngineTestCase.createSource(["library lib;", "class A {}"]);
+    Source source = new TestSource('/test.dart', content);
+    InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
+    CompilationUnit unit = parseUnit(context, source, content);
+    BuildUnitElementTask task =
+        new BuildUnitElementTask(context, source, source, unit);
+    task.perform(new BuildUnitElementTaskTV_perform_valid(source, unit));
+  }
+
+  CompilationUnit parseUnit(InternalAnalysisContext context, Source source, String content) {
+    ScanDartTask scanTask = new ScanDartTask(
+        context,
+        source,
+        content);
+    scanTask.perform(new ScanDartTaskTestTV_accept());
+    ParseDartTask parseTask = new ParseDartTask(
+        context,
+        source,
+        scanTask.tokenStream,
+        scanTask.lineInfo);
+    parseTask.perform(new ParseDartTaskTestTV_accept());
+    return parseTask.compilationUnit;
+  }
+}
+
+class BuildUnitElementTaskTV_accept extends TestTaskVisitor<bool> {
+  @override
+  bool visitBuildUnitElementTask(BuildUnitElementTask task) => true;
+}
+
+class BuildUnitElementTaskTV_perform_exception extends TestTaskVisitor<bool> {
+  @override
+  bool visitBuildUnitElementTask(BuildUnitElementTask task) {
+    expect(task.exception, isNotNull);
+    return true;
+  }
+}
+
+class BuildUnitElementTaskTV_perform_valid extends TestTaskVisitor<bool> {
+  Source source;
+
+  CompilationUnit unit;
+
+  BuildUnitElementTaskTV_perform_valid(this.source, this.unit);
+
+  @override
+  bool visitBuildUnitElementTask(BuildUnitElementTask task) {
+    CaughtException exception = task.exception;
+    if (exception != null) {
+      throw exception;
+    }
+    expect(task.source, equals(source));
+    expect(task.library, equals(source));
+    expect(task.unit, equals(unit));
+    expect(task.unitElement, isNotNull);
+    return true;
+  }
+}
diff --git a/pkg/analyzer/test/task/test_all.dart b/pkg/analyzer/test/task/test_all.dart
new file mode 100644
index 0000000..9ecd162
--- /dev/null
+++ b/pkg/analyzer/test/task/test_all.dart
@@ -0,0 +1,17 @@
+// 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.
+
+library test.task;
+
+import 'package:unittest/unittest.dart';
+
+import 'task_dart_test.dart' as task_dart_test;
+
+/// Utility for manually running all tests.
+main() {
+  groupSep = ' | ';
+  group('generated tests', () {
+    task_dart_test.main();
+  });
+}
diff --git a/pkg/analyzer/test/test_all.dart b/pkg/analyzer/test/test_all.dart
index b1fceaf..5aa9922 100644
--- a/pkg/analyzer/test/test_all.dart
+++ b/pkg/analyzer/test/test_all.dart
@@ -13,6 +13,7 @@
 import 'options_test.dart' as options;
 import 'parse_compilation_unit_test.dart' as parse_compilation_unit;
 import 'source/test_all.dart' as source;
+import 'task/test_all.dart' as task;
 
 
 /// Utility for manually running all tests.
@@ -26,5 +27,6 @@
     options.main();
     parse_compilation_unit.main();
     source.main();
+    task.main();
   });
-}
\ No newline at end of file
+}
diff --git a/pkg/analyzer2dart/lib/src/cps_generator.dart b/pkg/analyzer2dart/lib/src/cps_generator.dart
index ca4b66f..7acf504 100644
--- a/pkg/analyzer2dart/lib/src/cps_generator.dart
+++ b/pkg/analyzer2dart/lib/src/cps_generator.dart
@@ -10,6 +10,8 @@
 import 'package:analyzer/src/generated/source.dart';

 import 'package:analyzer/src/generated/element.dart' as analyzer;

 

+import 'package:compiler/implementation/dart2jslib.dart'

+    show DART_CONSTANT_SYSTEM;

 import 'package:compiler/implementation/cps_ir/cps_ir_nodes.dart' as ir;

 import 'package:compiler/implementation/cps_ir/cps_ir_builder.dart';

 import 'package:compiler/implementation/universe/universe.dart';

@@ -17,46 +19,73 @@
 import 'semantic_visitor.dart';

 import 'element_converter.dart';

 import 'util.dart';

-import 'package:analyzer2dart/src/identifier_semantics.dart';

+import 'identifier_semantics.dart';

 

-class CpsGeneratingVisitor extends SemanticVisitor<ir.Node> {

+class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>

+    with IrBuilderMixin<AstNode> {

   final analyzer.Element element;

   final ElementConverter converter;

-  final IrBuilder irBuilder = new IrBuilder();

 

   CpsGeneratingVisitor(this.converter, this.element);

 

   Source get currentSource => element.source;

 

+  ir.Node visit(AstNode node) => node.accept(this);

+

   @override

   ir.FunctionDefinition visitFunctionDeclaration(FunctionDeclaration node) {

     analyzer.FunctionElement function = node.element;

-    function.parameters.forEach((analyzer.ParameterElement parameter) {

-      // TODO(johnniwinther): Support "closure variables", that is variables

-      // accessed from an inner function.

-      irBuilder.createParameter(converter.convertElement(parameter),

-                                isClosureVariable: false);

+    dart2js.FunctionElement element = converter.convertElement(function);

+    return withBuilder(

+        new IrBuilder(DART_CONSTANT_SYSTEM,

+                      element,

+                      // TODO(johnniwinther): Supported closure variables.

+                      const <dart2js.Local>[]),

+        () {

+      function.parameters.forEach((analyzer.ParameterElement parameter) {

+        // TODO(johnniwinther): Support "closure variables", that is variables

+        // accessed from an inner function.

+        irBuilder.createParameter(converter.convertElement(parameter),

+                                  isClosureVariable: false);

+      });

+      // Visit the body directly to avoid processing the signature as

+      // expressions.

+      visit(node.functionExpression.body);

+      return irBuilder.buildFunctionDefinition(element, const []);

     });

-    // Visit the body directly to avoid processing the signature as expressions.

-    node.functionExpression.body.accept(this);

-    return irBuilder.buildFunctionDefinition(

-        converter.convertElement(function), const [], const []);

   }

 

-  @override

-  visitStaticMethodInvocation(MethodInvocation node,

-                              AccessSemantics semantics) {

-    analyzer.Element staticElement = semantics.element;

-    dart2js.Element element = converter.convertElement(staticElement);

+  List<ir.Definition> visitArguments(ArgumentList argumentList) {

     List<ir.Definition> arguments = <ir.Definition>[];

-    for (Expression argument in node.argumentList.arguments) {

-      ir.Definition value = argument.accept(this);

+    for (Expression argument in argumentList.arguments) {

+      ir.Definition value = build(argument);

       if (value == null) {

         giveUp(argument,

             'Unsupported argument: $argument (${argument.runtimeType}).');

       }

       arguments.add(value);

     }

+    return arguments;

+  }

+

+  @override

+  ir.Primitive visitDynamicInvocation(MethodInvocation node,

+                                      AccessSemantics semantics) {

+    // TODO(johnniwinther): Handle implicit `this`.

+    ir.Primitive receiver = build(semantics.target);

+    List<ir.Definition> arguments = visitArguments(node.argumentList);

+    return irBuilder.buildDynamicInvocation(

+        receiver,

+        createSelectorFromMethodInvocation(node, node.methodName.name),

+        arguments);

+  }

+

+  @override

+  ir.Primitive visitStaticMethodInvocation(MethodInvocation node,

+                                           AccessSemantics semantics) {

+    analyzer.Element staticElement = semantics.element;

+    dart2js.Element element = converter.convertElement(staticElement);

+    List<ir.Definition> arguments = visitArguments(node.argumentList);

     return irBuilder.buildStaticInvocation(

         element,

         createSelectorFromMethodInvocation(node, node.methodName.name),

@@ -104,11 +133,7 @@
 

   @override

   visitReturnStatement(ReturnStatement node) {

-    if (node.expression != null) {

-      irBuilder.buildReturn(node.expression.accept(this));

-    } else {

-      irBuilder.buildReturn();

-    }

+    irBuilder.buildReturn(build(node.expression));

   }

 

   @override

@@ -121,11 +146,29 @@
     return handleLocalAccess(node, semantics);

   }

 

+  @override

+  visitVariableDeclaration(VariableDeclaration node) {

+    // TODO(johnniwinther): Handle constant local variables.

+    ir.Node initialValue = build(node.initializer);

+    irBuilder.declareLocalVariable(

+        converter.convertElement(node.element),

+        initialValue: initialValue);

+  }

+

   ir.Primitive handleLocalAccess(AstNode node, AccessSemantics semantics) {

     analyzer.Element element = semantics.element;

     dart2js.Element target = converter.convertElement(element);

     assert(invariant(node, target.isLocal, '$target expected to be local.'));

-    return irBuilder.buildGetLocal(target);

+    return irBuilder.buildLocalGet(target);

+  }

+

+  @override

+  ir.Node visitDynamicAccess(AstNode node, AccessSemantics semantics) {

+    // TODO(johnniwinther): Handle implicit `this`.

+    ir.Primitive receiver = build(semantics.target);

+    return irBuilder.buildDynamicGet(receiver,

+        new Selector.getter(semantics.identifier.name,

+                            converter.convertElement(element.library)));

   }

 

   @override

@@ -135,8 +178,56 @@
     // TODO(johnniwinther): Selector information should be computed in the

     // [TreeShaker] and shared with the [CpsGeneratingVisitor].

     assert(invariant(node, target.isTopLevel || target.isStatic,

-        '$target expected to be top-level or static.'));

-    return irBuilder.buildGetStatic(target,

+                     '$target expected to be top-level or static.'));

+    return irBuilder.buildStaticGet(target,

         new Selector.getter(target.name, target.library));

   }

+

+  ir.Primitive handleBinaryExpression(BinaryExpression node,

+                                      String op) {

+    ir.Primitive left = build(node.leftOperand);

+    ir.Primitive right = build(node.rightOperand);

+    Selector selector = new Selector.binaryOperator(op);

+    return irBuilder.buildDynamicInvocation(

+        left, selector, <ir.Definition>[right]);

+  }

+

+  ir.Node handleLazyOperator(BinaryExpression node, {bool isLazyOr: false}) {

+    return irBuilder.buildLogicalOperator(

+        build(node.leftOperand),

+        subbuild(node.rightOperand),

+        isLazyOr: isLazyOr);

+  }

+

+  @override

+  ir.Node visitBinaryExpression(BinaryExpression node) {

+    // TODO(johnniwinther,paulberry,brianwilkerson): The operator should be

+    // available through an enum.

+    String op = node.operator.lexeme;

+    switch (op) {

+    case '||':

+    case '&&':

+      return handleLazyOperator(node, isLazyOr: op == '||');

+    case '!=':

+      return irBuilder.buildNegation(handleBinaryExpression(node, '=='));

+    default:

+      return handleBinaryExpression(node, op);

+    }

+  }

+

+  @override

+  ir.Node visitConditionalExpression(ConditionalExpression node) {

+    return irBuilder.buildConditional(

+        build(node.condition),

+        subbuild(node.thenExpression),

+        subbuild(node.elseExpression));

+  }

+

+  @override

+  visitIfStatement(IfStatement node) {

+    irBuilder.buildIf(

+        build(node.condition),

+        subbuild(node.thenStatement),

+        subbuild(node.elseStatement));

+  }

 }

diff --git a/pkg/analyzer2dart/lib/src/element_converter.dart b/pkg/analyzer2dart/lib/src/element_converter.dart
index bc46c44..6148b59 100644
--- a/pkg/analyzer2dart/lib/src/element_converter.dart
+++ b/pkg/analyzer2dart/lib/src/element_converter.dart
@@ -147,4 +147,10 @@
     }
     return null;
   }
+
+  @override
+  dart2js.Element visitLocalVariableElement(
+      analyzer.LocalVariableElement input) {
+    return new LocalVariableElementY(converter, input);
+  }
 }
diff --git a/pkg/analyzer2dart/lib/src/modely.dart b/pkg/analyzer2dart/lib/src/modely.dart
index 46c1b31..ea65b24 100644
--- a/pkg/analyzer2dart/lib/src/modely.dart
+++ b/pkg/analyzer2dart/lib/src/modely.dart
@@ -634,8 +634,20 @@
   get functionSignature => unsupported('functionSignature');

 }

 

+abstract class VariableElementMixin

+    implements ElementY, dart2js.VariableElement {

+  @override

+  get initializer => unsupported('initializer');

+

+  @override

+  get memberContext => unsupported('memberContext');

+}

+

 class TopLevelVariableElementY extends ElementY

-    with AnalyzableElementY, AstElementY, TopLevelElementMixin

+    with AnalyzableElementY,

+         AstElementY,

+         TopLevelElementMixin,

+         VariableElementMixin

     implements dart2js.FieldElement {

 

   analyzer.TopLevelVariableElement get element => super.element;

@@ -650,11 +662,30 @@
       : super(converter, element);

 

   @override

-  get initializer => unsupported('initializer');

-

-  @override

-  get memberContext => unsupported('memberContext');

-

-  @override

   get nestedClosures => unsupported('nestedClosures');

+}

+

+class LocalVariableElementY extends ElementY

+    with AnalyzableElementY, AstElementY, VariableElementMixin

+    implements dart2js.LocalVariableElement {

+

+  analyzer.LocalVariableElement get element => super.element;

+

+  dart2js.ElementKind get kind => dart2js.ElementKind.VARIABLE;

+

+  @override

+  bool get isLocal => true;

+

+  @override

+  bool get isConst => element.isConst;

+

+  LocalVariableElementY(ElementConverter converter,

+                        analyzer.LocalVariableElement element)

+      : super(converter, element);

+

+  @override

+  get executableContext => unsupported('executableContext');

+

+  @override

+  dart2js.DartType get type => unsupported('type');

 }
\ No newline at end of file
diff --git a/pkg/analyzer2dart/lib/src/semantic_visitor.dart b/pkg/analyzer2dart/lib/src/semantic_visitor.dart
index 80edf47..b0b955c 100644
--- a/pkg/analyzer2dart/lib/src/semantic_visitor.dart
+++ b/pkg/analyzer2dart/lib/src/semantic_visitor.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/src/generated/source.dart';

 

 import 'util.dart';

-import 'package:analyzer2dart/src/identifier_semantics.dart';

+import 'identifier_semantics.dart';

 

 /// An AST visitor which uses the [AccessSemantics] of invocations and accesses

 /// to fine-grain visitor methods.

@@ -31,7 +31,7 @@
     }

     if (!condition) {

       reportMessage(node, message);

-      throw new AssertionError();

+      return false;

     }

     return true;

   }

diff --git a/pkg/analyzer2dart/lib/src/tree_shaker.dart b/pkg/analyzer2dart/lib/src/tree_shaker.dart
index 899751c..ba24c4c 100644
--- a/pkg/analyzer2dart/lib/src/tree_shaker.dart
+++ b/pkg/analyzer2dart/lib/src/tree_shaker.dart
@@ -14,7 +14,7 @@
 import 'closed_world.dart';
 import 'util.dart';
 import 'semantic_visitor.dart';
-import 'package:analyzer2dart/src/identifier_semantics.dart';
+import 'identifier_semantics.dart';
 
 /**
  * The result of performing local reachability analysis on a method.
@@ -137,6 +137,20 @@
           }
         }
       }
+    } else if (selector.kind == SelectorKind.SETTER) {
+      // accessor.name uses the convention that setter names end in '='.
+      String selectorNameWithEquals = '${selector.name}=';
+      for (PropertyAccessorElement accessor in classElement.accessors) {
+        if (accessor.isSetter && selectorNameWithEquals == accessor.name) {
+          if (accessor.isSynthetic) {
+            // This accessor is implied by the corresponding field declaration.
+            // TODO(paulberry): should we distinguish reads and writes?
+            fields.add(accessor.variable);
+          } else {
+            accessors.add(accessor);
+          }
+        }
+      }
     }
   }
 }
@@ -294,8 +308,10 @@
           new Selector.getter(semantics.identifier.name, null));
     }
     if (semantics.isWrite) {
-      // TODO(paulberry): implement.
-      return giveUp(node, '_handlePropertyAccess of ${semantics}.');
+      // Selector.setter constructor uses the convention that setter names
+      // don't end in '='.
+      analysis.invokes.add(
+          new Selector.setter(semantics.identifier.name, null));
     }
   }
 
diff --git a/pkg/analyzer2dart/test/end2end_test.dart b/pkg/analyzer2dart/test/end2end_test.dart
index 52055e4..8bdbfff 100644
--- a/pkg/analyzer2dart/test/end2end_test.dart
+++ b/pkg/analyzer2dart/test/end2end_test.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:compiler/implementation/dart_backend/backend_ast_to_frontend_ast.dart';
 import 'package:unittest/unittest.dart';
 
 import '../lib/src/closed_world.dart';
@@ -176,6 +175,328 @@
 }
 ''');
   });
+
+  test('Local variables', () {
+    checkResult('''
+main() {
+  var a;
+  return a;
+}
+''', '''
+main() {}
+''');
+
+    checkResult('''
+main() {
+  var a = 0;
+  return a;
+}
+''', '''
+main() {
+  return 0;
+}
+''');
+  });
+
+  test('Dynamic access', () {
+    checkResult('''
+main(a) {
+  return a.foo;
+}
+''', '''
+main(a) {
+  return a.foo;
+}
+''');
+
+    checkResult('''
+main() {
+  var a = "";
+  return a.foo;
+}
+''', '''
+main() {
+  return "".foo;
+}
+''');
+  });
+
+  test('Dynamic invocation', () {
+    checkResult('''
+main(a) {
+  return a.foo(0);
+}
+''', '''
+main(a) {
+  return a.foo(0);
+}
+''');
+
+    checkResult('''
+main() {
+  var a = "";
+  return a.foo(0, 1);
+}
+''', '''
+main() {
+  return "".foo(0, 1);
+}
+''');
+  });
+
+  test('Binary expressions', () {
+    checkResult('''
+main(a) {
+  return a + deprecated;
+}
+''', '''
+main(a) {
+  return a + deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a - deprecated;
+}
+''', '''
+main(a) {
+  return a - deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a * deprecated;
+}
+''', '''
+main(a) {
+  return a * deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a / deprecated;
+}
+''', '''
+main(a) {
+  return a / deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a ~/ deprecated;
+}
+''', '''
+main(a) {
+  return a ~/ deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a % deprecated;
+}
+''', '''
+main(a) {
+  return a % deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a < deprecated;
+}
+''', '''
+main(a) {
+  return a < deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a <= deprecated;
+}
+''', '''
+main(a) {
+  return a <= deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a > deprecated;
+}
+''', '''
+main(a) {
+  return a > deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a >= deprecated;
+}
+''', '''
+main(a) {
+  return a >= deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a << deprecated;
+}
+''', '''
+main(a) {
+  return a << deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a >> deprecated;
+}
+''', '''
+main(a) {
+  return a >> deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a & deprecated;
+}
+''', '''
+main(a) {
+  return a & deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a | deprecated;
+}
+''', '''
+main(a) {
+  return a | deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a ^ deprecated;
+}
+''', '''
+main(a) {
+  return a ^ deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a == deprecated;
+}
+''', '''
+main(a) {
+  return a == deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a != deprecated;
+}
+''', '''
+main(a) {
+  return !(a == deprecated);
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a || deprecated;
+}
+''', '''
+main(a) {
+  return a || deprecated;
+}
+''');
+
+    checkResult('''
+main(a) {
+  return a && deprecated;
+}
+''', '''
+main(a) {
+  return a && deprecated;
+}
+''');
+  });
+
+  test('If statement', () {
+    checkResult('''
+main(a) {
+  if (a) {
+    print(0);
+  }
+}
+''', '''
+main(a) {
+  if (a) {
+    print(0);
+  }
+}
+''');
+
+    checkResult('''
+main(a) {
+  if (a) {
+    print(0);
+  } else {
+    print(1);
+  }
+}
+''', '''
+main(a) {
+  a ? print(0) : print(1);
+}
+''');
+
+    checkResult('''
+main(a) {
+  if (a) {
+    print(0);
+  } else {
+    print(1);
+    print(2);
+  }
+}
+''', '''
+main(a) {
+  if (a) {
+    print(0);
+  } else {
+    print(1);
+    print(2);
+  }
+}
+''');
+  });
+
+  test('If statement', () {
+    checkResult('''
+main(a) {
+  return a ? print(0) : print(1);
+}
+''', '''
+main(a) {
+  return a ? print(0) : print(1);
+}
+''');
+  });
 }
 
 checkResult(String input, [String expectedOutput]) {
diff --git a/pkg/analyzer2dart/test/tree_shaker_test.dart b/pkg/analyzer2dart/test/tree_shaker_test.dart
index c094f09..2e0bb3c 100644
--- a/pkg/analyzer2dart/test/tree_shaker_test.dart
+++ b/pkg/analyzer2dart/test/tree_shaker_test.dart
@@ -27,7 +27,7 @@
     helper.assertHasFunction('foo');
   });
 
-  test('Toplevel field access', () {
+  test('Toplevel field read', () {
     var helper = new TreeShakerTestHelper('''
 main() {
   return foo;
@@ -40,6 +40,19 @@
     helper.assertNoVariable('bar');
   });
 
+  test('Toplevel field write', () {
+    var helper = new TreeShakerTestHelper('''
+main() {
+  foo = 1;
+}
+var foo;
+var bar;
+''');
+    helper.assertHasFunction('main');
+    helper.assertHasVariable('foo');
+    helper.assertNoVariable('bar');
+  });
+
   test('Toplevel field invocation', () {
     var helper = new TreeShakerTestHelper('''
 main() {
@@ -145,10 +158,14 @@
 class A {
   get g1 => null;
   get g2 => null;
+  set g1(x) {}
+  set g2(x) {}
 }
 class B {
   get g1 => null;
   get g2 => null;
+  set g1(x) {}
+  set g2(x) {}
 }
 main() {
   new A().g1;
@@ -158,9 +175,41 @@
     helper.assertNoGetter('A.g2');
     helper.assertNoGetter('B.g1');
     helper.assertNoGetter('B.g2');
+    helper.assertNoSetter('A.g1');
+    helper.assertNoSetter('A.g2');
+    helper.assertNoSetter('B.g1');
+    helper.assertNoSetter('B.g2');
   });
 
-  test('Field access', () {
+  test('Setter usage', () {
+    var helper = new TreeShakerTestHelper('''
+class A {
+  get g1 => null;
+  get g2 => null;
+  set g1(x) {}
+  set g2(x) {}
+}
+class B {
+  get g1 => null;
+  get g2 => null;
+  set g1(x) {}
+  set g2(x) {}
+}
+main() {
+  new A().g1 = 1;
+}
+''');
+    helper.assertHasSetter('A.g1');
+    helper.assertNoSetter('A.g2');
+    helper.assertNoSetter('B.g1');
+    helper.assertNoSetter('B.g2');
+    helper.assertNoGetter('A.g1');
+    helper.assertNoGetter('A.g2');
+    helper.assertNoGetter('B.g1');
+    helper.assertNoGetter('B.g2');
+  });
+
+  test('Field read', () {
     var helper = new TreeShakerTestHelper('''
 class A {
   var f1;
@@ -180,6 +229,26 @@
     helper.assertNoField('B.f2');
   });
 
+  test('Field write', () {
+    var helper = new TreeShakerTestHelper('''
+class A {
+  var f1;
+  var f2;
+}
+class B {
+  var f1;
+  var f2;
+}
+main() {
+  new A().f1 = 1;
+}
+''');
+    helper.assertHasField('A.f1');
+    helper.assertNoField('A.f2');
+    helper.assertNoField('B.f1');
+    helper.assertNoField('B.f2');
+  });
+
   test('Ordinary constructor with initializer list', () {
     var helper = new TreeShakerTestHelper('''
 class A {
@@ -276,6 +345,11 @@
   Map<String, MethodDeclaration> getters = <String, MethodDeclaration>{};
 
   /**
+   * Setters contained in [world], indexed by className.propertyName.
+   */
+  Map<String, MethodDeclaration> setters = <String, MethodDeclaration>{};
+
+  /**
    * Fields contained in [world], indexed by className.fieldName.
    */
   Map<String, VariableDeclaration> fields = <String, VariableDeclaration>{};
@@ -322,9 +396,11 @@
         if (declaration.isGetter) {
           getters['${element.enclosingElement.name}.${element.name}'] =
               declaration;
+        } else if (declaration.isSetter) {
+          setters['${element.enclosingElement.name}.${element.displayName}'] =
+              declaration;
         } else {
-          // TODO(paulberry): handle setters.
-          throw new UnimplementedError();
+          fail('Unexpected property accessor (neither getter nor setter)');
         }
       }
     });
@@ -377,6 +453,13 @@
   }
 
   /**
+   * Asserts that [world] contains a setter with the given qualified name.
+   */
+  void assertHasSetter(String qualifiedName) {
+    expect(setters, contains(qualifiedName));
+  }
+
+  /**
    * Asserts that [world] instantiates a class with the given name.
    */
   void assertHasInstantiatedClass(String name) {
@@ -425,6 +508,14 @@
   }
 
   /**
+   * Asserts that [world] doesn't contain a setter with the given qualified
+   * name.
+   */
+  void assertNoSetter(String qualifiedName) {
+    expect(setters, isNot(contains(qualifiedName)));
+  }
+
+  /**
    * Asserts that [world] doesn't instantiate a class with the given name.
    */
   void assertNoInstantiatedClass(String name) {
diff --git a/pkg/dart2js_incremental/lib/caching_compiler.dart b/pkg/dart2js_incremental/lib/caching_compiler.dart
index 38edf97..e239cb0 100644
--- a/pkg/dart2js_incremental/lib/caching_compiler.dart
+++ b/pkg/dart2js_incremental/lib/caching_compiler.dart
@@ -135,9 +135,11 @@
         ..recordedMangledNames.clear()
         ..additionalProperties.clear()
         ..clearCspPrecompiledNodes()
-        ..hasMakeConstantList = false
         ..elementDescriptors.clear();
 
+    backend.emitter
+        ..outputContainsConstantList = false;
+
     backend
         ..preMirrorsMethodCount = 0;
 
diff --git a/pkg/dart2js_incremental/lib/diff.dart b/pkg/dart2js_incremental/lib/diff.dart
index e3fad3a..0cb659b 100644
--- a/pkg/dart2js_incremental/lib/diff.dart
+++ b/pkg/dart2js_incremental/lib/diff.dart
@@ -31,9 +31,16 @@
 class Difference {
   final DeclarationSite before;
   final DeclarationSite after;
+
+  /// Records the position of first difference between [before] and [after]. If
+  /// either [before] or [after] are null, [token] is null.
   Token token;
 
-  Difference(this.before, this.after);
+  Difference(this.before, this.after) {
+    if (before == after) {
+      throw '[before] and [after] are the same.';
+    }
+  }
 
   String toString() {
     if (before == null) return 'Added($after)';
@@ -48,8 +55,10 @@
   Map<String, DeclarationSite> beforeMap = <String, DeclarationSite>{};
   before.forEachLocalMember((modelx.ElementX element) {
     DeclarationSite site = element.declarationSite;
-    assert(site != null);
-    beforeMap[element.name] = site;
+    assert(site != null || element.isSynthesized);
+    if (!element.isSynthesized) {
+      beforeMap[element.name] = site;
+    }
   });
   List<Difference> modifications = <Difference>[];
   List<Difference> potentiallyChanged = <Difference>[];
diff --git a/pkg/dart2js_incremental/lib/library_updater.dart b/pkg/dart2js_incremental/lib/library_updater.dart
index d3eb2e8..04d1ba3 100644
--- a/pkg/dart2js_incremental/lib/library_updater.dart
+++ b/pkg/dart2js_incremental/lib/library_updater.dart
@@ -19,10 +19,12 @@
 import 'package:compiler/implementation/elements/elements.dart' show
     Element,
     FunctionElement,
-    LibraryElement;
+    LibraryElement,
+    ScopeContainerElement;
 
 import 'package:compiler/implementation/scanner/scannerlib.dart' show
     EOF_TOKEN,
+    PartialClassElement,
     PartialElement,
     PartialFunctionElement,
     Token;
@@ -31,7 +33,9 @@
     StringSourceFile;
 
 import 'package:compiler/implementation/tree/tree.dart' show
-    FunctionExpression;
+    ClassNode,
+    FunctionExpression,
+    NodeList;
 
 import 'package:compiler/implementation/js/js.dart' show
     js;
@@ -54,6 +58,11 @@
 
 typedef void Logger(message);
 
+typedef bool Reuser(
+    Token diffToken,
+    PartialElement before,
+    PartialElement after);
+
 // TODO(ahe): Generalize this class. For now only works for Compiler.mainApp,
 // and only if that library has exactly one compilation unit.
 class LibraryUpdater {
@@ -73,6 +82,8 @@
   // [compiler]'s state correctly reflects the updated program.
   bool hasPendingUpdates = false;
 
+  bool onlySimpleUpdates = true;
+
   final List<Update> updates = <Update>[];
 
   LibraryUpdater(
@@ -126,35 +137,50 @@
     LibraryElement newLibrary = dartPrivacyIsBroken.createLibrarySync(
         null, sourceScript, uri);
     logTime('New library synthesized.');
-    List<Difference> differences = computeDifference(library, newLibrary);
+    return canReuseScopeContainerElement(library, newLibrary);
+  }
+
+  bool canReuseScopeContainerElement(
+      ScopeContainerElement element,
+      ScopeContainerElement newElement) {
+    List<Difference> differences = computeDifference(element, newElement);
     logTime('Differences computed.');
     for (Difference difference in differences) {
       logTime('Looking at difference: $difference');
       if (difference.before == null || difference.after == null) {
         logVerbose('Scope changed in $difference');
         // Scope changed, don't reuse library.
+        onlySimpleUpdates = false;
         return false;
       }
       Token diffToken = difference.token;
       if (diffToken == null) {
         logVerbose('No token stored in difference.');
+        onlySimpleUpdates = false;
         return false;
       }
       if (difference.after is! PartialElement &&
           difference.before is! PartialElement) {
         logVerbose('Not a PartialElement: $difference');
         // Don't know how to recompile element.
+        onlySimpleUpdates = false;
         return false;
       }
       PartialElement before = difference.before;
       PartialElement after = difference.after;
 
+      Reuser reuser;
+
       if (before is PartialFunctionElement && after is PartialFunctionElement) {
-        if (!canReuseFunction(diffToken, before, after)) {
-          return false;
-        }
+        reuser = canReuseFunction;
+      } else if (before is PartialClassElement &&
+                 after is PartialClassElement) {
+        reuser = canReuseClass;
       } else {
-        // Unhandled kind of element.
+        reuser = cannotReuse;
+      }
+      if (!reuser(diffToken, before, after)) {
+        onlySimpleUpdates = false;
         return false;
       }
     }
@@ -174,27 +200,69 @@
     FunctionExpression node =
         after.parseNode(compiler).asFunctionExpression();
     if (node == null) {
-      print('Not a function expression.');
+      logVerbose('Not a function expression.');
       return false;
     }
     Token last = after.endToken;
     if (node.body != null) {
       last = node.body.getBeginToken();
     }
-    Token token = after.beginToken;
-    while (token != last && token.kind != EOF_TOKEN) {
-      if (token == diffToken) {
-        logVerbose('Signature changed');
-        return false;
-      }
-      token = token.next;
+    if (isTokenBetween(diffToken, after.beginToken, last)) {
+      logVerbose('Signature changed.');
+      return false;
     }
-    print('Simple modification of ${after} detected');
+    logVerbose('Simple modification of ${after} detected');
     updates.add(new FunctionUpdate(compiler, before, after));
     return true;
   }
 
+  bool canReuseClass(
+      Token diffToken,
+      PartialClassElement before,
+      PartialClassElement after) {
+    ClassNode node = after.parseNode(compiler).asClassNode();
+    if (node == null) {
+      logVerbose('Not a ClassNode.');
+      return false;
+    }
+    NodeList body = node.body;
+    if (body == null) {
+      logVerbose('Class has no body.');
+      return false;
+    }
+    if (isTokenBetween(diffToken, node.beginToken, body.beginToken)) {
+      logVerbose('Class header changed.');
+      return false;
+    }
+    logVerbose('Simple modification of ${after} detected');
+    return canReuseScopeContainerElement(before, after);
+  }
+
+  bool isTokenBetween(Token token, Token first, Token last) {
+    Token current = first;
+    while (current != last && current.kind != EOF_TOKEN) {
+      if (current == token) {
+        return true;
+      }
+      current = current.next;
+    }
+    return false;
+  }
+
+  bool cannotReuse(
+      Token diffToken,
+      PartialElement before,
+      PartialElement after) {
+    logVerbose(
+        'Unhandled change:'
+        ' ${before} (${before.runtimeType} -> ${after.runtimeType}).');
+    return false;
+  }
+
   List<Element> applyUpdates() {
+    if (!onlySimpleUpdates) {
+      throw new StateError("Can't compute update.");
+    }
     return updates.map((Update update) => update.apply()).toList();
   }
 
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 13b1e2b..9413140 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -19,6 +19,7 @@
 scheduled_test/test/scheduled_process_test: Pass, Slow # Issue 9231
 scheduled_test/test/scheduled_stream/stream_matcher_test: Pass, Slow
 polymer/test/build/script_compactor_test: Pass, Slow
+analysis_server/test/integration/asynchrony_test: Skip # Issue 21252
 
 [ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 third_party/angular_tests/browser_test/*: Skip # github perf_api.dart issue 5
@@ -107,11 +108,13 @@
 typed_data/test/typed_buffers_test/01: Fail # Not supporting Int64List, Uint64List.
 analyzer/test/generated/engine_test: Skip # Slow
 analyzer/test/generated/static_type_warning_code_test: Pass, Slow
+analyzer/test/generated/compile_time_error_code_test: Pass, Slow
 
 analyzer/test/enum_test: Fail # Issue 21323
 
 analysis_server/test/search/element_references_test: Pass, Slow
 analysis_server/test/services/index/store/codec_test: Pass, Slow
+analysis_server/test/edit/assists_test: Pass, Slow
 
 # Analysis server integration tests don't make sense to run under
 # dart2js, since the code under test always runs in the Dart vm as a
diff --git a/pkg/polymer/CHANGELOG.md b/pkg/polymer/CHANGELOG.md
index a1fb432..747d319 100644
--- a/pkg/polymer/CHANGELOG.md
+++ b/pkg/polymer/CHANGELOG.md
@@ -1,4 +1,11 @@
-#### 0.15.1-dev
+#### 0.15.1+2
+  * Handle and warn about cases where a script file is included twice from the
+    same entrypoint [21332](http://dartbug.com/21332).
+
+#### 0.15.1+1
+  * Fix typo in error message polymer#42
+
+#### 0.15.1
   * Upgraded to polymer [0.4.2][]
   * No need to include dart_support.js in your entrypoints anymore.
 
diff --git a/pkg/polymer/lib/src/build/generated/messages.html b/pkg/polymer/lib/src/build/generated/messages.html
index 7f32493..04c43b0 100644
--- a/pkg/polymer/lib/src/build/generated/messages.html
+++ b/pkg/polymer/lib/src/build/generated/messages.html
@@ -491,10 +491,39 @@
 To do this, use the following pattern to update your pubspec.yaml:</p>
 <pre><code>transformers:
 - polymer:
-  inline_stylesheets:
-    web/my_file.css: false
+    inline_stylesheets:
+      web/my_file.css: false
 </code></pre>
 <p>If you would like to hide this warning and keep it inlined, do the same thing
 but assign the value to true.</p>
+</div><hr />
+
+<div id="polymer_43"><h3>"dart_support.js" not necessary <a href="#polymer_43">#43</a></h3>
+<p>The script <code>packages/web_components/dart_support.js</code> is still used, but you no
+longer need to put it in your application's entrypoint.</p>
+<p>In the past this file served two purposes:</p><ul><li>to make dart2js work well with the platform polyfills, and</li><li>to support registering Dart APIs for JavaScript custom elements.</li></ul>
+<p>Now, the code from <code>dart_support.js</code> is split in two halves. The half for
+dart2js is now injected by the polymer transformers automatically during <code>pub
+build</code>. The <code>web_components</code> package provides an HTML file containing the other
+half.  Developers of packages that wrap JavaScript custom elements (like
+<code>core_elements</code> and <code>paper_elements</code>) will import that file directly, so
+application developers don't have to worry about it anymore.</p>
+</div><hr />
+
+<div id="polymer_44"><h3>A dart script file was included more than once. <a href="#polymer_44">#44</a></h3>
+<p>Duplicate dart scripts often happen if you have multiple html imports that
+include the same script. The simplest workaround for this is to move your dart
+script to its own html file, and import that instead of the script (html imports
+are automatically deduped).</p>
+<p>For example:</p>
+<pre><code>&lt;script type="application/dart" src="foo.dart"&gt;&lt;/script&gt;
+</code></pre>
+<p>Should turn into:</p>
+<pre><code>&lt;link rel="import" href="foo.html"&gt;
+</code></pre>
+<p>And <code>foo.html</code> should look like:</p>
+<pre><code>&lt;!DOCTYPE html&gt;
+&lt;script type="application/dart" src="foo.dart"&gt;&lt;/script&gt;
+</code></pre>
 </div><hr /></body>
 </html>
diff --git a/pkg/polymer/lib/src/build/import_inliner.dart b/pkg/polymer/lib/src/build/import_inliner.dart
index cf3b7d9..ed7929b 100644
--- a/pkg/polymer/lib/src/build/import_inliner.dart
+++ b/pkg/polymer/lib/src/build/import_inliner.dart
@@ -7,6 +7,7 @@
 
 import 'dart:async';
 import 'dart:convert';
+import 'dart:collection' show LinkedHashSet;
 
 import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/src/generated/ast.dart';
@@ -30,7 +31,7 @@
   final BuildLogger logger;
   final AssetId docId;
   final seen = new Set<AssetId>();
-  final scriptIds = <AssetId>[];
+  final scriptIds = new LinkedHashSet<AssetId>();
   final inlinedStylesheetIds = new Set<AssetId>();
   final extractedFiles = new Set<AssetId>();
   bool experimentalBootstrap = false;
@@ -94,7 +95,7 @@
           docId.addExtension('._data'),
           JSON.encode({
             'experimental_bootstrap': experimentalBootstrap,
-            'script_ids': scriptIds,
+            'script_ids': scriptIds.toList(),
           }, toEncodable: (id) => id.serialize())));
 
       // Write out the logs collected by our [BuildLogger].
@@ -241,6 +242,13 @@
         var src = script.attributes['src'];
         var srcId = uriToAssetId(docId, src, logger, script.sourceSpan);
 
+        // No duplicates allowed!
+        if (scriptIds.contains(srcId)) {
+          logger.warning(SCRIPT_INCLUDED_MORE_THAN_ONCE.create({'url': src}),
+              span: script.sourceSpan);
+          return true;
+        }
+
         // We check for extractedFiles because 'hasInput' below is only true for
         // assets that existed before this transformer runs (hasInput is false
         // for files created by [_extractScripts]).
diff --git a/pkg/polymer/lib/src/build/messages.dart b/pkg/polymer/lib/src/build/messages.dart
index c4cc934..86335fd 100644
--- a/pkg/polymer/lib/src/build/messages.dart
+++ b/pkg/polymer/lib/src/build/messages.dart
@@ -551,8 +551,8 @@
 
     transformers:
     - polymer:
-      inline_stylesheets:
-        web/my_file.css: false
+        inline_stylesheets:
+          web/my_file.css: false
 
 If you would like to hide this warning and keep it inlined, do the same thing
 but assign the value to true.
@@ -580,3 +580,26 @@
 application developers don't have to worry about it anymore.
 '''
 );
+
+const SCRIPT_INCLUDED_MORE_THAN_ONCE = const MessageTemplate(
+    const MessageId('polymer', 44),
+    'The `%-url-%` script was included more than once.',
+    'Dart script file included more than once.',
+    '''
+Duplicate dart scripts often happen if you have multiple html imports that
+include the same script. The simplest workaround for this is to move your dart
+script to its own html file, and import that instead of the script (html imports
+are automatically deduped).
+
+For example:
+
+    <script type="application/dart" src="foo.dart"></script>
+
+Should turn into:
+
+    <link rel="import" href="foo.html">
+
+And `foo.html` should look like:
+
+    <script type="application/dart" src="foo.dart"></script>
+''');
diff --git a/pkg/polymer/lib/src/mirror_loader.dart b/pkg/polymer/lib/src/mirror_loader.dart
index c0cea5c..cd5bc8f 100644
--- a/pkg/polymer/lib/src/mirror_loader.dart
+++ b/pkg/polymer/lib/src/mirror_loader.dart
@@ -65,22 +65,29 @@
 /// called after all HTML imports are resolved. Polymer ensures this by asking
 /// users to put their Dart script tags after all HTML imports (this is checked
 /// by the linter, and Dartium will otherwise show an error message).
-List<_ScriptInfo> _discoverScripts(Document doc, String baseUri, [_State state]) {
+Iterable<_ScriptInfo> _discoverScripts(
+    Document doc, String baseUri, [_State state]) {
   if (state == null) state = new _State();
   if (doc == null) {
     print('warning: $baseUri not found.');
-    return state.scripts;
+    return state.scripts.values;
   }
-  if (!state.seen.add(doc)) return state.scripts;
+  if (!state.seen.add(doc)) return state.scripts.values;
 
   for (var node in doc.querySelectorAll('script,link[rel="import"]')) {
     if (node is LinkElement) {
       _discoverScripts(node.import, node.href, state);
     } else if (node is ScriptElement && node.type == 'application/dart') {
-      state.scripts.add(_scriptInfoFor(node, baseUri));
+      var info = _scriptInfoFor(node, baseUri);
+      if (state.scripts.containsKey(info.resolvedUrl)) {
+        print('warning: Script `${info.resolvedUrl}` included more than once. '
+            'See http://goo.gl/5HPeuP#polymer_44 for more details.');
+      } else {
+        state.scripts[info.resolvedUrl] = info;
+      }
     }
   }
-  return state.scripts;
+  return state.scripts.values;
 }
 
 /// Internal state used in [_discoverScripts].
@@ -89,7 +96,7 @@
   final Set<Document> seen = new Set();
 
   /// Scripts that have been discovered, in tree order.
-  final List<_ScriptInfo> scripts = [];
+  final LinkedHashMap<String, _ScriptInfo> scripts = {};
 }
 
 /// Holds information about a Dart script tag.
diff --git a/pkg/polymer/pubspec.yaml b/pkg/polymer/pubspec.yaml
index 9a076c62..7f1513f 100644
--- a/pkg/polymer/pubspec.yaml
+++ b/pkg/polymer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: polymer
-version: 0.15.1
+version: 0.15.1+2
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 description: >
   Polymer.dart is a new type of library for the web, built on top of Web
diff --git a/pkg/polymer/test/build/import_inliner_test.dart b/pkg/polymer/test/build/import_inliner_test.dart
index a891a12..578e209 100644
--- a/pkg/polymer/test/build/import_inliner_test.dart
+++ b/pkg/polymer/test/build/import_inliner_test.dart
@@ -169,6 +169,28 @@
       'a|web/second.js': '/*second*/'
     });
 
+  testLogOutput(
+    (options) => new ImportInliner(options),
+    'removes duplicate scripts', {
+      'a|web/test.html':
+          '<!DOCTYPE html><html><head>'
+          '<link rel="import" href="packages/a/x_a.html">'
+          '<link rel="import" href="packages/a/x_b.html">'
+          '</head></html>',
+      'a|lib/x_a.html':
+          '<script type="application/dart" src="bar.dart"></script>',
+      'a|lib/x_b.html':
+          '<script type="application/dart" src="bar.dart"></script>',
+      'a|lib/bar.dart': 'var i = 0;'
+    }, {
+      'a|web/test.html':
+          '<!DOCTYPE html><html><head></head><body></body></html>',
+      'a|web/test.html._data': expectedData(['lib/bar.dart']),
+    }, [
+      'warning: ${SCRIPT_INCLUDED_MORE_THAN_ONCE.create(
+          {'url': 'packages/a/bar.dart'}).snippet} (lib/x_b.html 0 0)'
+    ]);
+
   final cspPhases = [[new ImportInliner(
       new TransformOptions(contentSecurityPolicy: true))]];
   testPhases('extract Js scripts in CSP mode', cspPhases,
diff --git a/runtime/bin/dbg_connection.cc b/runtime/bin/dbg_connection.cc
index 80e4558..a63cf44 100644
--- a/runtime/bin/dbg_connection.cc
+++ b/runtime/bin/dbg_connection.cc
@@ -331,6 +331,12 @@
   listener_fd_ = ServerSocket::CreateBindListen(
       addresses->GetAt(0)->addr(), port_number, 1);
   delete addresses;
+  if (listener_fd_ < 0) {
+    fprintf(stderr, "%s", "Could not initialize debug socket\n");
+    fflush(stderr);
+    exit(255);
+  }
+
   port_number = Socket::GetPort(listener_fd_);
   DebuggerConnectionImpl::StartHandler(port_number);
   return port_number;
diff --git a/runtime/lib/errors_patch.dart b/runtime/lib/errors_patch.dart
index 3dc0e54..b65ae30 100644
--- a/runtime/lib/errors_patch.dart
+++ b/runtime/lib/errors_patch.dart
@@ -14,8 +14,8 @@
   StackTrace _stackTrace;
 }
 
-patch class AssertionError extends Error {
-  AssertionError._create(
+class _AssertionError extends Error implements AssertionError {
+  _AssertionError._create(
       this._failedAssertion, this._url, this._line, this._column);
 
   static _throwNew(int assertionStart, int assertionEnd)
@@ -36,10 +36,10 @@
   final int _column;
 }
 
-patch class TypeError extends AssertionError {
-  TypeError._create(String url, int line, int column,
-                    this._srcType, this._dstType, this._dstName,
-                    this._errorMsg)
+class _TypeError extends _AssertionError implements TypeError {
+  _TypeError._create(String url, int line, int column,
+                     this._srcType, this._dstType, this._dstName,
+                     this._errorMsg)
       : super._create("is assignable", url, line, column);
 
   static _throwNew(int location,
@@ -66,10 +66,10 @@
   final String _errorMsg;
 }
 
-patch class CastError extends Error {
-  CastError._create(this._url, this._line, this._column,
-                    this._srcType, this._dstType, this._dstName,
-                    this._errorMsg);
+class _CastError extends Error implements CastError {
+  _CastError._create(this._url, this._line, this._column,
+                     this._srcType, this._dstType, this._dstName,
+                     this._errorMsg);
 
   // A CastError is allocated by TypeError._throwNew() when dst_name equals
   // Exceptions::kCastErrorDstName.
diff --git a/runtime/vm/benchmark_test.h b/runtime/vm/benchmark_test.h
index a74f092..18ea0a5 100644
--- a/runtime/vm/benchmark_test.h
+++ b/runtime/vm/benchmark_test.h
@@ -17,7 +17,7 @@
 namespace dart {
 
 DECLARE_FLAG(int, code_heap_size);
-DECLARE_FLAG(int, heap_growth_space_ratio);
+DECLARE_FLAG(int, old_gen_growth_space_ratio);
 
 // snapshot_buffer points to a snapshot if we link in a snapshot otherwise
 // it is initialized to NULL.
@@ -32,7 +32,7 @@
   static Benchmark kRegister##name(Dart_Benchmark##name, #name, kind);         \
   static void Dart_BenchmarkHelper##name(Benchmark* benchmark);                \
   void Dart_Benchmark##name(Benchmark* benchmark) {                            \
-    FLAG_heap_growth_space_ratio = 100;                                        \
+    FLAG_old_gen_growth_space_ratio = 100;                                     \
     BenchmarkIsolateScope __isolate__(benchmark);                              \
     StackZone __zone__(benchmark->isolate());                                  \
     HandleScope __hs__(benchmark->isolate());                                  \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 1030271..45f44b0 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1146,16 +1146,21 @@
   AbstractType& type = AbstractType::Handle(function.result_type());
   // It is not a compile time error if this name does not resolve to a class or
   // interface.
-  type = FinalizeType(cls, type, kCanonicalize);
+  AbstractType& finalized_type =
+      AbstractType::Handle(FinalizeType(cls, type, kCanonicalize));
   // The result type may be malformed or malbounded.
-  function.set_result_type(type);
+  if (type.raw() != finalized_type.raw()) {
+    function.set_result_type(type);
+  }
   // Resolve formal parameter types.
   const intptr_t num_parameters = function.NumParameters();
   for (intptr_t i = 0; i < num_parameters; i++) {
     type = function.ParameterTypeAt(i);
-    type = FinalizeType(cls, type, kCanonicalize);
+    finalized_type = FinalizeType(cls, type, kCanonicalize);
     // The parameter type may be malformed or malbounded.
-    function.SetParameterTypeAt(i, type);
+    if (type.raw() != finalized_type.raw()) {
+      function.SetParameterTypeAt(i, type);
+    }
   }
 }
 
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 84f3908..b7dbc3f 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -45,21 +45,6 @@
 DebugInfo* Dart::pprof_symbol_generator_ = NULL;
 ReadOnlyHandles* Dart::predefined_handles_ = NULL;
 
-// An object visitor which will mark all visited objects. This is used to
-// premark all objects in the vm_isolate_ heap.
-class PremarkingVisitor : public ObjectVisitor {
- public:
-  explicit PremarkingVisitor(Isolate* isolate) : ObjectVisitor(isolate) {}
-
-  void VisitObject(RawObject* obj) {
-    // RawInstruction objects are premarked on allocation.
-    if (!obj->IsMarked()) {
-      obj->SetMarkBit();
-    }
-  }
-};
-
-
 // Structure for managing read-only global handles allocation used for
 // creating global read-only handles that are pre created and initialized
 // for use across all isolates. Having these global pre created handles
@@ -131,7 +116,7 @@
                FLAG_old_gen_heap_size * MBInWords);
     ObjectStore::Init(vm_isolate_);
     TargetCPUFeatures::InitOnce();
-    Object::InitOnce();
+    Object::InitOnce(vm_isolate_);
     ArgumentsDescriptor::InitOnce();
     StubCode::InitOnce();
     Symbols::InitOnce(vm_isolate_);
@@ -142,11 +127,7 @@
       return "SSE2 is required.";
     }
 #endif
-    PremarkingVisitor premarker(vm_isolate_);
-    vm_isolate_->heap()->WriteProtect(false);
-    ASSERT(vm_isolate_->heap()->UsedInWords(Heap::kNew) == 0);
-    vm_isolate_->heap()->IterateOldObjects(&premarker);
-    vm_isolate_->heap()->WriteProtect(true);
+    Object::FinalizeVMIsolate(vm_isolate_);
   }
   // There is a planned and known asymmetry here: We enter one scope for the VM
   // isolate so that we can allocate the "persistent" scoped handles for the
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 45315d3..ad33977 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -190,6 +190,7 @@
     case DeoptInstr::kFloat64x2:
     case DeoptInstr::kWord:
     case DeoptInstr::kDouble:
+    case DeoptInstr::kMint:
     case DeoptInstr::kMintPair:
     case DeoptInstr::kInt32:
     case DeoptInstr::kUint32:
@@ -575,6 +576,7 @@
 
 typedef DeoptIntInstr<DeoptInstr::kUint32, uint32_t> DeoptUint32Instr;
 typedef DeoptIntInstr<DeoptInstr::kInt32, int32_t> DeoptInt32Instr;
+typedef DeoptIntInstr<DeoptInstr::kMint, int64_t> DeoptMintInstr;
 
 
 template<DeoptInstr::Kind K,
@@ -904,6 +906,8 @@
       return new DeoptWordInstr(source_index);
     case kDouble:
       return new DeoptDoubleInstr(source_index);
+    case kMint:
+      return new DeoptMintInstr(source_index);
     case kMintPair:
       return new DeoptMintPairInstr(source_index);
     case kInt32:
@@ -948,6 +952,7 @@
       return "word";
     case kDouble:
       return "double";
+    case kMint:
     case kMintPair:
       return "mint";
     case kInt32:
@@ -1130,11 +1135,16 @@
           ToCpuRegisterSource(source_loc));
         break;
       case kUnboxedMint: {
-        ASSERT(source_loc.IsPairLocation());
-        PairLocation* pair = source_loc.AsPairLocation();
-        deopt_instr = new(isolate()) DeoptMintPairInstr(
-            ToCpuRegisterSource(pair->At(0)),
-            ToCpuRegisterSource(pair->At(1)));
+        if (source_loc.IsPairLocation()) {
+          PairLocation* pair = source_loc.AsPairLocation();
+          deopt_instr = new(isolate()) DeoptMintPairInstr(
+              ToCpuRegisterSource(pair->At(0)),
+              ToCpuRegisterSource(pair->At(1)));
+        } else {
+          ASSERT(!source_loc.IsPairLocation());
+          deopt_instr = new(isolate()) DeoptMintInstr(
+              ToCpuRegisterSource(source_loc));
+        }
         break;
       }
       case kUnboxedInt32:
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h
index 1583056..a7ae517 100644
--- a/runtime/vm/deopt_instructions.h
+++ b/runtime/vm/deopt_instructions.h
@@ -221,9 +221,12 @@
     kFloat32x4,
     kFloat64x2,
     kInt32x4,
-    // Mints are split into low and high words. Each word can be in a register
-    // or stack slot. Note Mints are only used on 32-bit architectures.
+    // Mints are split into low and high words on 32-bit architectures. Each
+    // word can be in a register or stack slot. Note Mint pairs are only
+    // used on 32-bit architectures.
     kMintPair,
+    // Mints are held in one word on 64-bit architectures.
+    kMint,
     kInt32,
     kUint32,
     kPcMarker,
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index ce31710..d3258f9 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -225,9 +225,9 @@
 
 
 static bool IsEmptyBlock(BlockEntryInstr* block) {
-  return !block->HasParallelMove() &&
+  return !block->HasNonRedundantParallelMove() &&
          block->next()->IsGoto() &&
-         !block->next()->AsGoto()->HasParallelMove();
+         !block->next()->AsGoto()->HasNonRedundantParallelMove();
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 05ee329..790fea4 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -22,6 +22,7 @@
 namespace dart {
 
 DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization.");
+DEFINE_FLAG(bool, unbox_mints, true, "Optimize 64-bit integer arithmetic.");
 DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, enable_simd_inline);
 
@@ -42,7 +43,7 @@
 
 
 bool FlowGraphCompiler::SupportsUnboxedMints() {
-  return false;
+  return FLAG_unbox_mints;
 }
 
 
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index 6e5ae69..848cbfd 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -47,8 +47,7 @@
 DEFINE_FLAG(int, inlining_hotness, 10,
     "Inline only hotter calls, in percents (0 .. 100); "
     "default 10%: calls above-equal 10% of max-count are inlined.");
-DEFINE_FLAG(bool, inline_recursive, true,
-    "Inline recursive calls.");
+DEFINE_FLAG(bool, inline_recursive, false, "Inline recursive calls.");
 DEFINE_FLAG(int, max_inlined_per_depth, 500,
     "Max. number of inlined calls per depth");
 DEFINE_FLAG(bool, print_inlining_tree, false, "Print inlining tree");
@@ -764,11 +763,12 @@
             &call_data->caller, &function, call_data->call);
         return false;
       }
-
       if (function.IsInvokeFieldDispatcher() ||
           function.IsNoSuchMethodDispatcher()) {
         // Append call sites to the currently processed list so that dispatcher
         // methods get inlined regardless of the current depth.
+        // Need a throttling mechanism for recursive inlining.
+        ASSERT(!FLAG_inline_recursive);
         inlining_call_sites_->FindCallSites(callee_graph,
                                             0,
                                             &inlined_info_);
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 6cdc56e..0b98367 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -63,6 +63,13 @@
 }
 
 
+static bool ShouldInlineInt64ArrayOps() {
+#if defined(TARGET_ARCH_X64)
+  return true;
+#endif
+  return false;
+}
+
 static bool CanConvertUnboxedMintToDouble() {
 #if defined(TARGET_ARCH_IA32)
   return true;
@@ -1176,6 +1183,10 @@
     case MethodRecognizer::kUint32ArraySetIndexed:
       return kTypedDataUint32ArrayCid;
 
+    case MethodRecognizer::kInt64ArrayGetIndexed:
+    case MethodRecognizer::kInt64ArraySetIndexed:
+      return kTypedDataInt64ArrayCid;
+
     case MethodRecognizer::kFloat32x4ArrayGetIndexed:
     case MethodRecognizer::kFloat32x4ArraySetIndexed:
       return kTypedDataFloat32x4ArrayCid;
@@ -1300,6 +1311,7 @@
       case kTypedDataUint16ArrayCid:
       case kTypedDataInt32ArrayCid:
       case kTypedDataUint32ArrayCid:
+      case kTypedDataInt64ArrayCid:
         ASSERT(value_type.IsIntType());
         // Fall through.
       case kTypedDataFloat32ArrayCid:
@@ -1460,6 +1472,11 @@
       if (!CanUnboxInt32()) return false;
       return InlineGetIndexed(kind, call, receiver, ic_data, entry, last);
 
+    case MethodRecognizer::kInt64ArrayGetIndexed:
+      if (!ShouldInlineInt64ArrayOps()) {
+        return false;
+      }
+      return InlineGetIndexed(kind, call, receiver, ic_data, entry, last);
     // Recognized []= operators.
     case MethodRecognizer::kObjectArraySetIndexed:
     case MethodRecognizer::kGrowableArraySetIndexed:
@@ -1491,6 +1508,12 @@
       }
       return InlineSetIndexed(kind, target, call, receiver, token_pos,
                               &ic_data, value_check, entry, last);
+    case MethodRecognizer::kInt64ArraySetIndexed:
+      if (!ShouldInlineInt64ArrayOps()) {
+        return false;
+      }
+      return InlineSetIndexed(kind, target, call, receiver, token_pos,
+                              &ic_data, value_check, entry, last);
     case MethodRecognizer::kFloat32ArraySetIndexed:
     case MethodRecognizer::kFloat64ArraySetIndexed:
       if (!CanUnboxDouble()) {
@@ -5046,9 +5069,9 @@
     current->AsCheckSmi()->set_licm_hoisted(true);
   } else if (current->IsCheckEitherNonSmi()) {
     current->AsCheckEitherNonSmi()->set_licm_hoisted(true);
+  } else if (current->IsCheckArrayBound()) {
+    current->AsCheckArrayBound()->set_licm_hoisted(true);
   }
-  // TODO(fschneider): Avoid repeated deoptimization when
-  // speculatively hoisting checks.
   if (FLAG_trace_optimization) {
     OS::Print("Hoisting instruction %s:%" Pd " from B%" Pd " to B%" Pd "\n",
               current->DebugName(),
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index ce6092a..c9c1968 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -2566,6 +2566,16 @@
 }
 
 
+bool ParallelMoveInstr::IsRedundant() const {
+  for (intptr_t i = 0; i < moves_.length(); i++) {
+    if (!moves_[i]->IsRedundant()) {
+      return false;
+    }
+  }
+  return true;
+}
+
+
 LocationSummary* ParallelMoveInstr::MakeLocationSummary(Isolate* isolate,
                                                         bool optimizing) const {
   return NULL;
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 923b883..a851006 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -1078,6 +1078,8 @@
 
   intptr_t NumMoves() const { return moves_.length(); }
 
+  bool IsRedundant() const;
+
   virtual void PrintTo(BufferFormatter* f) const;
 
   virtual bool MayThrow() const { return false; }
@@ -1138,6 +1140,10 @@
     return parallel_move_ != NULL;
   }
 
+  bool HasNonRedundantParallelMove() const {
+    return HasParallelMove() && !parallel_move()->IsRedundant();
+  }
+
   ParallelMoveInstr* GetParallelMove() {
     if (parallel_move_ == NULL) {
       parallel_move_ = new ParallelMoveInstr();
@@ -1646,9 +1652,14 @@
   bool HasSSATemp() const { return ssa_temp_index_ >= 0; }
   void ClearSSATempIndex() { ssa_temp_index_ = -1; }
   bool HasPairRepresentation() const {
+#if defined(TARGET_ARCH_X64)
+    return (representation() == kPairOfTagged) ||
+           (representation() == kPairOfUnboxedDouble);
+#else
     return (representation() == kPairOfTagged) ||
            (representation() == kPairOfUnboxedDouble) ||
            (representation() == kUnboxedMint);
+#endif
   }
 
   // Compile time type of the definition, which may be requested before type
@@ -2167,6 +2178,10 @@
     return parallel_move_ != NULL;
   }
 
+  bool HasNonRedundantParallelMove() const {
+    return HasParallelMove() && !parallel_move()->IsRedundant();
+  }
+
   ParallelMoveInstr* GetParallelMove() {
     if (parallel_move_ == NULL) {
       parallel_move_ = new ParallelMoveInstr();
@@ -7936,7 +7951,7 @@
 class CheckArrayBoundInstr : public TemplateInstruction<2> {
  public:
   CheckArrayBoundInstr(Value* length, Value* index, intptr_t deopt_id)
-      : generalized_(false) {
+      : generalized_(false), licm_hoisted_(false) {
     SetInputAt(kLengthPos, length);
     SetInputAt(kIndexPos, index);
     // Override generated deopt-id.
@@ -7972,6 +7987,8 @@
 
   virtual bool MayThrow() const { return false; }
 
+  void set_licm_hoisted(bool value) { licm_hoisted_ = value; }
+
   // Give a name to the location/input indices.
   enum {
     kLengthPos = 0,
@@ -7980,6 +7997,7 @@
 
  private:
   bool generalized_;
+  bool licm_hoisted_;
 
   DISALLOW_COPY_AND_ASSIGN(CheckArrayBoundInstr);
 };
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index a6f1c76..8124cc2 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -5931,10 +5931,12 @@
 
 
 void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  uint32_t flags = generalized_ ? ICData::kGeneralized : 0;
+  flags |= licm_hoisted_ ? ICData::kHoisted : 0;
   Label* deopt = compiler->AddDeoptStub(
       deopt_id(),
       ICData::kDeoptCheckArrayBound,
-      generalized_ ? ICData::kGeneralized : 0);
+      flags);
 
   Location length_loc = locs()->in(kLengthPos);
   Location index_loc = locs()->in(kIndexPos);
@@ -6285,15 +6287,6 @@
     ASSERT(locs()->in(1).constant().IsSmi());
     const int32_t shift =
         reinterpret_cast<int32_t>(locs()->in(1).constant().raw()) >> 1;
-    if ((shift < 0) || (shift > kMintShiftCountLimit)) {
-      __ b(deopt);
-      return;
-    } else if (shift == 0) {
-      // Nothing to do for zero shift amount.
-      __ mov(out_lo, Operand(left_lo));
-      __ mov(out_hi, Operand(left_hi));
-      return;
-    }
     switch (op_kind()) {
       case Token::kSHR: {
         if (shift < 32) {
@@ -6524,28 +6517,16 @@
     ASSERT(constant.IsSmi());
     const intptr_t shift_value = Smi::Cast(constant).Value();
 
-    // Check constant shift value.
-    if (shift_value == 0) {
-      // Nothing to do.
-      __ mov(out, Operand(left));
-    } else if (shift_value < 0) {
-      // Invalid shift value.
-      __ b(deopt);
-    } else if (shift_value > kShifterLimit) {
-      // Result is 0.
-      __ eor(out, out, Operand(out));
-    } else {
-      // Do the shift: (shift_value > 0) && (shift_value <= kShifterLimit).
-      switch (op_kind()) {
-        case Token::kSHR:
-          __ Lsr(out, left, Operand(shift_value));
-          break;
-        case Token::kSHL:
-          __ Lsl(out, left, Operand(shift_value));
-          break;
-        default:
-          UNREACHABLE();
-      }
+    // Do the shift: (shift_value > 0) && (shift_value <= kShifterLimit).
+    switch (op_kind()) {
+      case Token::kSHR:
+        __ Lsr(out, left, Operand(shift_value));
+        break;
+      case Token::kSHL:
+        __ Lsl(out, left, Operand(shift_value));
+        break;
+      default:
+        UNREACHABLE();
     }
     return;
   }
diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc
index 7492ab4..264dec0 100644
--- a/runtime/vm/intermediate_language_arm64.cc
+++ b/runtime/vm/intermediate_language_arm64.cc
@@ -5132,10 +5132,12 @@
 
 
 void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  uint32_t flags = generalized_ ? ICData::kGeneralized : 0;
+  flags |= licm_hoisted_ ? ICData::kHoisted : 0;
   Label* deopt = compiler->AddDeoptStub(
       deopt_id(),
       ICData::kDeoptCheckArrayBound,
-      generalized_ ? ICData::kGeneralized : 0);
+      flags);
 
   Location length_loc = locs()->in(kLengthPos);
   Location index_loc = locs()->in(kIndexPos);
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 6d83aff..68455b0 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -5590,10 +5590,12 @@
 
 
 void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  uint32_t flags = generalized_ ? ICData::kGeneralized : 0;
+  flags |= licm_hoisted_ ? ICData::kHoisted : 0;
   Label* deopt = compiler->AddDeoptStub(
       deopt_id(),
       ICData::kDeoptCheckArrayBound,
-      generalized_ ? ICData::kGeneralized : 0);
+      flags);
 
   Location length_loc = locs()->in(kLengthPos);
   Location index_loc = locs()->in(kIndexPos);
@@ -5916,13 +5918,6 @@
     ASSERT(locs()->in(1).constant().IsSmi());
     const int32_t shift =
         reinterpret_cast<int32_t>(locs()->in(1).constant().raw()) >> 1;
-    if ((shift < 0) || (shift > kMintShiftCountLimit)) {
-      __ jmp(deopt);
-      return;
-    } else if (shift == 0) {
-      // Nothing to do for zero shift amount.
-      return;
-    }
     switch (op_kind()) {
       case Token::kSHR: {
         if (shift > 31) {
@@ -6150,27 +6145,17 @@
     ASSERT(constant.IsSmi());
     const intptr_t shift_value = Smi::Cast(constant).Value();
 
-    // Check constant shift value.
-    if (shift_value == 0) {
-      // Nothing to do.
-    } else if (shift_value < 0) {
-      // Invalid shift value.
-      __ jmp(deopt);
-    } else if (shift_value > kShifterLimit) {
-      // Result is 0.
-      __ xorl(left, left);
-    } else {
-      // Do the shift: (shift_value > 0) && (shift_value <= kShifterLimit).
-      switch (op_kind()) {
-        case Token::kSHR:
-          __ shrl(left, Immediate(shift_value));
-        break;
-        case Token::kSHL:
-          __ shll(left, Immediate(shift_value));
-        break;
-        default:
-          UNREACHABLE();
-      }
+
+    // Do the shift: (shift_value > 0) && (shift_value <= kShifterLimit).
+    switch (op_kind()) {
+      case Token::kSHR:
+        __ shrl(left, Immediate(shift_value));
+      break;
+      case Token::kSHL:
+        __ shll(left, Immediate(shift_value));
+      break;
+      default:
+        UNREACHABLE();
     }
     return;
   }
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 2388a05..eb98286 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -4453,10 +4453,12 @@
 
 
 void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  uint32_t flags = generalized_ ? ICData::kGeneralized : 0;
+  flags |= licm_hoisted_ ? ICData::kHoisted : 0;
   Label* deopt = compiler->AddDeoptStub(
       deopt_id(),
       ICData::kDeoptCheckArrayBound,
-      generalized_ ? ICData::kGeneralized : 0);
+      flags);
 
   Location length_loc = locs()->in(kLengthPos);
   Location index_loc = locs()->in(kIndexPos);
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index a7c31d9..5ec7afc 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -355,7 +355,7 @@
 }
 
 
-static Condition TokenKindToSmiCondition(Token::Kind kind) {
+static Condition TokenKindToIntCondition(Token::Kind kind) {
   switch (kind) {
     case Token::kEQ: return EQUAL;
     case Token::kNE: return NOT_EQUAL;
@@ -373,6 +373,15 @@
 LocationSummary* EqualityCompareInstr::MakeLocationSummary(Isolate* isolate,
                                                            bool opt) const {
   const intptr_t kNumInputs = 2;
+  if (operation_cid() == kMintCid) {
+    const intptr_t kNumTemps = 0;
+    LocationSummary* locs = new(isolate) LocationSummary(
+        isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+    locs->set_in(0, Location::RequiresRegister());
+    locs->set_in(1, Location::RequiresRegister());
+    locs->set_out(0, Location::RequiresRegister());
+    return locs;
+  }
   if (operation_cid() == kDoubleCid) {
     const intptr_t kNumTemps =  0;
     LocationSummary* locs = new(isolate) LocationSummary(
@@ -458,15 +467,15 @@
 }
 
 
-static Condition EmitSmiComparisonOp(FlowGraphCompiler* compiler,
-                                     const LocationSummary& locs,
-                                     Token::Kind kind,
-                                     BranchLabels labels) {
+static Condition EmitInt64ComparisonOp(FlowGraphCompiler* compiler,
+                                       const LocationSummary& locs,
+                                       Token::Kind kind,
+                                       BranchLabels labels) {
   Location left = locs.in(0);
   Location right = locs.in(1);
   ASSERT(!left.IsConstant() || !right.IsConstant());
 
-  Condition true_condition = TokenKindToSmiCondition(kind);
+  Condition true_condition = TokenKindToIntCondition(kind);
 
   if (left.IsConstant()) {
     __ CompareObject(right.reg(), left.constant(), PP);
@@ -516,8 +525,8 @@
 
 Condition EqualityCompareInstr::EmitComparisonCode(FlowGraphCompiler* compiler,
                                                    BranchLabels labels) {
-  if (operation_cid() == kSmiCid) {
-    return EmitSmiComparisonOp(compiler, *locs(), kind(), labels);
+  if ((operation_cid() == kSmiCid) || (operation_cid() == kMintCid)) {
+    return EmitInt64ComparisonOp(compiler, *locs(), kind(), labels);
   } else {
     ASSERT(operation_cid() == kDoubleCid);
     return EmitDoubleComparisonOp(compiler, *locs(), kind(), labels);
@@ -683,6 +692,13 @@
     summary->set_in(1, Location::RequiresFpuRegister());
     summary->set_out(0, Location::RequiresRegister());
     return summary;
+  } else if (operation_cid() == kMintCid) {
+    LocationSummary* summary = new(isolate) LocationSummary(
+        isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+    summary->set_in(0, Location::RequiresRegister());
+    summary->set_in(1, Location::RequiresRegister());
+    summary->set_out(0, Location::RequiresRegister());
+    return summary;
   }
   ASSERT(operation_cid() == kSmiCid);
   LocationSummary* summary = new(isolate) LocationSummary(
@@ -700,8 +716,8 @@
 
 Condition RelationalOpInstr::EmitComparisonCode(FlowGraphCompiler* compiler,
                                                 BranchLabels labels) {
-  if (operation_cid() == kSmiCid) {
-    return EmitSmiComparisonOp(compiler, *locs(), kind(), labels);
+  if ((operation_cid() == kSmiCid) || (operation_cid() == kMintCid)) {
+    return EmitInt64ComparisonOp(compiler, *locs(), kind(), labels);
   } else {
     ASSERT(operation_cid() == kDoubleCid);
     return EmitDoubleComparisonOp(compiler, *locs(), kind(), labels);
@@ -948,6 +964,9 @@
     case kTypedDataUint32ArrayCid:
       return CompileType::FromCid(kSmiCid);
 
+    case kTypedDataInt64ArrayCid:
+      return CompileType::Int();
+
     default:
       UNIMPLEMENTED();
       return CompileType::Dynamic();
@@ -973,6 +992,8 @@
       return kUnboxedInt32;
     case kTypedDataUint32ArrayCid:
       return kUnboxedUint32;
+    case kTypedDataInt64ArrayCid:
+      return kUnboxedMint;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
@@ -1075,6 +1096,16 @@
     return;
   }
 
+  if (representation() == kUnboxedMint) {
+    ASSERT(class_id() == kTypedDataInt64ArrayCid);
+    if ((index_scale() == 1) && index.IsRegister()) {
+    __ SmiUntag(index.reg());
+    }
+    Register result = locs()->out(0).reg();
+    __ movq(result, element_address);
+    return;
+  }
+
   ASSERT(representation() == kTagged);
 
   if ((index_scale() == 1) && index.IsRegister()) {
@@ -1131,6 +1162,8 @@
       return kUnboxedInt32;
     case kTypedDataUint32ArrayCid:
       return kUnboxedUint32;
+    case kTypedDataInt64ArrayCid:
+      return kUnboxedMint;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
@@ -1188,6 +1221,9 @@
       // Writable register because the value must be untagged before storing.
       locs->set_in(2, Location::WritableRegister());
       break;
+    case kTypedDataInt64ArrayCid:
+      locs->set_in(2, Location::RequiresRegister());
+      break;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       // TODO(srdjan): Support Float64 constants.
@@ -1291,6 +1327,11 @@
       __ movl(element_address, value);
       break;
     }
+    case kTypedDataInt64ArrayCid: {
+      Register value = locs()->in(2).reg();
+      __ movq(element_address, value);
+      break;
+    }
     case kTypedDataFloat32ArrayCid:
       __ movss(element_address, locs()->in(2).fpu_reg());
       break;
@@ -5446,10 +5487,12 @@
 
 
 void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  uint32_t flags = generalized_ ? ICData::kGeneralized : 0;
+  flags |= licm_hoisted_ ? ICData::kHoisted : 0;
   Label* deopt = compiler->AddDeoptStub(
       deopt_id(),
       ICData::kDeoptCheckArrayBound,
-      generalized_ ? ICData::kGeneralized : 0);
+      flags);
 
   Location length_loc = locs()->in(kLengthPos);
   Location index_loc = locs()->in(kIndexPos);
@@ -5492,67 +5535,267 @@
 
 LocationSummary* UnboxIntegerInstr::MakeLocationSummary(Isolate* isolate,
                                                         bool opt) const {
-  UNIMPLEMENTED();
-  return NULL;
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_in(0, Location::RequiresRegister());
+  locs->set_out(0, Location::SameAsFirstInput());
+  return locs;
 }
 
 
 void UnboxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+  const intptr_t value_cid = value()->Type()->ToCid();
+  const Register value = locs()->in(0).reg();
+  const Register result = locs()->out(0).reg();
+  ASSERT(value == result);
+
+  if (value_cid == kMintCid) {
+    __ movq(result, FieldAddress(value, Mint::value_offset()));
+  } else if (value_cid == kSmiCid) {
+    __ SmiUntag(result);
+  } else {
+    Label* deopt = compiler->AddDeoptStub(deopt_id_,
+                                          ICData::kDeoptUnboxInteger);
+    Label done;
+    __ SmiUntagOrCheckClass(value, kMintCid, &done);
+    __ j(NOT_EQUAL, deopt);
+    // Undo untagging by multiplying value with 2.
+    __ movq(result, Address(value, TIMES_2, Mint::value_offset()));
+    __ Bind(&done);
+  }
 }
 
 
 LocationSummary* BoxIntegerInstr::MakeLocationSummary(Isolate* isolate,
                                                       bool opt) const {
-  UNIMPLEMENTED();
-  return NULL;
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, is_smi()
+                                          ? LocationSummary::kNoCall
+                                          : LocationSummary::kCallOnSlowPath);
+  summary->set_in(0, Location::RequiresRegister());
+  summary->set_out(0, Location::RequiresRegister());
+  return summary;
 }
 
 
 void BoxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+  const Register out = locs()->out(0).reg();
+  const Register value = locs()->in(0).reg();
+
+  if (is_smi()) {
+    __ movq(out, value);
+    __ SmiTag(out);
+    return;
+  }
+
+  Label is_smi;
+  Label done;
+  __ movq(out, value);
+  __ SmiTag(out);   // shlq sets OF := SF ^ CF on 1 bit shifts
+  __ j(NO_OVERFLOW, &done);
+  BoxAllocationSlowPath::Allocate(
+      compiler, this, compiler->mint_class(), out);
+  __ movq(FieldAddress(out, Mint::value_offset()), value);
+  __ Bind(&done);
+}
+
+
+template<typename OperandType>
+static void EmitInt64Arithmetic(FlowGraphCompiler* compiler,
+                                Token::Kind op_kind,
+                                Register left,
+                                const OperandType& right,
+                                Label* deopt) {
+  switch (op_kind) {
+    case Token::kADD:
+      __ addq(left, right);
+      break;
+    case Token::kSUB:
+      __ subq(left, right);
+      break;
+    case Token::kBIT_AND:
+      __ andq(left, right);
+      break;
+    case Token::kBIT_OR:
+      __ orq(left, right);
+      break;
+    case Token::kBIT_XOR:
+      __ xorq(left, right);
+      break;
+    case Token::kMUL:
+      __ imulq(left, right);
+      break;
+    default:
+      UNREACHABLE();
+  }
+  if (deopt != NULL) __ j(OVERFLOW, deopt);
 }
 
 
 LocationSummary* BinaryMintOpInstr::MakeLocationSummary(Isolate* isolate,
                                                         bool opt) const {
-  UNIMPLEMENTED();
-  return NULL;
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresRegister());
+  summary->set_in(1, Location::RequiresRegister());
+  summary->set_out(0, Location::SameAsFirstInput());
+  return summary;
 }
 
 
 void BinaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+  const Register left = locs()->in(0).reg();
+  const Register right = locs()->in(1).reg();
+  const Register out = locs()->out(0).reg();
+
+  ASSERT(out == left);
+
+  Label* deopt = NULL;
+  if (CanDeoptimize()) {
+    deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptBinaryMintOp);
+  }
+
+  EmitInt64Arithmetic(compiler, op_kind(), left, right, deopt);
+
+  if (FLAG_throw_on_javascript_int_overflow) {
+    EmitJavascriptOverflowCheck(compiler, range(), deopt, out);
+  }
 }
 
 
 LocationSummary* UnaryMintOpInstr::MakeLocationSummary(Isolate* isolate,
                                                        bool opt) const {
-  UNIMPLEMENTED();
-  return NULL;
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresRegister());
+  summary->set_out(0, Location::SameAsFirstInput());
+  return summary;
 }
 
 
 void UnaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+  ASSERT(op_kind() == Token::kBIT_NOT);
+  const Register left = locs()->in(0).reg();
+  const Register out = locs()->out(0).reg();
+  ASSERT(out == left);
+
+  Label* deopt = NULL;
+  if (FLAG_throw_on_javascript_int_overflow) {
+    deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnaryMintOp);
+  }
+
+  __ notq(left);
+
+  if (FLAG_throw_on_javascript_int_overflow) {
+    EmitJavascriptOverflowCheck(compiler, range(), deopt, out);
+  }
 }
 
 
+static const intptr_t kMintShiftCountLimit = 63;
+
 bool ShiftMintOpInstr::has_shift_count_check() const {
-  UNREACHABLE();
-  return false;
+  return !RangeUtils::IsWithin(
+      right()->definition()->range(), 0, kMintShiftCountLimit);
 }
 
 
 LocationSummary* ShiftMintOpInstr::MakeLocationSummary(Isolate* isolate,
                                                        bool opt) const {
-  UNIMPLEMENTED();
-  return NULL;
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = can_overflow() ? 1 : 0;
+  LocationSummary* summary = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresRegister());
+  summary->set_in(1, Location::FixedRegisterOrSmiConstant(right(), RCX));
+  if (kNumTemps > 0) {
+    summary->set_temp(0, Location::RequiresRegister());
+  }
+  summary->set_out(0, Location::SameAsFirstInput());
+  return summary;
 }
 
 
 void ShiftMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+  const Register left = locs()->in(0).reg();
+  const Register out = locs()->out(0).reg();
+  ASSERT(left == out);
+
+  Label* deopt = NULL;
+  if (CanDeoptimize()) {
+    deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptShiftMintOp);
+  }
+  if (locs()->in(1).IsConstant()) {
+    // Code for a constant shift amount.
+    ASSERT(locs()->in(1).constant().IsSmi());
+    const int64_t shift =
+        reinterpret_cast<int64_t>(locs()->in(1).constant().raw()) >> 1;
+    switch (op_kind()) {
+      case Token::kSHR:
+        __ sarq(left, Immediate(shift));
+        break;
+      case Token::kSHL: {
+        if (can_overflow()) {
+          // Check for overflow.
+          Register temp = locs()->temp(0).reg();
+          __ movq(temp, left);
+          __ shlq(left, Immediate(shift));
+          __ sarq(left, Immediate(shift));
+          __ cmpq(left, temp);
+          __ j(NOT_EQUAL, deopt);  // Overflow.
+        }
+        // Shift for result now we know there is no overflow.
+        __ shlq(left, Immediate(shift));
+        break;
+      }
+      default:
+        UNREACHABLE();
+    }
+  } else {
+    // Code for a variable shift amount.
+    // Deoptimize if shift count is > 63.
+    // sarl operation masks the count to 5 bits and
+    // shrd is undefined with count > operand size (32)
+    __ SmiUntag(RCX);
+    if (has_shift_count_check()) {
+      __ cmpq(RCX, Immediate(kMintShiftCountLimit));
+      __ j(ABOVE, deopt);
+    }
+    Label done, large_shift;
+    switch (op_kind()) {
+      case Token::kSHR: {
+        __ sarq(left, RCX);
+        break;
+      }
+      case Token::kSHL: {
+        if (can_overflow()) {
+          // Check for overflow.
+          Register temp = locs()->temp(0).reg();
+          __ movq(temp, left);
+          __ shlq(left, RCX);
+          __ sarq(left, RCX);
+          __ cmpq(left, temp);
+          __ j(NOT_EQUAL, deopt);  // Overflow.
+        }
+        // Shift for result now we know there is no overflow.
+        __ shlq(left, RCX);
+        break;
+      }
+      default:
+        UNREACHABLE();
+    }
+  }
+  if (FLAG_throw_on_javascript_int_overflow) {
+    EmitJavascriptOverflowCheck(compiler, range(), deopt, out);
+  }
 }
 
 
@@ -5571,9 +5814,177 @@
 }
 
 
-DEFINE_UNIMPLEMENTED_INSTRUCTION(BinaryUint32OpInstr)
-DEFINE_UNIMPLEMENTED_INSTRUCTION(ShiftUint32OpInstr)
-DEFINE_UNIMPLEMENTED_INSTRUCTION(UnaryUint32OpInstr)
+LocationSummary* BinaryUint32OpInstr::MakeLocationSummary(Isolate* isolate,
+                                                          bool opt) const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = (op_kind() == Token::kMUL) ? 1 : 0;
+  LocationSummary* summary = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresRegister());
+  summary->set_in(1, Location::RequiresRegister());
+  summary->set_out(0, Location::SameAsFirstInput());
+  return summary;
+}
+
+
+template<typename OperandType>
+static void EmitIntegerArithmetic(FlowGraphCompiler* compiler,
+                                  Token::Kind op_kind,
+                                  Register left,
+                                  const OperandType& right,
+                                  Label* deopt) {
+  switch (op_kind) {
+    case Token::kADD:
+      __ addl(left, right);
+      break;
+    case Token::kSUB:
+      __ subl(left, right);
+      break;
+    case Token::kBIT_AND:
+      __ andl(left, right);
+      break;
+    case Token::kBIT_OR:
+      __ orl(left, right);
+      break;
+    case Token::kBIT_XOR:
+      __ xorl(left, right);
+      break;
+    case Token::kMUL:
+      __ imull(left, right);
+      break;
+    default:
+      UNREACHABLE();
+  }
+  if (deopt != NULL) __ j(OVERFLOW, deopt);
+}
+
+
+void BinaryUint32OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register left = locs()->in(0).reg();
+  Register right = locs()->in(1).reg();
+  Register out = locs()->out(0).reg();
+  ASSERT(out == left);
+  switch (op_kind()) {
+    case Token::kBIT_AND:
+    case Token::kBIT_OR:
+    case Token::kBIT_XOR:
+    case Token::kADD:
+    case Token::kSUB:
+    case Token::kMUL:
+      EmitIntegerArithmetic(compiler, op_kind(), left, right, NULL);
+      return;
+    default:
+      UNREACHABLE();
+  }
+}
+
+
+LocationSummary* ShiftUint32OpInstr::MakeLocationSummary(Isolate* isolate,
+                                                         bool opt) const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresRegister());
+  summary->set_in(1, Location::FixedRegisterOrSmiConstant(right(), RCX));
+  summary->set_out(0, Location::SameAsFirstInput());
+  return summary;
+}
+
+
+void ShiftUint32OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const intptr_t kShifterLimit = 31;
+
+  Register left = locs()->in(0).reg();
+  Register out = locs()->out(0).reg();
+  ASSERT(left == out);
+
+
+  Label* deopt = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptShiftMintOp);
+
+  if (locs()->in(1).IsConstant()) {
+    // Shifter is constant.
+
+    const Object& constant = locs()->in(1).constant();
+    ASSERT(constant.IsSmi());
+    const intptr_t shift_value = Smi::Cast(constant).Value();
+
+    // Do the shift: (shift_value > 0) && (shift_value <= kShifterLimit).
+    switch (op_kind()) {
+      case Token::kSHR:
+        __ shrl(left, Immediate(shift_value));
+      break;
+      case Token::kSHL:
+        __ shll(left, Immediate(shift_value));
+      break;
+      default:
+        UNREACHABLE();
+    }
+    return;
+  }
+
+  // Non constant shift value.
+
+  Register shifter = locs()->in(1).reg();
+  ASSERT(shifter == RCX);
+
+  Label done;
+  Label zero;
+
+  // TODO(johnmccutchan): Use range information to avoid these checks.
+  __ SmiUntag(shifter);
+  __ cmpq(shifter, Immediate(0));
+  // If shift value is < 0, deoptimize.
+  __ j(NEGATIVE, deopt);
+  __ cmpq(shifter, Immediate(kShifterLimit));
+  // If shift value is >= 32, return zero.
+  __ j(ABOVE, &zero);
+
+  // Do the shift.
+  switch (op_kind()) {
+    case Token::kSHR:
+      __ shrl(left, shifter);
+      __ jmp(&done);
+    break;
+    case Token::kSHL:
+      __ shll(left, shifter);
+      __ jmp(&done);
+    break;
+    default:
+      UNREACHABLE();
+  }
+
+  __ Bind(&zero);
+  // Shift was greater than 31 bits, just return zero.
+  __ xorq(left, left);
+
+  // Exit path.
+  __ Bind(&done);
+}
+
+
+LocationSummary* UnaryUint32OpInstr::MakeLocationSummary(Isolate* isolate,
+                                                         bool opt) const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary = new(isolate) LocationSummary(
+      isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresRegister());
+  summary->set_out(0, Location::SameAsFirstInput());
+  return summary;
+}
+
+
+void UnaryUint32OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register out = locs()->out(0).reg();
+  ASSERT(locs()->in(0).reg() == out);
+
+  ASSERT(op_kind() == Token::kBIT_NOT);
+
+  __ notl(out);
+}
+
+
 DEFINE_UNIMPLEMENTED_INSTRUCTION(BinaryInt32OpInstr)
 
 
@@ -5665,9 +6076,13 @@
   LocationSummary* summary = new(isolate) LocationSummary(
       isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
   if (from() == kUnboxedMint) {
-    UNREACHABLE();
+    ASSERT((to() == kUnboxedUint32) || (to() == kUnboxedInt32));
+    summary->set_in(0, Location::RequiresRegister());
+    summary->set_out(0, Location::SameAsFirstInput());
   } else if (to() == kUnboxedMint) {
-    UNREACHABLE();
+    ASSERT((from() == kUnboxedInt32) || (from() == kUnboxedUint32));
+    summary->set_in(0, Location::RequiresRegister());
+    summary->set_out(0, Location::SameAsFirstInput());
   } else {
     ASSERT((to() == kUnboxedUint32) || (to() == kUnboxedInt32));
     ASSERT((from() == kUnboxedUint32) || (from() == kUnboxedInt32));
@@ -5699,10 +6114,34 @@
       __ j(NEGATIVE, deopt);
     }
   } else if (from() == kUnboxedMint) {
-    UNREACHABLE();
+    ASSERT((to() == kUnboxedUint32) || (to() == kUnboxedInt32));
+    const Register value = locs()->in(0).reg();
+    const Register out = locs()->out(0).reg();
+    if (!CanDeoptimize()) {
+      // Copy low.
+      __ movl(out, value);
+    } else {
+      Label* deopt =
+          compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnboxInteger);
+      // Sign extend.
+      __ movsxd(out, value);
+      // Compare with original value.
+      __ cmpq(out, value);
+      // Value cannot be held in Int32, deopt.
+      __ j(NOT_EQUAL, deopt);
+    }
   } else if (to() == kUnboxedMint) {
     ASSERT((from() == kUnboxedUint32) || (from() == kUnboxedInt32));
-    UNREACHABLE();
+    const Register value = locs()->in(0).reg();
+    const Register out = locs()->out(0).reg();
+    if (from() == kUnboxedUint32) {
+      // Zero extend.
+      __ movl(out, value);
+    } else {
+      // Sign extend.
+      ASSERT(from() == kUnboxedInt32);
+      __ movsxd(out, value);
+    }
   } else {
     UNREACHABLE();
   }
diff --git a/runtime/vm/method_recognizer.h b/runtime/vm/method_recognizer.h
index c706284..0c4a9ec 100644
--- a/runtime/vm/method_recognizer.h
+++ b/runtime/vm/method_recognizer.h
@@ -23,6 +23,7 @@
   V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 1142676276)                \
   V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 330269934)                   \
   V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 59490554)                  \
+  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 322272622)                   \
   V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 393003933)               \
   V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 1792407200)              \
   V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 1338379857)          \
@@ -33,6 +34,7 @@
   V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 888580944)                 \
   V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 1708248181)                  \
   V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 1863152792)                \
+  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 1473080053)                  \
   V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 1148703855)              \
   V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 972883980)               \
   V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 950522310)           \
@@ -136,6 +138,8 @@
   V(_Int32Array, []=, Int32ArraySetIndexed, 338968571)                         \
   V(_Uint32Array, [], Uint32ArrayGetIndexed, 1640672852)                       \
   V(_Uint32Array, []=, Uint32ArraySetIndexed, 1472976717)                      \
+  V(_Int64Array, [], Int64ArrayGetIndexed, 206855782)                          \
+  V(_Int64Array, []=, Int64ArraySetIndexed, 1258282177)                        \
   V(_Float32x4Array, [], Float32x4ArrayGetIndexed, 1466627059)                 \
   V(_Float32x4Array, []=, Float32x4ArraySetIndexed, 2141660076)                \
   V(_Int32x4Array, [], Int32x4ArrayGetIndexed, 818792056)                      \
@@ -349,6 +353,8 @@
   V(_Int16Array, []=, Int16ArraySetIndexed, 1610252345)                        \
   V(_Int32Array, [], Int32ArrayGetIndexed, 203101370)                          \
   V(_Int32Array, []=, Int32ArraySetIndexed, 338968571)                         \
+  V(_Int64Array, [], Int64ArrayGetIndexed, 206855782)                          \
+  V(_Int64Array, []=, Int64ArraySetIndexed, 1258282177)                        \
   V(_Uint8ArrayView, [], Uint8ArrayViewGetIndexed, 1543480955)                 \
   V(_Uint8ArrayView, []=, Uint8ArrayViewSetIndexed, 936729641)                 \
   V(_Int8ArrayView, [], Int8ArrayViewGetIndexed, 1898018934)                   \
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 9d894ea3..2177c1e 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -101,6 +101,8 @@
 PcDescriptors* Object::empty_descriptors_ = NULL;
 LocalVarDescriptors* Object::empty_var_descriptors_ = NULL;
 ExceptionHandlers* Object::empty_exception_handlers_ = NULL;
+Array* Object::extractor_parameter_types_ = NULL;
+Array* Object::extractor_parameter_names_ = NULL;
 Instance* Object::sentinel_ = NULL;
 Instance* Object::transition_sentinel_ = NULL;
 Instance* Object::unknown_constant_ = NULL;
@@ -449,7 +451,10 @@
 }
 
 
-void Object::InitOnce() {
+void Object::InitOnce(Isolate* isolate) {
+  // Should only be run by the vm isolate.
+  ASSERT(isolate == Dart::vm_isolate());
+
   // TODO(iposva): NoGCScope needs to be added here.
   ASSERT(class_class() == null_);
   // Initialize the static vtable values.
@@ -460,7 +465,6 @@
     Smi::handle_vtable_ = fake_smi.vtable();
   }
 
-  Isolate* isolate = Isolate::Current();
   Heap* heap = isolate->heap();
 
   // Allocate the read only object handles here.
@@ -474,6 +478,8 @@
   empty_descriptors_ = PcDescriptors::ReadOnlyHandle();
   empty_var_descriptors_ = LocalVarDescriptors::ReadOnlyHandle();
   empty_exception_handlers_ = ExceptionHandlers::ReadOnlyHandle();
+  extractor_parameter_types_ = Array::ReadOnlyHandle();
+  extractor_parameter_names_ = Array::ReadOnlyHandle();
   sentinel_ = Instance::ReadOnlyHandle();
   transition_sentinel_ = Instance::ReadOnlyHandle();
   unknown_constant_ =  Instance::ReadOnlyHandle();
@@ -793,6 +799,12 @@
   ASSERT(empty_array_->IsArray());
   ASSERT(!zero_array_->IsSmi());
   ASSERT(zero_array_->IsArray());
+  ASSERT(!empty_descriptors_->IsSmi());
+  ASSERT(empty_descriptors_->IsPcDescriptors());
+  ASSERT(!empty_var_descriptors_->IsSmi());
+  ASSERT(empty_var_descriptors_->IsLocalVarDescriptors());
+  ASSERT(!empty_exception_handlers_->IsSmi());
+  ASSERT(empty_exception_handlers_->IsExceptionHandlers());
   ASSERT(!sentinel_->IsSmi());
   ASSERT(sentinel_->IsInstance());
   ASSERT(!transition_sentinel_->IsSmi());
@@ -813,14 +825,44 @@
 }
 
 
+// An object visitor which will mark all visited objects. This is used to
+// premark all objects in the vm_isolate_ heap.
+class PremarkingVisitor : public ObjectVisitor {
+ public:
+  explicit PremarkingVisitor(Isolate* isolate) : ObjectVisitor(isolate) {}
+
+  void VisitObject(RawObject* obj) {
+    // RawInstruction objects are premarked on allocation.
+    if (!obj->IsMarked()) {
+      obj->SetMarkBit();
+    }
+  }
+};
+
+
 #define SET_CLASS_NAME(class_name, name)                                       \
   cls = class_name##_class();                                                  \
   cls.set_name(Symbols::name());                                               \
 
-void Object::RegisterSingletonClassNames() {
-  Class& cls = Class::Handle();
+void Object::FinalizeVMIsolate(Isolate* isolate) {
+  // Should only be run by the vm isolate.
+  ASSERT(isolate == Dart::vm_isolate());
+
+  // Allocate the parameter arrays for method extractor types and names.
+  *extractor_parameter_types_ = Array::New(1, Heap::kOld);
+  extractor_parameter_types_->SetAt(0, Type::Handle(Type::DynamicType()));
+  *extractor_parameter_names_ = Array::New(1, Heap::kOld);
+  extractor_parameter_names_->SetAt(0, Symbols::This());
+
+  ASSERT(!extractor_parameter_types_->IsSmi());
+  ASSERT(extractor_parameter_types_->IsArray());
+  ASSERT(!extractor_parameter_names_->IsSmi());
+  ASSERT(extractor_parameter_names_->IsArray());
+
 
   // Set up names for all VM singleton classes.
+  Class& cls = Class::Handle(isolate);
+
   SET_CLASS_NAME(class, Class);
   SET_CLASS_NAME(dynamic, Dynamic);
   SET_CLASS_NAME(void, Void);
@@ -855,10 +897,17 @@
 
   // Set up names for object array and one byte string class which are
   // pre-allocated in the vm isolate also.
-  cls = Dart::vm_isolate()->object_store()->array_class();
+  cls = isolate->object_store()->array_class();
   cls.set_name(Symbols::_List());
-  cls = Dart::vm_isolate()->object_store()->one_byte_string_class();
+  cls = isolate->object_store()->one_byte_string_class();
   cls.set_name(Symbols::OneByteString());
+
+  // Make the VM isolate read-only after setting all objects as marked.
+  PremarkingVisitor premarker(isolate);
+  isolate->heap()->WriteProtect(false);
+  ASSERT(isolate->heap()->UsedInWords(Heap::kNew) == 0);
+  isolate->heap()->IterateOldObjects(&premarker);
+  isolate->heap()->WriteProtect(true);
 }
 
 
@@ -5410,6 +5459,8 @@
 void Function::SetParameterTypeAt(
     intptr_t index, const AbstractType& value) const {
   ASSERT(!value.IsNull());
+  // Method extractor parameters are in the VM heap.
+  ASSERT(kind() != RawFunction::kMethodExtractor);
   const Array& parameter_types = Array::Handle(raw_ptr()->parameter_types_);
   parameter_types.SetAt(index, value);
 }
@@ -16989,18 +17040,17 @@
 uint16_t String::CharAt(intptr_t index) const {
   intptr_t class_id = raw()->GetClassId();
   ASSERT(RawObject::IsStringClassId(class_id));
-  NoGCScope no_gc;
   if (class_id == kOneByteStringCid) {
-    return *OneByteString::CharAddr(*this, index);
+    return OneByteString::CharAt(*this, index);
   }
   if (class_id == kTwoByteStringCid) {
-    return *TwoByteString::CharAddr(*this, index);
+    return TwoByteString::CharAt(*this, index);
   }
   if (class_id == kExternalOneByteStringCid) {
-    return *ExternalOneByteString::CharAddr(*this, index);
+    return ExternalOneByteString::CharAt(*this, index);
   }
   ASSERT(class_id == kExternalTwoByteStringCid);
-  return *ExternalTwoByteString::CharAddr(*this, index);
+  return ExternalTwoByteString::CharAt(*this, index);
 }
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 734f406..6c34fbc 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -404,6 +404,16 @@
     return *empty_exception_handlers_;
   }
 
+  static const Array& extractor_parameter_types() {
+    ASSERT(extractor_parameter_types_ != NULL);
+    return *extractor_parameter_types_;
+  }
+
+  static const Array& extractor_parameter_names() {
+    ASSERT(extractor_parameter_names_ != NULL);
+    return *extractor_parameter_names_;
+  }
+
   // The sentinel is a value that cannot be produced by Dart code.
   // It can be used to mark special values, for example to distinguish
   // "uninitialized" fields.
@@ -491,10 +501,14 @@
   }
   static RawClass* subtypetestcache_class() { return subtypetestcache_class_; }
 
+  // Initialize the VM isolate.
+  static void InitOnce(Isolate* isolate);
+  static void FinalizeVMIsolate(Isolate* isolate);
+
+  // Initialize a new isolate either from source or from a snapshot.
   static RawError* Init(Isolate* isolate);
   static void InitFromSnapshot(Isolate* isolate);
-  static void InitOnce();
-  static void RegisterSingletonClassNames();
+
   static void MakeUnusedSpaceTraversable(const Object& obj,
                                          intptr_t original_size,
                                          intptr_t used_size);
@@ -761,6 +775,8 @@
   static PcDescriptors* empty_descriptors_;
   static LocalVarDescriptors* empty_var_descriptors_;
   static ExceptionHandlers* empty_exception_handlers_;
+  static Array* extractor_parameter_types_;
+  static Array* extractor_parameter_names_;
   static Instance* sentinel_;
   static Instance* transition_sentinel_;
   static Instance* unknown_constant_;
@@ -5825,8 +5841,9 @@
 class OneByteString : public AllStatic {
  public:
   static uint16_t CharAt(const String& str, intptr_t index) {
-    NoGCScope no_gc;
-    return *CharAddr(str, index);
+    ASSERT((index >= 0) && (index < str.Length()));
+    ASSERT(str.IsOneByteString());
+    return raw_ptr(str)->data()[index];
   }
 
   static void SetCharAt(const String& str, intptr_t index, uint8_t code_unit) {
@@ -5955,8 +5972,9 @@
 class TwoByteString : public AllStatic {
  public:
   static uint16_t CharAt(const String& str, intptr_t index) {
-    NoGCScope no_gc;
-    return *CharAddr(str, index);
+    ASSERT((index >= 0) && (index < str.Length()));
+    ASSERT(str.IsTwoByteString());
+    return raw_ptr(str)->data()[index];
   }
 
   static void SetCharAt(const String& str, intptr_t index, uint16_t ch) {
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 2419c28..1f5666d 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -15,12 +15,14 @@
 
 namespace dart {
 
-DEFINE_FLAG(int, heap_growth_space_ratio, 20,
-            "The desired maximum percentage of free space after GC");
-DEFINE_FLAG(int, heap_growth_time_ratio, 3,
-            "The desired maximum percentage of time spent in GC");
-DEFINE_FLAG(int, heap_growth_rate, 280,
+DEFINE_FLAG(int, heap_growth_rate, 0,
             "The max number of pages the heap can grow at a time");
+DEFINE_FLAG(int, old_gen_growth_space_ratio, 20,
+            "The desired maximum percentage of free space after old gen GC");
+DEFINE_FLAG(int, old_gen_growth_time_ratio, 3,
+            "The desired maximum percentage of time spent in old gen GC");
+DEFINE_FLAG(int, old_gen_growth_rate, 280,
+            "The max number of pages the old generation can grow at a time");
 DEFINE_FLAG(bool, print_free_list_before_gc, false,
             "Print free list statistics before a GC");
 DEFINE_FLAG(bool, print_free_list_after_gc, false,
@@ -141,9 +143,9 @@
       tasks_lock_(new Monitor()),
       tasks_(0),
       page_space_controller_(heap,
-                             FLAG_heap_growth_space_ratio,
-                             FLAG_heap_growth_rate,
-                             FLAG_heap_growth_time_ratio),
+                             FLAG_old_gen_growth_space_ratio,
+                             FLAG_old_gen_growth_rate,
+                             FLAG_old_gen_growth_time_ratio),
       gc_time_micros_(0),
       collections_(0) {
 }
@@ -198,7 +200,7 @@
     }
     exec_pages_tail_ = page;
   }
-  usage_.capacity_in_words += kPageSizeInWords;
+  IncreaseCapacityInWordsLocked(kPageSizeInWords);
   page->set_object_end(page->memory_->end());
   return page;
 }
@@ -209,7 +211,7 @@
   HeapPage* page = HeapPage::Allocate(page_size_in_words, type);
   page->set_next(large_pages_);
   large_pages_ = page;
-  usage_.capacity_in_words += page_size_in_words;
+  IncreaseCapacityInWords(page_size_in_words);
   // Only one object in this page (at least until String::MakeExternal or
   // Array::MakeArray is called).
   page->set_object_end(page->object_start() + size);
@@ -228,8 +230,7 @@
   const intptr_t old_page_size_in_words = (memory->size() >> kWordSizeLog2);
   if (new_page_size_in_words < old_page_size_in_words) {
     memory->Truncate(new_page_size_in_words << kWordSizeLog2);
-    usage_.capacity_in_words -= old_page_size_in_words;
-    usage_.capacity_in_words += new_page_size_in_words;
+    IncreaseCapacityInWords(new_page_size_in_words - old_page_size_in_words);
     page->set_object_end(page->object_start() + new_object_size_in_bytes);
   }
 }
@@ -239,7 +240,7 @@
   bool is_exec = (page->type() == HeapPage::kExecutable);
   {
     MutexLocker ml(pages_lock_);
-    usage_.capacity_in_words -= (page->memory_->size() >> kWordSizeLog2);
+    IncreaseCapacityInWordsLocked(-(page->memory_->size() >> kWordSizeLog2));
     if (!is_exec) {
       // Remove the page from the list of data pages.
       if (previous_page != NULL) {
@@ -268,7 +269,7 @@
 
 
 void PageSpace::FreeLargePage(HeapPage* page, HeapPage* previous_page) {
-  usage_.capacity_in_words -= (page->memory_->size() >> kWordSizeLog2);
+  IncreaseCapacityInWords(-(page->memory_->size() >> kWordSizeLog2));
   // Remove the page from the list.
   if (previous_page != NULL) {
     previous_page->set_next(page->next());
@@ -295,7 +296,7 @@
                                         bool is_locked) {
   ASSERT(size < kAllocatablePageSize);
   uword result = 0;
-  SpaceUsage after_allocation = usage_;
+  SpaceUsage after_allocation = GetCurrentUsage();
   after_allocation.used_in_words += size >> kWordSizeLog2;
   // Can we grow by one page?
   after_allocation.capacity_in_words += kPageSizeInWords;
@@ -306,7 +307,8 @@
     ASSERT(page != NULL);
     // Start of the newly allocated page is the allocated object.
     result = page->object_start();
-    usage_ = after_allocation;
+    // Note: usage_.capacity_in_words is increased by AllocatePage.
+    usage_.used_in_words += size >> kWordSizeLog2;
     // Enqueue the remainder in the free list.
     uword free_start = result + size;
     intptr_t free_size = page->object_end() - free_start;
@@ -330,7 +332,7 @@
   ASSERT(size >= kObjectAlignment);
   ASSERT(Utils::IsAligned(size, kObjectAlignment));
 #ifdef DEBUG
-  SpaceUsage usage_before = usage_;
+  SpaceUsage usage_before = GetCurrentUsage();
 #endif
   uword result = 0;
   if (size < kAllocatablePageSize) {
@@ -352,7 +354,7 @@
       // On overflow we fail to allocate.
       return 0;
     }
-    SpaceUsage after_allocation = usage_;
+    SpaceUsage after_allocation = GetCurrentUsage();
     after_allocation.used_in_words += size >> kWordSizeLog2;
     after_allocation.capacity_in_words += page_size_in_words;
     if ((growth_policy == kForceGrowth ||
@@ -361,7 +363,8 @@
       HeapPage* page = AllocateLargePage(size, type);
       if (page != NULL) {
         result = page->object_start();
-        usage_ = after_allocation;
+        // Note: usage_.capacity_in_words is increased by AllocateLargePage.
+        usage_.used_in_words += size >> kWordSizeLog2;
       }
     }
   }
@@ -375,9 +378,8 @@
     }
   } else {
 #ifdef DEBUG
-    // A failed allocation should not change usage_.
+    // A failed allocation should not change used_in_words.
     ASSERT(usage_before.used_in_words == usage_.used_in_words);
-    ASSERT(usage_before.capacity_in_words == usage_.capacity_in_words);
 #endif
   }
   ASSERT((result & kObjectAlignmentMask) == kOldObjectAlignmentOffset);
@@ -667,7 +669,7 @@
   WriteProtectCode(false);
 
   // Save old value before GCMarker visits the weak persistent handles.
-  SpaceUsage usage_before = usage_;
+  SpaceUsage usage_before = GetCurrentUsage();
 
   // Mark all reachable old-gen objects.
   bool collect_code = FLAG_collect_code && ShouldCollectCode();
@@ -768,7 +770,8 @@
   int64_t end = OS::GetCurrentTimeMicros();
 
   // Record signals for growth control. Include size of external allocations.
-  page_space_controller_.EvaluateGarbageCollection(usage_before, usage_,
+  page_space_controller_.EvaluateGarbageCollection(usage_before,
+                                                   GetCurrentUsage(),
                                                    start, end);
 
   heap_->RecordTime(kMarkObjects, mid1 - start);
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index 2a9d78c..d2c7541 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -7,6 +7,7 @@
 
 #include "vm/freelist.h"
 #include "vm/globals.h"
+#include "vm/lockers.h"
 #include "vm/ring_buffer.h"
 #include "vm/spaces.h"
 #include "vm/virtual_memory.h"
@@ -214,11 +215,25 @@
   }
 
   intptr_t UsedInWords() const { return usage_.used_in_words; }
-  intptr_t CapacityInWords() const { return usage_.capacity_in_words; }
+  intptr_t CapacityInWords() const {
+    MutexLocker ml(pages_lock_);
+    return usage_.capacity_in_words;
+  }
+  void IncreaseCapacityInWords(intptr_t increase_in_words) {
+     MutexLocker ml(pages_lock_);
+     IncreaseCapacityInWordsLocked(increase_in_words);
+  }
+  void IncreaseCapacityInWordsLocked(intptr_t increase_in_words) {
+    DEBUG_ASSERT(pages_lock_->Owner() == Isolate::Current());
+    usage_.capacity_in_words += increase_in_words;
+  }
   intptr_t ExternalInWords() const {
     return usage_.external_in_words;
   }
-  SpaceUsage GetCurrentUsage() const { return usage_; }
+  SpaceUsage GetCurrentUsage() const {
+    MutexLocker ml(pages_lock_);
+    return usage_;
+  }
 
   bool Contains(uword addr) const;
   bool Contains(uword addr, HeapPage::PageType type) const;
@@ -385,6 +400,8 @@
 
   // Various sizes being tracked for this generation.
   intptr_t max_capacity_in_words_;
+  // NOTE: The capacity component of usage_ is updated by the concurrent
+  // sweeper. Use (Increase)CapacityInWords(Locked) for thread-safe access.
   SpaceUsage usage_;
 
   // Keep track of running MarkSweep tasks.
diff --git a/runtime/vm/resolver.cc b/runtime/vm/resolver.cc
index 11cd7e5..c31a1ee 100644
--- a/runtime/vm/resolver.cc
+++ b/runtime/vm/resolver.cc
@@ -85,12 +85,8 @@
   const intptr_t kNumParameters = 1;
   extractor.set_num_fixed_parameters(kNumParameters);
   extractor.SetNumOptionalParameters(0, 0);
-  extractor.set_parameter_types(Array::Handle(Array::New(kNumParameters,
-                                                         Heap::kOld)));
-  extractor.set_parameter_names(Array::Handle(Array::New(kNumParameters,
-                                                         Heap::kOld)));
-  extractor.SetParameterTypeAt(0, Type::Handle(Type::DynamicType()));
-  extractor.SetParameterNameAt(0, Symbols::This());
+  extractor.set_parameter_types(Object::extractor_parameter_types());
+  extractor.set_parameter_names(Object::extractor_parameter_names());
   extractor.set_result_type(Type::Handle(Type::DynamicType()));
 
   extractor.set_extracted_method_closure(closure_function);
diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc
index 0ccf8a0..cb23091 100644
--- a/runtime/vm/symbols.cc
+++ b/runtime/vm/symbols.cc
@@ -72,7 +72,6 @@
     AddToVMIsolate(*str);
     symbol_handles_[i] = str;
   }
-  Object::RegisterSingletonClassNames();
 
   // Create symbols for language keywords. Some keywords are equal to
   // symbols we already created, so use New() instead of Add() to ensure
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index e399cd2..feb8a24 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -36,9 +36,9 @@
   V(ClosureParameter, ":closure")                                              \
   V(PhaseParameter, ":phase")                                                  \
   V(TypeArgumentsParameter, ":type_arguments")                                 \
-  V(AssertionError, "AssertionError")                                          \
-  V(CastError, "CastError")                                                    \
-  V(TypeError, "TypeError")                                                    \
+  V(AssertionError, "_AssertionError")                                         \
+  V(CastError, "_CastError")                                                   \
+  V(TypeError, "_TypeError")                                                   \
   V(FallThroughError, "FallThroughError")                                      \
   V(AbstractClassInstantiationError, "AbstractClassInstantiationError")        \
   V(NoSuchMethodError, "NoSuchMethodError")                                    \
diff --git a/sdk/bin/dartanalyzer b/sdk/bin/dartanalyzer
index cc49a5c..9bd54a6 100755
--- a/sdk/bin/dartanalyzer
+++ b/sdk/bin/dartanalyzer
@@ -3,7 +3,7 @@
 # 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.
 
-# Run dartanalyzer.dart on the Dart VM. This script assumes the Dart SDK's
+# Run dartanalyzer.dart on the Dart VM. This script assumes the Dart repo's
 # directory structure.
 
 function follow_links() {
@@ -24,8 +24,38 @@
 
 SDK_ARG="--dart-sdk=$SDK_DIR"
 
-SNAPSHOT="$BIN_DIR/snapshots/dartanalyzer.dart.snapshot"
-
-# We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "$SNAPSHOT" "$SDK_ARG" "$@"
+
+unset EXTRA_VM_OPTIONS
+declare -a EXTRA_VM_OPTIONS
+
+case $0 in
+  *_developer)
+    EXTRA_VM_OPTIONS+=('--checked')
+    ;;
+esac
+
+# We allow extra vm options to be passed in through an environment variable.
+if [[ $DART_VM_OPTIONS ]]; then
+  read -a OPTIONS <<< "$DART_VM_OPTIONS"
+  EXTRA_VM_OPTIONS+=("${OPTIONS[@]}")
+fi
+
+DART_ROOT="$(cd "${SDK_DIR}/.." ; pwd -P)"
+
+ANALYZER="$DART_ROOT/pkg/analyzer/bin/analyzer.dart"
+
+if [ -z "$DART_CONFIGURATION" ];
+then
+  DART_CONFIGURATION="ReleaseIA32"
+fi
+
+if [[ `uname` == 'Darwin' ]]; then
+  BUILD_DIR="$DART_ROOT/xcodebuild/$DART_CONFIGURATION"
+else
+  BUILD_DIR="$DART_ROOT/out/$DART_CONFIGURATION"
+fi
+
+PACKAGE_ROOT="$BUILD_DIR/packages/"
+
+exec "$DART" "${EXTRA_VM_OPTIONS[@]}" "--package-root=$PACKAGE_ROOT" "$ANALYZER" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartanalyzer.bat b/sdk/bin/dartanalyzer.bat
index bca4afb..8305c8a 100644
--- a/sdk/bin/dartanalyzer.bat
+++ b/sdk/bin/dartanalyzer.bat
@@ -12,7 +12,6 @@
 for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
 
 set DART=%BIN_DIR%\dart
-set SNAPSHOT=%BIN_DIR%\snapshots\dartanalyzer.dart.snapshot
 
 rem Get absolute full name for SDK_DIR.
 for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
@@ -22,7 +21,33 @@
 
 set SDK_ARG=--dart-sdk=%SDK_DIR%
 
-"%DART%" "%SNAPSHOT%" "%SDK_ARG%" %*
+set EXTRA_VM_OPTIONS=
+
+if _%DARTANALYZER_DEVELOPER_MODE%_ == _1_ (
+  set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% --checked
+)
+
+rem We allow extra vm options to be passed in through an environment variable.
+if not "_%DART_VM_OPTIONS%_" == "__" (
+  set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% %DART_VM_OPTIONS%
+)
+
+rem Get absolute full name for DART_ROOT.
+for %%i in ("%SDK_DIR%\..\") do set DART_ROOT=%%~fi
+
+rem Remove trailing backslash if there is one
+if %DART_ROOT:~-1%==\ set DART_ROOT=%DART_ROOT:~0,-1%
+
+set ANALYZER=%DART_ROOT%\pkg\analyzer\bin\analyzer.dart
+
+rem DART_CONFIGURATION defaults to ReleaseIA32
+if "%DART_CONFIGURATION%"=="" set DART_CONFIGURATION=ReleaseIA32
+
+set BUILD_DIR=%DART_ROOT%\build\%DART_CONFIGURATION%
+
+set PACKAGE_ROOT=%BUILD_DIR%\packages
+
+"%DART%" %EXTRA_VM_OPTIONS% "--package-root=%PACKAGE_ROOT%" "%ANALYZER%" "%SDK_ARG%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartanalyzer_developer b/sdk/bin/dartanalyzer_developer
index db1b42d..0eeaf73 100755
--- a/sdk/bin/dartanalyzer_developer
+++ b/sdk/bin/dartanalyzer_developer
@@ -1,68 +1,6 @@
 #!/bin/bash
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+# 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.
 
-# This file is used to execute the analyzer by running the jar file.
-# It is a simple wrapper enabling us to have simpler command lines in
-# the testing infrastructure.
-set -e
-
-FOUND_BATCH=0
-for ARG in "$@"
-do
-  case $ARG in
-    -batch|--batch)
-      FOUND_BATCH=1
-      ;;
-    *)
-      ;;
-  esac
-done
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-CUR_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-
-SDK_DIR="$(cd "${CUR_DIR}/.." ; pwd -P)"
-
-if [ -z "$DART_CONFIGURATION" ];
-then
-  DART_CONFIGURATION="ReleaseIA32"
-fi
-
-if [ `uname` == 'Darwin' ];
-then
-  JAR_DIR="$CUR_DIR"/../../xcodebuild/$DART_CONFIGURATION/dartanalyzer
-else
-  JAR_DIR="$CUR_DIR"/../../out/$DART_CONFIGURATION/dartanalyzer
-fi
-
-JAR_FILE="$JAR_DIR/dartanalyzer.jar"
-
-EXTRA_JVMARGS="-Xss2M "
-OS=`uname | tr "[A-Z]" "[a-z]"`
-if [ "$OS" == "darwin" ] ; then
-  # Bump up the heap on Mac VMs, some of which default to 128M or less.
-  EXTRA_JVMARGS+=" -Xmx512M -client "
-else
-  # On other architectures
-  # -batch invocations will do better with a server vm
-  # invocations for analyzing a single file do better with a client vm
-  if [ $FOUND_BATCH -eq 0 ] ; then
-    EXTRA_JVMARGS+=" -client "
-  fi
-fi
-
-exec java $EXTRA_JVMARGS -jar "$JAR_FILE" --dart-sdk "$SDK_DIR" "$@"
+. ${BASH_SOURCE%_developer}
diff --git a/sdk/bin/dartanalyzer_developer.bat b/sdk/bin/dartanalyzer_developer.bat
index fcea2aa..b560fe8 100644
--- a/sdk/bin/dartanalyzer_developer.bat
+++ b/sdk/bin/dartanalyzer_developer.bat
@@ -1,27 +1,10 @@
 @echo off
-rem Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-rem for details. All rights reserved. Use of this source code is governed by a
-rem BSD-style license that can be found in the LICENSE file.
-rem 
+REM Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+REM for details. All rights reserved. Use of this source code is governed by a
+REM BSD-style license that can be found in the LICENSE file.
 
-rem This file is used to execute the analyzer by running the jar file.
-rem It is a simple wrapper enabling us to have simpler command lines in
-rem the testing infrastructure.
-
-set SCRIPTPATH=%~dp0
-
-rem Does the path have a trailing slash? If so, remove it.
-if %SCRIPTPATH:~-1%==\ set SCRIPTPATH=%SCRIPTPATH:~0,-1%
-
-rem DART_CONFIGURATION defaults to ReleaseIA32
-if "%DART_CONFIGURATION%"=="" set DART_CONFIGURATION=ReleaseIA32
-
-set arguments=%*
-
-set "SDK_DIR=%SCRIPTPATH%\..\..\build\%DART_CONFIGURATION%\dart-sdk"
-
-set "JAR_DIR=%SCRIPTPATH%\..\..\build\%DART_CONFIGURATION%\dartanalyzer"
-
-set "JAR_FILE=%JAR_DIR%\dartanalyzer.jar"
-
-java -jar "%JAR_FILE%" --dart-sdk "%SDK_DIR%" %arguments%
+setlocal
+set DARTANALYZER_DEVELOPER_MODE=1
+call "%~dp0dartanalyzer.bat" %*
+endlocal
+exit /b %errorlevel%
diff --git a/sdk/bin/dartanalyzer_java b/sdk/bin/dartanalyzer_java
index 740332f..d2839b5 100755
--- a/sdk/bin/dartanalyzer_java
+++ b/sdk/bin/dartanalyzer_java
@@ -1,10 +1,25 @@
-#!/bin/bash --posix
+#!/bin/bash
 # Copyright (c) 2013, 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 is used to execute the analyzer by running the jar file.
+# It is a simple wrapper enabling us to have simpler command lines in
+# the testing infrastructure.
 set -e
 
+FOUND_BATCH=0
+for ARG in "$@"
+do
+  case $ARG in
+    -batch|--batch)
+      FOUND_BATCH=1
+      ;;
+    *)
+      ;;
+  esac
+done
+
 function follow_links() {
   file="$1"
   while [ -h "$file" ]; do
@@ -18,64 +33,28 @@
 PROG_NAME="$(follow_links "$BASH_SOURCE")"
 
 # Handle the case where dart-sdk/bin has been symlinked to.
-SCRIPT_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
+BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
 
-DART_ANALYZER_HOME="$(cd "${SCRIPT_DIR%/*}" ; pwd -P)"
+SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
 
-FOUND_BATCH=0
-FOUND_SDK=0
-for ARG in "$@"
-do
-  case $ARG in
-    -batch|--batch)
-      FOUND_BATCH=1
-      ;;
-    --dart-sdk)
-      FOUND_SDK=1
-      ;;
-    *)
-      ;;
-  esac
-done
-
-DART_SDK=""
-if [ $FOUND_SDK -eq 0 ] ; then
-  if [ -f "$DART_ANALYZER_HOME/lib/core/core.dart" ] ; then
-    DART_SDK=(--dart-sdk "$DART_ANALYZER_HOME")
-  else
-    DART_SDK_HOME=$(dirname "$DART_ANALYZER_HOME")/dart-sdk
-    if [ -d "$DART_SDK_HOME" ] ; then
-      DART_SDK=(--dart-sdk "$DART_SDK_HOME")
-    else
-      DART_SDK_HOME=$(dirname "$DART_SDK_HOME")/dart-sdk
-      if [ -d "$DART_SDK_HOME" ] ; then
-        DART_SDK=(--dart-sdk "$DART_SDK_HOME")
-      else
-        echo "Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument"
-      fi
-    fi
-  fi
+if [ -z "$DART_CONFIGURATION" ];
+then
+  DART_CONFIGURATION="ReleaseIA32"
 fi
 
-if [ -f "$DART_SDK_HOME/util/dartanalyzer/dartanalyzer.jar" ] ; then
-  DART_ANALYZER_LIBS=$DART_SDK_HOME/util/dartanalyzer
-elif [ -f "$DART_ANALYZER_HOME/util/dartanalyzer/dartanalyzer.jar" ] ; then
-  DART_ANALYZER_LIBS=$DART_ANALYZER_HOME/util/dartanalyzer
+if [ `uname` == 'Darwin' ];
+then
+  JAR_DIR="$BIN_DIR"/../../xcodebuild/$DART_CONFIGURATION/dartanalyzer
 else
-  echo "Configuration problem. Couldn't find dartanalyzer.jar."
-  exit 1
+  JAR_DIR="$BIN_DIR"/../../out/$DART_CONFIGURATION/dartanalyzer
 fi
 
-if [ -x /usr/libexec/java_home ]; then
-  export JAVA_HOME=$(/usr/libexec/java_home -v '1.6+')
-fi
+JAR_FILE="$JAR_DIR/dartanalyzer.jar"
 
 EXTRA_JVMARGS="-Xss2M "
 OS=`uname | tr "[A-Z]" "[a-z]"`
 if [ "$OS" == "darwin" ] ; then
   # Bump up the heap on Mac VMs, some of which default to 128M or less.
-  # Users can specify DART_JVMARGS in the environment to override this
-  # setting.
   EXTRA_JVMARGS+=" -Xmx512M -client "
 else
   # On other architectures
@@ -86,5 +65,4 @@
   fi
 fi
 
-exec java $EXTRA_JVMARGS $DART_JVMARGS -ea -jar \
-  "$DART_ANALYZER_LIBS/dartanalyzer.jar" "${DART_SDK[@]}" $@
+exec java $EXTRA_JVMARGS -jar "$JAR_FILE" --dart-sdk "$SDK_DIR" "$@"
diff --git a/sdk/bin/dartanalyzer_java.bat b/sdk/bin/dartanalyzer_java.bat
index 4905124..86f47a8 100644
--- a/sdk/bin/dartanalyzer_java.bat
+++ b/sdk/bin/dartanalyzer_java.bat
@@ -2,56 +2,26 @@
 rem Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file

 rem for details. All rights reserved. Use of this source code is governed by a

 rem BSD-style license that can be found in the LICENSE file.

+rem 

 

-set SCRIPT_DIR=%~dp0

-if %SCRIPT_DIR:~-1%==\ set SCRIPT_DIR=%SCRIPT_DIR:~0,-1%

+rem This file is used to execute the analyzer by running the jar file.

+rem It is a simple wrapper enabling us to have simpler command lines in

+rem the testing infrastructure.

 

-for %%I in ("%SCRIPT_DIR%\..") do set "DART_ANALYZER_HOME=%%~fI"

-if %DART_ANALYZER_HOME:~-1%==\ set DART_ANALYZER_HOME=%DART_ANALYZER_HOME:~0,-1%

+set SCRIPTPATH=%~dp0

 

-set FOUND_BATCH=0

-set FOUND_SDK=0

-for %%a in (%*) do (

-  if [%%a] == [--batch] set FOUND_BATCH=1

-  if [%%a] == [-b] set FOUND_BATCH=1

-  if [%%a] == [--dart-sdk]  set FOUND_SDK=1

-)

+rem Does the path have a trailing slash? If so, remove it.

+if %SCRIPTPATH:~-1%==\ set SCRIPTPATH=%SCRIPTPATH:~0,-1%

 

-setlocal EnableDelayedExpansion

-set DART_SDK=""

-if [%FOUND_SDK%] == [0] (

-  if exist "%DART_ANALYZER_HOME%\lib\core\core.dart" (

-    set DART_SDK=--dart-sdk "%DART_ANALYZER_HOME%"

-  ) else (

-    for /f %%i in ('echo %DART_ANALYZER_HOME%') do set DART_SDK_HOME=%%~dpi\dart-sdk

-    if exist "!DART_SDK_HOME!" (

-      set DART_SDK=--dart-sdk !DART_SDK_HOME!

-    ) else (

-      for /f %%j in ('call echo !DART_SDK_HOME!') do set DART_SDK_HOME=%%~dpj\dart-sdk

-      if exist "!DART_SDK_HOME!" (

-        set DART_SDK=--dart-sdk !DART_SDK_HOME!

-      ) else (

-        echo Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument

-      )

-    )

-  )

-)

-endlocal & set DART_SDK=%DART_SDK% & set DART_SDK_HOME=%DART_SDK_HOME%

+rem DART_CONFIGURATION defaults to ReleaseIA32

+if "%DART_CONFIGURATION%"=="" set DART_CONFIGURATION=ReleaseIA32

 

-if exist "%DART_SDK_HOME%\util\dartanalyzer\dartanalyzer.jar" (

-  set DART_ANALYZER_LIBS=%DART_SDK_HOME%\util\dartanalyzer

-) else if exist "%DART_ANALYZER_HOME%\util\dartanalyzer\dartanalyzer.jar" (

-  set DART_ANALYZER_LIBS=%DART_ANALYZER_HOME%\util\dartanalyzer

-) else (

-  echo Configuration problem. Couldn't find dartanalyzer.jar.

-  exit /b 1

-)

+set arguments=%*

 

-setlocal EnableDelayedExpansion

-set EXTRA_JVMARGS=-Xss2M 

-if [%FOUND_BATCH%] == [1] (

-  set EXTRA_JVMARGS=!EXTRA_JVMARGS! -client

-)

-endlocal & set "EXTRA_JVMARGS=%EXTRA_JVMARGS%"

+set "SDK_DIR=%SCRIPTPATH%\..\..\build\%DART_CONFIGURATION%\dart-sdk"

 

-java %EXTRA_JVMARGS% %DART_JVMARGS% -ea -jar "%DART_ANALYZER_LIBS%\dartanalyzer.jar" %DART_SDK% %*

+set "JAR_DIR=%SCRIPTPATH%\..\..\build\%DART_CONFIGURATION%\dartanalyzer"

+

+set "JAR_FILE=%JAR_DIR%\dartanalyzer.jar"

+

+java -jar "%JAR_FILE%" --dart-sdk "%SDK_DIR%" %arguments%

diff --git a/sdk/bin/dartanalyzer_sdk b/sdk/bin/dartanalyzer_sdk
new file mode 100755
index 0000000..cc49a5c
--- /dev/null
+++ b/sdk/bin/dartanalyzer_sdk
@@ -0,0 +1,31 @@
+#!/bin/bash
+# Copyright (c) 2013, 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.
+
+# Run dartanalyzer.dart on the Dart VM. This script assumes the Dart SDK's
+# directory structure.
+
+function follow_links() {
+  file="$1"
+  while [ -h "$file" ]; do
+    # On Mac OS, readlink -f doesn't work.
+    file="$(readlink "$file")"
+  done
+  echo "$file"
+}
+
+# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
+PROG_NAME="$(follow_links "$BASH_SOURCE")"
+
+# Handle the case where dart-sdk/bin has been symlinked to.
+BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
+SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
+
+SDK_ARG="--dart-sdk=$SDK_DIR"
+
+SNAPSHOT="$BIN_DIR/snapshots/dartanalyzer.dart.snapshot"
+
+# We are running the snapshot in the built SDK.
+DART="$BIN_DIR/dart"
+exec "$DART" "$SNAPSHOT" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartanalyzer_sdk.bat b/sdk/bin/dartanalyzer_sdk.bat
new file mode 100644
index 0000000..bca4afb
--- /dev/null
+++ b/sdk/bin/dartanalyzer_sdk.bat
@@ -0,0 +1,52 @@
+@echo off
+REM Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+REM for details. All rights reserved. Use of this source code is governed by a
+REM BSD-style license that can be found in the LICENSE file.
+
+setlocal
+rem Handle the case where dart-sdk/bin has been symlinked to.
+set DIR_NAME_WITH_SLASH=%~dp0
+set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
+call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
+rem Get rid of surrounding quotes.
+for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
+
+set DART=%BIN_DIR%\dart
+set SNAPSHOT=%BIN_DIR%\snapshots\dartanalyzer.dart.snapshot
+
+rem Get absolute full name for SDK_DIR.
+for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
+
+rem Remove trailing backslash if there is one
+if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
+
+set SDK_ARG=--dart-sdk=%SDK_DIR%
+
+"%DART%" "%SNAPSHOT%" "%SDK_ARG%" %*
+
+endlocal
+
+exit /b %errorlevel%
+
+rem Follow the symbolic links (junctions points) using `dir to determine the
+rem canonical path. Output with a link looks something like this
+rem
+rem 01/03/2013  10:11 PM    <JUNCTION>     abc def
+rem [c:\dart_bleeding\dart-repo.9\dart\build\ReleaseIA32\dart-sdk]
+rem
+rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
+rem surrounded by right angle bracket and left square bracket. Once we get
+rem the filename, which is name of the link, we recursively follow that.
+:follow_links
+setlocal
+for %%i in (%1) do set result=%%~fi
+set current=
+for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
+                                             ^| find ">     %~n1 ["`) do (
+  set current=%%i
+)
+if not "%current%"=="" call :follow_links "%current%", result
+endlocal & set %~2=%result%
+goto :eof
+
+:end
diff --git a/sdk/lib/_blink/dartium/_blink_dartium.dart b/sdk/lib/_blink/dartium/_blink_dartium.dart
index 91015aa..6f6f0a5 100644
--- a/sdk/lib/_blink/dartium/_blink_dartium.dart
+++ b/sdk/lib/_blink/dartium/_blink_dartium.dart
@@ -15,27 +15,31 @@
 
 
 class BlinkANGLEInstancedArrays {
-  static drawArraysInstancedANGLE_Callback_ul_long_long_long(mthis, mode, first, count, primcount) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback_unsigned long_long_long_long";
+  static drawArraysInstancedANGLE_Callback_4(mthis, mode, first, count, primcount) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback";
 
-  static drawElementsInstancedANGLE_Callback_ul_long_ul_ll_long(mthis, mode, count, type, offset, primcount) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback_unsigned long_long_unsigned long_long long_long";
+  static drawElementsInstancedANGLE_Callback_5(mthis, mode, count, type, offset, primcount) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback";
 
-  static vertexAttribDivisorANGLE_Callback_ul_long(mthis, index, divisor) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback_unsigned long_long";
+  static vertexAttribDivisorANGLE_Callback_2(mthis, index, divisor) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback";
 }
 
 class BlinkAbstractWorker {}
 
 class BlinkEventTarget {
-  static addEventListener_Callback_DOMString_EventListener_boolean(mthis, type, listener, useCapture) native "EventTarget_addEventListener_Callback_DOMString_EventListener_boolean";
+  static addEventListener_Callback_3(mthis, type, listener, useCapture) native "EventTarget_addEventListener_Callback";
 
-  static addEventListener_Callback_DOMString(mthis, type) native "EventTarget_addEventListener_Callback_DOMString";
+  static addEventListener_Callback_2(mthis, type, listener) native "EventTarget_addEventListener_Callback";
+
+  static addEventListener_Callback_1(mthis, type) native "EventTarget_addEventListener_Callback";
 
   static addEventListener_Callback(mthis) native "EventTarget_addEventListener_Callback";
 
-  static dispatchEvent_Callback_Event(mthis, event) native "EventTarget_dispatchEvent_Callback_Event";
+  static dispatchEvent_Callback_1(mthis, event) native "EventTarget_dispatchEvent_Callback";
 
-  static removeEventListener_Callback_DOMString_EventListener_boolean(mthis, type, listener, useCapture) native "EventTarget_removeEventListener_Callback_DOMString_EventListener_boolean";
+  static removeEventListener_Callback_3(mthis, type, listener, useCapture) native "EventTarget_removeEventListener_Callback";
 
-  static removeEventListener_Callback_DOMString(mthis, type) native "EventTarget_removeEventListener_Callback_DOMString";
+  static removeEventListener_Callback_2(mthis, type, listener) native "EventTarget_removeEventListener_Callback";
+
+  static removeEventListener_Callback_1(mthis, type) native "EventTarget_removeEventListener_Callback";
 
   static removeEventListener_Callback(mthis) native "EventTarget_removeEventListener_Callback";
 }
@@ -43,15 +47,15 @@
 class BlinkAudioNode {
   static channelCount_Getter(mthis) native "AudioNode_channelCount_Getter";
 
-  static channelCount_Setter_ul(mthis, value) native "AudioNode_channelCount_Setter";
+  static channelCount_Setter(mthis, value) native "AudioNode_channelCount_Setter";
 
   static channelCountMode_Getter(mthis) native "AudioNode_channelCountMode_Getter";
 
-  static channelCountMode_Setter_DOMString(mthis, value) native "AudioNode_channelCountMode_Setter";
+  static channelCountMode_Setter(mthis, value) native "AudioNode_channelCountMode_Setter";
 
   static channelInterpretation_Getter(mthis) native "AudioNode_channelInterpretation_Getter";
 
-  static channelInterpretation_Setter_DOMString(mthis, value) native "AudioNode_channelInterpretation_Setter";
+  static channelInterpretation_Setter(mthis, value) native "AudioNode_channelInterpretation_Setter";
 
   static context_Getter(mthis) native "AudioNode_context_Getter";
 
@@ -59,39 +63,39 @@
 
   static numberOfOutputs_Getter(mthis) native "AudioNode_numberOfOutputs_Getter";
 
-  static connect_Callback_AudioNode_ul_ul(mthis, destination, output, input) native "AudioNode_connect_Callback_AudioNode_unsigned long_unsigned long";
+  static connect_Callback_3(mthis, destination, output, input) native "AudioNode_connect_Callback";
 
-  static connect_Callback_AudioParam_ul(mthis, destination, output) native "AudioNode_connect_Callback_AudioParam_unsigned long";
+  static connect_Callback_2(mthis, destination, output) native "AudioNode_connect_Callback";
 
-  static disconnect_Callback_ul(mthis, output) native "AudioNode_disconnect_Callback_unsigned long";
+  static disconnect_Callback_1(mthis, output) native "AudioNode_disconnect_Callback";
 }
 
 class BlinkAnalyserNode {
   static fftSize_Getter(mthis) native "AnalyserNode_fftSize_Getter";
 
-  static fftSize_Setter_ul(mthis, value) native "AnalyserNode_fftSize_Setter";
+  static fftSize_Setter(mthis, value) native "AnalyserNode_fftSize_Setter";
 
   static frequencyBinCount_Getter(mthis) native "AnalyserNode_frequencyBinCount_Getter";
 
   static maxDecibels_Getter(mthis) native "AnalyserNode_maxDecibels_Getter";
 
-  static maxDecibels_Setter_double(mthis, value) native "AnalyserNode_maxDecibels_Setter";
+  static maxDecibels_Setter(mthis, value) native "AnalyserNode_maxDecibels_Setter";
 
   static minDecibels_Getter(mthis) native "AnalyserNode_minDecibels_Getter";
 
-  static minDecibels_Setter_double(mthis, value) native "AnalyserNode_minDecibels_Setter";
+  static minDecibels_Setter(mthis, value) native "AnalyserNode_minDecibels_Setter";
 
   static smoothingTimeConstant_Getter(mthis) native "AnalyserNode_smoothingTimeConstant_Getter";
 
-  static smoothingTimeConstant_Setter_double(mthis, value) native "AnalyserNode_smoothingTimeConstant_Setter";
+  static smoothingTimeConstant_Setter(mthis, value) native "AnalyserNode_smoothingTimeConstant_Setter";
 
-  static getByteFrequencyData_Callback_Uint8Array(mthis, array) native "AnalyserNode_getByteFrequencyData_Callback_Uint8Array";
+  static getByteFrequencyData_Callback_1(mthis, array) native "AnalyserNode_getByteFrequencyData_Callback";
 
-  static getByteTimeDomainData_Callback_Uint8Array(mthis, array) native "AnalyserNode_getByteTimeDomainData_Callback_Uint8Array";
+  static getByteTimeDomainData_Callback_1(mthis, array) native "AnalyserNode_getByteTimeDomainData_Callback";
 
-  static getFloatFrequencyData_Callback_Float32Array(mthis, array) native "AnalyserNode_getFloatFrequencyData_Callback_Float32Array";
+  static getFloatFrequencyData_Callback_1(mthis, array) native "AnalyserNode_getFloatFrequencyData_Callback";
 
-  static getFloatTimeDomainData_Callback_Float32Array(mthis, array) native "AnalyserNode_getFloatTimeDomainData_Callback_Float32Array";
+  static getFloatTimeDomainData_Callback_1(mthis, array) native "AnalyserNode_getFloatTimeDomainData_Callback";
 }
 
 class BlinkAnimationNode {
@@ -113,11 +117,9 @@
 }
 
 class BlinkAnimation {
-  static constructorCallback_Element_SEQ_Dictionary_SEQ(target, keyframes) native "Animation_constructorCallback_Element_sequence<Dictionary>";
+  static constructorCallback_2(target, keyframes) native "Animation_constructorCallback";
 
-  static constructorCallback_Element_SEQ_Dictionary_SEQ_double(target, keyframes, timingInput) native "Animation_constructorCallback_Element_sequence<Dictionary>_double";
-
-  static constructorCallback_Element_SEQ_Dictionary_SEQ_Dictionary(target, keyframes, timingInput) native "Animation_constructorCallback_Element_sequence<Dictionary>_Dictionary";
+  static constructorCallback_3(target, keyframes, timingInput) native "Animation_constructorCallback";
 }
 
 class BlinkAnimationEffect {}
@@ -125,7 +127,7 @@
 class BlinkAnimationPlayer {
   static currentTime_Getter(mthis) native "AnimationPlayer_currentTime_Getter";
 
-  static currentTime_Setter_double(mthis, value) native "AnimationPlayer_currentTime_Setter";
+  static currentTime_Setter(mthis, value) native "AnimationPlayer_currentTime_Setter";
 
   static finished_Getter(mthis) native "AnimationPlayer_finished_Getter";
 
@@ -133,15 +135,15 @@
 
   static playbackRate_Getter(mthis) native "AnimationPlayer_playbackRate_Getter";
 
-  static playbackRate_Setter_double(mthis, value) native "AnimationPlayer_playbackRate_Setter";
+  static playbackRate_Setter(mthis, value) native "AnimationPlayer_playbackRate_Setter";
 
   static source_Getter(mthis) native "AnimationPlayer_source_Getter";
 
-  static source_Setter_AnimationNode(mthis, value) native "AnimationPlayer_source_Setter";
+  static source_Setter(mthis, value) native "AnimationPlayer_source_Setter";
 
   static startTime_Getter(mthis) native "AnimationPlayer_startTime_Getter";
 
-  static startTime_Setter_double(mthis, value) native "AnimationPlayer_startTime_Setter";
+  static startTime_Setter(mthis, value) native "AnimationPlayer_startTime_Setter";
 
   static cancel_Callback(mthis) native "AnimationPlayer_cancel_Callback";
 
@@ -177,7 +179,7 @@
 
   static type_Getter(mthis) native "Event_type_Getter";
 
-  static initEvent_Callback_DOMString_boolean_boolean(mthis, eventTypeArg, canBubbleArg, cancelableArg) native "Event_initEvent_Callback_DOMString_boolean_boolean";
+  static initEvent_Callback_3(mthis, eventTypeArg, canBubbleArg, cancelableArg) native "Event_initEvent_Callback";
 
   static preventDefault_Callback(mthis) native "Event_preventDefault_Callback";
 
@@ -199,7 +201,7 @@
 
   static getAnimationPlayers_Callback(mthis) native "AnimationTimeline_getAnimationPlayers_Callback";
 
-  static play_Callback_AnimationNode(mthis, source) native "AnimationTimeline_play_Callback_AnimationNode";
+  static play_Callback_1(mthis, source) native "AnimationTimeline_play_Callback";
 }
 
 class BlinkApplicationCache {
@@ -255,21 +257,21 @@
 
   static textContent_Getter(mthis) native "Node_textContent_Getter";
 
-  static textContent_Setter_DOMString(mthis, value) native "Node_textContent_Setter";
+  static textContent_Setter(mthis, value) native "Node_textContent_Setter";
 
-  static appendChild_Callback_Node(mthis, newChild) native "Node_appendChild_Callback_Node";
+  static appendChild_Callback_1(mthis, newChild) native "Node_appendChild_Callback";
 
-  static cloneNode_Callback_boolean(mthis, deep) native "Node_cloneNode_Callback";
+  static cloneNode_Callback_1(mthis, deep) native "Node_cloneNode_Callback";
 
-  static contains_Callback_Node(mthis, other) native "Node_contains_Callback_Node";
+  static contains_Callback_1(mthis, other) native "Node_contains_Callback";
 
   static hasChildNodes_Callback(mthis) native "Node_hasChildNodes_Callback";
 
-  static insertBefore_Callback_Node_Node(mthis, newChild, refChild) native "Node_insertBefore_Callback_Node_Node";
+  static insertBefore_Callback_2(mthis, newChild, refChild) native "Node_insertBefore_Callback";
 
-  static removeChild_Callback_Node(mthis, oldChild) native "Node_removeChild_Callback_Node";
+  static removeChild_Callback_1(mthis, oldChild) native "Node_removeChild_Callback";
 
-  static replaceChild_Callback_Node_Node(mthis, newChild, oldChild) native "Node_replaceChild_Callback_Node_Node";
+  static replaceChild_Callback_2(mthis, newChild, oldChild) native "Node_replaceChild_Callback";
 }
 
 class BlinkAttr {
@@ -283,11 +285,11 @@
 
   static textContent_Getter(mthis) native "Attr_textContent_Getter";
 
-  static textContent_Setter_DOMString(mthis, value) native "Attr_textContent_Setter";
+  static textContent_Setter(mthis, value) native "Attr_textContent_Setter";
 
   static value_Getter(mthis) native "Attr_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "Attr_value_Setter";
+  static value_Setter(mthis, value) native "Attr_value_Setter";
 }
 
 class BlinkAudioBuffer {
@@ -299,7 +301,7 @@
 
   static sampleRate_Getter(mthis) native "AudioBuffer_sampleRate_Getter";
 
-  static getChannelData_Callback_ul(mthis, channelIndex) native "AudioBuffer_getChannelData_Callback_unsigned long";
+  static getChannelData_Callback_1(mthis, channelIndex) native "AudioBuffer_getChannelData_Callback";
 }
 
 class BlinkAudioSourceNode {}
@@ -307,31 +309,31 @@
 class BlinkAudioBufferSourceNode {
   static buffer_Getter(mthis) native "AudioBufferSourceNode_buffer_Getter";
 
-  static buffer_Setter_AudioBuffer(mthis, value) native "AudioBufferSourceNode_buffer_Setter";
+  static buffer_Setter(mthis, value) native "AudioBufferSourceNode_buffer_Setter";
 
   static loop_Getter(mthis) native "AudioBufferSourceNode_loop_Getter";
 
-  static loop_Setter_boolean(mthis, value) native "AudioBufferSourceNode_loop_Setter";
+  static loop_Setter(mthis, value) native "AudioBufferSourceNode_loop_Setter";
 
   static loopEnd_Getter(mthis) native "AudioBufferSourceNode_loopEnd_Getter";
 
-  static loopEnd_Setter_double(mthis, value) native "AudioBufferSourceNode_loopEnd_Setter";
+  static loopEnd_Setter(mthis, value) native "AudioBufferSourceNode_loopEnd_Setter";
 
   static loopStart_Getter(mthis) native "AudioBufferSourceNode_loopStart_Getter";
 
-  static loopStart_Setter_double(mthis, value) native "AudioBufferSourceNode_loopStart_Setter";
+  static loopStart_Setter(mthis, value) native "AudioBufferSourceNode_loopStart_Setter";
 
   static playbackRate_Getter(mthis) native "AudioBufferSourceNode_playbackRate_Getter";
 
-  static start_Callback_double_double_double(mthis, when, grainOffset, grainDuration) native "AudioBufferSourceNode_start_Callback_double_double_double";
+  static start_Callback_3(mthis, when, grainOffset, grainDuration) native "AudioBufferSourceNode_start_Callback";
 
-  static start_Callback_double_double(mthis, when, grainOffset) native "AudioBufferSourceNode_start_Callback_double_double";
+  static start_Callback_2(mthis, when, grainOffset) native "AudioBufferSourceNode_start_Callback";
 
-  static start_Callback_double(mthis, when) native "AudioBufferSourceNode_start_Callback_double";
+  static start_Callback_1(mthis, when) native "AudioBufferSourceNode_start_Callback";
 
   static start_Callback(mthis) native "AudioBufferSourceNode_start_Callback";
 
-  static stop_Callback_double(mthis, when) native "AudioBufferSourceNode_stop_Callback_double";
+  static stop_Callback_1(mthis, when) native "AudioBufferSourceNode_stop_Callback";
 
   static stop_Callback(mthis) native "AudioBufferSourceNode_stop_Callback";
 }
@@ -351,21 +353,21 @@
 
   static createBiquadFilter_Callback(mthis) native "AudioContext_createBiquadFilter_Callback";
 
-  static createBuffer_Callback_ul_ul_float(mthis, numberOfChannels, numberOfFrames, sampleRate) native "AudioContext_createBuffer_Callback_unsigned long_unsigned long_float";
+  static createBuffer_Callback_3(mthis, numberOfChannels, numberOfFrames, sampleRate) native "AudioContext_createBuffer_Callback";
 
   static createBufferSource_Callback(mthis) native "AudioContext_createBufferSource_Callback";
 
-  static createChannelMerger_Callback_ul(mthis, numberOfInputs) native "AudioContext_createChannelMerger_Callback_unsigned long";
+  static createChannelMerger_Callback_1(mthis, numberOfInputs) native "AudioContext_createChannelMerger_Callback";
 
   static createChannelMerger_Callback(mthis) native "AudioContext_createChannelMerger_Callback";
 
-  static createChannelSplitter_Callback_ul(mthis, numberOfOutputs) native "AudioContext_createChannelSplitter_Callback_unsigned long";
+  static createChannelSplitter_Callback_1(mthis, numberOfOutputs) native "AudioContext_createChannelSplitter_Callback";
 
   static createChannelSplitter_Callback(mthis) native "AudioContext_createChannelSplitter_Callback";
 
   static createConvolver_Callback(mthis) native "AudioContext_createConvolver_Callback";
 
-  static createDelay_Callback_double(mthis, maxDelayTime) native "AudioContext_createDelay_Callback_double";
+  static createDelay_Callback_1(mthis, maxDelayTime) native "AudioContext_createDelay_Callback";
 
   static createDelay_Callback(mthis) native "AudioContext_createDelay_Callback";
 
@@ -373,29 +375,29 @@
 
   static createGain_Callback(mthis) native "AudioContext_createGain_Callback";
 
-  static createMediaElementSource_Callback_HTMLMediaElement(mthis, mediaElement) native "AudioContext_createMediaElementSource_Callback_HTMLMediaElement";
+  static createMediaElementSource_Callback_1(mthis, mediaElement) native "AudioContext_createMediaElementSource_Callback";
 
   static createMediaStreamDestination_Callback(mthis) native "AudioContext_createMediaStreamDestination_Callback";
 
-  static createMediaStreamSource_Callback_MediaStream(mthis, mediaStream) native "AudioContext_createMediaStreamSource_Callback_MediaStream";
+  static createMediaStreamSource_Callback_1(mthis, mediaStream) native "AudioContext_createMediaStreamSource_Callback";
 
   static createOscillator_Callback(mthis) native "AudioContext_createOscillator_Callback";
 
   static createPanner_Callback(mthis) native "AudioContext_createPanner_Callback";
 
-  static createPeriodicWave_Callback_Float32Array_Float32Array(mthis, real, imag) native "AudioContext_createPeriodicWave_Callback_Float32Array_Float32Array";
+  static createPeriodicWave_Callback_2(mthis, real, imag) native "AudioContext_createPeriodicWave_Callback";
 
-  static createScriptProcessor_Callback_ul_ul_ul(mthis, bufferSize, numberOfInputChannels, numberOfOutputChannels) native "AudioContext_createScriptProcessor_Callback_unsigned long_unsigned long_unsigned long";
+  static createScriptProcessor_Callback_3(mthis, bufferSize, numberOfInputChannels, numberOfOutputChannels) native "AudioContext_createScriptProcessor_Callback";
 
-  static createScriptProcessor_Callback_ul_ul(mthis, bufferSize, numberOfInputChannels) native "AudioContext_createScriptProcessor_Callback_unsigned long_unsigned long";
+  static createScriptProcessor_Callback_2(mthis, bufferSize, numberOfInputChannels) native "AudioContext_createScriptProcessor_Callback";
 
-  static createScriptProcessor_Callback_ul(mthis, bufferSize) native "AudioContext_createScriptProcessor_Callback_unsigned long";
+  static createScriptProcessor_Callback_1(mthis, bufferSize) native "AudioContext_createScriptProcessor_Callback";
 
   static createScriptProcessor_Callback(mthis) native "AudioContext_createScriptProcessor_Callback";
 
   static createWaveShaper_Callback(mthis) native "AudioContext_createWaveShaper_Callback";
 
-  static decodeAudioData_Callback_ArrayBuffer_AudioBufferCallback_AudioBufferCallback(mthis, audioData, successCallback, errorCallback) native "AudioContext_decodeAudioData_Callback";
+  static decodeAudioData_Callback_3(mthis, audioData, successCallback, errorCallback) native "AudioContext_decodeAudioData_Callback";
 
   static startRendering_Callback(mthis) native "AudioContext_startRendering_Callback";
 }
@@ -407,17 +409,17 @@
 class BlinkAudioListener {
   static dopplerFactor_Getter(mthis) native "AudioListener_dopplerFactor_Getter";
 
-  static dopplerFactor_Setter_float(mthis, value) native "AudioListener_dopplerFactor_Setter";
+  static dopplerFactor_Setter(mthis, value) native "AudioListener_dopplerFactor_Setter";
 
   static speedOfSound_Getter(mthis) native "AudioListener_speedOfSound_Getter";
 
-  static speedOfSound_Setter_float(mthis, value) native "AudioListener_speedOfSound_Setter";
+  static speedOfSound_Setter(mthis, value) native "AudioListener_speedOfSound_Setter";
 
-  static setOrientation_Callback_float_float_float_float_float_float(mthis, x, y, z, xUp, yUp, zUp) native "AudioListener_setOrientation_Callback_float_float_float_float_float_float";
+  static setOrientation_Callback_6(mthis, x, y, z, xUp, yUp, zUp) native "AudioListener_setOrientation_Callback";
 
-  static setPosition_Callback_float_float_float(mthis, x, y, z) native "AudioListener_setPosition_Callback_float_float_float";
+  static setPosition_Callback_3(mthis, x, y, z) native "AudioListener_setPosition_Callback";
 
-  static setVelocity_Callback_float_float_float(mthis, x, y, z) native "AudioListener_setVelocity_Callback_float_float_float";
+  static setVelocity_Callback_3(mthis, x, y, z) native "AudioListener_setVelocity_Callback";
 }
 
 class BlinkAudioParam {
@@ -425,19 +427,19 @@
 
   static value_Getter(mthis) native "AudioParam_value_Getter";
 
-  static value_Setter_float(mthis, value) native "AudioParam_value_Setter";
+  static value_Setter(mthis, value) native "AudioParam_value_Setter";
 
-  static cancelScheduledValues_Callback_double(mthis, startTime) native "AudioParam_cancelScheduledValues_Callback_double";
+  static cancelScheduledValues_Callback_1(mthis, startTime) native "AudioParam_cancelScheduledValues_Callback";
 
-  static exponentialRampToValueAtTime_Callback_float_double(mthis, value, time) native "AudioParam_exponentialRampToValueAtTime_Callback_float_double";
+  static exponentialRampToValueAtTime_Callback_2(mthis, value, time) native "AudioParam_exponentialRampToValueAtTime_Callback";
 
-  static linearRampToValueAtTime_Callback_float_double(mthis, value, time) native "AudioParam_linearRampToValueAtTime_Callback_float_double";
+  static linearRampToValueAtTime_Callback_2(mthis, value, time) native "AudioParam_linearRampToValueAtTime_Callback";
 
-  static setTargetAtTime_Callback_float_double_double(mthis, target, time, timeConstant) native "AudioParam_setTargetAtTime_Callback_float_double_double";
+  static setTargetAtTime_Callback_3(mthis, target, time, timeConstant) native "AudioParam_setTargetAtTime_Callback";
 
-  static setValueAtTime_Callback_float_double(mthis, value, time) native "AudioParam_setValueAtTime_Callback_float_double";
+  static setValueAtTime_Callback_2(mthis, value, time) native "AudioParam_setValueAtTime_Callback";
 
-  static setValueCurveAtTime_Callback_Float32Array_double_double(mthis, values, time, duration) native "AudioParam_setValueCurveAtTime_Callback";
+  static setValueCurveAtTime_Callback_3(mthis, values, time, duration) native "AudioParam_setValueCurveAtTime_Callback";
 }
 
 class BlinkAudioProcessingEvent {
@@ -451,7 +453,7 @@
 class BlinkAudioTrack {
   static enabled_Getter(mthis) native "AudioTrack_enabled_Getter";
 
-  static enabled_Setter_boolean(mthis, value) native "AudioTrack_enabled_Setter";
+  static enabled_Setter(mthis, value) native "AudioTrack_enabled_Setter";
 
   static id_Getter(mthis) native "AudioTrack_id_Getter";
 
@@ -465,9 +467,9 @@
 class BlinkAudioTrackList {
   static length_Getter(mthis) native "AudioTrackList_length_Getter";
 
-  static $__getter___Callback_ul(mthis, index) native "AudioTrackList___getter___Callback_unsigned long";
+  static $__getter___Callback_1(mthis, index) native "AudioTrackList___getter___Callback";
 
-  static getTrackById_Callback_DOMString(mthis, id) native "AudioTrackList_getTrackById_Callback_DOMString";
+  static getTrackById_Callback_1(mthis, id) native "AudioTrackList_getTrackById_Callback";
 }
 
 class BlinkAutocompleteErrorEvent {
@@ -493,7 +495,7 @@
 class BlinkBeforeUnloadEvent {
   static returnValue_Getter(mthis) native "BeforeUnloadEvent_returnValue_Getter";
 
-  static returnValue_Setter_DOMString(mthis, value) native "BeforeUnloadEvent_returnValue_Setter";
+  static returnValue_Setter(mthis, value) native "BeforeUnloadEvent_returnValue_Setter";
 }
 
 class BlinkBiquadFilterNode {
@@ -507,13 +509,13 @@
 
   static type_Getter(mthis) native "BiquadFilterNode_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "BiquadFilterNode_type_Setter";
+  static type_Setter(mthis, value) native "BiquadFilterNode_type_Setter";
 
-  static getFrequencyResponse_Callback_Float32Array_Float32Array_Float32Array(mthis, frequencyHz, magResponse, phaseResponse) native "BiquadFilterNode_getFrequencyResponse_Callback_Float32Array_Float32Array_Float32Array";
+  static getFrequencyResponse_Callback_3(mthis, frequencyHz, magResponse, phaseResponse) native "BiquadFilterNode_getFrequencyResponse_Callback";
 }
 
 class BlinkBlob {
-  static constructorCallback_Array_DOMString_DOMString(blobParts, type, endings) native "Blob_constructorCallback";
+  static constructorCallback_3(blobParts, type, endings) native "Blob_constructorCallback";
 
   static size_Getter(mthis) native "Blob_size_Getter";
 
@@ -521,11 +523,11 @@
 
   static close_Callback(mthis) native "Blob_close_Callback";
 
-  static slice_Callback_ll_ll_DOMString(mthis, start, end, contentType) native "Blob_slice_Callback_long long_long long_DOMString";
+  static slice_Callback_3(mthis, start, end, contentType) native "Blob_slice_Callback";
 
-  static slice_Callback_ll_ll(mthis, start, end) native "Blob_slice_Callback_long long_long long";
+  static slice_Callback_2(mthis, start, end) native "Blob_slice_Callback";
 
-  static slice_Callback_ll(mthis, start) native "Blob_slice_Callback_long long";
+  static slice_Callback_1(mthis, start) native "Blob_slice_Callback";
 
   static slice_Callback(mthis) native "Blob_slice_Callback";
 }
@@ -541,19 +543,19 @@
 class BlinkCharacterData {
   static data_Getter(mthis) native "CharacterData_data_Getter";
 
-  static data_Setter_DOMString(mthis, value) native "CharacterData_data_Setter";
+  static data_Setter(mthis, value) native "CharacterData_data_Setter";
 
   static length_Getter(mthis) native "CharacterData_length_Getter";
 
-  static appendData_Callback_DOMString(mthis, data) native "CharacterData_appendData_Callback_DOMString";
+  static appendData_Callback_1(mthis, data) native "CharacterData_appendData_Callback";
 
-  static deleteData_Callback_ul_ul(mthis, offset, length) native "CharacterData_deleteData_Callback_unsigned long_unsigned long";
+  static deleteData_Callback_2(mthis, offset, length) native "CharacterData_deleteData_Callback";
 
-  static insertData_Callback_ul_DOMString(mthis, offset, data) native "CharacterData_insertData_Callback_unsigned long_DOMString";
+  static insertData_Callback_2(mthis, offset, data) native "CharacterData_insertData_Callback";
 
-  static replaceData_Callback_ul_ul_DOMString(mthis, offset, length, data) native "CharacterData_replaceData_Callback_unsigned long_unsigned long_DOMString";
+  static replaceData_Callback_3(mthis, offset, length, data) native "CharacterData_replaceData_Callback";
 
-  static substringData_Callback_ul_ul(mthis, offset, length) native "CharacterData_substringData_Callback_unsigned long_unsigned long";
+  static substringData_Callback_2(mthis, offset, length) native "CharacterData_substringData_Callback";
 
   static nextElementSibling_Getter(mthis) native "CharacterData_nextElementSibling_Getter";
 
@@ -565,21 +567,21 @@
 
   static getDestinationInsertionPoints_Callback(mthis) native "Text_getDestinationInsertionPoints_Callback";
 
-  static splitText_Callback_ul(mthis, offset) native "Text_splitText_Callback_unsigned long";
+  static splitText_Callback_1(mthis, offset) native "Text_splitText_Callback";
 }
 
 class BlinkCDATASection {}
 
 class BlinkCSS {
-  static supports_Callback_DOMString_DOMString(mthis, property, value) native "CSS_supports_Callback_DOMString_DOMString";
+  static supports_Callback_2(mthis, property, value) native "CSS_supports_Callback";
 
-  static supports_Callback_DOMString(mthis, conditionText) native "CSS_supports_Callback_DOMString";
+  static supports_Callback_1(mthis, conditionText) native "CSS_supports_Callback";
 }
 
 class BlinkCSSRule {
   static cssText_Getter(mthis) native "CSSRule_cssText_Getter";
 
-  static cssText_Setter_DOMString(mthis, value) native "CSSRule_cssText_Setter";
+  static cssText_Setter(mthis, value) native "CSSRule_cssText_Setter";
 
   static parentRule_Getter(mthis) native "CSSRule_parentRule_Getter";
 
@@ -591,7 +593,7 @@
 class BlinkCSSCharsetRule {
   static encoding_Getter(mthis) native "CSSCharsetRule_encoding_Getter";
 
-  static encoding_Setter_DOMString(mthis, value) native "CSSCharsetRule_encoding_Setter";
+  static encoding_Setter(mthis, value) native "CSSCharsetRule_encoding_Setter";
 }
 
 class BlinkCSSFontFaceRule {
@@ -609,7 +611,7 @@
 class BlinkCSSKeyframeRule {
   static keyText_Getter(mthis) native "CSSKeyframeRule_keyText_Getter";
 
-  static keyText_Setter_DOMString(mthis, value) native "CSSKeyframeRule_keyText_Setter";
+  static keyText_Setter(mthis, value) native "CSSKeyframeRule_keyText_Setter";
 
   static style_Getter(mthis) native "CSSKeyframeRule_style_Getter";
 }
@@ -619,15 +621,15 @@
 
   static name_Getter(mthis) native "CSSKeyframesRule_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "CSSKeyframesRule_name_Setter";
+  static name_Setter(mthis, value) native "CSSKeyframesRule_name_Setter";
 
-  static $__getter___Callback_ul(mthis, index) native "CSSKeyframesRule___getter___Callback_unsigned long";
+  static $__getter___Callback_1(mthis, index) native "CSSKeyframesRule___getter___Callback";
 
-  static deleteRule_Callback_DOMString(mthis, key) native "CSSKeyframesRule_deleteRule_Callback_DOMString";
+  static deleteRule_Callback_1(mthis, key) native "CSSKeyframesRule_deleteRule_Callback";
 
-  static findRule_Callback_DOMString(mthis, key) native "CSSKeyframesRule_findRule_Callback_DOMString";
+  static findRule_Callback_1(mthis, key) native "CSSKeyframesRule_findRule_Callback";
 
-  static insertRule_Callback_DOMString(mthis, rule) native "CSSKeyframesRule_insertRule_Callback_DOMString";
+  static insertRule_Callback_1(mthis, rule) native "CSSKeyframesRule_insertRule_Callback";
 }
 
 class BlinkCSSMediaRule {
@@ -635,15 +637,15 @@
 
   static media_Getter(mthis) native "CSSMediaRule_media_Getter";
 
-  static deleteRule_Callback_ul(mthis, index) native "CSSMediaRule_deleteRule_Callback_unsigned long";
+  static deleteRule_Callback_1(mthis, index) native "CSSMediaRule_deleteRule_Callback";
 
-  static insertRule_Callback_DOMString_ul(mthis, rule, index) native "CSSMediaRule_insertRule_Callback_DOMString_unsigned long";
+  static insertRule_Callback_2(mthis, rule, index) native "CSSMediaRule_insertRule_Callback";
 }
 
 class BlinkCSSPageRule {
   static selectorText_Getter(mthis) native "CSSPageRule_selectorText_Getter";
 
-  static selectorText_Setter_DOMString(mthis, value) native "CSSPageRule_selectorText_Setter";
+  static selectorText_Setter(mthis, value) native "CSSPageRule_selectorText_Setter";
 
   static style_Getter(mthis) native "CSSPageRule_style_Getter";
 }
@@ -655,39 +657,39 @@
 class BlinkCSSRuleList {
   static length_Getter(mthis) native "CSSRuleList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "CSSRuleList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "CSSRuleList_item_Callback";
 }
 
 class BlinkCSSStyleDeclaration {
   static cssText_Getter(mthis) native "CSSStyleDeclaration_cssText_Getter";
 
-  static cssText_Setter_DOMString(mthis, value) native "CSSStyleDeclaration_cssText_Setter";
+  static cssText_Setter(mthis, value) native "CSSStyleDeclaration_cssText_Setter";
 
   static length_Getter(mthis) native "CSSStyleDeclaration_length_Getter";
 
   static parentRule_Getter(mthis) native "CSSStyleDeclaration_parentRule_Getter";
 
-  static $__getter___Callback_DOMString(mthis, name) native "CSSStyleDeclaration___getter___Callback";
+  static $__getter___Callback_1(mthis, name) native "CSSStyleDeclaration___getter___Callback";
 
-  static $__propertyQuery___Callback_DOMString(mthis, name) native "CSSStyleDeclaration___propertyQuery___Callback";
+  static $__propertyQuery___Callback_1(mthis, name) native "CSSStyleDeclaration___propertyQuery___Callback";
 
-  static $__setter___Callback_DOMString_DOMString(mthis, propertyName, propertyValue) native "CSSStyleDeclaration___setter___Callback";
+  static $__setter___Callback_2(mthis, propertyName, propertyValue) native "CSSStyleDeclaration___setter___Callback";
 
-  static getPropertyPriority_Callback_DOMString(mthis, propertyName) native "CSSStyleDeclaration_getPropertyPriority_Callback_DOMString";
+  static getPropertyPriority_Callback_1(mthis, propertyName) native "CSSStyleDeclaration_getPropertyPriority_Callback";
 
-  static getPropertyValue_Callback_DOMString(mthis, propertyName) native "CSSStyleDeclaration_getPropertyValue_Callback_DOMString";
+  static getPropertyValue_Callback_1(mthis, propertyName) native "CSSStyleDeclaration_getPropertyValue_Callback";
 
-  static item_Callback_ul(mthis, index) native "CSSStyleDeclaration_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "CSSStyleDeclaration_item_Callback";
 
-  static removeProperty_Callback_DOMString(mthis, propertyName) native "CSSStyleDeclaration_removeProperty_Callback_DOMString";
+  static removeProperty_Callback_1(mthis, propertyName) native "CSSStyleDeclaration_removeProperty_Callback";
 
-  static setProperty_Callback_DOMString_DOMString_DOMString(mthis, propertyName, value, priority) native "CSSStyleDeclaration_setProperty_Callback_DOMString_DOMString_DOMString";
+  static setProperty_Callback_3(mthis, propertyName, value, priority) native "CSSStyleDeclaration_setProperty_Callback";
 }
 
 class BlinkCSSStyleRule {
   static selectorText_Getter(mthis) native "CSSStyleRule_selectorText_Getter";
 
-  static selectorText_Setter_DOMString(mthis, value) native "CSSStyleRule_selectorText_Setter";
+  static selectorText_Setter(mthis, value) native "CSSStyleRule_selectorText_Setter";
 
   static style_Getter(mthis) native "CSSStyleRule_style_Getter";
 }
@@ -695,7 +697,7 @@
 class BlinkStyleSheet {
   static disabled_Getter(mthis) native "StyleSheet_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "StyleSheet_disabled_Setter";
+  static disabled_Setter(mthis, value) native "StyleSheet_disabled_Setter";
 
   static href_Getter(mthis) native "StyleSheet_href_Getter";
 
@@ -717,17 +719,17 @@
 
   static rules_Getter(mthis) native "CSSStyleSheet_rules_Getter";
 
-  static addRule_Callback_DOMString_DOMString_ul(mthis, selector, style, index) native "CSSStyleSheet_addRule_Callback_DOMString_DOMString_unsigned long";
+  static addRule_Callback_3(mthis, selector, style, index) native "CSSStyleSheet_addRule_Callback";
 
-  static addRule_Callback_DOMString_DOMString(mthis, selector, style) native "CSSStyleSheet_addRule_Callback_DOMString_DOMString";
+  static addRule_Callback_2(mthis, selector, style) native "CSSStyleSheet_addRule_Callback";
 
-  static deleteRule_Callback_ul(mthis, index) native "CSSStyleSheet_deleteRule_Callback_unsigned long";
+  static deleteRule_Callback_1(mthis, index) native "CSSStyleSheet_deleteRule_Callback";
 
-  static insertRule_Callback_DOMString_ul(mthis, rule, index) native "CSSStyleSheet_insertRule_Callback_DOMString_unsigned long";
+  static insertRule_Callback_2(mthis, rule, index) native "CSSStyleSheet_insertRule_Callback";
 
-  static insertRule_Callback_DOMString(mthis, rule) native "CSSStyleSheet_insertRule_Callback_DOMString";
+  static insertRule_Callback_1(mthis, rule) native "CSSStyleSheet_insertRule_Callback";
 
-  static removeRule_Callback_ul(mthis, index) native "CSSStyleSheet_removeRule_Callback_unsigned long";
+  static removeRule_Callback_1(mthis, index) native "CSSStyleSheet_removeRule_Callback";
 }
 
 class BlinkCSSSupportsRule {
@@ -735,9 +737,9 @@
 
   static cssRules_Getter(mthis) native "CSSSupportsRule_cssRules_Getter";
 
-  static deleteRule_Callback_ul(mthis, index) native "CSSSupportsRule_deleteRule_Callback_unsigned long";
+  static deleteRule_Callback_1(mthis, index) native "CSSSupportsRule_deleteRule_Callback";
 
-  static insertRule_Callback_DOMString_ul(mthis, rule, index) native "CSSSupportsRule_insertRule_Callback_DOMString_unsigned long";
+  static insertRule_Callback_2(mthis, rule, index) native "CSSSupportsRule_insertRule_Callback";
 }
 
 class BlinkCSSUnknownRule {}
@@ -745,7 +747,7 @@
 class BlinkCSSValueList {
   static length_Getter(mthis) native "CSSValueList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "CSSValueList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "CSSValueList_item_Callback";
 }
 
 class BlinkCSSViewportRule {
@@ -754,20 +756,30 @@
 
 class BlinkCache {}
 
-class BlinkCacheStorage {}
+class BlinkCacheStorage {
+  static create_Callback_1(mthis, cacheName) native "CacheStorage_create_Callback";
+
+  static delete_Callback_1(mthis, cacheName) native "CacheStorage_delete_Callback";
+
+  static get_Callback_1(mthis, cacheName) native "CacheStorage_get_Callback";
+
+  static has_Callback_1(mthis, cacheName) native "CacheStorage_has_Callback";
+
+  static keys_Callback(mthis) native "CacheStorage_keys_Callback";
+}
 
 class BlinkCanvas2DContextAttributes {
   static alpha_Getter(mthis) native "Canvas2DContextAttributes_alpha_Getter";
 
-  static alpha_Setter_boolean(mthis, value) native "Canvas2DContextAttributes_alpha_Setter";
+  static alpha_Setter(mthis, value) native "Canvas2DContextAttributes_alpha_Setter";
 
   static storage_Getter(mthis) native "Canvas2DContextAttributes_storage_Getter";
 
-  static storage_Setter_DOMString(mthis, value) native "Canvas2DContextAttributes_storage_Setter";
+  static storage_Setter(mthis, value) native "Canvas2DContextAttributes_storage_Setter";
 }
 
 class BlinkCanvasGradient {
-  static addColorStop_Callback_float_DOMString(mthis, offset, color) native "CanvasGradient_addColorStop_Callback_float_DOMString";
+  static addColorStop_Callback_2(mthis, offset, color) native "CanvasGradient_addColorStop_Callback";
 }
 
 class BlinkCanvasPathMethods {}
@@ -779,225 +791,199 @@
 
   static currentTransform_Getter(mthis) native "CanvasRenderingContext2D_currentTransform_Getter";
 
-  static currentTransform_Setter_SVGMatrix(mthis, value) native "CanvasRenderingContext2D_currentTransform_Setter";
+  static currentTransform_Setter(mthis, value) native "CanvasRenderingContext2D_currentTransform_Setter";
 
   static fillStyle_Getter(mthis) native "CanvasRenderingContext2D_fillStyle_Getter";
 
-  static fillStyle_Setter_object(mthis, value) native "CanvasRenderingContext2D_fillStyle_Setter";
+  static fillStyle_Setter(mthis, value) native "CanvasRenderingContext2D_fillStyle_Setter";
 
   static font_Getter(mthis) native "CanvasRenderingContext2D_font_Getter";
 
-  static font_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_font_Setter";
+  static font_Setter(mthis, value) native "CanvasRenderingContext2D_font_Setter";
 
   static globalAlpha_Getter(mthis) native "CanvasRenderingContext2D_globalAlpha_Getter";
 
-  static globalAlpha_Setter_float(mthis, value) native "CanvasRenderingContext2D_globalAlpha_Setter";
+  static globalAlpha_Setter(mthis, value) native "CanvasRenderingContext2D_globalAlpha_Setter";
 
   static globalCompositeOperation_Getter(mthis) native "CanvasRenderingContext2D_globalCompositeOperation_Getter";
 
-  static globalCompositeOperation_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
+  static globalCompositeOperation_Setter(mthis, value) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
 
   static imageSmoothingEnabled_Getter(mthis) native "CanvasRenderingContext2D_imageSmoothingEnabled_Getter";
 
-  static imageSmoothingEnabled_Setter_boolean(mthis, value) native "CanvasRenderingContext2D_imageSmoothingEnabled_Setter";
+  static imageSmoothingEnabled_Setter(mthis, value) native "CanvasRenderingContext2D_imageSmoothingEnabled_Setter";
 
   static lineCap_Getter(mthis) native "CanvasRenderingContext2D_lineCap_Getter";
 
-  static lineCap_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_lineCap_Setter";
+  static lineCap_Setter(mthis, value) native "CanvasRenderingContext2D_lineCap_Setter";
 
   static lineDashOffset_Getter(mthis) native "CanvasRenderingContext2D_lineDashOffset_Getter";
 
-  static lineDashOffset_Setter_float(mthis, value) native "CanvasRenderingContext2D_lineDashOffset_Setter";
+  static lineDashOffset_Setter(mthis, value) native "CanvasRenderingContext2D_lineDashOffset_Setter";
 
   static lineJoin_Getter(mthis) native "CanvasRenderingContext2D_lineJoin_Getter";
 
-  static lineJoin_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_lineJoin_Setter";
+  static lineJoin_Setter(mthis, value) native "CanvasRenderingContext2D_lineJoin_Setter";
 
   static lineWidth_Getter(mthis) native "CanvasRenderingContext2D_lineWidth_Getter";
 
-  static lineWidth_Setter_float(mthis, value) native "CanvasRenderingContext2D_lineWidth_Setter";
+  static lineWidth_Setter(mthis, value) native "CanvasRenderingContext2D_lineWidth_Setter";
 
   static miterLimit_Getter(mthis) native "CanvasRenderingContext2D_miterLimit_Getter";
 
-  static miterLimit_Setter_float(mthis, value) native "CanvasRenderingContext2D_miterLimit_Setter";
+  static miterLimit_Setter(mthis, value) native "CanvasRenderingContext2D_miterLimit_Setter";
 
   static shadowBlur_Getter(mthis) native "CanvasRenderingContext2D_shadowBlur_Getter";
 
-  static shadowBlur_Setter_float(mthis, value) native "CanvasRenderingContext2D_shadowBlur_Setter";
+  static shadowBlur_Setter(mthis, value) native "CanvasRenderingContext2D_shadowBlur_Setter";
 
   static shadowColor_Getter(mthis) native "CanvasRenderingContext2D_shadowColor_Getter";
 
-  static shadowColor_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_shadowColor_Setter";
+  static shadowColor_Setter(mthis, value) native "CanvasRenderingContext2D_shadowColor_Setter";
 
   static shadowOffsetX_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetX_Getter";
 
-  static shadowOffsetX_Setter_float(mthis, value) native "CanvasRenderingContext2D_shadowOffsetX_Setter";
+  static shadowOffsetX_Setter(mthis, value) native "CanvasRenderingContext2D_shadowOffsetX_Setter";
 
   static shadowOffsetY_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetY_Getter";
 
-  static shadowOffsetY_Setter_float(mthis, value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
+  static shadowOffsetY_Setter(mthis, value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
 
   static strokeStyle_Getter(mthis) native "CanvasRenderingContext2D_strokeStyle_Getter";
 
-  static strokeStyle_Setter_object(mthis, value) native "CanvasRenderingContext2D_strokeStyle_Setter";
+  static strokeStyle_Setter(mthis, value) native "CanvasRenderingContext2D_strokeStyle_Setter";
 
   static textAlign_Getter(mthis) native "CanvasRenderingContext2D_textAlign_Getter";
 
-  static textAlign_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_textAlign_Setter";
+  static textAlign_Setter(mthis, value) native "CanvasRenderingContext2D_textAlign_Setter";
 
   static textBaseline_Getter(mthis) native "CanvasRenderingContext2D_textBaseline_Getter";
 
-  static textBaseline_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_textBaseline_Setter";
+  static textBaseline_Setter(mthis, value) native "CanvasRenderingContext2D_textBaseline_Setter";
 
-  static addHitRegion_Callback_Dictionary(mthis, options) native "CanvasRenderingContext2D_addHitRegion_Callback_Dictionary";
+  static addHitRegion_Callback_1(mthis, options) native "CanvasRenderingContext2D_addHitRegion_Callback";
+
+  static addHitRegion_Callback(mthis) native "CanvasRenderingContext2D_addHitRegion_Callback";
 
   static beginPath_Callback(mthis) native "CanvasRenderingContext2D_beginPath_Callback";
 
   static clearHitRegions_Callback(mthis) native "CanvasRenderingContext2D_clearHitRegions_Callback";
 
-  static clearRect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_clearRect_Callback_float_float_float_float";
+  static clearRect_Callback_4(mthis, x, y, width, height) native "CanvasRenderingContext2D_clearRect_Callback";
 
   static clip_Callback(mthis) native "CanvasRenderingContext2D_clip_Callback";
 
-  static clip_Callback_DOMString(mthis, path_OR_winding) native "CanvasRenderingContext2D_clip_Callback_DOMString";
+  static clip_Callback_1(mthis, path_OR_winding) native "CanvasRenderingContext2D_clip_Callback";
 
-  static clip_Callback_Path2D(mthis, path_OR_winding) native "CanvasRenderingContext2D_clip_Callback_Path2D";
+  static clip_Callback_2(mthis, path_OR_winding, winding) native "CanvasRenderingContext2D_clip_Callback";
 
-  static clip_Callback_Path2D_DOMString(mthis, path_OR_winding, winding) native "CanvasRenderingContext2D_clip_Callback_Path2D_DOMString";
+  static createImageData_Callback_2(mthis, sw, sh) native "CanvasRenderingContext2D_createImageData_Callback";
 
-  static createImageData_Callback_float_float(mthis, sw, sh) native "CanvasRenderingContext2D_createImageData_Callback_float_float";
+  static createImageData_Callback_1(mthis, imagedata) native "CanvasRenderingContext2D_createImageData_Callback";
 
-  static createImageData_Callback_ImageData(mthis, imagedata) native "CanvasRenderingContext2D_createImageData_Callback_ImageData";
+  static createLinearGradient_Callback_4(mthis, x0, y0, x1, y1) native "CanvasRenderingContext2D_createLinearGradient_Callback";
 
-  static createLinearGradient_Callback_float_float_float_float(mthis, x0, y0, x1, y1) native "CanvasRenderingContext2D_createLinearGradient_Callback_float_float_float_float";
+  static createPattern_Callback_2(mthis, canvas_OR_image, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback";
 
-  static createPattern_Callback_HTMLCanvasElement_DOMString(mthis, canvas_OR_image, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback_HTMLCanvasElement_DOMString";
+  static createRadialGradient_Callback_6(mthis, x0, y0, r0, x1, y1, r1) native "CanvasRenderingContext2D_createRadialGradient_Callback";
 
-  static createPattern_Callback_HTMLVideoElement_DOMString(mthis, canvas_OR_image, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback_HTMLVideoElement_DOMString";
+  static drawFocusIfNeeded_Callback_1(mthis, element_OR_path) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
 
-  static createPattern_Callback_HTMLImageElement_DOMString(mthis, image, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback_HTMLImageElement_DOMString";
+  static drawFocusIfNeeded_Callback_2(mthis, element_OR_path, element) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
 
-  static createRadialGradient_Callback_float_float_float_float_float_float(mthis, x0, y0, r0, x1, y1, r1) native "CanvasRenderingContext2D_createRadialGradient_Callback_float_float_float_float_float_float";
+  static drawImage_Callback_3(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback";
 
-  static drawFocusIfNeeded_Callback_Element(mthis, element_OR_path) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback_Element";
+  static drawImage_Callback_5(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback";
 
-  static drawFocusIfNeeded_Callback_Path2D_Element(mthis, element_OR_path, element) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback_Path2D_Element";
-
-  static drawImage_Callback_HTMLImageElement_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_HTMLImageElement_float_float";
-
-  static drawImage_Callback_HTMLImageElement_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLImageElement_float_float_float_float";
-
-  static drawImage_Callback_HTMLImageElement_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLImageElement_float_float_float_float_float_float_float_float";
-
-  static drawImage_Callback_HTMLCanvasElement_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_HTMLCanvasElement_float_float";
-
-  static drawImage_Callback_HTMLCanvasElement_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLCanvasElement_float_float_float_float";
-
-  static drawImage_Callback_HTMLCanvasElement_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLCanvasElement_float_float_float_float_float_float_float_float";
-
-  static drawImage_Callback_HTMLVideoElement_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_HTMLVideoElement_float_float";
-
-  static drawImage_Callback_HTMLVideoElement_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLVideoElement_float_float_float_float";
-
-  static drawImage_Callback_HTMLVideoElement_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLVideoElement_float_float_float_float_float_float_float_float";
-
-  static drawImage_Callback_ImageBitmap_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_ImageBitmap_float_float";
-
-  static drawImage_Callback_ImageBitmap_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_ImageBitmap_float_float_float_float";
-
-  static drawImage_Callback_ImageBitmap_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_ImageBitmap_float_float_float_float_float_float_float_float";
+  static drawImage_Callback_9(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback";
 
   static fill_Callback(mthis) native "CanvasRenderingContext2D_fill_Callback";
 
-  static fill_Callback_DOMString(mthis, path_OR_winding) native "CanvasRenderingContext2D_fill_Callback_DOMString";
+  static fill_Callback_1(mthis, path_OR_winding) native "CanvasRenderingContext2D_fill_Callback";
 
-  static fill_Callback_Path2D(mthis, path_OR_winding) native "CanvasRenderingContext2D_fill_Callback_Path2D";
+  static fill_Callback_2(mthis, path_OR_winding, winding) native "CanvasRenderingContext2D_fill_Callback";
 
-  static fill_Callback_Path2D_DOMString(mthis, path_OR_winding, winding) native "CanvasRenderingContext2D_fill_Callback_Path2D_DOMString";
+  static fillRect_Callback_4(mthis, x, y, width, height) native "CanvasRenderingContext2D_fillRect_Callback";
 
-  static fillRect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_fillRect_Callback_float_float_float_float";
+  static fillText_Callback_4(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_fillText_Callback";
 
-  static fillText_Callback_DOMString_float_float_float(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_fillText_Callback_DOMString_float_float_float";
-
-  static fillText_Callback_DOMString_float_float(mthis, text, x, y) native "CanvasRenderingContext2D_fillText_Callback_DOMString_float_float";
+  static fillText_Callback_3(mthis, text, x, y) native "CanvasRenderingContext2D_fillText_Callback";
 
   static getContextAttributes_Callback(mthis) native "CanvasRenderingContext2D_getContextAttributes_Callback";
 
-  static getImageData_Callback_float_float_float_float(mthis, sx, sy, sw, sh) native "CanvasRenderingContext2D_getImageData_Callback_float_float_float_float";
+  static getImageData_Callback_4(mthis, sx, sy, sw, sh) native "CanvasRenderingContext2D_getImageData_Callback";
 
   static getLineDash_Callback(mthis) native "CanvasRenderingContext2D_getLineDash_Callback";
 
   static isContextLost_Callback(mthis) native "CanvasRenderingContext2D_isContextLost_Callback";
 
-  static isPointInPath_Callback_float_float(mthis, path_OR_x, x_OR_y) native "CanvasRenderingContext2D_isPointInPath_Callback_float_float";
+  static isPointInPath_Callback_2(mthis, path_OR_x, x_OR_y) native "CanvasRenderingContext2D_isPointInPath_Callback";
 
-  static isPointInPath_Callback_float_float_DOMString(mthis, path_OR_x, x_OR_y, winding_OR_y) native "CanvasRenderingContext2D_isPointInPath_Callback_float_float_DOMString";
+  static isPointInPath_Callback_3(mthis, path_OR_x, x_OR_y, winding_OR_y) native "CanvasRenderingContext2D_isPointInPath_Callback";
 
-  static isPointInPath_Callback_Path2D_float_float(mthis, path_OR_x, x_OR_y, winding_OR_y) native "CanvasRenderingContext2D_isPointInPath_Callback_Path2D_float_float";
+  static isPointInPath_Callback_4(mthis, path_OR_x, x_OR_y, winding_OR_y, winding) native "CanvasRenderingContext2D_isPointInPath_Callback";
 
-  static isPointInPath_Callback_Path2D_float_float_DOMString(mthis, path_OR_x, x_OR_y, winding_OR_y, winding) native "CanvasRenderingContext2D_isPointInPath_Callback_Path2D_float_float_DOMString";
+  static isPointInStroke_Callback_2(mthis, path_OR_x, x_OR_y) native "CanvasRenderingContext2D_isPointInStroke_Callback";
 
-  static isPointInStroke_Callback_float_float(mthis, path_OR_x, x_OR_y) native "CanvasRenderingContext2D_isPointInStroke_Callback_float_float";
+  static isPointInStroke_Callback_3(mthis, path_OR_x, x_OR_y, y) native "CanvasRenderingContext2D_isPointInStroke_Callback";
 
-  static isPointInStroke_Callback_Path2D_float_float(mthis, path_OR_x, x_OR_y, y) native "CanvasRenderingContext2D_isPointInStroke_Callback_Path2D_float_float";
+  static measureText_Callback_1(mthis, text) native "CanvasRenderingContext2D_measureText_Callback";
 
-  static measureText_Callback_DOMString(mthis, text) native "CanvasRenderingContext2D_measureText_Callback_DOMString";
+  static putImageData_Callback_3(mthis, imagedata, dx, dy) native "CanvasRenderingContext2D_putImageData_Callback";
 
-  static putImageData_Callback_ImageData_float_float(mthis, imagedata, dx, dy) native "CanvasRenderingContext2D_putImageData_Callback_ImageData_float_float";
+  static putImageData_Callback_7(mthis, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_putImageData_Callback";
 
-  static putImageData_Callback_ImageData_float_float_float_float_float_float(mthis, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_putImageData_Callback_ImageData_float_float_float_float_float_float";
-
-  static removeHitRegion_Callback_DOMString(mthis, id) native "CanvasRenderingContext2D_removeHitRegion_Callback_DOMString";
+  static removeHitRegion_Callback_1(mthis, id) native "CanvasRenderingContext2D_removeHitRegion_Callback";
 
   static resetTransform_Callback(mthis) native "CanvasRenderingContext2D_resetTransform_Callback";
 
   static restore_Callback(mthis) native "CanvasRenderingContext2D_restore_Callback";
 
-  static rotate_Callback_float(mthis, angle) native "CanvasRenderingContext2D_rotate_Callback_float";
+  static rotate_Callback_1(mthis, angle) native "CanvasRenderingContext2D_rotate_Callback";
 
   static save_Callback(mthis) native "CanvasRenderingContext2D_save_Callback";
 
-  static scale_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_scale_Callback_float_float";
+  static scale_Callback_2(mthis, x, y) native "CanvasRenderingContext2D_scale_Callback";
 
-  static scrollPathIntoView_Callback_Path2D(mthis, path) native "CanvasRenderingContext2D_scrollPathIntoView_Callback_Path2D";
+  static scrollPathIntoView_Callback_1(mthis, path) native "CanvasRenderingContext2D_scrollPathIntoView_Callback";
 
   static scrollPathIntoView_Callback(mthis) native "CanvasRenderingContext2D_scrollPathIntoView_Callback";
 
-  static setLineDash_Callback_SEQ_float_SEQ(mthis, dash) native "CanvasRenderingContext2D_setLineDash_Callback_sequence<unrestricted float>";
+  static setLineDash_Callback_1(mthis, dash) native "CanvasRenderingContext2D_setLineDash_Callback";
 
-  static setTransform_Callback_float_float_float_float_float_float(mthis, a, b, c, d, e, f) native "CanvasRenderingContext2D_setTransform_Callback_float_float_float_float_float_float";
+  static setTransform_Callback_6(mthis, a, b, c, d, e, f) native "CanvasRenderingContext2D_setTransform_Callback";
 
   static stroke_Callback(mthis) native "CanvasRenderingContext2D_stroke_Callback";
 
-  static stroke_Callback_Path2D(mthis, path) native "CanvasRenderingContext2D_stroke_Callback_Path2D";
+  static stroke_Callback_1(mthis, path) native "CanvasRenderingContext2D_stroke_Callback";
 
-  static strokeRect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_strokeRect_Callback_float_float_float_float";
+  static strokeRect_Callback_4(mthis, x, y, width, height) native "CanvasRenderingContext2D_strokeRect_Callback";
 
-  static strokeText_Callback_DOMString_float_float_float(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_strokeText_Callback_DOMString_float_float_float";
+  static strokeText_Callback_4(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_strokeText_Callback";
 
-  static strokeText_Callback_DOMString_float_float(mthis, text, x, y) native "CanvasRenderingContext2D_strokeText_Callback_DOMString_float_float";
+  static strokeText_Callback_3(mthis, text, x, y) native "CanvasRenderingContext2D_strokeText_Callback";
 
-  static transform_Callback_float_float_float_float_float_float(mthis, a, b, c, d, e, f) native "CanvasRenderingContext2D_transform_Callback_float_float_float_float_float_float";
+  static transform_Callback_6(mthis, a, b, c, d, e, f) native "CanvasRenderingContext2D_transform_Callback";
 
-  static translate_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_translate_Callback_float_float";
+  static translate_Callback_2(mthis, x, y) native "CanvasRenderingContext2D_translate_Callback";
 
-  static arc_Callback_float_float_float_float_float_boolean(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_arc_Callback_float_float_float_float_float_boolean";
+  static arc_Callback_6(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_arc_Callback";
 
-  static arcTo_Callback_float_float_float_float_float(mthis, x1, y1, x2, y2, radius) native "CanvasRenderingContext2D_arcTo_Callback_float_float_float_float_float";
+  static arcTo_Callback_5(mthis, x1, y1, x2, y2, radius) native "CanvasRenderingContext2D_arcTo_Callback";
 
-  static bezierCurveTo_Callback_float_float_float_float_float_float(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "CanvasRenderingContext2D_bezierCurveTo_Callback_float_float_float_float_float_float";
+  static bezierCurveTo_Callback_6(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
 
   static closePath_Callback(mthis) native "CanvasRenderingContext2D_closePath_Callback";
 
-  static ellipse_Callback_float_float_float_float_float_float_float_boolean(mthis, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_ellipse_Callback_float_float_float_float_float_float_float_boolean";
+  static ellipse_Callback_8(mthis, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_ellipse_Callback";
 
-  static lineTo_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_lineTo_Callback_float_float";
+  static lineTo_Callback_2(mthis, x, y) native "CanvasRenderingContext2D_lineTo_Callback";
 
-  static moveTo_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_moveTo_Callback_float_float";
+  static moveTo_Callback_2(mthis, x, y) native "CanvasRenderingContext2D_moveTo_Callback";
 
-  static quadraticCurveTo_Callback_float_float_float_float(mthis, cpx, cpy, x, y) native "CanvasRenderingContext2D_quadraticCurveTo_Callback_float_float_float_float";
+  static quadraticCurveTo_Callback_4(mthis, cpx, cpy, x, y) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
 
-  static rect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_rect_Callback_float_float_float_float";
+  static rect_Callback_4(mthis, x, y, width, height) native "CanvasRenderingContext2D_rect_Callback";
 }
 
 class BlinkChannelMergerNode {}
@@ -1009,7 +995,7 @@
 }
 
 class BlinkCircularRegion {
-  static constructorCallback_Dictionary(init) native "CircularRegion_constructorCallback_Dictionary";
+  static constructorCallback_1(init) native "CircularRegion_constructorCallback";
 
   static latitude_Getter(mthis) native "CircularRegion_latitude_Getter";
 
@@ -1035,7 +1021,7 @@
 class BlinkClientRectList {
   static length_Getter(mthis) native "ClientRectList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "ClientRectList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "ClientRectList_item_Callback";
 }
 
 class BlinkCloseEvent {
@@ -1049,7 +1035,7 @@
 }
 
 class BlinkComment {
-  static constructorCallback_DOMString(data) native "Comment_constructorCallback_DOMString";
+  static constructorCallback_1(data) native "Comment_constructorCallback";
 
   static constructorCallback() native "Comment_constructorCallback";
 }
@@ -1075,7 +1061,7 @@
 
   static which_Getter(mthis) native "UIEvent_which_Getter";
 
-  static initUIEvent_Callback_DOMString_boolean_boolean_Window_long(mthis, type, canBubble, cancelable, view, detail) native "UIEvent_initUIEvent_Callback_DOMString_boolean_boolean_Window_long";
+  static initUIEvent_Callback_5(mthis, type, canBubble, cancelable, view, detail) native "UIEvent_initUIEvent_Callback";
 }
 
 class BlinkCompositionEvent {
@@ -1089,55 +1075,55 @@
 
   static getSegments_Callback(mthis) native "CompositionEvent_getSegments_Callback";
 
-  static initCompositionEvent_Callback_DOMString_boolean_boolean_Window_DOMString(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "CompositionEvent_initCompositionEvent_Callback_DOMString_boolean_boolean_Window_DOMString";
+  static initCompositionEvent_Callback_5(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "CompositionEvent_initCompositionEvent_Callback";
 }
 
 class BlinkConsoleBase {
-  static assert_Callback_boolean_object(mthis, condition, arg) native "ConsoleBase_assert_Callback_boolean_object";
+  static assert_Callback_2(mthis, condition, arg) native "ConsoleBase_assert_Callback";
 
-  static clear_Callback_object(mthis, arg) native "ConsoleBase_clear_Callback_object";
+  static clear_Callback_1(mthis, arg) native "ConsoleBase_clear_Callback";
 
-  static count_Callback_object(mthis, arg) native "ConsoleBase_count_Callback_object";
+  static count_Callback_1(mthis, arg) native "ConsoleBase_count_Callback";
 
-  static debug_Callback_object(mthis, arg) native "ConsoleBase_debug_Callback_object";
+  static debug_Callback_1(mthis, arg) native "ConsoleBase_debug_Callback";
 
-  static dir_Callback_object(mthis, arg) native "ConsoleBase_dir_Callback_object";
+  static dir_Callback_1(mthis, arg) native "ConsoleBase_dir_Callback";
 
-  static dirxml_Callback_object(mthis, arg) native "ConsoleBase_dirxml_Callback_object";
+  static dirxml_Callback_1(mthis, arg) native "ConsoleBase_dirxml_Callback";
 
-  static error_Callback_object(mthis, arg) native "ConsoleBase_error_Callback_object";
+  static error_Callback_1(mthis, arg) native "ConsoleBase_error_Callback";
 
-  static group_Callback_object(mthis, arg) native "ConsoleBase_group_Callback_object";
+  static group_Callback_1(mthis, arg) native "ConsoleBase_group_Callback";
 
-  static groupCollapsed_Callback_object(mthis, arg) native "ConsoleBase_groupCollapsed_Callback_object";
+  static groupCollapsed_Callback_1(mthis, arg) native "ConsoleBase_groupCollapsed_Callback";
 
   static groupEnd_Callback(mthis) native "ConsoleBase_groupEnd_Callback";
 
-  static info_Callback_object(mthis, arg) native "ConsoleBase_info_Callback_object";
+  static info_Callback_1(mthis, arg) native "ConsoleBase_info_Callback";
 
-  static log_Callback_object(mthis, arg) native "ConsoleBase_log_Callback_object";
+  static log_Callback_1(mthis, arg) native "ConsoleBase_log_Callback";
 
-  static markTimeline_Callback_DOMString(mthis, title) native "ConsoleBase_markTimeline_Callback_DOMString";
+  static markTimeline_Callback_1(mthis, title) native "ConsoleBase_markTimeline_Callback";
 
-  static profile_Callback_DOMString(mthis, title) native "ConsoleBase_profile_Callback_DOMString";
+  static profile_Callback_1(mthis, title) native "ConsoleBase_profile_Callback";
 
-  static profileEnd_Callback_DOMString(mthis, title) native "ConsoleBase_profileEnd_Callback_DOMString";
+  static profileEnd_Callback_1(mthis, title) native "ConsoleBase_profileEnd_Callback";
 
-  static table_Callback_object(mthis, arg) native "ConsoleBase_table_Callback_object";
+  static table_Callback_1(mthis, arg) native "ConsoleBase_table_Callback";
 
-  static time_Callback_DOMString(mthis, title) native "ConsoleBase_time_Callback_DOMString";
+  static time_Callback_1(mthis, title) native "ConsoleBase_time_Callback";
 
-  static timeEnd_Callback_DOMString(mthis, title) native "ConsoleBase_timeEnd_Callback_DOMString";
+  static timeEnd_Callback_1(mthis, title) native "ConsoleBase_timeEnd_Callback";
 
-  static timeStamp_Callback_DOMString(mthis, title) native "ConsoleBase_timeStamp_Callback_DOMString";
+  static timeStamp_Callback_1(mthis, title) native "ConsoleBase_timeStamp_Callback";
 
-  static timeline_Callback_DOMString(mthis, title) native "ConsoleBase_timeline_Callback_DOMString";
+  static timeline_Callback_1(mthis, title) native "ConsoleBase_timeline_Callback";
 
-  static timelineEnd_Callback_DOMString(mthis, title) native "ConsoleBase_timelineEnd_Callback_DOMString";
+  static timelineEnd_Callback_1(mthis, title) native "ConsoleBase_timelineEnd_Callback";
 
-  static trace_Callback_object(mthis, arg) native "ConsoleBase_trace_Callback_object";
+  static trace_Callback_1(mthis, arg) native "ConsoleBase_trace_Callback";
 
-  static warn_Callback_object(mthis, arg) native "ConsoleBase_warn_Callback_object";
+  static warn_Callback_1(mthis, arg) native "ConsoleBase_warn_Callback";
 }
 
 class BlinkConsole {
@@ -1147,11 +1133,11 @@
 class BlinkConvolverNode {
   static buffer_Getter(mthis) native "ConvolverNode_buffer_Getter";
 
-  static buffer_Setter_AudioBuffer(mthis, value) native "ConvolverNode_buffer_Setter";
+  static buffer_Setter(mthis, value) native "ConvolverNode_buffer_Setter";
 
   static normalize_Getter(mthis) native "ConvolverNode_normalize_Getter";
 
-  static normalize_Setter_boolean(mthis, value) native "ConvolverNode_normalize_Setter";
+  static normalize_Setter(mthis, value) native "ConvolverNode_normalize_Setter";
 }
 
 class BlinkCoordinates {
@@ -1180,12 +1166,26 @@
   static name_Getter(mthis) native "Credential_name_Getter";
 }
 
-class BlinkCredentialsContainer {}
+class BlinkCredentialsContainer {
+  static notifyFailedSignIn_Callback_1(mthis, credential) native "CredentialsContainer_notifyFailedSignIn_Callback";
+
+  static notifyFailedSignIn_Callback(mthis) native "CredentialsContainer_notifyFailedSignIn_Callback";
+
+  static notifySignedIn_Callback_1(mthis, credential) native "CredentialsContainer_notifySignedIn_Callback";
+
+  static notifySignedIn_Callback(mthis) native "CredentialsContainer_notifySignedIn_Callback";
+
+  static notifySignedOut_Callback(mthis) native "CredentialsContainer_notifySignedOut_Callback";
+
+  static request_Callback_1(mthis, options) native "CredentialsContainer_request_Callback";
+
+  static request_Callback(mthis) native "CredentialsContainer_request_Callback";
+}
 
 class BlinkCrypto {
   static subtle_Getter(mthis) native "Crypto_subtle_Getter";
 
-  static getRandomValues_Callback_ArrayBufferView(mthis, array) native "Crypto_getRandomValues_Callback";
+  static getRandomValues_Callback_1(mthis, array) native "Crypto_getRandomValues_Callback";
 }
 
 class BlinkCryptoKey {
@@ -1203,11 +1203,11 @@
 
   static detail_Getter(mthis) native "CustomEvent_detail_Getter";
 
-  static initCustomEvent_Callback_DOMString_boolean_boolean_ScriptValue(mthis, typeArg, canBubbleArg, cancelableArg, detailArg) native "CustomEvent_initCustomEvent_Callback";
+  static initCustomEvent_Callback_4(mthis, typeArg, canBubbleArg, cancelableArg, detailArg) native "CustomEvent_initCustomEvent_Callback";
 }
 
 class BlinkDOMError {
-  static constructorCallback_DOMString_DOMString(name, message) native "DOMError_constructorCallback_DOMString_DOMString";
+  static constructorCallback_2(name, message) native "DOMError_constructorCallback";
 
   static message_Getter(mthis) native "DOMError_message_Getter";
 
@@ -1231,13 +1231,13 @@
 class BlinkDOMFileSystemSync {}
 
 class BlinkDOMImplementation {
-  static createDocument_Callback_DOMString_DOMString_DocumentType(mthis, namespaceURI, qualifiedName, doctype) native "DOMImplementation_createDocument_Callback_DOMString_DOMString_DocumentType";
+  static createDocument_Callback_3(mthis, namespaceURI, qualifiedName, doctype) native "DOMImplementation_createDocument_Callback";
 
-  static createDocumentType_Callback_DOMString_DOMString_DOMString(mthis, qualifiedName, publicId, systemId) native "DOMImplementation_createDocumentType_Callback_DOMString_DOMString_DOMString";
+  static createDocumentType_Callback_3(mthis, qualifiedName, publicId, systemId) native "DOMImplementation_createDocumentType_Callback";
 
-  static createHTMLDocument_Callback_DOMString(mthis, title) native "DOMImplementation_createHTMLDocument_Callback_DOMString";
+  static createHTMLDocument_Callback_1(mthis, title) native "DOMImplementation_createHTMLDocument_Callback";
 
-  static hasFeature_Callback_DOMString_DOMString(mthis, feature, version) native "DOMImplementation_hasFeature_Callback_DOMString_DOMString";
+  static hasFeature_Callback_2(mthis, feature, version) native "DOMImplementation_hasFeature_Callback";
 }
 
 class BlinkDOMMatrixReadOnly {
@@ -1293,105 +1293,105 @@
 class BlinkDOMMatrix {
   static constructorCallback() native "DOMMatrix_constructorCallback";
 
-  static constructorCallback_DOMMatrixReadOnly(other) native "DOMMatrix_constructorCallback_DOMMatrixReadOnly";
+  static constructorCallback_1(other) native "DOMMatrix_constructorCallback";
 
   static a_Getter(mthis) native "DOMMatrix_a_Getter";
 
-  static a_Setter_double(mthis, value) native "DOMMatrix_a_Setter";
+  static a_Setter(mthis, value) native "DOMMatrix_a_Setter";
 
   static b_Getter(mthis) native "DOMMatrix_b_Getter";
 
-  static b_Setter_double(mthis, value) native "DOMMatrix_b_Setter";
+  static b_Setter(mthis, value) native "DOMMatrix_b_Setter";
 
   static c_Getter(mthis) native "DOMMatrix_c_Getter";
 
-  static c_Setter_double(mthis, value) native "DOMMatrix_c_Setter";
+  static c_Setter(mthis, value) native "DOMMatrix_c_Setter";
 
   static d_Getter(mthis) native "DOMMatrix_d_Getter";
 
-  static d_Setter_double(mthis, value) native "DOMMatrix_d_Setter";
+  static d_Setter(mthis, value) native "DOMMatrix_d_Setter";
 
   static e_Getter(mthis) native "DOMMatrix_e_Getter";
 
-  static e_Setter_double(mthis, value) native "DOMMatrix_e_Setter";
+  static e_Setter(mthis, value) native "DOMMatrix_e_Setter";
 
   static f_Getter(mthis) native "DOMMatrix_f_Getter";
 
-  static f_Setter_double(mthis, value) native "DOMMatrix_f_Setter";
+  static f_Setter(mthis, value) native "DOMMatrix_f_Setter";
 
   static m11_Getter(mthis) native "DOMMatrix_m11_Getter";
 
-  static m11_Setter_double(mthis, value) native "DOMMatrix_m11_Setter";
+  static m11_Setter(mthis, value) native "DOMMatrix_m11_Setter";
 
   static m12_Getter(mthis) native "DOMMatrix_m12_Getter";
 
-  static m12_Setter_double(mthis, value) native "DOMMatrix_m12_Setter";
+  static m12_Setter(mthis, value) native "DOMMatrix_m12_Setter";
 
   static m13_Getter(mthis) native "DOMMatrix_m13_Getter";
 
-  static m13_Setter_double(mthis, value) native "DOMMatrix_m13_Setter";
+  static m13_Setter(mthis, value) native "DOMMatrix_m13_Setter";
 
   static m14_Getter(mthis) native "DOMMatrix_m14_Getter";
 
-  static m14_Setter_double(mthis, value) native "DOMMatrix_m14_Setter";
+  static m14_Setter(mthis, value) native "DOMMatrix_m14_Setter";
 
   static m21_Getter(mthis) native "DOMMatrix_m21_Getter";
 
-  static m21_Setter_double(mthis, value) native "DOMMatrix_m21_Setter";
+  static m21_Setter(mthis, value) native "DOMMatrix_m21_Setter";
 
   static m22_Getter(mthis) native "DOMMatrix_m22_Getter";
 
-  static m22_Setter_double(mthis, value) native "DOMMatrix_m22_Setter";
+  static m22_Setter(mthis, value) native "DOMMatrix_m22_Setter";
 
   static m23_Getter(mthis) native "DOMMatrix_m23_Getter";
 
-  static m23_Setter_double(mthis, value) native "DOMMatrix_m23_Setter";
+  static m23_Setter(mthis, value) native "DOMMatrix_m23_Setter";
 
   static m24_Getter(mthis) native "DOMMatrix_m24_Getter";
 
-  static m24_Setter_double(mthis, value) native "DOMMatrix_m24_Setter";
+  static m24_Setter(mthis, value) native "DOMMatrix_m24_Setter";
 
   static m31_Getter(mthis) native "DOMMatrix_m31_Getter";
 
-  static m31_Setter_double(mthis, value) native "DOMMatrix_m31_Setter";
+  static m31_Setter(mthis, value) native "DOMMatrix_m31_Setter";
 
   static m32_Getter(mthis) native "DOMMatrix_m32_Getter";
 
-  static m32_Setter_double(mthis, value) native "DOMMatrix_m32_Setter";
+  static m32_Setter(mthis, value) native "DOMMatrix_m32_Setter";
 
   static m33_Getter(mthis) native "DOMMatrix_m33_Getter";
 
-  static m33_Setter_double(mthis, value) native "DOMMatrix_m33_Setter";
+  static m33_Setter(mthis, value) native "DOMMatrix_m33_Setter";
 
   static m34_Getter(mthis) native "DOMMatrix_m34_Getter";
 
-  static m34_Setter_double(mthis, value) native "DOMMatrix_m34_Setter";
+  static m34_Setter(mthis, value) native "DOMMatrix_m34_Setter";
 
   static m41_Getter(mthis) native "DOMMatrix_m41_Getter";
 
-  static m41_Setter_double(mthis, value) native "DOMMatrix_m41_Setter";
+  static m41_Setter(mthis, value) native "DOMMatrix_m41_Setter";
 
   static m42_Getter(mthis) native "DOMMatrix_m42_Getter";
 
-  static m42_Setter_double(mthis, value) native "DOMMatrix_m42_Setter";
+  static m42_Setter(mthis, value) native "DOMMatrix_m42_Setter";
 
   static m43_Getter(mthis) native "DOMMatrix_m43_Getter";
 
-  static m43_Setter_double(mthis, value) native "DOMMatrix_m43_Setter";
+  static m43_Setter(mthis, value) native "DOMMatrix_m43_Setter";
 
   static m44_Getter(mthis) native "DOMMatrix_m44_Getter";
 
-  static m44_Setter_double(mthis, value) native "DOMMatrix_m44_Setter";
+  static m44_Setter(mthis, value) native "DOMMatrix_m44_Setter";
 }
 
 class BlinkDOMParser {
   static constructorCallback() native "DOMParser_constructorCallback";
 
-  static parseFromString_Callback_DOMString_DOMString(mthis, str, contentType) native "DOMParser_parseFromString_Callback_DOMString_DOMString";
+  static parseFromString_Callback_2(mthis, str, contentType) native "DOMParser_parseFromString_Callback";
 }
 
 class BlinkDOMPointReadOnly {
-  static constructorCallback_double_double_double_double(x, y, z, w) native "DOMPointReadOnly_constructorCallback_double_double_double_double";
+  static constructorCallback_4(x, y, z, w) native "DOMPointReadOnly_constructorCallback";
 
   static w_Getter(mthis) native "DOMPointReadOnly_w_Getter";
 
@@ -1405,33 +1405,33 @@
 class BlinkDOMPoint {
   static constructorCallback() native "DOMPoint_constructorCallback";
 
-  static constructorCallback_Dictionary(point_OR_x) native "DOMPoint_constructorCallback_Dictionary";
+  static constructorCallback_1(point_OR_x) native "DOMPoint_constructorCallback";
 
-  static constructorCallback_double_double(point_OR_x, y) native "DOMPoint_constructorCallback_double_double";
+  static constructorCallback_2(point_OR_x, y) native "DOMPoint_constructorCallback";
 
-  static constructorCallback_double_double_double(point_OR_x, y, z) native "DOMPoint_constructorCallback_double_double_double";
+  static constructorCallback_3(point_OR_x, y, z) native "DOMPoint_constructorCallback";
 
-  static constructorCallback_double_double_double_double(point_OR_x, y, z, w) native "DOMPoint_constructorCallback_double_double_double_double";
+  static constructorCallback_4(point_OR_x, y, z, w) native "DOMPoint_constructorCallback";
 
   static w_Getter(mthis) native "DOMPoint_w_Getter";
 
-  static w_Setter_double(mthis, value) native "DOMPoint_w_Setter";
+  static w_Setter(mthis, value) native "DOMPoint_w_Setter";
 
   static x_Getter(mthis) native "DOMPoint_x_Getter";
 
-  static x_Setter_double(mthis, value) native "DOMPoint_x_Setter";
+  static x_Setter(mthis, value) native "DOMPoint_x_Setter";
 
   static y_Getter(mthis) native "DOMPoint_y_Getter";
 
-  static y_Setter_double(mthis, value) native "DOMPoint_y_Setter";
+  static y_Setter(mthis, value) native "DOMPoint_y_Setter";
 
   static z_Getter(mthis) native "DOMPoint_z_Getter";
 
-  static z_Setter_double(mthis, value) native "DOMPoint_z_Setter";
+  static z_Setter(mthis, value) native "DOMPoint_z_Setter";
 }
 
 class BlinkDOMRectReadOnly {
-  static constructorCallback_double_double_double_double(x, y, width, height) native "DOMRectReadOnly_constructorCallback_double_double_double_double";
+  static constructorCallback_4(x, y, width, height) native "DOMRectReadOnly_constructorCallback";
 
   static bottom_Getter(mthis) native "DOMRectReadOnly_bottom_Getter";
 
@@ -1451,87 +1451,81 @@
 }
 
 class BlinkDOMRect {
-  static constructorCallback_double_double_double_double(x, y, width, height) native "DOMRect_constructorCallback_double_double_double_double";
+  static constructorCallback_4(x, y, width, height) native "DOMRect_constructorCallback";
 
-  static constructorCallback_double_double_double(x, y, width) native "DOMRect_constructorCallback_double_double_double";
+  static constructorCallback_3(x, y, width) native "DOMRect_constructorCallback";
 
-  static constructorCallback_double_double(x, y) native "DOMRect_constructorCallback_double_double";
+  static constructorCallback_2(x, y) native "DOMRect_constructorCallback";
 
-  static constructorCallback_double(x) native "DOMRect_constructorCallback_double";
+  static constructorCallback_1(x) native "DOMRect_constructorCallback";
 
   static constructorCallback() native "DOMRect_constructorCallback";
 
   static height_Getter(mthis) native "DOMRect_height_Getter";
 
-  static height_Setter_double(mthis, value) native "DOMRect_height_Setter";
+  static height_Setter(mthis, value) native "DOMRect_height_Setter";
 
   static width_Getter(mthis) native "DOMRect_width_Getter";
 
-  static width_Setter_double(mthis, value) native "DOMRect_width_Setter";
+  static width_Setter(mthis, value) native "DOMRect_width_Setter";
 
   static x_Getter(mthis) native "DOMRect_x_Getter";
 
-  static x_Setter_double(mthis, value) native "DOMRect_x_Setter";
+  static x_Setter(mthis, value) native "DOMRect_x_Setter";
 
   static y_Getter(mthis) native "DOMRect_y_Getter";
 
-  static y_Setter_double(mthis, value) native "DOMRect_y_Setter";
+  static y_Setter(mthis, value) native "DOMRect_y_Setter";
 }
 
 class BlinkDOMTokenList {
   static length_Getter(mthis) native "DOMTokenList_length_Getter";
 
-  static add_Callback_DOMString(mthis, tokens) native "DOMTokenList_add_Callback_DOMString";
+  static add_Callback_1(mthis, tokens) native "DOMTokenList_add_Callback";
 
-  static contains_Callback_DOMString(mthis, token) native "DOMTokenList_contains_Callback_DOMString";
+  static contains_Callback_1(mthis, token) native "DOMTokenList_contains_Callback";
 
-  static item_Callback_ul(mthis, index) native "DOMTokenList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "DOMTokenList_item_Callback";
 
-  static remove_Callback_DOMString(mthis, tokens) native "DOMTokenList_remove_Callback_DOMString";
+  static remove_Callback_1(mthis, tokens) native "DOMTokenList_remove_Callback";
 
-  static toggle_Callback_DOMString_boolean(mthis, token, force) native "DOMTokenList_toggle_Callback_DOMString_boolean";
+  static toggle_Callback_2(mthis, token, force) native "DOMTokenList_toggle_Callback";
 
-  static toggle_Callback_DOMString(mthis, token) native "DOMTokenList_toggle_Callback_DOMString";
+  static toggle_Callback_1(mthis, token) native "DOMTokenList_toggle_Callback";
 }
 
 class BlinkDOMSettableTokenList {
   static value_Getter(mthis) native "DOMSettableTokenList_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "DOMSettableTokenList_value_Setter";
+  static value_Setter(mthis, value) native "DOMSettableTokenList_value_Setter";
 
-  static $__getter___Callback_ul(mthis, index) native "DOMSettableTokenList___getter___Callback_unsigned long";
+  static $__getter___Callback_1(mthis, index) native "DOMSettableTokenList___getter___Callback";
 }
 
 class BlinkDOMStringList {
   static length_Getter(mthis) native "DOMStringList_length_Getter";
 
-  static contains_Callback_DOMString(mthis, string) native "DOMStringList_contains_Callback_DOMString";
+  static contains_Callback_1(mthis, string) native "DOMStringList_contains_Callback";
 
-  static item_Callback_ul(mthis, index) native "DOMStringList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "DOMStringList_item_Callback";
 }
 
 class BlinkDOMStringMap {
-  static $__delete___Callback_ul(mthis, index_OR_name) native "DOMStringMap___delete___Callback_unsigned long";
+  static $__delete___Callback_1(mthis, index_OR_name) native "DOMStringMap___delete___Callback";
 
-  static $__delete___Callback_DOMString(mthis, index_OR_name) native "DOMStringMap___delete___Callback_DOMString";
+  static $__getter___Callback_1(mthis, index_OR_name) native "DOMStringMap___getter___Callback";
 
-  static $__getter___Callback_ul(mthis, index_OR_name) native "DOMStringMap___getter___Callback_unsigned long";
-
-  static $__getter___Callback_DOMString(mthis, index_OR_name) native "DOMStringMap___getter___Callback_DOMString";
-
-  static $__setter___Callback_ul_DOMString(mthis, index_OR_name, value) native "DOMStringMap___setter___Callback_unsigned long_DOMString";
-
-  static $__setter___Callback_DOMString_DOMString(mthis, index_OR_name, value) native "DOMStringMap___setter___Callback_DOMString_DOMString";
+  static $__setter___Callback_2(mthis, index_OR_name, value) native "DOMStringMap___setter___Callback";
 }
 
 class BlinkDataTransfer {
   static dropEffect_Getter(mthis) native "DataTransfer_dropEffect_Getter";
 
-  static dropEffect_Setter_DOMString(mthis, value) native "DataTransfer_dropEffect_Setter";
+  static dropEffect_Setter(mthis, value) native "DataTransfer_dropEffect_Setter";
 
   static effectAllowed_Getter(mthis) native "DataTransfer_effectAllowed_Getter";
 
-  static effectAllowed_Setter_DOMString(mthis, value) native "DataTransfer_effectAllowed_Setter";
+  static effectAllowed_Setter(mthis, value) native "DataTransfer_effectAllowed_Setter";
 
   static files_Getter(mthis) native "DataTransfer_files_Getter";
 
@@ -1539,15 +1533,15 @@
 
   static types_Getter(mthis) native "DataTransfer_types_Getter";
 
-  static clearData_Callback_DOMString(mthis, type) native "DataTransfer_clearData_Callback_DOMString";
+  static clearData_Callback_1(mthis, type) native "DataTransfer_clearData_Callback";
 
   static clearData_Callback(mthis) native "DataTransfer_clearData_Callback";
 
-  static getData_Callback_DOMString(mthis, type) native "DataTransfer_getData_Callback_DOMString";
+  static getData_Callback_1(mthis, type) native "DataTransfer_getData_Callback";
 
-  static setData_Callback_DOMString_DOMString(mthis, type, data) native "DataTransfer_setData_Callback_DOMString_DOMString";
+  static setData_Callback_2(mthis, type, data) native "DataTransfer_setData_Callback";
 
-  static setDragImage_Callback_Element_long_long(mthis, image, x, y) native "DataTransfer_setDragImage_Callback_Element_long_long";
+  static setDragImage_Callback_3(mthis, image, x, y) native "DataTransfer_setDragImage_Callback";
 }
 
 class BlinkDataTransferItem {
@@ -1557,7 +1551,7 @@
 
   static getAsFile_Callback(mthis) native "DataTransferItem_getAsFile_Callback";
 
-  static getAsString_Callback_StringCallback(mthis, callback) native "DataTransferItem_getAsString_Callback_StringCallback";
+  static getAsString_Callback_1(mthis, callback) native "DataTransferItem_getAsString_Callback";
 
   static webkitGetAsEntry_Callback(mthis) native "DataTransferItem_webkitGetAsEntry_Callback";
 }
@@ -1565,43 +1559,57 @@
 class BlinkDataTransferItemList {
   static length_Getter(mthis) native "DataTransferItemList_length_Getter";
 
-  static $__getter___Callback_ul(mthis, index) native "DataTransferItemList___getter___Callback_unsigned long";
+  static $__getter___Callback_1(mthis, index) native "DataTransferItemList___getter___Callback";
 
-  static add_Callback_DOMString_DOMString(mthis, data_OR_file, type) native "DataTransferItemList_add_Callback_DOMString_DOMString";
+  static add_Callback_2(mthis, data_OR_file, type) native "DataTransferItemList_add_Callback";
 
-  static add_Callback_File(mthis, data_OR_file) native "DataTransferItemList_add_Callback_File";
+  static add_Callback_1(mthis, data_OR_file) native "DataTransferItemList_add_Callback";
 
   static clear_Callback(mthis) native "DataTransferItemList_clear_Callback";
 
-  static remove_Callback_ul(mthis, index) native "DataTransferItemList_remove_Callback_unsigned long";
+  static remove_Callback_1(mthis, index) native "DataTransferItemList_remove_Callback";
 }
 
 class BlinkDatabase {
   static version_Getter(mthis) native "Database_version_Getter";
 
-  static changeVersion_Callback_DOMString_DOMString_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(mthis, oldVersion, newVersion, callback, errorCallback, successCallback) native "Database_changeVersion_Callback_DOMString_DOMString_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
+  static changeVersion_Callback_5(mthis, oldVersion, newVersion, callback, errorCallback, successCallback) native "Database_changeVersion_Callback";
 
-  static readTransaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(mthis, callback, errorCallback, successCallback) native "Database_readTransaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
+  static changeVersion_Callback_4(mthis, oldVersion, newVersion, callback, errorCallback) native "Database_changeVersion_Callback";
 
-  static transaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(mthis, callback, errorCallback, successCallback) native "Database_transaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
+  static changeVersion_Callback_3(mthis, oldVersion, newVersion, callback) native "Database_changeVersion_Callback";
+
+  static changeVersion_Callback_2(mthis, oldVersion, newVersion) native "Database_changeVersion_Callback";
+
+  static readTransaction_Callback_3(mthis, callback, errorCallback, successCallback) native "Database_readTransaction_Callback";
+
+  static readTransaction_Callback_2(mthis, callback, errorCallback) native "Database_readTransaction_Callback";
+
+  static readTransaction_Callback_1(mthis, callback) native "Database_readTransaction_Callback";
+
+  static transaction_Callback_3(mthis, callback, errorCallback, successCallback) native "Database_transaction_Callback";
+
+  static transaction_Callback_2(mthis, callback, errorCallback) native "Database_transaction_Callback";
+
+  static transaction_Callback_1(mthis, callback) native "Database_transaction_Callback";
 }
 
 class BlinkDatabaseSync {}
 
 class BlinkWindowBase64 {
-  static atob_Callback_DOMString(mthis, string) native "WindowBase64_atob_Callback_DOMString";
+  static atob_Callback_1(mthis, string) native "WindowBase64_atob_Callback";
 
-  static btoa_Callback_DOMString(mthis, string) native "WindowBase64_btoa_Callback_DOMString";
+  static btoa_Callback_1(mthis, string) native "WindowBase64_btoa_Callback";
 }
 
 class BlinkWindowTimers {
-  static clearInterval_Callback_long(mthis, handle) native "WindowTimers_clearInterval_Callback_long";
+  static clearInterval_Callback_1(mthis, handle) native "WindowTimers_clearInterval_Callback";
 
-  static clearTimeout_Callback_long(mthis, handle) native "WindowTimers_clearTimeout_Callback_long";
+  static clearTimeout_Callback_1(mthis, handle) native "WindowTimers_clearTimeout_Callback";
 
-  static setInterval_Callback_ScriptValue_long(mthis, handler, timeout) native "WindowTimers_setInterval_Callback";
+  static setInterval_Callback_2(mthis, handler, timeout) native "WindowTimers_setInterval_Callback";
 
-  static setTimeout_Callback_ScriptValue_long(mthis, handler, timeout) native "WindowTimers_setTimeout_Callback";
+  static setTimeout_Callback_2(mthis, handler, timeout) native "WindowTimers_setTimeout_Callback";
 }
 
 class BlinkWorkerGlobalScope {
@@ -1621,35 +1629,45 @@
 
   static close_Callback(mthis) native "WorkerGlobalScope_close_Callback";
 
-  static importScripts_Callback_DOMString(mthis, urls) native "WorkerGlobalScope_importScripts_Callback_DOMString";
+  static importScripts_Callback_1(mthis, urls) native "WorkerGlobalScope_importScripts_Callback";
 
-  static openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabase_Callback_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
+  static openDatabase_Callback_5(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabase_Callback";
 
-  static openDatabaseSync_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabaseSync_Callback_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
+  static openDatabase_Callback_4(mthis, name, version, displayName, estimatedSize) native "WorkerGlobalScope_openDatabase_Callback";
 
-  static webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(mthis, type, size, successCallback, errorCallback) native "WorkerGlobalScope_webkitRequestFileSystem_Callback_unsigned short_long long_FileSystemCallback_ErrorCallback";
+  static openDatabaseSync_Callback_5(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabaseSync_Callback";
 
-  static webkitRequestFileSystemSync_Callback_us_ll(mthis, type, size) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback_unsigned short_long long";
+  static openDatabaseSync_Callback_4(mthis, name, version, displayName, estimatedSize) native "WorkerGlobalScope_openDatabaseSync_Callback";
 
-  static webkitResolveLocalFileSystemSyncURL_Callback_DOMString(mthis, url) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback_DOMString";
+  static webkitRequestFileSystem_Callback_4(mthis, type, size, successCallback, errorCallback) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
 
-  static webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(mthis, url, successCallback, errorCallback) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback";
+  static webkitRequestFileSystem_Callback_3(mthis, type, size, successCallback) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
 
-  static atob_Callback_DOMString(mthis, string) native "WorkerGlobalScope_atob_Callback_DOMString";
+  static webkitRequestFileSystem_Callback_2(mthis, type, size) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
 
-  static btoa_Callback_DOMString(mthis, string) native "WorkerGlobalScope_btoa_Callback_DOMString";
+  static webkitRequestFileSystemSync_Callback_2(mthis, type, size) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback";
 
-  static clearInterval_Callback_long(mthis, handle) native "WorkerGlobalScope_clearInterval_Callback_long";
+  static webkitResolveLocalFileSystemSyncURL_Callback_1(mthis, url) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback";
 
-  static clearTimeout_Callback_long(mthis, handle) native "WorkerGlobalScope_clearTimeout_Callback_long";
+  static webkitResolveLocalFileSystemURL_Callback_3(mthis, url, successCallback, errorCallback) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
 
-  static setInterval_Callback_ScriptValue_long(mthis, handler, timeout) native "WorkerGlobalScope_setInterval_Callback";
+  static webkitResolveLocalFileSystemURL_Callback_2(mthis, url, successCallback) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
 
-  static setTimeout_Callback_ScriptValue_long(mthis, handler, timeout) native "WorkerGlobalScope_setTimeout_Callback";
+  static atob_Callback_1(mthis, string) native "WorkerGlobalScope_atob_Callback";
+
+  static btoa_Callback_1(mthis, string) native "WorkerGlobalScope_btoa_Callback";
+
+  static clearInterval_Callback_1(mthis, handle) native "WorkerGlobalScope_clearInterval_Callback";
+
+  static clearTimeout_Callback_1(mthis, handle) native "WorkerGlobalScope_clearTimeout_Callback";
+
+  static setInterval_Callback_2(mthis, handler, timeout) native "WorkerGlobalScope_setInterval_Callback";
+
+  static setTimeout_Callback_2(mthis, handler, timeout) native "WorkerGlobalScope_setTimeout_Callback";
 }
 
 class BlinkDedicatedWorkerGlobalScope {
-  static postMessage_Callback_ScriptValue_SEQ_MessagePort_SEQ(mthis, message, transfer) native "DedicatedWorkerGlobalScope_postMessage_Callback";
+  static postMessage_Callback_2(mthis, message, transfer) native "DedicatedWorkerGlobalScope_postMessage_Callback";
 }
 
 class BlinkDelayNode {
@@ -1657,15 +1675,29 @@
 }
 
 class BlinkDeprecatedStorageInfo {
-  static queryUsageAndQuota_Callback_us_StorageUsageCallback_StorageErrorCallback(mthis, storageType, usageCallback, errorCallback) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback_unsigned short_StorageUsageCallback_StorageErrorCallback";
+  static queryUsageAndQuota_Callback_3(mthis, storageType, usageCallback, errorCallback) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
 
-  static requestQuota_Callback_us_ull_StorageQuotaCallback_StorageErrorCallback(mthis, storageType, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageInfo_requestQuota_Callback_unsigned short_unsigned long long_StorageQuotaCallback_StorageErrorCallback";
+  static queryUsageAndQuota_Callback_2(mthis, storageType, usageCallback) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
+
+  static queryUsageAndQuota_Callback_1(mthis, storageType) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
+
+  static requestQuota_Callback_4(mthis, storageType, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageInfo_requestQuota_Callback";
+
+  static requestQuota_Callback_3(mthis, storageType, newQuotaInBytes, quotaCallback) native "DeprecatedStorageInfo_requestQuota_Callback";
+
+  static requestQuota_Callback_2(mthis, storageType, newQuotaInBytes) native "DeprecatedStorageInfo_requestQuota_Callback";
 }
 
 class BlinkDeprecatedStorageQuota {
-  static queryUsageAndQuota_Callback_StorageUsageCallback_StorageErrorCallback(mthis, usageCallback, errorCallback) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback_StorageUsageCallback_StorageErrorCallback";
+  static queryUsageAndQuota_Callback_2(mthis, usageCallback, errorCallback) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback";
 
-  static requestQuota_Callback_ull_StorageQuotaCallback_StorageErrorCallback(mthis, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageQuota_requestQuota_Callback_unsigned long long_StorageQuotaCallback_StorageErrorCallback";
+  static queryUsageAndQuota_Callback_1(mthis, usageCallback) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback";
+
+  static requestQuota_Callback_3(mthis, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageQuota_requestQuota_Callback";
+
+  static requestQuota_Callback_2(mthis, newQuotaInBytes, quotaCallback) native "DeprecatedStorageQuota_requestQuota_Callback";
+
+  static requestQuota_Callback_1(mthis, newQuotaInBytes) native "DeprecatedStorageQuota_requestQuota_Callback";
 }
 
 class BlinkDeviceAcceleration {
@@ -1691,7 +1723,7 @@
 
   static rotationRate_Getter(mthis) native "DeviceMotionEvent_rotationRate_Getter";
 
-  static initDeviceMotionEvent_Callback_DOMString_boolean_boolean_DeviceAcceleration_DeviceAcceleration_DeviceRotationRate_double(mthis, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
+  static initDeviceMotionEvent_Callback_7(mthis, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
 }
 
 class BlinkDeviceOrientationEvent {
@@ -1703,7 +1735,7 @@
 
   static gamma_Getter(mthis) native "DeviceOrientationEvent_gamma_Getter";
 
-  static initDeviceOrientationEvent_Callback_DOMString_boolean_boolean_double_double_double_boolean(mthis, type, bubbles, cancelable, alpha, beta, gamma, absolute) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
+  static initDeviceOrientationEvent_Callback_7(mthis, type, bubbles, cancelable, alpha, beta, gamma, absolute) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
 }
 
 class BlinkDeviceRotationRate {
@@ -1725,19 +1757,35 @@
 
   static name_Getter(mthis) native "Entry_name_Getter";
 
-  static copyTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(mthis, parent, name, successCallback, errorCallback) native "Entry_copyTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback";
+  static copyTo_Callback_4(mthis, parent, name, successCallback, errorCallback) native "Entry_copyTo_Callback";
 
-  static copyTo_Callback_DirectoryEntry(mthis, parent) native "Entry_copyTo_Callback_DirectoryEntry";
+  static copyTo_Callback_3(mthis, parent, name, successCallback) native "Entry_copyTo_Callback";
 
-  static getMetadata_Callback_MetadataCallback_ErrorCallback(mthis, successCallback, errorCallback) native "Entry_getMetadata_Callback_MetadataCallback_ErrorCallback";
+  static copyTo_Callback_2(mthis, parent, name) native "Entry_copyTo_Callback";
 
-  static getParent_Callback_EntryCallback_ErrorCallback(mthis, successCallback, errorCallback) native "Entry_getParent_Callback_EntryCallback_ErrorCallback";
+  static copyTo_Callback_1(mthis, parent) native "Entry_copyTo_Callback";
 
-  static moveTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(mthis, parent, name, successCallback, errorCallback) native "Entry_moveTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback";
+  static getMetadata_Callback_2(mthis, successCallback, errorCallback) native "Entry_getMetadata_Callback";
 
-  static moveTo_Callback_DirectoryEntry(mthis, parent) native "Entry_moveTo_Callback_DirectoryEntry";
+  static getMetadata_Callback_1(mthis, successCallback) native "Entry_getMetadata_Callback";
 
-  static remove_Callback_VoidCallback_ErrorCallback(mthis, successCallback, errorCallback) native "Entry_remove_Callback_VoidCallback_ErrorCallback";
+  static getParent_Callback_2(mthis, successCallback, errorCallback) native "Entry_getParent_Callback";
+
+  static getParent_Callback_1(mthis, successCallback) native "Entry_getParent_Callback";
+
+  static getParent_Callback(mthis) native "Entry_getParent_Callback";
+
+  static moveTo_Callback_4(mthis, parent, name, successCallback, errorCallback) native "Entry_moveTo_Callback";
+
+  static moveTo_Callback_3(mthis, parent, name, successCallback) native "Entry_moveTo_Callback";
+
+  static moveTo_Callback_2(mthis, parent, name) native "Entry_moveTo_Callback";
+
+  static moveTo_Callback_1(mthis, parent) native "Entry_moveTo_Callback";
+
+  static remove_Callback_2(mthis, successCallback, errorCallback) native "Entry_remove_Callback";
+
+  static remove_Callback_1(mthis, successCallback) native "Entry_remove_Callback";
 
   static toURL_Callback(mthis) native "Entry_toURL_Callback";
 }
@@ -1745,11 +1793,25 @@
 class BlinkDirectoryEntry {
   static createReader_Callback(mthis) native "DirectoryEntry_createReader_Callback";
 
-  static getDirectory_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getDirectory_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback";
+  static getDirectory_Callback_4(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getDirectory_Callback";
 
-  static getFile_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getFile_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback";
+  static getDirectory_Callback_3(mthis, path, options, successCallback) native "DirectoryEntry_getDirectory_Callback";
 
-  static removeRecursively_Callback_VoidCallback_ErrorCallback(mthis, successCallback, errorCallback) native "DirectoryEntry_removeRecursively_Callback_VoidCallback_ErrorCallback";
+  static getDirectory_Callback_2(mthis, path, options) native "DirectoryEntry_getDirectory_Callback";
+
+  static getDirectory_Callback_1(mthis, path) native "DirectoryEntry_getDirectory_Callback";
+
+  static getFile_Callback_4(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getFile_Callback";
+
+  static getFile_Callback_3(mthis, path, options, successCallback) native "DirectoryEntry_getFile_Callback";
+
+  static getFile_Callback_2(mthis, path, options) native "DirectoryEntry_getFile_Callback";
+
+  static getFile_Callback_1(mthis, path) native "DirectoryEntry_getFile_Callback";
+
+  static removeRecursively_Callback_2(mthis, successCallback, errorCallback) native "DirectoryEntry_removeRecursively_Callback";
+
+  static removeRecursively_Callback_1(mthis, successCallback) native "DirectoryEntry_removeRecursively_Callback";
 }
 
 class BlinkEntrySync {}
@@ -1757,7 +1819,9 @@
 class BlinkDirectoryEntrySync {}
 
 class BlinkDirectoryReader {
-  static readEntries_Callback_EntriesCallback_ErrorCallback(mthis, successCallback, errorCallback) native "DirectoryReader_readEntries_Callback_EntriesCallback_ErrorCallback";
+  static readEntries_Callback_2(mthis, successCallback, errorCallback) native "DirectoryReader_readEntries_Callback";
+
+  static readEntries_Callback_1(mthis, successCallback) native "DirectoryReader_readEntries_Callback";
 }
 
 class BlinkDirectoryReaderSync {}
@@ -1773,9 +1837,9 @@
 
   static lastElementChild_Getter(mthis) native "ParentNode_lastElementChild_Getter";
 
-  static querySelector_Callback_DOMString(mthis, selectors) native "ParentNode_querySelector_Callback_DOMString";
+  static querySelector_Callback_1(mthis, selectors) native "ParentNode_querySelector_Callback";
 
-  static querySelectorAll_Callback_DOMString(mthis, selectors) native "ParentNode_querySelectorAll_Callback_DOMString";
+  static querySelectorAll_Callback_1(mthis, selectors) native "ParentNode_querySelectorAll_Callback";
 }
 
 class BlinkDocument {
@@ -1783,13 +1847,13 @@
 
   static body_Getter(mthis) native "Document_body_Getter";
 
-  static body_Setter_HTMLElement(mthis, value) native "Document_body_Setter";
+  static body_Setter(mthis, value) native "Document_body_Setter";
 
   static contentType_Getter(mthis) native "Document_contentType_Getter";
 
   static cookie_Getter(mthis) native "Document_cookie_Getter";
 
-  static cookie_Setter_DOMString(mthis, value) native "Document_cookie_Setter";
+  static cookie_Setter(mthis, value) native "Document_cookie_Setter";
 
   static currentScript_Getter(mthis) native "Document_currentScript_Getter";
 
@@ -1825,7 +1889,7 @@
 
   static selectedStylesheetSet_Getter(mthis) native "Document_selectedStylesheetSet_Getter";
 
-  static selectedStylesheetSet_Setter_DOMString(mthis, value) native "Document_selectedStylesheetSet_Setter";
+  static selectedStylesheetSet_Setter(mthis, value) native "Document_selectedStylesheetSet_Setter";
 
   static styleSheets_Getter(mthis) native "Document_styleSheets_Getter";
 
@@ -1833,7 +1897,7 @@
 
   static title_Getter(mthis) native "Document_title_Getter";
 
-  static title_Setter_DOMString(mthis, value) native "Document_title_Setter";
+  static title_Setter(mthis, value) native "Document_title_Setter";
 
   static visibilityState_Getter(mthis) native "Document_visibilityState_Getter";
 
@@ -1845,65 +1909,65 @@
 
   static webkitVisibilityState_Getter(mthis) native "Document_webkitVisibilityState_Getter";
 
-  static adoptNode_Callback_Node(mthis, node) native "Document_adoptNode_Callback_Node";
+  static adoptNode_Callback_1(mthis, node) native "Document_adoptNode_Callback";
 
-  static caretRangeFromPoint_Callback_long_long(mthis, x, y) native "Document_caretRangeFromPoint_Callback_long_long";
+  static caretRangeFromPoint_Callback_2(mthis, x, y) native "Document_caretRangeFromPoint_Callback";
 
   static createDocumentFragment_Callback(mthis) native "Document_createDocumentFragment_Callback";
 
-  static createElement_Callback_DOMString(mthis, localName_OR_tagName, typeExtension) native "Document_createElement_Callback";
+  static createElement_Callback_2(mthis, localName_OR_tagName, typeExtension) native "Document_createElement_Callback";
 
-  static createElementNS_Callback_DOMString_DOMString(mthis, namespaceURI, qualifiedName, typeExtension) native "Document_createElementNS_Callback";
+  static createElementNS_Callback_3(mthis, namespaceURI, qualifiedName, typeExtension) native "Document_createElementNS_Callback";
 
-  static createEvent_Callback_DOMString(mthis, eventType) native "Document_createEvent_Callback_DOMString";
+  static createEvent_Callback_1(mthis, eventType) native "Document_createEvent_Callback";
 
-  static createNodeIterator_Callback_Node_ul_NodeFilter(mthis, root, whatToShow, filter) native "Document_createNodeIterator_Callback_Node_unsigned long_NodeFilter";
+  static createNodeIterator_Callback_3(mthis, root, whatToShow, filter) native "Document_createNodeIterator_Callback";
 
-  static createNodeIterator_Callback_Node(mthis, root) native "Document_createNodeIterator_Callback_Node";
+  static createNodeIterator_Callback_1(mthis, root) native "Document_createNodeIterator_Callback";
 
   static createRange_Callback(mthis) native "Document_createRange_Callback";
 
-  static createTextNode_Callback_DOMString(mthis, data) native "Document_createTextNode_Callback_DOMString";
+  static createTextNode_Callback_1(mthis, data) native "Document_createTextNode_Callback";
 
-  static createTouch_Callback_Window_EventTarget_long_double_double_double_double_double_double_float_float(mthis, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "Document_createTouch_Callback_Window_EventTarget_long_double_double_double_double_double_double_float_float";
+  static createTouch_Callback_11(mthis, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "Document_createTouch_Callback";
 
-  static createTouchList_Callback_Touch(mthis, touches) native "Document_createTouchList_Callback_Touch";
+  static createTouchList_Callback_1(mthis, touches) native "Document_createTouchList_Callback";
 
-  static createTreeWalker_Callback_Node_ul_NodeFilter(mthis, root, whatToShow, filter) native "Document_createTreeWalker_Callback_Node_unsigned long_NodeFilter";
+  static createTreeWalker_Callback_3(mthis, root, whatToShow, filter) native "Document_createTreeWalker_Callback";
 
-  static createTreeWalker_Callback_Node(mthis, root) native "Document_createTreeWalker_Callback_Node";
+  static createTreeWalker_Callback_1(mthis, root) native "Document_createTreeWalker_Callback";
 
-  static elementFromPoint_Callback_long_long(mthis, x, y) native "Document_elementFromPoint_Callback_long_long";
+  static elementFromPoint_Callback_2(mthis, x, y) native "Document_elementFromPoint_Callback";
 
-  static execCommand_Callback_DOMString_boolean_DOMString(mthis, command, userInterface, value) native "Document_execCommand_Callback_DOMString_boolean_DOMString";
+  static execCommand_Callback_3(mthis, command, userInterface, value) native "Document_execCommand_Callback";
 
   static exitFullscreen_Callback(mthis) native "Document_exitFullscreen_Callback";
 
   static exitPointerLock_Callback(mthis) native "Document_exitPointerLock_Callback";
 
-  static getCSSCanvasContext_Callback_DOMString_DOMString_long_long(mthis, contextId, name, width, height) native "Document_getCSSCanvasContext_Callback_DOMString_DOMString_long_long";
+  static getCSSCanvasContext_Callback_4(mthis, contextId, name, width, height) native "Document_getCSSCanvasContext_Callback";
 
-  static getElementById_Callback_DOMString(mthis, elementId) native "Document_getElementById_Callback_DOMString";
+  static getElementById_Callback_1(mthis, elementId) native "Document_getElementById_Callback";
 
-  static getElementsByClassName_Callback_DOMString(mthis, classNames) native "Document_getElementsByClassName_Callback_DOMString";
+  static getElementsByClassName_Callback_1(mthis, classNames) native "Document_getElementsByClassName_Callback";
 
-  static getElementsByName_Callback_DOMString(mthis, elementName) native "Document_getElementsByName_Callback_DOMString";
+  static getElementsByName_Callback_1(mthis, elementName) native "Document_getElementsByName_Callback";
 
-  static getElementsByTagName_Callback_DOMString(mthis, localName) native "Document_getElementsByTagName_Callback_DOMString";
+  static getElementsByTagName_Callback_1(mthis, localName) native "Document_getElementsByTagName_Callback";
 
-  static importNode_Callback_Node_boolean(mthis, node, deep) native "Document_importNode_Callback_Node_boolean";
+  static importNode_Callback_2(mthis, node, deep) native "Document_importNode_Callback";
 
-  static importNode_Callback_Node(mthis, node) native "Document_importNode_Callback_Node";
+  static importNode_Callback_1(mthis, node) native "Document_importNode_Callback";
 
-  static queryCommandEnabled_Callback_DOMString(mthis, command) native "Document_queryCommandEnabled_Callback_DOMString";
+  static queryCommandEnabled_Callback_1(mthis, command) native "Document_queryCommandEnabled_Callback";
 
-  static queryCommandIndeterm_Callback_DOMString(mthis, command) native "Document_queryCommandIndeterm_Callback_DOMString";
+  static queryCommandIndeterm_Callback_1(mthis, command) native "Document_queryCommandIndeterm_Callback";
 
-  static queryCommandState_Callback_DOMString(mthis, command) native "Document_queryCommandState_Callback_DOMString";
+  static queryCommandState_Callback_1(mthis, command) native "Document_queryCommandState_Callback";
 
-  static queryCommandSupported_Callback_DOMString(mthis, command) native "Document_queryCommandSupported_Callback_DOMString";
+  static queryCommandSupported_Callback_1(mthis, command) native "Document_queryCommandSupported_Callback";
 
-  static queryCommandValue_Callback_DOMString(mthis, command) native "Document_queryCommandValue_Callback_DOMString";
+  static queryCommandValue_Callback_1(mthis, command) native "Document_queryCommandValue_Callback";
 
   static webkitExitFullscreen_Callback(mthis) native "Document_webkitExitFullscreen_Callback";
 
@@ -1915,13 +1979,13 @@
 
   static lastElementChild_Getter(mthis) native "Document_lastElementChild_Getter";
 
-  static querySelector_Callback_DOMString(mthis, selectors) native "Document_querySelector_Callback_DOMString";
+  static querySelector_Callback_1(mthis, selectors) native "Document_querySelector_Callback";
 
-  static querySelectorAll_Callback_DOMString(mthis, selectors) native "Document_querySelectorAll_Callback_DOMString";
+  static querySelectorAll_Callback_1(mthis, selectors) native "Document_querySelectorAll_Callback";
 }
 
 class BlinkDocumentFragment {
-  static getElementById_Callback_DOMString(mthis, elementId) native "DocumentFragment_getElementById_Callback_DOMString";
+  static getElementById_Callback_1(mthis, elementId) native "DocumentFragment_getElementById_Callback";
 
   static childElementCount_Getter(mthis) native "DocumentFragment_childElementCount_Getter";
 
@@ -1929,9 +1993,9 @@
 
   static lastElementChild_Getter(mthis) native "DocumentFragment_lastElementChild_Getter";
 
-  static querySelector_Callback_DOMString(mthis, selectors) native "DocumentFragment_querySelector_Callback_DOMString";
+  static querySelector_Callback_1(mthis, selectors) native "DocumentFragment_querySelector_Callback";
 
-  static querySelectorAll_Callback_DOMString(mthis, selectors) native "DocumentFragment_querySelectorAll_Callback_DOMString";
+  static querySelectorAll_Callback_1(mthis, selectors) native "DocumentFragment_querySelectorAll_Callback";
 }
 
 class BlinkDocumentType {}
@@ -1963,7 +2027,7 @@
 
   static className_Getter(mthis) native "Element_className_Getter";
 
-  static className_Setter_DOMString(mthis, value) native "Element_className_Setter";
+  static className_Setter(mthis, value) native "Element_className_Setter";
 
   static clientHeight_Getter(mthis) native "Element_clientHeight_Getter";
 
@@ -1975,11 +2039,11 @@
 
   static id_Getter(mthis) native "Element_id_Getter";
 
-  static id_Setter_DOMString(mthis, value) native "Element_id_Setter";
+  static id_Setter(mthis, value) native "Element_id_Setter";
 
   static innerHTML_Getter(mthis) native "Element_innerHTML_Getter";
 
-  static innerHTML_Setter_DOMString(mthis, value) native "Element_innerHTML_Setter";
+  static innerHTML_Setter(mthis, value) native "Element_innerHTML_Setter";
 
   static localName_Getter(mthis) native "Element_localName_Getter";
 
@@ -2001,11 +2065,11 @@
 
   static scrollLeft_Getter(mthis) native "Element_scrollLeft_Getter";
 
-  static scrollLeft_Setter_long(mthis, value) native "Element_scrollLeft_Setter";
+  static scrollLeft_Setter(mthis, value) native "Element_scrollLeft_Setter";
 
   static scrollTop_Getter(mthis) native "Element_scrollTop_Getter";
 
-  static scrollTop_Setter_long(mthis, value) native "Element_scrollTop_Setter";
+  static scrollTop_Setter(mthis, value) native "Element_scrollTop_Setter";
 
   static scrollWidth_Getter(mthis) native "Element_scrollWidth_Getter";
 
@@ -2015,7 +2079,7 @@
 
   static tagName_Getter(mthis) native "Element_tagName_Getter";
 
-  static animate_Callback_object_object(mthis, effect, timing) native "Element_animate_Callback";
+  static animate_Callback_2(mthis, effect, timing) native "Element_animate_Callback";
 
   static blur_Callback(mthis) native "Element_blur_Callback";
 
@@ -2025,9 +2089,9 @@
 
   static getAnimationPlayers_Callback(mthis) native "Element_getAnimationPlayers_Callback";
 
-  static getAttribute_Callback_DOMString(mthis, name) native "Element_getAttribute_Callback_DOMString";
+  static getAttribute_Callback_1(mthis, name) native "Element_getAttribute_Callback";
 
-  static getAttributeNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "Element_getAttributeNS_Callback_DOMString_DOMString";
+  static getAttributeNS_Callback_2(mthis, namespaceURI, localName) native "Element_getAttributeNS_Callback";
 
   static getBoundingClientRect_Callback(mthis) native "Element_getBoundingClientRect_Callback";
 
@@ -2035,41 +2099,41 @@
 
   static getDestinationInsertionPoints_Callback(mthis) native "Element_getDestinationInsertionPoints_Callback";
 
-  static getElementsByClassName_Callback_DOMString(mthis, classNames) native "Element_getElementsByClassName_Callback_DOMString";
+  static getElementsByClassName_Callback_1(mthis, classNames) native "Element_getElementsByClassName_Callback";
 
-  static getElementsByTagName_Callback_DOMString(mthis, name) native "Element_getElementsByTagName_Callback_DOMString";
+  static getElementsByTagName_Callback_1(mthis, name) native "Element_getElementsByTagName_Callback";
 
-  static hasAttribute_Callback_DOMString(mthis, name) native "Element_hasAttribute_Callback_DOMString";
+  static hasAttribute_Callback_1(mthis, name) native "Element_hasAttribute_Callback";
 
-  static hasAttributeNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "Element_hasAttributeNS_Callback_DOMString_DOMString";
+  static hasAttributeNS_Callback_2(mthis, namespaceURI, localName) native "Element_hasAttributeNS_Callback";
 
-  static insertAdjacentElement_Callback_DOMString_Element(mthis, where, element) native "Element_insertAdjacentElement_Callback_DOMString_Element";
+  static insertAdjacentElement_Callback_2(mthis, where, element) native "Element_insertAdjacentElement_Callback";
 
-  static insertAdjacentHTML_Callback_DOMString_DOMString(mthis, where, html) native "Element_insertAdjacentHTML_Callback_DOMString_DOMString";
+  static insertAdjacentHTML_Callback_2(mthis, where, html) native "Element_insertAdjacentHTML_Callback";
 
-  static insertAdjacentText_Callback_DOMString_DOMString(mthis, where, text) native "Element_insertAdjacentText_Callback_DOMString_DOMString";
+  static insertAdjacentText_Callback_2(mthis, where, text) native "Element_insertAdjacentText_Callback";
 
-  static matches_Callback_DOMString(mthis, selectors) native "Element_matches_Callback_DOMString";
+  static matches_Callback_1(mthis, selectors) native "Element_matches_Callback";
 
-  static removeAttribute_Callback_DOMString(mthis, name) native "Element_removeAttribute_Callback_DOMString";
+  static removeAttribute_Callback_1(mthis, name) native "Element_removeAttribute_Callback";
 
-  static removeAttributeNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "Element_removeAttributeNS_Callback_DOMString_DOMString";
+  static removeAttributeNS_Callback_2(mthis, namespaceURI, localName) native "Element_removeAttributeNS_Callback";
 
   static requestFullscreen_Callback(mthis) native "Element_requestFullscreen_Callback";
 
   static requestPointerLock_Callback(mthis) native "Element_requestPointerLock_Callback";
 
-  static scrollIntoView_Callback_boolean(mthis, alignWithTop) native "Element_scrollIntoView_Callback_boolean";
+  static scrollIntoView_Callback_1(mthis, alignWithTop) native "Element_scrollIntoView_Callback";
 
   static scrollIntoView_Callback(mthis) native "Element_scrollIntoView_Callback";
 
-  static scrollIntoViewIfNeeded_Callback_boolean(mthis, centerIfNeeded) native "Element_scrollIntoViewIfNeeded_Callback_boolean";
+  static scrollIntoViewIfNeeded_Callback_1(mthis, centerIfNeeded) native "Element_scrollIntoViewIfNeeded_Callback";
 
   static scrollIntoViewIfNeeded_Callback(mthis) native "Element_scrollIntoViewIfNeeded_Callback";
 
-  static setAttribute_Callback_DOMString_DOMString(mthis, name, value) native "Element_setAttribute_Callback_DOMString_DOMString";
+  static setAttribute_Callback_2(mthis, name, value) native "Element_setAttribute_Callback";
 
-  static setAttributeNS_Callback_DOMString_DOMString_DOMString(mthis, namespaceURI, qualifiedName, value) native "Element_setAttributeNS_Callback_DOMString_DOMString_DOMString";
+  static setAttributeNS_Callback_3(mthis, namespaceURI, qualifiedName, value) native "Element_setAttributeNS_Callback";
 
   static nextElementSibling_Getter(mthis) native "Element_nextElementSibling_Getter";
 
@@ -2085,9 +2149,9 @@
 
   static lastElementChild_Getter(mthis) native "Element_lastElementChild_Getter";
 
-  static querySelector_Callback_DOMString(mthis, selectors) native "Element_querySelector_Callback_DOMString";
+  static querySelector_Callback_1(mthis, selectors) native "Element_querySelector_Callback";
 
-  static querySelectorAll_Callback_DOMString(mthis, selectors) native "Element_querySelectorAll_Callback_DOMString";
+  static querySelectorAll_Callback_1(mthis, selectors) native "Element_querySelectorAll_Callback";
 }
 
 class BlinkErrorEvent {
@@ -2105,9 +2169,9 @@
 }
 
 class BlinkEventSource {
-  static constructorCallback_DOMString_Dictionary(url, eventSourceInit) native "EventSource_constructorCallback_DOMString_Dictionary";
+  static constructorCallback_2(url, eventSourceInit) native "EventSource_constructorCallback";
 
-  static constructorCallback_DOMString(url) native "EventSource_constructorCallback_DOMString";
+  static constructorCallback_1(url) native "EventSource_constructorCallback";
 
   static readyState_Getter(mthis) native "EventSource_readyState_Getter";
 
@@ -2119,19 +2183,27 @@
 }
 
 class BlinkFederatedCredential {
-  static constructorCallback_DOMString_DOMString_DOMString_DOMString(id, name, avatarURL, federation) native "FederatedCredential_constructorCallback_DOMString_DOMString_DOMString_DOMString";
+  static constructorCallback_4(id, name, avatarURL, federation) native "FederatedCredential_constructorCallback";
 
   static federation_Getter(mthis) native "FederatedCredential_federation_Getter";
 }
 
-class BlinkFetchBodyStream {}
+class BlinkFetchBodyStream {
+  static asArrayBuffer_Callback(mthis) native "FetchBodyStream_asArrayBuffer_Callback";
+
+  static asBlob_Callback(mthis) native "FetchBodyStream_asBlob_Callback";
+
+  static asJSON_Callback(mthis) native "FetchBodyStream_asJSON_Callback";
+
+  static asText_Callback(mthis) native "FetchBodyStream_asText_Callback";
+}
 
 class BlinkFetchEvent {
   static isReload_Getter(mthis) native "FetchEvent_isReload_Getter";
 
   static request_Getter(mthis) native "FetchEvent_request_Getter";
 
-  static respondWith_Callback_ScriptValue(mthis, value) native "FetchEvent_respondWith_Callback_ScriptValue";
+  static respondWith_Callback_1(mthis, value) native "FetchEvent_respondWith_Callback";
 }
 
 class BlinkFile {
@@ -2145,9 +2217,13 @@
 }
 
 class BlinkFileEntry {
-  static createWriter_Callback_FileWriterCallback_ErrorCallback(mthis, successCallback, errorCallback) native "FileEntry_createWriter_Callback_FileWriterCallback_ErrorCallback";
+  static createWriter_Callback_2(mthis, successCallback, errorCallback) native "FileEntry_createWriter_Callback";
 
-  static file_Callback_FileCallback_ErrorCallback(mthis, successCallback, errorCallback) native "FileEntry_file_Callback_FileCallback_ErrorCallback";
+  static createWriter_Callback_1(mthis, successCallback) native "FileEntry_createWriter_Callback";
+
+  static file_Callback_2(mthis, successCallback, errorCallback) native "FileEntry_file_Callback";
+
+  static file_Callback_1(mthis, successCallback) native "FileEntry_file_Callback";
 }
 
 class BlinkFileEntrySync {}
@@ -2159,7 +2235,7 @@
 class BlinkFileList {
   static length_Getter(mthis) native "FileList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "FileList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "FileList_item_Callback";
 }
 
 class BlinkFileReader {
@@ -2173,13 +2249,13 @@
 
   static abort_Callback(mthis) native "FileReader_abort_Callback";
 
-  static readAsArrayBuffer_Callback_Blob(mthis, blob) native "FileReader_readAsArrayBuffer_Callback_Blob";
+  static readAsArrayBuffer_Callback_1(mthis, blob) native "FileReader_readAsArrayBuffer_Callback";
 
-  static readAsDataURL_Callback_Blob(mthis, blob) native "FileReader_readAsDataURL_Callback_Blob";
+  static readAsDataURL_Callback_1(mthis, blob) native "FileReader_readAsDataURL_Callback";
 
-  static readAsText_Callback_Blob_DOMString(mthis, blob, encoding) native "FileReader_readAsText_Callback_Blob_DOMString";
+  static readAsText_Callback_2(mthis, blob, encoding) native "FileReader_readAsText_Callback";
 
-  static readAsText_Callback_Blob(mthis, blob) native "FileReader_readAsText_Callback_Blob";
+  static readAsText_Callback_1(mthis, blob) native "FileReader_readAsText_Callback";
 }
 
 class BlinkFileReaderSync {
@@ -2197,11 +2273,11 @@
 
   static abort_Callback(mthis) native "FileWriter_abort_Callback";
 
-  static seek_Callback_ll(mthis, position) native "FileWriter_seek_Callback_long long";
+  static seek_Callback_1(mthis, position) native "FileWriter_seek_Callback";
 
-  static truncate_Callback_ll(mthis, size) native "FileWriter_truncate_Callback_long long";
+  static truncate_Callback_1(mthis, size) native "FileWriter_truncate_Callback";
 
-  static write_Callback_Blob(mthis, data) native "FileWriter_write_Callback_Blob";
+  static write_Callback_1(mthis, data) native "FileWriter_write_Callback";
 }
 
 class BlinkFileWriterSync {}
@@ -2213,47 +2289,43 @@
 }
 
 class BlinkFontFace {
-  static constructorCallback_DOMString_DOMString(family, source) native "FontFace_constructorCallback_DOMString_DOMString";
+  static constructorCallback_2(family, source) native "FontFace_constructorCallback";
 
-  static constructorCallback_DOMString_DOMString_Dictionary(family, source, descriptors) native "FontFace_constructorCallback_DOMString_DOMString_Dictionary";
-
-  static constructorCallback_DOMString_ArrayBufferView(family, source) native "FontFace_constructorCallback_DOMString_ArrayBufferView";
-
-  static constructorCallback_DOMString_ArrayBufferView_Dictionary(family, source, descriptors) native "FontFace_constructorCallback_DOMString_ArrayBufferView_Dictionary";
-
-  static constructorCallback_DOMString_ArrayBuffer(family, source) native "FontFace_constructorCallback_DOMString_ArrayBuffer";
-
-  static constructorCallback_DOMString_ArrayBuffer_Dictionary(family, source, descriptors) native "FontFace_constructorCallback_DOMString_ArrayBuffer_Dictionary";
+  static constructorCallback_3(family, source, descriptors) native "FontFace_constructorCallback";
 
   static family_Getter(mthis) native "FontFace_family_Getter";
 
-  static family_Setter_DOMString(mthis, value) native "FontFace_family_Setter";
+  static family_Setter(mthis, value) native "FontFace_family_Setter";
 
   static featureSettings_Getter(mthis) native "FontFace_featureSettings_Getter";
 
-  static featureSettings_Setter_DOMString(mthis, value) native "FontFace_featureSettings_Setter";
+  static featureSettings_Setter(mthis, value) native "FontFace_featureSettings_Setter";
+
+  static loaded_Getter(mthis) native "FontFace_loaded_Getter";
 
   static status_Getter(mthis) native "FontFace_status_Getter";
 
   static stretch_Getter(mthis) native "FontFace_stretch_Getter";
 
-  static stretch_Setter_DOMString(mthis, value) native "FontFace_stretch_Setter";
+  static stretch_Setter(mthis, value) native "FontFace_stretch_Setter";
 
   static style_Getter(mthis) native "FontFace_style_Getter";
 
-  static style_Setter_DOMString(mthis, value) native "FontFace_style_Setter";
+  static style_Setter(mthis, value) native "FontFace_style_Setter";
 
   static unicodeRange_Getter(mthis) native "FontFace_unicodeRange_Getter";
 
-  static unicodeRange_Setter_DOMString(mthis, value) native "FontFace_unicodeRange_Setter";
+  static unicodeRange_Setter(mthis, value) native "FontFace_unicodeRange_Setter";
 
   static variant_Getter(mthis) native "FontFace_variant_Getter";
 
-  static variant_Setter_DOMString(mthis, value) native "FontFace_variant_Setter";
+  static variant_Setter(mthis, value) native "FontFace_variant_Setter";
 
   static weight_Getter(mthis) native "FontFace_weight_Getter";
 
-  static weight_Setter_DOMString(mthis, value) native "FontFace_weight_Setter";
+  static weight_Setter(mthis, value) native "FontFace_weight_Setter";
+
+  static load_Callback(mthis) native "FontFace_load_Callback";
 }
 
 class BlinkFontFaceSet {
@@ -2261,19 +2333,19 @@
 
   static status_Getter(mthis) native "FontFaceSet_status_Getter";
 
-  static add_Callback_FontFace(mthis, fontFace) native "FontFaceSet_add_Callback_FontFace";
+  static add_Callback_1(mthis, fontFace) native "FontFaceSet_add_Callback";
 
-  static check_Callback_DOMString_DOMString(mthis, font, text) native "FontFaceSet_check_Callback_DOMString_DOMString";
+  static check_Callback_2(mthis, font, text) native "FontFaceSet_check_Callback";
 
   static clear_Callback(mthis) native "FontFaceSet_clear_Callback";
 
-  static delete_Callback_FontFace(mthis, fontFace) native "FontFaceSet_delete_Callback_FontFace";
+  static delete_Callback_1(mthis, fontFace) native "FontFaceSet_delete_Callback";
 
-  static forEach_Callback_FontFaceSetForEachCallback_ScriptValue(mthis, callback, thisArg) native "FontFaceSet_forEach_Callback_FontFaceSetForEachCallback_ScriptValue";
+  static forEach_Callback_2(mthis, callback, thisArg) native "FontFaceSet_forEach_Callback";
 
-  static forEach_Callback_FontFaceSetForEachCallback(mthis, callback) native "FontFaceSet_forEach_Callback_FontFaceSetForEachCallback";
+  static forEach_Callback_1(mthis, callback) native "FontFaceSet_forEach_Callback";
 
-  static has_Callback_FontFace(mthis, fontFace) native "FontFaceSet_has_Callback_FontFace";
+  static has_Callback_1(mthis, fontFace) native "FontFaceSet_has_Callback";
 }
 
 class BlinkFontFaceSetLoadEvent {
@@ -2281,11 +2353,11 @@
 }
 
 class BlinkFormData {
-  static constructorCallback_HTMLFormElement(form) native "FormData_constructorCallback_HTMLFormElement";
+  static constructorCallback_1(form) native "FormData_constructorCallback_HTMLFormElement";
 
-  static append_Callback_DOMString_DOMString(mthis, name, value) native "FormData_append_Callback";
+  static append_Callback_2(mthis, name, value) native "FormData_append_Callback";
 
-  static append_Callback_DOMString_Blob_DOMString(mthis, name, value, filename) native "FormData_append_Callback";
+  static append_Callback_3(mthis, name, value, filename) native "FormData_append_Callback";
 }
 
 class BlinkGainNode {
@@ -2321,17 +2393,31 @@
 class BlinkGamepadList {
   static length_Getter(mthis) native "GamepadList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "GamepadList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "GamepadList_item_Callback";
 }
 
-class BlinkGeofencing {}
+class BlinkGeofencing {
+  static getRegisteredRegions_Callback(mthis) native "Geofencing_getRegisteredRegions_Callback";
+
+  static registerRegion_Callback_1(mthis, region) native "Geofencing_registerRegion_Callback";
+
+  static unregisterRegion_Callback_1(mthis, regionId) native "Geofencing_unregisterRegion_Callback";
+}
 
 class BlinkGeolocation {
-  static clearWatch_Callback_long(mthis, watchID) native "Geolocation_clearWatch_Callback_long";
+  static clearWatch_Callback_1(mthis, watchID) native "Geolocation_clearWatch_Callback";
 
-  static getCurrentPosition_Callback_PositionCallback_PositionErrorCallback_Dictionary(mthis, successCallback, errorCallback, options) native "Geolocation_getCurrentPosition_Callback_PositionCallback_PositionErrorCallback_Dictionary";
+  static getCurrentPosition_Callback_3(mthis, successCallback, errorCallback, options) native "Geolocation_getCurrentPosition_Callback";
 
-  static watchPosition_Callback_PositionCallback_PositionErrorCallback_Dictionary(mthis, successCallback, errorCallback, options) native "Geolocation_watchPosition_Callback_PositionCallback_PositionErrorCallback_Dictionary";
+  static getCurrentPosition_Callback_2(mthis, successCallback, errorCallback) native "Geolocation_getCurrentPosition_Callback";
+
+  static getCurrentPosition_Callback_1(mthis, successCallback) native "Geolocation_getCurrentPosition_Callback";
+
+  static watchPosition_Callback_3(mthis, successCallback, errorCallback, options) native "Geolocation_watchPosition_Callback";
+
+  static watchPosition_Callback_2(mthis, successCallback, errorCallback) native "Geolocation_watchPosition_Callback";
+
+  static watchPosition_Callback_1(mthis, successCallback) native "Geolocation_watchPosition_Callback";
 }
 
 class BlinkGeoposition {
@@ -2341,25 +2427,25 @@
 }
 
 class BlinkHTMLAllCollection {
-  static item_Callback_ul(mthis, index) native "HTMLAllCollection_item_Callback";
+  static item_Callback_1(mthis, index) native "HTMLAllCollection_item_Callback";
 }
 
 class BlinkHTMLElement {
   static contentEditable_Getter(mthis) native "HTMLElement_contentEditable_Getter";
 
-  static contentEditable_Setter_DOMString(mthis, value) native "HTMLElement_contentEditable_Setter";
+  static contentEditable_Setter(mthis, value) native "HTMLElement_contentEditable_Setter";
 
   static dir_Getter(mthis) native "HTMLElement_dir_Getter";
 
-  static dir_Setter_DOMString(mthis, value) native "HTMLElement_dir_Setter";
+  static dir_Setter(mthis, value) native "HTMLElement_dir_Setter";
 
   static draggable_Getter(mthis) native "HTMLElement_draggable_Getter";
 
-  static draggable_Setter_boolean(mthis, value) native "HTMLElement_draggable_Setter";
+  static draggable_Setter(mthis, value) native "HTMLElement_draggable_Setter";
 
   static hidden_Getter(mthis) native "HTMLElement_hidden_Getter";
 
-  static hidden_Setter_boolean(mthis, value) native "HTMLElement_hidden_Setter";
+  static hidden_Setter(mthis, value) native "HTMLElement_hidden_Setter";
 
   static inputMethodContext_Getter(mthis) native "HTMLElement_inputMethodContext_Getter";
 
@@ -2367,27 +2453,27 @@
 
   static lang_Getter(mthis) native "HTMLElement_lang_Getter";
 
-  static lang_Setter_DOMString(mthis, value) native "HTMLElement_lang_Setter";
+  static lang_Setter(mthis, value) native "HTMLElement_lang_Setter";
 
   static spellcheck_Getter(mthis) native "HTMLElement_spellcheck_Getter";
 
-  static spellcheck_Setter_boolean(mthis, value) native "HTMLElement_spellcheck_Setter";
+  static spellcheck_Setter(mthis, value) native "HTMLElement_spellcheck_Setter";
 
   static tabIndex_Getter(mthis) native "HTMLElement_tabIndex_Getter";
 
-  static tabIndex_Setter_long(mthis, value) native "HTMLElement_tabIndex_Setter";
+  static tabIndex_Setter(mthis, value) native "HTMLElement_tabIndex_Setter";
 
   static title_Getter(mthis) native "HTMLElement_title_Getter";
 
-  static title_Setter_DOMString(mthis, value) native "HTMLElement_title_Setter";
+  static title_Setter(mthis, value) native "HTMLElement_title_Setter";
 
   static translate_Getter(mthis) native "HTMLElement_translate_Getter";
 
-  static translate_Setter_boolean(mthis, value) native "HTMLElement_translate_Setter";
+  static translate_Setter(mthis, value) native "HTMLElement_translate_Setter";
 
   static webkitdropzone_Getter(mthis) native "HTMLElement_webkitdropzone_Getter";
 
-  static webkitdropzone_Setter_DOMString(mthis, value) native "HTMLElement_webkitdropzone_Setter";
+  static webkitdropzone_Setter(mthis, value) native "HTMLElement_webkitdropzone_Setter";
 
   static click_Callback(mthis) native "HTMLElement_click_Callback";
 }
@@ -2395,45 +2481,45 @@
 class BlinkURLUtils {
   static hash_Getter(mthis) native "URL_hash_Getter";
 
-  static hash_Setter_DOMString(mthis, value) native "URL_hash_Setter";
+  static hash_Setter(mthis, value) native "URL_hash_Setter";
 
   static host_Getter(mthis) native "URL_host_Getter";
 
-  static host_Setter_DOMString(mthis, value) native "URL_host_Setter";
+  static host_Setter(mthis, value) native "URL_host_Setter";
 
   static hostname_Getter(mthis) native "URL_hostname_Getter";
 
-  static hostname_Setter_DOMString(mthis, value) native "URL_hostname_Setter";
+  static hostname_Setter(mthis, value) native "URL_hostname_Setter";
 
   static href_Getter(mthis) native "URL_href_Getter";
 
-  static href_Setter_DOMString(mthis, value) native "URL_href_Setter";
+  static href_Setter(mthis, value) native "URL_href_Setter";
 
   static origin_Getter(mthis) native "URL_origin_Getter";
 
   static password_Getter(mthis) native "URL_password_Getter";
 
-  static password_Setter_DOMString(mthis, value) native "URL_password_Setter";
+  static password_Setter(mthis, value) native "URL_password_Setter";
 
   static pathname_Getter(mthis) native "URL_pathname_Getter";
 
-  static pathname_Setter_DOMString(mthis, value) native "URL_pathname_Setter";
+  static pathname_Setter(mthis, value) native "URL_pathname_Setter";
 
   static port_Getter(mthis) native "URL_port_Getter";
 
-  static port_Setter_DOMString(mthis, value) native "URL_port_Setter";
+  static port_Setter(mthis, value) native "URL_port_Setter";
 
   static protocol_Getter(mthis) native "URL_protocol_Getter";
 
-  static protocol_Setter_DOMString(mthis, value) native "URL_protocol_Setter";
+  static protocol_Setter(mthis, value) native "URL_protocol_Setter";
 
   static search_Getter(mthis) native "URL_search_Getter";
 
-  static search_Setter_DOMString(mthis, value) native "URL_search_Setter";
+  static search_Setter(mthis, value) native "URL_search_Setter";
 
   static username_Getter(mthis) native "URL_username_Getter";
 
-  static username_Setter_DOMString(mthis, value) native "URL_username_Setter";
+  static username_Setter(mthis, value) native "URL_username_Setter";
 
   static toString_Callback(mthis) native "URL_toString_Callback";
 }
@@ -2441,69 +2527,69 @@
 class BlinkHTMLAnchorElement {
   static download_Getter(mthis) native "HTMLAnchorElement_download_Getter";
 
-  static download_Setter_DOMString(mthis, value) native "HTMLAnchorElement_download_Setter";
+  static download_Setter(mthis, value) native "HTMLAnchorElement_download_Setter";
 
   static hreflang_Getter(mthis) native "HTMLAnchorElement_hreflang_Getter";
 
-  static hreflang_Setter_DOMString(mthis, value) native "HTMLAnchorElement_hreflang_Setter";
+  static hreflang_Setter(mthis, value) native "HTMLAnchorElement_hreflang_Setter";
 
   static integrity_Getter(mthis) native "HTMLAnchorElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLAnchorElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLAnchorElement_integrity_Setter";
 
   static rel_Getter(mthis) native "HTMLAnchorElement_rel_Getter";
 
-  static rel_Setter_DOMString(mthis, value) native "HTMLAnchorElement_rel_Setter";
+  static rel_Setter(mthis, value) native "HTMLAnchorElement_rel_Setter";
 
   static target_Getter(mthis) native "HTMLAnchorElement_target_Getter";
 
-  static target_Setter_DOMString(mthis, value) native "HTMLAnchorElement_target_Setter";
+  static target_Setter(mthis, value) native "HTMLAnchorElement_target_Setter";
 
   static type_Getter(mthis) native "HTMLAnchorElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLAnchorElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLAnchorElement_type_Setter";
 
   static hash_Getter(mthis) native "HTMLAnchorElement_hash_Getter";
 
-  static hash_Setter_DOMString(mthis, value) native "HTMLAnchorElement_hash_Setter";
+  static hash_Setter(mthis, value) native "HTMLAnchorElement_hash_Setter";
 
   static host_Getter(mthis) native "HTMLAnchorElement_host_Getter";
 
-  static host_Setter_DOMString(mthis, value) native "HTMLAnchorElement_host_Setter";
+  static host_Setter(mthis, value) native "HTMLAnchorElement_host_Setter";
 
   static hostname_Getter(mthis) native "HTMLAnchorElement_hostname_Getter";
 
-  static hostname_Setter_DOMString(mthis, value) native "HTMLAnchorElement_hostname_Setter";
+  static hostname_Setter(mthis, value) native "HTMLAnchorElement_hostname_Setter";
 
   static href_Getter(mthis) native "HTMLAnchorElement_href_Getter";
 
-  static href_Setter_DOMString(mthis, value) native "HTMLAnchorElement_href_Setter";
+  static href_Setter(mthis, value) native "HTMLAnchorElement_href_Setter";
 
   static origin_Getter(mthis) native "HTMLAnchorElement_origin_Getter";
 
   static password_Getter(mthis) native "HTMLAnchorElement_password_Getter";
 
-  static password_Setter_DOMString(mthis, value) native "HTMLAnchorElement_password_Setter";
+  static password_Setter(mthis, value) native "HTMLAnchorElement_password_Setter";
 
   static pathname_Getter(mthis) native "HTMLAnchorElement_pathname_Getter";
 
-  static pathname_Setter_DOMString(mthis, value) native "HTMLAnchorElement_pathname_Setter";
+  static pathname_Setter(mthis, value) native "HTMLAnchorElement_pathname_Setter";
 
   static port_Getter(mthis) native "HTMLAnchorElement_port_Getter";
 
-  static port_Setter_DOMString(mthis, value) native "HTMLAnchorElement_port_Setter";
+  static port_Setter(mthis, value) native "HTMLAnchorElement_port_Setter";
 
   static protocol_Getter(mthis) native "HTMLAnchorElement_protocol_Getter";
 
-  static protocol_Setter_DOMString(mthis, value) native "HTMLAnchorElement_protocol_Setter";
+  static protocol_Setter(mthis, value) native "HTMLAnchorElement_protocol_Setter";
 
   static search_Getter(mthis) native "HTMLAnchorElement_search_Getter";
 
-  static search_Setter_DOMString(mthis, value) native "HTMLAnchorElement_search_Setter";
+  static search_Setter(mthis, value) native "HTMLAnchorElement_search_Setter";
 
   static username_Getter(mthis) native "HTMLAnchorElement_username_Getter";
 
-  static username_Setter_DOMString(mthis, value) native "HTMLAnchorElement_username_Setter";
+  static username_Setter(mthis, value) native "HTMLAnchorElement_username_Setter";
 
   static toString_Callback(mthis) native "HTMLAnchorElement_toString_Callback";
 }
@@ -2513,61 +2599,61 @@
 class BlinkHTMLAreaElement {
   static alt_Getter(mthis) native "HTMLAreaElement_alt_Getter";
 
-  static alt_Setter_DOMString(mthis, value) native "HTMLAreaElement_alt_Setter";
+  static alt_Setter(mthis, value) native "HTMLAreaElement_alt_Setter";
 
   static coords_Getter(mthis) native "HTMLAreaElement_coords_Getter";
 
-  static coords_Setter_DOMString(mthis, value) native "HTMLAreaElement_coords_Setter";
+  static coords_Setter(mthis, value) native "HTMLAreaElement_coords_Setter";
 
   static shape_Getter(mthis) native "HTMLAreaElement_shape_Getter";
 
-  static shape_Setter_DOMString(mthis, value) native "HTMLAreaElement_shape_Setter";
+  static shape_Setter(mthis, value) native "HTMLAreaElement_shape_Setter";
 
   static target_Getter(mthis) native "HTMLAreaElement_target_Getter";
 
-  static target_Setter_DOMString(mthis, value) native "HTMLAreaElement_target_Setter";
+  static target_Setter(mthis, value) native "HTMLAreaElement_target_Setter";
 
   static hash_Getter(mthis) native "HTMLAreaElement_hash_Getter";
 
-  static hash_Setter_DOMString(mthis, value) native "HTMLAreaElement_hash_Setter";
+  static hash_Setter(mthis, value) native "HTMLAreaElement_hash_Setter";
 
   static host_Getter(mthis) native "HTMLAreaElement_host_Getter";
 
-  static host_Setter_DOMString(mthis, value) native "HTMLAreaElement_host_Setter";
+  static host_Setter(mthis, value) native "HTMLAreaElement_host_Setter";
 
   static hostname_Getter(mthis) native "HTMLAreaElement_hostname_Getter";
 
-  static hostname_Setter_DOMString(mthis, value) native "HTMLAreaElement_hostname_Setter";
+  static hostname_Setter(mthis, value) native "HTMLAreaElement_hostname_Setter";
 
   static href_Getter(mthis) native "HTMLAreaElement_href_Getter";
 
-  static href_Setter_DOMString(mthis, value) native "HTMLAreaElement_href_Setter";
+  static href_Setter(mthis, value) native "HTMLAreaElement_href_Setter";
 
   static origin_Getter(mthis) native "HTMLAreaElement_origin_Getter";
 
   static password_Getter(mthis) native "HTMLAreaElement_password_Getter";
 
-  static password_Setter_DOMString(mthis, value) native "HTMLAreaElement_password_Setter";
+  static password_Setter(mthis, value) native "HTMLAreaElement_password_Setter";
 
   static pathname_Getter(mthis) native "HTMLAreaElement_pathname_Getter";
 
-  static pathname_Setter_DOMString(mthis, value) native "HTMLAreaElement_pathname_Setter";
+  static pathname_Setter(mthis, value) native "HTMLAreaElement_pathname_Setter";
 
   static port_Getter(mthis) native "HTMLAreaElement_port_Getter";
 
-  static port_Setter_DOMString(mthis, value) native "HTMLAreaElement_port_Setter";
+  static port_Setter(mthis, value) native "HTMLAreaElement_port_Setter";
 
   static protocol_Getter(mthis) native "HTMLAreaElement_protocol_Getter";
 
-  static protocol_Setter_DOMString(mthis, value) native "HTMLAreaElement_protocol_Setter";
+  static protocol_Setter(mthis, value) native "HTMLAreaElement_protocol_Setter";
 
   static search_Getter(mthis) native "HTMLAreaElement_search_Getter";
 
-  static search_Setter_DOMString(mthis, value) native "HTMLAreaElement_search_Setter";
+  static search_Setter(mthis, value) native "HTMLAreaElement_search_Setter";
 
   static username_Getter(mthis) native "HTMLAreaElement_username_Getter";
 
-  static username_Setter_DOMString(mthis, value) native "HTMLAreaElement_username_Setter";
+  static username_Setter(mthis, value) native "HTMLAreaElement_username_Setter";
 
   static toString_Callback(mthis) native "HTMLAreaElement_toString_Callback";
 }
@@ -2577,35 +2663,35 @@
 
   static autoplay_Getter(mthis) native "HTMLMediaElement_autoplay_Getter";
 
-  static autoplay_Setter_boolean(mthis, value) native "HTMLMediaElement_autoplay_Setter";
+  static autoplay_Setter(mthis, value) native "HTMLMediaElement_autoplay_Setter";
 
   static buffered_Getter(mthis) native "HTMLMediaElement_buffered_Getter";
 
   static controller_Getter(mthis) native "HTMLMediaElement_controller_Getter";
 
-  static controller_Setter_MediaController(mthis, value) native "HTMLMediaElement_controller_Setter";
+  static controller_Setter(mthis, value) native "HTMLMediaElement_controller_Setter";
 
   static controls_Getter(mthis) native "HTMLMediaElement_controls_Getter";
 
-  static controls_Setter_boolean(mthis, value) native "HTMLMediaElement_controls_Setter";
+  static controls_Setter(mthis, value) native "HTMLMediaElement_controls_Setter";
 
   static crossOrigin_Getter(mthis) native "HTMLMediaElement_crossOrigin_Getter";
 
-  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLMediaElement_crossOrigin_Setter";
+  static crossOrigin_Setter(mthis, value) native "HTMLMediaElement_crossOrigin_Setter";
 
   static currentSrc_Getter(mthis) native "HTMLMediaElement_currentSrc_Getter";
 
   static currentTime_Getter(mthis) native "HTMLMediaElement_currentTime_Getter";
 
-  static currentTime_Setter_double(mthis, value) native "HTMLMediaElement_currentTime_Setter";
+  static currentTime_Setter(mthis, value) native "HTMLMediaElement_currentTime_Setter";
 
   static defaultMuted_Getter(mthis) native "HTMLMediaElement_defaultMuted_Getter";
 
-  static defaultMuted_Setter_boolean(mthis, value) native "HTMLMediaElement_defaultMuted_Setter";
+  static defaultMuted_Setter(mthis, value) native "HTMLMediaElement_defaultMuted_Setter";
 
   static defaultPlaybackRate_Getter(mthis) native "HTMLMediaElement_defaultPlaybackRate_Getter";
 
-  static defaultPlaybackRate_Setter_double(mthis, value) native "HTMLMediaElement_defaultPlaybackRate_Setter";
+  static defaultPlaybackRate_Setter(mthis, value) native "HTMLMediaElement_defaultPlaybackRate_Setter";
 
   static duration_Getter(mthis) native "HTMLMediaElement_duration_Getter";
 
@@ -2615,21 +2701,21 @@
 
   static integrity_Getter(mthis) native "HTMLMediaElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLMediaElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLMediaElement_integrity_Setter";
 
   static loop_Getter(mthis) native "HTMLMediaElement_loop_Getter";
 
-  static loop_Setter_boolean(mthis, value) native "HTMLMediaElement_loop_Setter";
+  static loop_Setter(mthis, value) native "HTMLMediaElement_loop_Setter";
 
   static mediaGroup_Getter(mthis) native "HTMLMediaElement_mediaGroup_Getter";
 
-  static mediaGroup_Setter_DOMString(mthis, value) native "HTMLMediaElement_mediaGroup_Setter";
+  static mediaGroup_Setter(mthis, value) native "HTMLMediaElement_mediaGroup_Setter";
 
   static mediaKeys_Getter(mthis) native "HTMLMediaElement_mediaKeys_Getter";
 
   static muted_Getter(mthis) native "HTMLMediaElement_muted_Getter";
 
-  static muted_Setter_boolean(mthis, value) native "HTMLMediaElement_muted_Setter";
+  static muted_Setter(mthis, value) native "HTMLMediaElement_muted_Setter";
 
   static networkState_Getter(mthis) native "HTMLMediaElement_networkState_Getter";
 
@@ -2637,13 +2723,13 @@
 
   static playbackRate_Getter(mthis) native "HTMLMediaElement_playbackRate_Getter";
 
-  static playbackRate_Setter_double(mthis, value) native "HTMLMediaElement_playbackRate_Setter";
+  static playbackRate_Setter(mthis, value) native "HTMLMediaElement_playbackRate_Setter";
 
   static played_Getter(mthis) native "HTMLMediaElement_played_Getter";
 
   static preload_Getter(mthis) native "HTMLMediaElement_preload_Getter";
 
-  static preload_Setter_DOMString(mthis, value) native "HTMLMediaElement_preload_Setter";
+  static preload_Setter(mthis, value) native "HTMLMediaElement_preload_Setter";
 
   static readyState_Getter(mthis) native "HTMLMediaElement_readyState_Getter";
 
@@ -2653,7 +2739,7 @@
 
   static src_Getter(mthis) native "HTMLMediaElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLMediaElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLMediaElement_src_Setter";
 
   static textTracks_Getter(mthis) native "HTMLMediaElement_textTracks_Getter";
 
@@ -2661,19 +2747,21 @@
 
   static volume_Getter(mthis) native "HTMLMediaElement_volume_Getter";
 
-  static volume_Setter_double(mthis, value) native "HTMLMediaElement_volume_Setter";
+  static volume_Setter(mthis, value) native "HTMLMediaElement_volume_Setter";
 
   static webkitAudioDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitAudioDecodedByteCount_Getter";
 
   static webkitVideoDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitVideoDecodedByteCount_Getter";
 
-  static addTextTrack_Callback_DOMString_DOMString_DOMString(mthis, kind, label, language) native "HTMLMediaElement_addTextTrack_Callback_DOMString_DOMString_DOMString";
+  static addTextTrack_Callback_3(mthis, kind, label, language) native "HTMLMediaElement_addTextTrack_Callback";
 
-  static addTextTrack_Callback_DOMString_DOMString(mthis, kind, label) native "HTMLMediaElement_addTextTrack_Callback_DOMString_DOMString";
+  static addTextTrack_Callback_2(mthis, kind, label) native "HTMLMediaElement_addTextTrack_Callback";
 
-  static addTextTrack_Callback_DOMString(mthis, kind) native "HTMLMediaElement_addTextTrack_Callback_DOMString";
+  static addTextTrack_Callback_1(mthis, kind) native "HTMLMediaElement_addTextTrack_Callback";
 
-  static canPlayType_Callback_DOMString_DOMString(mthis, type, keySystem) native "HTMLMediaElement_canPlayType_Callback_DOMString_DOMString";
+  static canPlayType_Callback_2(mthis, type, keySystem) native "HTMLMediaElement_canPlayType_Callback";
+
+  static canPlayType_Callback_1(mthis, type) native "HTMLMediaElement_canPlayType_Callback";
 
   static load_Callback(mthis) native "HTMLMediaElement_load_Callback";
 
@@ -2681,21 +2769,21 @@
 
   static play_Callback(mthis) native "HTMLMediaElement_play_Callback";
 
-  static setMediaKeys_Callback_MediaKeys(mthis, mediaKeys) native "HTMLMediaElement_setMediaKeys_Callback_MediaKeys";
+  static setMediaKeys_Callback_1(mthis, mediaKeys) native "HTMLMediaElement_setMediaKeys_Callback";
 
-  static webkitAddKey_Callback_DOMString_Uint8Array_Uint8Array_DOMString(mthis, keySystem, key, initData, sessionId) native "HTMLMediaElement_webkitAddKey_Callback_DOMString_Uint8Array_Uint8Array_DOMString";
+  static webkitAddKey_Callback_4(mthis, keySystem, key, initData, sessionId) native "HTMLMediaElement_webkitAddKey_Callback";
 
-  static webkitAddKey_Callback_DOMString_Uint8Array(mthis, keySystem, key) native "HTMLMediaElement_webkitAddKey_Callback_DOMString_Uint8Array";
+  static webkitAddKey_Callback_2(mthis, keySystem, key) native "HTMLMediaElement_webkitAddKey_Callback";
 
-  static webkitCancelKeyRequest_Callback_DOMString_DOMString(mthis, keySystem, sessionId) native "HTMLMediaElement_webkitCancelKeyRequest_Callback_DOMString_DOMString";
+  static webkitCancelKeyRequest_Callback_2(mthis, keySystem, sessionId) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
 
-  static webkitGenerateKeyRequest_Callback_DOMString_Uint8Array(mthis, keySystem, initData) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback_DOMString_Uint8Array";
+  static webkitGenerateKeyRequest_Callback_2(mthis, keySystem, initData) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback";
 
-  static webkitGenerateKeyRequest_Callback_DOMString(mthis, keySystem) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback_DOMString";
+  static webkitGenerateKeyRequest_Callback_1(mthis, keySystem) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback";
 }
 
 class BlinkHTMLAudioElement {
-  static constructorCallback_DOMString(src) native "HTMLAudioElement_constructorCallback_DOMString";
+  static constructorCallback_1(src) native "HTMLAudioElement_constructorCallback";
 }
 
 class BlinkHTMLBRElement {}
@@ -2703,11 +2791,11 @@
 class BlinkHTMLBaseElement {
   static href_Getter(mthis) native "HTMLBaseElement_href_Getter";
 
-  static href_Setter_DOMString(mthis, value) native "HTMLBaseElement_href_Setter";
+  static href_Setter(mthis, value) native "HTMLBaseElement_href_Setter";
 
   static target_Getter(mthis) native "HTMLBaseElement_target_Getter";
 
-  static target_Setter_DOMString(mthis, value) native "HTMLBaseElement_target_Setter";
+  static target_Setter(mthis, value) native "HTMLBaseElement_target_Setter";
 }
 
 class BlinkWindowEventHandlers {}
@@ -2717,43 +2805,43 @@
 class BlinkHTMLButtonElement {
   static autofocus_Getter(mthis) native "HTMLButtonElement_autofocus_Getter";
 
-  static autofocus_Setter_boolean(mthis, value) native "HTMLButtonElement_autofocus_Setter";
+  static autofocus_Setter(mthis, value) native "HTMLButtonElement_autofocus_Setter";
 
   static disabled_Getter(mthis) native "HTMLButtonElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLButtonElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLButtonElement_disabled_Setter";
 
   static form_Getter(mthis) native "HTMLButtonElement_form_Getter";
 
   static formAction_Getter(mthis) native "HTMLButtonElement_formAction_Getter";
 
-  static formAction_Setter_DOMString(mthis, value) native "HTMLButtonElement_formAction_Setter";
+  static formAction_Setter(mthis, value) native "HTMLButtonElement_formAction_Setter";
 
   static formEnctype_Getter(mthis) native "HTMLButtonElement_formEnctype_Getter";
 
-  static formEnctype_Setter_DOMString(mthis, value) native "HTMLButtonElement_formEnctype_Setter";
+  static formEnctype_Setter(mthis, value) native "HTMLButtonElement_formEnctype_Setter";
 
   static formMethod_Getter(mthis) native "HTMLButtonElement_formMethod_Getter";
 
-  static formMethod_Setter_DOMString(mthis, value) native "HTMLButtonElement_formMethod_Setter";
+  static formMethod_Setter(mthis, value) native "HTMLButtonElement_formMethod_Setter";
 
   static formNoValidate_Getter(mthis) native "HTMLButtonElement_formNoValidate_Getter";
 
-  static formNoValidate_Setter_boolean(mthis, value) native "HTMLButtonElement_formNoValidate_Setter";
+  static formNoValidate_Setter(mthis, value) native "HTMLButtonElement_formNoValidate_Setter";
 
   static formTarget_Getter(mthis) native "HTMLButtonElement_formTarget_Getter";
 
-  static formTarget_Setter_DOMString(mthis, value) native "HTMLButtonElement_formTarget_Setter";
+  static formTarget_Setter(mthis, value) native "HTMLButtonElement_formTarget_Setter";
 
   static labels_Getter(mthis) native "HTMLButtonElement_labels_Getter";
 
   static name_Getter(mthis) native "HTMLButtonElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLButtonElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLButtonElement_name_Setter";
 
   static type_Getter(mthis) native "HTMLButtonElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLButtonElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLButtonElement_type_Setter";
 
   static validationMessage_Getter(mthis) native "HTMLButtonElement_validationMessage_Getter";
 
@@ -2761,41 +2849,41 @@
 
   static value_Getter(mthis) native "HTMLButtonElement_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "HTMLButtonElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLButtonElement_value_Setter";
 
   static willValidate_Getter(mthis) native "HTMLButtonElement_willValidate_Getter";
 
   static checkValidity_Callback(mthis) native "HTMLButtonElement_checkValidity_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLButtonElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLButtonElement_setCustomValidity_Callback";
 }
 
 class BlinkHTMLCanvasElement {
   static height_Getter(mthis) native "HTMLCanvasElement_height_Getter";
 
-  static height_Setter_long(mthis, value) native "HTMLCanvasElement_height_Setter";
+  static height_Setter(mthis, value) native "HTMLCanvasElement_height_Setter";
 
   static width_Getter(mthis) native "HTMLCanvasElement_width_Getter";
 
-  static width_Setter_long(mthis, value) native "HTMLCanvasElement_width_Setter";
+  static width_Setter(mthis, value) native "HTMLCanvasElement_width_Setter";
 
-  static getContext_Callback_DOMString_Dictionary(mthis, contextId, attrs) native "HTMLCanvasElement_getContext_Callback";
+  static getContext_Callback_2(mthis, contextId, attrs) native "HTMLCanvasElement_getContext_Callback";
 
-  static toDataURL_Callback_DOMString_float(mthis, type, quality) native "HTMLCanvasElement_toDataURL_Callback";
+  static toDataURL_Callback_2(mthis, type, quality) native "HTMLCanvasElement_toDataURL_Callback";
 }
 
 class BlinkHTMLCollection {
   static length_Getter(mthis) native "HTMLCollection_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "HTMLCollection_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "HTMLCollection_item_Callback";
 
-  static namedItem_Callback_DOMString(mthis, name) native "HTMLCollection_namedItem_Callback_DOMString";
+  static namedItem_Callback_1(mthis, name) native "HTMLCollection_namedItem_Callback";
 }
 
 class BlinkHTMLContentElement {
   static select_Getter(mthis) native "HTMLContentElement_select_Getter";
 
-  static select_Setter_DOMString(mthis, value) native "HTMLContentElement_select_Setter";
+  static select_Setter(mthis, value) native "HTMLContentElement_select_Setter";
 
   static getDistributedNodes_Callback(mthis) native "HTMLContentElement_getDistributedNodes_Callback";
 }
@@ -2809,19 +2897,19 @@
 class BlinkHTMLDetailsElement {
   static open_Getter(mthis) native "HTMLDetailsElement_open_Getter";
 
-  static open_Setter_boolean(mthis, value) native "HTMLDetailsElement_open_Setter";
+  static open_Setter(mthis, value) native "HTMLDetailsElement_open_Setter";
 }
 
 class BlinkHTMLDialogElement {
   static open_Getter(mthis) native "HTMLDialogElement_open_Getter";
 
-  static open_Setter_boolean(mthis, value) native "HTMLDialogElement_open_Setter";
+  static open_Setter(mthis, value) native "HTMLDialogElement_open_Setter";
 
   static returnValue_Getter(mthis) native "HTMLDialogElement_returnValue_Getter";
 
-  static returnValue_Setter_DOMString(mthis, value) native "HTMLDialogElement_returnValue_Setter";
+  static returnValue_Setter(mthis, value) native "HTMLDialogElement_returnValue_Setter";
 
-  static close_Callback_DOMString(mthis, returnValue) native "HTMLDialogElement_close_Callback_DOMString";
+  static close_Callback_1(mthis, returnValue) native "HTMLDialogElement_close_Callback";
 
   static show_Callback(mthis) native "HTMLDialogElement_show_Callback";
 
@@ -2837,37 +2925,37 @@
 class BlinkHTMLEmbedElement {
   static height_Getter(mthis) native "HTMLEmbedElement_height_Getter";
 
-  static height_Setter_DOMString(mthis, value) native "HTMLEmbedElement_height_Setter";
+  static height_Setter(mthis, value) native "HTMLEmbedElement_height_Setter";
 
   static integrity_Getter(mthis) native "HTMLEmbedElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLEmbedElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLEmbedElement_integrity_Setter";
 
   static name_Getter(mthis) native "HTMLEmbedElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLEmbedElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLEmbedElement_name_Setter";
 
   static src_Getter(mthis) native "HTMLEmbedElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLEmbedElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLEmbedElement_src_Setter";
 
   static type_Getter(mthis) native "HTMLEmbedElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLEmbedElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLEmbedElement_type_Setter";
 
   static width_Getter(mthis) native "HTMLEmbedElement_width_Getter";
 
-  static width_Setter_DOMString(mthis, value) native "HTMLEmbedElement_width_Setter";
+  static width_Setter(mthis, value) native "HTMLEmbedElement_width_Setter";
 
-  static $__getter___Callback_ul(mthis, index_OR_name) native "HTMLEmbedElement___getter___Callback";
+  static $__getter___Callback_1(mthis, index_OR_name) native "HTMLEmbedElement___getter___Callback";
 
-  static $__setter___Callback_ul_Node(mthis, index_OR_name, value) native "HTMLEmbedElement___setter___Callback";
+  static $__setter___Callback_2(mthis, index_OR_name, value) native "HTMLEmbedElement___setter___Callback";
 }
 
 class BlinkHTMLFieldSetElement {
   static disabled_Getter(mthis) native "HTMLFieldSetElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLFieldSetElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLFieldSetElement_disabled_Setter";
 
   static elements_Getter(mthis) native "HTMLFieldSetElement_elements_Getter";
 
@@ -2875,7 +2963,7 @@
 
   static name_Getter(mthis) native "HTMLFieldSetElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLFieldSetElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLFieldSetElement_name_Setter";
 
   static type_Getter(mthis) native "HTMLFieldSetElement_type_Getter";
 
@@ -2887,61 +2975,59 @@
 
   static checkValidity_Callback(mthis) native "HTMLFieldSetElement_checkValidity_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLFieldSetElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLFieldSetElement_setCustomValidity_Callback";
 }
 
 class BlinkHTMLFontElement {}
 
 class BlinkHTMLFormControlsCollection {
-  static namedItem_Callback_DOMString(mthis, name) native "HTMLFormControlsCollection_namedItem_Callback_DOMString";
+  static namedItem_Callback_1(mthis, name) native "HTMLFormControlsCollection_namedItem_Callback";
 }
 
 class BlinkHTMLFormElement {
   static acceptCharset_Getter(mthis) native "HTMLFormElement_acceptCharset_Getter";
 
-  static acceptCharset_Setter_DOMString(mthis, value) native "HTMLFormElement_acceptCharset_Setter";
+  static acceptCharset_Setter(mthis, value) native "HTMLFormElement_acceptCharset_Setter";
 
   static action_Getter(mthis) native "HTMLFormElement_action_Getter";
 
-  static action_Setter_DOMString(mthis, value) native "HTMLFormElement_action_Setter";
+  static action_Setter(mthis, value) native "HTMLFormElement_action_Setter";
 
   static autocomplete_Getter(mthis) native "HTMLFormElement_autocomplete_Getter";
 
-  static autocomplete_Setter_DOMString(mthis, value) native "HTMLFormElement_autocomplete_Setter";
+  static autocomplete_Setter(mthis, value) native "HTMLFormElement_autocomplete_Setter";
 
   static encoding_Getter(mthis) native "HTMLFormElement_encoding_Getter";
 
-  static encoding_Setter_DOMString(mthis, value) native "HTMLFormElement_encoding_Setter";
+  static encoding_Setter(mthis, value) native "HTMLFormElement_encoding_Setter";
 
   static enctype_Getter(mthis) native "HTMLFormElement_enctype_Getter";
 
-  static enctype_Setter_DOMString(mthis, value) native "HTMLFormElement_enctype_Setter";
+  static enctype_Setter(mthis, value) native "HTMLFormElement_enctype_Setter";
 
   static length_Getter(mthis) native "HTMLFormElement_length_Getter";
 
   static method_Getter(mthis) native "HTMLFormElement_method_Getter";
 
-  static method_Setter_DOMString(mthis, value) native "HTMLFormElement_method_Setter";
+  static method_Setter(mthis, value) native "HTMLFormElement_method_Setter";
 
   static name_Getter(mthis) native "HTMLFormElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLFormElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLFormElement_name_Setter";
 
   static noValidate_Getter(mthis) native "HTMLFormElement_noValidate_Getter";
 
-  static noValidate_Setter_boolean(mthis, value) native "HTMLFormElement_noValidate_Setter";
+  static noValidate_Setter(mthis, value) native "HTMLFormElement_noValidate_Setter";
 
   static target_Getter(mthis) native "HTMLFormElement_target_Getter";
 
-  static target_Setter_DOMString(mthis, value) native "HTMLFormElement_target_Setter";
+  static target_Setter(mthis, value) native "HTMLFormElement_target_Setter";
 
-  static $__getter___Callback_ul(mthis, index_OR_name) native "HTMLFormElement___getter___Callback_unsigned long";
-
-  static $__getter___Callback_DOMString(mthis, index_OR_name) native "HTMLFormElement___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, index_OR_name) native "HTMLFormElement___getter___Callback";
 
   static checkValidity_Callback(mthis) native "HTMLFormElement_checkValidity_Callback";
 
-  static requestAutocomplete_Callback_Dictionary(mthis, details) native "HTMLFormElement_requestAutocomplete_Callback_Dictionary";
+  static requestAutocomplete_Callback_1(mthis, details) native "HTMLFormElement_requestAutocomplete_Callback";
 
   static reset_Callback(mthis) native "HTMLFormElement_reset_Callback";
 
@@ -2955,7 +3041,7 @@
 class BlinkHTMLHRElement {
   static color_Getter(mthis) native "HTMLHRElement_color_Getter";
 
-  static color_Setter_DOMString(mthis, value) native "HTMLHRElement_color_Setter";
+  static color_Setter(mthis, value) native "HTMLHRElement_color_Setter";
 }
 
 class BlinkHTMLHeadElement {}
@@ -2967,63 +3053,63 @@
 class BlinkHTMLIFrameElement {
   static allowFullscreen_Getter(mthis) native "HTMLIFrameElement_allowFullscreen_Getter";
 
-  static allowFullscreen_Setter_boolean(mthis, value) native "HTMLIFrameElement_allowFullscreen_Setter";
+  static allowFullscreen_Setter(mthis, value) native "HTMLIFrameElement_allowFullscreen_Setter";
 
   static contentWindow_Getter(mthis) native "HTMLIFrameElement_contentWindow_Getter";
 
   static height_Getter(mthis) native "HTMLIFrameElement_height_Getter";
 
-  static height_Setter_DOMString(mthis, value) native "HTMLIFrameElement_height_Setter";
+  static height_Setter(mthis, value) native "HTMLIFrameElement_height_Setter";
 
   static integrity_Getter(mthis) native "HTMLIFrameElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLIFrameElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLIFrameElement_integrity_Setter";
 
   static name_Getter(mthis) native "HTMLIFrameElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLIFrameElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLIFrameElement_name_Setter";
 
   static sandbox_Getter(mthis) native "HTMLIFrameElement_sandbox_Getter";
 
-  static sandbox_Setter_DOMString(mthis, value) native "HTMLIFrameElement_sandbox_Setter";
+  static sandbox_Setter(mthis, value) native "HTMLIFrameElement_sandbox_Setter";
 
   static src_Getter(mthis) native "HTMLIFrameElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLIFrameElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLIFrameElement_src_Setter";
 
   static srcdoc_Getter(mthis) native "HTMLIFrameElement_srcdoc_Getter";
 
-  static srcdoc_Setter_DOMString(mthis, value) native "HTMLIFrameElement_srcdoc_Setter";
+  static srcdoc_Setter(mthis, value) native "HTMLIFrameElement_srcdoc_Setter";
 
   static width_Getter(mthis) native "HTMLIFrameElement_width_Getter";
 
-  static width_Setter_DOMString(mthis, value) native "HTMLIFrameElement_width_Setter";
+  static width_Setter(mthis, value) native "HTMLIFrameElement_width_Setter";
 }
 
 class BlinkHTMLImageElement {
   static alt_Getter(mthis) native "HTMLImageElement_alt_Getter";
 
-  static alt_Setter_DOMString(mthis, value) native "HTMLImageElement_alt_Setter";
+  static alt_Setter(mthis, value) native "HTMLImageElement_alt_Setter";
 
   static complete_Getter(mthis) native "HTMLImageElement_complete_Getter";
 
   static crossOrigin_Getter(mthis) native "HTMLImageElement_crossOrigin_Getter";
 
-  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLImageElement_crossOrigin_Setter";
+  static crossOrigin_Setter(mthis, value) native "HTMLImageElement_crossOrigin_Setter";
 
   static currentSrc_Getter(mthis) native "HTMLImageElement_currentSrc_Getter";
 
   static height_Getter(mthis) native "HTMLImageElement_height_Getter";
 
-  static height_Setter_long(mthis, value) native "HTMLImageElement_height_Setter";
+  static height_Setter(mthis, value) native "HTMLImageElement_height_Setter";
 
   static integrity_Getter(mthis) native "HTMLImageElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLImageElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLImageElement_integrity_Setter";
 
   static isMap_Getter(mthis) native "HTMLImageElement_isMap_Getter";
 
-  static isMap_Setter_boolean(mthis, value) native "HTMLImageElement_isMap_Setter";
+  static isMap_Setter(mthis, value) native "HTMLImageElement_isMap_Setter";
 
   static naturalHeight_Getter(mthis) native "HTMLImageElement_naturalHeight_Getter";
 
@@ -3031,107 +3117,107 @@
 
   static sizes_Getter(mthis) native "HTMLImageElement_sizes_Getter";
 
-  static sizes_Setter_DOMString(mthis, value) native "HTMLImageElement_sizes_Setter";
+  static sizes_Setter(mthis, value) native "HTMLImageElement_sizes_Setter";
 
   static src_Getter(mthis) native "HTMLImageElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLImageElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLImageElement_src_Setter";
 
   static srcset_Getter(mthis) native "HTMLImageElement_srcset_Getter";
 
-  static srcset_Setter_DOMString(mthis, value) native "HTMLImageElement_srcset_Setter";
+  static srcset_Setter(mthis, value) native "HTMLImageElement_srcset_Setter";
 
   static useMap_Getter(mthis) native "HTMLImageElement_useMap_Getter";
 
-  static useMap_Setter_DOMString(mthis, value) native "HTMLImageElement_useMap_Setter";
+  static useMap_Setter(mthis, value) native "HTMLImageElement_useMap_Setter";
 
   static width_Getter(mthis) native "HTMLImageElement_width_Getter";
 
-  static width_Setter_long(mthis, value) native "HTMLImageElement_width_Setter";
+  static width_Setter(mthis, value) native "HTMLImageElement_width_Setter";
 }
 
 class BlinkHTMLInputElement {
   static accept_Getter(mthis) native "HTMLInputElement_accept_Getter";
 
-  static accept_Setter_DOMString(mthis, value) native "HTMLInputElement_accept_Setter";
+  static accept_Setter(mthis, value) native "HTMLInputElement_accept_Setter";
 
   static alt_Getter(mthis) native "HTMLInputElement_alt_Getter";
 
-  static alt_Setter_DOMString(mthis, value) native "HTMLInputElement_alt_Setter";
+  static alt_Setter(mthis, value) native "HTMLInputElement_alt_Setter";
 
   static autocomplete_Getter(mthis) native "HTMLInputElement_autocomplete_Getter";
 
-  static autocomplete_Setter_DOMString(mthis, value) native "HTMLInputElement_autocomplete_Setter";
+  static autocomplete_Setter(mthis, value) native "HTMLInputElement_autocomplete_Setter";
 
   static autofocus_Getter(mthis) native "HTMLInputElement_autofocus_Getter";
 
-  static autofocus_Setter_boolean(mthis, value) native "HTMLInputElement_autofocus_Setter";
+  static autofocus_Setter(mthis, value) native "HTMLInputElement_autofocus_Setter";
 
   static capture_Getter(mthis) native "HTMLInputElement_capture_Getter";
 
-  static capture_Setter_boolean(mthis, value) native "HTMLInputElement_capture_Setter";
+  static capture_Setter(mthis, value) native "HTMLInputElement_capture_Setter";
 
   static checked_Getter(mthis) native "HTMLInputElement_checked_Getter";
 
-  static checked_Setter_boolean(mthis, value) native "HTMLInputElement_checked_Setter";
+  static checked_Setter(mthis, value) native "HTMLInputElement_checked_Setter";
 
   static defaultChecked_Getter(mthis) native "HTMLInputElement_defaultChecked_Getter";
 
-  static defaultChecked_Setter_boolean(mthis, value) native "HTMLInputElement_defaultChecked_Setter";
+  static defaultChecked_Setter(mthis, value) native "HTMLInputElement_defaultChecked_Setter";
 
   static defaultValue_Getter(mthis) native "HTMLInputElement_defaultValue_Getter";
 
-  static defaultValue_Setter_DOMString(mthis, value) native "HTMLInputElement_defaultValue_Setter";
+  static defaultValue_Setter(mthis, value) native "HTMLInputElement_defaultValue_Setter";
 
   static dirName_Getter(mthis) native "HTMLInputElement_dirName_Getter";
 
-  static dirName_Setter_DOMString(mthis, value) native "HTMLInputElement_dirName_Setter";
+  static dirName_Setter(mthis, value) native "HTMLInputElement_dirName_Setter";
 
   static disabled_Getter(mthis) native "HTMLInputElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLInputElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLInputElement_disabled_Setter";
 
   static files_Getter(mthis) native "HTMLInputElement_files_Getter";
 
-  static files_Setter_FileList(mthis, value) native "HTMLInputElement_files_Setter";
+  static files_Setter(mthis, value) native "HTMLInputElement_files_Setter";
 
   static form_Getter(mthis) native "HTMLInputElement_form_Getter";
 
   static formAction_Getter(mthis) native "HTMLInputElement_formAction_Getter";
 
-  static formAction_Setter_DOMString(mthis, value) native "HTMLInputElement_formAction_Setter";
+  static formAction_Setter(mthis, value) native "HTMLInputElement_formAction_Setter";
 
   static formEnctype_Getter(mthis) native "HTMLInputElement_formEnctype_Getter";
 
-  static formEnctype_Setter_DOMString(mthis, value) native "HTMLInputElement_formEnctype_Setter";
+  static formEnctype_Setter(mthis, value) native "HTMLInputElement_formEnctype_Setter";
 
   static formMethod_Getter(mthis) native "HTMLInputElement_formMethod_Getter";
 
-  static formMethod_Setter_DOMString(mthis, value) native "HTMLInputElement_formMethod_Setter";
+  static formMethod_Setter(mthis, value) native "HTMLInputElement_formMethod_Setter";
 
   static formNoValidate_Getter(mthis) native "HTMLInputElement_formNoValidate_Getter";
 
-  static formNoValidate_Setter_boolean(mthis, value) native "HTMLInputElement_formNoValidate_Setter";
+  static formNoValidate_Setter(mthis, value) native "HTMLInputElement_formNoValidate_Setter";
 
   static formTarget_Getter(mthis) native "HTMLInputElement_formTarget_Getter";
 
-  static formTarget_Setter_DOMString(mthis, value) native "HTMLInputElement_formTarget_Setter";
+  static formTarget_Setter(mthis, value) native "HTMLInputElement_formTarget_Setter";
 
   static height_Getter(mthis) native "HTMLInputElement_height_Getter";
 
-  static height_Setter_ul(mthis, value) native "HTMLInputElement_height_Setter";
+  static height_Setter(mthis, value) native "HTMLInputElement_height_Setter";
 
   static incremental_Getter(mthis) native "HTMLInputElement_incremental_Getter";
 
-  static incremental_Setter_boolean(mthis, value) native "HTMLInputElement_incremental_Setter";
+  static incremental_Setter(mthis, value) native "HTMLInputElement_incremental_Setter";
 
   static indeterminate_Getter(mthis) native "HTMLInputElement_indeterminate_Getter";
 
-  static indeterminate_Setter_boolean(mthis, value) native "HTMLInputElement_indeterminate_Setter";
+  static indeterminate_Setter(mthis, value) native "HTMLInputElement_indeterminate_Setter";
 
   static inputMode_Getter(mthis) native "HTMLInputElement_inputMode_Getter";
 
-  static inputMode_Setter_DOMString(mthis, value) native "HTMLInputElement_inputMode_Setter";
+  static inputMode_Setter(mthis, value) native "HTMLInputElement_inputMode_Setter";
 
   static labels_Getter(mthis) native "HTMLInputElement_labels_Getter";
 
@@ -3139,67 +3225,67 @@
 
   static max_Getter(mthis) native "HTMLInputElement_max_Getter";
 
-  static max_Setter_DOMString(mthis, value) native "HTMLInputElement_max_Setter";
+  static max_Setter(mthis, value) native "HTMLInputElement_max_Setter";
 
   static maxLength_Getter(mthis) native "HTMLInputElement_maxLength_Getter";
 
-  static maxLength_Setter_long(mthis, value) native "HTMLInputElement_maxLength_Setter";
+  static maxLength_Setter(mthis, value) native "HTMLInputElement_maxLength_Setter";
 
   static min_Getter(mthis) native "HTMLInputElement_min_Getter";
 
-  static min_Setter_DOMString(mthis, value) native "HTMLInputElement_min_Setter";
+  static min_Setter(mthis, value) native "HTMLInputElement_min_Setter";
 
   static multiple_Getter(mthis) native "HTMLInputElement_multiple_Getter";
 
-  static multiple_Setter_boolean(mthis, value) native "HTMLInputElement_multiple_Setter";
+  static multiple_Setter(mthis, value) native "HTMLInputElement_multiple_Setter";
 
   static name_Getter(mthis) native "HTMLInputElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLInputElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLInputElement_name_Setter";
 
   static pattern_Getter(mthis) native "HTMLInputElement_pattern_Getter";
 
-  static pattern_Setter_DOMString(mthis, value) native "HTMLInputElement_pattern_Setter";
+  static pattern_Setter(mthis, value) native "HTMLInputElement_pattern_Setter";
 
   static placeholder_Getter(mthis) native "HTMLInputElement_placeholder_Getter";
 
-  static placeholder_Setter_DOMString(mthis, value) native "HTMLInputElement_placeholder_Setter";
+  static placeholder_Setter(mthis, value) native "HTMLInputElement_placeholder_Setter";
 
   static readOnly_Getter(mthis) native "HTMLInputElement_readOnly_Getter";
 
-  static readOnly_Setter_boolean(mthis, value) native "HTMLInputElement_readOnly_Setter";
+  static readOnly_Setter(mthis, value) native "HTMLInputElement_readOnly_Setter";
 
   static required_Getter(mthis) native "HTMLInputElement_required_Getter";
 
-  static required_Setter_boolean(mthis, value) native "HTMLInputElement_required_Setter";
+  static required_Setter(mthis, value) native "HTMLInputElement_required_Setter";
 
   static selectionDirection_Getter(mthis) native "HTMLInputElement_selectionDirection_Getter";
 
-  static selectionDirection_Setter_DOMString(mthis, value) native "HTMLInputElement_selectionDirection_Setter";
+  static selectionDirection_Setter(mthis, value) native "HTMLInputElement_selectionDirection_Setter";
 
   static selectionEnd_Getter(mthis) native "HTMLInputElement_selectionEnd_Getter";
 
-  static selectionEnd_Setter_long(mthis, value) native "HTMLInputElement_selectionEnd_Setter";
+  static selectionEnd_Setter(mthis, value) native "HTMLInputElement_selectionEnd_Setter";
 
   static selectionStart_Getter(mthis) native "HTMLInputElement_selectionStart_Getter";
 
-  static selectionStart_Setter_long(mthis, value) native "HTMLInputElement_selectionStart_Setter";
+  static selectionStart_Setter(mthis, value) native "HTMLInputElement_selectionStart_Setter";
 
   static size_Getter(mthis) native "HTMLInputElement_size_Getter";
 
-  static size_Setter_ul(mthis, value) native "HTMLInputElement_size_Setter";
+  static size_Setter(mthis, value) native "HTMLInputElement_size_Setter";
 
   static src_Getter(mthis) native "HTMLInputElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLInputElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLInputElement_src_Setter";
 
   static step_Getter(mthis) native "HTMLInputElement_step_Getter";
 
-  static step_Setter_DOMString(mthis, value) native "HTMLInputElement_step_Setter";
+  static step_Setter(mthis, value) native "HTMLInputElement_step_Setter";
 
   static type_Getter(mthis) native "HTMLInputElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLInputElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLInputElement_type_Setter";
 
   static validationMessage_Getter(mthis) native "HTMLInputElement_validationMessage_Getter";
 
@@ -3207,25 +3293,25 @@
 
   static value_Getter(mthis) native "HTMLInputElement_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "HTMLInputElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLInputElement_value_Setter";
 
   static valueAsDate_Getter(mthis) native "HTMLInputElement_valueAsDate_Getter";
 
-  static valueAsDate_Setter_Date(mthis, value) native "HTMLInputElement_valueAsDate_Setter";
+  static valueAsDate_Setter(mthis, value) native "HTMLInputElement_valueAsDate_Setter";
 
   static valueAsNumber_Getter(mthis) native "HTMLInputElement_valueAsNumber_Getter";
 
-  static valueAsNumber_Setter_double(mthis, value) native "HTMLInputElement_valueAsNumber_Setter";
+  static valueAsNumber_Setter(mthis, value) native "HTMLInputElement_valueAsNumber_Setter";
 
   static webkitEntries_Getter(mthis) native "HTMLInputElement_webkitEntries_Getter";
 
   static webkitdirectory_Getter(mthis) native "HTMLInputElement_webkitdirectory_Getter";
 
-  static webkitdirectory_Setter_boolean(mthis, value) native "HTMLInputElement_webkitdirectory_Setter";
+  static webkitdirectory_Setter(mthis, value) native "HTMLInputElement_webkitdirectory_Setter";
 
   static width_Getter(mthis) native "HTMLInputElement_width_Getter";
 
-  static width_Setter_ul(mthis, value) native "HTMLInputElement_width_Setter";
+  static width_Setter(mthis, value) native "HTMLInputElement_width_Setter";
 
   static willValidate_Getter(mthis) native "HTMLInputElement_willValidate_Getter";
 
@@ -3233,21 +3319,21 @@
 
   static select_Callback(mthis) native "HTMLInputElement_select_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLInputElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLInputElement_setCustomValidity_Callback";
 
-  static setRangeText_Callback_DOMString(mthis, replacement) native "HTMLInputElement_setRangeText_Callback_DOMString";
+  static setRangeText_Callback_1(mthis, replacement) native "HTMLInputElement_setRangeText_Callback";
 
-  static setRangeText_Callback_DOMString_ul_ul_DOMString(mthis, replacement, start, end, selectionMode) native "HTMLInputElement_setRangeText_Callback_DOMString_unsigned long_unsigned long_DOMString";
+  static setRangeText_Callback_4(mthis, replacement, start, end, selectionMode) native "HTMLInputElement_setRangeText_Callback";
 
-  static setSelectionRange_Callback_long_long_DOMString(mthis, start, end, direction) native "HTMLInputElement_setSelectionRange_Callback_long_long_DOMString";
+  static setSelectionRange_Callback_3(mthis, start, end, direction) native "HTMLInputElement_setSelectionRange_Callback";
 
-  static setSelectionRange_Callback_long_long(mthis, start, end) native "HTMLInputElement_setSelectionRange_Callback_long_long";
+  static setSelectionRange_Callback_2(mthis, start, end) native "HTMLInputElement_setSelectionRange_Callback";
 
-  static stepDown_Callback_long(mthis, n) native "HTMLInputElement_stepDown_Callback_long";
+  static stepDown_Callback_1(mthis, n) native "HTMLInputElement_stepDown_Callback";
 
   static stepDown_Callback(mthis) native "HTMLInputElement_stepDown_Callback";
 
-  static stepUp_Callback_long(mthis, n) native "HTMLInputElement_stepUp_Callback_long";
+  static stepUp_Callback_1(mthis, n) native "HTMLInputElement_stepUp_Callback";
 
   static stepUp_Callback(mthis) native "HTMLInputElement_stepUp_Callback";
 }
@@ -3255,27 +3341,27 @@
 class BlinkHTMLKeygenElement {
   static autofocus_Getter(mthis) native "HTMLKeygenElement_autofocus_Getter";
 
-  static autofocus_Setter_boolean(mthis, value) native "HTMLKeygenElement_autofocus_Setter";
+  static autofocus_Setter(mthis, value) native "HTMLKeygenElement_autofocus_Setter";
 
   static challenge_Getter(mthis) native "HTMLKeygenElement_challenge_Getter";
 
-  static challenge_Setter_DOMString(mthis, value) native "HTMLKeygenElement_challenge_Setter";
+  static challenge_Setter(mthis, value) native "HTMLKeygenElement_challenge_Setter";
 
   static disabled_Getter(mthis) native "HTMLKeygenElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLKeygenElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLKeygenElement_disabled_Setter";
 
   static form_Getter(mthis) native "HTMLKeygenElement_form_Getter";
 
   static keytype_Getter(mthis) native "HTMLKeygenElement_keytype_Getter";
 
-  static keytype_Setter_DOMString(mthis, value) native "HTMLKeygenElement_keytype_Setter";
+  static keytype_Setter(mthis, value) native "HTMLKeygenElement_keytype_Setter";
 
   static labels_Getter(mthis) native "HTMLKeygenElement_labels_Getter";
 
   static name_Getter(mthis) native "HTMLKeygenElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLKeygenElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLKeygenElement_name_Setter";
 
   static type_Getter(mthis) native "HTMLKeygenElement_type_Getter";
 
@@ -3287,13 +3373,13 @@
 
   static checkValidity_Callback(mthis) native "HTMLKeygenElement_checkValidity_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLKeygenElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLKeygenElement_setCustomValidity_Callback";
 }
 
 class BlinkHTMLLIElement {
   static value_Getter(mthis) native "HTMLLIElement_value_Getter";
 
-  static value_Setter_long(mthis, value) native "HTMLLIElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLLIElement_value_Setter";
 }
 
 class BlinkHTMLLabelElement {
@@ -3303,7 +3389,7 @@
 
   static htmlFor_Getter(mthis) native "HTMLLabelElement_htmlFor_Getter";
 
-  static htmlFor_Setter_DOMString(mthis, value) native "HTMLLabelElement_htmlFor_Setter";
+  static htmlFor_Setter(mthis, value) native "HTMLLabelElement_htmlFor_Setter";
 }
 
 class BlinkHTMLLegendElement {
@@ -3313,33 +3399,33 @@
 class BlinkHTMLLinkElement {
   static crossOrigin_Getter(mthis) native "HTMLLinkElement_crossOrigin_Getter";
 
-  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLLinkElement_crossOrigin_Setter";
+  static crossOrigin_Setter(mthis, value) native "HTMLLinkElement_crossOrigin_Setter";
 
   static disabled_Getter(mthis) native "HTMLLinkElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLLinkElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLLinkElement_disabled_Setter";
 
   static href_Getter(mthis) native "HTMLLinkElement_href_Getter";
 
-  static href_Setter_DOMString(mthis, value) native "HTMLLinkElement_href_Setter";
+  static href_Setter(mthis, value) native "HTMLLinkElement_href_Setter";
 
   static hreflang_Getter(mthis) native "HTMLLinkElement_hreflang_Getter";
 
-  static hreflang_Setter_DOMString(mthis, value) native "HTMLLinkElement_hreflang_Setter";
+  static hreflang_Setter(mthis, value) native "HTMLLinkElement_hreflang_Setter";
 
   static import_Getter(mthis) native "HTMLLinkElement_import_Getter";
 
   static integrity_Getter(mthis) native "HTMLLinkElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLLinkElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLLinkElement_integrity_Setter";
 
   static media_Getter(mthis) native "HTMLLinkElement_media_Getter";
 
-  static media_Setter_DOMString(mthis, value) native "HTMLLinkElement_media_Setter";
+  static media_Setter(mthis, value) native "HTMLLinkElement_media_Setter";
 
   static rel_Getter(mthis) native "HTMLLinkElement_rel_Getter";
 
-  static rel_Setter_DOMString(mthis, value) native "HTMLLinkElement_rel_Setter";
+  static rel_Setter(mthis, value) native "HTMLLinkElement_rel_Setter";
 
   static sheet_Getter(mthis) native "HTMLLinkElement_sheet_Getter";
 
@@ -3347,7 +3433,7 @@
 
   static type_Getter(mthis) native "HTMLLinkElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLLinkElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLLinkElement_type_Setter";
 }
 
 class BlinkHTMLMapElement {
@@ -3355,7 +3441,7 @@
 
   static name_Getter(mthis) native "HTMLMapElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLMapElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLMapElement_name_Setter";
 }
 
 class BlinkHTMLMarqueeElement {}
@@ -3363,127 +3449,127 @@
 class BlinkHTMLMenuElement {
   static label_Getter(mthis) native "HTMLMenuElement_label_Getter";
 
-  static label_Setter_DOMString(mthis, value) native "HTMLMenuElement_label_Setter";
+  static label_Setter(mthis, value) native "HTMLMenuElement_label_Setter";
 
   static type_Getter(mthis) native "HTMLMenuElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLMenuElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLMenuElement_type_Setter";
 }
 
 class BlinkHTMLMenuItemElement {
   static checked_Getter(mthis) native "HTMLMenuItemElement_checked_Getter";
 
-  static checked_Setter_boolean(mthis, value) native "HTMLMenuItemElement_checked_Setter";
+  static checked_Setter(mthis, value) native "HTMLMenuItemElement_checked_Setter";
 
   static default_Getter(mthis) native "HTMLMenuItemElement_default_Getter";
 
-  static default_Setter_boolean(mthis, value) native "HTMLMenuItemElement_default_Setter";
+  static default_Setter(mthis, value) native "HTMLMenuItemElement_default_Setter";
 
   static disabled_Getter(mthis) native "HTMLMenuItemElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLMenuItemElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLMenuItemElement_disabled_Setter";
 
   static label_Getter(mthis) native "HTMLMenuItemElement_label_Getter";
 
-  static label_Setter_DOMString(mthis, value) native "HTMLMenuItemElement_label_Setter";
+  static label_Setter(mthis, value) native "HTMLMenuItemElement_label_Setter";
 
   static type_Getter(mthis) native "HTMLMenuItemElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLMenuItemElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLMenuItemElement_type_Setter";
 }
 
 class BlinkHTMLMetaElement {
   static content_Getter(mthis) native "HTMLMetaElement_content_Getter";
 
-  static content_Setter_DOMString(mthis, value) native "HTMLMetaElement_content_Setter";
+  static content_Setter(mthis, value) native "HTMLMetaElement_content_Setter";
 
   static httpEquiv_Getter(mthis) native "HTMLMetaElement_httpEquiv_Getter";
 
-  static httpEquiv_Setter_DOMString(mthis, value) native "HTMLMetaElement_httpEquiv_Setter";
+  static httpEquiv_Setter(mthis, value) native "HTMLMetaElement_httpEquiv_Setter";
 
   static name_Getter(mthis) native "HTMLMetaElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLMetaElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLMetaElement_name_Setter";
 }
 
 class BlinkHTMLMeterElement {
   static high_Getter(mthis) native "HTMLMeterElement_high_Getter";
 
-  static high_Setter_double(mthis, value) native "HTMLMeterElement_high_Setter";
+  static high_Setter(mthis, value) native "HTMLMeterElement_high_Setter";
 
   static labels_Getter(mthis) native "HTMLMeterElement_labels_Getter";
 
   static low_Getter(mthis) native "HTMLMeterElement_low_Getter";
 
-  static low_Setter_double(mthis, value) native "HTMLMeterElement_low_Setter";
+  static low_Setter(mthis, value) native "HTMLMeterElement_low_Setter";
 
   static max_Getter(mthis) native "HTMLMeterElement_max_Getter";
 
-  static max_Setter_double(mthis, value) native "HTMLMeterElement_max_Setter";
+  static max_Setter(mthis, value) native "HTMLMeterElement_max_Setter";
 
   static min_Getter(mthis) native "HTMLMeterElement_min_Getter";
 
-  static min_Setter_double(mthis, value) native "HTMLMeterElement_min_Setter";
+  static min_Setter(mthis, value) native "HTMLMeterElement_min_Setter";
 
   static optimum_Getter(mthis) native "HTMLMeterElement_optimum_Getter";
 
-  static optimum_Setter_double(mthis, value) native "HTMLMeterElement_optimum_Setter";
+  static optimum_Setter(mthis, value) native "HTMLMeterElement_optimum_Setter";
 
   static value_Getter(mthis) native "HTMLMeterElement_value_Getter";
 
-  static value_Setter_double(mthis, value) native "HTMLMeterElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLMeterElement_value_Setter";
 }
 
 class BlinkHTMLModElement {
   static cite_Getter(mthis) native "HTMLModElement_cite_Getter";
 
-  static cite_Setter_DOMString(mthis, value) native "HTMLModElement_cite_Setter";
+  static cite_Setter(mthis, value) native "HTMLModElement_cite_Setter";
 
   static dateTime_Getter(mthis) native "HTMLModElement_dateTime_Getter";
 
-  static dateTime_Setter_DOMString(mthis, value) native "HTMLModElement_dateTime_Setter";
+  static dateTime_Setter(mthis, value) native "HTMLModElement_dateTime_Setter";
 }
 
 class BlinkHTMLOListElement {
   static reversed_Getter(mthis) native "HTMLOListElement_reversed_Getter";
 
-  static reversed_Setter_boolean(mthis, value) native "HTMLOListElement_reversed_Setter";
+  static reversed_Setter(mthis, value) native "HTMLOListElement_reversed_Setter";
 
   static start_Getter(mthis) native "HTMLOListElement_start_Getter";
 
-  static start_Setter_long(mthis, value) native "HTMLOListElement_start_Setter";
+  static start_Setter(mthis, value) native "HTMLOListElement_start_Setter";
 
   static type_Getter(mthis) native "HTMLOListElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLOListElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLOListElement_type_Setter";
 }
 
 class BlinkHTMLObjectElement {
   static data_Getter(mthis) native "HTMLObjectElement_data_Getter";
 
-  static data_Setter_DOMString(mthis, value) native "HTMLObjectElement_data_Setter";
+  static data_Setter(mthis, value) native "HTMLObjectElement_data_Setter";
 
   static form_Getter(mthis) native "HTMLObjectElement_form_Getter";
 
   static height_Getter(mthis) native "HTMLObjectElement_height_Getter";
 
-  static height_Setter_DOMString(mthis, value) native "HTMLObjectElement_height_Setter";
+  static height_Setter(mthis, value) native "HTMLObjectElement_height_Setter";
 
   static integrity_Getter(mthis) native "HTMLObjectElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLObjectElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLObjectElement_integrity_Setter";
 
   static name_Getter(mthis) native "HTMLObjectElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLObjectElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLObjectElement_name_Setter";
 
   static type_Getter(mthis) native "HTMLObjectElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLObjectElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLObjectElement_type_Setter";
 
   static useMap_Getter(mthis) native "HTMLObjectElement_useMap_Getter";
 
-  static useMap_Setter_DOMString(mthis, value) native "HTMLObjectElement_useMap_Setter";
+  static useMap_Setter(mthis, value) native "HTMLObjectElement_useMap_Setter";
 
   static validationMessage_Getter(mthis) native "HTMLObjectElement_validationMessage_Getter";
 
@@ -3491,39 +3577,39 @@
 
   static width_Getter(mthis) native "HTMLObjectElement_width_Getter";
 
-  static width_Setter_DOMString(mthis, value) native "HTMLObjectElement_width_Setter";
+  static width_Setter(mthis, value) native "HTMLObjectElement_width_Setter";
 
   static willValidate_Getter(mthis) native "HTMLObjectElement_willValidate_Getter";
 
-  static $__getter___Callback_ul(mthis, index_OR_name) native "HTMLObjectElement___getter___Callback";
+  static $__getter___Callback_1(mthis, index_OR_name) native "HTMLObjectElement___getter___Callback";
 
-  static $__setter___Callback_ul_Node(mthis, index_OR_name, value) native "HTMLObjectElement___setter___Callback";
+  static $__setter___Callback_2(mthis, index_OR_name, value) native "HTMLObjectElement___setter___Callback";
 
   static checkValidity_Callback(mthis) native "HTMLObjectElement_checkValidity_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLObjectElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLObjectElement_setCustomValidity_Callback";
 }
 
 class BlinkHTMLOptGroupElement {
   static disabled_Getter(mthis) native "HTMLOptGroupElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLOptGroupElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLOptGroupElement_disabled_Setter";
 
   static label_Getter(mthis) native "HTMLOptGroupElement_label_Getter";
 
-  static label_Setter_DOMString(mthis, value) native "HTMLOptGroupElement_label_Setter";
+  static label_Setter(mthis, value) native "HTMLOptGroupElement_label_Setter";
 }
 
 class BlinkHTMLOptionElement {
-  static constructorCallback_DOMString_DOMString_boolean_boolean(data, value, defaultSelected, selected) native "HTMLOptionElement_constructorCallback_DOMString_DOMString_boolean_boolean";
+  static constructorCallback_4(data, value, defaultSelected, selected) native "HTMLOptionElement_constructorCallback";
 
   static defaultSelected_Getter(mthis) native "HTMLOptionElement_defaultSelected_Getter";
 
-  static defaultSelected_Setter_boolean(mthis, value) native "HTMLOptionElement_defaultSelected_Setter";
+  static defaultSelected_Setter(mthis, value) native "HTMLOptionElement_defaultSelected_Setter";
 
   static disabled_Getter(mthis) native "HTMLOptionElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLOptionElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLOptionElement_disabled_Setter";
 
   static form_Getter(mthis) native "HTMLOptionElement_form_Getter";
 
@@ -3531,15 +3617,15 @@
 
   static label_Getter(mthis) native "HTMLOptionElement_label_Getter";
 
-  static label_Setter_DOMString(mthis, value) native "HTMLOptionElement_label_Setter";
+  static label_Setter(mthis, value) native "HTMLOptionElement_label_Setter";
 
   static selected_Getter(mthis) native "HTMLOptionElement_selected_Getter";
 
-  static selected_Setter_boolean(mthis, value) native "HTMLOptionElement_selected_Setter";
+  static selected_Setter(mthis, value) native "HTMLOptionElement_selected_Setter";
 
   static value_Getter(mthis) native "HTMLOptionElement_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "HTMLOptionElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLOptionElement_value_Setter";
 }
 
 class BlinkHTMLOptionsCollection {}
@@ -3547,7 +3633,7 @@
 class BlinkHTMLOutputElement {
   static defaultValue_Getter(mthis) native "HTMLOutputElement_defaultValue_Getter";
 
-  static defaultValue_Setter_DOMString(mthis, value) native "HTMLOutputElement_defaultValue_Setter";
+  static defaultValue_Setter(mthis, value) native "HTMLOutputElement_defaultValue_Setter";
 
   static form_Getter(mthis) native "HTMLOutputElement_form_Getter";
 
@@ -3557,7 +3643,7 @@
 
   static name_Getter(mthis) native "HTMLOutputElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLOutputElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLOutputElement_name_Setter";
 
   static type_Getter(mthis) native "HTMLOutputElement_type_Getter";
 
@@ -3567,13 +3653,13 @@
 
   static value_Getter(mthis) native "HTMLOutputElement_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "HTMLOutputElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLOutputElement_value_Setter";
 
   static willValidate_Getter(mthis) native "HTMLOutputElement_willValidate_Getter";
 
   static checkValidity_Callback(mthis) native "HTMLOutputElement_checkValidity_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLOutputElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLOutputElement_setCustomValidity_Callback";
 }
 
 class BlinkHTMLParagraphElement {}
@@ -3581,11 +3667,11 @@
 class BlinkHTMLParamElement {
   static name_Getter(mthis) native "HTMLParamElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLParamElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLParamElement_name_Setter";
 
   static value_Getter(mthis) native "HTMLParamElement_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "HTMLParamElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLParamElement_value_Setter";
 }
 
 class BlinkHTMLPictureElement {}
@@ -3597,63 +3683,63 @@
 
   static max_Getter(mthis) native "HTMLProgressElement_max_Getter";
 
-  static max_Setter_double(mthis, value) native "HTMLProgressElement_max_Setter";
+  static max_Setter(mthis, value) native "HTMLProgressElement_max_Setter";
 
   static position_Getter(mthis) native "HTMLProgressElement_position_Getter";
 
   static value_Getter(mthis) native "HTMLProgressElement_value_Getter";
 
-  static value_Setter_double(mthis, value) native "HTMLProgressElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLProgressElement_value_Setter";
 }
 
 class BlinkHTMLQuoteElement {
   static cite_Getter(mthis) native "HTMLQuoteElement_cite_Getter";
 
-  static cite_Setter_DOMString(mthis, value) native "HTMLQuoteElement_cite_Setter";
+  static cite_Setter(mthis, value) native "HTMLQuoteElement_cite_Setter";
 }
 
 class BlinkHTMLScriptElement {
   static async_Getter(mthis) native "HTMLScriptElement_async_Getter";
 
-  static async_Setter_boolean(mthis, value) native "HTMLScriptElement_async_Setter";
+  static async_Setter(mthis, value) native "HTMLScriptElement_async_Setter";
 
   static charset_Getter(mthis) native "HTMLScriptElement_charset_Getter";
 
-  static charset_Setter_DOMString(mthis, value) native "HTMLScriptElement_charset_Setter";
+  static charset_Setter(mthis, value) native "HTMLScriptElement_charset_Setter";
 
   static crossOrigin_Getter(mthis) native "HTMLScriptElement_crossOrigin_Getter";
 
-  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLScriptElement_crossOrigin_Setter";
+  static crossOrigin_Setter(mthis, value) native "HTMLScriptElement_crossOrigin_Setter";
 
   static defer_Getter(mthis) native "HTMLScriptElement_defer_Getter";
 
-  static defer_Setter_boolean(mthis, value) native "HTMLScriptElement_defer_Setter";
+  static defer_Setter(mthis, value) native "HTMLScriptElement_defer_Setter";
 
   static integrity_Getter(mthis) native "HTMLScriptElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLScriptElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLScriptElement_integrity_Setter";
 
   static nonce_Getter(mthis) native "HTMLScriptElement_nonce_Getter";
 
-  static nonce_Setter_DOMString(mthis, value) native "HTMLScriptElement_nonce_Setter";
+  static nonce_Setter(mthis, value) native "HTMLScriptElement_nonce_Setter";
 
   static src_Getter(mthis) native "HTMLScriptElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLScriptElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLScriptElement_src_Setter";
 
   static type_Getter(mthis) native "HTMLScriptElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLScriptElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLScriptElement_type_Setter";
 }
 
 class BlinkHTMLSelectElement {
   static autofocus_Getter(mthis) native "HTMLSelectElement_autofocus_Getter";
 
-  static autofocus_Setter_boolean(mthis, value) native "HTMLSelectElement_autofocus_Setter";
+  static autofocus_Setter(mthis, value) native "HTMLSelectElement_autofocus_Setter";
 
   static disabled_Getter(mthis) native "HTMLSelectElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLSelectElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLSelectElement_disabled_Setter";
 
   static form_Getter(mthis) native "HTMLSelectElement_form_Getter";
 
@@ -3661,27 +3747,27 @@
 
   static length_Getter(mthis) native "HTMLSelectElement_length_Getter";
 
-  static length_Setter_ul(mthis, value) native "HTMLSelectElement_length_Setter";
+  static length_Setter(mthis, value) native "HTMLSelectElement_length_Setter";
 
   static multiple_Getter(mthis) native "HTMLSelectElement_multiple_Getter";
 
-  static multiple_Setter_boolean(mthis, value) native "HTMLSelectElement_multiple_Setter";
+  static multiple_Setter(mthis, value) native "HTMLSelectElement_multiple_Setter";
 
   static name_Getter(mthis) native "HTMLSelectElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLSelectElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLSelectElement_name_Setter";
 
   static required_Getter(mthis) native "HTMLSelectElement_required_Getter";
 
-  static required_Setter_boolean(mthis, value) native "HTMLSelectElement_required_Setter";
+  static required_Setter(mthis, value) native "HTMLSelectElement_required_Setter";
 
   static selectedIndex_Getter(mthis) native "HTMLSelectElement_selectedIndex_Getter";
 
-  static selectedIndex_Setter_long(mthis, value) native "HTMLSelectElement_selectedIndex_Setter";
+  static selectedIndex_Setter(mthis, value) native "HTMLSelectElement_selectedIndex_Setter";
 
   static size_Getter(mthis) native "HTMLSelectElement_size_Getter";
 
-  static size_Setter_long(mthis, value) native "HTMLSelectElement_size_Setter";
+  static size_Setter(mthis, value) native "HTMLSelectElement_size_Setter";
 
   static type_Getter(mthis) native "HTMLSelectElement_type_Getter";
 
@@ -3691,21 +3777,21 @@
 
   static value_Getter(mthis) native "HTMLSelectElement_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "HTMLSelectElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLSelectElement_value_Setter";
 
   static willValidate_Getter(mthis) native "HTMLSelectElement_willValidate_Getter";
 
-  static $__setter___Callback_ul_HTMLOptionElement(mthis, index, value) native "HTMLSelectElement___setter___Callback_unsigned long_HTMLOptionElement";
+  static $__setter___Callback_2(mthis, index, value) native "HTMLSelectElement___setter___Callback";
 
-  static add_Callback_HTMLElement_long(mthis, element, before) native "HTMLSelectElement_add_Callback_HTMLElement_long";
+  static add_Callback_2(mthis, element, before) native "HTMLSelectElement_add_Callback";
 
   static checkValidity_Callback(mthis) native "HTMLSelectElement_checkValidity_Callback";
 
-  static item_Callback_ul(mthis, index) native "HTMLSelectElement_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "HTMLSelectElement_item_Callback";
 
-  static namedItem_Callback_DOMString(mthis, name) native "HTMLSelectElement_namedItem_Callback_DOMString";
+  static namedItem_Callback_1(mthis, name) native "HTMLSelectElement_namedItem_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLSelectElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLSelectElement_setCustomValidity_Callback";
 }
 
 class BlinkHTMLShadowElement {
@@ -3715,27 +3801,27 @@
 class BlinkHTMLSourceElement {
   static integrity_Getter(mthis) native "HTMLSourceElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLSourceElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLSourceElement_integrity_Setter";
 
   static media_Getter(mthis) native "HTMLSourceElement_media_Getter";
 
-  static media_Setter_DOMString(mthis, value) native "HTMLSourceElement_media_Setter";
+  static media_Setter(mthis, value) native "HTMLSourceElement_media_Setter";
 
   static sizes_Getter(mthis) native "HTMLSourceElement_sizes_Getter";
 
-  static sizes_Setter_DOMString(mthis, value) native "HTMLSourceElement_sizes_Setter";
+  static sizes_Setter(mthis, value) native "HTMLSourceElement_sizes_Setter";
 
   static src_Getter(mthis) native "HTMLSourceElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLSourceElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLSourceElement_src_Setter";
 
   static srcset_Getter(mthis) native "HTMLSourceElement_srcset_Getter";
 
-  static srcset_Setter_DOMString(mthis, value) native "HTMLSourceElement_srcset_Setter";
+  static srcset_Setter(mthis, value) native "HTMLSourceElement_srcset_Setter";
 
   static type_Getter(mthis) native "HTMLSourceElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLSourceElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLSourceElement_type_Setter";
 }
 
 class BlinkHTMLSpanElement {}
@@ -3743,17 +3829,17 @@
 class BlinkHTMLStyleElement {
   static disabled_Getter(mthis) native "HTMLStyleElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLStyleElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLStyleElement_disabled_Setter";
 
   static media_Getter(mthis) native "HTMLStyleElement_media_Getter";
 
-  static media_Setter_DOMString(mthis, value) native "HTMLStyleElement_media_Setter";
+  static media_Setter(mthis, value) native "HTMLStyleElement_media_Setter";
 
   static sheet_Getter(mthis) native "HTMLStyleElement_sheet_Getter";
 
   static type_Getter(mthis) native "HTMLStyleElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "HTMLStyleElement_type_Setter";
+  static type_Setter(mthis, value) native "HTMLStyleElement_type_Setter";
 }
 
 class BlinkHTMLTableCaptionElement {}
@@ -3763,27 +3849,27 @@
 
   static colSpan_Getter(mthis) native "HTMLTableCellElement_colSpan_Getter";
 
-  static colSpan_Setter_long(mthis, value) native "HTMLTableCellElement_colSpan_Setter";
+  static colSpan_Setter(mthis, value) native "HTMLTableCellElement_colSpan_Setter";
 
   static headers_Getter(mthis) native "HTMLTableCellElement_headers_Getter";
 
-  static headers_Setter_DOMString(mthis, value) native "HTMLTableCellElement_headers_Setter";
+  static headers_Setter(mthis, value) native "HTMLTableCellElement_headers_Setter";
 
   static rowSpan_Getter(mthis) native "HTMLTableCellElement_rowSpan_Getter";
 
-  static rowSpan_Setter_long(mthis, value) native "HTMLTableCellElement_rowSpan_Setter";
+  static rowSpan_Setter(mthis, value) native "HTMLTableCellElement_rowSpan_Setter";
 }
 
 class BlinkHTMLTableColElement {
   static span_Getter(mthis) native "HTMLTableColElement_span_Getter";
 
-  static span_Setter_long(mthis, value) native "HTMLTableColElement_span_Setter";
+  static span_Setter(mthis, value) native "HTMLTableColElement_span_Setter";
 }
 
 class BlinkHTMLTableElement {
   static caption_Getter(mthis) native "HTMLTableElement_caption_Getter";
 
-  static caption_Setter_HTMLTableCaptionElement(mthis, value) native "HTMLTableElement_caption_Setter";
+  static caption_Setter(mthis, value) native "HTMLTableElement_caption_Setter";
 
   static rows_Getter(mthis) native "HTMLTableElement_rows_Getter";
 
@@ -3791,11 +3877,11 @@
 
   static tFoot_Getter(mthis) native "HTMLTableElement_tFoot_Getter";
 
-  static tFoot_Setter_HTMLTableSectionElement(mthis, value) native "HTMLTableElement_tFoot_Setter";
+  static tFoot_Setter(mthis, value) native "HTMLTableElement_tFoot_Setter";
 
   static tHead_Getter(mthis) native "HTMLTableElement_tHead_Getter";
 
-  static tHead_Setter_HTMLTableSectionElement(mthis, value) native "HTMLTableElement_tHead_Setter";
+  static tHead_Setter(mthis, value) native "HTMLTableElement_tHead_Setter";
 
   static createCaption_Callback(mthis) native "HTMLTableElement_createCaption_Callback";
 
@@ -3807,13 +3893,13 @@
 
   static deleteCaption_Callback(mthis) native "HTMLTableElement_deleteCaption_Callback";
 
-  static deleteRow_Callback_long(mthis, index) native "HTMLTableElement_deleteRow_Callback_long";
+  static deleteRow_Callback_1(mthis, index) native "HTMLTableElement_deleteRow_Callback";
 
   static deleteTFoot_Callback(mthis) native "HTMLTableElement_deleteTFoot_Callback";
 
   static deleteTHead_Callback(mthis) native "HTMLTableElement_deleteTHead_Callback";
 
-  static insertRow_Callback_long(mthis, index) native "HTMLTableElement_insertRow_Callback_long";
+  static insertRow_Callback_1(mthis, index) native "HTMLTableElement_insertRow_Callback";
 
   static insertRow_Callback(mthis) native "HTMLTableElement_insertRow_Callback";
 }
@@ -3825,9 +3911,9 @@
 
   static sectionRowIndex_Getter(mthis) native "HTMLTableRowElement_sectionRowIndex_Getter";
 
-  static deleteCell_Callback_long(mthis, index) native "HTMLTableRowElement_deleteCell_Callback_long";
+  static deleteCell_Callback_1(mthis, index) native "HTMLTableRowElement_deleteCell_Callback";
 
-  static insertCell_Callback_long(mthis, index) native "HTMLTableRowElement_insertCell_Callback_long";
+  static insertCell_Callback_1(mthis, index) native "HTMLTableRowElement_insertCell_Callback";
 
   static insertCell_Callback(mthis) native "HTMLTableRowElement_insertCell_Callback";
 }
@@ -3835,9 +3921,9 @@
 class BlinkHTMLTableSectionElement {
   static rows_Getter(mthis) native "HTMLTableSectionElement_rows_Getter";
 
-  static deleteRow_Callback_long(mthis, index) native "HTMLTableSectionElement_deleteRow_Callback_long";
+  static deleteRow_Callback_1(mthis, index) native "HTMLTableSectionElement_deleteRow_Callback";
 
-  static insertRow_Callback_long(mthis, index) native "HTMLTableSectionElement_insertRow_Callback_long";
+  static insertRow_Callback_1(mthis, index) native "HTMLTableSectionElement_insertRow_Callback";
 
   static insertRow_Callback(mthis) native "HTMLTableSectionElement_insertRow_Callback";
 }
@@ -3849,67 +3935,67 @@
 class BlinkHTMLTextAreaElement {
   static autofocus_Getter(mthis) native "HTMLTextAreaElement_autofocus_Getter";
 
-  static autofocus_Setter_boolean(mthis, value) native "HTMLTextAreaElement_autofocus_Setter";
+  static autofocus_Setter(mthis, value) native "HTMLTextAreaElement_autofocus_Setter";
 
   static cols_Getter(mthis) native "HTMLTextAreaElement_cols_Getter";
 
-  static cols_Setter_long(mthis, value) native "HTMLTextAreaElement_cols_Setter";
+  static cols_Setter(mthis, value) native "HTMLTextAreaElement_cols_Setter";
 
   static defaultValue_Getter(mthis) native "HTMLTextAreaElement_defaultValue_Getter";
 
-  static defaultValue_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_defaultValue_Setter";
+  static defaultValue_Setter(mthis, value) native "HTMLTextAreaElement_defaultValue_Setter";
 
   static dirName_Getter(mthis) native "HTMLTextAreaElement_dirName_Getter";
 
-  static dirName_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_dirName_Setter";
+  static dirName_Setter(mthis, value) native "HTMLTextAreaElement_dirName_Setter";
 
   static disabled_Getter(mthis) native "HTMLTextAreaElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "HTMLTextAreaElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "HTMLTextAreaElement_disabled_Setter";
 
   static form_Getter(mthis) native "HTMLTextAreaElement_form_Getter";
 
   static inputMode_Getter(mthis) native "HTMLTextAreaElement_inputMode_Getter";
 
-  static inputMode_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_inputMode_Setter";
+  static inputMode_Setter(mthis, value) native "HTMLTextAreaElement_inputMode_Setter";
 
   static labels_Getter(mthis) native "HTMLTextAreaElement_labels_Getter";
 
   static maxLength_Getter(mthis) native "HTMLTextAreaElement_maxLength_Getter";
 
-  static maxLength_Setter_long(mthis, value) native "HTMLTextAreaElement_maxLength_Setter";
+  static maxLength_Setter(mthis, value) native "HTMLTextAreaElement_maxLength_Setter";
 
   static name_Getter(mthis) native "HTMLTextAreaElement_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_name_Setter";
+  static name_Setter(mthis, value) native "HTMLTextAreaElement_name_Setter";
 
   static placeholder_Getter(mthis) native "HTMLTextAreaElement_placeholder_Getter";
 
-  static placeholder_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_placeholder_Setter";
+  static placeholder_Setter(mthis, value) native "HTMLTextAreaElement_placeholder_Setter";
 
   static readOnly_Getter(mthis) native "HTMLTextAreaElement_readOnly_Getter";
 
-  static readOnly_Setter_boolean(mthis, value) native "HTMLTextAreaElement_readOnly_Setter";
+  static readOnly_Setter(mthis, value) native "HTMLTextAreaElement_readOnly_Setter";
 
   static required_Getter(mthis) native "HTMLTextAreaElement_required_Getter";
 
-  static required_Setter_boolean(mthis, value) native "HTMLTextAreaElement_required_Setter";
+  static required_Setter(mthis, value) native "HTMLTextAreaElement_required_Setter";
 
   static rows_Getter(mthis) native "HTMLTextAreaElement_rows_Getter";
 
-  static rows_Setter_long(mthis, value) native "HTMLTextAreaElement_rows_Setter";
+  static rows_Setter(mthis, value) native "HTMLTextAreaElement_rows_Setter";
 
   static selectionDirection_Getter(mthis) native "HTMLTextAreaElement_selectionDirection_Getter";
 
-  static selectionDirection_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_selectionDirection_Setter";
+  static selectionDirection_Setter(mthis, value) native "HTMLTextAreaElement_selectionDirection_Setter";
 
   static selectionEnd_Getter(mthis) native "HTMLTextAreaElement_selectionEnd_Getter";
 
-  static selectionEnd_Setter_long(mthis, value) native "HTMLTextAreaElement_selectionEnd_Setter";
+  static selectionEnd_Setter(mthis, value) native "HTMLTextAreaElement_selectionEnd_Setter";
 
   static selectionStart_Getter(mthis) native "HTMLTextAreaElement_selectionStart_Getter";
 
-  static selectionStart_Setter_long(mthis, value) native "HTMLTextAreaElement_selectionStart_Setter";
+  static selectionStart_Setter(mthis, value) native "HTMLTextAreaElement_selectionStart_Setter";
 
   static textLength_Getter(mthis) native "HTMLTextAreaElement_textLength_Getter";
 
@@ -3921,27 +4007,27 @@
 
   static value_Getter(mthis) native "HTMLTextAreaElement_value_Getter";
 
-  static value_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_value_Setter";
+  static value_Setter(mthis, value) native "HTMLTextAreaElement_value_Setter";
 
   static willValidate_Getter(mthis) native "HTMLTextAreaElement_willValidate_Getter";
 
   static wrap_Getter(mthis) native "HTMLTextAreaElement_wrap_Getter";
 
-  static wrap_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_wrap_Setter";
+  static wrap_Setter(mthis, value) native "HTMLTextAreaElement_wrap_Setter";
 
   static checkValidity_Callback(mthis) native "HTMLTextAreaElement_checkValidity_Callback";
 
   static select_Callback(mthis) native "HTMLTextAreaElement_select_Callback";
 
-  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLTextAreaElement_setCustomValidity_Callback_DOMString";
+  static setCustomValidity_Callback_1(mthis, error) native "HTMLTextAreaElement_setCustomValidity_Callback";
 
-  static setRangeText_Callback_DOMString(mthis, replacement) native "HTMLTextAreaElement_setRangeText_Callback_DOMString";
+  static setRangeText_Callback_1(mthis, replacement) native "HTMLTextAreaElement_setRangeText_Callback";
 
-  static setRangeText_Callback_DOMString_ul_ul_DOMString(mthis, replacement, start, end, selectionMode) native "HTMLTextAreaElement_setRangeText_Callback_DOMString_unsigned long_unsigned long_DOMString";
+  static setRangeText_Callback_4(mthis, replacement, start, end, selectionMode) native "HTMLTextAreaElement_setRangeText_Callback";
 
-  static setSelectionRange_Callback_long_long_DOMString(mthis, start, end, direction) native "HTMLTextAreaElement_setSelectionRange_Callback_long_long_DOMString";
+  static setSelectionRange_Callback_3(mthis, start, end, direction) native "HTMLTextAreaElement_setSelectionRange_Callback";
 
-  static setSelectionRange_Callback_long_long(mthis, start, end) native "HTMLTextAreaElement_setSelectionRange_Callback_long_long";
+  static setSelectionRange_Callback_2(mthis, start, end) native "HTMLTextAreaElement_setSelectionRange_Callback";
 }
 
 class BlinkHTMLTitleElement {}
@@ -3949,29 +4035,29 @@
 class BlinkHTMLTrackElement {
   static default_Getter(mthis) native "HTMLTrackElement_default_Getter";
 
-  static default_Setter_boolean(mthis, value) native "HTMLTrackElement_default_Setter";
+  static default_Setter(mthis, value) native "HTMLTrackElement_default_Setter";
 
   static integrity_Getter(mthis) native "HTMLTrackElement_integrity_Getter";
 
-  static integrity_Setter_DOMString(mthis, value) native "HTMLTrackElement_integrity_Setter";
+  static integrity_Setter(mthis, value) native "HTMLTrackElement_integrity_Setter";
 
   static kind_Getter(mthis) native "HTMLTrackElement_kind_Getter";
 
-  static kind_Setter_DOMString(mthis, value) native "HTMLTrackElement_kind_Setter";
+  static kind_Setter(mthis, value) native "HTMLTrackElement_kind_Setter";
 
   static label_Getter(mthis) native "HTMLTrackElement_label_Getter";
 
-  static label_Setter_DOMString(mthis, value) native "HTMLTrackElement_label_Setter";
+  static label_Setter(mthis, value) native "HTMLTrackElement_label_Setter";
 
   static readyState_Getter(mthis) native "HTMLTrackElement_readyState_Getter";
 
   static src_Getter(mthis) native "HTMLTrackElement_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "HTMLTrackElement_src_Setter";
+  static src_Setter(mthis, value) native "HTMLTrackElement_src_Setter";
 
   static srclang_Getter(mthis) native "HTMLTrackElement_srclang_Getter";
 
-  static srclang_Setter_DOMString(mthis, value) native "HTMLTrackElement_srclang_Setter";
+  static srclang_Setter(mthis, value) native "HTMLTrackElement_srclang_Setter";
 
   static track_Getter(mthis) native "HTMLTrackElement_track_Getter";
 }
@@ -3983,11 +4069,11 @@
 class BlinkHTMLVideoElement {
   static height_Getter(mthis) native "HTMLVideoElement_height_Getter";
 
-  static height_Setter_ul(mthis, value) native "HTMLVideoElement_height_Setter";
+  static height_Setter(mthis, value) native "HTMLVideoElement_height_Setter";
 
   static poster_Getter(mthis) native "HTMLVideoElement_poster_Getter";
 
-  static poster_Setter_DOMString(mthis, value) native "HTMLVideoElement_poster_Setter";
+  static poster_Setter(mthis, value) native "HTMLVideoElement_poster_Setter";
 
   static videoHeight_Getter(mthis) native "HTMLVideoElement_videoHeight_Getter";
 
@@ -3999,7 +4085,7 @@
 
   static width_Getter(mthis) native "HTMLVideoElement_width_Getter";
 
-  static width_Setter_ul(mthis, value) native "HTMLVideoElement_width_Setter";
+  static width_Setter(mthis, value) native "HTMLVideoElement_width_Setter";
 
   static getVideoPlaybackQuality_Callback(mthis) native "HTMLVideoElement_getVideoPlaybackQuality_Callback";
 
@@ -4015,21 +4101,19 @@
 
   static oldURL_Getter(mthis) native "HashChangeEvent_oldURL_Getter";
 
-  static initHashChangeEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString(mthis, type, canBubble, cancelable, oldURL, newURL) native "HashChangeEvent_initHashChangeEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString";
+  static initHashChangeEvent_Callback_5(mthis, type, canBubble, cancelable, oldURL, newURL) native "HashChangeEvent_initHashChangeEvent_Callback";
 }
 
 class BlinkHeaders {
   static constructorCallback() native "Headers_constructorCallback";
 
-  static constructorCallback_Headers(input) native "Headers_constructorCallback_Headers";
-
-  static constructorCallback_Dictionary(input) native "Headers_constructorCallback_Dictionary";
+  static constructorCallback_1(input) native "Headers_constructorCallback";
 
   static size_Getter(mthis) native "Headers_size_Getter";
 
-  static forEach_Callback_HeadersForEachCallback_ScriptValue(mthis, callback, thisArg) native "Headers_forEach_Callback_HeadersForEachCallback_ScriptValue";
+  static forEach_Callback_2(mthis, callback, thisArg) native "Headers_forEach_Callback";
 
-  static forEach_Callback_HeadersForEachCallback(mthis, callback) native "Headers_forEach_Callback_HeadersForEachCallback";
+  static forEach_Callback_1(mthis, callback) native "Headers_forEach_Callback";
 }
 
 class BlinkHistory {
@@ -4041,11 +4125,11 @@
 
   static forward_Callback(mthis) native "History_forward_Callback";
 
-  static go_Callback_long(mthis, distance) native "History_go_Callback_long";
+  static go_Callback_1(mthis, distance) native "History_go_Callback";
 
-  static pushState_Callback_ScriptValue_DOMString_DOMString(mthis, data, title, url) native "History_pushState_Callback";
+  static pushState_Callback_3(mthis, data, title, url) native "History_pushState_Callback";
 
-  static replaceState_Callback_ScriptValue_DOMString_DOMString(mthis, data, title, url) native "History_replaceState_Callback";
+  static replaceState_Callback_3(mthis, data, title, url) native "History_replaceState_Callback";
 }
 
 class BlinkIDBCursor {
@@ -4057,15 +4141,17 @@
 
   static source_Getter(mthis) native "IDBCursor_source_Getter";
 
-  static advance_Callback_ul(mthis, count) native "IDBCursor_advance_Callback_unsigned long";
+  static advance_Callback_1(mthis, count) native "IDBCursor_advance_Callback";
 
-  static continuePrimaryKey_Callback_ScriptValue_ScriptValue(mthis, key, primaryKey) native "IDBCursor_continuePrimaryKey_Callback_ScriptValue_ScriptValue";
+  static continuePrimaryKey_Callback_2(mthis, key, primaryKey) native "IDBCursor_continuePrimaryKey_Callback";
 
   static delete_Callback(mthis) native "IDBCursor_delete_Callback";
 
-  static continue_Callback_ScriptValue(mthis, key) native "IDBCursor_continue_Callback_ScriptValue";
+  static continue_Callback_1(mthis, key) native "IDBCursor_continue_Callback";
 
-  static update_Callback_ScriptValue(mthis, value) native "IDBCursor_update_Callback_ScriptValue";
+  static continue_Callback(mthis) native "IDBCursor_continue_Callback";
+
+  static update_Callback_1(mthis, value) native "IDBCursor_update_Callback";
 }
 
 class BlinkIDBCursorWithValue {
@@ -4081,31 +4167,25 @@
 
   static close_Callback(mthis) native "IDBDatabase_close_Callback";
 
-  static createObjectStore_Callback_DOMString_Dictionary(mthis, name, options) native "IDBDatabase_createObjectStore_Callback_DOMString_Dictionary";
+  static createObjectStore_Callback_2(mthis, name, options) native "IDBDatabase_createObjectStore_Callback";
 
-  static deleteObjectStore_Callback_DOMString(mthis, name) native "IDBDatabase_deleteObjectStore_Callback_DOMString";
+  static createObjectStore_Callback_1(mthis, name) native "IDBDatabase_createObjectStore_Callback";
 
-  static transaction_Callback_DOMString(mthis, storeName_OR_storeNames) native "IDBDatabase_transaction_Callback_DOMString";
+  static deleteObjectStore_Callback_1(mthis, name) native "IDBDatabase_deleteObjectStore_Callback";
 
-  static transaction_Callback_DOMString_DOMString(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_DOMString_DOMString";
+  static transaction_Callback_1(mthis, storeName_OR_storeNames) native "IDBDatabase_transaction_Callback";
 
-  static transaction_Callback_SEQ_DOMString_SEQ(mthis, storeName_OR_storeNames) native "IDBDatabase_transaction_Callback_sequence<DOMString>";
-
-  static transaction_Callback_SEQ_DOMString_SEQ_DOMString(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_sequence<DOMString>_DOMString";
-
-  static transaction_Callback_DOMStringList(mthis, storeName_OR_storeNames) native "IDBDatabase_transaction_Callback_DOMStringList";
-
-  static transaction_Callback_DOMStringList_DOMString(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_DOMStringList_DOMString";
+  static transaction_Callback_2(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback";
 }
 
 class BlinkIDBFactory {
-  static cmp_Callback_ScriptValue_ScriptValue(mthis, first, second) native "IDBFactory_cmp_Callback_ScriptValue_ScriptValue";
+  static cmp_Callback_2(mthis, first, second) native "IDBFactory_cmp_Callback";
 
-  static deleteDatabase_Callback_DOMString(mthis, name) native "IDBFactory_deleteDatabase_Callback_DOMString";
+  static deleteDatabase_Callback_1(mthis, name) native "IDBFactory_deleteDatabase_Callback";
 
-  static open_Callback_DOMString_ull(mthis, name, version) native "IDBFactory_open_Callback_DOMString_unsigned long long";
+  static open_Callback_2(mthis, name, version) native "IDBFactory_open_Callback";
 
-  static open_Callback_DOMString(mthis, name) native "IDBFactory_open_Callback_DOMString";
+  static open_Callback_1(mthis, name) native "IDBFactory_open_Callback";
 
   static webkitGetDatabaseNames_Callback(mthis) native "IDBFactory_webkitGetDatabaseNames_Callback";
 }
@@ -4121,19 +4201,19 @@
 
   static unique_Getter(mthis) native "IDBIndex_unique_Getter";
 
-  static count_Callback_ScriptValue(mthis, key) native "IDBIndex_count_Callback_ScriptValue";
+  static count_Callback_1(mthis, key) native "IDBIndex_count_Callback";
 
-  static get_Callback_ScriptValue(mthis, key) native "IDBIndex_get_Callback_ScriptValue";
+  static get_Callback_1(mthis, key) native "IDBIndex_get_Callback";
 
-  static getKey_Callback_ScriptValue(mthis, key) native "IDBIndex_getKey_Callback_ScriptValue";
+  static getKey_Callback_1(mthis, key) native "IDBIndex_getKey_Callback";
 
-  static openCursor_Callback_ScriptValue_DOMString(mthis, range, direction) native "IDBIndex_openCursor_Callback_ScriptValue_DOMString";
+  static openCursor_Callback_2(mthis, range, direction) native "IDBIndex_openCursor_Callback";
 
-  static openCursor_Callback_ScriptValue(mthis, range) native "IDBIndex_openCursor_Callback_ScriptValue";
+  static openCursor_Callback_1(mthis, range) native "IDBIndex_openCursor_Callback";
 
-  static openKeyCursor_Callback_ScriptValue_DOMString(mthis, range, direction) native "IDBIndex_openKeyCursor_Callback_ScriptValue_DOMString";
+  static openKeyCursor_Callback_2(mthis, range, direction) native "IDBIndex_openKeyCursor_Callback";
 
-  static openKeyCursor_Callback_ScriptValue(mthis, range) native "IDBIndex_openKeyCursor_Callback_ScriptValue";
+  static openKeyCursor_Callback_1(mthis, range) native "IDBIndex_openKeyCursor_Callback";
 }
 
 class BlinkIDBKeyRange {
@@ -4145,13 +4225,21 @@
 
   static upperOpen_Getter(mthis) native "IDBKeyRange_upperOpen_Getter";
 
-  static bound_Callback_ScriptValue_ScriptValue_boolean_boolean(lower, upper, lowerOpen, upperOpen) native "IDBKeyRange_bound_Callback_ScriptValue_ScriptValue_boolean_boolean";
+  static bound_Callback_4(lower, upper, lowerOpen, upperOpen) native "IDBKeyRange_bound_Callback";
 
-  static lowerBound_Callback_ScriptValue_boolean(bound, open) native "IDBKeyRange_lowerBound_Callback_ScriptValue_boolean";
+  static bound_Callback_3(lower, upper, lowerOpen) native "IDBKeyRange_bound_Callback";
 
-  static only_Callback_ScriptValue(value) native "IDBKeyRange_only_Callback_ScriptValue";
+  static bound_Callback_2(lower, upper) native "IDBKeyRange_bound_Callback";
 
-  static upperBound_Callback_ScriptValue_boolean(bound, open) native "IDBKeyRange_upperBound_Callback_ScriptValue_boolean";
+  static lowerBound_Callback_2(bound, open) native "IDBKeyRange_lowerBound_Callback";
+
+  static lowerBound_Callback_1(bound) native "IDBKeyRange_lowerBound_Callback";
+
+  static only_Callback_1(value) native "IDBKeyRange_only_Callback";
+
+  static upperBound_Callback_2(bound, open) native "IDBKeyRange_upperBound_Callback";
+
+  static upperBound_Callback_1(bound) native "IDBKeyRange_upperBound_Callback";
 }
 
 class BlinkIDBObjectStore {
@@ -4165,31 +4253,37 @@
 
   static transaction_Getter(mthis) native "IDBObjectStore_transaction_Getter";
 
-  static add_Callback_ScriptValue_ScriptValue(mthis, value, key) native "IDBObjectStore_add_Callback_ScriptValue_ScriptValue";
+  static add_Callback_2(mthis, value, key) native "IDBObjectStore_add_Callback";
+
+  static add_Callback_1(mthis, value) native "IDBObjectStore_add_Callback";
 
   static clear_Callback(mthis) native "IDBObjectStore_clear_Callback";
 
-  static count_Callback_ScriptValue(mthis, key) native "IDBObjectStore_count_Callback_ScriptValue";
+  static count_Callback_1(mthis, key) native "IDBObjectStore_count_Callback";
 
-  static createIndex_Callback_DOMString_DOMString_Dictionary(mthis, name, keyPath, options) native "IDBObjectStore_createIndex_Callback_DOMString_DOMString_Dictionary";
+  static createIndex_Callback_2(mthis, name, keyPath) native "IDBObjectStore_createIndex_Callback";
 
-  static createIndex_Callback_DOMString_SEQ_DOMString_SEQ_Dictionary(mthis, name, keyPath, options) native "IDBObjectStore_createIndex_Callback_DOMString_sequence<DOMString>_Dictionary";
+  static createIndex_Callback_3(mthis, name, keyPath, options) native "IDBObjectStore_createIndex_Callback";
 
-  static delete_Callback_ScriptValue(mthis, key) native "IDBObjectStore_delete_Callback_ScriptValue";
+  static delete_Callback_1(mthis, key) native "IDBObjectStore_delete_Callback";
 
-  static deleteIndex_Callback_DOMString(mthis, name) native "IDBObjectStore_deleteIndex_Callback_DOMString";
+  static deleteIndex_Callback_1(mthis, name) native "IDBObjectStore_deleteIndex_Callback";
 
-  static get_Callback_ScriptValue(mthis, key) native "IDBObjectStore_get_Callback_ScriptValue";
+  static get_Callback_1(mthis, key) native "IDBObjectStore_get_Callback";
 
-  static index_Callback_DOMString(mthis, name) native "IDBObjectStore_index_Callback_DOMString";
+  static index_Callback_1(mthis, name) native "IDBObjectStore_index_Callback";
 
-  static openCursor_Callback_ScriptValue_DOMString(mthis, range, direction) native "IDBObjectStore_openCursor_Callback_ScriptValue_DOMString";
+  static openCursor_Callback_2(mthis, range, direction) native "IDBObjectStore_openCursor_Callback";
 
-  static openKeyCursor_Callback_ScriptValue_DOMString(mthis, range, direction) native "IDBObjectStore_openKeyCursor_Callback_ScriptValue_DOMString";
+  static openCursor_Callback_1(mthis, range) native "IDBObjectStore_openCursor_Callback";
 
-  static openKeyCursor_Callback_ScriptValue(mthis, range) native "IDBObjectStore_openKeyCursor_Callback_ScriptValue";
+  static openKeyCursor_Callback_2(mthis, range, direction) native "IDBObjectStore_openKeyCursor_Callback";
 
-  static put_Callback_ScriptValue_ScriptValue(mthis, value, key) native "IDBObjectStore_put_Callback_ScriptValue_ScriptValue";
+  static openKeyCursor_Callback_1(mthis, range) native "IDBObjectStore_openKeyCursor_Callback";
+
+  static put_Callback_2(mthis, value, key) native "IDBObjectStore_put_Callback";
+
+  static put_Callback_1(mthis, value) native "IDBObjectStore_put_Callback";
 }
 
 class BlinkIDBRequest {
@@ -4215,7 +4309,7 @@
 
   static abort_Callback(mthis) native "IDBTransaction_abort_Callback";
 
-  static objectStore_Callback_DOMString(mthis, name) native "IDBTransaction_objectStore_Callback_DOMString";
+  static objectStore_Callback_1(mthis, name) native "IDBTransaction_objectStore_Callback";
 }
 
 class BlinkIDBVersionChangeEvent {
@@ -4237,9 +4331,9 @@
 }
 
 class BlinkImageData {
-  static constructorCallback_ul_ul(data_OR_width, height_OR_width) native "ImageData_constructorCallback_unsigned long_unsigned long";
+  static constructorCallback_2(data_OR_width, height_OR_width) native "ImageData_constructorCallback";
 
-  static constructorCallback_Uint8ClampedArray_ul_ul(data_OR_width, height_OR_width, height) native "ImageData_constructorCallback_Uint8ClampedArray_unsigned long_unsigned long";
+  static constructorCallback_3(data_OR_width, height_OR_width, height) native "ImageData_constructorCallback";
 
   static data_Getter(mthis) native "ImageData_data_Getter";
 
@@ -4249,7 +4343,7 @@
 }
 
 class BlinkInjectedScriptHost {
-  static inspect_Callback_ScriptValue_ScriptValue(mthis, objectId, hints) native "InjectedScriptHost_inspect_Callback";
+  static inspect_Callback_2(mthis, objectId, hints) native "InjectedScriptHost_inspect_Callback";
 }
 
 class BlinkInputMethodContext {
@@ -4265,10 +4359,12 @@
 }
 
 class BlinkInstallPhaseEvent {
-  static waitUntil_Callback_ScriptValue(mthis, value) native "InstallPhaseEvent_waitUntil_Callback_ScriptValue";
+  static waitUntil_Callback_1(mthis, value) native "InstallPhaseEvent_waitUntil_Callback";
 }
 
 class BlinkInstallEvent {
+  static reloadAll_Callback(mthis) native "InstallEvent_reloadAll_Callback";
+
   static replace_Callback(mthis) native "InstallEvent_replace_Callback";
 }
 
@@ -4291,13 +4387,13 @@
 
   static shiftKey_Getter(mthis) native "KeyboardEvent_shiftKey_Getter";
 
-  static getModifierState_Callback_DOMString(mthis, keyArgument) native "KeyboardEvent_getModifierState_Callback_DOMString";
+  static getModifierState_Callback_1(mthis, keyArgument) native "KeyboardEvent_getModifierState_Callback";
 
-  static initKeyboardEvent_Callback_DOMString_boolean_boolean_Window_DOMString_ul_boolean_boolean_boolean_boolean(mthis, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey) native "KeyboardEvent_initKeyboardEvent_Callback_DOMString_boolean_boolean_Window_DOMString_unsigned long_boolean_boolean_boolean_boolean";
+  static initKeyboardEvent_Callback_10(mthis, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey) native "KeyboardEvent_initKeyboardEvent_Callback";
 }
 
 class BlinkLocalCredential {
-  static constructorCallback_DOMString_DOMString_DOMString_DOMString(id, name, avatarURL, password) native "LocalCredential_constructorCallback_DOMString_DOMString_DOMString_DOMString";
+  static constructorCallback_4(id, name, avatarURL, password) native "LocalCredential_constructorCallback";
 
   static password_Getter(mthis) native "LocalCredential_password_Getter";
 }
@@ -4307,43 +4403,43 @@
 
   static hash_Getter(mthis) native "Location_hash_Getter";
 
-  static hash_Setter_DOMString(mthis, value) native "Location_hash_Setter";
+  static hash_Setter(mthis, value) native "Location_hash_Setter";
 
   static host_Getter(mthis) native "Location_host_Getter";
 
-  static host_Setter_DOMString(mthis, value) native "Location_host_Setter";
+  static host_Setter(mthis, value) native "Location_host_Setter";
 
   static hostname_Getter(mthis) native "Location_hostname_Getter";
 
-  static hostname_Setter_DOMString(mthis, value) native "Location_hostname_Setter";
+  static hostname_Setter(mthis, value) native "Location_hostname_Setter";
 
   static href_Getter(mthis) native "Location_href_Getter";
 
-  static href_Setter_DOMString(mthis, value) native "Location_href_Setter";
+  static href_Setter(mthis, value) native "Location_href_Setter";
 
   static origin_Getter(mthis) native "Location_origin_Getter";
 
   static pathname_Getter(mthis) native "Location_pathname_Getter";
 
-  static pathname_Setter_DOMString(mthis, value) native "Location_pathname_Setter";
+  static pathname_Setter(mthis, value) native "Location_pathname_Setter";
 
   static port_Getter(mthis) native "Location_port_Getter";
 
-  static port_Setter_DOMString(mthis, value) native "Location_port_Setter";
+  static port_Setter(mthis, value) native "Location_port_Setter";
 
   static protocol_Getter(mthis) native "Location_protocol_Getter";
 
-  static protocol_Setter_DOMString(mthis, value) native "Location_protocol_Setter";
+  static protocol_Setter(mthis, value) native "Location_protocol_Setter";
 
   static search_Getter(mthis) native "Location_search_Getter";
 
-  static search_Setter_DOMString(mthis, value) native "Location_search_Setter";
+  static search_Setter(mthis, value) native "Location_search_Setter";
 
-  static assign_Callback_DOMString(mthis, url) native "Location_assign_Callback";
+  static assign_Callback_1(mthis, url) native "Location_assign_Callback";
 
   static reload_Callback(mthis) native "Location_reload_Callback";
 
-  static replace_Callback_DOMString(mthis, url) native "Location_replace_Callback";
+  static replace_Callback_1(mthis, url) native "Location_replace_Callback";
 
   static toString_Callback(mthis) native "Location_toString_Callback";
 }
@@ -4385,9 +4481,9 @@
 }
 
 class BlinkMIDIOutput {
-  static send_Callback_Uint8Array_double(mthis, data, timestamp) native "MIDIOutput_send_Callback_Uint8Array_double";
+  static send_Callback_2(mthis, data, timestamp) native "MIDIOutput_send_Callback";
 
-  static send_Callback_Uint8Array(mthis, data) native "MIDIOutput_send_Callback_Uint8Array";
+  static send_Callback_1(mthis, data) native "MIDIOutput_send_Callback";
 }
 
 class BlinkMediaController {
@@ -4397,23 +4493,23 @@
 
   static currentTime_Getter(mthis) native "MediaController_currentTime_Getter";
 
-  static currentTime_Setter_double(mthis, value) native "MediaController_currentTime_Setter";
+  static currentTime_Setter(mthis, value) native "MediaController_currentTime_Setter";
 
   static defaultPlaybackRate_Getter(mthis) native "MediaController_defaultPlaybackRate_Getter";
 
-  static defaultPlaybackRate_Setter_double(mthis, value) native "MediaController_defaultPlaybackRate_Setter";
+  static defaultPlaybackRate_Setter(mthis, value) native "MediaController_defaultPlaybackRate_Setter";
 
   static duration_Getter(mthis) native "MediaController_duration_Getter";
 
   static muted_Getter(mthis) native "MediaController_muted_Getter";
 
-  static muted_Setter_boolean(mthis, value) native "MediaController_muted_Setter";
+  static muted_Setter(mthis, value) native "MediaController_muted_Setter";
 
   static paused_Getter(mthis) native "MediaController_paused_Getter";
 
   static playbackRate_Getter(mthis) native "MediaController_playbackRate_Getter";
 
-  static playbackRate_Setter_double(mthis, value) native "MediaController_playbackRate_Setter";
+  static playbackRate_Setter(mthis, value) native "MediaController_playbackRate_Setter";
 
   static playbackState_Getter(mthis) native "MediaController_playbackState_Getter";
 
@@ -4423,7 +4519,7 @@
 
   static volume_Getter(mthis) native "MediaController_volume_Getter";
 
-  static volume_Setter_double(mthis, value) native "MediaController_volume_Setter";
+  static volume_Setter(mthis, value) native "MediaController_volume_Setter";
 
   static pause_Callback(mthis) native "MediaController_pause_Callback";
 
@@ -4491,17 +4587,29 @@
 }
 
 class BlinkMediaKeySession {
+  static closed_Getter(mthis) native "MediaKeySession_closed_Getter";
+
   static error_Getter(mthis) native "MediaKeySession_error_Getter";
 
   static keySystem_Getter(mthis) native "MediaKeySession_keySystem_Getter";
 
   static sessionId_Getter(mthis) native "MediaKeySession_sessionId_Getter";
+
+  static release_Callback(mthis) native "MediaKeySession_release_Callback";
+
+  static update_Callback_1(mthis, response) native "MediaKeySession_update_Callback";
 }
 
 class BlinkMediaKeys {
   static keySystem_Getter(mthis) native "MediaKeys_keySystem_Getter";
 
-  static isTypeSupported_Callback_DOMString_DOMString(keySystem, contentType) native "MediaKeys_isTypeSupported_Callback_DOMString_DOMString";
+  static create_Callback_1(keySystem) native "MediaKeys_create_Callback";
+
+  static createSession_Callback_2(mthis, initDataType, initData) native "MediaKeys_createSession_Callback";
+
+  static createSession_Callback_3(mthis, initDataType, initData, sessionType) native "MediaKeys_createSession_Callback";
+
+  static isTypeSupported_Callback_2(keySystem, contentType) native "MediaKeys_isTypeSupported_Callback";
 }
 
 class BlinkMediaList {
@@ -4509,13 +4617,13 @@
 
   static mediaText_Getter(mthis) native "MediaList_mediaText_Getter";
 
-  static mediaText_Setter_DOMString(mthis, value) native "MediaList_mediaText_Setter";
+  static mediaText_Setter(mthis, value) native "MediaList_mediaText_Setter";
 
-  static appendMedium_Callback_DOMString(mthis, newMedium) native "MediaList_appendMedium_Callback_DOMString";
+  static appendMedium_Callback_1(mthis, newMedium) native "MediaList_appendMedium_Callback";
 
-  static deleteMedium_Callback_DOMString(mthis, oldMedium) native "MediaList_deleteMedium_Callback_DOMString";
+  static deleteMedium_Callback_1(mthis, oldMedium) native "MediaList_deleteMedium_Callback";
 
-  static item_Callback_ul(mthis, index) native "MediaList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "MediaList_item_Callback";
 }
 
 class BlinkMediaQueryList {
@@ -4531,29 +4639,27 @@
 
   static duration_Getter(mthis) native "MediaSource_duration_Getter";
 
-  static duration_Setter_double(mthis, value) native "MediaSource_duration_Setter";
+  static duration_Setter(mthis, value) native "MediaSource_duration_Setter";
 
   static readyState_Getter(mthis) native "MediaSource_readyState_Getter";
 
   static sourceBuffers_Getter(mthis) native "MediaSource_sourceBuffers_Getter";
 
-  static addSourceBuffer_Callback_DOMString(mthis, type) native "MediaSource_addSourceBuffer_Callback_DOMString";
+  static addSourceBuffer_Callback_1(mthis, type) native "MediaSource_addSourceBuffer_Callback";
 
-  static endOfStream_Callback_DOMString(mthis, error) native "MediaSource_endOfStream_Callback_DOMString";
+  static endOfStream_Callback_1(mthis, error) native "MediaSource_endOfStream_Callback";
 
   static endOfStream_Callback(mthis) native "MediaSource_endOfStream_Callback";
 
-  static isTypeSupported_Callback_DOMString(type) native "MediaSource_isTypeSupported_Callback_DOMString";
+  static isTypeSupported_Callback_1(type) native "MediaSource_isTypeSupported_Callback";
 
-  static removeSourceBuffer_Callback_SourceBuffer(mthis, buffer) native "MediaSource_removeSourceBuffer_Callback_SourceBuffer";
+  static removeSourceBuffer_Callback_1(mthis, buffer) native "MediaSource_removeSourceBuffer_Callback";
 }
 
 class BlinkMediaStream {
   static constructorCallback() native "MediaStream_constructorCallback";
 
-  static constructorCallback_MediaStream(stream_OR_tracks) native "MediaStream_constructorCallback_MediaStream";
-
-  static constructorCallback_A_MediaStreamTrack_A(stream_OR_tracks) native "MediaStream_constructorCallback_MediaStreamTrack[]";
+  static constructorCallback_1(stream_OR_tracks) native "MediaStream_constructorCallback";
 
   static ended_Getter(mthis) native "MediaStream_ended_Getter";
 
@@ -4561,19 +4667,19 @@
 
   static label_Getter(mthis) native "MediaStream_label_Getter";
 
-  static addTrack_Callback_MediaStreamTrack(mthis, track) native "MediaStream_addTrack_Callback_MediaStreamTrack";
+  static addTrack_Callback_1(mthis, track) native "MediaStream_addTrack_Callback";
 
   static clone_Callback(mthis) native "MediaStream_clone_Callback";
 
   static getAudioTracks_Callback(mthis) native "MediaStream_getAudioTracks_Callback";
 
-  static getTrackById_Callback_DOMString(mthis, trackId) native "MediaStream_getTrackById_Callback_DOMString";
+  static getTrackById_Callback_1(mthis, trackId) native "MediaStream_getTrackById_Callback";
 
   static getTracks_Callback(mthis) native "MediaStream_getTracks_Callback";
 
   static getVideoTracks_Callback(mthis) native "MediaStream_getVideoTracks_Callback";
 
-  static removeTrack_Callback_MediaStreamTrack(mthis, track) native "MediaStream_removeTrack_Callback_MediaStreamTrack";
+  static removeTrack_Callback_1(mthis, track) native "MediaStream_removeTrack_Callback";
 
   static stop_Callback(mthis) native "MediaStream_stop_Callback";
 }
@@ -4595,7 +4701,7 @@
 class BlinkMediaStreamTrack {
   static enabled_Getter(mthis) native "MediaStreamTrack_enabled_Getter";
 
-  static enabled_Setter_boolean(mthis, value) native "MediaStreamTrack_enabled_Setter";
+  static enabled_Setter(mthis, value) native "MediaStreamTrack_enabled_Setter";
 
   static id_Getter(mthis) native "MediaStreamTrack_id_Getter";
 
@@ -4609,7 +4715,7 @@
 
   static clone_Callback(mthis) native "MediaStreamTrack_clone_Callback";
 
-  static getSources_Callback_MediaStreamTrackSourcesCallback(callback) native "MediaStreamTrack_getSources_Callback_MediaStreamTrackSourcesCallback";
+  static getSources_Callback_1(callback) native "MediaStreamTrack_getSources_Callback";
 
   static stop_Callback(mthis) native "MediaStreamTrack_stop_Callback";
 }
@@ -4643,13 +4749,13 @@
 
   static source_Getter(mthis) native "MessageEvent_source_Getter";
 
-  static initMessageEvent_Callback_DOMString_boolean_boolean_ScriptValue_DOMString_DOMString_Window_A_MessagePort_A(mthis, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts) native "MessageEvent_initMessageEvent_Callback";
+  static initMessageEvent_Callback_8(mthis, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts) native "MessageEvent_initMessageEvent_Callback";
 }
 
 class BlinkMessagePort {
   static close_Callback(mthis) native "MessagePort_close_Callback";
 
-  static postMessage_Callback_ScriptValue_SEQ_MessagePort_SEQ(mthis, message, transfer) native "MessagePort_postMessage_Callback";
+  static postMessage_Callback_2(mthis, message, transfer) native "MessagePort_postMessage_Callback";
 
   static start_Callback(mthis) native "MessagePort_start_Callback";
 }
@@ -4673,11 +4779,11 @@
 class BlinkMimeTypeArray {
   static length_Getter(mthis) native "MimeTypeArray_length_Getter";
 
-  static $__getter___Callback_DOMString(mthis, name) native "MimeTypeArray___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, name) native "MimeTypeArray___getter___Callback";
 
-  static item_Callback_ul(mthis, index) native "MimeTypeArray_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "MimeTypeArray_item_Callback";
 
-  static namedItem_Callback_DOMString(mthis, name) native "MimeTypeArray_namedItem_Callback_DOMString";
+  static namedItem_Callback_1(mthis, name) native "MimeTypeArray_namedItem_Callback";
 }
 
 class BlinkMouseEvent {
@@ -4723,17 +4829,17 @@
 
   static webkitMovementY_Getter(mthis) native "MouseEvent_webkitMovementY_Getter";
 
-  static initMouseEvent_Callback_DOMString_boolean_boolean_Window_long_long_long_long_long_boolean_boolean_boolean_boolean_us_EventTarget(mthis, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) native "MouseEvent_initMouseEvent_Callback_DOMString_boolean_boolean_Window_long_long_long_long_long_boolean_boolean_boolean_boolean_unsigned short_EventTarget";
+  static initMouseEvent_Callback_15(mthis, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) native "MouseEvent_initMouseEvent_Callback";
 }
 
 class BlinkMutationEvent {}
 
 class BlinkMutationObserver {
-  static constructorCallback_MutationCallback(callback) native "MutationObserver_constructorCallback";
+  static constructorCallback_1(callback) native "MutationObserver_constructorCallback";
 
   static disconnect_Callback(mthis) native "MutationObserver_disconnect_Callback";
 
-  static observe_Callback_Node_Dictionary(mthis, target, options) native "MutationObserver_observe_Callback_Node_Dictionary";
+  static observe_Callback_2(mthis, target, options) native "MutationObserver_observe_Callback";
 
   static takeRecords_Callback(mthis) native "MutationObserver_takeRecords_Callback";
 }
@@ -4761,21 +4867,21 @@
 class BlinkNamedNodeMap {
   static length_Getter(mthis) native "NamedNodeMap_length_Getter";
 
-  static $__getter___Callback_DOMString(mthis, name) native "NamedNodeMap___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, name) native "NamedNodeMap___getter___Callback";
 
-  static getNamedItem_Callback_DOMString(mthis, name) native "NamedNodeMap_getNamedItem_Callback_DOMString";
+  static getNamedItem_Callback_1(mthis, name) native "NamedNodeMap_getNamedItem_Callback";
 
-  static getNamedItemNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "NamedNodeMap_getNamedItemNS_Callback_DOMString_DOMString";
+  static getNamedItemNS_Callback_2(mthis, namespaceURI, localName) native "NamedNodeMap_getNamedItemNS_Callback";
 
-  static item_Callback_ul(mthis, index) native "NamedNodeMap_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "NamedNodeMap_item_Callback";
 
-  static removeNamedItem_Callback_DOMString(mthis, name) native "NamedNodeMap_removeNamedItem_Callback_DOMString";
+  static removeNamedItem_Callback_1(mthis, name) native "NamedNodeMap_removeNamedItem_Callback";
 
-  static removeNamedItemNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "NamedNodeMap_removeNamedItemNS_Callback_DOMString_DOMString";
+  static removeNamedItemNS_Callback_2(mthis, namespaceURI, localName) native "NamedNodeMap_removeNamedItemNS_Callback";
 
-  static setNamedItem_Callback_Node(mthis, node) native "NamedNodeMap_setNamedItem_Callback_Node";
+  static setNamedItem_Callback_1(mthis, node) native "NamedNodeMap_setNamedItem_Callback";
 
-  static setNamedItemNS_Callback_Node(mthis, node) native "NamedNodeMap_setNamedItemNS_Callback_Node";
+  static setNamedItemNS_Callback_1(mthis, node) native "NamedNodeMap_setNamedItemNS_Callback";
 }
 
 class BlinkNavigatorCPU {
@@ -4841,25 +4947,21 @@
 
   static webkitTemporaryStorage_Getter(mthis) native "Navigator_webkitTemporaryStorage_Getter";
 
+  static getBattery_Callback(mthis) native "Navigator_getBattery_Callback";
+
   static getGamepads_Callback(mthis) native "Navigator_getGamepads_Callback";
 
   static getStorageUpdates_Callback(mthis) native "Navigator_getStorageUpdates_Callback";
 
-  static isProtocolHandlerRegistered_Callback_DOMString_DOMString(mthis, scheme, url) native "Navigator_isProtocolHandlerRegistered_Callback_DOMString_DOMString";
+  static isProtocolHandlerRegistered_Callback_2(mthis, scheme, url) native "Navigator_isProtocolHandlerRegistered_Callback";
 
-  static registerProtocolHandler_Callback_DOMString_DOMString_DOMString(mthis, scheme, url, title) native "Navigator_registerProtocolHandler_Callback_DOMString_DOMString_DOMString";
+  static registerProtocolHandler_Callback_3(mthis, scheme, url, title) native "Navigator_registerProtocolHandler_Callback";
 
-  static sendBeacon_Callback_DOMString_DOMString(mthis, url, data) native "Navigator_sendBeacon_Callback_DOMString_DOMString";
+  static sendBeacon_Callback_2(mthis, url, data) native "Navigator_sendBeacon_Callback";
 
-  static sendBeacon_Callback_DOMString_ArrayBufferView(mthis, url, data) native "Navigator_sendBeacon_Callback_DOMString_ArrayBufferView";
+  static unregisterProtocolHandler_Callback_2(mthis, scheme, url) native "Navigator_unregisterProtocolHandler_Callback";
 
-  static sendBeacon_Callback_DOMString_FormData(mthis, url, data) native "Navigator_sendBeacon_Callback_DOMString_FormData";
-
-  static sendBeacon_Callback_DOMString_Blob(mthis, url, data) native "Navigator_sendBeacon_Callback_DOMString_Blob";
-
-  static unregisterProtocolHandler_Callback_DOMString_DOMString(mthis, scheme, url) native "Navigator_unregisterProtocolHandler_Callback_DOMString_DOMString";
-
-  static webkitGetUserMedia_Callback_Dictionary_NavigatorUserMediaSuccessCallback_NavigatorUserMediaErrorCallback(mthis, options, successCallback, errorCallback) native "Navigator_webkitGetUserMedia_Callback_Dictionary_NavigatorUserMediaSuccessCallback_NavigatorUserMediaErrorCallback";
+  static webkitGetUserMedia_Callback_3(mthis, options, successCallback, errorCallback) native "Navigator_webkitGetUserMedia_Callback";
 
   static appCodeName_Getter(mthis) native "Navigator_appCodeName_Getter";
 
@@ -4915,13 +5017,13 @@
 class BlinkNodeList {
   static length_Getter(mthis) native "NodeList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "NodeList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "NodeList_item_Callback";
 }
 
 class BlinkNotation {}
 
 class BlinkNotification {
-  static constructorCallback_DOMString_Dictionary(title, options) native "Notification_constructorCallback_DOMString_Dictionary";
+  static constructorCallback_2(title, options) native "Notification_constructorCallback";
 
   static body_Getter(mthis) native "Notification_body_Getter";
 
@@ -4939,7 +5041,9 @@
 
   static close_Callback(mthis) native "Notification_close_Callback";
 
-  static requestPermission_Callback_NotificationPermissionCallback(callback) native "Notification_requestPermission_Callback_NotificationPermissionCallback";
+  static requestPermission_Callback_1(callback) native "Notification_requestPermission_Callback";
+
+  static requestPermission_Callback() native "Notification_requestPermission_Callback";
 }
 
 class BlinkOESElementIndexUint {}
@@ -4955,13 +5059,13 @@
 class BlinkOESTextureHalfFloatLinear {}
 
 class BlinkOESVertexArrayObject {
-  static bindVertexArrayOES_Callback_WebGLVertexArrayObjectOES(mthis, arrayObject) native "OESVertexArrayObject_bindVertexArrayOES_Callback_WebGLVertexArrayObjectOES";
+  static bindVertexArrayOES_Callback_1(mthis, arrayObject) native "OESVertexArrayObject_bindVertexArrayOES_Callback";
 
   static createVertexArrayOES_Callback(mthis) native "OESVertexArrayObject_createVertexArrayOES_Callback";
 
-  static deleteVertexArrayOES_Callback_WebGLVertexArrayObjectOES(mthis, arrayObject) native "OESVertexArrayObject_deleteVertexArrayOES_Callback_WebGLVertexArrayObjectOES";
+  static deleteVertexArrayOES_Callback_1(mthis, arrayObject) native "OESVertexArrayObject_deleteVertexArrayOES_Callback";
 
-  static isVertexArrayOES_Callback_WebGLVertexArrayObjectOES(mthis, arrayObject) native "OESVertexArrayObject_isVertexArrayOES_Callback_WebGLVertexArrayObjectOES";
+  static isVertexArrayOES_Callback_1(mthis, arrayObject) native "OESVertexArrayObject_isVertexArrayOES_Callback";
 }
 
 class BlinkOfflineAudioCompletionEvent {
@@ -4969,7 +5073,7 @@
 }
 
 class BlinkOfflineAudioContext {
-  static constructorCallback_ul_ul_float(numberOfChannels, numberOfFrames, sampleRate) native "OfflineAudioContext_constructorCallback_unsigned long_unsigned long_float";
+  static constructorCallback_3(numberOfChannels, numberOfFrames, sampleRate) native "OfflineAudioContext_constructorCallback";
 }
 
 class BlinkOscillatorNode {
@@ -4979,19 +5083,19 @@
 
   static type_Getter(mthis) native "OscillatorNode_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "OscillatorNode_type_Setter";
+  static type_Setter(mthis, value) native "OscillatorNode_type_Setter";
 
-  static noteOff_Callback_double(mthis, when) native "OscillatorNode_noteOff_Callback_double";
+  static noteOff_Callback_1(mthis, when) native "OscillatorNode_noteOff_Callback";
 
-  static noteOn_Callback_double(mthis, when) native "OscillatorNode_noteOn_Callback_double";
+  static noteOn_Callback_1(mthis, when) native "OscillatorNode_noteOn_Callback";
 
-  static setPeriodicWave_Callback_PeriodicWave(mthis, periodicWave) native "OscillatorNode_setPeriodicWave_Callback_PeriodicWave";
+  static setPeriodicWave_Callback_1(mthis, periodicWave) native "OscillatorNode_setPeriodicWave_Callback";
 
-  static start_Callback_double(mthis, when) native "OscillatorNode_start_Callback_double";
+  static start_Callback_1(mthis, when) native "OscillatorNode_start_Callback";
 
   static start_Callback(mthis) native "OscillatorNode_start_Callback";
 
-  static stop_Callback_double(mthis, when) native "OscillatorNode_stop_Callback_double";
+  static stop_Callback_1(mthis, when) native "OscillatorNode_stop_Callback";
 
   static stop_Callback(mthis) native "OscillatorNode_stop_Callback";
 }
@@ -5017,71 +5121,69 @@
 class BlinkPannerNode {
   static coneInnerAngle_Getter(mthis) native "PannerNode_coneInnerAngle_Getter";
 
-  static coneInnerAngle_Setter_double(mthis, value) native "PannerNode_coneInnerAngle_Setter";
+  static coneInnerAngle_Setter(mthis, value) native "PannerNode_coneInnerAngle_Setter";
 
   static coneOuterAngle_Getter(mthis) native "PannerNode_coneOuterAngle_Getter";
 
-  static coneOuterAngle_Setter_double(mthis, value) native "PannerNode_coneOuterAngle_Setter";
+  static coneOuterAngle_Setter(mthis, value) native "PannerNode_coneOuterAngle_Setter";
 
   static coneOuterGain_Getter(mthis) native "PannerNode_coneOuterGain_Getter";
 
-  static coneOuterGain_Setter_double(mthis, value) native "PannerNode_coneOuterGain_Setter";
+  static coneOuterGain_Setter(mthis, value) native "PannerNode_coneOuterGain_Setter";
 
   static distanceModel_Getter(mthis) native "PannerNode_distanceModel_Getter";
 
-  static distanceModel_Setter_DOMString(mthis, value) native "PannerNode_distanceModel_Setter";
+  static distanceModel_Setter(mthis, value) native "PannerNode_distanceModel_Setter";
 
   static maxDistance_Getter(mthis) native "PannerNode_maxDistance_Getter";
 
-  static maxDistance_Setter_double(mthis, value) native "PannerNode_maxDistance_Setter";
+  static maxDistance_Setter(mthis, value) native "PannerNode_maxDistance_Setter";
 
   static panningModel_Getter(mthis) native "PannerNode_panningModel_Getter";
 
-  static panningModel_Setter_DOMString(mthis, value) native "PannerNode_panningModel_Setter";
+  static panningModel_Setter(mthis, value) native "PannerNode_panningModel_Setter";
 
   static refDistance_Getter(mthis) native "PannerNode_refDistance_Getter";
 
-  static refDistance_Setter_double(mthis, value) native "PannerNode_refDistance_Setter";
+  static refDistance_Setter(mthis, value) native "PannerNode_refDistance_Setter";
 
   static rolloffFactor_Getter(mthis) native "PannerNode_rolloffFactor_Getter";
 
-  static rolloffFactor_Setter_double(mthis, value) native "PannerNode_rolloffFactor_Setter";
+  static rolloffFactor_Setter(mthis, value) native "PannerNode_rolloffFactor_Setter";
 
-  static setOrientation_Callback_float_float_float(mthis, x, y, z) native "PannerNode_setOrientation_Callback_float_float_float";
+  static setOrientation_Callback_3(mthis, x, y, z) native "PannerNode_setOrientation_Callback";
 
-  static setPosition_Callback_float_float_float(mthis, x, y, z) native "PannerNode_setPosition_Callback_float_float_float";
+  static setPosition_Callback_3(mthis, x, y, z) native "PannerNode_setPosition_Callback";
 
-  static setVelocity_Callback_float_float_float(mthis, x, y, z) native "PannerNode_setVelocity_Callback_float_float_float";
+  static setVelocity_Callback_3(mthis, x, y, z) native "PannerNode_setVelocity_Callback";
 }
 
 class BlinkPath2D {
   static constructorCallback() native "Path2D_constructorCallback";
 
-  static constructorCallback_Path2D(path_OR_text) native "Path2D_constructorCallback_Path2D";
+  static constructorCallback_1(path_OR_text) native "Path2D_constructorCallback";
 
-  static constructorCallback_DOMString(path_OR_text) native "Path2D_constructorCallback_DOMString";
+  static addPath_Callback_2(mthis, path, transform) native "Path2D_addPath_Callback";
 
-  static addPath_Callback_Path2D_SVGMatrix(mthis, path, transform) native "Path2D_addPath_Callback_Path2D_SVGMatrix";
+  static addPath_Callback_1(mthis, path) native "Path2D_addPath_Callback";
 
-  static addPath_Callback_Path2D(mthis, path) native "Path2D_addPath_Callback_Path2D";
+  static arc_Callback_6(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "Path2D_arc_Callback";
 
-  static arc_Callback_float_float_float_float_float_boolean(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "Path2D_arc_Callback_float_float_float_float_float_boolean";
+  static arcTo_Callback_5(mthis, x1, y1, x2, y2, radius) native "Path2D_arcTo_Callback";
 
-  static arcTo_Callback_float_float_float_float_float(mthis, x1, y1, x2, y2, radius) native "Path2D_arcTo_Callback_float_float_float_float_float";
-
-  static bezierCurveTo_Callback_float_float_float_float_float_float(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "Path2D_bezierCurveTo_Callback_float_float_float_float_float_float";
+  static bezierCurveTo_Callback_6(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "Path2D_bezierCurveTo_Callback";
 
   static closePath_Callback(mthis) native "Path2D_closePath_Callback";
 
-  static ellipse_Callback_float_float_float_float_float_float_float_boolean(mthis, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) native "Path2D_ellipse_Callback_float_float_float_float_float_float_float_boolean";
+  static ellipse_Callback_8(mthis, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) native "Path2D_ellipse_Callback";
 
-  static lineTo_Callback_float_float(mthis, x, y) native "Path2D_lineTo_Callback_float_float";
+  static lineTo_Callback_2(mthis, x, y) native "Path2D_lineTo_Callback";
 
-  static moveTo_Callback_float_float(mthis, x, y) native "Path2D_moveTo_Callback_float_float";
+  static moveTo_Callback_2(mthis, x, y) native "Path2D_moveTo_Callback";
 
-  static quadraticCurveTo_Callback_float_float_float_float(mthis, cpx, cpy, x, y) native "Path2D_quadraticCurveTo_Callback_float_float_float_float";
+  static quadraticCurveTo_Callback_4(mthis, cpx, cpy, x, y) native "Path2D_quadraticCurveTo_Callback";
 
-  static rect_Callback_float_float_float_float(mthis, x, y, width, height) native "Path2D_rect_Callback_float_float_float_float";
+  static rect_Callback_4(mthis, x, y, width, height) native "Path2D_rect_Callback";
 }
 
 class BlinkPerformance {
@@ -5091,25 +5193,25 @@
 
   static timing_Getter(mthis) native "Performance_timing_Getter";
 
-  static clearMarks_Callback_DOMString(mthis, markName) native "Performance_clearMarks_Callback_DOMString";
+  static clearMarks_Callback_1(mthis, markName) native "Performance_clearMarks_Callback";
 
-  static clearMeasures_Callback_DOMString(mthis, measureName) native "Performance_clearMeasures_Callback_DOMString";
+  static clearMeasures_Callback_1(mthis, measureName) native "Performance_clearMeasures_Callback";
 
   static getEntries_Callback(mthis) native "Performance_getEntries_Callback";
 
-  static getEntriesByName_Callback_DOMString_DOMString(mthis, name, entryType) native "Performance_getEntriesByName_Callback_DOMString_DOMString";
+  static getEntriesByName_Callback_2(mthis, name, entryType) native "Performance_getEntriesByName_Callback";
 
-  static getEntriesByType_Callback_DOMString(mthis, entryType) native "Performance_getEntriesByType_Callback_DOMString";
+  static getEntriesByType_Callback_1(mthis, entryType) native "Performance_getEntriesByType_Callback";
 
-  static mark_Callback_DOMString(mthis, markName) native "Performance_mark_Callback_DOMString";
+  static mark_Callback_1(mthis, markName) native "Performance_mark_Callback";
 
-  static measure_Callback_DOMString_DOMString_DOMString(mthis, measureName, startMark, endMark) native "Performance_measure_Callback_DOMString_DOMString_DOMString";
+  static measure_Callback_3(mthis, measureName, startMark, endMark) native "Performance_measure_Callback";
 
   static now_Callback(mthis) native "Performance_now_Callback";
 
   static webkitClearResourceTimings_Callback(mthis) native "Performance_webkitClearResourceTimings_Callback";
 
-  static webkitSetResourceTimingBufferSize_Callback_ul(mthis, maxSize) native "Performance_webkitSetResourceTimingBufferSize_Callback_unsigned long";
+  static webkitSetResourceTimingBufferSize_Callback_1(mthis, maxSize) native "Performance_webkitSetResourceTimingBufferSize_Callback";
 }
 
 class BlinkPerformanceEntry {
@@ -5213,23 +5315,23 @@
 
   static name_Getter(mthis) native "Plugin_name_Getter";
 
-  static $__getter___Callback_DOMString(mthis, name) native "Plugin___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, name) native "Plugin___getter___Callback";
 
-  static item_Callback_ul(mthis, index) native "Plugin_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "Plugin_item_Callback";
 
-  static namedItem_Callback_DOMString(mthis, name) native "Plugin_namedItem_Callback_DOMString";
+  static namedItem_Callback_1(mthis, name) native "Plugin_namedItem_Callback";
 }
 
 class BlinkPluginArray {
   static length_Getter(mthis) native "PluginArray_length_Getter";
 
-  static $__getter___Callback_DOMString(mthis, name) native "PluginArray___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, name) native "PluginArray___getter___Callback";
 
-  static item_Callback_ul(mthis, index) native "PluginArray_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "PluginArray_item_Callback";
 
-  static namedItem_Callback_DOMString(mthis, name) native "PluginArray_namedItem_Callback_DOMString";
+  static namedItem_Callback_1(mthis, name) native "PluginArray_namedItem_Callback";
 
-  static refresh_Callback_boolean(mthis, reload) native "PluginArray_refresh_Callback_boolean";
+  static refresh_Callback_1(mthis, reload) native "PluginArray_refresh_Callback";
 }
 
 class BlinkPopStateEvent {
@@ -5266,7 +5368,9 @@
   static data_Getter(mthis) native "PushEvent_data_Getter";
 }
 
-class BlinkPushManager {}
+class BlinkPushManager {
+  static register_Callback_1(mthis, senderId) native "PushManager_register_Callback";
+}
 
 class BlinkPushRegistration {
   static pushEndpoint_Getter(mthis) native "PushRegistration_pushEndpoint_Getter";
@@ -5287,11 +5391,11 @@
 
   static track_Getter(mthis) native "RTCDTMFSender_track_Getter";
 
-  static insertDTMF_Callback_DOMString_long_long(mthis, tones, duration, interToneGap) native "RTCDTMFSender_insertDTMF_Callback_DOMString_long_long";
+  static insertDTMF_Callback_3(mthis, tones, duration, interToneGap) native "RTCDTMFSender_insertDTMF_Callback";
 
-  static insertDTMF_Callback_DOMString_long(mthis, tones, duration) native "RTCDTMFSender_insertDTMF_Callback_DOMString_long";
+  static insertDTMF_Callback_2(mthis, tones, duration) native "RTCDTMFSender_insertDTMF_Callback";
 
-  static insertDTMF_Callback_DOMString(mthis, tones) native "RTCDTMFSender_insertDTMF_Callback_DOMString";
+  static insertDTMF_Callback_1(mthis, tones) native "RTCDTMFSender_insertDTMF_Callback";
 }
 
 class BlinkRTCDTMFToneChangeEvent {
@@ -5303,7 +5407,7 @@
 class BlinkRTCDataChannel {
   static binaryType_Getter(mthis) native "RTCDataChannel_binaryType_Getter";
 
-  static binaryType_Setter_DOMString(mthis, value) native "RTCDataChannel_binaryType_Setter";
+  static binaryType_Setter(mthis, value) native "RTCDataChannel_binaryType_Setter";
 
   static bufferedAmount_Getter(mthis) native "RTCDataChannel_bufferedAmount_Getter";
 
@@ -5327,13 +5431,7 @@
 
   static close_Callback(mthis) native "RTCDataChannel_close_Callback";
 
-  static send_Callback_DOMString(mthis, data) native "RTCDataChannel_send_Callback_DOMString";
-
-  static send_Callback_Blob(mthis, data) native "RTCDataChannel_send_Callback_Blob";
-
-  static send_Callback_ArrayBufferView(mthis, data) native "RTCDataChannel_send_Callback_ArrayBufferView";
-
-  static send_Callback_ArrayBuffer(mthis, data) native "RTCDataChannel_send_Callback_ArrayBuffer";
+  static send_Callback_1(mthis, data) native "RTCDataChannel_send_Callback";
 }
 
 class BlinkRTCDataChannelEvent {
@@ -5341,19 +5439,19 @@
 }
 
 class BlinkRTCIceCandidate {
-  static constructorCallback_Dictionary(dictionary) native "RTCIceCandidate_constructorCallback_Dictionary";
+  static constructorCallback_1(dictionary) native "RTCIceCandidate_constructorCallback";
 
   static candidate_Getter(mthis) native "RTCIceCandidate_candidate_Getter";
 
-  static candidate_Setter_DOMString(mthis, value) native "RTCIceCandidate_candidate_Setter";
+  static candidate_Setter(mthis, value) native "RTCIceCandidate_candidate_Setter";
 
   static sdpMLineIndex_Getter(mthis) native "RTCIceCandidate_sdpMLineIndex_Getter";
 
-  static sdpMLineIndex_Setter_us(mthis, value) native "RTCIceCandidate_sdpMLineIndex_Setter";
+  static sdpMLineIndex_Setter(mthis, value) native "RTCIceCandidate_sdpMLineIndex_Setter";
 
   static sdpMid_Getter(mthis) native "RTCIceCandidate_sdpMid_Getter";
 
-  static sdpMid_Setter_DOMString(mthis, value) native "RTCIceCandidate_sdpMid_Setter";
+  static sdpMid_Setter(mthis, value) native "RTCIceCandidate_sdpMid_Setter";
 }
 
 class BlinkRTCIceCandidateEvent {
@@ -5361,9 +5459,9 @@
 }
 
 class BlinkRTCPeerConnection {
-  static constructorCallback_Dictionary_Dictionary(rtcConfiguration, mediaConstraints) native "RTCPeerConnection_constructorCallback_Dictionary_Dictionary";
+  static constructorCallback_2(rtcConfiguration, mediaConstraints) native "RTCPeerConnection_constructorCallback";
 
-  static constructorCallback_Dictionary(rtcConfiguration) native "RTCPeerConnection_constructorCallback_Dictionary";
+  static constructorCallback_1(rtcConfiguration) native "RTCPeerConnection_constructorCallback";
 
   static iceConnectionState_Getter(mthis) native "RTCPeerConnection_iceConnectionState_Getter";
 
@@ -5375,49 +5473,61 @@
 
   static signalingState_Getter(mthis) native "RTCPeerConnection_signalingState_Getter";
 
-  static addIceCandidate_Callback_RTCIceCandidate_VoidCallback_RTCErrorCallback(mthis, candidate, successCallback, failureCallback) native "RTCPeerConnection_addIceCandidate_Callback_RTCIceCandidate_VoidCallback_RTCErrorCallback";
+  static addIceCandidate_Callback_3(mthis, candidate, successCallback, failureCallback) native "RTCPeerConnection_addIceCandidate_Callback";
 
-  static addStream_Callback_MediaStream_Dictionary(mthis, stream, mediaConstraints) native "RTCPeerConnection_addStream_Callback_MediaStream_Dictionary";
+  static addStream_Callback_2(mthis, stream, mediaConstraints) native "RTCPeerConnection_addStream_Callback";
+
+  static addStream_Callback_1(mthis, stream) native "RTCPeerConnection_addStream_Callback";
 
   static close_Callback(mthis) native "RTCPeerConnection_close_Callback";
 
-  static createAnswer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(mthis, successCallback, failureCallback, mediaConstraints) native "RTCPeerConnection_createAnswer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary";
+  static createAnswer_Callback_3(mthis, successCallback, failureCallback, mediaConstraints) native "RTCPeerConnection_createAnswer_Callback";
 
-  static createDTMFSender_Callback_MediaStreamTrack(mthis, track) native "RTCPeerConnection_createDTMFSender_Callback_MediaStreamTrack";
+  static createAnswer_Callback_2(mthis, successCallback, failureCallback) native "RTCPeerConnection_createAnswer_Callback";
 
-  static createDataChannel_Callback_DOMString_Dictionary(mthis, label, options) native "RTCPeerConnection_createDataChannel_Callback_DOMString_Dictionary";
+  static createDTMFSender_Callback_1(mthis, track) native "RTCPeerConnection_createDTMFSender_Callback";
 
-  static createOffer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(mthis, successCallback, failureCallback, rtcOfferOptions) native "RTCPeerConnection_createOffer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary";
+  static createDataChannel_Callback_2(mthis, label, options) native "RTCPeerConnection_createDataChannel_Callback";
+
+  static createDataChannel_Callback_1(mthis, label) native "RTCPeerConnection_createDataChannel_Callback";
+
+  static createOffer_Callback_3(mthis, successCallback, failureCallback, rtcOfferOptions) native "RTCPeerConnection_createOffer_Callback";
+
+  static createOffer_Callback_2(mthis, successCallback, failureCallback) native "RTCPeerConnection_createOffer_Callback";
 
   static getLocalStreams_Callback(mthis) native "RTCPeerConnection_getLocalStreams_Callback";
 
   static getRemoteStreams_Callback(mthis) native "RTCPeerConnection_getRemoteStreams_Callback";
 
-  static getStats_Callback_RTCStatsCallback_MediaStreamTrack(mthis, successCallback, selector) native "RTCPeerConnection_getStats_Callback_RTCStatsCallback_MediaStreamTrack";
+  static getStats_Callback_2(mthis, successCallback, selector) native "RTCPeerConnection_getStats_Callback";
 
-  static getStreamById_Callback_DOMString(mthis, streamId) native "RTCPeerConnection_getStreamById_Callback_DOMString";
+  static getStreamById_Callback_1(mthis, streamId) native "RTCPeerConnection_getStreamById_Callback";
 
-  static removeStream_Callback_MediaStream(mthis, stream) native "RTCPeerConnection_removeStream_Callback_MediaStream";
+  static removeStream_Callback_1(mthis, stream) native "RTCPeerConnection_removeStream_Callback";
 
-  static setLocalDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setLocalDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback";
+  static setLocalDescription_Callback_3(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setLocalDescription_Callback";
 
-  static setRemoteDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setRemoteDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback";
+  static setRemoteDescription_Callback_3(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setRemoteDescription_Callback";
 
-  static updateIce_Callback_Dictionary_Dictionary(mthis, configuration, mediaConstraints) native "RTCPeerConnection_updateIce_Callback_Dictionary_Dictionary";
+  static updateIce_Callback_2(mthis, configuration, mediaConstraints) native "RTCPeerConnection_updateIce_Callback";
+
+  static updateIce_Callback_1(mthis, configuration) native "RTCPeerConnection_updateIce_Callback";
+
+  static updateIce_Callback(mthis) native "RTCPeerConnection_updateIce_Callback";
 }
 
 class BlinkRTCSessionDescription {
-  static constructorCallback_Dictionary(descriptionInitDict) native "RTCSessionDescription_constructorCallback_Dictionary";
+  static constructorCallback_1(descriptionInitDict) native "RTCSessionDescription_constructorCallback";
 
   static constructorCallback() native "RTCSessionDescription_constructorCallback";
 
   static sdp_Getter(mthis) native "RTCSessionDescription_sdp_Getter";
 
-  static sdp_Setter_DOMString(mthis, value) native "RTCSessionDescription_sdp_Setter";
+  static sdp_Setter(mthis, value) native "RTCSessionDescription_sdp_Setter";
 
   static type_Getter(mthis) native "RTCSessionDescription_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "RTCSessionDescription_type_Setter";
+  static type_Setter(mthis, value) native "RTCSessionDescription_type_Setter";
 }
 
 class BlinkRTCStatsReport {
@@ -5433,13 +5543,13 @@
 
   static names_Callback(mthis) native "RTCStatsReport_names_Callback";
 
-  static stat_Callback_DOMString(mthis, name) native "RTCStatsReport_stat_Callback_DOMString";
+  static stat_Callback_1(mthis, name) native "RTCStatsReport_stat_Callback";
 }
 
 class BlinkRTCStatsResponse {
-  static $__getter___Callback_DOMString(mthis, name) native "RTCStatsResponse___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, name) native "RTCStatsResponse___getter___Callback";
 
-  static namedItem_Callback_DOMString(mthis, name) native "RTCStatsResponse_namedItem_Callback_DOMString";
+  static namedItem_Callback_1(mthis, name) native "RTCStatsResponse_namedItem_Callback";
 
   static result_Callback(mthis) native "RTCStatsResponse_result_Callback";
 }
@@ -5463,19 +5573,19 @@
 
   static cloneRange_Callback(mthis) native "Range_cloneRange_Callback";
 
-  static collapse_Callback_boolean(mthis, toStart) native "Range_collapse_Callback_boolean";
+  static collapse_Callback_1(mthis, toStart) native "Range_collapse_Callback";
 
   static collapse_Callback(mthis) native "Range_collapse_Callback";
 
-  static comparePoint_Callback_Node_long(mthis, refNode, offset) native "Range_comparePoint_Callback_Node_long";
+  static comparePoint_Callback_2(mthis, refNode, offset) native "Range_comparePoint_Callback";
 
-  static createContextualFragment_Callback_DOMString(mthis, html) native "Range_createContextualFragment_Callback_DOMString";
+  static createContextualFragment_Callback_1(mthis, html) native "Range_createContextualFragment_Callback";
 
   static deleteContents_Callback(mthis) native "Range_deleteContents_Callback";
 
   static detach_Callback(mthis) native "Range_detach_Callback";
 
-  static expand_Callback_DOMString(mthis, unit) native "Range_expand_Callback_DOMString";
+  static expand_Callback_1(mthis, unit) native "Range_expand_Callback";
 
   static extractContents_Callback(mthis) native "Range_extractContents_Callback";
 
@@ -5483,27 +5593,27 @@
 
   static getClientRects_Callback(mthis) native "Range_getClientRects_Callback";
 
-  static insertNode_Callback_Node(mthis, newNode) native "Range_insertNode_Callback_Node";
+  static insertNode_Callback_1(mthis, newNode) native "Range_insertNode_Callback";
 
-  static isPointInRange_Callback_Node_long(mthis, refNode, offset) native "Range_isPointInRange_Callback_Node_long";
+  static isPointInRange_Callback_2(mthis, refNode, offset) native "Range_isPointInRange_Callback";
 
-  static selectNode_Callback_Node(mthis, refNode) native "Range_selectNode_Callback_Node";
+  static selectNode_Callback_1(mthis, refNode) native "Range_selectNode_Callback";
 
-  static selectNodeContents_Callback_Node(mthis, refNode) native "Range_selectNodeContents_Callback_Node";
+  static selectNodeContents_Callback_1(mthis, refNode) native "Range_selectNodeContents_Callback";
 
-  static setEnd_Callback_Node_long(mthis, refNode, offset) native "Range_setEnd_Callback_Node_long";
+  static setEnd_Callback_2(mthis, refNode, offset) native "Range_setEnd_Callback";
 
-  static setEndAfter_Callback_Node(mthis, refNode) native "Range_setEndAfter_Callback_Node";
+  static setEndAfter_Callback_1(mthis, refNode) native "Range_setEndAfter_Callback";
 
-  static setEndBefore_Callback_Node(mthis, refNode) native "Range_setEndBefore_Callback_Node";
+  static setEndBefore_Callback_1(mthis, refNode) native "Range_setEndBefore_Callback";
 
-  static setStart_Callback_Node_long(mthis, refNode, offset) native "Range_setStart_Callback_Node_long";
+  static setStart_Callback_2(mthis, refNode, offset) native "Range_setStart_Callback";
 
-  static setStartAfter_Callback_Node(mthis, refNode) native "Range_setStartAfter_Callback_Node";
+  static setStartAfter_Callback_1(mthis, refNode) native "Range_setStartAfter_Callback";
 
-  static setStartBefore_Callback_Node(mthis, refNode) native "Range_setStartBefore_Callback_Node";
+  static setStartBefore_Callback_1(mthis, refNode) native "Range_setStartBefore_Callback";
 
-  static surroundContents_Callback_Node(mthis, newParent) native "Range_surroundContents_Callback_Node";
+  static surroundContents_Callback_1(mthis, newParent) native "Range_surroundContents_Callback";
 }
 
 class BlinkReadableStream {}
@@ -5517,13 +5627,9 @@
 }
 
 class BlinkRequest {
-  static constructorCallback_DOMString(input) native "Request_constructorCallback_DOMString";
+  static constructorCallback_1(input) native "Request_constructorCallback";
 
-  static constructorCallback_DOMString_Dictionary(input, requestInitDict) native "Request_constructorCallback_DOMString_Dictionary";
-
-  static constructorCallback_Request(input) native "Request_constructorCallback_Request";
-
-  static constructorCallback_Request_Dictionary(input, requestInitDict) native "Request_constructorCallback_Request_Dictionary";
+  static constructorCallback_2(input, requestInitDict) native "Request_constructorCallback";
 
   static credentials_Getter(mthis) native "Request_credentials_Getter";
 
@@ -5541,13 +5647,9 @@
 }
 
 class BlinkResponse {
-  static constructorCallback_DOMString(body) native "Response_constructorCallback_DOMString";
+  static constructorCallback_1(body) native "Response_constructorCallback";
 
-  static constructorCallback_DOMString_Dictionary(body, responseInitDict) native "Response_constructorCallback_DOMString_Dictionary";
-
-  static constructorCallback_Blob(body) native "Response_constructorCallback_Blob";
-
-  static constructorCallback_Blob_Dictionary(body, responseInitDict) native "Response_constructorCallback_Blob_Dictionary";
+  static constructorCallback_2(body, responseInitDict) native "Response_constructorCallback";
 }
 
 class BlinkSQLError {
@@ -5567,11 +5669,11 @@
 class BlinkSQLResultSetRowList {
   static length_Getter(mthis) native "SQLResultSetRowList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "SQLResultSetRowList_item_Callback";
+  static item_Callback_1(mthis, index) native "SQLResultSetRowList_item_Callback";
 }
 
 class BlinkSQLTransaction {
-  static executeSql_Callback_DOMString_A_object_A_SQLStatementCallback_SQLStatementErrorCallback(mthis, sqlStatement, arguments, callback, errorCallback) native "SQLTransaction_executeSql_Callback";
+  static executeSql_Callback_4(mthis, sqlStatement, arguments, callback, errorCallback) native "SQLTransaction_executeSql_Callback";
 }
 
 class BlinkSQLTransactionSync {}
@@ -5585,21 +5687,21 @@
 
   static tabIndex_Getter(mthis) native "SVGElement_tabIndex_Getter";
 
-  static tabIndex_Setter_long(mthis, value) native "SVGElement_tabIndex_Setter";
+  static tabIndex_Setter(mthis, value) native "SVGElement_tabIndex_Setter";
 
   static viewportElement_Getter(mthis) native "SVGElement_viewportElement_Getter";
 
   static xmlbase_Getter(mthis) native "SVGElement_xmlbase_Getter";
 
-  static xmlbase_Setter_DOMString(mthis, value) native "SVGElement_xmlbase_Setter";
+  static xmlbase_Setter(mthis, value) native "SVGElement_xmlbase_Setter";
 
   static xmllang_Getter(mthis) native "SVGElement_xmllang_Getter";
 
-  static xmllang_Setter_DOMString(mthis, value) native "SVGElement_xmllang_Setter";
+  static xmllang_Setter(mthis, value) native "SVGElement_xmllang_Setter";
 
   static xmlspace_Getter(mthis) native "SVGElement_xmlspace_Getter";
 
-  static xmlspace_Setter_DOMString(mthis, value) native "SVGElement_xmlspace_Setter";
+  static xmlspace_Setter(mthis, value) native "SVGElement_xmlspace_Setter";
 }
 
 class BlinkSVGTests {
@@ -5609,7 +5711,7 @@
 
   static systemLanguage_Getter(mthis) native "SVGTests_systemLanguage_Getter";
 
-  static hasExtension_Callback_DOMString(mthis, extension) native "SVGTests_hasExtension_Callback_DOMString";
+  static hasExtension_Callback_1(mthis, extension) native "SVGTests_hasExtension_Callback";
 }
 
 class BlinkSVGGraphicsElement {
@@ -5625,7 +5727,7 @@
 
   static getScreenCTM_Callback(mthis) native "SVGGraphicsElement_getScreenCTM_Callback";
 
-  static getTransformToElement_Callback_SVGElement(mthis, element) native "SVGGraphicsElement_getTransformToElement_Callback_SVGElement";
+  static getTransformToElement_Callback_1(mthis, element) native "SVGGraphicsElement_getTransformToElement_Callback";
 
   static requiredExtensions_Getter(mthis) native "SVGGraphicsElement_requiredExtensions_Getter";
 
@@ -5633,7 +5735,7 @@
 
   static systemLanguage_Getter(mthis) native "SVGGraphicsElement_systemLanguage_Getter";
 
-  static hasExtension_Callback_DOMString(mthis, extension) native "SVGGraphicsElement_hasExtension_Callback_DOMString";
+  static hasExtension_Callback_1(mthis, extension) native "SVGGraphicsElement_hasExtension_Callback";
 }
 
 class BlinkSVGURIReference {
@@ -5653,23 +5755,23 @@
 
   static textLength_Getter(mthis) native "SVGTextContentElement_textLength_Getter";
 
-  static getCharNumAtPosition_Callback_SVGPoint(mthis, point) native "SVGTextContentElement_getCharNumAtPosition_Callback_SVGPoint";
+  static getCharNumAtPosition_Callback_1(mthis, point) native "SVGTextContentElement_getCharNumAtPosition_Callback";
 
   static getComputedTextLength_Callback(mthis) native "SVGTextContentElement_getComputedTextLength_Callback";
 
-  static getEndPositionOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getEndPositionOfChar_Callback_unsigned long";
+  static getEndPositionOfChar_Callback_1(mthis, offset) native "SVGTextContentElement_getEndPositionOfChar_Callback";
 
-  static getExtentOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getExtentOfChar_Callback_unsigned long";
+  static getExtentOfChar_Callback_1(mthis, offset) native "SVGTextContentElement_getExtentOfChar_Callback";
 
   static getNumberOfChars_Callback(mthis) native "SVGTextContentElement_getNumberOfChars_Callback";
 
-  static getRotationOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getRotationOfChar_Callback_unsigned long";
+  static getRotationOfChar_Callback_1(mthis, offset) native "SVGTextContentElement_getRotationOfChar_Callback";
 
-  static getStartPositionOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getStartPositionOfChar_Callback_unsigned long";
+  static getStartPositionOfChar_Callback_1(mthis, offset) native "SVGTextContentElement_getStartPositionOfChar_Callback";
 
-  static getSubStringLength_Callback_ul_ul(mthis, offset, length) native "SVGTextContentElement_getSubStringLength_Callback_unsigned long_unsigned long";
+  static getSubStringLength_Callback_2(mthis, offset, length) native "SVGTextContentElement_getSubStringLength_Callback";
 
-  static selectSubString_Callback_ul_ul(mthis, offset, length) native "SVGTextContentElement_selectSubString_Callback_unsigned long_unsigned long";
+  static selectSubString_Callback_2(mthis, offset, length) native "SVGTextContentElement_selectSubString_Callback";
 }
 
 class BlinkSVGTextPositioningElement {
@@ -5687,11 +5789,11 @@
 class BlinkSVGAltGlyphElement {
   static format_Getter(mthis) native "SVGAltGlyphElement_format_Getter";
 
-  static format_Setter_DOMString(mthis, value) native "SVGAltGlyphElement_format_Setter";
+  static format_Setter(mthis, value) native "SVGAltGlyphElement_format_Setter";
 
   static glyphRef_Getter(mthis) native "SVGAltGlyphElement_glyphRef_Getter";
 
-  static glyphRef_Setter_DOMString(mthis, value) native "SVGAltGlyphElement_glyphRef_Setter";
+  static glyphRef_Setter(mthis, value) native "SVGAltGlyphElement_glyphRef_Setter";
 
   static href_Getter(mthis) native "SVGAltGlyphElement_href_Getter";
 }
@@ -5703,19 +5805,19 @@
 
   static value_Getter(mthis) native "SVGAngle_value_Getter";
 
-  static value_Setter_float(mthis, value) native "SVGAngle_value_Setter";
+  static value_Setter(mthis, value) native "SVGAngle_value_Setter";
 
   static valueAsString_Getter(mthis) native "SVGAngle_valueAsString_Getter";
 
-  static valueAsString_Setter_DOMString(mthis, value) native "SVGAngle_valueAsString_Setter";
+  static valueAsString_Setter(mthis, value) native "SVGAngle_valueAsString_Setter";
 
   static valueInSpecifiedUnits_Getter(mthis) native "SVGAngle_valueInSpecifiedUnits_Getter";
 
-  static valueInSpecifiedUnits_Setter_float(mthis, value) native "SVGAngle_valueInSpecifiedUnits_Setter";
+  static valueInSpecifiedUnits_Setter(mthis, value) native "SVGAngle_valueInSpecifiedUnits_Setter";
 
-  static convertToSpecifiedUnits_Callback_us(mthis, unitType) native "SVGAngle_convertToSpecifiedUnits_Callback_unsigned short";
+  static convertToSpecifiedUnits_Callback_1(mthis, unitType) native "SVGAngle_convertToSpecifiedUnits_Callback";
 
-  static newValueSpecifiedUnits_Callback_us_float(mthis, unitType, valueInSpecifiedUnits) native "SVGAngle_newValueSpecifiedUnits_Callback_unsigned short_float";
+  static newValueSpecifiedUnits_Callback_2(mthis, unitType, valueInSpecifiedUnits) native "SVGAngle_newValueSpecifiedUnits_Callback";
 }
 
 class BlinkSVGAnimationElement {
@@ -5723,11 +5825,11 @@
 
   static beginElement_Callback(mthis) native "SVGAnimationElement_beginElement_Callback";
 
-  static beginElementAt_Callback_float(mthis, offset) native "SVGAnimationElement_beginElementAt_Callback_float";
+  static beginElementAt_Callback_1(mthis, offset) native "SVGAnimationElement_beginElementAt_Callback";
 
   static endElement_Callback(mthis) native "SVGAnimationElement_endElement_Callback";
 
-  static endElementAt_Callback_float(mthis, offset) native "SVGAnimationElement_endElementAt_Callback_float";
+  static endElementAt_Callback_1(mthis, offset) native "SVGAnimationElement_endElementAt_Callback";
 
   static getCurrentTime_Callback(mthis) native "SVGAnimationElement_getCurrentTime_Callback";
 
@@ -5741,7 +5843,7 @@
 
   static systemLanguage_Getter(mthis) native "SVGAnimationElement_systemLanguage_Getter";
 
-  static hasExtension_Callback_DOMString(mthis, extension) native "SVGAnimationElement_hasExtension_Callback_DOMString";
+  static hasExtension_Callback_1(mthis, extension) native "SVGAnimationElement_hasExtension_Callback";
 }
 
 class BlinkSVGAnimateElement {}
@@ -5761,7 +5863,7 @@
 
   static baseVal_Getter(mthis) native "SVGAnimatedBoolean_baseVal_Getter";
 
-  static baseVal_Setter_boolean(mthis, value) native "SVGAnimatedBoolean_baseVal_Setter";
+  static baseVal_Setter(mthis, value) native "SVGAnimatedBoolean_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedEnumeration {
@@ -5769,7 +5871,7 @@
 
   static baseVal_Getter(mthis) native "SVGAnimatedEnumeration_baseVal_Getter";
 
-  static baseVal_Setter_us(mthis, value) native "SVGAnimatedEnumeration_baseVal_Setter";
+  static baseVal_Setter(mthis, value) native "SVGAnimatedEnumeration_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedInteger {
@@ -5777,7 +5879,7 @@
 
   static baseVal_Getter(mthis) native "SVGAnimatedInteger_baseVal_Getter";
 
-  static baseVal_Setter_long(mthis, value) native "SVGAnimatedInteger_baseVal_Setter";
+  static baseVal_Setter(mthis, value) native "SVGAnimatedInteger_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedLength {
@@ -5797,7 +5899,7 @@
 
   static baseVal_Getter(mthis) native "SVGAnimatedNumber_baseVal_Getter";
 
-  static baseVal_Setter_float(mthis, value) native "SVGAnimatedNumber_baseVal_Setter";
+  static baseVal_Setter(mthis, value) native "SVGAnimatedNumber_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedNumberList {
@@ -5823,7 +5925,7 @@
 
   static baseVal_Getter(mthis) native "SVGAnimatedString_baseVal_Getter";
 
-  static baseVal_Setter_DOMString(mthis, value) native "SVGAnimatedString_baseVal_Setter";
+  static baseVal_Setter(mthis, value) native "SVGAnimatedString_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedTransformList {
@@ -5833,9 +5935,9 @@
 }
 
 class BlinkSVGGeometryElement {
-  static isPointInFill_Callback_SVGPoint(mthis, point) native "SVGGeometryElement_isPointInFill_Callback_SVGPoint";
+  static isPointInFill_Callback_1(mthis, point) native "SVGGeometryElement_isPointInFill_Callback";
 
-  static isPointInStroke_Callback_SVGPoint(mthis, point) native "SVGGeometryElement_isPointInStroke_Callback_SVGPoint";
+  static isPointInStroke_Callback_1(mthis, point) native "SVGGeometryElement_isPointInStroke_Callback";
 }
 
 class BlinkSVGCircleElement {
@@ -6073,7 +6175,7 @@
 
   static stdDeviationY_Getter(mthis) native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
 
-  static setStdDeviation_Callback_float_float(mthis, stdDeviationX, stdDeviationY) native "SVGFEGaussianBlurElement_setStdDeviation_Callback_float_float";
+  static setStdDeviation_Callback_2(mthis, stdDeviationX, stdDeviationY) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
 
   static height_Getter(mthis) native "SVGFEGaussianBlurElement_height_Getter";
 
@@ -6257,7 +6359,7 @@
 
   static y_Getter(mthis) native "SVGFilterElement_y_Getter";
 
-  static setFilterRes_Callback_ul_ul(mthis, filterResX, filterResY) native "SVGFilterElement_setFilterRes_Callback_unsigned long_unsigned long";
+  static setFilterRes_Callback_2(mthis, filterResX, filterResY) native "SVGFilterElement_setFilterRes_Callback";
 
   static href_Getter(mthis) native "SVGFilterElement_href_Getter";
 }
@@ -6327,19 +6429,19 @@
 
   static value_Getter(mthis) native "SVGLength_value_Getter";
 
-  static value_Setter_float(mthis, value) native "SVGLength_value_Setter";
+  static value_Setter(mthis, value) native "SVGLength_value_Setter";
 
   static valueAsString_Getter(mthis) native "SVGLength_valueAsString_Getter";
 
-  static valueAsString_Setter_DOMString(mthis, value) native "SVGLength_valueAsString_Setter";
+  static valueAsString_Setter(mthis, value) native "SVGLength_valueAsString_Setter";
 
   static valueInSpecifiedUnits_Getter(mthis) native "SVGLength_valueInSpecifiedUnits_Getter";
 
-  static valueInSpecifiedUnits_Setter_float(mthis, value) native "SVGLength_valueInSpecifiedUnits_Setter";
+  static valueInSpecifiedUnits_Setter(mthis, value) native "SVGLength_valueInSpecifiedUnits_Setter";
 
-  static convertToSpecifiedUnits_Callback_us(mthis, unitType) native "SVGLength_convertToSpecifiedUnits_Callback_unsigned short";
+  static convertToSpecifiedUnits_Callback_1(mthis, unitType) native "SVGLength_convertToSpecifiedUnits_Callback";
 
-  static newValueSpecifiedUnits_Callback_us_float(mthis, unitType, valueInSpecifiedUnits) native "SVGLength_newValueSpecifiedUnits_Callback_unsigned short_float";
+  static newValueSpecifiedUnits_Callback_2(mthis, unitType, valueInSpecifiedUnits) native "SVGLength_newValueSpecifiedUnits_Callback";
 }
 
 class BlinkSVGLengthList {
@@ -6347,21 +6449,21 @@
 
   static numberOfItems_Getter(mthis) native "SVGLengthList_numberOfItems_Getter";
 
-  static $__setter___Callback_ul_SVGLength(mthis, index, value) native "SVGLengthList___setter___Callback_unsigned long_SVGLength";
+  static $__setter___Callback_2(mthis, index, value) native "SVGLengthList___setter___Callback";
 
-  static appendItem_Callback_SVGLength(mthis, item) native "SVGLengthList_appendItem_Callback_SVGLength";
+  static appendItem_Callback_1(mthis, item) native "SVGLengthList_appendItem_Callback";
 
   static clear_Callback(mthis) native "SVGLengthList_clear_Callback";
 
-  static getItem_Callback_ul(mthis, index) native "SVGLengthList_getItem_Callback_unsigned long";
+  static getItem_Callback_1(mthis, index) native "SVGLengthList_getItem_Callback";
 
-  static initialize_Callback_SVGLength(mthis, item) native "SVGLengthList_initialize_Callback_SVGLength";
+  static initialize_Callback_1(mthis, item) native "SVGLengthList_initialize_Callback";
 
-  static insertItemBefore_Callback_SVGLength_ul(mthis, item, index) native "SVGLengthList_insertItemBefore_Callback_SVGLength_unsigned long";
+  static insertItemBefore_Callback_2(mthis, item, index) native "SVGLengthList_insertItemBefore_Callback";
 
-  static removeItem_Callback_ul(mthis, index) native "SVGLengthList_removeItem_Callback_unsigned long";
+  static removeItem_Callback_1(mthis, index) native "SVGLengthList_removeItem_Callback";
 
-  static replaceItem_Callback_SVGLength_ul(mthis, item, index) native "SVGLengthList_replaceItem_Callback_SVGLength_unsigned long";
+  static replaceItem_Callback_2(mthis, item, index) native "SVGLengthList_replaceItem_Callback";
 }
 
 class BlinkSVGLineElement {
@@ -6401,7 +6503,7 @@
 
   static refY_Getter(mthis) native "SVGMarkerElement_refY_Getter";
 
-  static setOrientToAngle_Callback_SVGAngle(mthis, angle) native "SVGMarkerElement_setOrientToAngle_Callback_SVGAngle";
+  static setOrientToAngle_Callback_1(mthis, angle) native "SVGMarkerElement_setOrientToAngle_Callback";
 
   static setOrientToAuto_Callback(mthis) native "SVGMarkerElement_setOrientToAuto_Callback";
 
@@ -6429,33 +6531,33 @@
 
   static systemLanguage_Getter(mthis) native "SVGMaskElement_systemLanguage_Getter";
 
-  static hasExtension_Callback_DOMString(mthis, extension) native "SVGMaskElement_hasExtension_Callback_DOMString";
+  static hasExtension_Callback_1(mthis, extension) native "SVGMaskElement_hasExtension_Callback";
 }
 
 class BlinkSVGMatrix {
   static a_Getter(mthis) native "SVGMatrix_a_Getter";
 
-  static a_Setter_double(mthis, value) native "SVGMatrix_a_Setter";
+  static a_Setter(mthis, value) native "SVGMatrix_a_Setter";
 
   static b_Getter(mthis) native "SVGMatrix_b_Getter";
 
-  static b_Setter_double(mthis, value) native "SVGMatrix_b_Setter";
+  static b_Setter(mthis, value) native "SVGMatrix_b_Setter";
 
   static c_Getter(mthis) native "SVGMatrix_c_Getter";
 
-  static c_Setter_double(mthis, value) native "SVGMatrix_c_Setter";
+  static c_Setter(mthis, value) native "SVGMatrix_c_Setter";
 
   static d_Getter(mthis) native "SVGMatrix_d_Getter";
 
-  static d_Setter_double(mthis, value) native "SVGMatrix_d_Setter";
+  static d_Setter(mthis, value) native "SVGMatrix_d_Setter";
 
   static e_Getter(mthis) native "SVGMatrix_e_Getter";
 
-  static e_Setter_double(mthis, value) native "SVGMatrix_e_Setter";
+  static e_Setter(mthis, value) native "SVGMatrix_e_Setter";
 
   static f_Getter(mthis) native "SVGMatrix_f_Getter";
 
-  static f_Setter_double(mthis, value) native "SVGMatrix_f_Setter";
+  static f_Setter(mthis, value) native "SVGMatrix_f_Setter";
 
   static flipX_Callback(mthis) native "SVGMatrix_flipX_Callback";
 
@@ -6463,21 +6565,21 @@
 
   static inverse_Callback(mthis) native "SVGMatrix_inverse_Callback";
 
-  static multiply_Callback_SVGMatrix(mthis, secondMatrix) native "SVGMatrix_multiply_Callback_SVGMatrix";
+  static multiply_Callback_1(mthis, secondMatrix) native "SVGMatrix_multiply_Callback";
 
-  static rotate_Callback_float(mthis, angle) native "SVGMatrix_rotate_Callback_float";
+  static rotate_Callback_1(mthis, angle) native "SVGMatrix_rotate_Callback";
 
-  static rotateFromVector_Callback_float_float(mthis, x, y) native "SVGMatrix_rotateFromVector_Callback_float_float";
+  static rotateFromVector_Callback_2(mthis, x, y) native "SVGMatrix_rotateFromVector_Callback";
 
-  static scale_Callback_float(mthis, scaleFactor) native "SVGMatrix_scale_Callback_float";
+  static scale_Callback_1(mthis, scaleFactor) native "SVGMatrix_scale_Callback";
 
-  static scaleNonUniform_Callback_float_float(mthis, scaleFactorX, scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback_float_float";
+  static scaleNonUniform_Callback_2(mthis, scaleFactorX, scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback";
 
-  static skewX_Callback_float(mthis, angle) native "SVGMatrix_skewX_Callback_float";
+  static skewX_Callback_1(mthis, angle) native "SVGMatrix_skewX_Callback";
 
-  static skewY_Callback_float(mthis, angle) native "SVGMatrix_skewY_Callback_float";
+  static skewY_Callback_1(mthis, angle) native "SVGMatrix_skewY_Callback";
 
-  static translate_Callback_float_float(mthis, x, y) native "SVGMatrix_translate_Callback_float_float";
+  static translate_Callback_2(mthis, x, y) native "SVGMatrix_translate_Callback";
 }
 
 class BlinkSVGMetadataElement {}
@@ -6487,7 +6589,7 @@
 class BlinkSVGNumber {
   static value_Getter(mthis) native "SVGNumber_value_Getter";
 
-  static value_Setter_float(mthis, value) native "SVGNumber_value_Setter";
+  static value_Setter(mthis, value) native "SVGNumber_value_Setter";
 }
 
 class BlinkSVGNumberList {
@@ -6495,21 +6597,21 @@
 
   static numberOfItems_Getter(mthis) native "SVGNumberList_numberOfItems_Getter";
 
-  static $__setter___Callback_ul_SVGNumber(mthis, index, value) native "SVGNumberList___setter___Callback_unsigned long_SVGNumber";
+  static $__setter___Callback_2(mthis, index, value) native "SVGNumberList___setter___Callback";
 
-  static appendItem_Callback_SVGNumber(mthis, item) native "SVGNumberList_appendItem_Callback_SVGNumber";
+  static appendItem_Callback_1(mthis, item) native "SVGNumberList_appendItem_Callback";
 
   static clear_Callback(mthis) native "SVGNumberList_clear_Callback";
 
-  static getItem_Callback_ul(mthis, index) native "SVGNumberList_getItem_Callback_unsigned long";
+  static getItem_Callback_1(mthis, index) native "SVGNumberList_getItem_Callback";
 
-  static initialize_Callback_SVGNumber(mthis, item) native "SVGNumberList_initialize_Callback_SVGNumber";
+  static initialize_Callback_1(mthis, item) native "SVGNumberList_initialize_Callback";
 
-  static insertItemBefore_Callback_SVGNumber_ul(mthis, item, index) native "SVGNumberList_insertItemBefore_Callback_SVGNumber_unsigned long";
+  static insertItemBefore_Callback_2(mthis, item, index) native "SVGNumberList_insertItemBefore_Callback";
 
-  static removeItem_Callback_ul(mthis, index) native "SVGNumberList_removeItem_Callback_unsigned long";
+  static removeItem_Callback_1(mthis, index) native "SVGNumberList_removeItem_Callback";
 
-  static replaceItem_Callback_SVGNumber_ul(mthis, item, index) native "SVGNumberList_replaceItem_Callback_SVGNumber_unsigned long";
+  static replaceItem_Callback_2(mthis, item, index) native "SVGNumberList_replaceItem_Callback";
 }
 
 class BlinkSVGPathElement {
@@ -6523,47 +6625,47 @@
 
   static pathSegList_Getter(mthis) native "SVGPathElement_pathSegList_Getter";
 
-  static createSVGPathSegArcAbs_Callback_float_float_float_float_float_boolean_boolean(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback_float_float_float_float_float_boolean_boolean";
+  static createSVGPathSegArcAbs_Callback_7(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
 
-  static createSVGPathSegArcRel_Callback_float_float_float_float_float_boolean_boolean(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback_float_float_float_float_float_boolean_boolean";
+  static createSVGPathSegArcRel_Callback_7(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback";
 
   static createSVGPathSegClosePath_Callback(mthis) native "SVGPathElement_createSVGPathSegClosePath_Callback";
 
-  static createSVGPathSegCurvetoCubicAbs_Callback_float_float_float_float_float_float(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback_float_float_float_float_float_float";
+  static createSVGPathSegCurvetoCubicAbs_Callback_6(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
 
-  static createSVGPathSegCurvetoCubicRel_Callback_float_float_float_float_float_float(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback_float_float_float_float_float_float";
+  static createSVGPathSegCurvetoCubicRel_Callback_6(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
 
-  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_float_float_float_float(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback_float_float_float_float";
+  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_4(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
 
-  static createSVGPathSegCurvetoCubicSmoothRel_Callback_float_float_float_float(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback_float_float_float_float";
+  static createSVGPathSegCurvetoCubicSmoothRel_Callback_4(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
 
-  static createSVGPathSegCurvetoQuadraticAbs_Callback_float_float_float_float(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback_float_float_float_float";
+  static createSVGPathSegCurvetoQuadraticAbs_Callback_4(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
 
-  static createSVGPathSegCurvetoQuadraticRel_Callback_float_float_float_float(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback_float_float_float_float";
+  static createSVGPathSegCurvetoQuadraticRel_Callback_4(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
 
-  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_float_float";
+  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
 
-  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback_float_float";
+  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
 
-  static createSVGPathSegLinetoAbs_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback_float_float";
+  static createSVGPathSegLinetoAbs_Callback_2(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
 
-  static createSVGPathSegLinetoHorizontalAbs_Callback_float(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback_float";
+  static createSVGPathSegLinetoHorizontalAbs_Callback_1(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
 
-  static createSVGPathSegLinetoHorizontalRel_Callback_float(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback_float";
+  static createSVGPathSegLinetoHorizontalRel_Callback_1(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
 
-  static createSVGPathSegLinetoRel_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback_float_float";
+  static createSVGPathSegLinetoRel_Callback_2(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
 
-  static createSVGPathSegLinetoVerticalAbs_Callback_float(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback_float";
+  static createSVGPathSegLinetoVerticalAbs_Callback_1(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
 
-  static createSVGPathSegLinetoVerticalRel_Callback_float(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback_float";
+  static createSVGPathSegLinetoVerticalRel_Callback_1(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
 
-  static createSVGPathSegMovetoAbs_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback_float_float";
+  static createSVGPathSegMovetoAbs_Callback_2(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
 
-  static createSVGPathSegMovetoRel_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback_float_float";
+  static createSVGPathSegMovetoRel_Callback_2(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
 
-  static getPathSegAtLength_Callback_float(mthis, distance) native "SVGPathElement_getPathSegAtLength_Callback_float";
+  static getPathSegAtLength_Callback_1(mthis, distance) native "SVGPathElement_getPathSegAtLength_Callback";
 
-  static getPointAtLength_Callback_float(mthis, distance) native "SVGPathElement_getPointAtLength_Callback_float";
+  static getPointAtLength_Callback_1(mthis, distance) native "SVGPathElement_getPointAtLength_Callback";
 
   static getTotalLength_Callback(mthis) native "SVGPathElement_getTotalLength_Callback";
 }
@@ -6577,61 +6679,61 @@
 class BlinkSVGPathSegArcAbs {
   static angle_Getter(mthis) native "SVGPathSegArcAbs_angle_Getter";
 
-  static angle_Setter_float(mthis, value) native "SVGPathSegArcAbs_angle_Setter";
+  static angle_Setter(mthis, value) native "SVGPathSegArcAbs_angle_Setter";
 
   static largeArcFlag_Getter(mthis) native "SVGPathSegArcAbs_largeArcFlag_Getter";
 
-  static largeArcFlag_Setter_boolean(mthis, value) native "SVGPathSegArcAbs_largeArcFlag_Setter";
+  static largeArcFlag_Setter(mthis, value) native "SVGPathSegArcAbs_largeArcFlag_Setter";
 
   static r1_Getter(mthis) native "SVGPathSegArcAbs_r1_Getter";
 
-  static r1_Setter_float(mthis, value) native "SVGPathSegArcAbs_r1_Setter";
+  static r1_Setter(mthis, value) native "SVGPathSegArcAbs_r1_Setter";
 
   static r2_Getter(mthis) native "SVGPathSegArcAbs_r2_Getter";
 
-  static r2_Setter_float(mthis, value) native "SVGPathSegArcAbs_r2_Setter";
+  static r2_Setter(mthis, value) native "SVGPathSegArcAbs_r2_Setter";
 
   static sweepFlag_Getter(mthis) native "SVGPathSegArcAbs_sweepFlag_Getter";
 
-  static sweepFlag_Setter_boolean(mthis, value) native "SVGPathSegArcAbs_sweepFlag_Setter";
+  static sweepFlag_Setter(mthis, value) native "SVGPathSegArcAbs_sweepFlag_Setter";
 
   static x_Getter(mthis) native "SVGPathSegArcAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegArcAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegArcAbs_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegArcAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegArcAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegArcAbs_y_Setter";
 }
 
 class BlinkSVGPathSegArcRel {
   static angle_Getter(mthis) native "SVGPathSegArcRel_angle_Getter";
 
-  static angle_Setter_float(mthis, value) native "SVGPathSegArcRel_angle_Setter";
+  static angle_Setter(mthis, value) native "SVGPathSegArcRel_angle_Setter";
 
   static largeArcFlag_Getter(mthis) native "SVGPathSegArcRel_largeArcFlag_Getter";
 
-  static largeArcFlag_Setter_boolean(mthis, value) native "SVGPathSegArcRel_largeArcFlag_Setter";
+  static largeArcFlag_Setter(mthis, value) native "SVGPathSegArcRel_largeArcFlag_Setter";
 
   static r1_Getter(mthis) native "SVGPathSegArcRel_r1_Getter";
 
-  static r1_Setter_float(mthis, value) native "SVGPathSegArcRel_r1_Setter";
+  static r1_Setter(mthis, value) native "SVGPathSegArcRel_r1_Setter";
 
   static r2_Getter(mthis) native "SVGPathSegArcRel_r2_Getter";
 
-  static r2_Setter_float(mthis, value) native "SVGPathSegArcRel_r2_Setter";
+  static r2_Setter(mthis, value) native "SVGPathSegArcRel_r2_Setter";
 
   static sweepFlag_Getter(mthis) native "SVGPathSegArcRel_sweepFlag_Getter";
 
-  static sweepFlag_Setter_boolean(mthis, value) native "SVGPathSegArcRel_sweepFlag_Setter";
+  static sweepFlag_Setter(mthis, value) native "SVGPathSegArcRel_sweepFlag_Setter";
 
   static x_Getter(mthis) native "SVGPathSegArcRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegArcRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegArcRel_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegArcRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegArcRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegArcRel_y_Setter";
 }
 
 class BlinkSVGPathSegClosePath {}
@@ -6639,189 +6741,189 @@
 class BlinkSVGPathSegCurvetoCubicAbs {
   static x_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_x_Setter";
 
   static x1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x1_Getter";
 
-  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_x1_Setter";
+  static x1_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_x1_Setter";
 
   static x2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x2_Getter";
 
-  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_x2_Setter";
+  static x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_x2_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_y_Setter";
 
   static y1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y1_Getter";
 
-  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_y1_Setter";
+  static y1_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_y1_Setter";
 
   static y2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y2_Getter";
 
-  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_y2_Setter";
+  static y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoCubicRel {
   static x_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_x_Setter";
 
   static x1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x1_Getter";
 
-  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_x1_Setter";
+  static x1_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_x1_Setter";
 
   static x2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x2_Getter";
 
-  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_x2_Setter";
+  static x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_x2_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_y_Setter";
 
   static y1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y1_Getter";
 
-  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_y1_Setter";
+  static y1_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_y1_Setter";
 
   static y2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y2_Getter";
 
-  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_y2_Setter";
+  static y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoCubicSmoothAbs {
   static x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x_Setter";
 
   static x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Getter";
 
-  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Setter";
+  static x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y_Setter";
 
   static y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Getter";
 
-  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Setter";
+  static y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoCubicSmoothRel {
   static x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x_Setter";
 
   static x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x2_Getter";
 
-  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x2_Setter";
+  static x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x2_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y_Setter";
 
   static y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y2_Getter";
 
-  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y2_Setter";
+  static y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticAbs {
   static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x_Setter";
 
   static x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x1_Getter";
 
-  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x1_Setter";
+  static x1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x1_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y_Setter";
 
   static y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y1_Getter";
 
-  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y1_Setter";
+  static y1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y1_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticRel {
   static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x_Setter";
 
   static x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x1_Getter";
 
-  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x1_Setter";
+  static x1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x1_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y_Setter";
 
   static y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y1_Getter";
 
-  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y1_Setter";
+  static y1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y1_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticSmoothAbs {
   static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticSmoothRel {
   static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoAbs {
   static x_Getter(mthis) native "SVGPathSegLinetoAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegLinetoAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegLinetoAbs_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegLinetoAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegLinetoAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegLinetoAbs_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoHorizontalAbs {
   static x_Getter(mthis) native "SVGPathSegLinetoHorizontalAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegLinetoHorizontalAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegLinetoHorizontalAbs_x_Setter";
 }
 
 class BlinkSVGPathSegLinetoHorizontalRel {
   static x_Getter(mthis) native "SVGPathSegLinetoHorizontalRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegLinetoHorizontalRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegLinetoHorizontalRel_x_Setter";
 }
 
 class BlinkSVGPathSegLinetoRel {
   static x_Getter(mthis) native "SVGPathSegLinetoRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegLinetoRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegLinetoRel_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegLinetoRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegLinetoRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegLinetoRel_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoVerticalAbs {
   static y_Getter(mthis) native "SVGPathSegLinetoVerticalAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegLinetoVerticalAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegLinetoVerticalAbs_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoVerticalRel {
   static y_Getter(mthis) native "SVGPathSegLinetoVerticalRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegLinetoVerticalRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegLinetoVerticalRel_y_Setter";
 }
 
 class BlinkSVGPathSegList {
@@ -6829,41 +6931,41 @@
 
   static numberOfItems_Getter(mthis) native "SVGPathSegList_numberOfItems_Getter";
 
-  static $__setter___Callback_ul_SVGPathSeg(mthis, index, value) native "SVGPathSegList___setter___Callback_unsigned long_SVGPathSeg";
+  static $__setter___Callback_2(mthis, index, value) native "SVGPathSegList___setter___Callback";
 
-  static appendItem_Callback_SVGPathSeg(mthis, newItem) native "SVGPathSegList_appendItem_Callback_SVGPathSeg";
+  static appendItem_Callback_1(mthis, newItem) native "SVGPathSegList_appendItem_Callback";
 
   static clear_Callback(mthis) native "SVGPathSegList_clear_Callback";
 
-  static getItem_Callback_ul(mthis, index) native "SVGPathSegList_getItem_Callback_unsigned long";
+  static getItem_Callback_1(mthis, index) native "SVGPathSegList_getItem_Callback";
 
-  static initialize_Callback_SVGPathSeg(mthis, newItem) native "SVGPathSegList_initialize_Callback_SVGPathSeg";
+  static initialize_Callback_1(mthis, newItem) native "SVGPathSegList_initialize_Callback";
 
-  static insertItemBefore_Callback_SVGPathSeg_ul(mthis, newItem, index) native "SVGPathSegList_insertItemBefore_Callback_SVGPathSeg_unsigned long";
+  static insertItemBefore_Callback_2(mthis, newItem, index) native "SVGPathSegList_insertItemBefore_Callback";
 
-  static removeItem_Callback_ul(mthis, index) native "SVGPathSegList_removeItem_Callback_unsigned long";
+  static removeItem_Callback_1(mthis, index) native "SVGPathSegList_removeItem_Callback";
 
-  static replaceItem_Callback_SVGPathSeg_ul(mthis, newItem, index) native "SVGPathSegList_replaceItem_Callback_SVGPathSeg_unsigned long";
+  static replaceItem_Callback_2(mthis, newItem, index) native "SVGPathSegList_replaceItem_Callback";
 }
 
 class BlinkSVGPathSegMovetoAbs {
   static x_Getter(mthis) native "SVGPathSegMovetoAbs_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegMovetoAbs_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegMovetoAbs_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegMovetoAbs_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegMovetoAbs_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegMovetoAbs_y_Setter";
 }
 
 class BlinkSVGPathSegMovetoRel {
   static x_Getter(mthis) native "SVGPathSegMovetoRel_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPathSegMovetoRel_x_Setter";
+  static x_Setter(mthis, value) native "SVGPathSegMovetoRel_x_Setter";
 
   static y_Getter(mthis) native "SVGPathSegMovetoRel_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPathSegMovetoRel_y_Setter";
+  static y_Setter(mthis, value) native "SVGPathSegMovetoRel_y_Setter";
 }
 
 class BlinkSVGPatternElement {
@@ -6891,7 +6993,7 @@
 
   static systemLanguage_Getter(mthis) native "SVGPatternElement_systemLanguage_Getter";
 
-  static hasExtension_Callback_DOMString(mthis, extension) native "SVGPatternElement_hasExtension_Callback_DOMString";
+  static hasExtension_Callback_1(mthis, extension) native "SVGPatternElement_hasExtension_Callback";
 
   static href_Getter(mthis) native "SVGPatternElement_href_Getter";
 }
@@ -6899,13 +7001,13 @@
 class BlinkSVGPoint {
   static x_Getter(mthis) native "SVGPoint_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGPoint_x_Setter";
+  static x_Setter(mthis, value) native "SVGPoint_x_Setter";
 
   static y_Getter(mthis) native "SVGPoint_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGPoint_y_Setter";
+  static y_Setter(mthis, value) native "SVGPoint_y_Setter";
 
-  static matrixTransform_Callback_SVGMatrix(mthis, matrix) native "SVGPoint_matrixTransform_Callback_SVGMatrix";
+  static matrixTransform_Callback_1(mthis, matrix) native "SVGPoint_matrixTransform_Callback";
 }
 
 class BlinkSVGPointList {
@@ -6913,21 +7015,21 @@
 
   static numberOfItems_Getter(mthis) native "SVGPointList_numberOfItems_Getter";
 
-  static $__setter___Callback_ul_SVGPoint(mthis, index, value) native "SVGPointList___setter___Callback_unsigned long_SVGPoint";
+  static $__setter___Callback_2(mthis, index, value) native "SVGPointList___setter___Callback";
 
-  static appendItem_Callback_SVGPoint(mthis, item) native "SVGPointList_appendItem_Callback_SVGPoint";
+  static appendItem_Callback_1(mthis, item) native "SVGPointList_appendItem_Callback";
 
   static clear_Callback(mthis) native "SVGPointList_clear_Callback";
 
-  static getItem_Callback_ul(mthis, index) native "SVGPointList_getItem_Callback_unsigned long";
+  static getItem_Callback_1(mthis, index) native "SVGPointList_getItem_Callback";
 
-  static initialize_Callback_SVGPoint(mthis, item) native "SVGPointList_initialize_Callback_SVGPoint";
+  static initialize_Callback_1(mthis, item) native "SVGPointList_initialize_Callback";
 
-  static insertItemBefore_Callback_SVGPoint_ul(mthis, item, index) native "SVGPointList_insertItemBefore_Callback_SVGPoint_unsigned long";
+  static insertItemBefore_Callback_2(mthis, item, index) native "SVGPointList_insertItemBefore_Callback";
 
-  static removeItem_Callback_ul(mthis, index) native "SVGPointList_removeItem_Callback_unsigned long";
+  static removeItem_Callback_1(mthis, index) native "SVGPointList_removeItem_Callback";
 
-  static replaceItem_Callback_SVGPoint_ul(mthis, item, index) native "SVGPointList_replaceItem_Callback_SVGPoint_unsigned long";
+  static replaceItem_Callback_2(mthis, item, index) native "SVGPointList_replaceItem_Callback";
 }
 
 class BlinkSVGPolygonElement {
@@ -6945,11 +7047,11 @@
 class BlinkSVGPreserveAspectRatio {
   static align_Getter(mthis) native "SVGPreserveAspectRatio_align_Getter";
 
-  static align_Setter_us(mthis, value) native "SVGPreserveAspectRatio_align_Setter";
+  static align_Setter(mthis, value) native "SVGPreserveAspectRatio_align_Setter";
 
   static meetOrSlice_Getter(mthis) native "SVGPreserveAspectRatio_meetOrSlice_Getter";
 
-  static meetOrSlice_Setter_us(mthis, value) native "SVGPreserveAspectRatio_meetOrSlice_Setter";
+  static meetOrSlice_Setter(mthis, value) native "SVGPreserveAspectRatio_meetOrSlice_Setter";
 }
 
 class BlinkSVGRadialGradientElement {
@@ -6969,19 +7071,19 @@
 class BlinkSVGRect {
   static height_Getter(mthis) native "SVGRect_height_Getter";
 
-  static height_Setter_float(mthis, value) native "SVGRect_height_Setter";
+  static height_Setter(mthis, value) native "SVGRect_height_Setter";
 
   static width_Getter(mthis) native "SVGRect_width_Getter";
 
-  static width_Setter_float(mthis, value) native "SVGRect_width_Setter";
+  static width_Setter(mthis, value) native "SVGRect_width_Setter";
 
   static x_Getter(mthis) native "SVGRect_x_Getter";
 
-  static x_Setter_float(mthis, value) native "SVGRect_x_Setter";
+  static x_Setter(mthis, value) native "SVGRect_x_Setter";
 
   static y_Getter(mthis) native "SVGRect_y_Getter";
 
-  static y_Setter_float(mthis, value) native "SVGRect_y_Setter";
+  static y_Setter(mthis, value) native "SVGRect_y_Setter";
 }
 
 class BlinkSVGRectElement {
@@ -7003,13 +7105,13 @@
 class BlinkSVGZoomAndPan {
   static zoomAndPan_Getter(mthis) native "SVGZoomAndPan_zoomAndPan_Getter";
 
-  static zoomAndPan_Setter_us(mthis, value) native "SVGZoomAndPan_zoomAndPan_Setter";
+  static zoomAndPan_Setter(mthis, value) native "SVGZoomAndPan_zoomAndPan_Setter";
 }
 
 class BlinkSVGSVGElement {
   static currentScale_Getter(mthis) native "SVGSVGElement_currentScale_Getter";
 
-  static currentScale_Setter_float(mthis, value) native "SVGSVGElement_currentScale_Setter";
+  static currentScale_Setter(mthis, value) native "SVGSVGElement_currentScale_Setter";
 
   static currentTranslate_Getter(mthis) native "SVGSVGElement_currentTranslate_Getter";
 
@@ -7037,9 +7139,9 @@
 
   static animationsPaused_Callback(mthis) native "SVGSVGElement_animationsPaused_Callback";
 
-  static checkEnclosure_Callback_SVGElement_SVGRect(mthis, element, rect) native "SVGSVGElement_checkEnclosure_Callback_SVGElement_SVGRect";
+  static checkEnclosure_Callback_2(mthis, element, rect) native "SVGSVGElement_checkEnclosure_Callback";
 
-  static checkIntersection_Callback_SVGElement_SVGRect(mthis, element, rect) native "SVGSVGElement_checkIntersection_Callback_SVGElement_SVGRect";
+  static checkIntersection_Callback_2(mthis, element, rect) native "SVGSVGElement_checkIntersection_Callback";
 
   static createSVGAngle_Callback(mthis) native "SVGSVGElement_createSVGAngle_Callback";
 
@@ -7055,7 +7157,7 @@
 
   static createSVGTransform_Callback(mthis) native "SVGSVGElement_createSVGTransform_Callback";
 
-  static createSVGTransformFromMatrix_Callback_SVGMatrix(mthis, matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback_SVGMatrix";
+  static createSVGTransformFromMatrix_Callback_1(mthis, matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
 
   static deselectAll_Callback(mthis) native "SVGSVGElement_deselectAll_Callback";
 
@@ -7063,21 +7165,21 @@
 
   static getCurrentTime_Callback(mthis) native "SVGSVGElement_getCurrentTime_Callback";
 
-  static getElementById_Callback_DOMString(mthis, elementId) native "SVGSVGElement_getElementById_Callback_DOMString";
+  static getElementById_Callback_1(mthis, elementId) native "SVGSVGElement_getElementById_Callback";
 
-  static getEnclosureList_Callback_SVGRect_SVGElement(mthis, rect, referenceElement) native "SVGSVGElement_getEnclosureList_Callback_SVGRect_SVGElement";
+  static getEnclosureList_Callback_2(mthis, rect, referenceElement) native "SVGSVGElement_getEnclosureList_Callback";
 
-  static getIntersectionList_Callback_SVGRect_SVGElement(mthis, rect, referenceElement) native "SVGSVGElement_getIntersectionList_Callback_SVGRect_SVGElement";
+  static getIntersectionList_Callback_2(mthis, rect, referenceElement) native "SVGSVGElement_getIntersectionList_Callback";
 
   static pauseAnimations_Callback(mthis) native "SVGSVGElement_pauseAnimations_Callback";
 
-  static setCurrentTime_Callback_float(mthis, seconds) native "SVGSVGElement_setCurrentTime_Callback_float";
+  static setCurrentTime_Callback_1(mthis, seconds) native "SVGSVGElement_setCurrentTime_Callback";
 
-  static suspendRedraw_Callback_ul(mthis, maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback_unsigned long";
+  static suspendRedraw_Callback_1(mthis, maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback";
 
   static unpauseAnimations_Callback(mthis) native "SVGSVGElement_unpauseAnimations_Callback";
 
-  static unsuspendRedraw_Callback_ul(mthis, suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback_unsigned long";
+  static unsuspendRedraw_Callback_1(mthis, suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback";
 
   static unsuspendRedrawAll_Callback(mthis) native "SVGSVGElement_unsuspendRedrawAll_Callback";
 
@@ -7087,13 +7189,13 @@
 
   static zoomAndPan_Getter(mthis) native "SVGSVGElement_zoomAndPan_Getter";
 
-  static zoomAndPan_Setter_us(mthis, value) native "SVGSVGElement_zoomAndPan_Setter";
+  static zoomAndPan_Setter(mthis, value) native "SVGSVGElement_zoomAndPan_Setter";
 }
 
 class BlinkSVGScriptElement {
   static type_Getter(mthis) native "SVGScriptElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "SVGScriptElement_type_Setter";
+  static type_Setter(mthis, value) native "SVGScriptElement_type_Setter";
 
   static href_Getter(mthis) native "SVGScriptElement_href_Getter";
 }
@@ -7109,41 +7211,41 @@
 
   static numberOfItems_Getter(mthis) native "SVGStringList_numberOfItems_Getter";
 
-  static $__setter___Callback_ul_DOMString(mthis, index, value) native "SVGStringList___setter___Callback_unsigned long_DOMString";
+  static $__setter___Callback_2(mthis, index, value) native "SVGStringList___setter___Callback";
 
-  static appendItem_Callback_DOMString(mthis, item) native "SVGStringList_appendItem_Callback_DOMString";
+  static appendItem_Callback_1(mthis, item) native "SVGStringList_appendItem_Callback";
 
   static clear_Callback(mthis) native "SVGStringList_clear_Callback";
 
-  static getItem_Callback_ul(mthis, index) native "SVGStringList_getItem_Callback_unsigned long";
+  static getItem_Callback_1(mthis, index) native "SVGStringList_getItem_Callback";
 
-  static initialize_Callback_DOMString(mthis, item) native "SVGStringList_initialize_Callback_DOMString";
+  static initialize_Callback_1(mthis, item) native "SVGStringList_initialize_Callback";
 
-  static insertItemBefore_Callback_DOMString_ul(mthis, item, index) native "SVGStringList_insertItemBefore_Callback_DOMString_unsigned long";
+  static insertItemBefore_Callback_2(mthis, item, index) native "SVGStringList_insertItemBefore_Callback";
 
-  static removeItem_Callback_ul(mthis, index) native "SVGStringList_removeItem_Callback_unsigned long";
+  static removeItem_Callback_1(mthis, index) native "SVGStringList_removeItem_Callback";
 
-  static replaceItem_Callback_DOMString_ul(mthis, item, index) native "SVGStringList_replaceItem_Callback_DOMString_unsigned long";
+  static replaceItem_Callback_2(mthis, item, index) native "SVGStringList_replaceItem_Callback";
 }
 
 class BlinkSVGStyleElement {
   static disabled_Getter(mthis) native "SVGStyleElement_disabled_Getter";
 
-  static disabled_Setter_boolean(mthis, value) native "SVGStyleElement_disabled_Setter";
+  static disabled_Setter(mthis, value) native "SVGStyleElement_disabled_Setter";
 
   static media_Getter(mthis) native "SVGStyleElement_media_Getter";
 
-  static media_Setter_DOMString(mthis, value) native "SVGStyleElement_media_Setter";
+  static media_Setter(mthis, value) native "SVGStyleElement_media_Setter";
 
   static sheet_Getter(mthis) native "SVGStyleElement_sheet_Getter";
 
   static title_Getter(mthis) native "SVGStyleElement_title_Getter";
 
-  static title_Setter_DOMString(mthis, value) native "SVGStyleElement_title_Setter";
+  static title_Setter(mthis, value) native "SVGStyleElement_title_Setter";
 
   static type_Getter(mthis) native "SVGStyleElement_type_Getter";
 
-  static type_Setter_DOMString(mthis, value) native "SVGStyleElement_type_Setter";
+  static type_Setter(mthis, value) native "SVGStyleElement_type_Setter";
 }
 
 class BlinkSVGSwitchElement {}
@@ -7177,17 +7279,17 @@
 
   static type_Getter(mthis) native "SVGTransform_type_Getter";
 
-  static setMatrix_Callback_SVGMatrix(mthis, matrix) native "SVGTransform_setMatrix_Callback_SVGMatrix";
+  static setMatrix_Callback_1(mthis, matrix) native "SVGTransform_setMatrix_Callback";
 
-  static setRotate_Callback_float_float_float(mthis, angle, cx, cy) native "SVGTransform_setRotate_Callback_float_float_float";
+  static setRotate_Callback_3(mthis, angle, cx, cy) native "SVGTransform_setRotate_Callback";
 
-  static setScale_Callback_float_float(mthis, sx, sy) native "SVGTransform_setScale_Callback_float_float";
+  static setScale_Callback_2(mthis, sx, sy) native "SVGTransform_setScale_Callback";
 
-  static setSkewX_Callback_float(mthis, angle) native "SVGTransform_setSkewX_Callback_float";
+  static setSkewX_Callback_1(mthis, angle) native "SVGTransform_setSkewX_Callback";
 
-  static setSkewY_Callback_float(mthis, angle) native "SVGTransform_setSkewY_Callback_float";
+  static setSkewY_Callback_1(mthis, angle) native "SVGTransform_setSkewY_Callback";
 
-  static setTranslate_Callback_float_float(mthis, tx, ty) native "SVGTransform_setTranslate_Callback_float_float";
+  static setTranslate_Callback_2(mthis, tx, ty) native "SVGTransform_setTranslate_Callback";
 }
 
 class BlinkSVGTransformList {
@@ -7195,25 +7297,25 @@
 
   static numberOfItems_Getter(mthis) native "SVGTransformList_numberOfItems_Getter";
 
-  static $__setter___Callback_ul_SVGTransform(mthis, index, value) native "SVGTransformList___setter___Callback_unsigned long_SVGTransform";
+  static $__setter___Callback_2(mthis, index, value) native "SVGTransformList___setter___Callback";
 
-  static appendItem_Callback_SVGTransform(mthis, item) native "SVGTransformList_appendItem_Callback_SVGTransform";
+  static appendItem_Callback_1(mthis, item) native "SVGTransformList_appendItem_Callback";
 
   static clear_Callback(mthis) native "SVGTransformList_clear_Callback";
 
   static consolidate_Callback(mthis) native "SVGTransformList_consolidate_Callback";
 
-  static createSVGTransformFromMatrix_Callback_SVGMatrix(mthis, matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback_SVGMatrix";
+  static createSVGTransformFromMatrix_Callback_1(mthis, matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
 
-  static getItem_Callback_ul(mthis, index) native "SVGTransformList_getItem_Callback_unsigned long";
+  static getItem_Callback_1(mthis, index) native "SVGTransformList_getItem_Callback";
 
-  static initialize_Callback_SVGTransform(mthis, item) native "SVGTransformList_initialize_Callback_SVGTransform";
+  static initialize_Callback_1(mthis, item) native "SVGTransformList_initialize_Callback";
 
-  static insertItemBefore_Callback_SVGTransform_ul(mthis, item, index) native "SVGTransformList_insertItemBefore_Callback_SVGTransform_unsigned long";
+  static insertItemBefore_Callback_2(mthis, item, index) native "SVGTransformList_insertItemBefore_Callback";
 
-  static removeItem_Callback_ul(mthis, index) native "SVGTransformList_removeItem_Callback_unsigned long";
+  static removeItem_Callback_1(mthis, index) native "SVGTransformList_removeItem_Callback";
 
-  static replaceItem_Callback_SVGTransform_ul(mthis, item, index) native "SVGTransformList_replaceItem_Callback_SVGTransform_unsigned long";
+  static replaceItem_Callback_2(mthis, item, index) native "SVGTransformList_replaceItem_Callback";
 }
 
 class BlinkSVGUnitTypes {}
@@ -7241,7 +7343,7 @@
 
   static zoomAndPan_Getter(mthis) native "SVGViewElement_zoomAndPan_Getter";
 
-  static zoomAndPan_Setter_us(mthis, value) native "SVGViewElement_zoomAndPan_Setter";
+  static zoomAndPan_Setter(mthis, value) native "SVGViewElement_zoomAndPan_Setter";
 }
 
 class BlinkSVGViewSpec {
@@ -7263,7 +7365,7 @@
 
   static zoomAndPan_Getter(mthis) native "SVGViewSpec_zoomAndPan_Getter";
 
-  static zoomAndPan_Setter_us(mthis, value) native "SVGViewSpec_zoomAndPan_Setter";
+  static zoomAndPan_Setter(mthis, value) native "SVGViewSpec_zoomAndPan_Setter";
 }
 
 class BlinkSVGZoomEvent {
@@ -7303,13 +7405,15 @@
 
   static type_Getter(mthis) native "ScreenOrientation_type_Getter";
 
+  static lock_Callback_1(mthis, orientation) native "ScreenOrientation_lock_Callback";
+
   static unlock_Callback(mthis) native "ScreenOrientation_unlock_Callback";
 }
 
 class BlinkScriptProcessorNode {
   static bufferSize_Getter(mthis) native "ScriptProcessorNode_bufferSize_Getter";
 
-  static setEventListener_Callback_EventListener(mthis, eventListener) native "ScriptProcessorNode_setEventListener_Callback";
+  static setEventListener_Callback_1(mthis, eventListener) native "ScriptProcessorNode_setEventListener_Callback";
 }
 
 class BlinkSecurityPolicyViolationEvent {
@@ -7359,39 +7463,39 @@
 
   static type_Getter(mthis) native "Selection_type_Getter";
 
-  static addRange_Callback_Range(mthis, range) native "Selection_addRange_Callback_Range";
+  static addRange_Callback_1(mthis, range) native "Selection_addRange_Callback";
 
-  static collapse_Callback_Node_long(mthis, node, offset) native "Selection_collapse_Callback_Node_long";
+  static collapse_Callback_2(mthis, node, offset) native "Selection_collapse_Callback";
 
-  static collapse_Callback_Node(mthis, node) native "Selection_collapse_Callback_Node";
+  static collapse_Callback_1(mthis, node) native "Selection_collapse_Callback";
 
   static collapseToEnd_Callback(mthis) native "Selection_collapseToEnd_Callback";
 
   static collapseToStart_Callback(mthis) native "Selection_collapseToStart_Callback";
 
-  static containsNode_Callback_Node_boolean(mthis, node, allowPartial) native "Selection_containsNode_Callback_Node_boolean";
+  static containsNode_Callback_2(mthis, node, allowPartial) native "Selection_containsNode_Callback";
 
   static deleteFromDocument_Callback(mthis) native "Selection_deleteFromDocument_Callback";
 
   static empty_Callback(mthis) native "Selection_empty_Callback";
 
-  static extend_Callback_Node_long(mthis, node, offset) native "Selection_extend_Callback_Node_long";
+  static extend_Callback_2(mthis, node, offset) native "Selection_extend_Callback";
 
-  static extend_Callback_Node(mthis, node) native "Selection_extend_Callback_Node";
+  static extend_Callback_1(mthis, node) native "Selection_extend_Callback";
 
-  static getRangeAt_Callback_long(mthis, index) native "Selection_getRangeAt_Callback_long";
+  static getRangeAt_Callback_1(mthis, index) native "Selection_getRangeAt_Callback";
 
-  static modify_Callback_DOMString_DOMString_DOMString(mthis, alter, direction, granularity) native "Selection_modify_Callback_DOMString_DOMString_DOMString";
+  static modify_Callback_3(mthis, alter, direction, granularity) native "Selection_modify_Callback";
 
   static removeAllRanges_Callback(mthis) native "Selection_removeAllRanges_Callback";
 
-  static selectAllChildren_Callback_Node(mthis, node) native "Selection_selectAllChildren_Callback_Node";
+  static selectAllChildren_Callback_1(mthis, node) native "Selection_selectAllChildren_Callback";
 
-  static setBaseAndExtent_Callback_Node_long_Node_long(mthis, baseNode, baseOffset, extentNode, extentOffset) native "Selection_setBaseAndExtent_Callback_Node_long_Node_long";
+  static setBaseAndExtent_Callback_4(mthis, baseNode, baseOffset, extentNode, extentOffset) native "Selection_setBaseAndExtent_Callback";
 
-  static setPosition_Callback_Node_long(mthis, node, offset) native "Selection_setPosition_Callback_Node_long";
+  static setPosition_Callback_2(mthis, node, offset) native "Selection_setPosition_Callback";
 
-  static setPosition_Callback_Node(mthis, node) native "Selection_setPosition_Callback_Node";
+  static setPosition_Callback_1(mthis, node) native "Selection_setPosition_Callback";
 }
 
 class BlinkServiceWorker {}
@@ -7399,10 +7503,12 @@
 class BlinkServiceWorkerClient {
   static id_Getter(mthis) native "ServiceWorkerClient_id_Getter";
 
-  static postMessage_Callback_SerializedScriptValue_SEQ_MessagePort_SEQ(mthis, message, transfer) native "ServiceWorkerClient_postMessage_Callback";
+  static postMessage_Callback_2(mthis, message, transfer) native "ServiceWorkerClient_postMessage_Callback";
 }
 
-class BlinkServiceWorkerClients {}
+class BlinkServiceWorkerClients {
+  static getServiced_Callback(mthis) native "ServiceWorkerClients_getServiced_Callback";
+}
 
 class BlinkServiceWorkerContainer {
   static active_Getter(mthis) native "ServiceWorkerContainer_active_Getter";
@@ -7411,7 +7517,17 @@
 
   static installing_Getter(mthis) native "ServiceWorkerContainer_installing_Getter";
 
+  static ready_Getter(mthis) native "ServiceWorkerContainer_ready_Getter";
+
   static waiting_Getter(mthis) native "ServiceWorkerContainer_waiting_Getter";
+
+  static register_Callback_2(mthis, url, options) native "ServiceWorkerContainer_register_Callback";
+
+  static register_Callback_1(mthis, url) native "ServiceWorkerContainer_register_Callback";
+
+  static unregister_Callback_1(mthis, scope) native "ServiceWorkerContainer_unregister_Callback";
+
+  static unregister_Callback(mthis) native "ServiceWorkerContainer_unregister_Callback";
 }
 
 class BlinkServiceWorkerGlobalScope {
@@ -7420,6 +7536,10 @@
   static nativeCaches_Getter(mthis) native "ServiceWorkerGlobalScope_nativeCaches_Getter";
 
   static scope_Getter(mthis) native "ServiceWorkerGlobalScope_scope_Getter";
+
+  static fetch_Callback_1(mthis, request) native "ServiceWorkerGlobalScope_fetch_Callback";
+
+  static fetch_Callback_2(mthis, request, requestInitDict) native "ServiceWorkerGlobalScope_fetch_Callback";
 }
 
 class BlinkServiceWorkerRegistration {
@@ -7430,6 +7550,8 @@
   static scope_Getter(mthis) native "ServiceWorkerRegistration_scope_Getter";
 
   static waiting_Getter(mthis) native "ServiceWorkerRegistration_waiting_Getter";
+
+  static unregister_Callback(mthis) native "ServiceWorkerRegistration_unregister_Callback";
 }
 
 class BlinkShadowRoot {
@@ -7439,27 +7561,27 @@
 
   static innerHTML_Getter(mthis) native "ShadowRoot_innerHTML_Getter";
 
-  static innerHTML_Setter_DOMString(mthis, value) native "ShadowRoot_innerHTML_Setter";
+  static innerHTML_Setter(mthis, value) native "ShadowRoot_innerHTML_Setter";
 
   static olderShadowRoot_Getter(mthis) native "ShadowRoot_olderShadowRoot_Getter";
 
   static styleSheets_Getter(mthis) native "ShadowRoot_styleSheets_Getter";
 
-  static cloneNode_Callback_boolean(mthis, deep) native "ShadowRoot_cloneNode_Callback_boolean";
+  static cloneNode_Callback_1(mthis, deep) native "ShadowRoot_cloneNode_Callback";
 
-  static elementFromPoint_Callback_long_long(mthis, x, y) native "ShadowRoot_elementFromPoint_Callback_long_long";
+  static elementFromPoint_Callback_2(mthis, x, y) native "ShadowRoot_elementFromPoint_Callback";
 
-  static getElementById_Callback_DOMString(mthis, elementId) native "ShadowRoot_getElementById_Callback_DOMString";
+  static getElementById_Callback_1(mthis, elementId) native "ShadowRoot_getElementById_Callback";
 
-  static getElementsByClassName_Callback_DOMString(mthis, className) native "ShadowRoot_getElementsByClassName_Callback_DOMString";
+  static getElementsByClassName_Callback_1(mthis, className) native "ShadowRoot_getElementsByClassName_Callback";
 
-  static getElementsByTagName_Callback_DOMString(mthis, tagName) native "ShadowRoot_getElementsByTagName_Callback_DOMString";
+  static getElementsByTagName_Callback_1(mthis, tagName) native "ShadowRoot_getElementsByTagName_Callback";
 
   static getSelection_Callback(mthis) native "ShadowRoot_getSelection_Callback";
 }
 
 class BlinkSharedWorker {
-  static constructorCallback_DOMString_DOMString(scriptURL, name) native "SharedWorker_constructorCallback_DOMString_DOMString";
+  static constructorCallback_2(scriptURL, name) native "SharedWorker_constructorCallback";
 
   static port_Getter(mthis) native "SharedWorker_port_Getter";
 
@@ -7473,41 +7595,39 @@
 class BlinkSourceBuffer {
   static appendWindowEnd_Getter(mthis) native "SourceBuffer_appendWindowEnd_Getter";
 
-  static appendWindowEnd_Setter_double(mthis, value) native "SourceBuffer_appendWindowEnd_Setter";
+  static appendWindowEnd_Setter(mthis, value) native "SourceBuffer_appendWindowEnd_Setter";
 
   static appendWindowStart_Getter(mthis) native "SourceBuffer_appendWindowStart_Getter";
 
-  static appendWindowStart_Setter_double(mthis, value) native "SourceBuffer_appendWindowStart_Setter";
+  static appendWindowStart_Setter(mthis, value) native "SourceBuffer_appendWindowStart_Setter";
 
   static buffered_Getter(mthis) native "SourceBuffer_buffered_Getter";
 
   static mode_Getter(mthis) native "SourceBuffer_mode_Getter";
 
-  static mode_Setter_DOMString(mthis, value) native "SourceBuffer_mode_Setter";
+  static mode_Setter(mthis, value) native "SourceBuffer_mode_Setter";
 
   static timestampOffset_Getter(mthis) native "SourceBuffer_timestampOffset_Getter";
 
-  static timestampOffset_Setter_double(mthis, value) native "SourceBuffer_timestampOffset_Setter";
+  static timestampOffset_Setter(mthis, value) native "SourceBuffer_timestampOffset_Setter";
 
   static updating_Getter(mthis) native "SourceBuffer_updating_Getter";
 
   static abort_Callback(mthis) native "SourceBuffer_abort_Callback";
 
-  static appendBuffer_Callback_ArrayBuffer(mthis, data) native "SourceBuffer_appendBuffer_Callback_ArrayBuffer";
+  static appendBuffer_Callback_1(mthis, data) native "SourceBuffer_appendBuffer_Callback";
 
-  static appendStream_Callback_Stream_ull(mthis, stream, maxSize) native "SourceBuffer_appendStream_Callback_Stream_unsigned long long";
+  static appendStream_Callback_2(mthis, stream, maxSize) native "SourceBuffer_appendStream_Callback";
 
-  static appendStream_Callback_Stream(mthis, stream) native "SourceBuffer_appendStream_Callback_Stream";
+  static appendStream_Callback_1(mthis, stream) native "SourceBuffer_appendStream_Callback";
 
-  static appendBuffer_Callback_ArrayBufferView(mthis, data) native "SourceBuffer_appendBuffer_Callback_ArrayBufferView";
-
-  static remove_Callback_double_double(mthis, start, end) native "SourceBuffer_remove_Callback_double_double";
+  static remove_Callback_2(mthis, start, end) native "SourceBuffer_remove_Callback";
 }
 
 class BlinkSourceBufferList {
   static length_Getter(mthis) native "SourceBufferList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "SourceBufferList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "SourceBufferList_item_Callback";
 }
 
 class BlinkSourceInfo {
@@ -7525,11 +7645,11 @@
 
   static src_Getter(mthis) native "SpeechGrammar_src_Getter";
 
-  static src_Setter_DOMString(mthis, value) native "SpeechGrammar_src_Setter";
+  static src_Setter(mthis, value) native "SpeechGrammar_src_Setter";
 
   static weight_Getter(mthis) native "SpeechGrammar_weight_Getter";
 
-  static weight_Setter_float(mthis, value) native "SpeechGrammar_weight_Setter";
+  static weight_Setter(mthis, value) native "SpeechGrammar_weight_Setter";
 }
 
 class BlinkSpeechGrammarList {
@@ -7537,15 +7657,15 @@
 
   static length_Getter(mthis) native "SpeechGrammarList_length_Getter";
 
-  static addFromString_Callback_DOMString_float(mthis, string, weight) native "SpeechGrammarList_addFromString_Callback_DOMString_float";
+  static addFromString_Callback_2(mthis, string, weight) native "SpeechGrammarList_addFromString_Callback";
 
-  static addFromString_Callback_DOMString(mthis, string) native "SpeechGrammarList_addFromString_Callback_DOMString";
+  static addFromString_Callback_1(mthis, string) native "SpeechGrammarList_addFromString_Callback";
 
-  static addFromUri_Callback_DOMString_float(mthis, src, weight) native "SpeechGrammarList_addFromUri_Callback_DOMString_float";
+  static addFromUri_Callback_2(mthis, src, weight) native "SpeechGrammarList_addFromUri_Callback";
 
-  static addFromUri_Callback_DOMString(mthis, src) native "SpeechGrammarList_addFromUri_Callback_DOMString";
+  static addFromUri_Callback_1(mthis, src) native "SpeechGrammarList_addFromUri_Callback";
 
-  static item_Callback_ul(mthis, index) native "SpeechGrammarList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "SpeechGrammarList_item_Callback";
 }
 
 class BlinkSpeechRecognition {
@@ -7553,23 +7673,23 @@
 
   static continuous_Getter(mthis) native "SpeechRecognition_continuous_Getter";
 
-  static continuous_Setter_boolean(mthis, value) native "SpeechRecognition_continuous_Setter";
+  static continuous_Setter(mthis, value) native "SpeechRecognition_continuous_Setter";
 
   static grammars_Getter(mthis) native "SpeechRecognition_grammars_Getter";
 
-  static grammars_Setter_SpeechGrammarList(mthis, value) native "SpeechRecognition_grammars_Setter";
+  static grammars_Setter(mthis, value) native "SpeechRecognition_grammars_Setter";
 
   static interimResults_Getter(mthis) native "SpeechRecognition_interimResults_Getter";
 
-  static interimResults_Setter_boolean(mthis, value) native "SpeechRecognition_interimResults_Setter";
+  static interimResults_Setter(mthis, value) native "SpeechRecognition_interimResults_Setter";
 
   static lang_Getter(mthis) native "SpeechRecognition_lang_Getter";
 
-  static lang_Setter_DOMString(mthis, value) native "SpeechRecognition_lang_Setter";
+  static lang_Setter(mthis, value) native "SpeechRecognition_lang_Setter";
 
   static maxAlternatives_Getter(mthis) native "SpeechRecognition_maxAlternatives_Getter";
 
-  static maxAlternatives_Setter_ul(mthis, value) native "SpeechRecognition_maxAlternatives_Setter";
+  static maxAlternatives_Setter(mthis, value) native "SpeechRecognition_maxAlternatives_Setter";
 
   static abort_Callback(mthis) native "SpeechRecognition_abort_Callback";
 
@@ -7609,13 +7729,13 @@
 
   static length_Getter(mthis) native "SpeechRecognitionResult_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "SpeechRecognitionResult_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "SpeechRecognitionResult_item_Callback";
 }
 
 class BlinkSpeechRecognitionResultList {
   static length_Getter(mthis) native "SpeechRecognitionResultList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "SpeechRecognitionResultList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "SpeechRecognitionResultList_item_Callback";
 }
 
 class BlinkSpeechSynthesis {
@@ -7633,7 +7753,7 @@
 
   static resume_Callback(mthis) native "SpeechSynthesis_resume_Callback";
 
-  static speak_Callback_SpeechSynthesisUtterance(mthis, utterance) native "SpeechSynthesis_speak_Callback_SpeechSynthesisUtterance";
+  static speak_Callback_1(mthis, utterance) native "SpeechSynthesis_speak_Callback";
 }
 
 class BlinkSpeechSynthesisEvent {
@@ -7645,31 +7765,31 @@
 }
 
 class BlinkSpeechSynthesisUtterance {
-  static constructorCallback_DOMString(text) native "SpeechSynthesisUtterance_constructorCallback_DOMString";
+  static constructorCallback_1(text) native "SpeechSynthesisUtterance_constructorCallback";
 
   static lang_Getter(mthis) native "SpeechSynthesisUtterance_lang_Getter";
 
-  static lang_Setter_DOMString(mthis, value) native "SpeechSynthesisUtterance_lang_Setter";
+  static lang_Setter(mthis, value) native "SpeechSynthesisUtterance_lang_Setter";
 
   static pitch_Getter(mthis) native "SpeechSynthesisUtterance_pitch_Getter";
 
-  static pitch_Setter_float(mthis, value) native "SpeechSynthesisUtterance_pitch_Setter";
+  static pitch_Setter(mthis, value) native "SpeechSynthesisUtterance_pitch_Setter";
 
   static rate_Getter(mthis) native "SpeechSynthesisUtterance_rate_Getter";
 
-  static rate_Setter_float(mthis, value) native "SpeechSynthesisUtterance_rate_Setter";
+  static rate_Setter(mthis, value) native "SpeechSynthesisUtterance_rate_Setter";
 
   static text_Getter(mthis) native "SpeechSynthesisUtterance_text_Getter";
 
-  static text_Setter_DOMString(mthis, value) native "SpeechSynthesisUtterance_text_Setter";
+  static text_Setter(mthis, value) native "SpeechSynthesisUtterance_text_Setter";
 
   static voice_Getter(mthis) native "SpeechSynthesisUtterance_voice_Getter";
 
-  static voice_Setter_SpeechSynthesisVoice(mthis, value) native "SpeechSynthesisUtterance_voice_Setter";
+  static voice_Setter(mthis, value) native "SpeechSynthesisUtterance_voice_Setter";
 
   static volume_Getter(mthis) native "SpeechSynthesisUtterance_volume_Getter";
 
-  static volume_Setter_float(mthis, value) native "SpeechSynthesisUtterance_volume_Setter";
+  static volume_Setter(mthis, value) native "SpeechSynthesisUtterance_volume_Setter";
 }
 
 class BlinkSpeechSynthesisVoice {
@@ -7687,27 +7807,21 @@
 class BlinkStorage {
   static length_Getter(mthis) native "Storage_length_Getter";
 
-  static $__delete___Callback_ul(mthis, index_OR_name) native "Storage___delete___Callback_unsigned long";
+  static $__delete___Callback_1(mthis, index_OR_name) native "Storage___delete___Callback";
 
-  static $__delete___Callback_DOMString(mthis, index_OR_name) native "Storage___delete___Callback_DOMString";
+  static $__getter___Callback_1(mthis, index_OR_name) native "Storage___getter___Callback";
 
-  static $__getter___Callback_ul(mthis, index_OR_name) native "Storage___getter___Callback_unsigned long";
-
-  static $__getter___Callback_DOMString(mthis, index_OR_name) native "Storage___getter___Callback_DOMString";
-
-  static $__setter___Callback_ul_DOMString(mthis, index_OR_name, value) native "Storage___setter___Callback_unsigned long_DOMString";
-
-  static $__setter___Callback_DOMString_DOMString(mthis, index_OR_name, value) native "Storage___setter___Callback_DOMString_DOMString";
+  static $__setter___Callback_2(mthis, index_OR_name, value) native "Storage___setter___Callback";
 
   static clear_Callback(mthis) native "Storage_clear_Callback";
 
-  static getItem_Callback_DOMString(mthis, key) native "Storage_getItem_Callback_DOMString";
+  static getItem_Callback_1(mthis, key) native "Storage_getItem_Callback";
 
-  static key_Callback_ul(mthis, index) native "Storage_key_Callback_unsigned long";
+  static key_Callback_1(mthis, index) native "Storage_key_Callback";
 
-  static removeItem_Callback_DOMString(mthis, key) native "Storage_removeItem_Callback_DOMString";
+  static removeItem_Callback_1(mthis, key) native "Storage_removeItem_Callback";
 
-  static setItem_Callback_DOMString_DOMString(mthis, key, data) native "Storage_setItem_Callback_DOMString_DOMString";
+  static setItem_Callback_2(mthis, key, data) native "Storage_setItem_Callback";
 }
 
 class BlinkStorageEvent {
@@ -7723,7 +7837,7 @@
 
   static url_Getter(mthis) native "StorageEvent_url_Getter";
 
-  static initStorageEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString_DOMString_DOMString_Storage(mthis, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) native "StorageEvent_initStorageEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString_DOMString_DOMString_Storage";
+  static initStorageEvent_Callback_8(mthis, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) native "StorageEvent_initStorageEvent_Callback";
 }
 
 class BlinkStorageInfo {
@@ -7734,6 +7848,10 @@
 
 class BlinkStorageQuota {
   static supportedTypes_Getter(mthis) native "StorageQuota_supportedTypes_Getter";
+
+  static queryInfo_Callback_1(mthis, type) native "StorageQuota_queryInfo_Callback";
+
+  static requestPersistentQuota_Callback_1(mthis, newQuota) native "StorageQuota_requestPersistentQuota_Callback";
 }
 
 class BlinkStream {
@@ -7743,15 +7861,15 @@
 class BlinkStyleMedia {
   static type_Getter(mthis) native "StyleMedia_type_Getter";
 
-  static matchMedium_Callback_DOMString(mthis, mediaquery) native "StyleMedia_matchMedium_Callback_DOMString";
+  static matchMedium_Callback_1(mthis, mediaquery) native "StyleMedia_matchMedium_Callback";
 }
 
 class BlinkStyleSheetList {
   static length_Getter(mthis) native "StyleSheetList_length_Getter";
 
-  static $__getter___Callback_DOMString(mthis, name) native "StyleSheetList___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, name) native "StyleSheetList___getter___Callback";
 
-  static item_Callback_ul(mthis, index) native "StyleSheetList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "StyleSheetList_item_Callback";
 }
 
 class BlinkSubtleCrypto {}
@@ -7759,7 +7877,7 @@
 class BlinkTextEvent {
   static data_Getter(mthis) native "TextEvent_data_Getter";
 
-  static initTextEvent_Callback_DOMString_boolean_boolean_Window_DOMString(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "TextEvent_initTextEvent_Callback_DOMString_boolean_boolean_Window_DOMString";
+  static initTextEvent_Callback_5(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "TextEvent_initTextEvent_Callback";
 }
 
 class BlinkTextMetrics {
@@ -7803,35 +7921,35 @@
 
   static mode_Getter(mthis) native "TextTrack_mode_Getter";
 
-  static mode_Setter_DOMString(mthis, value) native "TextTrack_mode_Setter";
+  static mode_Setter(mthis, value) native "TextTrack_mode_Setter";
 
   static regions_Getter(mthis) native "TextTrack_regions_Getter";
 
-  static addCue_Callback_TextTrackCue(mthis, cue) native "TextTrack_addCue_Callback_TextTrackCue";
+  static addCue_Callback_1(mthis, cue) native "TextTrack_addCue_Callback";
 
-  static addRegion_Callback_VTTRegion(mthis, region) native "TextTrack_addRegion_Callback_VTTRegion";
+  static addRegion_Callback_1(mthis, region) native "TextTrack_addRegion_Callback";
 
-  static removeCue_Callback_TextTrackCue(mthis, cue) native "TextTrack_removeCue_Callback_TextTrackCue";
+  static removeCue_Callback_1(mthis, cue) native "TextTrack_removeCue_Callback";
 
-  static removeRegion_Callback_VTTRegion(mthis, region) native "TextTrack_removeRegion_Callback_VTTRegion";
+  static removeRegion_Callback_1(mthis, region) native "TextTrack_removeRegion_Callback";
 }
 
 class BlinkTextTrackCue {
   static endTime_Getter(mthis) native "TextTrackCue_endTime_Getter";
 
-  static endTime_Setter_double(mthis, value) native "TextTrackCue_endTime_Setter";
+  static endTime_Setter(mthis, value) native "TextTrackCue_endTime_Setter";
 
   static id_Getter(mthis) native "TextTrackCue_id_Getter";
 
-  static id_Setter_DOMString(mthis, value) native "TextTrackCue_id_Setter";
+  static id_Setter(mthis, value) native "TextTrackCue_id_Setter";
 
   static pauseOnExit_Getter(mthis) native "TextTrackCue_pauseOnExit_Getter";
 
-  static pauseOnExit_Setter_boolean(mthis, value) native "TextTrackCue_pauseOnExit_Setter";
+  static pauseOnExit_Setter(mthis, value) native "TextTrackCue_pauseOnExit_Setter";
 
   static startTime_Getter(mthis) native "TextTrackCue_startTime_Getter";
 
-  static startTime_Setter_double(mthis, value) native "TextTrackCue_startTime_Setter";
+  static startTime_Setter(mthis, value) native "TextTrackCue_startTime_Setter";
 
   static track_Getter(mthis) native "TextTrackCue_track_Getter";
 }
@@ -7839,63 +7957,63 @@
 class BlinkTextTrackCueList {
   static length_Getter(mthis) native "TextTrackCueList_length_Getter";
 
-  static getCueById_Callback_DOMString(mthis, id) native "TextTrackCueList_getCueById_Callback_DOMString";
+  static getCueById_Callback_1(mthis, id) native "TextTrackCueList_getCueById_Callback";
 
-  static item_Callback_ul(mthis, index) native "TextTrackCueList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "TextTrackCueList_item_Callback";
 }
 
 class BlinkTextTrackList {
   static length_Getter(mthis) native "TextTrackList_length_Getter";
 
-  static getTrackById_Callback_DOMString(mthis, id) native "TextTrackList_getTrackById_Callback_DOMString";
+  static getTrackById_Callback_1(mthis, id) native "TextTrackList_getTrackById_Callback";
 
-  static item_Callback_ul(mthis, index) native "TextTrackList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "TextTrackList_item_Callback";
 }
 
 class BlinkTimeRanges {
   static length_Getter(mthis) native "TimeRanges_length_Getter";
 
-  static end_Callback_ul(mthis, index) native "TimeRanges_end_Callback_unsigned long";
+  static end_Callback_1(mthis, index) native "TimeRanges_end_Callback";
 
-  static start_Callback_ul(mthis, index) native "TimeRanges_start_Callback_unsigned long";
+  static start_Callback_1(mthis, index) native "TimeRanges_start_Callback";
 }
 
 class BlinkTiming {
   static delay_Getter(mthis) native "Timing_delay_Getter";
 
-  static delay_Setter_double(mthis, value) native "Timing_delay_Setter";
+  static delay_Setter(mthis, value) native "Timing_delay_Setter";
 
   static direction_Getter(mthis) native "Timing_direction_Getter";
 
-  static direction_Setter_DOMString(mthis, value) native "Timing_direction_Setter";
+  static direction_Setter(mthis, value) native "Timing_direction_Setter";
 
   static easing_Getter(mthis) native "Timing_easing_Getter";
 
-  static easing_Setter_DOMString(mthis, value) native "Timing_easing_Setter";
+  static easing_Setter(mthis, value) native "Timing_easing_Setter";
 
   static endDelay_Getter(mthis) native "Timing_endDelay_Getter";
 
-  static endDelay_Setter_double(mthis, value) native "Timing_endDelay_Setter";
+  static endDelay_Setter(mthis, value) native "Timing_endDelay_Setter";
 
   static fill_Getter(mthis) native "Timing_fill_Getter";
 
-  static fill_Setter_DOMString(mthis, value) native "Timing_fill_Setter";
+  static fill_Setter(mthis, value) native "Timing_fill_Setter";
 
   static iterationStart_Getter(mthis) native "Timing_iterationStart_Getter";
 
-  static iterationStart_Setter_double(mthis, value) native "Timing_iterationStart_Setter";
+  static iterationStart_Setter(mthis, value) native "Timing_iterationStart_Setter";
 
   static iterations_Getter(mthis) native "Timing_iterations_Getter";
 
-  static iterations_Setter_double(mthis, value) native "Timing_iterations_Setter";
+  static iterations_Setter(mthis, value) native "Timing_iterations_Setter";
 
   static playbackRate_Getter(mthis) native "Timing_playbackRate_Getter";
 
-  static playbackRate_Setter_double(mthis, value) native "Timing_playbackRate_Setter";
+  static playbackRate_Setter(mthis, value) native "Timing_playbackRate_Setter";
 
-  static $__getter___Callback_DOMString(mthis, name) native "Timing___getter___Callback_DOMString";
+  static $__getter___Callback_1(mthis, name) native "Timing___getter___Callback";
 
-  static $__setter___Callback_DOMString_double(mthis, name, duration) native "Timing___setter___Callback_DOMString_double";
+  static $__setter___Callback_2(mthis, name, duration) native "Timing___setter___Callback";
 }
 
 class BlinkTouch {
@@ -7939,13 +8057,13 @@
 
   static touches_Getter(mthis) native "TouchEvent_touches_Getter";
 
-  static initTouchEvent_Callback_TouchList_TouchList_TouchList_DOMString_Window_long_long_long_long_boolean_boolean_boolean_boolean(mthis, touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey) native "TouchEvent_initTouchEvent_Callback_TouchList_TouchList_TouchList_DOMString_Window_long_long_long_long_boolean_boolean_boolean_boolean";
+  static initTouchEvent_Callback_13(mthis, touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey) native "TouchEvent_initTouchEvent_Callback";
 }
 
 class BlinkTouchList {
   static length_Getter(mthis) native "TouchList_length_Getter";
 
-  static item_Callback_ul(mthis, index) native "TouchList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "TouchList_item_Callback";
 }
 
 class BlinkTrackEvent {
@@ -7967,7 +8085,7 @@
 class BlinkTreeWalker {
   static currentNode_Getter(mthis) native "TreeWalker_currentNode_Getter";
 
-  static currentNode_Setter_Node(mthis, value) native "TreeWalker_currentNode_Setter";
+  static currentNode_Setter(mthis, value) native "TreeWalker_currentNode_Setter";
 
   static filter_Getter(mthis) native "TreeWalker_filter_Getter";
 
@@ -7991,55 +8109,51 @@
 }
 
 class BlinkURL {
-  static createObjectURL_Callback_Blob(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_Blob";
+  static createObjectURL_Callback_1(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback";
 
-  static createObjectURL_Callback_MediaSource(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_MediaSource";
-
-  static createObjectURL_Callback_MediaStream(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_MediaStream";
-
-  static revokeObjectURL_Callback_DOMString(url) native "URL_revokeObjectURL_Callback_DOMString";
+  static revokeObjectURL_Callback_1(url) native "URL_revokeObjectURL_Callback";
 
   static hash_Getter(mthis) native "URL_hash_Getter";
 
-  static hash_Setter_DOMString(mthis, value) native "URL_hash_Setter";
+  static hash_Setter(mthis, value) native "URL_hash_Setter";
 
   static host_Getter(mthis) native "URL_host_Getter";
 
-  static host_Setter_DOMString(mthis, value) native "URL_host_Setter";
+  static host_Setter(mthis, value) native "URL_host_Setter";
 
   static hostname_Getter(mthis) native "URL_hostname_Getter";
 
-  static hostname_Setter_DOMString(mthis, value) native "URL_hostname_Setter";
+  static hostname_Setter(mthis, value) native "URL_hostname_Setter";
 
   static href_Getter(mthis) native "URL_href_Getter";
 
-  static href_Setter_DOMString(mthis, value) native "URL_href_Setter";
+  static href_Setter(mthis, value) native "URL_href_Setter";
 
   static origin_Getter(mthis) native "URL_origin_Getter";
 
   static password_Getter(mthis) native "URL_password_Getter";
 
-  static password_Setter_DOMString(mthis, value) native "URL_password_Setter";
+  static password_Setter(mthis, value) native "URL_password_Setter";
 
   static pathname_Getter(mthis) native "URL_pathname_Getter";
 
-  static pathname_Setter_DOMString(mthis, value) native "URL_pathname_Setter";
+  static pathname_Setter(mthis, value) native "URL_pathname_Setter";
 
   static port_Getter(mthis) native "URL_port_Getter";
 
-  static port_Setter_DOMString(mthis, value) native "URL_port_Setter";
+  static port_Setter(mthis, value) native "URL_port_Setter";
 
   static protocol_Getter(mthis) native "URL_protocol_Getter";
 
-  static protocol_Setter_DOMString(mthis, value) native "URL_protocol_Setter";
+  static protocol_Setter(mthis, value) native "URL_protocol_Setter";
 
   static search_Getter(mthis) native "URL_search_Getter";
 
-  static search_Setter_DOMString(mthis, value) native "URL_search_Setter";
+  static search_Setter(mthis, value) native "URL_search_Setter";
 
   static username_Getter(mthis) native "URL_username_Getter";
 
-  static username_Setter_DOMString(mthis, value) native "URL_username_Setter";
+  static username_Setter(mthis, value) native "URL_username_Setter";
 
   static toString_Callback(mthis) native "URL_toString_Callback";
 }
@@ -8067,39 +8181,39 @@
 }
 
 class BlinkVTTCue {
-  static constructorCallback_double_double_DOMString(startTime, endTime, text) native "VTTCue_constructorCallback_double_double_DOMString";
+  static constructorCallback_3(startTime, endTime, text) native "VTTCue_constructorCallback";
 
   static align_Getter(mthis) native "VTTCue_align_Getter";
 
-  static align_Setter_DOMString(mthis, value) native "VTTCue_align_Setter";
+  static align_Setter(mthis, value) native "VTTCue_align_Setter";
 
   static line_Getter(mthis) native "VTTCue_line_Getter";
 
-  static line_Setter_long(mthis, value) native "VTTCue_line_Setter";
+  static line_Setter(mthis, value) native "VTTCue_line_Setter";
 
   static position_Getter(mthis) native "VTTCue_position_Getter";
 
-  static position_Setter_long(mthis, value) native "VTTCue_position_Setter";
+  static position_Setter(mthis, value) native "VTTCue_position_Setter";
 
   static regionId_Getter(mthis) native "VTTCue_regionId_Getter";
 
-  static regionId_Setter_DOMString(mthis, value) native "VTTCue_regionId_Setter";
+  static regionId_Setter(mthis, value) native "VTTCue_regionId_Setter";
 
   static size_Getter(mthis) native "VTTCue_size_Getter";
 
-  static size_Setter_long(mthis, value) native "VTTCue_size_Setter";
+  static size_Setter(mthis, value) native "VTTCue_size_Setter";
 
   static snapToLines_Getter(mthis) native "VTTCue_snapToLines_Getter";
 
-  static snapToLines_Setter_boolean(mthis, value) native "VTTCue_snapToLines_Setter";
+  static snapToLines_Setter(mthis, value) native "VTTCue_snapToLines_Setter";
 
   static text_Getter(mthis) native "VTTCue_text_Getter";
 
-  static text_Setter_DOMString(mthis, value) native "VTTCue_text_Setter";
+  static text_Setter(mthis, value) native "VTTCue_text_Setter";
 
   static vertical_Getter(mthis) native "VTTCue_vertical_Getter";
 
-  static vertical_Setter_DOMString(mthis, value) native "VTTCue_vertical_Setter";
+  static vertical_Setter(mthis, value) native "VTTCue_vertical_Setter";
 
   static getCueAsHTML_Callback(mthis) native "VTTCue_getCueAsHTML_Callback";
 }
@@ -8109,45 +8223,45 @@
 
   static height_Getter(mthis) native "VTTRegion_height_Getter";
 
-  static height_Setter_long(mthis, value) native "VTTRegion_height_Setter";
+  static height_Setter(mthis, value) native "VTTRegion_height_Setter";
 
   static id_Getter(mthis) native "VTTRegion_id_Getter";
 
-  static id_Setter_DOMString(mthis, value) native "VTTRegion_id_Setter";
+  static id_Setter(mthis, value) native "VTTRegion_id_Setter";
 
   static regionAnchorX_Getter(mthis) native "VTTRegion_regionAnchorX_Getter";
 
-  static regionAnchorX_Setter_double(mthis, value) native "VTTRegion_regionAnchorX_Setter";
+  static regionAnchorX_Setter(mthis, value) native "VTTRegion_regionAnchorX_Setter";
 
   static regionAnchorY_Getter(mthis) native "VTTRegion_regionAnchorY_Getter";
 
-  static regionAnchorY_Setter_double(mthis, value) native "VTTRegion_regionAnchorY_Setter";
+  static regionAnchorY_Setter(mthis, value) native "VTTRegion_regionAnchorY_Setter";
 
   static scroll_Getter(mthis) native "VTTRegion_scroll_Getter";
 
-  static scroll_Setter_DOMString(mthis, value) native "VTTRegion_scroll_Setter";
+  static scroll_Setter(mthis, value) native "VTTRegion_scroll_Setter";
 
   static track_Getter(mthis) native "VTTRegion_track_Getter";
 
   static viewportAnchorX_Getter(mthis) native "VTTRegion_viewportAnchorX_Getter";
 
-  static viewportAnchorX_Setter_double(mthis, value) native "VTTRegion_viewportAnchorX_Setter";
+  static viewportAnchorX_Setter(mthis, value) native "VTTRegion_viewportAnchorX_Setter";
 
   static viewportAnchorY_Getter(mthis) native "VTTRegion_viewportAnchorY_Getter";
 
-  static viewportAnchorY_Setter_double(mthis, value) native "VTTRegion_viewportAnchorY_Setter";
+  static viewportAnchorY_Setter(mthis, value) native "VTTRegion_viewportAnchorY_Setter";
 
   static width_Getter(mthis) native "VTTRegion_width_Getter";
 
-  static width_Setter_double(mthis, value) native "VTTRegion_width_Setter";
+  static width_Setter(mthis, value) native "VTTRegion_width_Setter";
 }
 
 class BlinkVTTRegionList {
   static length_Getter(mthis) native "VTTRegionList_length_Getter";
 
-  static getRegionById_Callback_DOMString(mthis, id) native "VTTRegionList_getRegionById_Callback_DOMString";
+  static getRegionById_Callback_1(mthis, id) native "VTTRegionList_getRegionById_Callback";
 
-  static item_Callback_ul(mthis, index) native "VTTRegionList_item_Callback_unsigned long";
+  static item_Callback_1(mthis, index) native "VTTRegionList_item_Callback";
 }
 
 class BlinkValidityState {
@@ -8193,7 +8307,7 @@
 
   static selected_Getter(mthis) native "VideoTrack_selected_Getter";
 
-  static selected_Setter_boolean(mthis, value) native "VideoTrack_selected_Setter";
+  static selected_Setter(mthis, value) native "VideoTrack_selected_Setter";
 }
 
 class BlinkVideoTrackList {
@@ -8201,19 +8315,19 @@
 
   static selectedIndex_Getter(mthis) native "VideoTrackList_selectedIndex_Getter";
 
-  static $__getter___Callback_ul(mthis, index) native "VideoTrackList___getter___Callback_unsigned long";
+  static $__getter___Callback_1(mthis, index) native "VideoTrackList___getter___Callback";
 
-  static getTrackById_Callback_DOMString(mthis, id) native "VideoTrackList_getTrackById_Callback_DOMString";
+  static getTrackById_Callback_1(mthis, id) native "VideoTrackList_getTrackById_Callback";
 }
 
 class BlinkWaveShaperNode {
   static curve_Getter(mthis) native "WaveShaperNode_curve_Getter";
 
-  static curve_Setter_Float32Array(mthis, value) native "WaveShaperNode_curve_Setter";
+  static curve_Setter(mthis, value) native "WaveShaperNode_curve_Setter";
 
   static oversample_Getter(mthis) native "WaveShaperNode_oversample_Getter";
 
-  static oversample_Setter_DOMString(mthis, value) native "WaveShaperNode_oversample_Setter";
+  static oversample_Setter(mthis, value) native "WaveShaperNode_oversample_Setter";
 }
 
 class BlinkWebGLActiveInfo {
@@ -8237,31 +8351,31 @@
 class BlinkWebGLContextAttributes {
   static alpha_Getter(mthis) native "WebGLContextAttributes_alpha_Getter";
 
-  static alpha_Setter_boolean(mthis, value) native "WebGLContextAttributes_alpha_Setter";
+  static alpha_Setter(mthis, value) native "WebGLContextAttributes_alpha_Setter";
 
   static antialias_Getter(mthis) native "WebGLContextAttributes_antialias_Getter";
 
-  static antialias_Setter_boolean(mthis, value) native "WebGLContextAttributes_antialias_Setter";
+  static antialias_Setter(mthis, value) native "WebGLContextAttributes_antialias_Setter";
 
   static depth_Getter(mthis) native "WebGLContextAttributes_depth_Getter";
 
-  static depth_Setter_boolean(mthis, value) native "WebGLContextAttributes_depth_Setter";
+  static depth_Setter(mthis, value) native "WebGLContextAttributes_depth_Setter";
 
   static failIfMajorPerformanceCaveat_Getter(mthis) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Getter";
 
-  static failIfMajorPerformanceCaveat_Setter_boolean(mthis, value) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Setter";
+  static failIfMajorPerformanceCaveat_Setter(mthis, value) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Setter";
 
   static premultipliedAlpha_Getter(mthis) native "WebGLContextAttributes_premultipliedAlpha_Getter";
 
-  static premultipliedAlpha_Setter_boolean(mthis, value) native "WebGLContextAttributes_premultipliedAlpha_Setter";
+  static premultipliedAlpha_Setter(mthis, value) native "WebGLContextAttributes_premultipliedAlpha_Setter";
 
   static preserveDrawingBuffer_Getter(mthis) native "WebGLContextAttributes_preserveDrawingBuffer_Getter";
 
-  static preserveDrawingBuffer_Setter_boolean(mthis, value) native "WebGLContextAttributes_preserveDrawingBuffer_Setter";
+  static preserveDrawingBuffer_Setter(mthis, value) native "WebGLContextAttributes_preserveDrawingBuffer_Setter";
 
   static stencil_Getter(mthis) native "WebGLContextAttributes_stencil_Getter";
 
-  static stencil_Setter_boolean(mthis, value) native "WebGLContextAttributes_stencil_Setter";
+  static stencil_Setter(mthis, value) native "WebGLContextAttributes_stencil_Setter";
 }
 
 class BlinkWebGLContextEvent {
@@ -8273,13 +8387,13 @@
 class BlinkWebGLDebugRendererInfo {}
 
 class BlinkWebGLDebugShaders {
-  static getTranslatedShaderSource_Callback_WebGLShader(mthis, shader) native "WebGLDebugShaders_getTranslatedShaderSource_Callback_WebGLShader";
+  static getTranslatedShaderSource_Callback_1(mthis, shader) native "WebGLDebugShaders_getTranslatedShaderSource_Callback";
 }
 
 class BlinkWebGLDepthTexture {}
 
 class BlinkWebGLDrawBuffers {
-  static drawBuffersWEBGL_Callback_SEQ_ul_SEQ(mthis, buffers) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback_sequence<unsigned long>";
+  static drawBuffersWEBGL_Callback_1(mthis, buffers) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback";
 }
 
 class BlinkWebGLFramebuffer {}
@@ -8303,61 +8417,55 @@
 
   static drawingBufferWidth_Getter(mthis) native "WebGLRenderingContext_drawingBufferWidth_Getter";
 
-  static activeTexture_Callback_ul(mthis, texture) native "WebGLRenderingContext_activeTexture_Callback_unsigned long";
+  static activeTexture_Callback_1(mthis, texture) native "WebGLRenderingContext_activeTexture_Callback";
 
-  static attachShader_Callback_WebGLProgram_WebGLShader(mthis, program, shader) native "WebGLRenderingContext_attachShader_Callback_WebGLProgram_WebGLShader";
+  static attachShader_Callback_2(mthis, program, shader) native "WebGLRenderingContext_attachShader_Callback";
 
-  static bindAttribLocation_Callback_WebGLProgram_ul_DOMString(mthis, program, index, name) native "WebGLRenderingContext_bindAttribLocation_Callback_WebGLProgram_unsigned long_DOMString";
+  static bindAttribLocation_Callback_3(mthis, program, index, name) native "WebGLRenderingContext_bindAttribLocation_Callback";
 
-  static bindBuffer_Callback_ul_WebGLBuffer(mthis, target, buffer) native "WebGLRenderingContext_bindBuffer_Callback_unsigned long_WebGLBuffer";
+  static bindBuffer_Callback_2(mthis, target, buffer) native "WebGLRenderingContext_bindBuffer_Callback";
 
-  static bindFramebuffer_Callback_ul_WebGLFramebuffer(mthis, target, framebuffer) native "WebGLRenderingContext_bindFramebuffer_Callback_unsigned long_WebGLFramebuffer";
+  static bindFramebuffer_Callback_2(mthis, target, framebuffer) native "WebGLRenderingContext_bindFramebuffer_Callback";
 
-  static bindRenderbuffer_Callback_ul_WebGLRenderbuffer(mthis, target, renderbuffer) native "WebGLRenderingContext_bindRenderbuffer_Callback_unsigned long_WebGLRenderbuffer";
+  static bindRenderbuffer_Callback_2(mthis, target, renderbuffer) native "WebGLRenderingContext_bindRenderbuffer_Callback";
 
-  static bindTexture_Callback_ul_WebGLTexture(mthis, target, texture) native "WebGLRenderingContext_bindTexture_Callback_unsigned long_WebGLTexture";
+  static bindTexture_Callback_2(mthis, target, texture) native "WebGLRenderingContext_bindTexture_Callback";
 
-  static blendColor_Callback_float_float_float_float(mthis, red, green, blue, alpha) native "WebGLRenderingContext_blendColor_Callback_float_float_float_float";
+  static blendColor_Callback_4(mthis, red, green, blue, alpha) native "WebGLRenderingContext_blendColor_Callback";
 
-  static blendEquation_Callback_ul(mthis, mode) native "WebGLRenderingContext_blendEquation_Callback_unsigned long";
+  static blendEquation_Callback_1(mthis, mode) native "WebGLRenderingContext_blendEquation_Callback";
 
-  static blendEquationSeparate_Callback_ul_ul(mthis, modeRGB, modeAlpha) native "WebGLRenderingContext_blendEquationSeparate_Callback_unsigned long_unsigned long";
+  static blendEquationSeparate_Callback_2(mthis, modeRGB, modeAlpha) native "WebGLRenderingContext_blendEquationSeparate_Callback";
 
-  static blendFunc_Callback_ul_ul(mthis, sfactor, dfactor) native "WebGLRenderingContext_blendFunc_Callback_unsigned long_unsigned long";
+  static blendFunc_Callback_2(mthis, sfactor, dfactor) native "WebGLRenderingContext_blendFunc_Callback";
 
-  static blendFuncSeparate_Callback_ul_ul_ul_ul(mthis, srcRGB, dstRGB, srcAlpha, dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback_unsigned long_unsigned long_unsigned long_unsigned long";
+  static blendFuncSeparate_Callback_4(mthis, srcRGB, dstRGB, srcAlpha, dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback";
 
-  static bufferData_Callback_ul_ArrayBuffer_ul(mthis, target, data, usage) native "WebGLRenderingContext_bufferData_Callback_unsigned long_ArrayBuffer_unsigned long";
+  static bufferData_Callback_3(mthis, target, data, usage) native "WebGLRenderingContext_bufferData_Callback";
 
-  static bufferData_Callback_ul_ll_ul(mthis, target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_Callback_unsigned long_long long_unsigned long";
+  static bufferSubData_Callback_3(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback";
 
-  static bufferData_Callback_ul_ArrayBufferView_ul(mthis, target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_Callback_unsigned long_ArrayBufferView_unsigned long";
+  static checkFramebufferStatus_Callback_1(mthis, target) native "WebGLRenderingContext_checkFramebufferStatus_Callback";
 
-  static bufferSubData_Callback_ul_ll_ArrayBuffer(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_unsigned long_long long_ArrayBuffer";
+  static clear_Callback_1(mthis, mask) native "WebGLRenderingContext_clear_Callback";
 
-  static bufferSubData_Callback_ul_ll_ArrayBufferView(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_unsigned long_long long_ArrayBufferView";
+  static clearColor_Callback_4(mthis, red, green, blue, alpha) native "WebGLRenderingContext_clearColor_Callback";
 
-  static checkFramebufferStatus_Callback_ul(mthis, target) native "WebGLRenderingContext_checkFramebufferStatus_Callback_unsigned long";
+  static clearDepth_Callback_1(mthis, depth) native "WebGLRenderingContext_clearDepth_Callback";
 
-  static clear_Callback_ul(mthis, mask) native "WebGLRenderingContext_clear_Callback_unsigned long";
+  static clearStencil_Callback_1(mthis, s) native "WebGLRenderingContext_clearStencil_Callback";
 
-  static clearColor_Callback_float_float_float_float(mthis, red, green, blue, alpha) native "WebGLRenderingContext_clearColor_Callback_float_float_float_float";
+  static colorMask_Callback_4(mthis, red, green, blue, alpha) native "WebGLRenderingContext_colorMask_Callback";
 
-  static clearDepth_Callback_float(mthis, depth) native "WebGLRenderingContext_clearDepth_Callback_float";
+  static compileShader_Callback_1(mthis, shader) native "WebGLRenderingContext_compileShader_Callback";
 
-  static clearStencil_Callback_long(mthis, s) native "WebGLRenderingContext_clearStencil_Callback_long";
+  static compressedTexImage2D_Callback_7(mthis, target, level, internalformat, width, height, border, data) native "WebGLRenderingContext_compressedTexImage2D_Callback";
 
-  static colorMask_Callback_boolean_boolean_boolean_boolean(mthis, red, green, blue, alpha) native "WebGLRenderingContext_colorMask_Callback_boolean_boolean_boolean_boolean";
+  static compressedTexSubImage2D_Callback_8(mthis, target, level, xoffset, yoffset, width, height, format, data) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
 
-  static compileShader_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_compileShader_Callback_WebGLShader";
+  static copyTexImage2D_Callback_8(mthis, target, level, internalformat, x, y, width, height, border) native "WebGLRenderingContext_copyTexImage2D_Callback";
 
-  static compressedTexImage2D_Callback_ul_long_ul_long_long_long_ArrayBufferView(mthis, target, level, internalformat, width, height, border, data) native "WebGLRenderingContext_compressedTexImage2D_Callback_unsigned long_long_unsigned long_long_long_long_ArrayBufferView";
-
-  static compressedTexSubImage2D_Callback_ul_long_long_long_long_long_ul_ArrayBufferView(mthis, target, level, xoffset, yoffset, width, height, format, data) native "WebGLRenderingContext_compressedTexSubImage2D_Callback_unsigned long_long_long_long_long_long_unsigned long_ArrayBufferView";
-
-  static copyTexImage2D_Callback_ul_long_ul_long_long_long_long_long(mthis, target, level, internalformat, x, y, width, height, border) native "WebGLRenderingContext_copyTexImage2D_Callback_unsigned long_long_unsigned long_long_long_long_long_long";
-
-  static copyTexSubImage2D_Callback_ul_long_long_long_long_long_long_long(mthis, target, level, xoffset, yoffset, x, y, width, height) native "WebGLRenderingContext_copyTexSubImage2D_Callback_unsigned long_long_long_long_long_long_long_long";
+  static copyTexSubImage2D_Callback_8(mthis, target, level, xoffset, yoffset, x, y, width, height) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
 
   static createBuffer_Callback(mthis) native "WebGLRenderingContext_createBuffer_Callback";
 
@@ -8367,235 +8475,223 @@
 
   static createRenderbuffer_Callback(mthis) native "WebGLRenderingContext_createRenderbuffer_Callback";
 
-  static createShader_Callback_ul(mthis, type) native "WebGLRenderingContext_createShader_Callback_unsigned long";
+  static createShader_Callback_1(mthis, type) native "WebGLRenderingContext_createShader_Callback";
 
   static createTexture_Callback(mthis) native "WebGLRenderingContext_createTexture_Callback";
 
-  static cullFace_Callback_ul(mthis, mode) native "WebGLRenderingContext_cullFace_Callback_unsigned long";
+  static cullFace_Callback_1(mthis, mode) native "WebGLRenderingContext_cullFace_Callback";
 
-  static deleteBuffer_Callback_WebGLBuffer(mthis, buffer) native "WebGLRenderingContext_deleteBuffer_Callback_WebGLBuffer";
+  static deleteBuffer_Callback_1(mthis, buffer) native "WebGLRenderingContext_deleteBuffer_Callback";
 
-  static deleteFramebuffer_Callback_WebGLFramebuffer(mthis, framebuffer) native "WebGLRenderingContext_deleteFramebuffer_Callback_WebGLFramebuffer";
+  static deleteFramebuffer_Callback_1(mthis, framebuffer) native "WebGLRenderingContext_deleteFramebuffer_Callback";
 
-  static deleteProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_deleteProgram_Callback_WebGLProgram";
+  static deleteProgram_Callback_1(mthis, program) native "WebGLRenderingContext_deleteProgram_Callback";
 
-  static deleteRenderbuffer_Callback_WebGLRenderbuffer(mthis, renderbuffer) native "WebGLRenderingContext_deleteRenderbuffer_Callback_WebGLRenderbuffer";
+  static deleteRenderbuffer_Callback_1(mthis, renderbuffer) native "WebGLRenderingContext_deleteRenderbuffer_Callback";
 
-  static deleteShader_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_deleteShader_Callback_WebGLShader";
+  static deleteShader_Callback_1(mthis, shader) native "WebGLRenderingContext_deleteShader_Callback";
 
-  static deleteTexture_Callback_WebGLTexture(mthis, texture) native "WebGLRenderingContext_deleteTexture_Callback_WebGLTexture";
+  static deleteTexture_Callback_1(mthis, texture) native "WebGLRenderingContext_deleteTexture_Callback";
 
-  static depthFunc_Callback_ul(mthis, func) native "WebGLRenderingContext_depthFunc_Callback_unsigned long";
+  static depthFunc_Callback_1(mthis, func) native "WebGLRenderingContext_depthFunc_Callback";
 
-  static depthMask_Callback_boolean(mthis, flag) native "WebGLRenderingContext_depthMask_Callback_boolean";
+  static depthMask_Callback_1(mthis, flag) native "WebGLRenderingContext_depthMask_Callback";
 
-  static depthRange_Callback_float_float(mthis, zNear, zFar) native "WebGLRenderingContext_depthRange_Callback_float_float";
+  static depthRange_Callback_2(mthis, zNear, zFar) native "WebGLRenderingContext_depthRange_Callback";
 
-  static detachShader_Callback_WebGLProgram_WebGLShader(mthis, program, shader) native "WebGLRenderingContext_detachShader_Callback_WebGLProgram_WebGLShader";
+  static detachShader_Callback_2(mthis, program, shader) native "WebGLRenderingContext_detachShader_Callback";
 
-  static disable_Callback_ul(mthis, cap) native "WebGLRenderingContext_disable_Callback_unsigned long";
+  static disable_Callback_1(mthis, cap) native "WebGLRenderingContext_disable_Callback";
 
-  static disableVertexAttribArray_Callback_ul(mthis, index) native "WebGLRenderingContext_disableVertexAttribArray_Callback_unsigned long";
+  static disableVertexAttribArray_Callback_1(mthis, index) native "WebGLRenderingContext_disableVertexAttribArray_Callback";
 
-  static drawArrays_Callback_ul_long_long(mthis, mode, first, count) native "WebGLRenderingContext_drawArrays_Callback_unsigned long_long_long";
+  static drawArrays_Callback_3(mthis, mode, first, count) native "WebGLRenderingContext_drawArrays_Callback";
 
-  static drawElements_Callback_ul_long_ul_ll(mthis, mode, count, type, offset) native "WebGLRenderingContext_drawElements_Callback_unsigned long_long_unsigned long_long long";
+  static drawElements_Callback_4(mthis, mode, count, type, offset) native "WebGLRenderingContext_drawElements_Callback";
 
-  static enable_Callback_ul(mthis, cap) native "WebGLRenderingContext_enable_Callback_unsigned long";
+  static enable_Callback_1(mthis, cap) native "WebGLRenderingContext_enable_Callback";
 
-  static enableVertexAttribArray_Callback_ul(mthis, index) native "WebGLRenderingContext_enableVertexAttribArray_Callback_unsigned long";
+  static enableVertexAttribArray_Callback_1(mthis, index) native "WebGLRenderingContext_enableVertexAttribArray_Callback";
 
   static finish_Callback(mthis) native "WebGLRenderingContext_finish_Callback";
 
   static flush_Callback(mthis) native "WebGLRenderingContext_flush_Callback";
 
-  static framebufferRenderbuffer_Callback_ul_ul_ul_WebGLRenderbuffer(mthis, target, attachment, renderbuffertarget, renderbuffer) native "WebGLRenderingContext_framebufferRenderbuffer_Callback_unsigned long_unsigned long_unsigned long_WebGLRenderbuffer";
+  static framebufferRenderbuffer_Callback_4(mthis, target, attachment, renderbuffertarget, renderbuffer) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
 
-  static framebufferTexture2D_Callback_ul_ul_ul_WebGLTexture_long(mthis, target, attachment, textarget, texture, level) native "WebGLRenderingContext_framebufferTexture2D_Callback_unsigned long_unsigned long_unsigned long_WebGLTexture_long";
+  static framebufferTexture2D_Callback_5(mthis, target, attachment, textarget, texture, level) native "WebGLRenderingContext_framebufferTexture2D_Callback";
 
-  static frontFace_Callback_ul(mthis, mode) native "WebGLRenderingContext_frontFace_Callback_unsigned long";
+  static frontFace_Callback_1(mthis, mode) native "WebGLRenderingContext_frontFace_Callback";
 
-  static generateMipmap_Callback_ul(mthis, target) native "WebGLRenderingContext_generateMipmap_Callback_unsigned long";
+  static generateMipmap_Callback_1(mthis, target) native "WebGLRenderingContext_generateMipmap_Callback";
 
-  static getActiveAttrib_Callback_WebGLProgram_ul(mthis, program, index) native "WebGLRenderingContext_getActiveAttrib_Callback_WebGLProgram_unsigned long";
+  static getActiveAttrib_Callback_2(mthis, program, index) native "WebGLRenderingContext_getActiveAttrib_Callback";
 
-  static getActiveUniform_Callback_WebGLProgram_ul(mthis, program, index) native "WebGLRenderingContext_getActiveUniform_Callback_WebGLProgram_unsigned long";
+  static getActiveUniform_Callback_2(mthis, program, index) native "WebGLRenderingContext_getActiveUniform_Callback";
 
-  static getAttachedShaders_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_getAttachedShaders_Callback_WebGLProgram";
+  static getAttachedShaders_Callback_1(mthis, program) native "WebGLRenderingContext_getAttachedShaders_Callback";
 
-  static getAttribLocation_Callback_WebGLProgram_DOMString(mthis, program, name) native "WebGLRenderingContext_getAttribLocation_Callback_WebGLProgram_DOMString";
+  static getAttribLocation_Callback_2(mthis, program, name) native "WebGLRenderingContext_getAttribLocation_Callback";
 
-  static getBufferParameter_Callback_ul_ul(mthis, target, pname) native "WebGLRenderingContext_getBufferParameter_Callback";
+  static getBufferParameter_Callback_2(mthis, target, pname) native "WebGLRenderingContext_getBufferParameter_Callback";
 
   static getContextAttributes_Callback(mthis) native "WebGLRenderingContext_getContextAttributes_Callback";
 
   static getError_Callback(mthis) native "WebGLRenderingContext_getError_Callback";
 
-  static getExtension_Callback_DOMString(mthis, name) native "WebGLRenderingContext_getExtension_Callback";
+  static getExtension_Callback_1(mthis, name) native "WebGLRenderingContext_getExtension_Callback";
 
-  static getFramebufferAttachmentParameter_Callback_ul_ul_ul(mthis, target, attachment, pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
+  static getFramebufferAttachmentParameter_Callback_3(mthis, target, attachment, pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
 
-  static getParameter_Callback_ul(mthis, pname) native "WebGLRenderingContext_getParameter_Callback";
+  static getParameter_Callback_1(mthis, pname) native "WebGLRenderingContext_getParameter_Callback";
 
-  static getProgramInfoLog_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_getProgramInfoLog_Callback_WebGLProgram";
+  static getProgramInfoLog_Callback_1(mthis, program) native "WebGLRenderingContext_getProgramInfoLog_Callback";
 
-  static getProgramParameter_Callback_WebGLProgram_ul(mthis, program, pname) native "WebGLRenderingContext_getProgramParameter_Callback";
+  static getProgramParameter_Callback_2(mthis, program, pname) native "WebGLRenderingContext_getProgramParameter_Callback";
 
-  static getRenderbufferParameter_Callback_ul_ul(mthis, target, pname) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
+  static getRenderbufferParameter_Callback_2(mthis, target, pname) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
 
-  static getShaderInfoLog_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_getShaderInfoLog_Callback_WebGLShader";
+  static getShaderInfoLog_Callback_1(mthis, shader) native "WebGLRenderingContext_getShaderInfoLog_Callback";
 
-  static getShaderParameter_Callback_WebGLShader_ul(mthis, shader, pname) native "WebGLRenderingContext_getShaderParameter_Callback";
+  static getShaderParameter_Callback_2(mthis, shader, pname) native "WebGLRenderingContext_getShaderParameter_Callback";
 
-  static getShaderPrecisionFormat_Callback_ul_ul(mthis, shadertype, precisiontype) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback_unsigned long_unsigned long";
+  static getShaderPrecisionFormat_Callback_2(mthis, shadertype, precisiontype) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
 
-  static getShaderSource_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_getShaderSource_Callback_WebGLShader";
+  static getShaderSource_Callback_1(mthis, shader) native "WebGLRenderingContext_getShaderSource_Callback";
 
   static getSupportedExtensions_Callback(mthis) native "WebGLRenderingContext_getSupportedExtensions_Callback";
 
-  static getTexParameter_Callback_ul_ul(mthis, target, pname) native "WebGLRenderingContext_getTexParameter_Callback";
+  static getTexParameter_Callback_2(mthis, target, pname) native "WebGLRenderingContext_getTexParameter_Callback";
 
-  static getUniform_Callback_WebGLProgram_WebGLUniformLocation(mthis, program, location) native "WebGLRenderingContext_getUniform_Callback";
+  static getUniform_Callback_2(mthis, program, location) native "WebGLRenderingContext_getUniform_Callback";
 
-  static getUniformLocation_Callback_WebGLProgram_DOMString(mthis, program, name) native "WebGLRenderingContext_getUniformLocation_Callback_WebGLProgram_DOMString";
+  static getUniformLocation_Callback_2(mthis, program, name) native "WebGLRenderingContext_getUniformLocation_Callback";
 
-  static getVertexAttrib_Callback_ul_ul(mthis, index, pname) native "WebGLRenderingContext_getVertexAttrib_Callback";
+  static getVertexAttrib_Callback_2(mthis, index, pname) native "WebGLRenderingContext_getVertexAttrib_Callback";
 
-  static getVertexAttribOffset_Callback_ul_ul(mthis, index, pname) native "WebGLRenderingContext_getVertexAttribOffset_Callback_unsigned long_unsigned long";
+  static getVertexAttribOffset_Callback_2(mthis, index, pname) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
 
-  static hint_Callback_ul_ul(mthis, target, mode) native "WebGLRenderingContext_hint_Callback_unsigned long_unsigned long";
+  static hint_Callback_2(mthis, target, mode) native "WebGLRenderingContext_hint_Callback";
 
-  static isBuffer_Callback_WebGLBuffer(mthis, buffer) native "WebGLRenderingContext_isBuffer_Callback_WebGLBuffer";
+  static isBuffer_Callback_1(mthis, buffer) native "WebGLRenderingContext_isBuffer_Callback";
 
   static isContextLost_Callback(mthis) native "WebGLRenderingContext_isContextLost_Callback";
 
-  static isEnabled_Callback_ul(mthis, cap) native "WebGLRenderingContext_isEnabled_Callback_unsigned long";
+  static isEnabled_Callback_1(mthis, cap) native "WebGLRenderingContext_isEnabled_Callback";
 
-  static isFramebuffer_Callback_WebGLFramebuffer(mthis, framebuffer) native "WebGLRenderingContext_isFramebuffer_Callback_WebGLFramebuffer";
+  static isFramebuffer_Callback_1(mthis, framebuffer) native "WebGLRenderingContext_isFramebuffer_Callback";
 
-  static isProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_isProgram_Callback_WebGLProgram";
+  static isProgram_Callback_1(mthis, program) native "WebGLRenderingContext_isProgram_Callback";
 
-  static isRenderbuffer_Callback_WebGLRenderbuffer(mthis, renderbuffer) native "WebGLRenderingContext_isRenderbuffer_Callback_WebGLRenderbuffer";
+  static isRenderbuffer_Callback_1(mthis, renderbuffer) native "WebGLRenderingContext_isRenderbuffer_Callback";
 
-  static isShader_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_isShader_Callback_WebGLShader";
+  static isShader_Callback_1(mthis, shader) native "WebGLRenderingContext_isShader_Callback";
 
-  static isTexture_Callback_WebGLTexture(mthis, texture) native "WebGLRenderingContext_isTexture_Callback_WebGLTexture";
+  static isTexture_Callback_1(mthis, texture) native "WebGLRenderingContext_isTexture_Callback";
 
-  static lineWidth_Callback_float(mthis, width) native "WebGLRenderingContext_lineWidth_Callback_float";
+  static lineWidth_Callback_1(mthis, width) native "WebGLRenderingContext_lineWidth_Callback";
 
-  static linkProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_linkProgram_Callback_WebGLProgram";
+  static linkProgram_Callback_1(mthis, program) native "WebGLRenderingContext_linkProgram_Callback";
 
-  static pixelStorei_Callback_ul_long(mthis, pname, param) native "WebGLRenderingContext_pixelStorei_Callback_unsigned long_long";
+  static pixelStorei_Callback_2(mthis, pname, param) native "WebGLRenderingContext_pixelStorei_Callback";
 
-  static polygonOffset_Callback_float_float(mthis, factor, units) native "WebGLRenderingContext_polygonOffset_Callback_float_float";
+  static polygonOffset_Callback_2(mthis, factor, units) native "WebGLRenderingContext_polygonOffset_Callback";
 
-  static readPixels_Callback_long_long_long_long_ul_ul_ArrayBufferView(mthis, x, y, width, height, format, type, pixels) native "WebGLRenderingContext_readPixels_Callback_long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
+  static readPixels_Callback_7(mthis, x, y, width, height, format, type, pixels) native "WebGLRenderingContext_readPixels_Callback";
 
-  static renderbufferStorage_Callback_ul_ul_long_long(mthis, target, internalformat, width, height) native "WebGLRenderingContext_renderbufferStorage_Callback_unsigned long_unsigned long_long_long";
+  static renderbufferStorage_Callback_4(mthis, target, internalformat, width, height) native "WebGLRenderingContext_renderbufferStorage_Callback";
 
-  static sampleCoverage_Callback_float_boolean(mthis, value, invert) native "WebGLRenderingContext_sampleCoverage_Callback_float_boolean";
+  static sampleCoverage_Callback_2(mthis, value, invert) native "WebGLRenderingContext_sampleCoverage_Callback";
 
-  static scissor_Callback_long_long_long_long(mthis, x, y, width, height) native "WebGLRenderingContext_scissor_Callback_long_long_long_long";
+  static scissor_Callback_4(mthis, x, y, width, height) native "WebGLRenderingContext_scissor_Callback";
 
-  static shaderSource_Callback_WebGLShader_DOMString(mthis, shader, string) native "WebGLRenderingContext_shaderSource_Callback_WebGLShader_DOMString";
+  static shaderSource_Callback_2(mthis, shader, string) native "WebGLRenderingContext_shaderSource_Callback";
 
-  static stencilFunc_Callback_ul_long_ul(mthis, func, ref, mask) native "WebGLRenderingContext_stencilFunc_Callback_unsigned long_long_unsigned long";
+  static stencilFunc_Callback_3(mthis, func, ref, mask) native "WebGLRenderingContext_stencilFunc_Callback";
 
-  static stencilFuncSeparate_Callback_ul_ul_long_ul(mthis, face, func, ref, mask) native "WebGLRenderingContext_stencilFuncSeparate_Callback_unsigned long_unsigned long_long_unsigned long";
+  static stencilFuncSeparate_Callback_4(mthis, face, func, ref, mask) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
 
-  static stencilMask_Callback_ul(mthis, mask) native "WebGLRenderingContext_stencilMask_Callback_unsigned long";
+  static stencilMask_Callback_1(mthis, mask) native "WebGLRenderingContext_stencilMask_Callback";
 
-  static stencilMaskSeparate_Callback_ul_ul(mthis, face, mask) native "WebGLRenderingContext_stencilMaskSeparate_Callback_unsigned long_unsigned long";
+  static stencilMaskSeparate_Callback_2(mthis, face, mask) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
 
-  static stencilOp_Callback_ul_ul_ul(mthis, fail, zfail, zpass) native "WebGLRenderingContext_stencilOp_Callback_unsigned long_unsigned long_unsigned long";
+  static stencilOp_Callback_3(mthis, fail, zfail, zpass) native "WebGLRenderingContext_stencilOp_Callback";
 
-  static stencilOpSeparate_Callback_ul_ul_ul_ul(mthis, face, fail, zfail, zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback_unsigned long_unsigned long_unsigned long_unsigned long";
+  static stencilOpSeparate_Callback_4(mthis, face, fail, zfail, zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback";
 
-  static texImage2D_Callback_ul_long_ul_long_long_long_ul_ul_ArrayBufferView(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
+  static texImage2D_Callback_9(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) native "WebGLRenderingContext_texImage2D_Callback";
 
-  static texImage2D_Callback_ul_long_ul_ul_ul_ImageData(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_ImageData";
+  static texImage2D_Callback_6(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback";
 
-  static texImage2D_Callback_ul_long_ul_ul_ul_HTMLImageElement(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLImageElement";
+  static texParameterf_Callback_3(mthis, target, pname, param) native "WebGLRenderingContext_texParameterf_Callback";
 
-  static texImage2D_Callback_ul_long_ul_ul_ul_HTMLCanvasElement(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLCanvasElement";
+  static texParameteri_Callback_3(mthis, target, pname, param) native "WebGLRenderingContext_texParameteri_Callback";
 
-  static texImage2D_Callback_ul_long_ul_ul_ul_HTMLVideoElement(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLVideoElement";
+  static texSubImage2D_Callback_9(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) native "WebGLRenderingContext_texSubImage2D_Callback";
 
-  static texParameterf_Callback_ul_ul_float(mthis, target, pname, param) native "WebGLRenderingContext_texParameterf_Callback_unsigned long_unsigned long_float";
+  static texSubImage2D_Callback_7(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback";
 
-  static texParameteri_Callback_ul_ul_long(mthis, target, pname, param) native "WebGLRenderingContext_texParameteri_Callback_unsigned long_unsigned long_long";
+  static uniform1f_Callback_2(mthis, location, x) native "WebGLRenderingContext_uniform1f_Callback";
 
-  static texSubImage2D_Callback_ul_long_long_long_long_long_ul_ul_ArrayBufferView(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
+  static uniform1fv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform1fv_Callback";
 
-  static texSubImage2D_Callback_ul_long_long_long_ul_ul_ImageData(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_ImageData";
+  static uniform1i_Callback_2(mthis, location, x) native "WebGLRenderingContext_uniform1i_Callback";
 
-  static texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLImageElement(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_HTMLImageElement";
+  static uniform1iv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform1iv_Callback";
 
-  static texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLCanvasElement(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_HTMLCanvasElement";
+  static uniform2f_Callback_3(mthis, location, x, y) native "WebGLRenderingContext_uniform2f_Callback";
 
-  static texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLVideoElement(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_HTMLVideoElement";
+  static uniform2fv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform2fv_Callback";
 
-  static uniform1f_Callback_WebGLUniformLocation_float(mthis, location, x) native "WebGLRenderingContext_uniform1f_Callback_WebGLUniformLocation_float";
+  static uniform2i_Callback_3(mthis, location, x, y) native "WebGLRenderingContext_uniform2i_Callback";
 
-  static uniform1fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform1fv_Callback";
+  static uniform2iv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform2iv_Callback";
 
-  static uniform1i_Callback_WebGLUniformLocation_long(mthis, location, x) native "WebGLRenderingContext_uniform1i_Callback_WebGLUniformLocation_long";
+  static uniform3f_Callback_4(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3f_Callback";
 
-  static uniform1iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform1iv_Callback";
+  static uniform3fv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform3fv_Callback";
 
-  static uniform2f_Callback_WebGLUniformLocation_float_float(mthis, location, x, y) native "WebGLRenderingContext_uniform2f_Callback_WebGLUniformLocation_float_float";
+  static uniform3i_Callback_4(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3i_Callback";
 
-  static uniform2fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform2fv_Callback";
+  static uniform3iv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform3iv_Callback";
 
-  static uniform2i_Callback_WebGLUniformLocation_long_long(mthis, location, x, y) native "WebGLRenderingContext_uniform2i_Callback_WebGLUniformLocation_long_long";
+  static uniform4f_Callback_5(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4f_Callback";
 
-  static uniform2iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform2iv_Callback";
+  static uniform4fv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform4fv_Callback";
 
-  static uniform3f_Callback_WebGLUniformLocation_float_float_float(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3f_Callback_WebGLUniformLocation_float_float_float";
+  static uniform4i_Callback_5(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4i_Callback";
 
-  static uniform3fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform3fv_Callback";
+  static uniform4iv_Callback_2(mthis, location, v) native "WebGLRenderingContext_uniform4iv_Callback";
 
-  static uniform3i_Callback_WebGLUniformLocation_long_long_long(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3i_Callback_WebGLUniformLocation_long_long_long";
+  static uniformMatrix2fv_Callback_3(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
 
-  static uniform3iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform3iv_Callback";
+  static uniformMatrix3fv_Callback_3(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
 
-  static uniform4f_Callback_WebGLUniformLocation_float_float_float_float(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4f_Callback_WebGLUniformLocation_float_float_float_float";
+  static uniformMatrix4fv_Callback_3(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
 
-  static uniform4fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform4fv_Callback";
+  static useProgram_Callback_1(mthis, program) native "WebGLRenderingContext_useProgram_Callback";
 
-  static uniform4i_Callback_WebGLUniformLocation_long_long_long_long(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4i_Callback_WebGLUniformLocation_long_long_long_long";
+  static validateProgram_Callback_1(mthis, program) native "WebGLRenderingContext_validateProgram_Callback";
 
-  static uniform4iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform4iv_Callback";
+  static vertexAttrib1f_Callback_2(mthis, indx, x) native "WebGLRenderingContext_vertexAttrib1f_Callback";
 
-  static uniformMatrix2fv_Callback_WebGLUniformLocation_boolean_Float32Array(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
+  static vertexAttrib1fv_Callback_2(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
 
-  static uniformMatrix3fv_Callback_WebGLUniformLocation_boolean_Float32Array(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
+  static vertexAttrib2f_Callback_3(mthis, indx, x, y) native "WebGLRenderingContext_vertexAttrib2f_Callback";
 
-  static uniformMatrix4fv_Callback_WebGLUniformLocation_boolean_Float32Array(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
+  static vertexAttrib2fv_Callback_2(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
 
-  static useProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_useProgram_Callback_WebGLProgram";
+  static vertexAttrib3f_Callback_4(mthis, indx, x, y, z) native "WebGLRenderingContext_vertexAttrib3f_Callback";
 
-  static validateProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_validateProgram_Callback_WebGLProgram";
+  static vertexAttrib3fv_Callback_2(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
 
-  static vertexAttrib1f_Callback_ul_float(mthis, indx, x) native "WebGLRenderingContext_vertexAttrib1f_Callback_unsigned long_float";
+  static vertexAttrib4f_Callback_5(mthis, indx, x, y, z, w) native "WebGLRenderingContext_vertexAttrib4f_Callback";
 
-  static vertexAttrib1fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
+  static vertexAttrib4fv_Callback_2(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
 
-  static vertexAttrib2f_Callback_ul_float_float(mthis, indx, x, y) native "WebGLRenderingContext_vertexAttrib2f_Callback_unsigned long_float_float";
+  static vertexAttribPointer_Callback_6(mthis, indx, size, type, normalized, stride, offset) native "WebGLRenderingContext_vertexAttribPointer_Callback";
 
-  static vertexAttrib2fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
-
-  static vertexAttrib3f_Callback_ul_float_float_float(mthis, indx, x, y, z) native "WebGLRenderingContext_vertexAttrib3f_Callback_unsigned long_float_float_float";
-
-  static vertexAttrib3fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
-
-  static vertexAttrib4f_Callback_ul_float_float_float_float(mthis, indx, x, y, z, w) native "WebGLRenderingContext_vertexAttrib4f_Callback_unsigned long_float_float_float_float";
-
-  static vertexAttrib4fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
-
-  static vertexAttribPointer_Callback_ul_long_ul_boolean_long_ll(mthis, indx, size, type, normalized, stride, offset) native "WebGLRenderingContext_vertexAttribPointer_Callback_unsigned long_long_unsigned long_boolean_long_long long";
-
-  static viewport_Callback_long_long_long_long(mthis, x, y, width, height) native "WebGLRenderingContext_viewport_Callback_long_long_long_long";
+  static viewport_Callback_4(mthis, x, y, width, height) native "WebGLRenderingContext_viewport_Callback";
 }
 
 class BlinkWebGLShader {}
@@ -8629,33 +8725,31 @@
 class BlinkWebKitCSSFilterValue {}
 
 class BlinkWebKitCSSMatrix {
-  static constructorCallback_DOMString(cssValue) native "WebKitCSSMatrix_constructorCallback_DOMString";
+  static constructorCallback_1(cssValue) native "WebKitCSSMatrix_constructorCallback";
 }
 
 class BlinkWebKitCSSTransformValue {}
 
 class BlinkWebKitPoint {
-  static constructorCallback_float_float(x, y) native "WebKitPoint_constructorCallback";
+  static constructorCallback_2(x, y) native "WebKitPoint_constructorCallback";
 
   static x_Getter(mthis) native "WebKitPoint_x_Getter";
 
-  static x_Setter_float(mthis, value) native "WebKitPoint_x_Setter";
+  static x_Setter(mthis, value) native "WebKitPoint_x_Setter";
 
   static y_Getter(mthis) native "WebKitPoint_y_Getter";
 
-  static y_Setter_float(mthis, value) native "WebKitPoint_y_Setter";
+  static y_Setter(mthis, value) native "WebKitPoint_y_Setter";
 }
 
 class BlinkWebSocket {
-  static constructorCallback_DOMString(url) native "WebSocket_constructorCallback_DOMString";
+  static constructorCallback_1(url) native "WebSocket_constructorCallback";
 
-  static constructorCallback_DOMString_DOMString(url, protocol_OR_protocols) native "WebSocket_constructorCallback_DOMString_DOMString";
-
-  static constructorCallback_DOMString_SEQ_DOMString_SEQ(url, protocol_OR_protocols) native "WebSocket_constructorCallback_DOMString_sequence<DOMString>";
+  static constructorCallback_2(url, protocol_OR_protocols) native "WebSocket_constructorCallback";
 
   static binaryType_Getter(mthis) native "WebSocket_binaryType_Getter";
 
-  static binaryType_Setter_DOMString(mthis, value) native "WebSocket_binaryType_Setter";
+  static binaryType_Setter(mthis, value) native "WebSocket_binaryType_Setter";
 
   static bufferedAmount_Getter(mthis) native "WebSocket_bufferedAmount_Getter";
 
@@ -8667,19 +8761,13 @@
 
   static url_Getter(mthis) native "WebSocket_url_Getter";
 
-  static close_Callback_us_DOMString(mthis, code, reason) native "WebSocket_close_Callback_unsigned short_DOMString";
+  static close_Callback_2(mthis, code, reason) native "WebSocket_close_Callback";
 
-  static close_Callback_us(mthis, code) native "WebSocket_close_Callback_unsigned short";
+  static close_Callback_1(mthis, code) native "WebSocket_close_Callback";
 
   static close_Callback(mthis) native "WebSocket_close_Callback";
 
-  static send_Callback_DOMString(mthis, data) native "WebSocket_send_Callback_DOMString";
-
-  static send_Callback_Blob(mthis, data) native "WebSocket_send_Callback_Blob";
-
-  static send_Callback_ArrayBufferView(mthis, data) native "WebSocket_send_Callback_ArrayBufferView";
-
-  static send_Callback_ArrayBuffer(mthis, data) native "WebSocket_send_Callback_ArrayBuffer";
+  static send_Callback_1(mthis, data) native "WebSocket_send_Callback";
 }
 
 class BlinkWheelEvent {
@@ -8711,11 +8799,11 @@
 
   static defaultStatus_Getter(mthis) native "Window_defaultStatus_Getter";
 
-  static defaultStatus_Setter_DOMString(mthis, value) native "Window_defaultStatus_Setter";
+  static defaultStatus_Setter(mthis, value) native "Window_defaultStatus_Setter";
 
   static defaultstatus_Getter(mthis) native "Window_defaultstatus_Getter";
 
-  static defaultstatus_Setter_DOMString(mthis, value) native "Window_defaultstatus_Setter";
+  static defaultstatus_Setter(mthis, value) native "Window_defaultstatus_Setter";
 
   static devicePixelRatio_Getter(mthis) native "Window_devicePixelRatio_Getter";
 
@@ -8739,7 +8827,7 @@
 
   static name_Getter(mthis) native "Window_name_Getter";
 
-  static name_Setter_DOMString(mthis, value) native "Window_name_Setter";
+  static name_Setter(mthis, value) native "Window_name_Setter";
 
   static navigator_Getter(mthis) native "Window_navigator_Getter";
 
@@ -8747,7 +8835,7 @@
 
   static opener_Getter(mthis) native "Window_opener_Getter";
 
-  static opener_Setter_Window(mthis, value) native "Window_opener_Setter";
+  static opener_Setter(mthis, value) native "Window_opener_Setter";
 
   static orientation_Getter(mthis) native "Window_orientation_Getter";
 
@@ -8787,7 +8875,7 @@
 
   static status_Getter(mthis) native "Window_status_Getter";
 
-  static status_Setter_DOMString(mthis, value) native "Window_status_Setter";
+  static status_Setter(mthis, value) native "Window_status_Setter";
 
   static statusbar_Getter(mthis) native "Window_statusbar_Getter";
 
@@ -8799,81 +8887,91 @@
 
   static window_Getter(mthis) native "Window_window_Getter";
 
-  static $__getter___Callback_ul(mthis, index_OR_name) native "Window___getter___Callback_unsigned long";
+  static $__getter___Callback_1(mthis, index_OR_name) native "Window___getter___Callback";
 
-  static $__getter___Callback_DOMString(mthis, index_OR_name) native "Window___getter___Callback";
-
-  static alert_Callback_DOMString(mthis, message) native "Window_alert_Callback_DOMString";
+  static alert_Callback_1(mthis, message) native "Window_alert_Callback";
 
   static alert_Callback(mthis) native "Window_alert_Callback";
 
-  static cancelAnimationFrame_Callback_long(mthis, id) native "Window_cancelAnimationFrame_Callback_long";
+  static cancelAnimationFrame_Callback_1(mthis, id) native "Window_cancelAnimationFrame_Callback";
 
   static close_Callback(mthis) native "Window_close_Callback";
 
-  static confirm_Callback_DOMString(mthis, message) native "Window_confirm_Callback_DOMString";
+  static confirm_Callback_1(mthis, message) native "Window_confirm_Callback";
 
   static confirm_Callback(mthis) native "Window_confirm_Callback";
 
-  static find_Callback_DOMString_boolean_boolean_boolean_boolean_boolean_boolean(mthis, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) native "Window_find_Callback_DOMString_boolean_boolean_boolean_boolean_boolean_boolean";
+  static find_Callback_7(mthis, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) native "Window_find_Callback";
 
-  static getComputedStyle_Callback_Element_DOMString(mthis, element, pseudoElement) native "Window_getComputedStyle_Callback_Element_DOMString";
+  static getComputedStyle_Callback_2(mthis, element, pseudoElement) native "Window_getComputedStyle_Callback";
 
-  static getMatchedCSSRules_Callback_Element_DOMString(mthis, element, pseudoElement) native "Window_getMatchedCSSRules_Callback_Element_DOMString";
+  static getMatchedCSSRules_Callback_2(mthis, element, pseudoElement) native "Window_getMatchedCSSRules_Callback";
 
   static getSelection_Callback(mthis) native "Window_getSelection_Callback";
 
-  static matchMedia_Callback_DOMString(mthis, query) native "Window_matchMedia_Callback_DOMString";
+  static matchMedia_Callback_1(mthis, query) native "Window_matchMedia_Callback";
 
-  static moveBy_Callback_float_float(mthis, x, y) native "Window_moveBy_Callback_float_float";
+  static moveBy_Callback_2(mthis, x, y) native "Window_moveBy_Callback";
 
-  static moveTo_Callback_float_float(mthis, x, y) native "Window_moveTo_Callback_float_float";
+  static moveTo_Callback_2(mthis, x, y) native "Window_moveTo_Callback";
 
-  static open_Callback_DOMString_DOMString_DOMString(mthis, url, name, options) native "Window_open_Callback";
+  static open_Callback_3(mthis, url, name, options) native "Window_open_Callback";
 
-  static openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(mthis, name, version, displayName, estimatedSize, creationCallback) native "Window_openDatabase_Callback_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
+  static openDatabase_Callback_5(mthis, name, version, displayName, estimatedSize, creationCallback) native "Window_openDatabase_Callback";
 
-  static postMessage_Callback_SerializedScriptValue_DOMString_SEQ_MessagePort_SEQ(mthis, message, targetOrigin, transfer) native "Window_postMessage_Callback";
+  static openDatabase_Callback_4(mthis, name, version, displayName, estimatedSize) native "Window_openDatabase_Callback";
+
+  static postMessage_Callback_3(mthis, message, targetOrigin, transfer) native "Window_postMessage_Callback";
 
   static print_Callback(mthis) native "Window_print_Callback";
 
-  static requestAnimationFrame_Callback_RequestAnimationFrameCallback(mthis, callback) native "Window_requestAnimationFrame_Callback_RequestAnimationFrameCallback";
+  static requestAnimationFrame_Callback_1(mthis, callback) native "Window_requestAnimationFrame_Callback";
 
-  static resizeBy_Callback_float_float(mthis, x, y) native "Window_resizeBy_Callback_float_float";
+  static resizeBy_Callback_2(mthis, x, y) native "Window_resizeBy_Callback";
 
-  static resizeTo_Callback_float_float(mthis, width, height) native "Window_resizeTo_Callback_float_float";
+  static resizeTo_Callback_2(mthis, width, height) native "Window_resizeTo_Callback";
 
-  static scroll_Callback_long_long_Dictionary(mthis, x, y, scrollOptions) native "Window_scroll_Callback_long_long_Dictionary";
+  static scroll_Callback_3(mthis, x, y, scrollOptions) native "Window_scroll_Callback";
 
-  static scrollBy_Callback_long_long_Dictionary(mthis, x, y, scrollOptions) native "Window_scrollBy_Callback_long_long_Dictionary";
+  static scroll_Callback_2(mthis, x, y) native "Window_scroll_Callback";
 
-  static scrollTo_Callback_long_long_Dictionary(mthis, x, y, scrollOptions) native "Window_scrollTo_Callback_long_long_Dictionary";
+  static scrollBy_Callback_3(mthis, x, y, scrollOptions) native "Window_scrollBy_Callback";
 
-  static showModalDialog_Callback_DOMString_ScriptValue_DOMString(mthis, url, dialogArgs, featureArgs) native "Window_showModalDialog_Callback";
+  static scrollBy_Callback_2(mthis, x, y) native "Window_scrollBy_Callback";
+
+  static scrollTo_Callback_3(mthis, x, y, scrollOptions) native "Window_scrollTo_Callback";
+
+  static scrollTo_Callback_2(mthis, x, y) native "Window_scrollTo_Callback";
+
+  static showModalDialog_Callback_3(mthis, url, dialogArgs, featureArgs) native "Window_showModalDialog_Callback";
 
   static stop_Callback(mthis) native "Window_stop_Callback";
 
-  static webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(mthis, type, size, successCallback, errorCallback) native "Window_webkitRequestFileSystem_Callback_unsigned short_long long_FileSystemCallback_ErrorCallback";
+  static webkitRequestFileSystem_Callback_4(mthis, type, size, successCallback, errorCallback) native "Window_webkitRequestFileSystem_Callback";
 
-  static webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(mthis, url, successCallback, errorCallback) native "Window_webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback";
+  static webkitRequestFileSystem_Callback_3(mthis, type, size, successCallback) native "Window_webkitRequestFileSystem_Callback";
 
-  static atob_Callback_DOMString(mthis, string) native "Window_atob_Callback_DOMString";
+  static webkitResolveLocalFileSystemURL_Callback_3(mthis, url, successCallback, errorCallback) native "Window_webkitResolveLocalFileSystemURL_Callback";
 
-  static btoa_Callback_DOMString(mthis, string) native "Window_btoa_Callback_DOMString";
+  static webkitResolveLocalFileSystemURL_Callback_2(mthis, url, successCallback) native "Window_webkitResolveLocalFileSystemURL_Callback";
 
-  static clearInterval_Callback_long(mthis, handle) native "Window_clearInterval_Callback_long";
+  static atob_Callback_1(mthis, string) native "Window_atob_Callback";
 
-  static clearTimeout_Callback_long(mthis, handle) native "Window_clearTimeout_Callback_long";
+  static btoa_Callback_1(mthis, string) native "Window_btoa_Callback";
 
-  static setInterval_Callback_ScriptValue_long(mthis, handler, timeout) native "Window_setInterval_Callback";
+  static clearInterval_Callback_1(mthis, handle) native "Window_clearInterval_Callback";
 
-  static setTimeout_Callback_ScriptValue_long(mthis, handler, timeout) native "Window_setTimeout_Callback";
+  static clearTimeout_Callback_1(mthis, handle) native "Window_clearTimeout_Callback";
+
+  static setInterval_Callback_2(mthis, handler, timeout) native "Window_setInterval_Callback";
+
+  static setTimeout_Callback_2(mthis, handler, timeout) native "Window_setTimeout_Callback";
 }
 
 class BlinkWorker {
-  static constructorCallback_DOMString(scriptUrl) native "Worker_constructorCallback_DOMString";
+  static constructorCallback_1(scriptUrl) native "Worker_constructorCallback";
 
-  static postMessage_Callback_SerializedScriptValue_SEQ_MessagePort_SEQ(mthis, message, transfer) native "Worker_postMessage_Callback";
+  static postMessage_Callback_2(mthis, message, transfer) native "Worker_postMessage_Callback";
 
   static terminate_Callback(mthis) native "Worker_terminate_Callback";
 }
@@ -8905,7 +9003,7 @@
 
   static responseType_Getter(mthis) native "XMLHttpRequest_responseType_Getter";
 
-  static responseType_Setter_DOMString(mthis, value) native "XMLHttpRequest_responseType_Setter";
+  static responseType_Setter(mthis, value) native "XMLHttpRequest_responseType_Setter";
 
   static responseURL_Getter(mthis) native "XMLHttpRequest_responseURL_Getter";
 
@@ -8917,27 +9015,27 @@
 
   static timeout_Getter(mthis) native "XMLHttpRequest_timeout_Getter";
 
-  static timeout_Setter_ul(mthis, value) native "XMLHttpRequest_timeout_Setter";
+  static timeout_Setter(mthis, value) native "XMLHttpRequest_timeout_Setter";
 
   static upload_Getter(mthis) native "XMLHttpRequest_upload_Getter";
 
   static withCredentials_Getter(mthis) native "XMLHttpRequest_withCredentials_Getter";
 
-  static withCredentials_Setter_boolean(mthis, value) native "XMLHttpRequest_withCredentials_Setter";
+  static withCredentials_Setter(mthis, value) native "XMLHttpRequest_withCredentials_Setter";
 
   static abort_Callback(mthis) native "XMLHttpRequest_abort_Callback";
 
   static getAllResponseHeaders_Callback(mthis) native "XMLHttpRequest_getAllResponseHeaders_Callback";
 
-  static getResponseHeader_Callback_DOMString(mthis, header) native "XMLHttpRequest_getResponseHeader_Callback_DOMString";
+  static getResponseHeader_Callback_1(mthis, header) native "XMLHttpRequest_getResponseHeader_Callback";
 
-  static open_Callback_DOMString_DOMString_boolean_DOMString_DOMString(mthis, method, url, async, user, password) native "XMLHttpRequest_open_Callback";
+  static open_Callback_5(mthis, method, url, async, user, password) native "XMLHttpRequest_open_Callback";
 
-  static overrideMimeType_Callback_DOMString(mthis, override) native "XMLHttpRequest_overrideMimeType_Callback_DOMString";
+  static overrideMimeType_Callback_1(mthis, override) native "XMLHttpRequest_overrideMimeType_Callback";
 
-  static send_Callback(mthis, data) native "XMLHttpRequest_send_Callback";
+  static send_Callback_1(mthis, data) native "XMLHttpRequest_send_Callback";
 
-  static setRequestHeader_Callback_DOMString_DOMString(mthis, header, value) native "XMLHttpRequest_setRequestHeader_Callback_DOMString_DOMString";
+  static setRequestHeader_Callback_2(mthis, header, value) native "XMLHttpRequest_setRequestHeader_Callback";
 }
 
 class BlinkXMLHttpRequestProgressEvent {}
@@ -8947,25 +9045,25 @@
 class BlinkXMLSerializer {
   static constructorCallback() native "XMLSerializer_constructorCallback";
 
-  static serializeToString_Callback_Node(mthis, node) native "XMLSerializer_serializeToString_Callback_Node";
+  static serializeToString_Callback_1(mthis, node) native "XMLSerializer_serializeToString_Callback";
 }
 
 class BlinkXPathEvaluator {
   static constructorCallback() native "XPathEvaluator_constructorCallback";
 
-  static createExpression_Callback_DOMString_XPathNSResolver(mthis, expression, resolver) native "XPathEvaluator_createExpression_Callback_DOMString_XPathNSResolver";
+  static createExpression_Callback_2(mthis, expression, resolver) native "XPathEvaluator_createExpression_Callback";
 
-  static createNSResolver_Callback_Node(mthis, nodeResolver) native "XPathEvaluator_createNSResolver_Callback_Node";
+  static createNSResolver_Callback_1(mthis, nodeResolver) native "XPathEvaluator_createNSResolver_Callback";
 
-  static evaluate_Callback_DOMString_Node_XPathNSResolver_us_XPathResult(mthis, expression, contextNode, resolver, type, inResult) native "XPathEvaluator_evaluate_Callback_DOMString_Node_XPathNSResolver_unsigned short_XPathResult";
+  static evaluate_Callback_5(mthis, expression, contextNode, resolver, type, inResult) native "XPathEvaluator_evaluate_Callback";
 }
 
 class BlinkXPathExpression {
-  static evaluate_Callback_Node_us_XPathResult(mthis, contextNode, type, inResult) native "XPathExpression_evaluate_Callback_Node_unsigned short_XPathResult";
+  static evaluate_Callback_3(mthis, contextNode, type, inResult) native "XPathExpression_evaluate_Callback";
 }
 
 class BlinkXPathNSResolver {
-  static lookupNamespaceURI_Callback_DOMString(mthis, prefix) native "XPathNSResolver_lookupNamespaceURI_Callback_DOMString";
+  static lookupNamespaceURI_Callback_1(mthis, prefix) native "XPathNSResolver_lookupNamespaceURI_Callback";
 }
 
 class BlinkXPathResult {
@@ -8985,7 +9083,7 @@
 
   static iterateNext_Callback(mthis) native "XPathResult_iterateNext_Callback";
 
-  static snapshotItem_Callback_ul(mthis, index) native "XPathResult_snapshotItem_Callback_unsigned long";
+  static snapshotItem_Callback_1(mthis, index) native "XPathResult_snapshotItem_Callback";
 }
 
 class BlinkXSLTProcessor {
@@ -8993,19 +9091,19 @@
 
   static clearParameters_Callback(mthis) native "XSLTProcessor_clearParameters_Callback";
 
-  static getParameter_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "XSLTProcessor_getParameter_Callback";
+  static getParameter_Callback_2(mthis, namespaceURI, localName) native "XSLTProcessor_getParameter_Callback";
 
-  static importStylesheet_Callback_Node(mthis, stylesheet) native "XSLTProcessor_importStylesheet_Callback_Node";
+  static importStylesheet_Callback_1(mthis, stylesheet) native "XSLTProcessor_importStylesheet_Callback";
 
-  static removeParameter_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "XSLTProcessor_removeParameter_Callback";
+  static removeParameter_Callback_2(mthis, namespaceURI, localName) native "XSLTProcessor_removeParameter_Callback";
 
   static reset_Callback(mthis) native "XSLTProcessor_reset_Callback";
 
-  static setParameter_Callback_DOMString_DOMString_DOMString(mthis, namespaceURI, localName, value) native "XSLTProcessor_setParameter_Callback";
+  static setParameter_Callback_3(mthis, namespaceURI, localName, value) native "XSLTProcessor_setParameter_Callback";
 
-  static transformToDocument_Callback_Node(mthis, source) native "XSLTProcessor_transformToDocument_Callback_Node";
+  static transformToDocument_Callback_1(mthis, source) native "XSLTProcessor_transformToDocument_Callback";
 
-  static transformToFragment_Callback_Node_Document(mthis, source, docVal) native "XSLTProcessor_transformToFragment_Callback_Node_Document";
+  static transformToFragment_Callback_2(mthis, source, docVal) native "XSLTProcessor_transformToFragment_Callback";
 }
 
 
@@ -9056,7 +9154,7 @@
 
   static forward(_HistoryCrossFrame) native "History_forward_Callback";
 
-  static go(_HistoryCrossFrame, distance) native "History_go_Callback_long";
+  static go(_HistoryCrossFrame, distance) native "History_go_Callback";
 }
 
 class Blink_LocationCrossFrame {
diff --git a/sdk/lib/_internal/compiler/implementation/apiimpl.dart b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
index 27672ab..5670d49 100644
--- a/sdk/lib/_internal/compiler/implementation/apiimpl.dart
+++ b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
@@ -45,6 +45,7 @@
             trustTypeAnnotations:
                 hasOption(options, '--trust-type-annotations'),
             enableMinification: hasOption(options, '--minify'),
+            preserveUris: hasOption(options, '--preserve-uris'),
             enableNativeLiveTypeAnalysis:
                 !hasOption(options, '--disable-native-live-type-analysis'),
             emitJavaScript: !(hasOption(options, '--output-type=dart') ||
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index 41fd4a5..589baba 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -645,6 +645,10 @@
       new ResolutionRegistry.internal(null, new TreeElementMapping(null));
 
   final bool enableMinification;
+
+  /// When `true` emits URIs in the reflection metadata.
+  final bool preserveUris;
+
   final bool enableTypeAssertions;
   final bool enableUserAssertions;
   final bool trustTypeAnnotations;
@@ -934,6 +938,7 @@
             bool disableTypeInferenceFlag: false,
             this.maxConcreteTypeSize: 5,
             this.enableMinification: false,
+            this.preserveUris: false,
             this.enableNativeLiveTypeAnalysis: false,
             bool emitJavaScript: true,
             bool dart2dartMultiFile: false,
diff --git a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart
index 37cf3d2..850ff3c 100644
--- a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart
@@ -16,106 +16,7 @@
 import '../universe/universe.dart' show SelectorKind;
 import 'cps_ir_nodes.dart' as ir;
 
-/**
- * This task iterates through all resolved elements and builds [ir.Node]s. The
- * nodes are stored in the [nodes] map and accessible through [hasIr] and
- * [getIr].
- *
- * The functionality of the IrNodes is added gradually, therefore elements might
- * have an IR or not, depending on the language features that are used. For
- * elements that do have an IR, the tree [ast.Node]s and the [Token]s are not
- * used in the rest of the compilation. This is ensured by setting the element's
- * cached tree to `null` and also breaking the token stream to crash future
- * attempts to parse.
- *
- * The type inferrer works on either IR nodes or tree nodes. The IR nodes are
- * then translated into the SSA form for optimizations and code generation.
- * Long-term, once the IR supports the full language, the backend can be
- * re-implemented to work directly on the IR.
- */
-class IrBuilderTask extends CompilerTask {
-  final Map<Element, ir.FunctionDefinition> nodes =
-      <Element, ir.FunctionDefinition>{};
-
-  IrBuilderTask(Compiler compiler) : super(compiler);
-
-  String get name => 'IR builder';
-
-  bool hasIr(Element element) => nodes.containsKey(element.implementation);
-
-  ir.FunctionDefinition getIr(Element element) => nodes[element.implementation];
-
-  void buildNodes({bool useNewBackend: false}) {
-    if (!irEnabled(useNewBackend: useNewBackend)) return;
-    measure(() {
-      Set<Element> resolved = compiler.enqueuer.resolution.resolvedElements;
-      resolved.forEach((AstElement element) {
-        if (canBuild(element)) {
-          TreeElements elementsMapping = element.resolvedAst.elements;
-          element = element.implementation;
-          compiler.withCurrentElement(element, () {
-            SourceFile sourceFile = elementSourceFile(element);
-            IrBuilderVisitor builder =
-                new IrBuilderVisitor(elementsMapping, compiler, sourceFile);
-            ir.FunctionDefinition function;
-            function = builder.buildFunction(element);
-
-            if (function != null) {
-              nodes[element] = function;
-              compiler.tracer.traceCompilation(element.name, null);
-              compiler.tracer.traceGraph("IR Builder", function);
-            }
-          });
-        }
-      });
-    });
-  }
-
-  bool irEnabled({bool useNewBackend: false}) {
-    // TODO(sigurdm,kmillikin): Support checked-mode checks.
-    return (useNewBackend || const bool.fromEnvironment('USE_NEW_BACKEND')) &&
-        compiler.backend is DartBackend &&
-        !compiler.enableTypeAssertions &&
-        !compiler.enableConcreteTypeInference;
-  }
-
-  bool canBuild(Element element) {
-    FunctionElement function = element.asFunctionElement();
-    // TODO(kmillikin,sigurdm): support lazy field initializers.
-    if (function == null) return false;
-
-    if (!compiler.backend.shouldOutput(function)) return false;
-
-    assert(invariant(element, !function.isNative));
-
-    // TODO(kmillikin,sigurdm): Support constructors.
-    if (function is ConstructorElement) return false;
-
-    return true;
-  }
-
-  bool get inCheckedMode {
-    bool result = false;
-    assert((result = true));
-    return result;
-  }
-
-  SourceFile elementSourceFile(Element element) {
-    if (element is FunctionElement) {
-      FunctionElement functionElement = element;
-      if (functionElement.patch != null) element = functionElement.patch;
-    }
-    return element.compilationUnit.script.file;
-  }
-}
-
-class _GetterElements {
-  ir.Primitive result;
-  ir.Primitive index;
-  ir.Primitive receiver;
-
-  _GetterElements({this.result, this.index, this.receiver}) ;
-}
+part 'cps_ir_builder_visitor.dart';
 
 /// A mapping from variable elements to their compile-time values.
 ///
@@ -165,6 +66,8 @@
 
   ir.Primitive lookup(Element element) {
     assert(!element.isConst);
+    assert(invariant(element, variable2index.containsKey(element),
+                     message: "Unknown variable: $element."));
     return index2value[variable2index[element]];
   }
 
@@ -213,7 +116,7 @@
   List<ir.InvokeContinuation> get invocations => _invocations;
   List<Environment> get environments => _environments;
 
-  void addJump(IrBuilderVisitor builder) {
+  void addJump(IrBuilder builder) {
     ir.InvokeContinuation invoke = new ir.InvokeContinuation.uninitialized();
     builder.add(invoke);
     _invocations.add(invoke);
@@ -224,18 +127,77 @@
   }
 }
 
+/// Function for building nodes in the context of the provided [builder].
+typedef ir.Node SubbuildFunction(IrBuilder builder);
+
+/// Mixin that provides encapsulated access to nested builders.
+abstract class IrBuilderMixin<N> {
+  IrBuilder _irBuilder;
+
+  /// Execute [f] with [builder] as the current builder.
+  withBuilder(IrBuilder builder, f()) {
+    assert(builder != null);
+    IrBuilder prev = _irBuilder;
+    _irBuilder = builder;
+    var result = f();
+    _irBuilder = prev;
+    return result;
+  }
+
+  /// The current builder.
+  IrBuilder get irBuilder {
+    assert(_irBuilder != null);
+    return _irBuilder;
+  }
+
+  /// Visits the [node].
+  ir.Primitive visit(N node);
+
+  /// Builds and returns the [ir.Node] for [node] or returns `null` if
+  /// [node] is `null`.
+  ir.Node build(N node) => node != null ? visit(node) : null;
+
+  /// Returns a closure that takes an [IrBuilder] and builds [node] in its
+  /// context using [build].
+  SubbuildFunction subbuild(N node) {
+    return (IrBuilder builder) => withBuilder(builder, () => build(node));
+  }
+}
+
+/// Shared state between nested builders.
+class IrBuilderSharedState {
+  final ConstantSystem constantSystem;
+
+  /// A stack of collectors for breaks.
+  final List<JumpCollector> breakCollectors = <JumpCollector>[];
+
+  /// A stack of collectors for continues.
+  final List<JumpCollector> continueCollectors = <JumpCollector>[];
+
+  final List<ConstDeclaration> localConstants = <ConstDeclaration>[];
+
+  final Iterable<Entity> closureLocals;
+
+  final FunctionElement currentFunction;
+
+  final ir.Continuation returnContinuation = new ir.Continuation.retrn();
+
+  IrBuilderSharedState(this.constantSystem,
+                       this.currentFunction,
+                       this.closureLocals);
+}
+
 /// A factory for building the cps IR.
 class IrBuilder {
   // TODO(johnniwinther): Make these field final and remove the default values
   // when [IrBuilder] is a property of [IrBuilderVisitor] instead of a mixin.
-  ConstantSystem constantSystem = DART_CONSTANT_SYSTEM;
 
-  ir.Continuation returnContinuation = new ir.Continuation.retrn();
+  final List<ir.Parameter> _parameters = <ir.Parameter>[];
 
-  List<ir.Parameter> _parameters = <ir.Parameter>[];
+  final IrBuilderSharedState state;
 
   /// A map from variable indexes to their values.
-  Environment environment = new Environment.empty();
+  Environment environment;
 
   // The IR builder maintains a context, which is an expression with a hole in
   // it.  The hole represents the focus where new expressions can be added.
@@ -264,11 +226,45 @@
   ir.Expression _root = null;
   ir.Expression _current = null;
 
+  IrBuilder(ConstantSystem constantSystem,
+            FunctionElement currentFunction,
+            Iterable<Entity> closureLocals)
+      : this.state = new IrBuilderSharedState(
+            constantSystem, currentFunction, closureLocals),
+        this.environment = new Environment.empty();
+
+  /// Construct a delimited visitor for visiting a subtree.
+  ///
+  /// The delimited visitor has its own compile-time environment mapping
+  /// local variables to their values, which is initially a copy of the parent
+  /// environment.  It has its own context for building an IR expression, so
+  /// the built expression is not plugged into the parent's context.
+  IrBuilder.delimited(IrBuilder parent)
+      : this.state = parent.state,
+        this.environment = new Environment.from(parent.environment);
+
+  /// Construct a visitor for a recursive continuation.
+  ///
+  /// The recursive continuation builder has fresh parameters (i.e. SSA phis)
+  /// for all the local variables in the parent, because the invocation sites
+  /// of the continuation are not all known when the builder is created.  The
+  /// recursive invocations will be passed values for all the local variables,
+  /// which may be eliminated later if they are redundant---if they take on
+  /// the same value at all invocation sites.
+  IrBuilder.recursive(IrBuilder parent)
+      : this.state = parent.state,
+        this.environment = new Environment.empty() {
+    parent.environment.index2variable.forEach(createParameter);
+  }
+
+
   bool get isOpen => _root == null || _current != null;
 
   /// Create a parameter for [parameterElement] and add it to the current
-  /// environment. If [isClosureVariable] marks whether [parameterElement] is
-  /// accessed from an inner function.
+  /// environment.
+  ///
+  /// [isClosureVariable] marks whether [parameterElement] is accessed from an
+  /// inner function.
   void createParameter(LocalElement parameterElement,
                        {bool isClosureVariable: false}) {
     ir.Parameter parameter = new ir.Parameter(parameterElement);
@@ -280,6 +276,39 @@
     }
   }
 
+  /// Add the constant [variableElement] to the environment with [value] as its
+  /// constant value.
+  void declareLocalConstant(LocalVariableElement variableElement,
+                            ConstantExpression value) {
+    state.localConstants.add(new ConstDeclaration(variableElement, value));
+  }
+
+  /// Add [variableElement] to the environment with [initialValue] as its
+  /// initial value.
+  ///
+  /// [isClosureVariable] marks whether [variableElement] is accessed from an
+  /// inner function.
+  void declareLocalVariable(LocalVariableElement variableElement,
+                            {ir.Primitive initialValue,
+                             bool isClosureVariable: false}) {
+    assert(isOpen);
+    if (initialValue == null) {
+      // TODO(kmillikin): Consider pooling constants.
+      // The initial value is null.
+      initialValue = buildNullLiteral();
+    }
+    if (isClosureVariable) {
+      add(new ir.SetClosureVariable(variableElement,
+                                    initialValue,
+                                    isDeclaration: true));
+    } else {
+      // In case a primitive was introduced for the initializer expression,
+      // use this variable element to help derive a good name for it.
+      initialValue.useElementAsHint(variableElement);
+      environment.extend(variableElement, initialValue);
+    }
+  }
+
   // Plug an expression into the 'hole' in the context being accumulated.  The
   // empty context (just a hole) is represented by root (and current) being
   // null.  Since the hole in the current context is filled by this function,
@@ -302,61 +331,118 @@
     return v;
   }
 
-  ir.Constant makeConst(ConstantExpression exp) {
-    return new ir.Constant(exp);
-  }
-
-  ir.Constant makePrimConst(PrimitiveConstantValue value) {
-    return makeConst(new PrimitiveConstantExpression(value));
-  }
-
-  // TODO(johnniwinther): Build constants directly through [ConstExp] when these
-  // are created from analyzer2dart.
-  ir.Node buildPrimConst(PrimitiveConstantValue constant) {
+  /// Create a constant literal from [constant].
+  ir.Constant buildConstantLiteral(ConstantExpression constant) {
     assert(isOpen);
-    ir.Node prim = makePrimConst(constant);
+    ir.Constant prim = new ir.Constant(constant);
     add(new ir.LetPrim(prim));
     return prim;
   }
 
+  // Helper for building primitive literals.
+  ir.Constant _buildPrimitiveConstant(PrimitiveConstantValue constant) {
+    return buildConstantLiteral(new PrimitiveConstantExpression(constant));
+  }
+
   /// Create an integer literal.
   ir.Constant buildIntegerLiteral(int value) {
-    return buildPrimConst(constantSystem.createInt(value));
+    return _buildPrimitiveConstant(state.constantSystem.createInt(value));
   }
 
   /// Create an double literal.
   ir.Constant buildDoubleLiteral(double value) {
-    return buildPrimConst(constantSystem.createDouble(value));
+    return _buildPrimitiveConstant(state.constantSystem.createDouble(value));
   }
 
   /// Create an bool literal.
   ir.Constant buildBooleanLiteral(bool value) {
-    return buildPrimConst(constantSystem.createBool(value));
+    return _buildPrimitiveConstant(state.constantSystem.createBool(value));
   }
 
   /// Create an null literal.
   ir.Constant buildNullLiteral() {
-    return buildPrimConst(constantSystem.createNull());
+    return _buildPrimitiveConstant(state.constantSystem.createNull());
   }
 
   /// Create a string literal.
   ir.Constant buildStringLiteral(String value) {
-    return buildPrimConst(
-        constantSystem.createString(new ast.DartString.literal(value)));
+    return _buildPrimitiveConstant(
+        state.constantSystem.createString(new ast.DartString.literal(value)));
+  }
+
+  /// Creates a conditional expression with the provided [condition] where the
+  /// then and else expression are created through the [buildThenExpression] and
+  /// [buildElseExpression] functions, respectively.
+  ir.Primitive buildConditional(
+      ir.Primitive condition,
+      ir.Primitive buildThenExpression(IrBuilder builder),
+      ir.Primitive buildElseExpression(IrBuilder builder)) {
+
+    assert(isOpen);
+
+    // The then and else expressions are delimited.
+    IrBuilder thenBuilder = new IrBuilder.delimited(this);
+    IrBuilder elseBuilder = new IrBuilder.delimited(this);
+    ir.Primitive thenValue = buildThenExpression(thenBuilder);
+    ir.Primitive elseValue = buildElseExpression(elseBuilder);
+
+    // Treat the values of the subexpressions as named values in the
+    // environment, so they will be treated as arguments to the join-point
+    // continuation.
+    assert(environment.length == thenBuilder.environment.length);
+    assert(environment.length == elseBuilder.environment.length);
+    thenBuilder.environment.extend(null, thenValue);
+    elseBuilder.environment.extend(null, elseValue);
+    JumpCollector jumps = new JumpCollector(null);
+    jumps.addJump(thenBuilder);
+    jumps.addJump(elseBuilder);
+    ir.Continuation joinContinuation =
+        createJoin(environment.length + 1, jumps);
+
+    // Build the term
+    //   let cont join(x, ..., result) = [] in
+    //   let cont then() = [[thenPart]]; join(v, ...) in
+    //   let cont else() = [[elsePart]]; join(v, ...) in
+    //     if condition (then, else)
+    ir.Continuation thenContinuation = new ir.Continuation([]);
+    ir.Continuation elseContinuation = new ir.Continuation([]);
+    thenContinuation.body = thenBuilder._root;
+    elseContinuation.body = elseBuilder._root;
+    add(new ir.LetCont(joinContinuation,
+            new ir.LetCont(thenContinuation,
+                new ir.LetCont(elseContinuation,
+                    new ir.Branch(new ir.IsTrue(condition),
+                                  thenContinuation,
+                                  elseContinuation)))));
+    return (thenValue == elseValue)
+        ? thenValue
+        : joinContinuation.parameters.last;
+
   }
 
   /// Create a get access of [local].
-  ir.Primitive buildGetLocal(Element local) {
+  ir.Primitive buildLocalGet(Element local) {
     assert(isOpen);
     return environment.lookup(local);
   }
 
   /// Create a get access of the static [element].
-  ir.Primitive buildGetStatic(Element element, Selector selector) {
+  ir.Primitive buildStaticGet(Element element, Selector selector) {
     assert(isOpen);
     assert(selector.isGetter);
     return continueWithExpression(
-        (k) => new ir.InvokeStatic(element, selector, k, []));
+        (k) => new ir.InvokeStatic(
+            element, selector, k, const <ir.Definition>[]));
+  }
+
+  /// Create a dynamic get access on [receiver] where the property is defined
+  /// by the getter [selector].
+  ir.Primitive buildDynamicGet(ir.Primitive receiver, Selector selector) {
+    assert(isOpen);
+    assert(selector.isGetter);
+    return continueWithExpression(
+        (k) => new ir.InvokeMethod(
+            receiver, selector, k, const <ir.Definition>[]));
   }
 
   /**
@@ -366,9 +452,8 @@
    */
   void ensureReturn() {
     if (!isOpen) return;
-    ir.Constant constant = makePrimConst(constantSystem.createNull());
-    add(new ir.LetPrim(constant));
-    add(new ir.InvokeContinuation(returnContinuation, [constant]));
+    ir.Constant constant = buildNullLiteral();
+    add(new ir.InvokeContinuation(state.returnContinuation, [constant]));
     _current = null;
   }
 
@@ -378,22 +463,45 @@
   /// [createParameter].
   ir.FunctionDefinition buildFunctionDefinition(
       FunctionElement element,
-      List<ConstDeclaration> constants,
       List<ConstantExpression> defaults) {
     if (!element.isAbstract) {
       ensureReturn();
       return new ir.FunctionDefinition(
-          element, returnContinuation, _parameters, _root, constants, defaults);
+          element, state.returnContinuation, _parameters, _root,
+          state.localConstants, defaults);
     } else {
       assert(invariant(element, _root == null,
           message: "Non-empty body for abstract method $element: $_root"));
-      assert(invariant(element, constants.isEmpty,
-          message: "Local constants for abstract method $element: $constants"));
+      assert(invariant(element, state.localConstants.isEmpty,
+          message: "Local constants for abstract method $element: "
+                   "${state.localConstants}"));
       return new ir.FunctionDefinition.abstract(
                 element, _parameters, defaults);
     }
   }
 
+
+  /// Create a super invocation with method name and arguments structure defined
+  /// by [selector] and argument values defined by [arguments].
+  ir.Primitive buildSuperInvocation(Selector selector,
+                                    List<ir.Definition> arguments) {
+    assert(isOpen);
+    return continueWithExpression(
+        (k) => new ir.InvokeSuperMethod(selector, k, arguments));
+
+  }
+
+  /// Create a dynamic invocation on [receiver] with method name and arguments
+  /// structure defined by [selector] and argument values defined by
+  /// [arguments].
+  ir.Primitive buildDynamicInvocation(ir.Definition receiver,
+                                      Selector selector,
+                                      List<ir.Definition> arguments) {
+    assert(isOpen);
+    return continueWithExpression(
+        (k) => new ir.InvokeMethod(receiver, selector, k, arguments));
+  }
+
   /// Create a static invocation of [element] with arguments structure defined
   /// by [selector] and argument values defined by [arguments].
   ir.Primitive buildStaticInvocation(Element element,
@@ -403,6 +511,77 @@
         (k) => new ir.InvokeStatic(element, selector, k, arguments));
   }
 
+  /// Creates an if-then-else statement with the provided [condition] where the
+  /// then and else branches are created through the [buildThenPart] and
+  /// [buildElsePart] functions, respectively.
+  ///
+  /// An if-then statement is created if [buildElsePart] is a no-op.
+  // TODO(johnniwinther): Unify implementation with [buildConditional] and
+  // [_buildLogicalOperator].
+  void buildIf(ir.Primitive condition,
+               void buildThenPart(IrBuilder builder),
+               void buildElsePart(IrBuilder builder)) {
+    assert(isOpen);
+
+    // The then and else parts are delimited.
+    IrBuilder thenBuilder = new IrBuilder.delimited(this);
+    IrBuilder elseBuilder = new IrBuilder.delimited(this);
+    buildThenPart(thenBuilder);
+    buildElsePart(elseBuilder);
+
+    // Build the term
+    // (Result =) let cont then() = [[thenPart]] in
+    //            let cont else() = [[elsePart]] in
+    //              if condition (then, else)
+    ir.Continuation thenContinuation = new ir.Continuation([]);
+    ir.Continuation elseContinuation = new ir.Continuation([]);
+    ir.Expression letElse =
+        new ir.LetCont(elseContinuation,
+          new ir.Branch(new ir.IsTrue(condition),
+                        thenContinuation,
+                        elseContinuation));
+    ir.Expression letThen = new ir.LetCont(thenContinuation, letElse);
+    ir.Expression result = letThen;
+
+    ir.Continuation joinContinuation;  // Null if there is no join.
+    if (thenBuilder.isOpen && elseBuilder.isOpen) {
+      // There is a join-point continuation.  Build the term
+      // 'let cont join(x, ...) = [] in Result' and plug invocations of the
+      // join-point continuation into the then and else continuations.
+      JumpCollector jumps = new JumpCollector(null);
+      jumps.addJump(thenBuilder);
+      jumps.addJump(elseBuilder);
+      joinContinuation = createJoin(environment.length, jumps);
+      result = new ir.LetCont(joinContinuation, result);
+    }
+
+    // The then or else term root could be null, but not both.  If there is
+    // a join then an InvokeContinuation was just added to both of them.  If
+    // there is no join, then at least one of them is closed and thus has a
+    // non-null root by the definition of the predicate isClosed.  In the
+    // case that one of them is null, it must be the only one that is open
+    // and thus contains the new hole in the context.  This case is handled
+    // after the branch is plugged into the current hole.
+    thenContinuation.body = thenBuilder._root;
+    elseContinuation.body = elseBuilder._root;
+
+    add(result);
+    if (joinContinuation == null) {
+      // At least one subexpression is closed.
+      if (thenBuilder.isOpen) {
+        _current =
+            (thenBuilder._root == null) ? letThen : thenBuilder._current;
+        environment = thenBuilder.environment;
+      } else if (elseBuilder.isOpen) {
+        _current =
+            (elseBuilder._root == null) ? letElse : elseBuilder._current;
+        environment = elseBuilder.environment;
+      } else {
+        _current = null;
+      }
+    }
+  }
+
   /// Create a return statement `return value;` or `return;` if [value] is
   /// null.
   void buildReturn([ir.Primitive value]) {
@@ -412,202 +591,157 @@
     // Return without a subexpression is translated as if it were return null.
     assert(isOpen);
     if (value == null) {
-      value = makePrimConst(constantSystem.createNull());
-      add(new ir.LetPrim(value));
+      value = buildNullLiteral();
     }
-    add(new ir.InvokeContinuation(returnContinuation, [value]));
+    add(new ir.InvokeContinuation(state.returnContinuation, [value]));
     _current = null;
   }
 
-}
-
-/**
- * A tree visitor that builds [IrNodes]. The visit methods add statements using
- * to the [builder] and return the last added statement for trees that represent
- * an expression.
- */
-class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive> with IrBuilder {
-  final Compiler compiler;
-  final SourceFile sourceFile;
-
-  // In SSA terms, join-point continuation parameters are the phis and the
-  // continuation invocation arguments are the corresponding phi inputs.  To
-  // support name introduction and renaming for source level variables, we use
-  // nested (delimited) visitors for constructing subparts of the IR that will
-  // need renaming.  Each source variable is assigned an index.
-  //
-  // Each nested visitor maintains a list of free variable uses in the body.
-  // These are implemented as a list of parameters, each with their own use
-  // list of references.  When the delimited subexpression is plugged into the
-  // surrounding context, the free occurrences can be captured or become free
-  // occurrences in the next outer delimited subexpression.
-  //
-  // Each nested visitor maintains a list that maps indexes of variables
-  // assigned in the delimited subexpression to their reaching definition ---
-  // that is, the definition in effect at the hole in 'current'.  These are
-  // used to determine if a join-point continuation needs to be passed
-  // arguments, and what the arguments are.
-
-  /// A stack of collectors for breaks.
-  final List<JumpCollector> breakCollectors;
-  /// A stack of collectors for continues.
-  final List<JumpCollector> continueCollectors;
-
-  final List<ConstDeclaration> localConstants;
-
-  FunctionElement currentFunction;
-  final DetectClosureVariables closureLocals;
-
-  /// Construct a top-level visitor.
-  IrBuilderVisitor(TreeElements elements, this.compiler, this.sourceFile)
-      : breakCollectors = <JumpCollector>[],
-        continueCollectors = <JumpCollector>[],
-        localConstants = <ConstDeclaration>[],
-        closureLocals = new DetectClosureVariables(elements),
-        super(elements) {
-    constantSystem = compiler.backend.constantSystem;
-  }
-
-  /// Construct a delimited visitor for visiting a subtree.
-  ///
-  /// The delimited visitor has its own compile-time environment mapping
-  /// local variables to their values, which is initially a copy of the parent
-  /// environment.  It has its own context for building an IR expression, so
-  /// the built expression is not plugged into the parent's context.
-  IrBuilderVisitor.delimited(IrBuilderVisitor parent)
-      : compiler = parent.compiler,
-        sourceFile = parent.sourceFile,
-        breakCollectors = parent.breakCollectors,
-        continueCollectors = parent.continueCollectors,
-        localConstants = parent.localConstants,
-        currentFunction = parent.currentFunction,
-        closureLocals = parent.closureLocals,
-        super(parent.elements) {
-    constantSystem = parent.constantSystem;
-    returnContinuation = parent.returnContinuation;
-    environment = new Environment.from(parent.environment);
-  }
-
-  /// Construct a visitor for a recursive continuation.
-  ///
-  /// The recursive continuation builder has fresh parameters (i.e. SSA phis)
-  /// for all the local variables in the parent, because the invocation sites
-  /// of the continuation are not all known when the builder is created.  The
-  /// recursive invocations will be passed values for all the local variables,
-  /// which may be eliminated later if they are redundant---if they take on
-  /// the same value at all invocation sites.
-  IrBuilderVisitor.recursive(IrBuilderVisitor parent)
-      : compiler = parent.compiler,
-        sourceFile = parent.sourceFile,
-        breakCollectors = parent.breakCollectors,
-        continueCollectors = parent.continueCollectors,
-        localConstants = parent.localConstants,
-        currentFunction = parent.currentFunction,
-        closureLocals = parent.closureLocals,
-        super(parent.elements) {
-    constantSystem = parent.constantSystem;
-    returnContinuation = parent.returnContinuation;
-    parent.environment.index2variable.forEach(createParameter);
-  }
-
-  /**
-   * Builds the [ir.FunctionDefinition] for a function element. In case the
-   * function uses features that cannot be expressed in the IR, this function
-   * returns `null`.
-   */
-  ir.FunctionDefinition buildFunction(FunctionElement functionElement) {
-    return nullIfGiveup(() => buildFunctionInternal(functionElement));
-  }
-
-  ir.FunctionDefinition buildFunctionInternal(FunctionElement element) {
-    assert(invariant(element, element.isImplementation));
-    currentFunction = element;
-    ast.FunctionExpression function = element.node;
-    assert(function != null);
-    assert(!function.modifiers.isExternal);
-    assert(elements[function] != null);
-
-    closureLocals.visit(function);
-
-    _root = _current = null;
-
-    FunctionSignature signature = element.functionSignature;
-    signature.orderedForEachParameter((ParameterElement parameterElement) {
-      createParameter(parameterElement,
-                      isClosureVariable: isClosureVariable(parameterElement));
-    });
-
-    List<ConstantExpression> defaults = new List<ConstantExpression>();
-    signature.orderedOptionalParameters.forEach((ParameterElement element) {
-      defaults.add(getConstantForVariable(element));
-    });
-
-    visit(function.body);
-    return buildFunctionDefinition(element, localConstants, defaults);
-  }
-
-  ir.Primitive visit(ast.Node node) => node.accept(this);
-
-  // ==== Statements ====
-  // Build(Block(stamements), C) = C'
-  //   where C' = statements.fold(Build, C)
-  ir.Primitive visitBlock(ast.Block node) {
-    assert(isOpen);
-    for (ast.Node n in node.statements.nodes) {
-      visit(n);
-      if (!isOpen) return null;
-    }
-    return null;
-  }
-
   // Build(BreakStatement L, C) = C[InvokeContinuation(...)]
   //
   // The continuation and arguments are filled in later after translating
   // the body containing the break.
-  ir.Primitive visitBreakStatement(ast.BreakStatement node) {
-    assert(isOpen);
-    JumpTarget target = elements.getTargetOf(node);
-    for (JumpCollector collector in breakCollectors) {
-      if (target == collector.target) {
-        collector.addJump(this);
-        return null;
-      }
-    }
-    compiler.internalError(node, "'break' target not found");
-    return null;
+  bool buildBreak(JumpTarget target) {
+    return buildJumpInternal(target, state.breakCollectors);
   }
 
   // Build(ContinueStatement L, C) = C[InvokeContinuation(...)]
   //
   // The continuation and arguments are filled in later after translating
   // the body containing the continue.
-  ir.Primitive visitContinueStatement(ast.ContinueStatement node) {
+  bool buildContinue(JumpTarget target) {
+    return buildJumpInternal(target, state.continueCollectors);
+  }
+
+  bool buildJumpInternal(JumpTarget target,
+                         Iterable<JumpCollector> collectors) {
     assert(isOpen);
-    JumpTarget target = elements.getTargetOf(node);
-    for (JumpCollector collector in continueCollectors) {
+    for (JumpCollector collector in collectors) {
       if (target == collector.target) {
         collector.addJump(this);
-        return null;
+        return true;
       }
     }
-    compiler.internalError(node, "'continue' target not found");
-    return null;
+    return false;
   }
 
-  // Build(EmptyStatement, C) = C
-  ir.Primitive visitEmptyStatement(ast.EmptyStatement node) {
-    assert(isOpen);
-    return null;
+  /// Create a negation of [condition].
+  ir.Primitive buildNegation(ir.Primitive condition) {
+    // ! e is translated as e ? false : true
+
+    // Add a continuation parameter for the result of the expression.
+    ir.Parameter resultParameter = new ir.Parameter(null);
+
+    ir.Continuation joinContinuation = new ir.Continuation([resultParameter]);
+    ir.Continuation thenContinuation = new ir.Continuation([]);
+    ir.Continuation elseContinuation = new ir.Continuation([]);
+
+    ir.Constant makeBoolConstant(bool value) {
+      return new ir.Constant(new PrimitiveConstantExpression(
+          state.constantSystem.createBool(value)));
+    }
+
+    ir.Constant trueConstant = makeBoolConstant(true);
+    ir.Constant falseConstant = makeBoolConstant(false);
+
+    thenContinuation.body = new ir.LetPrim(falseConstant)
+        ..plug(new ir.InvokeContinuation(joinContinuation, [falseConstant]));
+    elseContinuation.body = new ir.LetPrim(trueConstant)
+        ..plug(new ir.InvokeContinuation(joinContinuation, [trueConstant]));
+
+    add(new ir.LetCont(joinContinuation,
+          new ir.LetCont(thenContinuation,
+            new ir.LetCont(elseContinuation,
+              new ir.Branch(new ir.IsTrue(condition),
+                            thenContinuation,
+                            elseContinuation)))));
+    return resultParameter;
   }
 
-  // Build(ExpressionStatement(e), C) = C'
-  //   where (C', _) = Build(e, C)
-  ir.Primitive visitExpressionStatement(ast.ExpressionStatement node) {
-    assert(isOpen);
-    visit(node.expression);
-    return null;
-  }
+  /// Create a lazy and/or expression. [leftValue] is the value of the left
+  /// operand and [buildRightValue] is called to process the value of the right
+  /// operand in the context of its own [IrBuilder].
+  ir.Primitive buildLogicalOperator(
+      ir.Primitive leftValue,
+      ir.Primitive buildRightValue(IrBuilder builder),
+      {bool isLazyOr: false}) {
+    // e0 && e1 is translated as if e0 ? (e1 == true) : false.
+    // e0 || e1 is translated as if e0 ? true : (e1 == true).
+    // The translation must convert both e0 and e1 to booleans and handle
+    // local variable assignments in e1.
 
+    IrBuilder rightBuilder = new IrBuilder.delimited(this);
+    ir.Primitive rightValue = buildRightValue(rightBuilder);
+    // A dummy empty target for the branch on the left subexpression branch.
+    // This enables using the same infrastructure for join-point continuations
+    // as in visitIf and visitConditional.  It will hold a definition of the
+    // appropriate constant and an invocation of the join-point continuation.
+    IrBuilder emptyBuilder = new IrBuilder.delimited(this);
+    // Dummy empty targets for right true and right false.  They hold
+    // definitions of the appropriate constant and an invocation of the
+    // join-point continuation.
+    IrBuilder rightTrueBuilder = new IrBuilder.delimited(rightBuilder);
+    IrBuilder rightFalseBuilder = new IrBuilder.delimited(rightBuilder);
+
+    // If we don't evaluate the right subexpression, the value of the whole
+    // expression is this constant.
+    ir.Constant leftBool = emptyBuilder.buildBooleanLiteral(isLazyOr);
+    // If we do evaluate the right subexpression, the value of the expression
+    // is a true or false constant.
+    ir.Constant rightTrue = rightTrueBuilder.buildBooleanLiteral(true);
+    ir.Constant rightFalse = rightFalseBuilder.buildBooleanLiteral(false);
+
+    // Treat the result values as named values in the environment, so they
+    // will be treated as arguments to the join-point continuation.
+    assert(environment.length == emptyBuilder.environment.length);
+    assert(environment.length == rightTrueBuilder.environment.length);
+    assert(environment.length == rightFalseBuilder.environment.length);
+    emptyBuilder.environment.extend(null, leftBool);
+    rightTrueBuilder.environment.extend(null, rightTrue);
+    rightFalseBuilder.environment.extend(null, rightFalse);
+
+    // Wire up two continuations for the left subexpression, two continuations
+    // for the right subexpression, and a three-way join continuation.
+    JumpCollector jumps = new JumpCollector(null);
+    jumps.addJump(emptyBuilder);
+    jumps.addJump(rightTrueBuilder);
+    jumps.addJump(rightFalseBuilder);
+    ir.Continuation joinContinuation =
+        createJoin(environment.length + 1, jumps);
+    ir.Continuation leftTrueContinuation = new ir.Continuation([]);
+    ir.Continuation leftFalseContinuation = new ir.Continuation([]);
+    ir.Continuation rightTrueContinuation = new ir.Continuation([]);
+    ir.Continuation rightFalseContinuation = new ir.Continuation([]);
+    rightTrueContinuation.body = rightTrueBuilder._root;
+    rightFalseContinuation.body = rightFalseBuilder._root;
+    // The right subexpression has two continuations.
+    rightBuilder.add(
+        new ir.LetCont(rightTrueContinuation,
+            new ir.LetCont(rightFalseContinuation,
+                new ir.Branch(new ir.IsTrue(rightValue),
+                              rightTrueContinuation,
+                              rightFalseContinuation))));
+    // Depending on the operator, the left subexpression's continuations are
+    // either the right subexpression or an invocation of the join-point
+    // continuation.
+    if (isLazyOr) {
+      leftTrueContinuation.body = emptyBuilder._root;
+      leftFalseContinuation.body = rightBuilder._root;
+    } else {
+      leftTrueContinuation.body = rightBuilder._root;
+      leftFalseContinuation.body = emptyBuilder._root;
+    }
+
+    add(new ir.LetCont(joinContinuation,
+            new ir.LetCont(leftTrueContinuation,
+                new ir.LetCont(leftFalseContinuation,
+                    new ir.Branch(new ir.IsTrue(leftValue),
+                                  leftTrueContinuation,
+                                  leftFalseContinuation)))));
+    // There is always a join parameter for the result value, because it
+    // is different on at least two paths.
+    return joinContinuation.parameters.last;
+  }
 
   /// Create a non-recursive join-point continuation.
   ///
@@ -713,1250 +847,4 @@
 
     return join;
   }
-
-  /// Invoke a join-point continuation that contains arguments for all local
-  /// variables.
-  ///
-  /// Given the continuation and a list of uninitialized invocations, fill
-  /// in each invocation with the continuation and appropriate arguments.
-  void invokeFullJoin(ir.Continuation join,
-                      JumpCollector jumps,
-                      {recursive: false}) {
-    join.isRecursive = recursive;
-    for (int i = 0; i < jumps.length; ++i) {
-      Environment currentEnvironment = jumps.environments[i];
-      ir.InvokeContinuation invoke = jumps.invocations[i];
-      invoke.continuation = new ir.Reference(join);
-      invoke.arguments = new List<ir.Reference>.generate(
-          join.parameters.length,
-          (i) => new ir.Reference(currentEnvironment[i]));
-      invoke.isRecursive = recursive;
-    }
-  }
-
-  ir.Primitive visitFor(ast.For node) {
-    assert(isOpen);
-    // TODO(kmillikin,sigurdm): Handle closure variables declared in a for-loop.
-    if (node.initializer is ast.VariableDefinitions) {
-      ast.VariableDefinitions definitions = node.initializer;
-      for (ast.Node definition in definitions.definitions.nodes) {
-        Element element = elements[definition];
-        if (isClosureVariable(element)) {
-          return giveup(definition, 'Closure variable in for loop initializer');
-        }
-      }
-    }
-
-    // For loops use four named continuations: the entry to the condition,
-    // the entry to the body, the loop exit, and the loop successor (break).
-    // The CPS translation of
-    // [[for (initializer; condition; update) body; successor]] is:
-    //
-    // [[initializer]];
-    // let cont loop(x, ...) =
-    //     let prim cond = [[condition]] in
-    //     let cont break() = [[successor]] in
-    //     let cont exit() = break(v, ...) in
-    //     let cont body() =
-    //       let cont continue(x, ...) = [[update]]; loop(v, ...) in
-    //       [[body]]; continue(v, ...) in
-    //     branch cond (body, exit) in
-    // loop(v, ...)
-    //
-    // If there are no breaks in the body, the break continuation is inlined
-    // in the exit continuation (i.e., the translation of the successor
-    // statement occurs in the exit continuation).  If there is only one
-    // invocation of the continue continuation (i.e., no continues in the
-    // body), the continue continuation is inlined in the body.
-
-    if (node.initializer != null) visit(node.initializer);
-
-    IrBuilderVisitor condBuilder = new IrBuilderVisitor.recursive(this);
-    ir.Primitive condition;
-    if (node.condition == null) {
-      // If the condition is empty then the body is entered unconditionally.
-      condition = makePrimConst(constantSystem.createBool(true));
-      condBuilder.add(new ir.LetPrim(condition));
-    } else {
-      condition = condBuilder.visit(node.condition);
-    }
-
-    JumpTarget target = elements.getTargetDefinition(node);
-    JumpCollector breakCollector = new JumpCollector(target);
-    JumpCollector continueCollector = new JumpCollector(target);
-    breakCollectors.add(breakCollector);
-    continueCollectors.add(continueCollector);
-
-    IrBuilderVisitor bodyBuilder = new IrBuilderVisitor.delimited(condBuilder);
-    bodyBuilder.visit(node.body);
-    assert(breakCollectors.last == breakCollector);
-    assert(continueCollectors.last == continueCollector);
-    breakCollectors.removeLast();
-    continueCollectors.removeLast();
-
-    // The binding of the continue continuation should occur as late as
-    // possible, that is, at the nearest common ancestor of all the continue
-    // sites in the body.  However, that is difficult to compute here, so it
-    // is instead placed just outside the body of the body continuation.
-    bool hasContinues = !continueCollector.isEmpty;
-    IrBuilderVisitor updateBuilder = hasContinues
-        ? new IrBuilderVisitor.recursive(condBuilder)
-        : bodyBuilder;
-    for (ast.Node n in node.update) {
-      if (!updateBuilder.isOpen) break;
-      updateBuilder.visit(n);
-    }
-
-    // Create body entry and loop exit continuations and a branch to them.
-    ir.Continuation bodyContinuation = new ir.Continuation([]);
-    ir.Continuation exitContinuation = new ir.Continuation([]);
-    ir.LetCont branch =
-        new ir.LetCont(exitContinuation,
-            new ir.LetCont(bodyContinuation,
-                new ir.Branch(new ir.IsTrue(condition),
-                              bodyContinuation,
-                              exitContinuation)));
-    // If there are breaks in the body, then there must be a join-point
-    // continuation for the normal exit and the breaks.
-    bool hasBreaks = !breakCollector.isEmpty;
-    ir.LetCont letJoin;
-    if (hasBreaks) {
-      letJoin = new ir.LetCont(null, branch);
-      condBuilder.add(letJoin);
-      condBuilder._current = branch;
-    } else {
-      condBuilder.add(branch);
-    }
-    ir.Continuation continueContinuation;
-    if (hasContinues) {
-      // If there are continues in the body, we need a named continue
-      // continuation as a join point.
-      continueContinuation = new ir.Continuation(updateBuilder._parameters);
-      if (bodyBuilder.isOpen) continueCollector.addJump(bodyBuilder);
-      invokeFullJoin(continueContinuation, continueCollector);
-    }
-    ir.Continuation loopContinuation =
-        new ir.Continuation(condBuilder._parameters);
-    if (updateBuilder.isOpen) {
-      JumpCollector backEdges = new JumpCollector(null);
-      backEdges.addJump(updateBuilder);
-      invokeFullJoin(loopContinuation, backEdges, recursive: true);
-    }
-
-    // Fill in the body and possible continue continuation bodies.  Do this
-    // only after it is guaranteed that they are not empty.
-    if (hasContinues) {
-      continueContinuation.body = updateBuilder._root;
-      bodyContinuation.body =
-          new ir.LetCont(continueContinuation, bodyBuilder._root);
-    } else {
-      bodyContinuation.body = bodyBuilder._root;
-    }
-
-    loopContinuation.body = condBuilder._root;
-    add(new ir.LetCont(loopContinuation,
-            new ir.InvokeContinuation(loopContinuation,
-                                      environment.index2value)));
-    if (hasBreaks) {
-      _current = branch;
-      environment = condBuilder.environment;
-      breakCollector.addJump(this);
-      letJoin.continuation = createJoin(environment.length, breakCollector);
-      _current = letJoin;
-    } else {
-      _current = condBuilder._current;
-      environment = condBuilder.environment;
-    }
-    return null;
-  }
-
-  ir.Primitive visitIf(ast.If node) {
-    assert(isOpen);
-    ir.Primitive condition = visit(node.condition);
-
-    // The then and else parts are delimited.
-    IrBuilderVisitor thenBuilder = new IrBuilderVisitor.delimited(this);
-    IrBuilderVisitor elseBuilder = new IrBuilderVisitor.delimited(this);
-    thenBuilder.visit(node.thenPart);
-    if (node.hasElsePart) elseBuilder.visit(node.elsePart);
-
-    // Build the term
-    // (Result =) let cont then() = [[thenPart]] in
-    //            let cont else() = [[elsePart]] in
-    //              if condition (then, else)
-    ir.Continuation thenContinuation = new ir.Continuation([]);
-    ir.Continuation elseContinuation = new ir.Continuation([]);
-    ir.Expression letElse =
-        new ir.LetCont(elseContinuation,
-          new ir.Branch(new ir.IsTrue(condition),
-                        thenContinuation,
-                        elseContinuation));
-    ir.Expression letThen = new ir.LetCont(thenContinuation, letElse);
-    ir.Expression result = letThen;
-
-    ir.Continuation joinContinuation;  // Null if there is no join.
-    if (thenBuilder.isOpen && elseBuilder.isOpen) {
-      // There is a join-point continuation.  Build the term
-      // 'let cont join(x, ...) = [] in Result' and plug invocations of the
-      // join-point continuation into the then and else continuations.
-      JumpCollector jumps = new JumpCollector(null);
-      jumps.addJump(thenBuilder);
-      jumps.addJump(elseBuilder);
-      joinContinuation = createJoin(environment.length, jumps);
-      result = new ir.LetCont(joinContinuation, result);
-    }
-
-    // The then or else term root could be null, but not both.  If there is
-    // a join then an InvokeContinuation was just added to both of them.  If
-    // there is no join, then at least one of them is closed and thus has a
-    // non-null root by the definition of the predicate isClosed.  In the
-    // case that one of them is null, it must be the only one that is open
-    // and thus contains the new hole in the context.  This case is handled
-    // after the branch is plugged into the current hole.
-    thenContinuation.body = thenBuilder._root;
-    elseContinuation.body = elseBuilder._root;
-
-    add(result);
-    if (joinContinuation == null) {
-      // At least one subexpression is closed.
-      if (thenBuilder.isOpen) {
-        _current = (thenBuilder._root == null) ? letThen : thenBuilder._current;
-        environment = thenBuilder.environment;
-      } else if (elseBuilder.isOpen) {
-        _current = (elseBuilder._root == null) ? letElse : elseBuilder._current;
-        environment = elseBuilder.environment;
-      } else {
-        _current = null;
-      }
-    }
-    return null;
-  }
-
-  ir.Primitive visitLabeledStatement(ast.LabeledStatement node) {
-    ast.Statement body = node.statement;
-    return body is ast.Loop
-        ? visit(body)
-        : giveup(node, 'labeled statement');
-  }
-
-  ir.Primitive visitWhile(ast.While node) {
-    assert(isOpen);
-    // While loops use four named continuations: the entry to the body, the
-    // loop exit, the loop back edge (continue), and the loop exit (break).
-    // The CPS translation of [[while (condition) body; successor]] is:
-    //
-    // let cont continue(x, ...) =
-    //     let prim cond = [[condition]] in
-    //     let cont break() = [[successor]] in
-    //     let cont exit() = break(v, ...) in
-    //     let cont body() = [[body]]; continue(v, ...) in
-    //     branch cond (body, exit) in
-    // continue(v, ...)
-    //
-    // If there are no breaks in the body, the break continuation is inlined
-    // in the exit continuation (i.e., the translation of the successor
-    // statement occurs in the exit continuation).
-
-    // The condition and body are delimited.
-    IrBuilderVisitor condBuilder = new IrBuilderVisitor.recursive(this);
-    ir.Primitive condition = condBuilder.visit(node.condition);
-
-    JumpTarget target = elements.getTargetDefinition(node);
-    JumpCollector breakCollector = new JumpCollector(target);
-    JumpCollector continueCollector = new JumpCollector(target);
-    breakCollectors.add(breakCollector);
-    continueCollectors.add(continueCollector);
-
-    IrBuilderVisitor bodyBuilder = new IrBuilderVisitor.delimited(condBuilder);
-    bodyBuilder.visit(node.body);
-    assert(breakCollectors.last == breakCollector);
-    assert(continueCollectors.last == continueCollector);
-    breakCollectors.removeLast();
-    continueCollectors.removeLast();
-
-    // Create body entry and loop exit continuations and a branch to them.
-    ir.Continuation bodyContinuation = new ir.Continuation([]);
-    ir.Continuation exitContinuation = new ir.Continuation([]);
-    ir.LetCont branch =
-        new ir.LetCont(exitContinuation,
-            new ir.LetCont(bodyContinuation,
-                new ir.Branch(new ir.IsTrue(condition),
-                              bodyContinuation,
-                              exitContinuation)));
-    // If there are breaks in the body, then there must be a join-point
-    // continuation for the normal exit and the breaks.
-    bool hasBreaks = !breakCollector.isEmpty;
-    ir.LetCont letJoin;
-    if (hasBreaks) {
-      letJoin = new ir.LetCont(null, branch);
-      condBuilder.add(letJoin);
-      condBuilder._current = branch;
-    } else {
-      condBuilder.add(branch);
-    }
-    ir.Continuation loopContinuation =
-        new ir.Continuation(condBuilder._parameters);
-    if (bodyBuilder.isOpen) continueCollector.addJump(bodyBuilder);
-    invokeFullJoin(loopContinuation, continueCollector, recursive: true);
-    bodyContinuation.body = bodyBuilder._root;
-
-    loopContinuation.body = condBuilder._root;
-    add(new ir.LetCont(loopContinuation,
-            new ir.InvokeContinuation(loopContinuation,
-                                      environment.index2value)));
-    if (hasBreaks) {
-      _current = branch;
-      environment = condBuilder.environment;
-      breakCollector.addJump(this);
-      letJoin.continuation = createJoin(environment.length, breakCollector);
-      _current = letJoin;
-    } else {
-      _current = condBuilder._current;
-      environment = condBuilder.environment;
-    }
-    return null;
-  }
-
-  ir.Primitive visitForIn(ast.ForIn node) {
-    // The for-in loop
-    //
-    // for (a in e) s;
-    //
-    // Is compiled analogously to:
-    //
-    // a = e.iterator;
-    // while (a.moveNext()) {
-    //   var n0 = a.current;
-    //   s;
-    // }
-
-    // The condition and body are delimited.
-    IrBuilderVisitor condBuilder = new IrBuilderVisitor.recursive(this);
-
-    ir.Primitive expressionReceiver = visit(node.expression);
-    List<ir.Primitive> emptyArguments = new List<ir.Primitive>();
-
-    ir.Parameter iterator = new ir.Parameter(null);
-    ir.Continuation iteratorInvoked = new ir.Continuation([iterator]);
-    add(new ir.LetCont(iteratorInvoked,
-        new ir.InvokeMethod(expressionReceiver,
-            new Selector.getter("iterator", null), iteratorInvoked,
-            emptyArguments)));
-
-    ir.Parameter condition = new ir.Parameter(null);
-    ir.Continuation moveNextInvoked = new ir.Continuation([condition]);
-    condBuilder.add(new ir.LetCont(moveNextInvoked,
-        new ir.InvokeMethod(iterator,
-            new Selector.call("moveNext", null, 0),
-            moveNextInvoked, emptyArguments)));
-
-    JumpTarget target = elements.getTargetDefinition(node);
-    JumpCollector breakCollector = new JumpCollector(target);
-    JumpCollector continueCollector = new JumpCollector(target);
-    breakCollectors.add(breakCollector);
-    continueCollectors.add(continueCollector);
-
-    IrBuilderVisitor bodyBuilder = new IrBuilderVisitor.delimited(condBuilder);
-    ast.Node identifier = node.declaredIdentifier;
-    Element variableElement = elements.getForInVariable(node);
-    Selector selector = elements.getSelector(identifier);
-
-    // node.declaredIdentifier can be either an ast.VariableDefinitions
-    // (defining a new local variable) or a send designating some existing
-    // variable.
-    ast.Node declaredIdentifier = node.declaredIdentifier;
-
-    if (declaredIdentifier is ast.VariableDefinitions) {
-      bodyBuilder.visit(declaredIdentifier);
-    }
-
-    ir.Parameter currentValue = new ir.Parameter(null);
-    ir.Continuation currentInvoked = new ir.Continuation([currentValue]);
-    bodyBuilder.add(new ir.LetCont(currentInvoked,
-        new ir.InvokeMethod(iterator, new Selector.getter("current", null),
-            currentInvoked, emptyArguments)));
-    if (Elements.isLocal(variableElement)) {
-      bodyBuilder.setLocal(variableElement, currentValue);
-    } else if (Elements.isStaticOrTopLevel(variableElement)) {
-      bodyBuilder.setStatic(variableElement, selector, currentValue);
-    } else {
-      ir.Primitive receiver = bodyBuilder.lookupThis();
-      bodyBuilder.setDynamic(null, receiver, selector, currentValue);
-    }
-
-    bodyBuilder.visit(node.body);
-    assert(breakCollectors.last == breakCollector);
-    assert(continueCollectors.last == continueCollector);
-    breakCollectors.removeLast();
-    continueCollectors.removeLast();
-
-    // Create body entry and loop exit continuations and a branch to them.
-    ir.Continuation bodyContinuation = new ir.Continuation([]);
-    ir.Continuation exitContinuation = new ir.Continuation([]);
-    ir.LetCont branch =
-        new ir.LetCont(exitContinuation,
-            new ir.LetCont(bodyContinuation,
-                new ir.Branch(new ir.IsTrue(condition),
-                              bodyContinuation,
-                              exitContinuation)));
-    // If there are breaks in the body, then there must be a join-point
-    // continuation for the normal exit and the breaks.
-    bool hasBreaks = !breakCollector.isEmpty;
-    ir.LetCont letJoin;
-    if (hasBreaks) {
-      letJoin = new ir.LetCont(null, branch);
-      condBuilder.add(letJoin);
-      condBuilder._current = branch;
-    } else {
-      condBuilder.add(branch);
-    }
-    ir.Continuation loopContinuation =
-        new ir.Continuation(condBuilder._parameters);
-    if (bodyBuilder.isOpen) continueCollector.addJump(bodyBuilder);
-    invokeFullJoin(loopContinuation, continueCollector, recursive: true);
-    bodyContinuation.body = bodyBuilder._root;
-
-    loopContinuation.body = condBuilder._root;
-    add(new ir.LetCont(loopContinuation,
-            new ir.InvokeContinuation(loopContinuation,
-                                      environment.index2value)));
-    if (hasBreaks) {
-      _current = branch;
-      environment = condBuilder.environment;
-      breakCollector.addJump(this);
-      letJoin.continuation = createJoin(environment.length, breakCollector);
-      _current = letJoin;
-    } else {
-      _current = condBuilder._current;
-      environment = condBuilder.environment;
-    }
-    return null;
-  }
-
-  ir.Primitive visitVariableDefinitions(ast.VariableDefinitions node) {
-    assert(isOpen);
-    if (node.modifiers.isConst) {
-      for (ast.SendSet definition in node.definitions.nodes) {
-        assert(!definition.arguments.isEmpty);
-        assert(definition.arguments.tail.isEmpty);
-        VariableElement element = elements[definition];
-        ConstantExpression value = getConstantForVariable(element);
-        localConstants.add(new ConstDeclaration(element, value));
-      }
-    } else {
-      for (ast.Node definition in node.definitions.nodes) {
-        Element element = elements[definition];
-        ir.Primitive initialValue;
-        // Definitions are either SendSets if there is an initializer, or
-        // Identifiers if there is no initializer.
-        if (definition is ast.SendSet) {
-          assert(!definition.arguments.isEmpty);
-          assert(definition.arguments.tail.isEmpty);
-          initialValue = visit(definition.arguments.head);
-        } else {
-          assert(definition is ast.Identifier);
-          // The initial value is null.
-          // TODO(kmillikin): Consider pooling constants.
-          initialValue = makePrimConst(constantSystem.createNull());
-          add(new ir.LetPrim(initialValue));
-        }
-        if (isClosureVariable(element)) {
-          LocalElement local = element;
-          add(new ir.SetClosureVariable(local, initialValue,
-                                        isDeclaration: true));
-        } else {
-          // In case a primitive was introduced for the initializer expression,
-          // use this variable element to help derive a good name for it.
-          initialValue.useElementAsHint(element);
-          environment.extend(element, initialValue);
-        }
-      }
-    }
-    return null;
-  }
-
-  // Build(Return(e), C) = C'[InvokeContinuation(return, x)]
-  //   where (C', x) = Build(e, C)
-  //
-  // Return without a subexpression is translated as if it were return null.
-  ir.Primitive visitReturn(ast.Return node) {
-    assert(isOpen);
-    assert(invariant(node, node.beginToken.value != 'native'));
-    if (node.expression == null) {
-      buildReturn();
-    } else {
-      buildReturn(visit(node.expression));
-    }
-    return null;
-  }
-
-  // ==== Expressions ====
-  ir.Primitive visitConditional(ast.Conditional node) {
-    assert(isOpen);
-    ir.Primitive condition = visit(node.condition);
-
-    // The then and else expressions are delimited.
-    IrBuilderVisitor thenBuilder = new IrBuilderVisitor.delimited(this);
-    IrBuilderVisitor elseBuilder = new IrBuilderVisitor.delimited(this);
-    ir.Primitive thenValue = thenBuilder.visit(node.thenExpression);
-    ir.Primitive elseValue = elseBuilder.visit(node.elseExpression);
-
-    // Treat the values of the subexpressions as named values in the
-    // environment, so they will be treated as arguments to the join-point
-    // continuation.
-    assert(environment.length == thenBuilder.environment.length);
-    assert(environment.length == elseBuilder.environment.length);
-    thenBuilder.environment.extend(null, thenValue);
-    elseBuilder.environment.extend(null, elseValue);
-    JumpCollector jumps = new JumpCollector(null);
-    jumps.addJump(thenBuilder);
-    jumps.addJump(elseBuilder);
-    ir.Continuation joinContinuation =
-        createJoin(environment.length + 1, jumps);
-
-    // Build the term
-    //   let cont join(x, ..., result) = [] in
-    //   let cont then() = [[thenPart]]; join(v, ...) in
-    //   let cont else() = [[elsePart]]; join(v, ...) in
-    //     if condition (then, else)
-    ir.Continuation thenContinuation = new ir.Continuation([]);
-    ir.Continuation elseContinuation = new ir.Continuation([]);
-    thenContinuation.body = thenBuilder._root;
-    elseContinuation.body = elseBuilder._root;
-    add(new ir.LetCont(joinContinuation,
-            new ir.LetCont(thenContinuation,
-                new ir.LetCont(elseContinuation,
-                    new ir.Branch(new ir.IsTrue(condition),
-                                  thenContinuation,
-                                  elseContinuation)))));
-    return (thenValue == elseValue)
-        ? thenValue
-        : joinContinuation.parameters.last;
-  }
-
-  // For all simple literals:
-  // Build(Literal(c), C) = C[let val x = Constant(c) in [], x]
-  ir.Primitive visitLiteralBool(ast.LiteralBool node) {
-    assert(isOpen);
-    return translateConstant(node);
-  }
-
-  ir.Primitive visitLiteralDouble(ast.LiteralDouble node) {
-    assert(isOpen);
-    return translateConstant(node);
-  }
-
-  ir.Primitive visitLiteralInt(ast.LiteralInt node) {
-    assert(isOpen);
-    return translateConstant(node);
-  }
-
-  ir.Primitive visitLiteralNull(ast.LiteralNull node) {
-    assert(isOpen);
-    return translateConstant(node);
-  }
-
-  ir.Primitive visitLiteralString(ast.LiteralString node) {
-    assert(isOpen);
-    return translateConstant(node);
-  }
-
-  ConstantExpression getConstantForNode(ast.Node node) {
-    ConstantExpression constant =
-        compiler.backend.constantCompilerTask.compileNode(node, elements);
-    assert(invariant(node, constant != null,
-        message: 'No constant computed for $node'));
-    return constant;
-  }
-
-  ConstantExpression getConstantForVariable(VariableElement element) {
-    ConstantExpression constant =
-        compiler.backend.constants.getConstantForVariable(element);
-    assert(invariant(element, constant != null,
-            message: 'No constant computed for $element'));
-    return constant;
-  }
-
-  ir.Primitive visitLiteralList(ast.LiteralList node) {
-    assert(isOpen);
-    if (node.isConst) {
-      return translateConstant(node);
-    }
-    List<ir.Primitive> values = node.elements.nodes.mapToList(visit);
-    GenericType type = elements.getType(node);
-    ir.Primitive result = new ir.LiteralList(type, values);
-    add(new ir.LetPrim(result));
-    return result;
-  }
-
-  ir.Primitive visitLiteralMap(ast.LiteralMap node) {
-    assert(isOpen);
-    if (node.isConst) {
-      return translateConstant(node);
-    }
-    List<ir.Primitive> keys = new List<ir.Primitive>();
-    List<ir.Primitive> values = new List<ir.Primitive>();
-    node.entries.nodes.forEach((ast.LiteralMapEntry node) {
-      keys.add(visit(node.key));
-      values.add(visit(node.value));
-    });
-    GenericType type = elements.getType(node);
-    ir.Primitive result = new ir.LiteralMap(type, keys, values);
-    add(new ir.LetPrim(result));
-    return result;
-  }
-
-  ir.Primitive visitLiteralSymbol(ast.LiteralSymbol node) {
-    assert(isOpen);
-    return translateConstant(node);
-  }
-
-  ir.Primitive visitIdentifier(ast.Identifier node) {
-    assert(isOpen);
-    // "this" is the only identifier that should be met by the visitor.
-    assert(node.isThis());
-    return lookupThis();
-  }
-
-  ir.Primitive visitParenthesizedExpression(
-      ast.ParenthesizedExpression node) {
-    assert(isOpen);
-    return visit(node.expression);
-  }
-
-  // Stores the result of visiting a CascadeReceiver, so we can return it from
-  // its enclosing Cascade.
-  ir.Primitive _currentCascadeReceiver;
-
-  ir.Primitive visitCascadeReceiver(ast.CascadeReceiver node) {
-    assert(isOpen);
-    return _currentCascadeReceiver = visit(node.expression);
-  }
-
-  ir.Primitive visitCascade(ast.Cascade node) {
-    assert(isOpen);
-    var oldCascadeReceiver = _currentCascadeReceiver;
-    // Throw away the result of visiting the expression.
-    // Instead we return the result of visiting the CascadeReceiver.
-    this.visit(node.expression);
-    ir.Primitive receiver = _currentCascadeReceiver;
-    _currentCascadeReceiver = oldCascadeReceiver;
-    return receiver;
-  }
-
-  ir.Primitive lookupThis() {
-    ir.Primitive result = new ir.This();
-    add(new ir.LetPrim(result));
-    return result;
-  }
-
-  // ==== Sends ====
-  ir.Primitive visitAssert(ast.Send node) {
-    assert(isOpen);
-    return giveup(node, 'Assert');
-  }
-
-  ir.Primitive visitNamedArgument(ast.NamedArgument node) {
-    assert(isOpen);
-    return visit(node.expression);
-  }
-
-  ir.Primitive translateClosureCall(ir.Primitive receiver,
-                                    Selector closureSelector,
-                                    ast.NodeList arguments) {
-    Selector namedCallSelector = new Selector(closureSelector.kind,
-                     "call",
-                     closureSelector.library,
-                     closureSelector.argumentCount,
-                     closureSelector.namedArguments);
-    List<ir.Primitive> args = arguments.nodes.mapToList(visit, growable:false);
-    return continueWithExpression(
-        (k) => new ir.InvokeMethod(receiver, namedCallSelector, k, args));
-  }
-
-  ir.Primitive visitClosureSend(ast.Send node) {
-    assert(isOpen);
-    Element element = elements[node];
-    ir.Primitive closureTarget;
-    if (element == null) {
-      closureTarget = visit(node.selector);
-    } else if (isClosureVariable(element)) {
-      LocalElement local = element;
-      closureTarget = new ir.GetClosureVariable(local);
-      add(new ir.LetPrim(closureTarget));
-    } else {
-      assert(Elements.isLocal(element));
-      closureTarget = environment.lookup(element);
-    }
-    Selector closureSelector = elements.getSelector(node);
-    return translateClosureCall(closureTarget, closureSelector,
-        node.argumentsNode);
-  }
-
-  /// If [node] is null, returns this.
-  /// If [node] is super, returns null (for special handling)
-  /// Otherwise visits [node] and returns the result.
-  ir.Primitive visitReceiver(ast.Expression node) {
-    if (node == null) return lookupThis();
-    if (node.isSuper()) return null;
-    return visit(node);
-  }
-
-  /// Makes an [InvokeMethod] unless [node.receiver.isSuper()], in that case
-  /// makes an [InvokeSuperMethod] ignoring [receiver].
-  ir.Expression createDynamicInvoke(ast.Send node,
-                             Selector selector,
-                             ir.Definition receiver,
-                             ir.Continuation k,
-                             List<ir.Definition> arguments) {
-    return node != null && node.receiver != null && node.receiver.isSuper()
-        ? new ir.InvokeSuperMethod(selector, k, arguments)
-        : new ir.InvokeMethod(receiver, selector, k, arguments);
-  }
-
-  ir.Primitive visitDynamicSend(ast.Send node) {
-    assert(isOpen);
-    Selector selector = elements.getSelector(node);
-    ir.Primitive receiver = visitReceiver(node.receiver);
-    List<ir.Primitive> arguments = new List<ir.Primitive>();
-    for (ast.Node n in node.arguments) {
-      arguments.add(visit(n));
-    }
-    return continueWithExpression(
-        (k) => createDynamicInvoke(node, selector, receiver, k, arguments));
-  }
-
-  _GetterElements translateGetter(ast.Send node, Selector selector) {
-    Element element = elements[node];
-    ir.Primitive result;
-    ir.Primitive receiver;
-    ir.Primitive index;
-
-    if (element != null && element.isConst) {
-      // Reference to constant local, top-level or static field
-      result = translateConstant(node);
-    } else if (isClosureVariable(element)) {
-      LocalElement local = element;
-      result = new ir.GetClosureVariable(local);
-      add(new ir.LetPrim(result));
-    } else if (Elements.isLocal(element)) {
-      // Reference to local variable
-      result = buildGetLocal(element);
-    } else if (element == null ||
-               Elements.isInstanceField(element) ||
-               Elements.isInstanceMethod(element) ||
-               selector.isIndex ||
-               // TODO(johnniwinther): clean up semantics of resolution.
-               node.isSuperCall) {
-      // Dynamic dispatch to a getter. Sometimes resolution will suggest a
-      // target element, but in these cases we must still emit a dynamic
-      // dispatch. The target element may be an instance method in case we are
-      // converting a method to a function object.
-
-      receiver = visitReceiver(node.receiver);
-      List<ir.Primitive> arguments = new List<ir.Primitive>();
-      if (selector.isIndex) {
-        index = visit(node.arguments.head);
-        arguments.add(index);
-      }
-
-      assert(selector.kind == SelectorKind.GETTER ||
-             selector.kind == SelectorKind.INDEX);
-      result = continueWithExpression(
-          (k) => createDynamicInvoke(node, selector, receiver, k, arguments));
-    } else if (element.isField || element.isGetter || element.isErroneous ||
-               element.isSetter) {
-      // TODO(johnniwinther): Change handling of setter selectors.
-      // Access to a static field or getter (non-static case handled above).
-      // Even if there is only a setter, we compile as if it was a getter,
-      // so the vm can fail at runtime.
-      assert(selector.kind == SelectorKind.GETTER ||
-             selector.kind == SelectorKind.SETTER);
-      result = buildGetStatic(element, selector);
-    } else if (Elements.isStaticOrTopLevelFunction(element)) {
-      // Convert a top-level or static function to a function object.
-      result = translateConstant(node);
-    } else {
-      throw "Unexpected SendSet getter: $node, $element";
-    }
-    return new _GetterElements(
-        result: result,index: index, receiver: receiver);
-  }
-
-  ir.Primitive visitGetterSend(ast.Send node) {
-    assert(isOpen);
-    return translateGetter(node, elements.getSelector(node)).result;
-
-  }
-
-  ir.Primitive buildNegation(ir.Primitive condition) {
-    // ! e is translated as e ? false : true
-
-    // Add a continuation parameter for the result of the expression.
-    ir.Parameter resultParameter = new ir.Parameter(null);
-
-    ir.Continuation joinContinuation = new ir.Continuation([resultParameter]);
-    ir.Continuation thenContinuation = new ir.Continuation([]);
-    ir.Continuation elseContinuation = new ir.Continuation([]);
-
-    ir.Constant trueConstant = makePrimConst(constantSystem.createBool(true));
-    ir.Constant falseConstant = makePrimConst(constantSystem.createBool(false));
-
-    thenContinuation.body = new ir.LetPrim(falseConstant)
-        ..plug(new ir.InvokeContinuation(joinContinuation, [falseConstant]));
-    elseContinuation.body = new ir.LetPrim(trueConstant)
-        ..plug(new ir.InvokeContinuation(joinContinuation, [trueConstant]));
-
-    add(new ir.LetCont(joinContinuation,
-          new ir.LetCont(thenContinuation,
-            new ir.LetCont(elseContinuation,
-              new ir.Branch(new ir.IsTrue(condition),
-                            thenContinuation,
-                            elseContinuation)))));
-    return resultParameter;
-  }
-
-  ir.Primitive translateLogicalOperator(ast.Operator op,
-                                        ast.Expression left,
-                                        ast.Expression right) {
-    // e0 && e1 is translated as if e0 ? (e1 == true) : false.
-    // e0 || e1 is translated as if e0 ? true : (e1 == true).
-    // The translation must convert both e0 and e1 to booleans and handle
-    // local variable assignments in e1.
-
-    ir.Primitive leftValue = visit(left);
-    IrBuilderVisitor rightBuilder = new IrBuilderVisitor.delimited(this);
-    ir.Primitive rightValue = rightBuilder.visit(right);
-    // A dummy empty target for the branch on the left subexpression branch.
-    // This enables using the same infrastructure for join-point continuations
-    // as in visitIf and visitConditional.  It will hold a definition of the
-    // appropriate constant and an invocation of the join-point continuation.
-    IrBuilderVisitor emptyBuilder = new IrBuilderVisitor.delimited(this);
-    // Dummy empty targets for right true and right false.  They hold
-    // definitions of the appropriate constant and an invocation of the
-    // join-point continuation.
-    IrBuilderVisitor rightTrueBuilder = new IrBuilderVisitor.delimited(rightBuilder);
-    IrBuilderVisitor rightFalseBuilder = new IrBuilderVisitor.delimited(rightBuilder);
-
-    // If we don't evaluate the right subexpression, the value of the whole
-    // expression is this constant.
-    ir.Constant leftBool = emptyBuilder.makePrimConst(
-        constantSystem.createBool(op.source == '||'));
-    // If we do evaluate the right subexpression, the value of the expression
-    // is a true or false constant.
-    ir.Constant rightTrue = rightTrueBuilder.makePrimConst(
-        constantSystem.createBool(true));
-    ir.Constant rightFalse = rightFalseBuilder.makePrimConst(
-        constantSystem.createBool(false));
-    emptyBuilder.add(new ir.LetPrim(leftBool));
-    rightTrueBuilder.add(new ir.LetPrim(rightTrue));
-    rightFalseBuilder.add(new ir.LetPrim(rightFalse));
-
-    // Treat the result values as named values in the environment, so they
-    // will be treated as arguments to the join-point continuation.
-    assert(environment.length == emptyBuilder.environment.length);
-    assert(environment.length == rightTrueBuilder.environment.length);
-    assert(environment.length == rightFalseBuilder.environment.length);
-    emptyBuilder.environment.extend(null, leftBool);
-    rightTrueBuilder.environment.extend(null, rightTrue);
-    rightFalseBuilder.environment.extend(null, rightFalse);
-
-    // Wire up two continuations for the left subexpression, two continuations
-    // for the right subexpression, and a three-way join continuation.
-    JumpCollector jumps = new JumpCollector(null);
-    jumps.addJump(emptyBuilder);
-    jumps.addJump(rightTrueBuilder);
-    jumps.addJump(rightFalseBuilder);
-    ir.Continuation joinContinuation =
-        createJoin(environment.length + 1, jumps);
-    ir.Continuation leftTrueContinuation = new ir.Continuation([]);
-    ir.Continuation leftFalseContinuation = new ir.Continuation([]);
-    ir.Continuation rightTrueContinuation = new ir.Continuation([]);
-    ir.Continuation rightFalseContinuation = new ir.Continuation([]);
-    rightTrueContinuation.body = rightTrueBuilder._root;
-    rightFalseContinuation.body = rightFalseBuilder._root;
-    // The right subexpression has two continuations.
-    rightBuilder.add(
-        new ir.LetCont(rightTrueContinuation,
-            new ir.LetCont(rightFalseContinuation,
-                new ir.Branch(new ir.IsTrue(rightValue),
-                              rightTrueContinuation,
-                              rightFalseContinuation))));
-    // Depending on the operator, the left subexpression's continuations are
-    // either the right subexpression or an invocation of the join-point
-    // continuation.
-    if (op.source == '&&') {
-      leftTrueContinuation.body = rightBuilder._root;
-      leftFalseContinuation.body = emptyBuilder._root;
-    } else {
-      leftTrueContinuation.body = emptyBuilder._root;
-      leftFalseContinuation.body = rightBuilder._root;
-    }
-
-    add(new ir.LetCont(joinContinuation,
-            new ir.LetCont(leftTrueContinuation,
-                new ir.LetCont(leftFalseContinuation,
-                    new ir.Branch(new ir.IsTrue(leftValue),
-                                  leftTrueContinuation,
-                                  leftFalseContinuation)))));
-    // There is always a join parameter for the result value, because it
-    // is different on at least two paths.
-    return joinContinuation.parameters.last;
-  }
-
-  ir.Primitive visitOperatorSend(ast.Send node) {
-    assert(isOpen);
-    ast.Operator op = node.selector;
-    if (isUserDefinableOperator(op.source)) {
-      return visitDynamicSend(node);
-    }
-    if (op.source == '&&' || op.source == '||') {
-      assert(node.receiver != null);
-      assert(!node.arguments.isEmpty);
-      assert(node.arguments.tail.isEmpty);
-      return translateLogicalOperator(op, node.receiver, node.arguments.head);
-    }
-    if (op.source == "!") {
-      assert(node.receiver != null);
-      assert(node.arguments.isEmpty);
-      return buildNegation(visit(node.receiver));
-    }
-    if (op.source == "!=") {
-      assert(node.receiver != null);
-      assert(!node.arguments.isEmpty);
-      assert(node.arguments.tail.isEmpty);
-      return buildNegation(visitDynamicSend(node));
-    }
-    assert(invariant(node, op.source == "is" || op.source == "as",
-           message: "unexpected operator $op"));
-    DartType type = elements.getType(node.typeAnnotationFromIsCheckOrCast);
-    ir.Primitive receiver = visit(node.receiver);
-    ir.Primitive check = continueWithExpression(
-        (k) => new ir.TypeOperator(op.source, receiver, type, k));
-    return node.isIsNotCheck ? buildNegation(check) : check;
-  }
-
-  // Build(StaticSend(f, arguments), C) = C[C'[InvokeStatic(f, xs)]]
-  //   where (C', xs) = arguments.fold(Build, C)
-  ir.Primitive visitStaticSend(ast.Send node) {
-    assert(isOpen);
-    Element element = elements[node];
-    assert(!element.isConstructor);
-    // TODO(lry): support foreign functions.
-    if (element.isForeign(compiler.backend)) {
-      return giveup(node, 'StaticSend: foreign');
-    }
-
-    Selector selector = elements.getSelector(node);
-
-    // TODO(lry): support default arguments, need support for locals.
-    List<ir.Definition> arguments = node.arguments.mapToList(visit,
-                                                             growable:false);
-    return buildStaticInvocation(element, selector, arguments);
-  }
-
-
-  ir.Primitive visitSuperSend(ast.Send node) {
-    assert(isOpen);
-    if (node.isPropertyAccess) {
-      return visitGetterSend(node);
-    } else {
-      return visitDynamicSend(node);
-    }
-  }
-
-  visitTypePrefixSend(ast.Send node) {
-    compiler.internalError(node, "visitTypePrefixSend should not be called.");
-  }
-
-  ir.Primitive visitTypeLiteralSend(ast.Send node) {
-    assert(isOpen);
-    // If the user is trying to invoke the type literal or variable,
-    // it must be treated as a function call.
-    if (node.argumentsNode != null) {
-      // TODO(sigurdm): Handle this to match proposed semantics of issue #19725.
-      return giveup(node, 'Type literal invoked as function');
-    }
-
-    DartType type = elements.getTypeLiteralType(node);
-    if (type is TypeVariableType) {
-      ir.Primitive prim = new ir.ReifyTypeVar(type.element);
-      add(new ir.LetPrim(prim));
-      return prim;
-    } else {
-      return translateConstant(node);
-    }
-  }
-
-  /// True if [element] is a local variable, local function, or parameter that
-  /// is accessed from an inner function. Recursive self-references in a local
-  /// function count as closure accesses.
-  ///
-  /// If `true`, [element] is a [LocalElement].
-  bool isClosureVariable(Element element) {
-    return closureLocals.isClosureVariable(element);
-  }
-
-  void setLocal(Element element, ir.Primitive valueToStore) {
-    if (isClosureVariable(element)) {
-      LocalElement local = element;
-      add(new ir.SetClosureVariable(local, valueToStore));
-    } else {
-      valueToStore.useElementAsHint(element);
-      environment.update(element, valueToStore);
-    }
-  }
-
-  void setStatic(Element element,
-                 Selector selector,
-                 ir.Primitive valueToStore) {
-    assert(element.isErroneous || element.isField || element.isSetter);
-    continueWithExpression(
-        (k) => new ir.InvokeStatic(element, selector, k, [valueToStore]));
-  }
-
-  void setDynamic(ast.Node node,
-                  ir.Primitive receiver, Selector selector,
-                  ir.Primitive valueToStore) {
-    List<ir.Definition> arguments = [valueToStore];
-    continueWithExpression(
-        (k) => createDynamicInvoke(node, selector, receiver, k, arguments));
-  }
-
-  void setIndex(ast.Node node,
-                ir.Primitive receiver,
-                Selector selector,
-                ir.Primitive index,
-                ir.Primitive valueToStore) {
-    List<ir.Definition> arguments = [index, valueToStore];
-    continueWithExpression(
-        (k) => createDynamicInvoke(node, selector, receiver, k, arguments));
-  }
-
-  ir.Primitive visitSendSet(ast.SendSet node) {
-    assert(isOpen);
-    Element element = elements[node];
-    ast.Operator op = node.assignmentOperator;
-    // For complex operators, this is the result of getting (before assigning)
-    ir.Primitive originalValue;
-    // For []+= style operators, this saves the index.
-    ir.Primitive index;
-    ir.Primitive receiver;
-    // This is what gets assigned.
-    ir.Primitive valueToStore;
-    Selector selector = elements.getSelector(node);
-    Selector operatorSelector =
-        elements.getOperatorSelectorInComplexSendSet(node);
-    Selector getterSelector =
-        elements.getGetterSelectorInComplexSendSet(node);
-    assert(
-        // Indexing send-sets have an argument for the index.
-        (selector.isIndexSet ? 1 : 0) +
-        // Non-increment send-sets have one more argument.
-        (ast.Operator.INCREMENT_OPERATORS.contains(op.source) ? 0 : 1)
-            == node.argumentCount());
-
-    ast.Node getAssignArgument() {
-      assert(invariant(node, !node.arguments.isEmpty,
-                       message: "argument expected"));
-      return selector.isIndexSet
-          ? node.arguments.tail.head
-          : node.arguments.head;
-    }
-
-    // Get the value into valueToStore
-    if (op.source == "=") {
-      if (selector.isIndexSet) {
-        receiver = visitReceiver(node.receiver);
-        index = visit(node.arguments.head);
-      } else if (element == null || Elements.isInstanceField(element)) {
-        receiver = visitReceiver(node.receiver);
-      }
-      valueToStore = visit(getAssignArgument());
-    } else {
-      // Get the original value into getter
-      assert(ast.Operator.COMPLEX_OPERATORS.contains(op.source));
-
-      _GetterElements getterResult = translateGetter(node, getterSelector);
-      index = getterResult.index;
-      receiver = getterResult.receiver;
-      originalValue = getterResult.result;
-
-      // Do the modification of the value in getter.
-      ir.Primitive arg;
-      if (ast.Operator.INCREMENT_OPERATORS.contains(op.source)) {
-        arg = makePrimConst(constantSystem.createInt(1));
-        add(new ir.LetPrim(arg));
-      } else {
-        arg = visit(getAssignArgument());
-      }
-      valueToStore = new ir.Parameter(null);
-      ir.Continuation k = new ir.Continuation([valueToStore]);
-      ir.Expression invoke =
-          new ir.InvokeMethod(originalValue, operatorSelector, k, [arg]);
-      add(new ir.LetCont(k, invoke));
-    }
-
-    if (Elements.isLocal(element)) {
-      setLocal(element, valueToStore);
-    } else if ((!node.isSuperCall && Elements.isErroneousElement(element)) ||
-                Elements.isStaticOrTopLevel(element)) {
-      setStatic(element, elements.getSelector(node), valueToStore);
-    } else {
-      // Setter or index-setter invocation
-      Selector selector = elements.getSelector(node);
-      assert(selector.kind == SelectorKind.SETTER ||
-          selector.kind == SelectorKind.INDEX);
-      if (selector.isIndexSet) {
-        setIndex(node, receiver, selector, index, valueToStore);
-      } else {
-        setDynamic(node, receiver, selector, valueToStore);
-      }
-    }
-
-    if (node.isPostfix) {
-      assert(originalValue != null);
-      return originalValue;
-    } else {
-      return valueToStore;
-    }
-  }
-
-  ir.Primitive visitNewExpression(ast.NewExpression node) {
-    assert(isOpen);
-    if (node.isConst) {
-      return translateConstant(node);
-    }
-    FunctionElement element = elements[node.send];
-    Selector selector = elements.getSelector(node.send);
-    ast.Node selectorNode = node.send.selector;
-    DartType type = elements.getType(node);
-    List<ir.Primitive> args =
-        node.send.arguments.mapToList(visit, growable:false);
-    return continueWithExpression(
-        (k) => new ir.InvokeConstructor(type, element,selector, k, args));
-  }
-
-  ir.Primitive visitStringJuxtaposition(ast.StringJuxtaposition node) {
-    assert(isOpen);
-    ir.Primitive first = visit(node.first);
-    ir.Primitive second = visit(node.second);
-    return continueWithExpression(
-        (k) => new ir.ConcatenateStrings(k, [first, second]));
-  }
-
-  ir.Primitive visitStringInterpolation(ast.StringInterpolation node) {
-    assert(isOpen);
-    List<ir.Primitive> arguments = [];
-    arguments.add(visitLiteralString(node.string));
-    var it = node.parts.iterator;
-    while (it.moveNext()) {
-      ast.StringInterpolationPart part = it.current;
-      arguments.add(visit(part.expression));
-      arguments.add(visitLiteralString(part.string));
-    }
-    return continueWithExpression(
-        (k) => new ir.ConcatenateStrings(k, arguments));
-  }
-
-  ir.Primitive translateConstant(ast.Node node, [ConstantExpression constant]) {
-    assert(isOpen);
-    if (constant == null) {
-      constant = getConstantForNode(node);
-    }
-    ir.Primitive primitive = makeConst(constant);
-    add(new ir.LetPrim(primitive));
-    return primitive;
-  }
-
-  ir.FunctionDefinition makeSubFunction(ast.FunctionExpression node) {
-    return new IrBuilderVisitor(elements, compiler, sourceFile)
-           .buildFunctionInternal(elements[node]);
-  }
-
-  ir.Primitive visitFunctionExpression(ast.FunctionExpression node) {
-    FunctionElement element = elements[node];
-    ir.FunctionDefinition inner = makeSubFunction(node);
-    ir.CreateFunction prim = new ir.CreateFunction(inner);
-    add(new ir.LetPrim(prim));
-    return prim;
-  }
-
-  ir.Primitive visitFunctionDeclaration(ast.FunctionDeclaration node) {
-    LocalFunctionElement element = elements[node.function];
-    ir.FunctionDefinition inner = makeSubFunction(node.function);
-    if (isClosureVariable(element)) {
-      add(new ir.DeclareFunction(element, inner));
-    } else {
-      ir.CreateFunction prim = new ir.CreateFunction(inner);
-      add(new ir.LetPrim(prim));
-      environment.extend(element, prim);
-      prim.useElementAsHint(element);
-    }
-    return null;
-  }
-
-  static final String ABORT_IRNODE_BUILDER = "IrNode builder aborted";
-
-  dynamic giveup(ast.Node node, [String reason]) {
-    throw ABORT_IRNODE_BUILDER;
-  }
-
-  ir.FunctionDefinition nullIfGiveup(ir.FunctionDefinition action()) {
-    try {
-      return action();
-    } catch(e, tr) {
-      if (e == ABORT_IRNODE_BUILDER) {
-        return null;
-      }
-      rethrow;
-    }
-  }
-
-  void internalError(String reason, {ast.Node node}) {
-    giveup(node);
-  }
-}
-
-/// Classifies local variables and local functions as 'closure variables'.
-/// A closure variable is one that is accessed from an inner function nested
-/// one or more levels inside the one that declares it.
-class DetectClosureVariables extends ast.Visitor {
-  final TreeElements elements;
-  DetectClosureVariables(this.elements);
-
-  FunctionElement currentFunction;
-  Set<Local> usedFromClosure = new Set<Local>();
-  Set<FunctionElement> recursiveFunctions = new Set<FunctionElement>();
-
-  bool isClosureVariable(Entity entity) => usedFromClosure.contains(entity);
-
-  void markAsClosureVariable(Local local) {
-    usedFromClosure.add(local);
-  }
-
-  visit(ast.Node node) => node.accept(this);
-
-  visitNode(ast.Node node) {
-    node.visitChildren(this);
-  }
-
-  visitSend(ast.Send node) {
-    Element element = elements[node];
-    if (Elements.isLocal(element) &&
-        !element.isConst &&
-        element.enclosingElement != currentFunction) {
-      LocalElement local = element;
-      markAsClosureVariable(local);
-    }
-    node.visitChildren(this);
-  }
-
-  visitFunctionExpression(ast.FunctionExpression node) {
-    FunctionElement oldFunction = currentFunction;
-    currentFunction = elements[node];
-    visit(node.body);
-    currentFunction = oldFunction;
-  }
-
 }
diff --git a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder_visitor.dart b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder_visitor.dart
new file mode 100644
index 0000000..9b20c5e
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder_visitor.dart
@@ -0,0 +1,1266 @@
+// Copyright (c) 2013, 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.
+
+part of dart2js.ir_builder;
+
+/**
+ * This task iterates through all resolved elements and builds [ir.Node]s. The
+ * nodes are stored in the [nodes] map and accessible through [hasIr] and
+ * [getIr].
+ *
+ * The functionality of the IrNodes is added gradually, therefore elements might
+ * have an IR or not, depending on the language features that are used. For
+ * elements that do have an IR, the tree [ast.Node]s and the [Token]s are not
+ * used in the rest of the compilation. This is ensured by setting the element's
+ * cached tree to `null` and also breaking the token stream to crash future
+ * attempts to parse.
+ *
+ * The type inferrer works on either IR nodes or tree nodes. The IR nodes are
+ * then translated into the SSA form for optimizations and code generation.
+ * Long-term, once the IR supports the full language, the backend can be
+ * re-implemented to work directly on the IR.
+ */
+class IrBuilderTask extends CompilerTask {
+  final Map<Element, ir.FunctionDefinition> nodes =
+      <Element, ir.FunctionDefinition>{};
+
+  IrBuilderTask(Compiler compiler) : super(compiler);
+
+  String get name => 'IR builder';
+
+  bool hasIr(Element element) => nodes.containsKey(element.implementation);
+
+  ir.FunctionDefinition getIr(Element element) => nodes[element.implementation];
+
+  void buildNodes({bool useNewBackend: false}) {
+    if (!irEnabled(useNewBackend: useNewBackend)) return;
+    measure(() {
+      Set<Element> resolved = compiler.enqueuer.resolution.resolvedElements;
+      resolved.forEach((AstElement element) {
+        if (canBuild(element)) {
+          TreeElements elementsMapping = element.resolvedAst.elements;
+          element = element.implementation;
+          compiler.withCurrentElement(element, () {
+            SourceFile sourceFile = elementSourceFile(element);
+            IrBuilderVisitor builder =
+                new IrBuilderVisitor(elementsMapping, compiler, sourceFile);
+            ir.FunctionDefinition function;
+            function = builder.buildFunction(element);
+
+            if (function != null) {
+              nodes[element] = function;
+              compiler.tracer.traceCompilation(element.name, null);
+              compiler.tracer.traceGraph("IR Builder", function);
+            }
+          });
+        }
+      });
+    });
+  }
+
+  bool irEnabled({bool useNewBackend: false}) {
+    // TODO(sigurdm,kmillikin): Support checked-mode checks.
+    return (useNewBackend || const bool.fromEnvironment('USE_NEW_BACKEND')) &&
+        compiler.backend is DartBackend &&
+        !compiler.enableTypeAssertions &&
+        !compiler.enableConcreteTypeInference;
+  }
+
+  bool canBuild(Element element) {
+    FunctionElement function = element.asFunctionElement();
+    // TODO(kmillikin,sigurdm): support lazy field initializers.
+    if (function == null) return false;
+
+    if (!compiler.backend.shouldOutput(function)) return false;
+
+    assert(invariant(element, !function.isNative));
+
+    // TODO(kmillikin,sigurdm): Support constructors.
+    if (function is ConstructorElement) return false;
+
+    return true;
+  }
+
+  bool get inCheckedMode {
+    bool result = false;
+    assert((result = true));
+    return result;
+  }
+
+  SourceFile elementSourceFile(Element element) {
+    if (element is FunctionElement) {
+      FunctionElement functionElement = element;
+      if (functionElement.patch != null) element = functionElement.patch;
+    }
+    return element.compilationUnit.script.file;
+  }
+}
+
+class _GetterElements {
+  ir.Primitive result;
+  ir.Primitive index;
+  ir.Primitive receiver;
+
+  _GetterElements({this.result, this.index, this.receiver}) ;
+}
+
+/**
+ * A tree visitor that builds [IrNodes]. The visit methods add statements using
+ * to the [builder] and return the last added statement for trees that represent
+ * an expression.
+ */
+class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
+    with IrBuilderMixin<ast.Node> {
+  final Compiler compiler;
+  final SourceFile sourceFile;
+
+  // In SSA terms, join-point continuation parameters are the phis and the
+  // continuation invocation arguments are the corresponding phi inputs.  To
+  // support name introduction and renaming for source level variables, we use
+  // nested (delimited) visitors for constructing subparts of the IR that will
+  // need renaming.  Each source variable is assigned an index.
+  //
+  // Each nested visitor maintains a list of free variable uses in the body.
+  // These are implemented as a list of parameters, each with their own use
+  // list of references.  When the delimited subexpression is plugged into the
+  // surrounding context, the free occurrences can be captured or become free
+  // occurrences in the next outer delimited subexpression.
+  //
+  // Each nested visitor maintains a list that maps indexes of variables
+  // assigned in the delimited subexpression to their reaching definition ---
+  // that is, the definition in effect at the hole in 'current'.  These are
+  // used to determine if a join-point continuation needs to be passed
+  // arguments, and what the arguments are.
+
+  /// Construct a top-level visitor.
+  IrBuilderVisitor(TreeElements elements, this.compiler, this.sourceFile)
+      : super(elements);
+
+  /**
+   * Builds the [ir.FunctionDefinition] for a function element. In case the
+   * function uses features that cannot be expressed in the IR, this function
+   * returns `null`.
+   */
+  ir.FunctionDefinition buildFunction(FunctionElement functionElement) {
+    return nullIfGiveup(() => buildFunctionInternal(functionElement));
+  }
+
+  ir.FunctionDefinition buildFunctionInternal(FunctionElement element) {
+    assert(invariant(element, element.isImplementation));
+    ast.FunctionExpression function = element.node;
+    assert(function != null);
+    assert(!function.modifiers.isExternal);
+    assert(elements[function] != null);
+
+    DetectClosureVariables closureLocals = new DetectClosureVariables(elements);
+    closureLocals.visit(function);
+
+    return withBuilder(
+        new IrBuilder(compiler.backend.constantSystem,
+                      element, closureLocals.usedFromClosure),
+        () {
+      FunctionSignature signature = element.functionSignature;
+      signature.orderedForEachParameter((ParameterElement parameterElement) {
+        irBuilder.createParameter(
+            parameterElement,
+            isClosureVariable: isClosureVariable(parameterElement));
+      });
+
+      List<ConstantExpression> defaults = new List<ConstantExpression>();
+      signature.orderedOptionalParameters.forEach((ParameterElement element) {
+        defaults.add(getConstantForVariable(element));
+      });
+
+      visit(function.body);
+      return irBuilder.buildFunctionDefinition(element, defaults);
+    });
+  }
+
+  ir.Primitive visit(ast.Node node) => node.accept(this);
+
+  // ==== Statements ====
+  // Build(Block(stamements), C) = C'
+  //   where C' = statements.fold(Build, C)
+  ir.Primitive visitBlock(ast.Block node) {
+    assert(irBuilder.isOpen);
+    for (ast.Node n in node.statements.nodes) {
+      visit(n);
+      if (!irBuilder.isOpen) return null;
+    }
+    return null;
+  }
+
+  ir.Primitive visitBreakStatement(ast.BreakStatement node) {
+    if (!irBuilder.buildBreak(elements.getTargetOf(node))) {
+      compiler.internalError(node, "'break' target not found");
+    }
+    return null;
+  }
+
+  ir.Primitive visitContinueStatement(ast.ContinueStatement node) {
+    if (!irBuilder.buildContinue(elements.getTargetOf(node))) {
+      compiler.internalError(node, "'continue' target not found");
+    }
+    return null;
+  }
+
+  // Build(EmptyStatement, C) = C
+  ir.Primitive visitEmptyStatement(ast.EmptyStatement node) {
+    assert(irBuilder.isOpen);
+    return null;
+  }
+
+  // Build(ExpressionStatement(e), C) = C'
+  //   where (C', _) = Build(e, C)
+  ir.Primitive visitExpressionStatement(ast.ExpressionStatement node) {
+    assert(irBuilder.isOpen);
+    visit(node.expression);
+    return null;
+  }
+
+  /// Invoke a join-point continuation that contains arguments for all local
+  /// variables.
+  ///
+  /// Given the continuation and a list of uninitialized invocations, fill
+  /// in each invocation with the continuation and appropriate arguments.
+  void invokeFullJoin(ir.Continuation join,
+                      JumpCollector jumps,
+                      {recursive: false}) {
+    join.isRecursive = recursive;
+    for (int i = 0; i < jumps.length; ++i) {
+      Environment currentEnvironment = jumps.environments[i];
+      ir.InvokeContinuation invoke = jumps.invocations[i];
+      invoke.continuation = new ir.Reference(join);
+      invoke.arguments = new List<ir.Reference>.generate(
+          join.parameters.length,
+          (i) => new ir.Reference(currentEnvironment[i]));
+      invoke.isRecursive = recursive;
+    }
+  }
+
+  ir.Primitive visitFor(ast.For node) {
+    assert(irBuilder.isOpen);
+    // TODO(kmillikin,sigurdm): Handle closure variables declared in a for-loop.
+    if (node.initializer is ast.VariableDefinitions) {
+      ast.VariableDefinitions definitions = node.initializer;
+      for (ast.Node definition in definitions.definitions.nodes) {
+        Element element = elements[definition];
+        if (isClosureVariable(element)) {
+          return giveup(definition, 'Closure variable in for loop initializer');
+        }
+      }
+    }
+
+    // For loops use four named continuations: the entry to the condition,
+    // the entry to the body, the loop exit, and the loop successor (break).
+    // The CPS translation of
+    // [[for (initializer; condition; update) body; successor]] is:
+    //
+    // [[initializer]];
+    // let cont loop(x, ...) =
+    //     let prim cond = [[condition]] in
+    //     let cont break() = [[successor]] in
+    //     let cont exit() = break(v, ...) in
+    //     let cont body() =
+    //       let cont continue(x, ...) = [[update]]; loop(v, ...) in
+    //       [[body]]; continue(v, ...) in
+    //     branch cond (body, exit) in
+    // loop(v, ...)
+    //
+    // If there are no breaks in the body, the break continuation is inlined
+    // in the exit continuation (i.e., the translation of the successor
+    // statement occurs in the exit continuation).  If there is only one
+    // invocation of the continue continuation (i.e., no continues in the
+    // body), the continue continuation is inlined in the body.
+
+    if (node.initializer != null) visit(node.initializer);
+
+    IrBuilder condBuilder = new IrBuilder.recursive(irBuilder);
+    ir.Primitive condition;
+    if (node.condition == null) {
+      // If the condition is empty then the body is entered unconditionally.
+      condition = condBuilder.buildBooleanLiteral(true);
+    } else {
+      condition = withBuilder(condBuilder, () => visit(node.condition));
+    }
+
+    JumpTarget target = elements.getTargetDefinition(node);
+    JumpCollector breakCollector = new JumpCollector(target);
+    JumpCollector continueCollector = new JumpCollector(target);
+    irBuilder.state.breakCollectors.add(breakCollector);
+    irBuilder.state.continueCollectors.add(continueCollector);
+
+    IrBuilder bodyBuilder = new IrBuilder.delimited(condBuilder);
+    withBuilder(bodyBuilder, () => visit(node.body));
+    assert(irBuilder.state.breakCollectors.last == breakCollector);
+    assert(irBuilder.state.continueCollectors.last == continueCollector);
+    irBuilder.state.breakCollectors.removeLast();
+    irBuilder.state.continueCollectors.removeLast();
+
+    // The binding of the continue continuation should occur as late as
+    // possible, that is, at the nearest common ancestor of all the continue
+    // sites in the body.  However, that is difficult to compute here, so it
+    // is instead placed just outside the body of the body continuation.
+    bool hasContinues = !continueCollector.isEmpty;
+    IrBuilder updateBuilder = hasContinues
+        ? new IrBuilder.recursive(condBuilder)
+        : bodyBuilder;
+    for (ast.Node n in node.update) {
+      if (!updateBuilder.isOpen) break;
+      withBuilder(updateBuilder, () => visit(n));
+    }
+
+    // Create body entry and loop exit continuations and a branch to them.
+    ir.Continuation bodyContinuation = new ir.Continuation([]);
+    ir.Continuation exitContinuation = new ir.Continuation([]);
+    ir.LetCont branch =
+        new ir.LetCont(exitContinuation,
+            new ir.LetCont(bodyContinuation,
+                new ir.Branch(new ir.IsTrue(condition),
+                              bodyContinuation,
+                              exitContinuation)));
+    // If there are breaks in the body, then there must be a join-point
+    // continuation for the normal exit and the breaks.
+    bool hasBreaks = !breakCollector.isEmpty;
+    ir.LetCont letJoin;
+    if (hasBreaks) {
+      letJoin = new ir.LetCont(null, branch);
+      condBuilder.add(letJoin);
+      condBuilder._current = branch;
+    } else {
+      condBuilder.add(branch);
+    }
+    ir.Continuation continueContinuation;
+    if (hasContinues) {
+      // If there are continues in the body, we need a named continue
+      // continuation as a join point.
+      continueContinuation = new ir.Continuation(updateBuilder._parameters);
+      if (bodyBuilder.isOpen) continueCollector.addJump(bodyBuilder);
+      invokeFullJoin(continueContinuation, continueCollector);
+    }
+    ir.Continuation loopContinuation =
+        new ir.Continuation(condBuilder._parameters);
+    if (updateBuilder.isOpen) {
+      JumpCollector backEdges = new JumpCollector(null);
+      backEdges.addJump(updateBuilder);
+      invokeFullJoin(loopContinuation, backEdges, recursive: true);
+    }
+
+    // Fill in the body and possible continue continuation bodies.  Do this
+    // only after it is guaranteed that they are not empty.
+    if (hasContinues) {
+      continueContinuation.body = updateBuilder._root;
+      bodyContinuation.body =
+          new ir.LetCont(continueContinuation, bodyBuilder._root);
+    } else {
+      bodyContinuation.body = bodyBuilder._root;
+    }
+
+    loopContinuation.body = condBuilder._root;
+    irBuilder.add(new ir.LetCont(loopContinuation,
+            new ir.InvokeContinuation(loopContinuation,
+                irBuilder.environment.index2value)));
+    if (hasBreaks) {
+      irBuilder._current = branch;
+      irBuilder.environment = condBuilder.environment;
+      breakCollector.addJump(irBuilder);
+      letJoin.continuation =
+          irBuilder.createJoin(irBuilder.environment.length, breakCollector);
+      irBuilder._current = letJoin;
+    } else {
+      irBuilder._current = condBuilder._current;
+      irBuilder.environment = condBuilder.environment;
+    }
+    return null;
+  }
+
+   visitIf(ast.If node) {
+    irBuilder.buildIf(
+        build(node.condition),
+        subbuild(node.thenPart),
+        subbuild(node.elsePart));
+  }
+
+  ir.Primitive visitLabeledStatement(ast.LabeledStatement node) {
+    ast.Statement body = node.statement;
+    return body is ast.Loop
+        ? visit(body)
+        : giveup(node, 'labeled statement');
+  }
+
+  ir.Primitive visitWhile(ast.While node) {
+    assert(irBuilder.isOpen);
+    // While loops use four named continuations: the entry to the body, the
+    // loop exit, the loop back edge (continue), and the loop exit (break).
+    // The CPS translation of [[while (condition) body; successor]] is:
+    //
+    // let cont continue(x, ...) =
+    //     let prim cond = [[condition]] in
+    //     let cont break() = [[successor]] in
+    //     let cont exit() = break(v, ...) in
+    //     let cont body() = [[body]]; continue(v, ...) in
+    //     branch cond (body, exit) in
+    // continue(v, ...)
+    //
+    // If there are no breaks in the body, the break continuation is inlined
+    // in the exit continuation (i.e., the translation of the successor
+    // statement occurs in the exit continuation).
+
+    // The condition and body are delimited.
+    IrBuilder condBuilder = new IrBuilder.recursive(irBuilder);
+    ir.Primitive condition =
+        withBuilder(condBuilder, () => visit(node.condition));
+
+    JumpTarget target = elements.getTargetDefinition(node);
+    JumpCollector breakCollector = new JumpCollector(target);
+    JumpCollector continueCollector = new JumpCollector(target);
+    irBuilder.state.breakCollectors.add(breakCollector);
+    irBuilder.state.continueCollectors.add(continueCollector);
+
+    IrBuilder bodyBuilder = new IrBuilder.delimited(condBuilder);
+    withBuilder(bodyBuilder, () => visit(node.body));
+    assert(irBuilder.state.breakCollectors.last == breakCollector);
+    assert(irBuilder.state.continueCollectors.last == continueCollector);
+    irBuilder.state.breakCollectors.removeLast();
+    irBuilder.state.continueCollectors.removeLast();
+
+    // Create body entry and loop exit continuations and a branch to them.
+    ir.Continuation bodyContinuation = new ir.Continuation([]);
+    ir.Continuation exitContinuation = new ir.Continuation([]);
+    ir.LetCont branch =
+        new ir.LetCont(exitContinuation,
+            new ir.LetCont(bodyContinuation,
+                new ir.Branch(new ir.IsTrue(condition),
+                              bodyContinuation,
+                              exitContinuation)));
+    // If there are breaks in the body, then there must be a join-point
+    // continuation for the normal exit and the breaks.
+    bool hasBreaks = !breakCollector.isEmpty;
+    ir.LetCont letJoin;
+    if (hasBreaks) {
+      letJoin = new ir.LetCont(null, branch);
+      condBuilder.add(letJoin);
+      condBuilder._current = branch;
+    } else {
+      condBuilder.add(branch);
+    }
+    ir.Continuation loopContinuation =
+        new ir.Continuation(condBuilder._parameters);
+    if (bodyBuilder.isOpen) continueCollector.addJump(bodyBuilder);
+    invokeFullJoin(loopContinuation, continueCollector, recursive: true);
+    bodyContinuation.body = bodyBuilder._root;
+
+    loopContinuation.body = condBuilder._root;
+    irBuilder.add(new ir.LetCont(loopContinuation,
+            new ir.InvokeContinuation(loopContinuation,
+                                      irBuilder.environment.index2value)));
+    if (hasBreaks) {
+      irBuilder._current = branch;
+      irBuilder.environment = condBuilder.environment;
+      breakCollector.addJump(irBuilder);
+      letJoin.continuation =
+          irBuilder.createJoin(irBuilder.environment.length, breakCollector);
+      irBuilder._current = letJoin;
+    } else {
+      irBuilder._current = condBuilder._current;
+      irBuilder.environment = condBuilder.environment;
+    }
+    return null;
+  }
+
+  ir.Primitive visitForIn(ast.ForIn node) {
+    // The for-in loop
+    //
+    // for (a in e) s;
+    //
+    // Is compiled analogously to:
+    //
+    // a = e.iterator;
+    // while (a.moveNext()) {
+    //   var n0 = a.current;
+    //   s;
+    // }
+
+    // The condition and body are delimited.
+    IrBuilder condBuilder = new IrBuilder.recursive(irBuilder);
+
+    ir.Primitive expressionReceiver = visit(node.expression);
+    List<ir.Primitive> emptyArguments = new List<ir.Primitive>();
+
+    ir.Parameter iterator = new ir.Parameter(null);
+    ir.Continuation iteratorInvoked = new ir.Continuation([iterator]);
+    irBuilder.add(new ir.LetCont(iteratorInvoked,
+        new ir.InvokeMethod(expressionReceiver,
+            new Selector.getter("iterator", null), iteratorInvoked,
+            emptyArguments)));
+
+    ir.Parameter condition = new ir.Parameter(null);
+    ir.Continuation moveNextInvoked = new ir.Continuation([condition]);
+    condBuilder.add(new ir.LetCont(moveNextInvoked,
+        new ir.InvokeMethod(iterator,
+            new Selector.call("moveNext", null, 0),
+            moveNextInvoked, emptyArguments)));
+
+    JumpTarget target = elements.getTargetDefinition(node);
+    JumpCollector breakCollector = new JumpCollector(target);
+    JumpCollector continueCollector = new JumpCollector(target);
+    irBuilder.state.breakCollectors.add(breakCollector);
+    irBuilder.state.continueCollectors.add(continueCollector);
+
+    IrBuilder bodyBuilder = new IrBuilder.delimited(condBuilder);
+    ast.Node identifier = node.declaredIdentifier;
+    Element variableElement = elements.getForInVariable(node);
+    Selector selector = elements.getSelector(identifier);
+
+    // node.declaredIdentifier can be either an ast.VariableDefinitions
+    // (defining a new local variable) or a send designating some existing
+    // variable.
+    ast.Node declaredIdentifier = node.declaredIdentifier;
+
+    if (declaredIdentifier is ast.VariableDefinitions) {
+      withBuilder(bodyBuilder, () => visit(declaredIdentifier));
+    }
+
+    ir.Parameter currentValue = new ir.Parameter(null);
+    ir.Continuation currentInvoked = new ir.Continuation([currentValue]);
+    bodyBuilder.add(new ir.LetCont(currentInvoked,
+        new ir.InvokeMethod(iterator, new Selector.getter("current", null),
+            currentInvoked, emptyArguments)));
+    if (Elements.isLocal(variableElement)) {
+      withBuilder(bodyBuilder, () => setLocal(variableElement, currentValue));
+    } else if (Elements.isStaticOrTopLevel(variableElement)) {
+      withBuilder(bodyBuilder,
+          () => setStatic(variableElement, selector, currentValue));
+    } else {
+      ir.Primitive receiver =
+          withBuilder(bodyBuilder, () => lookupThis());
+      withBuilder(bodyBuilder,
+          () => setDynamic(null, receiver, selector, currentValue));
+    }
+
+    withBuilder(bodyBuilder, () => visit(node.body));
+    assert(irBuilder.state.breakCollectors.last == breakCollector);
+    assert(irBuilder.state.continueCollectors.last == continueCollector);
+    irBuilder.state.breakCollectors.removeLast();
+    irBuilder.state.continueCollectors.removeLast();
+
+    // Create body entry and loop exit continuations and a branch to them.
+    ir.Continuation bodyContinuation = new ir.Continuation([]);
+    ir.Continuation exitContinuation = new ir.Continuation([]);
+    ir.LetCont branch =
+        new ir.LetCont(exitContinuation,
+            new ir.LetCont(bodyContinuation,
+                new ir.Branch(new ir.IsTrue(condition),
+                              bodyContinuation,
+                              exitContinuation)));
+    // If there are breaks in the body, then there must be a join-point
+    // continuation for the normal exit and the breaks.
+    bool hasBreaks = !breakCollector.isEmpty;
+    ir.LetCont letJoin;
+    if (hasBreaks) {
+      letJoin = new ir.LetCont(null, branch);
+      condBuilder.add(letJoin);
+      condBuilder._current = branch;
+    } else {
+      condBuilder.add(branch);
+    }
+    ir.Continuation loopContinuation =
+        new ir.Continuation(condBuilder._parameters);
+    if (bodyBuilder.isOpen) continueCollector.addJump(bodyBuilder);
+    invokeFullJoin(loopContinuation, continueCollector, recursive: true);
+    bodyContinuation.body = bodyBuilder._root;
+
+    loopContinuation.body = condBuilder._root;
+    irBuilder.add(new ir.LetCont(loopContinuation,
+            new ir.InvokeContinuation(loopContinuation,
+                                      irBuilder.environment.index2value)));
+    if (hasBreaks) {
+      irBuilder._current = branch;
+      irBuilder.environment = condBuilder.environment;
+      breakCollector.addJump(irBuilder);
+      letJoin.continuation =
+          irBuilder.createJoin(irBuilder.environment.length, breakCollector);
+      irBuilder._current = letJoin;
+    } else {
+      irBuilder._current = condBuilder._current;
+      irBuilder.environment = condBuilder.environment;
+    }
+    return null;
+  }
+
+  ir.Primitive visitVariableDefinitions(ast.VariableDefinitions node) {
+    assert(irBuilder.isOpen);
+    if (node.modifiers.isConst) {
+      for (ast.SendSet definition in node.definitions.nodes) {
+        assert(!definition.arguments.isEmpty);
+        assert(definition.arguments.tail.isEmpty);
+        VariableElement element = elements[definition];
+        ConstantExpression value = getConstantForVariable(element);
+        irBuilder.declareLocalConstant(element, value);
+      }
+    } else {
+      for (ast.Node definition in node.definitions.nodes) {
+        Element element = elements[definition];
+        ir.Primitive initialValue;
+        // Definitions are either SendSets if there is an initializer, or
+        // Identifiers if there is no initializer.
+        if (definition is ast.SendSet) {
+          assert(!definition.arguments.isEmpty);
+          assert(definition.arguments.tail.isEmpty);
+          initialValue = visit(definition.arguments.head);
+        } else {
+          assert(definition is ast.Identifier);
+        }
+        irBuilder.declareLocalVariable(element,
+            initialValue: initialValue,
+            isClosureVariable: isClosureVariable(element));
+      }
+    }
+    return null;
+  }
+
+  // Build(Return(e), C) = C'[InvokeContinuation(return, x)]
+  //   where (C', x) = Build(e, C)
+  //
+  // Return without a subexpression is translated as if it were return null.
+  ir.Primitive visitReturn(ast.Return node) {
+    assert(irBuilder.isOpen);
+    assert(invariant(node, node.beginToken.value != 'native'));
+    irBuilder.buildReturn(build(node.expression));
+    return null;
+  }
+
+  // ==== Expressions ====
+  ir.Primitive visitConditional(ast.Conditional node) {
+    return irBuilder.buildConditional(
+        build(node.condition),
+        subbuild(node.thenExpression),
+        subbuild(node.elseExpression));
+  }
+
+  // For all simple literals:
+  // Build(Literal(c), C) = C[let val x = Constant(c) in [], x]
+  ir.Primitive visitLiteralBool(ast.LiteralBool node) {
+    assert(irBuilder.isOpen);
+    return translateConstant(node);
+  }
+
+  ir.Primitive visitLiteralDouble(ast.LiteralDouble node) {
+    assert(irBuilder.isOpen);
+    return translateConstant(node);
+  }
+
+  ir.Primitive visitLiteralInt(ast.LiteralInt node) {
+    assert(irBuilder.isOpen);
+    return translateConstant(node);
+  }
+
+  ir.Primitive visitLiteralNull(ast.LiteralNull node) {
+    assert(irBuilder.isOpen);
+    return translateConstant(node);
+  }
+
+  ir.Primitive visitLiteralString(ast.LiteralString node) {
+    assert(irBuilder.isOpen);
+    return translateConstant(node);
+  }
+
+  ConstantExpression getConstantForNode(ast.Node node) {
+    ConstantExpression constant =
+        compiler.backend.constantCompilerTask.compileNode(node, elements);
+    assert(invariant(node, constant != null,
+        message: 'No constant computed for $node'));
+    return constant;
+  }
+
+  ConstantExpression getConstantForVariable(VariableElement element) {
+    ConstantExpression constant =
+        compiler.backend.constants.getConstantForVariable(element);
+    assert(invariant(element, constant != null,
+            message: 'No constant computed for $element'));
+    return constant;
+  }
+
+  ir.Primitive visitLiteralList(ast.LiteralList node) {
+    assert(irBuilder.isOpen);
+    if (node.isConst) {
+      return translateConstant(node);
+    }
+    List<ir.Primitive> values = node.elements.nodes.mapToList(visit);
+    GenericType type = elements.getType(node);
+    ir.Primitive result = new ir.LiteralList(type, values);
+    irBuilder.add(new ir.LetPrim(result));
+    return result;
+  }
+
+  ir.Primitive visitLiteralMap(ast.LiteralMap node) {
+    assert(irBuilder.isOpen);
+    if (node.isConst) {
+      return translateConstant(node);
+    }
+    List<ir.Primitive> keys = new List<ir.Primitive>();
+    List<ir.Primitive> values = new List<ir.Primitive>();
+    node.entries.nodes.forEach((ast.LiteralMapEntry node) {
+      keys.add(visit(node.key));
+      values.add(visit(node.value));
+    });
+    GenericType type = elements.getType(node);
+    ir.Primitive result = new ir.LiteralMap(type, keys, values);
+    irBuilder.add(new ir.LetPrim(result));
+    return result;
+  }
+
+  ir.Primitive visitLiteralSymbol(ast.LiteralSymbol node) {
+    assert(irBuilder.isOpen);
+    return translateConstant(node);
+  }
+
+  ir.Primitive visitIdentifier(ast.Identifier node) {
+    assert(irBuilder.isOpen);
+    // "this" is the only identifier that should be met by the visitor.
+    assert(node.isThis());
+    return lookupThis();
+  }
+
+  ir.Primitive visitParenthesizedExpression(
+      ast.ParenthesizedExpression node) {
+    assert(irBuilder.isOpen);
+    return visit(node.expression);
+  }
+
+  // Stores the result of visiting a CascadeReceiver, so we can return it from
+  // its enclosing Cascade.
+  ir.Primitive _currentCascadeReceiver;
+
+  ir.Primitive visitCascadeReceiver(ast.CascadeReceiver node) {
+    assert(irBuilder.isOpen);
+    return _currentCascadeReceiver = visit(node.expression);
+  }
+
+  ir.Primitive visitCascade(ast.Cascade node) {
+    assert(irBuilder.isOpen);
+    var oldCascadeReceiver = _currentCascadeReceiver;
+    // Throw away the result of visiting the expression.
+    // Instead we return the result of visiting the CascadeReceiver.
+    this.visit(node.expression);
+    ir.Primitive receiver = _currentCascadeReceiver;
+    _currentCascadeReceiver = oldCascadeReceiver;
+    return receiver;
+  }
+
+  ir.Primitive lookupThis() {
+    ir.Primitive result = new ir.This();
+    irBuilder.add(new ir.LetPrim(result));
+    return result;
+  }
+
+  // ==== Sends ====
+  ir.Primitive visitAssert(ast.Send node) {
+    assert(irBuilder.isOpen);
+    return giveup(node, 'Assert');
+  }
+
+  ir.Primitive visitNamedArgument(ast.NamedArgument node) {
+    assert(irBuilder.isOpen);
+    return visit(node.expression);
+  }
+
+  ir.Primitive translateClosureCall(ir.Primitive receiver,
+                                    Selector closureSelector,
+                                    ast.NodeList arguments) {
+    Selector namedCallSelector = new Selector(closureSelector.kind,
+                     "call",
+                     closureSelector.library,
+                     closureSelector.argumentCount,
+                     closureSelector.namedArguments);
+    List<ir.Primitive> args = arguments.nodes.mapToList(visit, growable:false);
+    return irBuilder.continueWithExpression(
+        (k) => new ir.InvokeMethod(receiver, namedCallSelector, k, args));
+  }
+
+  ir.Primitive visitClosureSend(ast.Send node) {
+    assert(irBuilder.isOpen);
+    Element element = elements[node];
+    ir.Primitive closureTarget;
+    if (element == null) {
+      closureTarget = visit(node.selector);
+    } else if (isClosureVariable(element)) {
+      LocalElement local = element;
+      closureTarget = new ir.GetClosureVariable(local);
+      irBuilder.add(new ir.LetPrim(closureTarget));
+    } else {
+      assert(Elements.isLocal(element));
+      closureTarget = irBuilder.environment.lookup(element);
+    }
+    Selector closureSelector = elements.getSelector(node);
+    return translateClosureCall(closureTarget, closureSelector,
+        node.argumentsNode);
+  }
+
+  /// If [node] is null, returns this.
+  /// If [node] is super, returns null (for special handling)
+  /// Otherwise visits [node] and returns the result.
+  ir.Primitive visitReceiver(ast.Expression node) {
+    if (node == null) return lookupThis();
+    if (node.isSuper()) return null;
+    return visit(node);
+  }
+
+  /// Makes an [InvokeMethod] unless [node.receiver.isSuper()], in that case
+  /// makes an [InvokeSuperMethod] ignoring [receiver].
+  ir.Expression createDynamicInvoke(ast.Send node,
+                                    Selector selector,
+                                    ir.Definition receiver,
+                                    ir.Continuation k,
+                                    List<ir.Definition> arguments) {
+    return node != null && node.receiver != null && node.receiver.isSuper()
+        ? new ir.InvokeSuperMethod(selector, k, arguments)
+        : new ir.InvokeMethod(receiver, selector, k, arguments);
+  }
+
+  ir.Primitive visitDynamicSend(ast.Send node) {
+    assert(irBuilder.isOpen);
+    Selector selector = elements.getSelector(node);
+    ir.Primitive receiver = visitReceiver(node.receiver);
+    List<ir.Primitive> arguments = new List<ir.Primitive>();
+    for (ast.Node n in node.arguments) {
+      arguments.add(visit(n));
+    }
+    return irBuilder.buildDynamicInvocation(receiver, selector, arguments);
+  }
+
+  _GetterElements translateGetter(ast.Send node, Selector selector) {
+    Element element = elements[node];
+    ir.Primitive result;
+    ir.Primitive receiver;
+    ir.Primitive index;
+
+    if (element != null && element.isConst) {
+      // Reference to constant local, top-level or static field
+      result = translateConstant(node);
+    } else if (isClosureVariable(element)) {
+      LocalElement local = element;
+      result = new ir.GetClosureVariable(local);
+      irBuilder.add(new ir.LetPrim(result));
+    } else if (Elements.isLocal(element)) {
+      // Reference to local variable
+      result = irBuilder.buildLocalGet(element);
+    } else if (element == null ||
+               Elements.isInstanceField(element) ||
+               Elements.isInstanceMethod(element) ||
+               selector.isIndex ||
+               // TODO(johnniwinther): clean up semantics of resolution.
+               node.isSuperCall) {
+      // Dynamic dispatch to a getter. Sometimes resolution will suggest a
+      // target element, but in these cases we must still emit a dynamic
+      // dispatch. The target element may be an instance method in case we are
+      // converting a method to a function object.
+
+      receiver = visitReceiver(node.receiver);
+      List<ir.Primitive> arguments = new List<ir.Primitive>();
+      if (selector.isIndex) {
+        index = visit(node.arguments.head);
+        arguments.add(index);
+      }
+
+      assert(selector.kind == SelectorKind.GETTER ||
+             selector.kind == SelectorKind.INDEX);
+      result = irBuilder.continueWithExpression(
+          (k) => createDynamicInvoke(node, selector, receiver, k, arguments));
+    } else if (element.isField || element.isGetter || element.isErroneous ||
+               element.isSetter) {
+      // TODO(johnniwinther): Change handling of setter selectors.
+      // Access to a static field or getter (non-static case handled above).
+      // Even if there is only a setter, we compile as if it was a getter,
+      // so the vm can fail at runtime.
+      assert(selector.kind == SelectorKind.GETTER ||
+             selector.kind == SelectorKind.SETTER);
+      result = irBuilder.buildStaticGet(element, selector);
+    } else if (Elements.isStaticOrTopLevelFunction(element)) {
+      // Convert a top-level or static function to a function object.
+      result = translateConstant(node);
+    } else {
+      throw "Unexpected SendSet getter: $node, $element";
+    }
+    return new _GetterElements(
+        result: result,index: index, receiver: receiver);
+  }
+
+  ir.Primitive visitGetterSend(ast.Send node) {
+    assert(irBuilder.isOpen);
+    return translateGetter(node, elements.getSelector(node)).result;
+
+  }
+
+  ir.Primitive translateLogicalOperator(ast.Operator op,
+                                        ast.Expression left,
+                                        ast.Expression right) {
+    ir.Primitive leftValue = visit(left);
+
+    ir.Primitive buildRightValue(IrBuilder rightBuilder) {
+      return withBuilder(rightBuilder, () => visit(right));
+    }
+
+    return irBuilder.buildLogicalOperator(
+        leftValue, buildRightValue, isLazyOr: op.source == '||');
+  }
+
+  ir.Primitive visitOperatorSend(ast.Send node) {
+    assert(irBuilder.isOpen);
+    ast.Operator op = node.selector;
+    if (isUserDefinableOperator(op.source)) {
+      return visitDynamicSend(node);
+    }
+    if (op.source == '&&' || op.source == '||') {
+      assert(node.receiver != null);
+      assert(!node.arguments.isEmpty);
+      assert(node.arguments.tail.isEmpty);
+      return translateLogicalOperator(op, node.receiver, node.arguments.head);
+    }
+    if (op.source == "!") {
+      assert(node.receiver != null);
+      assert(node.arguments.isEmpty);
+      return irBuilder.buildNegation(visit(node.receiver));
+    }
+    if (op.source == "!=") {
+      assert(node.receiver != null);
+      assert(!node.arguments.isEmpty);
+      assert(node.arguments.tail.isEmpty);
+      return irBuilder.buildNegation(visitDynamicSend(node));
+    }
+    assert(invariant(node, op.source == "is" || op.source == "as",
+           message: "unexpected operator $op"));
+    DartType type = elements.getType(node.typeAnnotationFromIsCheckOrCast);
+    ir.Primitive receiver = visit(node.receiver);
+    ir.Primitive check = irBuilder.continueWithExpression(
+        (k) => new ir.TypeOperator(op.source, receiver, type, k));
+    return node.isIsNotCheck ? irBuilder.buildNegation(check) : check;
+  }
+
+  // Build(StaticSend(f, arguments), C) = C[C'[InvokeStatic(f, xs)]]
+  //   where (C', xs) = arguments.fold(Build, C)
+  ir.Primitive visitStaticSend(ast.Send node) {
+    assert(irBuilder.isOpen);
+    Element element = elements[node];
+    assert(!element.isConstructor);
+    // TODO(lry): support foreign functions.
+    if (element.isForeign(compiler.backend)) {
+      return giveup(node, 'StaticSend: foreign');
+    }
+
+    Selector selector = elements.getSelector(node);
+
+    // TODO(lry): support default arguments, need support for locals.
+    List<ir.Definition> arguments = node.arguments.mapToList(visit,
+                                                             growable:false);
+    return irBuilder.buildStaticInvocation(element, selector, arguments);
+  }
+
+
+  ir.Primitive visitSuperSend(ast.Send node) {
+    assert(irBuilder.isOpen);
+    if (node.isPropertyAccess) {
+      return visitGetterSend(node);
+    } else {
+      Selector selector = elements.getSelector(node);
+      List<ir.Primitive> arguments = new List<ir.Primitive>();
+      for (ast.Node n in node.arguments) {
+        arguments.add(visit(n));
+      }
+      return irBuilder.buildSuperInvocation(selector, arguments);
+    }
+  }
+
+  visitTypePrefixSend(ast.Send node) {
+    compiler.internalError(node, "visitTypePrefixSend should not be called.");
+  }
+
+  ir.Primitive visitTypeLiteralSend(ast.Send node) {
+    assert(irBuilder.isOpen);
+    // If the user is trying to invoke the type literal or variable,
+    // it must be treated as a function call.
+    if (node.argumentsNode != null) {
+      // TODO(sigurdm): Handle this to match proposed semantics of issue #19725.
+      return giveup(node, 'Type literal invoked as function');
+    }
+
+    DartType type = elements.getTypeLiteralType(node);
+    if (type is TypeVariableType) {
+      ir.Primitive prim = new ir.ReifyTypeVar(type.element);
+      irBuilder.add(new ir.LetPrim(prim));
+      return prim;
+    } else {
+      return translateConstant(node);
+    }
+  }
+
+  /// True if [element] is a local variable, local function, or parameter that
+  /// is accessed from an inner function. Recursive self-references in a local
+  /// function count as closure accesses.
+  ///
+  /// If `true`, [element] is a [LocalElement].
+  bool isClosureVariable(Element element) {
+    return irBuilder.state.closureLocals.contains(element);
+  }
+
+  void setLocal(Element element, ir.Primitive valueToStore) {
+    if (isClosureVariable(element)) {
+      LocalElement local = element;
+      irBuilder.add(new ir.SetClosureVariable(local, valueToStore));
+    } else {
+      valueToStore.useElementAsHint(element);
+      irBuilder.environment.update(element, valueToStore);
+    }
+  }
+
+  void setStatic(Element element,
+                 Selector selector,
+                 ir.Primitive valueToStore) {
+    assert(element.isErroneous || element.isField || element.isSetter);
+    irBuilder.continueWithExpression(
+        (k) => new ir.InvokeStatic(element, selector, k, [valueToStore]));
+  }
+
+  void setDynamic(ast.Node node,
+                  ir.Primitive receiver, Selector selector,
+                  ir.Primitive valueToStore) {
+    List<ir.Definition> arguments = [valueToStore];
+    irBuilder.continueWithExpression(
+        (k) => createDynamicInvoke(node, selector, receiver, k, arguments));
+  }
+
+  void setIndex(ast.Node node,
+                ir.Primitive receiver,
+                Selector selector,
+                ir.Primitive index,
+                ir.Primitive valueToStore) {
+    List<ir.Definition> arguments = [index, valueToStore];
+    irBuilder.continueWithExpression(
+        (k) => createDynamicInvoke(node, selector, receiver, k, arguments));
+  }
+
+  ir.Primitive visitSendSet(ast.SendSet node) {
+    assert(irBuilder.isOpen);
+    Element element = elements[node];
+    ast.Operator op = node.assignmentOperator;
+    // For complex operators, this is the result of getting (before assigning)
+    ir.Primitive originalValue;
+    // For []+= style operators, this saves the index.
+    ir.Primitive index;
+    ir.Primitive receiver;
+    // This is what gets assigned.
+    ir.Primitive valueToStore;
+    Selector selector = elements.getSelector(node);
+    Selector operatorSelector =
+        elements.getOperatorSelectorInComplexSendSet(node);
+    Selector getterSelector =
+        elements.getGetterSelectorInComplexSendSet(node);
+    assert(
+        // Indexing send-sets have an argument for the index.
+        (selector.isIndexSet ? 1 : 0) +
+        // Non-increment send-sets have one more argument.
+        (ast.Operator.INCREMENT_OPERATORS.contains(op.source) ? 0 : 1)
+            == node.argumentCount());
+
+    ast.Node getAssignArgument() {
+      assert(invariant(node, !node.arguments.isEmpty,
+                       message: "argument expected"));
+      return selector.isIndexSet
+          ? node.arguments.tail.head
+          : node.arguments.head;
+    }
+
+    // Get the value into valueToStore
+    if (op.source == "=") {
+      if (selector.isIndexSet) {
+        receiver = visitReceiver(node.receiver);
+        index = visit(node.arguments.head);
+      } else if (element == null || Elements.isInstanceField(element)) {
+        receiver = visitReceiver(node.receiver);
+      }
+      valueToStore = visit(getAssignArgument());
+    } else {
+      // Get the original value into getter
+      assert(ast.Operator.COMPLEX_OPERATORS.contains(op.source));
+
+      _GetterElements getterResult = translateGetter(node, getterSelector);
+      index = getterResult.index;
+      receiver = getterResult.receiver;
+      originalValue = getterResult.result;
+
+      // Do the modification of the value in getter.
+      ir.Primitive arg;
+      if (ast.Operator.INCREMENT_OPERATORS.contains(op.source)) {
+        arg = irBuilder.buildIntegerLiteral(1);
+      } else {
+        arg = visit(getAssignArgument());
+      }
+      valueToStore = new ir.Parameter(null);
+      ir.Continuation k = new ir.Continuation([valueToStore]);
+      ir.Expression invoke =
+          new ir.InvokeMethod(originalValue, operatorSelector, k, [arg]);
+      irBuilder.add(new ir.LetCont(k, invoke));
+    }
+
+    if (Elements.isLocal(element)) {
+      setLocal(element, valueToStore);
+    } else if ((!node.isSuperCall && Elements.isErroneousElement(element)) ||
+                Elements.isStaticOrTopLevel(element)) {
+      setStatic(element, elements.getSelector(node), valueToStore);
+    } else {
+      // Setter or index-setter invocation
+      Selector selector = elements.getSelector(node);
+      assert(selector.kind == SelectorKind.SETTER ||
+          selector.kind == SelectorKind.INDEX);
+      if (selector.isIndexSet) {
+        setIndex(node, receiver, selector, index, valueToStore);
+      } else {
+        setDynamic(node, receiver, selector, valueToStore);
+      }
+    }
+
+    if (node.isPostfix) {
+      assert(originalValue != null);
+      return originalValue;
+    } else {
+      return valueToStore;
+    }
+  }
+
+  ir.Primitive visitNewExpression(ast.NewExpression node) {
+    assert(irBuilder.isOpen);
+    if (node.isConst) {
+      return translateConstant(node);
+    }
+    FunctionElement element = elements[node.send];
+    Selector selector = elements.getSelector(node.send);
+    ast.Node selectorNode = node.send.selector;
+    DartType type = elements.getType(node);
+    List<ir.Primitive> args =
+        node.send.arguments.mapToList(visit, growable:false);
+    return irBuilder.continueWithExpression(
+        (k) => new ir.InvokeConstructor(type, element,selector, k, args));
+  }
+
+  ir.Primitive visitStringJuxtaposition(ast.StringJuxtaposition node) {
+    assert(irBuilder.isOpen);
+    ir.Primitive first = visit(node.first);
+    ir.Primitive second = visit(node.second);
+    return irBuilder.continueWithExpression(
+        (k) => new ir.ConcatenateStrings(k, [first, second]));
+  }
+
+  ir.Primitive visitStringInterpolation(ast.StringInterpolation node) {
+    assert(irBuilder.isOpen);
+    List<ir.Primitive> arguments = [];
+    arguments.add(visitLiteralString(node.string));
+    var it = node.parts.iterator;
+    while (it.moveNext()) {
+      ast.StringInterpolationPart part = it.current;
+      arguments.add(visit(part.expression));
+      arguments.add(visitLiteralString(part.string));
+    }
+    return irBuilder.continueWithExpression(
+        (k) => new ir.ConcatenateStrings(k, arguments));
+  }
+
+  ir.Primitive translateConstant(ast.Node node, [ConstantExpression constant]) {
+    assert(irBuilder.isOpen);
+    if (constant == null) {
+      constant = getConstantForNode(node);
+    }
+    return irBuilder.buildConstantLiteral(constant);
+  }
+
+  ir.FunctionDefinition makeSubFunction(ast.FunctionExpression node) {
+    // TODO(johnniwinther): Share the visitor.
+    return new IrBuilderVisitor(elements, compiler, sourceFile)
+           .buildFunctionInternal(elements[node]);
+  }
+
+  ir.Primitive visitFunctionExpression(ast.FunctionExpression node) {
+    FunctionElement element = elements[node];
+    ir.FunctionDefinition inner = makeSubFunction(node);
+    ir.CreateFunction prim = new ir.CreateFunction(inner);
+    irBuilder.add(new ir.LetPrim(prim));
+    return prim;
+  }
+
+  ir.Primitive visitFunctionDeclaration(ast.FunctionDeclaration node) {
+    LocalFunctionElement element = elements[node.function];
+    ir.FunctionDefinition inner = makeSubFunction(node.function);
+    if (isClosureVariable(element)) {
+      irBuilder.add(new ir.DeclareFunction(element, inner));
+    } else {
+      ir.CreateFunction prim = new ir.CreateFunction(inner);
+      irBuilder.add(new ir.LetPrim(prim));
+      irBuilder.environment.extend(element, prim);
+      prim.useElementAsHint(element);
+    }
+    return null;
+  }
+
+  static final String ABORT_IRNODE_BUILDER = "IrNode builder aborted";
+
+  dynamic giveup(ast.Node node, [String reason]) {
+    throw ABORT_IRNODE_BUILDER;
+  }
+
+  ir.FunctionDefinition nullIfGiveup(ir.FunctionDefinition action()) {
+    try {
+      return action();
+    } catch(e, tr) {
+      if (e == ABORT_IRNODE_BUILDER) {
+        return null;
+      }
+      rethrow;
+    }
+  }
+
+  void internalError(String reason, {ast.Node node}) {
+    giveup(node);
+  }
+}
+
+/// Classifies local variables and local functions as 'closure variables'.
+/// A closure variable is one that is accessed from an inner function nested
+/// one or more levels inside the one that declares it.
+class DetectClosureVariables extends ast.Visitor {
+  final TreeElements elements;
+  DetectClosureVariables(this.elements);
+
+  FunctionElement currentFunction;
+  Set<Local> usedFromClosure = new Set<Local>();
+  Set<FunctionElement> recursiveFunctions = new Set<FunctionElement>();
+
+  bool isClosureVariable(Entity entity) => usedFromClosure.contains(entity);
+
+  void markAsClosureVariable(Local local) {
+    usedFromClosure.add(local);
+  }
+
+  visit(ast.Node node) => node.accept(this);
+
+  visitNode(ast.Node node) {
+    node.visitChildren(this);
+  }
+
+  visitSend(ast.Send node) {
+    Element element = elements[node];
+    if (Elements.isLocal(element) &&
+        !element.isConst &&
+        element.enclosingElement != currentFunction) {
+      LocalElement local = element;
+      markAsClosureVariable(local);
+    }
+    node.visitChildren(this);
+  }
+
+  visitFunctionExpression(ast.FunctionExpression node) {
+    FunctionElement oldFunction = currentFunction;
+    currentFunction = elements[node];
+    visit(node.body);
+    currentFunction = oldFunction;
+  }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/dart2js.dart b/sdk/lib/_internal/compiler/implementation/dart2js.dart
index ef6e8fa..99c6754 100644
--- a/sdk/lib/_internal/compiler/implementation/dart2js.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart2js.dart
@@ -288,6 +288,7 @@
     new OptionHandler('--out=.+|-o.*', setOutput, multipleArguments: true),
     new OptionHandler('--allow-mock-compilation', passThrough),
     new OptionHandler('--minify|-m', implyCompilation),
+    new OptionHandler('--preserve-uris', passThrough),
     new OptionHandler('--force-strip=.*', setStrip),
     new OptionHandler('--disable-diagnostic-colors',
                       (_) => diagnosticHandler.enableColors = false),
@@ -524,6 +525,10 @@
   --show-package-warnings
     Show warnings and hints generated from packages.
 
+  --preserve-uris
+    Preserve the source URIs in the reflection data. Without this flag the
+    `uri` getter for `LibraryMirror`s is mangled in minified mode.
+
   --csp
     Disables dynamic generation of code in the generated output. This is
     necessary to satisfy CSP restrictions (see http://www.w3.org/TR/CSP/).
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index bbab77b..9f6dcfc 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -508,15 +508,15 @@
            && (identical(element.kind, ElementKind.FUNCTION));
   }
 
-  /// Also returns true for [ConstructorBodyElement]s.
-  static bool isNonAbstractInstanceMethod(Element element) {
+  /// Also returns true for [ConstructorBodyElement]s and getters/setters.
+  static bool isNonAbstractInstanceMember(Element element) {
     // The generative constructor body is not a function. We therefore treat
     // it specially.
     if (element.isGenerativeConstructorBody) return true;
     return !Elements.isUnresolved(element) &&
         !element.isAbstract &&
         element.isInstanceMember &&
-        element.isFunction;
+        (element.isFunction || element.isAccessor);
   }
 
   static bool isNativeOrExtendsNative(ClassElement element) {
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
index 4fe4e17..4e2afbd 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
@@ -252,7 +252,7 @@
     if (otherType.isNullable && otherType.containsAll(classWorld)) {
       return receiver;
     }
-    assert(TypeMask.isNormalized(otherType, classWorld));
+    assert(TypeMask.assertIsNormalized(otherType, classWorld));
     TypeInformation newType = new NarrowTypeInformation(receiver, otherType);
     allocatedTypes.add(newType);
     return newType;
@@ -280,7 +280,7 @@
     if (type.type.isExact) {
       return type;
     } else {
-      assert(TypeMask.isNormalized(otherType, classWorld));
+      assert(TypeMask.assertIsNormalized(otherType, classWorld));
       TypeInformation newType = new NarrowTypeInformation(type, otherType);
       allocatedTypes.add(newType);
       return newType;
@@ -790,7 +790,7 @@
                 // the old type around to ensure that we get a complete view
                 // of the type graph and do not drop any flow edges.
                 TypeMask refinedType = value.computeMask(compiler);
-                assert(TypeMask.isNormalized(refinedType, classWorld));
+                assert(TypeMask.assertIsNormalized(refinedType, classWorld));
                 type = new NarrowTypeInformation(type, refinedType);
                 types.allocatedTypes.add(type);
               }
diff --git a/sdk/lib/_internal/compiler/implementation/js/nodes.dart b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
index 3f75313..23ca6d0 100644
--- a/sdk/lib/_internal/compiler/implementation/js/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
@@ -941,8 +941,10 @@
 
   ArrayInitializer(this.length, this.elements);
 
-  factory ArrayInitializer.from(Iterable<Expression> expressions) =>
-      new ArrayInitializer(expressions.length, _convert(expressions));
+  factory ArrayInitializer.from(Iterable<Expression> expressions) {
+    List<ArrayElement> elements = _convert(expressions);
+    return new ArrayInitializer(elements.length, elements);
+  }
 
   accept(NodeVisitor visitor) => visitor.visitArrayInitializer(this);
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index 6e567f5..0375ea8 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -362,8 +362,9 @@
   /// program, this variable will stil be false.
   bool hasRetainedMetadata = false;
 
-  /// True if a call to preserveUris has been seen.
-  bool mustRetainUris = false;
+  /// True if a call to preserveUris has been seen and the preserve-uris flag
+  /// is set.
+  bool mustPreserveUris = false;
 
   /// True if a call to preserveLibraryNames has been seen.
   bool mustRetainLibraryNames = false;
@@ -1568,7 +1569,7 @@
     } else if (element == preserveMetadataMarker) {
       mustRetainMetadata = true;
     } else if (element == preserveUrisMarker) {
-      mustRetainUris = true;
+      if (compiler.preserveUris) mustPreserveUris = true;
     } else if (element == preserveLibraryNamesMarker) {
       mustRetainLibraryNames = true;
     } else if (element == getIsolateAffinityTagMarker) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
index d829a38..015d6df 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
@@ -8,8 +8,11 @@
   ConstantReferenceEmitter _referenceEmitter;
   ConstantLiteralEmitter _literalEmitter;
 
-  ConstantEmitter(Compiler compiler, Namer namer) {
-    _literalEmitter = new ConstantLiteralEmitter(compiler, namer, this);
+  ConstantEmitter(Compiler compiler,
+                  Namer namer,
+                  jsAst.Template makeConstantListTemplate) {
+    _literalEmitter = new ConstantLiteralEmitter(
+        compiler, namer, makeConstantListTemplate, this);
     _referenceEmitter = new ConstantReferenceEmitter(compiler, namer, this);
   }
 
@@ -157,9 +160,13 @@
 
   final Compiler compiler;
   final Namer namer;
+  final jsAst.Template makeConstantListTemplate;
   final ConstantEmitter constantEmitter;
 
-  ConstantLiteralEmitter(this.compiler, this.namer, this.constantEmitter);
+  ConstantLiteralEmitter(this.compiler,
+                         this.namer,
+                         this.makeConstantListTemplate,
+                         this.constantEmitter);
 
   jsAst.Expression generate(ConstantValue constant) {
     return _visit(constant);
@@ -226,11 +233,9 @@
   }
 
   jsAst.Expression visitList(ListConstantValue constant) {
-    jsAst.Expression value = new jsAst.Call(
-        new jsAst.PropertyAccess.field(
-            new jsAst.VariableUse(namer.isolateName),
-            namer.getMappedInstanceName('makeConstantList')),
-        [new jsAst.ArrayInitializer.from(_array(constant.entries))]);
+    List<jsAst.Expression> elements = _array(constant.entries);
+    jsAst.ArrayInitializer array = new jsAst.ArrayInitializer.from(elements);
+    jsAst.Expression value = makeConstantListTemplate.instantiate([array]);
     return maybeAddTypeArguments(constant.type, value);
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
index 253b7c7..2ae131f 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
@@ -25,6 +25,16 @@
       new Map<OutputUnit, List<ClassElement>>();
   final Map<OutputUnit, List<ConstantValue>> outputConstantLists =
       new Map<OutputUnit, List<ConstantValue>>();
+  final Map<OutputUnit, List<Element>> outputStaticLists =
+      new Map<OutputUnit, List<Element>>();
+  final Map<OutputUnit, Set<LibraryElement>> outputLibraryLists =
+      new Map<OutputUnit, Set<LibraryElement>>();
+
+  /// True, if the output contains a constant list.
+  ///
+  /// This flag is updated in [computeNeededConstants].
+  bool outputContainsConstantList = false;
+
   final List<ClassElement> nativeClasses = <ClassElement>[];
 
   /// Records if a type variable is read dynamically for type tests.
@@ -163,6 +173,9 @@
         compiler.hasIncrementalSupport ? null : emitter.compareConstants);
     for (ConstantValue constant in constants) {
       if (emitter.isConstantInlinedOrAlreadyEmitted(constant)) continue;
+
+      if (constant.isList) outputContainsConstantList = true;
+
       OutputUnit constantUnit =
           compiler.deferredLoadTask.outputUnitForConstant(constant);
       if (constantUnit == null) {
@@ -286,6 +299,33 @@
     }
   }
 
+  void computeNeededStatics() {
+    bool isStaticFunction(Element element) =>
+        !element.isInstanceMember && !element.isField;
+
+    Iterable<Element> elements =
+        backend.generatedCode.keys.where(isStaticFunction);
+
+    for (Element element in Elements.sortedByPosition(elements)) {
+      outputStaticLists.putIfAbsent(
+          compiler.deferredLoadTask.outputUnitForElement(element),
+          () => new List<Element>())
+          .add(element);
+    }
+  }
+
+  void computeNeededLibraries() {
+    void addSurroundingLibraryToSet(Element element) {
+      OutputUnit unit = compiler.deferredLoadTask.outputUnitForElement(element);
+      LibraryElement library = element.library;
+      outputLibraryLists.putIfAbsent(unit, () => new Set<LibraryElement>())
+          .add(library);
+    }
+
+    backend.generatedCode.keys.forEach(addSurroundingLibraryToSet);
+    neededClasses.forEach(addSurroundingLibraryToSet);
+}
+
   void assembleProgram() {
     measure(() {
       emitter.invalidateCaches();
@@ -296,6 +336,9 @@
 
       computeNeededDeclarations();
       computeNeededConstants();
+      computeNeededStatics();
+      computeNeededLibraries();
+
 
       Program program;
       if (USE_NEW_EMITTER) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/model.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/model.dart
index 3ba6dac..f70be05 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/model.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/model.dart
@@ -5,67 +5,142 @@
 library dart2js.new_js_emitter.model;
 
 import '../js/js.dart' as js show Expression;
+import '../constants/values.dart' show ConstantValue;
 
 class Program {
   final List<Output> outputs;
+  final bool outputContainsConstantList;
   /// A map from load id to the list of outputs that need to be loaded.
   final Map<String, List<Output>> loadMap;
 
-  Program(this.outputs, this.loadMap);
+  Program(this.outputs, this.outputContainsConstantList, this.loadMap);
 }
 
+/**
+ * This class represents a JavaScript object that contains static state, like
+ * classes or functions.
+ */
 class Holder {
   final String name;
   final int index;
   Holder(this.name, this.index);
 }
 
+/**
+ * This class represents one output file.
+ *
+ * If no library is deferred, there is only one [Output] of type [MainOutput].
+ */
 abstract class Output {
   bool get isMainOutput => mainOutput == this;
   MainOutput get mainOutput;
   final List<Library> libraries;
+  final List<Constant> constants;
+  // TODO(floitsch): should we move static fields into libraries or classes?
+  final List<StaticField> staticNonFinalFields;
+  // TODO(floitsch): lazy fields should be in their library or even class.
+  final List<StaticField> staticLazilyInitializedFields;
 
   /// Output file name without extension.
   final String outputFileName;
 
-  Output(this.outputFileName, this.libraries);
+  Output(this.outputFileName,
+         this.libraries,
+         this.staticNonFinalFields,
+         this.staticLazilyInitializedFields,
+         this.constants);
 }
 
+/**
+ * The main output file.
+ *
+ * This code emitted from this [Output] must be loaded first. It can then load
+ * other [DeferredOutput]s.
+ */
 class MainOutput extends Output {
   final js.Expression main;
   final List<Holder> holders;
 
-  MainOutput(
-      String outputFileName, this.main, List<Library> libraries, this.holders)
-      : super(outputFileName, libraries);
+  MainOutput(String outputFileName,
+             this.main,
+             List<Library> libraries,
+             List<StaticField> staticNonFinalFields,
+             List<StaticField> staticLazilyInitializedFields,
+             List<Constant> constants,
+             this.holders)
+      : super(outputFileName,
+              libraries,
+              staticNonFinalFields,
+              staticLazilyInitializedFields,
+              constants);
 
   MainOutput get mainOutput => this;
 }
 
+/**
+ * An output (file) for deferred code.
+ */
 class DeferredOutput extends Output {
   final MainOutput mainOutput;
   final String name;
 
   List<Holder> get holders => mainOutput.holders;
 
-  DeferredOutput(String outputFileName, this.name,
-                 this.mainOutput, List<Library> libraries)
-      : super(outputFileName, libraries);
+  DeferredOutput(String outputFileName,
+                 this.name,
+                 this.mainOutput,
+                 List<Library> libraries,
+                 List<StaticField> staticNonFinalFields,
+                 List<StaticField> staticLazilyInitializedFields,
+                 List<Constant> constants)
+      : super(outputFileName,
+              libraries,
+              staticNonFinalFields,
+              staticLazilyInitializedFields,
+              constants);
+}
+
+class Constant {
+  final String name;
+  final Holder holder;
+  final ConstantValue value;
+
+  Constant(this.name, this.holder, this.value);
 }
 
 class Library {
   final String uri;
   final List<StaticMethod> statics;
   final List<Class> classes;
+
   Library(this.uri, this.statics, this.classes);
 }
 
+class StaticField {
+  final String name;
+  // TODO(floitsch): the holder for static fields is the isolate object. We
+  // could remove this field and use the isolate object directly.
+  final Holder holder;
+  final js.Expression code;
+  final bool isFinal;
+  final bool isLazy;
+
+  StaticField(this.name, this.holder, this.code,
+              this.isFinal, this.isLazy);
+}
+
 class Class {
   final String name;
   final Holder holder;
   Class superclass;
   final List<Method> methods;
-  Class(this.name, this.holder, this.methods);
+  final List<InstanceField> fields;
+
+  /// Whether the class must be evaluated eagerly.
+  bool isEager = false;
+
+  Class(this.name, this.holder, this.methods, this.fields,
+        { this.isEager: false });
 
   void setSuperclass(Class superclass) {
     this.superclass = superclass;
@@ -77,6 +152,28 @@
       => (superclass == null) ? 0 : superclass.holder.index;
 }
 
+class InstanceField {
+  final String name;
+
+  /// 00: Does not need any getter.
+  /// 01:  function() { return this.field; }
+  /// 10:  function(receiver) { return receiver.field; }
+  /// 11:  function(receiver) { return this.field; }
+  final int getterFlags;
+
+  /// 00: Does not need any setter.
+  /// 01:  function(value) { this.field = value; }
+  /// 10:  function(receiver, value) { receiver.field = value; }
+  /// 11:  function(receiver, value) { this.field = value; }
+  final int setterFlags;
+
+  // TODO(floitsch): support renamed fields.
+  InstanceField(this.name, this.getterFlags, this.setterFlags);
+
+  bool get needsGetter => getterFlags != 0;
+  bool get needsSetter => setterFlags != 0;
+}
+
 class Method {
   final String name;
   final js.Expression code;
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/emitter.dart
index 9f7ea0f..91b4a39 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/emitter.dart
@@ -9,9 +9,6 @@
 import '../../common.dart';
 import '../../js/js.dart' as js;
 
-import '../../constants/values.dart' show PrimitiveConstantValue;
-import '../../tree/tree.dart' show DartString;
-
 import '../../js_backend/js_backend.dart' show Namer, JavaScriptBackend;
 import '../../js_emitter/js_emitter.dart' as emitterTask show
     CodeEmitterTask,
@@ -20,11 +17,15 @@
 class Emitter implements emitterTask.Emitter {
   final Compiler _compiler;
   final Namer namer;
+  final ModelEmitter _emitter;
 
-  Emitter(this._compiler, this.namer);
+  Emitter(Compiler compiler, Namer namer)
+      : this._compiler = compiler,
+        this.namer = namer,
+        _emitter = new ModelEmitter(compiler, namer);
 
   void emitProgram(Program program) {
-    new ModelEmitter(_compiler).emitProgram(program);
+    _emitter.emitProgram(program);
   }
 
   // TODO(floitsch): copied from OldEmitter. Adjust or share.
@@ -68,16 +69,7 @@
   }
 
   js.Expression constantReference(ConstantValue value) {
-    if (!value.isPrimitive) return js.string("<<unimplemented>>");
-    PrimitiveConstantValue constant = value;
-    if (constant.isBool) return new js.LiteralBool(constant.isTrue);
-    if (constant.isString) {
-      DartString dartString = constant.primitiveValue;
-      return js.string(dartString.slowToString());
-    }
-    if (constant.isNum) return js.number(constant.primitiveValue);
-    if (constant.isNull) return new js.LiteralNull();
-    return js.string("<<unimplemented>>");
+    return _emitter.constantEmitter.reference(value);
   }
 
   void invalidateCaches() {}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/model_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/model_emitter.dart
index ed94cf2..d3d6c1d 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/model_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/new_emitter/model_emitter.dart
@@ -6,6 +6,11 @@
 
 import '../../dart2jslib.dart' show Compiler;
 import '../../js/js.dart' as js;
+import '../../js_backend/js_backend.dart' show
+    JavaScriptBackend,
+    Namer,
+    ConstantEmitter;
+
 import '../../../js_lib/shared/embedded_names.dart' show
     DEFERRED_LIBRARY_URIS,
     DEFERRED_LIBRARY_HASHES,
@@ -16,6 +21,10 @@
 
 class ModelEmitter {
   final Compiler compiler;
+  final Namer namer;
+  final ConstantEmitter constantEmitter;
+
+  JavaScriptBackend get backend => compiler.backend;
 
   /// For deferred loading we communicate the initializers via this global var.
   static const String deferredInitializersGlobal =
@@ -23,12 +32,16 @@
 
   static const String deferredExtension = ".part.js";
 
-  ModelEmitter(this.compiler);
+  ModelEmitter(Compiler compiler, Namer namer)
+      : this.compiler = compiler,
+        this.namer = namer,
+        constantEmitter =
+            new ConstantEmitter(compiler, namer, makeConstantListTemplate);
 
   void emitProgram(Program program) {
     List<Output> outputs = program.outputs;
     MainOutput mainUnit = outputs.first;
-    js.Statement mainAst = emitMainUnit(mainUnit, program.loadMap);
+    js.Statement mainAst = emitMainUnit(program);
     String mainCode = js.prettyPrint(mainAst, compiler).getText();
     compiler.outputProvider(mainUnit.outputFileName, 'js')
         ..add(buildGeneratedBy(compiler))
@@ -57,17 +70,24 @@
     return '// Generated by dart2js, the Dart to JavaScript compiler$suffix.\n';
   }
 
-  js.Statement emitMainUnit(MainOutput unit,
-                            Map<String, List<Output>> loadMap) {
-    js.Expression program =
-        new js.ArrayInitializer.from(unit.libraries.map(emitLibrary));
+  js.Statement emitMainUnit(Program program) {
+    MainOutput unit = program.outputs.first;
+    List<js.Expression> elements = unit.libraries.map(emitLibrary).toList();
+    elements.add(
+        emitLazilyInitializedStatics(unit.staticLazilyInitializedFields));
+    js.Expression code = new js.ArrayInitializer.from(elements);
     return js.js.statement(
         boilerplate,
-        [emitDeferredInitializerGlobal(loadMap),
+        [emitDeferredInitializerGlobal(program.loadMap),
          emitHolders(unit.holders),
-         emitEmbeddedGlobals(loadMap),
+         namer.elementAccess(backend.getCyclicThrowHelper()),
+         program.outputContainsConstantList,
+         emitEmbeddedGlobals(program.loadMap),
+         emitConstants(unit.constants),
+         emitStaticNonFinalFields(unit.staticNonFinalFields),
+         emitEagerClassInitializations(unit.libraries),
          unit.main,
-         program]);
+         code]);
   }
 
   js.Block emitHolders(List<Holder> holders) {
@@ -93,6 +113,12 @@
     return new js.Block(statements);
   }
 
+  static js.Template get makeConstantListTemplate {
+    // TODO(floitsch): remove hard-coded name.
+    // TODO(floitsch): there is no harm in caching the template.
+    return js.js.uncachedExpressionTemplate('makeConstList(#)');
+  }
+
   js.Block emitEmbeddedGlobals(Map<String, List<Output>> loadMap) {
     List<js.Property> globals = <js.Property>[];
 
@@ -165,13 +191,57 @@
   }
 
   js.Expression emitDeferredUnit(DeferredOutput unit, List<Holder> holders) {
+    // TODO(floitsch): initialize eager classes.
     // TODO(floitsch): the hash must depend on the output.
     int hash = this.hashCode;
+    if (unit.constants.isNotEmpty) {
+      throw new UnimplementedError("constants in deferred units");
+    }
     js.ArrayInitializer content =
         new js.ArrayInitializer.from(unit.libraries.map(emitLibrary));
     return js.js("$deferredInitializersGlobal[$hash] = #", content);
   }
 
+  js.Block emitConstants(List<Constant> constants) {
+    Iterable<js.Statement> statements = constants.map((Constant constant) {
+      js.Expression code =
+          constantEmitter.initializationExpression(constant.value);
+      return js.js.statement("#.# = #;",
+                             [constant.holder.name, constant.name, code]);
+    });
+    return new js.Block(statements.toList());
+  }
+
+  js.Block emitStaticNonFinalFields(List<StaticField> fields) {
+    Iterable<js.Statement> statements = fields.map((StaticField field) {
+      return js.js.statement("#.# = #;",
+                             [field.holder.name, field.name, field.code]);
+    });
+    return new js.Block(statements.toList());
+  }
+
+  js.Expression emitLazilyInitializedStatics(List<StaticField> fields) {
+    Iterable fieldDescriptors = fields.expand((field) =>
+        [ js.string(field.name),
+          js.string("${namer.getterPrefix}${field.name}"),
+          js.number(field.holder.index),
+          emitLazyInitializer(field) ]);
+    return new js.ArrayInitializer.from(fieldDescriptors);
+  }
+
+  js.Block emitEagerClassInitializations(List<Library> libraries) {
+    js.Statement createInstantiation(Class cls) {
+      return js.js.statement('new #.#()', [cls.holder.name, cls.name]);
+    }
+
+    List<js.Statement> instantiations =
+        libraries.expand((Library library) => library.classes)
+                 .where((Class cls) => cls.isEager)
+                 .map(createInstantiation)
+                 .toList(growable: false);
+    return new js.Block(instantiations);
+  }
+
   js.Expression emitLibrary(Library library) {
     Iterable staticDescriptors = library.statics.expand((e) =>
         [ js.string(e.name), js.number(e.holder.index), emitStaticMethod(e) ]);
@@ -184,13 +254,83 @@
     return new js.ArrayInitializer.from([staticArray, classArray]);
   }
 
+  js.Expression _generateConstructor(Class cls) {
+    List<String> allFieldNames = <String>[];
+    Class currentClass = cls;
+    while (currentClass != null) {
+      allFieldNames.addAll(
+          currentClass.fields.map((InstanceField field) => field.name));
+      currentClass = currentClass.superclass;
+    }
+    String name = cls.name;
+    String parameters = allFieldNames.join(', ');
+    String assignments = allFieldNames
+        .map((String field) => "this.$field = $field;\n")
+        .join();
+    String code = 'function $name($parameters) { $assignments }';
+    js.Template template = js.js.uncachedExpressionTemplate(code);
+    return template.instantiate(const []);
+  }
+
+  Method _generateGetter(InstanceField field) {
+    String getterTemplateFor(int flags) {
+      switch (flags) {
+        case 1: return "function() { return this[#]; }";
+        case 2: return "function(receiver) { return receiver[#]; }";
+        case 3: return "function(receiver) { return this[#]; }";
+      }
+      return null;
+    }
+
+    js.Expression fieldName = js.string(field.name);
+    js.Expression code = js.js(getterTemplateFor(field.getterFlags), fieldName);
+    String getterName = "${namer.getterPrefix}${field.name}";
+    return new Method(getterName, code);
+  }
+
+  Method _generateSetter(InstanceField field) {
+    String setterTemplateFor(int flags) {
+      switch (flags) {
+        case 1: return "function(val) { return this[#] = val; }";
+        case 2: return "function(receiver, val) { return receiver[#] = val; }";
+        case 3: return "function(receiver, val) { return this[#] = val; }";
+      }
+      return null;
+    }
+    js.Expression fieldName = js.string(field.name);
+    js.Expression code = js.js(setterTemplateFor(field.setterFlags), fieldName);
+    String setterName = "${namer.setterPrefix}${field.name}";
+    return new Method(setterName, code);
+  }
+
+  Iterable<Method> _generateGettersSetters(Class cls) {
+    Iterable<Method> getters = cls.fields
+        .where((InstanceField field) => field.needsGetter)
+        .map(_generateGetter);
+
+    Iterable<Method> setters = cls.fields
+        .where((InstanceField field) => field.needsSetter)
+        .map(_generateSetter);
+
+    return [getters, setters].expand((x) => x);
+  }
+
   js.Expression emitClass(Class cls) {
     List elements = [ js.string(cls.superclassName),
-                      js.number(cls.superclassHolderIndex) ];
-    elements.addAll(cls.methods.expand((e) => [ js.string(e.name), e.code ]));
+                      js.number(cls.superclassHolderIndex),
+                      _generateConstructor(cls) ];
+    Iterable<Method> methods = cls.methods;
+    Iterable<Method> gettersSetters = _generateGettersSetters(cls);
+    Iterable<Method> allMethods = [methods, gettersSetters].expand((x) => x);
+    elements.addAll(allMethods.expand((e) => [ js.string(e.name), e.code ]));
     return unparse(compiler, new js.ArrayInitializer.from(elements));
   }
 
+  js.Expression emitLazyInitializer(StaticField field) {
+    assert(field.isLazy);
+    return unparse(compiler, field.code);
+  }
+
   js.Expression emitStaticMethod(StaticMethod method) {
     return unparse(compiler, method.code);
   }
@@ -207,9 +347,10 @@
   #;
 
   function setupProgram() {
-    for (var i = 0; i < program.length; i++) {
+    for (var i = 0; i < program.length - 1; i++) {
       setupLibrary(program[i]);
     }
+    setupLazyStatics(program[i]);
   }
 
   function setupLibrary(library) {
@@ -226,6 +367,16 @@
     }
   }
 
+  function setupLazyStatics(statics) {
+    for (var i = 0; i < statics.length; i += 4) {
+      var name = statics[i];
+      var getterName = statics[i + 1];
+      var holderIndex = statics[i + 2];
+      var initializer = statics[i + 3];
+      setupLazyStatic(name, getterName, holders[holderIndex], initializer);
+    }
+  }
+
   function setupStatic(name, holder, descriptor) {
     holder[name] = function() {
       var method = compile(name, descriptor);
@@ -234,6 +385,30 @@
     };
   }
 
+  function setupLazyStatic(name, getterName, holder, descriptor) {
+    holder[name] = null;
+    holder[getterName] = function() {
+      var initializer = compile(name, descriptor);
+      holder[getterName] = function() { #(name) };  // cyclicThrowHelper
+      var result;
+      var sentinelInProgress = descriptor;
+      try {
+        result = holder[name] = sentinelInProgress;
+        result = holder[name] = initializer();
+      } finally {
+        // Use try-finally, not try-catch/throw as it destroys the stack trace.
+        if (result === sentinelInProgress) {
+          // The lazy static (holder[name]) might have been set to a different
+          // value. According to spec we still have to reset it to null, if the
+          // initialization failed.
+          holder[name] = null;
+        }
+        holder[getterName] = function() { return this[name]; };
+      }
+      return result;
+    };
+  }
+
   function setupClass(name, holder, descriptor) {
     var resolve = function() {
       var constructor = compileConstructor(name, descriptor);
@@ -259,12 +434,12 @@
   function compileConstructor(name, descriptor) {
     descriptor = compile(name, descriptor);
     var prototype = determinePrototype(descriptor);
-    for (var i = 2; i < descriptor.length; i += 2) {
+    var constructor = descriptor[2];
+    for (var i = 3; i < descriptor.length; i += 2) {
       prototype[descriptor[i]] = descriptor[i + 1];
     }
-    var result = function() { };  // TODO(kasperl): Compile.
-    result.prototype = prototype;
-    return result;
+    constructor.prototype = prototype;
+    return constructor;
   }
 
   function determinePrototype(descriptor) {
@@ -289,11 +464,31 @@
     return eval(__s__ + "\n//# sourceURL=" + __name__ + ".js");
   }
 
+  if (#) { // outputContainsConstantList
+    function makeConstList(list) {
+      // By assigning a function to the properties they become part of the
+      // hidden class. The actual values of the fields don't matter, since we
+      // only check if they exist.
+      list.immutable$list = Array;
+      list.fixed$length = Array;
+      return list;
+    }
+  }
+
   setupProgram();
 
   // Initialize globals.
   #;
 
+  // Initialize constants.
+  #;
+
+  // Initialize static non-final fields.
+  #;
+
+  // Initialize eager classes.
+  #;
+
   var end = Date.now();
   print('Setup: ' + (end - start) + ' ms.');
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/class_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/class_emitter.dart
index dbd3611..13e2df1 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/class_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/class_emitter.dart
@@ -321,15 +321,10 @@
       statics.add(property);
     }
 
-    Map<OutputUnit, ClassBuilder> classPropertyLists =
+    ClassBuilder classProperties =
         emitter.elementDescriptors.remove(classElement);
-    if (classPropertyLists != null) {
-      for (ClassBuilder classProperties in classPropertyLists.values) {
-        // TODO(sigurdm): What about deferred?
-        if (classProperties != null) {
-          statics.addAll(classProperties.properties);
-        }
-      }
+    if (classProperties != null) {
+      statics.addAll(classProperties.properties);
     }
 
     if (!statics.isEmpty) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/emitter.dart
index b7b5e73..6c26615 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/emitter.dart
@@ -83,32 +83,28 @@
   Map<OutputUnit, List<jsAst.Expression>> _cspPrecompiledConstructorNames =
       new Map<OutputUnit, List<jsAst.Expression>>();
 
-  // True if Isolate.makeConstantList is needed.
-  bool hasMakeConstantList = false;
-
   /**
    * Accumulate properties for classes and libraries, describing their
    * static/top-level members.
    * Later, these members are emitted when the class or library is emitted.
    *
-   * For supporting deferred loading we keep one list per output unit.
-   *
-   * See [getElementDecriptor].
+   * See [getElementDescriptor].
    */
   // TODO(ahe): Generate statics with their class, and store only libraries in
   // this map.
-  final Map<Element, Map<OutputUnit, ClassBuilder>> elementDescriptors
-      = new Map<Element, Map<OutputUnit, ClassBuilder>>();
+  final Map<Element, ClassBuilder> elementDescriptors =
+      new Map<Element, ClassBuilder>();
 
   final bool generateSourceMap;
 
   OldEmitter(Compiler compiler, Namer namer, this.generateSourceMap, this.task)
       : this.compiler = compiler,
         this.namer = namer,
-        constantEmitter = new ConstantEmitter(compiler, namer),
         cachedEmittedConstants = compiler.cacheStrategy.newSet(),
         cachedClassBuilders = compiler.cacheStrategy.newMap(),
         cachedElements = compiler.cacheStrategy.newSet() {
+    constantEmitter =
+        new ConstantEmitter(compiler, namer, makeConstantListTemplate);
     containerBuilder.emitter = this;
     classEmitter.emitter = this;
     nsmEmitter.emitter = this;
@@ -581,7 +577,7 @@
     // isolateProperties themselves.
     return js('''
       function (oldIsolate) {
-        var isolateProperties = oldIsolate.#;
+        var isolateProperties = oldIsolate.#;  // isolatePropertiesName
         function Isolate() {
           var hasOwnProperty = Object.prototype.hasOwnProperty;
           for (var staticName in isolateProperties)
@@ -613,16 +609,17 @@
         }
         Isolate.prototype = oldIsolate.prototype;
         Isolate.prototype.constructor = Isolate;
-        Isolate.# = isolateProperties;
-        if (#)
-          Isolate.# = oldIsolate.#;
-        if (#)
-          Isolate.# = oldIsolate.#;
+        Isolate.# = isolateProperties;  // isolatePropertiesName
+        if (#)  // needsDefineClass.
+          Isolate.# = oldIsolate.#;  // finishClassesProperty * 2
+        if (#)  // outputContainsConstantList
+          Isolate.# = oldIsolate.#; // makeConstListProperty * 2
         return Isolate;
       }''',
         [namer.isolatePropertiesName, namer.isolatePropertiesName,
          needsDefineClass, finishClassesProperty, finishClassesProperty,
-         hasMakeConstantList, makeConstListProperty, makeConstListProperty ]);
+         task.outputContainsConstantList,
+         makeConstListProperty, makeConstListProperty ]);
   }
 
   jsAst.Fun get lazyInitializerFunction {
@@ -877,14 +874,8 @@
     }
   }
 
-  void emitStaticFunctions() {
-    bool isStaticFunction(Element element) =>
-        !element.isInstanceMember && !element.isField;
-
-    Iterable<Element> elements =
-        backend.generatedCode.keys.where(isStaticFunction);
-
-    for (Element element in Elements.sortedByPosition(elements)) {
+  void emitStaticFunctions(List<Element> staticFunctions) {
+    for (Element element in staticFunctions) {
       ClassBuilder builder = new ClassBuilder(element, namer);
       containerBuilder.addMember(element, builder);
       getElementDescriptor(element).properties.addAll(builder.properties);
@@ -930,15 +921,13 @@
         //   lazyInitializer(prototype, 'name', fieldName, getterName, initial);
         // The name is used for error reporting. The 'initial' must be a
         // closure that constructs the initial value.
-        jsAst.Expression getter = buildLazyInitializedGetter(element);
-        jsAst.Expression init = js('#(#,#,#,#,#,#)',
+        jsAst.Expression init = js('#(#,#,#,#,#)',
             [js(lazyInitializerName),
                 js(isolateProperties),
                 js.string(element.name),
                 js.string(namer.getNameX(element)),
                 js.string(namer.getLazyInitializerName(element)),
-                code,
-                getter == null ? [] : [getter]]);
+                code]);
         buffer.write(jsAst.prettyPrint(init, compiler,
                                        monitor: compiler.dumpInfoTask));
         buffer.write("$N");
@@ -946,11 +935,6 @@
     }
   }
 
-  jsAst.Expression buildLazyInitializedGetter(VariableElement element) {
-    // Nothing to do, the 'lazy' function will create the getter.
-    return null;
-  }
-
   bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
     if (constant.isFunction) return true;    // Already emitted.
     if (constant.isPrimitive) return true;   // Inlined.
@@ -997,7 +981,6 @@
         cachedEmittedConstants.add(constant);
       }
       String name = namer.constantName(constant);
-      if (constant.isList) emitMakeConstantListIfNotEmitted(buffer);
       jsAst.Expression init = js('#.# = #',
           [namer.globalObjectForConstant(constant), name,
            constantInitializerExpression(constant)]);
@@ -1010,18 +993,24 @@
     }
   }
 
-  void emitMakeConstantListIfNotEmitted(CodeBuffer buffer) {
-    if (hasMakeConstantList) return;
-    hasMakeConstantList = true;
+  jsAst.Template get makeConstantListTemplate {
+    // TODO(floitsch): there is no harm in caching the template.
+    return jsAst.js.uncachedExpressionTemplate(
+        '${namer.isolateName}.$makeConstListProperty(#)');
+  }
+
+  void emitMakeConstantList(CodeBuffer buffer) {
     buffer.write(
         jsAst.prettyPrint(
+            // Functions are stored in the hidden class and not as properties in
+            // the object. We never actually look at the value, but only want
+            // to know if the property exists.
             js.statement(r'''#.# = function(list) {
-                                     list.immutable$list = #;
-                                     list.fixed$length = #;
+                                     list.immutable$list = Array;
+                                     list.fixed$length = Array;
                                      return list;
                                    }''',
-                         [namer.isolateName, makeConstListProperty, initName,
-                          initName]),
+                         [namer.isolateName, makeConstListProperty]),
             compiler, monitor: compiler.dumpInfoTask));
     buffer.write(N);
   }
@@ -1220,52 +1209,48 @@
     mainBuffer.add(N);
   }
 
-  void writeLibraryDescriptors(
-      LibraryElement library,
-      Map<OutputUnit, CodeBuffer> libraryDescriptorBuffers) {
+  void writeLibraryDescriptors(CodeBuffer buffer, LibraryElement library) {
     var uri = "";
-    if (!compiler.enableMinification || backend.mustRetainUris) {
+    if (!compiler.enableMinification || backend.mustPreserveUris) {
       uri = library.canonicalUri;
       if (uri.scheme == 'file' && compiler.outputUri != null) {
         uri = relativize(compiler.outputUri, library.canonicalUri, false);
       }
     }
-    Map<OutputUnit, ClassBuilder> descriptors = elementDescriptors[library];
+    ClassBuilder descriptor = elementDescriptors[library];
+    if (descriptor == null) {
+      // Nothing of the library was emitted.
+      // TODO(floitsch): this should not happen. We currently have an example
+      // with language/prefix6_negative_test.dart where we have an instance
+      // method without its corresponding class.
+      return;
+    }
+
     String libraryName =
         (!compiler.enableMinification || backend.mustRetainLibraryNames) ?
         library.getLibraryName() :
         "";
 
-    for (OutputUnit outputUnit in compiler.deferredLoadTask.allOutputUnits) {
-      if (!descriptors.containsKey(outputUnit)) continue;
+    jsAst.Fun metadata = metadataEmitter.buildMetadataFunction(library);
 
-      ClassBuilder descriptor = descriptors[outputUnit];
+    jsAst.ObjectInitializer initializers = descriptor.toObjectInitializer();
 
-      jsAst.Fun metadata = metadataEmitter.buildMetadataFunction(library);
-
-      jsAst.ObjectInitializer initializers = descriptor.toObjectInitializer();
-
-      CodeBuffer libraryDescriptorBuffer =
-          libraryDescriptorBuffers.putIfAbsent(outputUnit,
-              () => new CodeBuffer());
-
-      compiler.dumpInfoTask.registerElementAst(library, metadata);
-      compiler.dumpInfoTask.registerElementAst(library, initializers);
-      libraryDescriptorBuffer
-          ..write('["$libraryName",$_')
-          ..write('"${uri}",$_')
-          ..write(metadata == null ? "" : jsAst.prettyPrint(metadata,
-                                                compiler,
-                                                monitor: compiler.dumpInfoTask))
-          ..write(',$_')
-          ..write(namer.globalObjectFor(library))
-          ..write(',$_')
-          ..write(jsAst.prettyPrint(initializers,
-                                    compiler,
-                                    monitor: compiler.dumpInfoTask))
-          ..write(library == compiler.mainApp ? ',${n}1' : "")
-          ..write('],$n');
-    }
+    compiler.dumpInfoTask.registerElementAst(library, metadata);
+    compiler.dumpInfoTask.registerElementAst(library, initializers);
+    buffer
+        ..write('["$libraryName",$_')
+        ..write('"${uri}",$_')
+        ..write(metadata == null ? "" : jsAst.prettyPrint(metadata,
+                                              compiler,
+                                              monitor: compiler.dumpInfoTask))
+        ..write(',$_')
+        ..write(namer.globalObjectFor(library))
+        ..write(',$_')
+        ..write(jsAst.prettyPrint(initializers,
+                                  compiler,
+                                  monitor: compiler.dumpInfoTask))
+        ..write(library == compiler.mainApp ? ',${n}1' : "")
+        ..write('],$n');
   }
 
   void emitPrecompiledConstructor(OutputUnit outputUnit,
@@ -1309,13 +1294,118 @@
     }
   }
 
-  void emitProgram(Program program) {
-    bool isProgramSplit = compiler.deferredLoadTask.isProgramSplit;
-    // Maps each output unit to a codebuffers with the library descriptors of
-    // the output unit emitted to it.
-    Map<OutputUnit, CodeBuffer> libraryDescriptorBuffers =
-        new Map<OutputUnit, CodeBuffer>();
+  void emitLibraries(Iterable<LibraryElement> libraries) {
+    if (libraries.isEmpty) return;
 
+    // TODO(karlklose): document what kinds of fields this loop adds to the
+    // library class builder.
+    for (LibraryElement element in libraries) {
+      LibraryElement library = element;
+      ClassBuilder builder = new ClassBuilder(library, namer);
+      if (classEmitter.emitFields(library, builder, null, emitStatics: true)) {
+        jsAst.ObjectInitializer initializer = builder.toObjectInitializer();
+        compiler.dumpInfoTask.registerElementAst(builder.element, initializer);
+        getElementDescriptor(library).properties.addAll(initializer.properties);
+      }
+    }
+  }
+
+  void emitTypedefs() {
+    OutputUnit mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
+
+    // Emit all required typedef declarations into the main output unit.
+    // TODO(karlklose): unify required classes and typedefs to declarations
+    // and have builders for each kind.
+    for (TypedefElement typedef in typedefsNeededForReflection) {
+      OutputUnit mainUnit = compiler.deferredLoadTask.mainOutputUnit;
+      LibraryElement library = typedef.library;
+      // TODO(karlklose): add a TypedefBuilder and move this code there.
+      DartType type = typedef.alias;
+      int typeIndex = metadataEmitter.reifyType(type);
+      String typeReference =
+          encoding.encodeTypedefFieldDescriptor(typeIndex);
+      jsAst.Property descriptor = new jsAst.Property(
+          js.string(namer.classDescriptorProperty),
+          js.string(typeReference));
+      jsAst.Node declaration = new jsAst.ObjectInitializer([descriptor]);
+      String mangledName = namer.getNameX(typedef);
+      String reflectionName = getReflectionName(typedef, mangledName);
+      getElementDescriptor(library)
+          ..addProperty(mangledName, declaration)
+          ..addProperty("+$reflectionName", js.string(''));
+      // Also emit a trivial constructor for CSP mode.
+      String constructorName = mangledName;
+      jsAst.Expression constructorAst = js('function() {}');
+      emitPrecompiledConstructor(mainOutputUnit,
+                                 constructorName,
+                                 constructorAst);
+    }
+  }
+
+  void emitMangledNames() {
+    if (!mangledFieldNames.isEmpty) {
+      var keys = mangledFieldNames.keys.toList();
+      keys.sort();
+      var properties = [];
+      for (String key in keys) {
+        var value = js.string('${mangledFieldNames[key]}');
+        properties.add(new jsAst.Property(js.string(key), value));
+      }
+
+      jsAst.Expression mangledNamesAccess =
+          generateEmbeddedGlobalAccess(embeddedNames.MANGLED_NAMES);
+      var map = new jsAst.ObjectInitializer(properties);
+      mainBuffer.write(
+          jsAst.prettyPrint(
+              js.statement('# = #', [mangledNamesAccess, map]),
+              compiler,
+              monitor: compiler.dumpInfoTask));
+      if (compiler.enableMinification) {
+        mainBuffer.write(';');
+      }
+    }
+    if (!mangledGlobalFieldNames.isEmpty) {
+      var keys = mangledGlobalFieldNames.keys.toList();
+      keys.sort();
+      var properties = [];
+      for (String key in keys) {
+        var value = js.string('${mangledGlobalFieldNames[key]}');
+        properties.add(new jsAst.Property(js.string(key), value));
+      }
+      jsAst.Expression mangledGlobalNamesAccess =
+          generateEmbeddedGlobalAccess(embeddedNames.MANGLED_GLOBAL_NAMES);
+      var map = new jsAst.ObjectInitializer(properties);
+      mainBuffer.write(
+          jsAst.prettyPrint(
+              js.statement('# = #', [mangledGlobalNamesAccess, map]),
+              compiler,
+              monitor: compiler.dumpInfoTask));
+      if (compiler.enableMinification) {
+        mainBuffer.write(';');
+      }
+    }
+  }
+
+  void checkEverythingEmitted(Iterable<Element> elements) {
+    List<Element> pendingStatics;
+    if (!compiler.hasIncrementalSupport) {
+      pendingStatics =
+          Elements.sortedByPosition(elements.where((e) => !e.isLibrary));
+
+      pendingStatics.forEach((element) =>
+          compiler.reportInfo(
+              element, MessageKind.GENERIC, {'text': 'Pending statics.'}));
+    }
+
+    if (pendingStatics != null && !pendingStatics.isEmpty) {
+      compiler.internalError(pendingStatics.first,
+          'Pending statics (see above).');
+    }
+  }
+
+  void emitMainOutputUnit(Map<OutputUnit, String> deferredLoadHashes,
+                          CodeBuffer nativeBuffer) {
+    bool isProgramSplit = compiler.deferredLoadTask.isProgramSplit;
     OutputUnit mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
 
     mainBuffer.add(buildGeneratedBy());
@@ -1370,169 +1460,51 @@
                '${globalsHolder}.$initName$_=${_}$initName$N');
     }
     mainBuffer.add('init()$N$n');
-    // Shorten the code by using [namer.currentIsolate] as temporary.
-    isolateProperties = namer.currentIsolate;
-    mainBuffer.add(
-        '$isolateProperties$_=$_$isolatePropertiesName$N');
+    mainBuffer.add('$isolateProperties$_=$_$isolatePropertiesName$N');
 
-    emitStaticFunctions();
+    emitStaticFunctions(task.outputStaticLists[mainOutputUnit]);
 
     // Only output the classesCollector if we actually have any classes.
     if (!(nativeClasses.isEmpty &&
           compiler.codegenWorld.staticFunctionsNeedingGetter.isEmpty &&
-        outputClassLists.values.every((classList) => classList.isEmpty) &&
-        typedefsNeededForReflection.isEmpty)) {
+          outputClassLists.values.every((classList) => classList.isEmpty) &&
+          typedefsNeededForReflection.isEmpty)) {
       // Shorten the code by using "$$" as temporary.
       classesCollector = r"$$";
       mainBuffer.add('var $classesCollector$_=${_}Object.create(null)$N$n');
     }
 
-    // Emit native classes on [nativeBuffer].
-    final CodeBuffer nativeBuffer = new CodeBuffer();
     if (!nativeClasses.isEmpty) {
-      addComment('Native classes', nativeBuffer);
       addComment('Native classes', mainBuffer);
-      nativeEmitter.generateNativeClasses(nativeClasses, mainBuffer,
-          additionalProperties);
     }
 
-    for (List<ClassElement> outputClassList in outputClassLists.values) {
-      for (ClassElement element in outputClassList) {
+    List<ClassElement> classes = task.outputClassLists[mainOutputUnit];
+    if (classes != null) {
+      for (ClassElement element in classes) {
         generateClass(element, getElementDescriptor(element));
       }
     }
 
-    nativeEmitter.finishGenerateNativeClasses();
-    nativeEmitter.assembleCode(nativeBuffer);
+    if (compiler.enableMinification) {
+      mainBuffer.write(';');
+    }
 
+    if (elementDescriptors.isNotEmpty) {
+      Iterable<LibraryElement> libraries =
+          task.outputLibraryLists[mainOutputUnit];
+      if (libraries == null) libraries = [];
+      emitLibraries(libraries);
+      emitTypedefs();
+      emitMangledNames();
 
-    // After this assignment we will produce invalid JavaScript code if we use
-    // the classesCollector variable.
-    classesCollector = 'classesCollector should not be used from now on';
+      checkEverythingEmitted(elementDescriptors.keys);
 
-    // TODO(sigurdm): Need to check this for each outputUnit.
-    if (!elementDescriptors.isEmpty) {
-      var oldClassesCollector = classesCollector;
-      classesCollector = r"$$";
-      if (compiler.enableMinification) {
-        mainBuffer.write(';');
+      CodeBuffer libraryBuffer = new CodeBuffer();
+      for (LibraryElement library in Elements.sortedByPosition(libraries)) {
+        writeLibraryDescriptors(libraryBuffer, library);
+        elementDescriptors.remove(library);
       }
 
-      // TODO(karlklose): document what kinds of fields this loop adds to the
-      // library class builder.
-      for (Element element in elementDescriptors.keys) {
-        // TODO(ahe): Should iterate over all libraries.  Otherwise, we will
-        // not see libraries that only have fields.
-        if (element.isLibrary) {
-          LibraryElement library = element;
-          ClassBuilder builder = new ClassBuilder(library, namer);
-          if (classEmitter.emitFields(
-                  library, builder, null, emitStatics: true)) {
-            jsAst.ObjectInitializer initializer =
-              builder.toObjectInitializer();
-            compiler.dumpInfoTask.registerElementAst(builder.element,
-                                                     initializer);
-            getElementDescriptor(library)
-                .properties.addAll(initializer.properties);
-          }
-        }
-      }
-
-      // Emit all required typedef declarations into the main output unit.
-      // TODO(karlklose): unify required classes and typedefs to declarations
-      // and have builders for each kind.
-      for (TypedefElement typedef in typedefsNeededForReflection) {
-        OutputUnit mainUnit = compiler.deferredLoadTask.mainOutputUnit;
-        LibraryElement library = typedef.library;
-        // TODO(karlklose): add a TypedefBuilder and move this code there.
-        DartType type = typedef.alias;
-        int typeIndex = metadataEmitter.reifyType(type);
-        String typeReference =
-            encoding.encodeTypedefFieldDescriptor(typeIndex);
-        jsAst.Property descriptor = new jsAst.Property(
-            js.string(namer.classDescriptorProperty),
-            js.string(typeReference));
-        jsAst.Node declaration = new jsAst.ObjectInitializer([descriptor]);
-        String mangledName = namer.getNameX(typedef);
-        String reflectionName = getReflectionName(typedef, mangledName);
-        getElementDescriptor(library)
-            ..addProperty(mangledName, declaration)
-            ..addProperty("+$reflectionName", js.string(''));
-        // Also emit a trivial constructor for CSP mode.
-        String constructorName = mangledName;
-        jsAst.Expression constructorAst = js('function() {}');
-        emitPrecompiledConstructor(mainOutputUnit,
-                                   constructorName,
-                                   constructorAst);
-      }
-
-      if (!mangledFieldNames.isEmpty) {
-        var keys = mangledFieldNames.keys.toList();
-        keys.sort();
-        var properties = [];
-        for (String key in keys) {
-          var value = js.string('${mangledFieldNames[key]}');
-          properties.add(new jsAst.Property(js.string(key), value));
-        }
-
-        jsAst.Expression mangledNamesAccess =
-            generateEmbeddedGlobalAccess(embeddedNames.MANGLED_NAMES);
-        var map = new jsAst.ObjectInitializer(properties);
-        mainBuffer.write(
-            jsAst.prettyPrint(
-                js.statement('# = #', [mangledNamesAccess, map]),
-                compiler,
-                monitor: compiler.dumpInfoTask));
-        if (compiler.enableMinification) {
-          mainBuffer.write(';');
-        }
-      }
-      if (!mangledGlobalFieldNames.isEmpty) {
-        var keys = mangledGlobalFieldNames.keys.toList();
-        keys.sort();
-        var properties = [];
-        for (String key in keys) {
-          var value = js.string('${mangledGlobalFieldNames[key]}');
-          properties.add(new jsAst.Property(js.string(key), value));
-        }
-        jsAst.Expression mangledGlobalNamesAccess =
-            generateEmbeddedGlobalAccess(embeddedNames.MANGLED_GLOBAL_NAMES);
-        var map = new jsAst.ObjectInitializer(properties);
-        mainBuffer.write(
-            jsAst.prettyPrint(
-                js.statement('# = #', [mangledGlobalNamesAccess, map]),
-                compiler,
-                monitor: compiler.dumpInfoTask));
-        if (compiler.enableMinification) {
-          mainBuffer.write(';');
-        }
-      }
-
-      List<Element> sortedElements =
-          Elements.sortedByPosition(elementDescriptors.keys);
-
-      Iterable<Element> pendingStatics;
-      if (!compiler.hasIncrementalSupport) {
-        pendingStatics = sortedElements.where((element) {
-            return !element.isLibrary &&
-                elementDescriptors[element].values.any((descriptor) =>
-                    descriptor != null);
-        });
-
-        pendingStatics.forEach((element) =>
-            compiler.reportInfo(
-                element, MessageKind.GENERIC, {'text': 'Pending statics.'}));
-      }
-
-      for (LibraryElement library in sortedElements.where((element) =>
-          element.isLibrary)) {
-        writeLibraryDescriptors(library, libraryDescriptorBuffers);
-        elementDescriptors[library] = const {};
-      }
-      if (pendingStatics != null && !pendingStatics.isEmpty) {
-        compiler.internalError(pendingStatics.first,
-            'Pending statics (see above).');
-      }
       mainBuffer
           ..write('(')
           ..write(
@@ -1541,30 +1513,27 @@
                   compiler))
           ..write(')')
           ..write('([$n')
-          ..add(libraryDescriptorBuffers[mainOutputUnit])
+          ..add(libraryBuffer)
           ..write('])$N');
 
       emitFinishClassesInvocationIfNecessary(mainBuffer);
-      classesCollector = oldClassesCollector;
     }
+
     typeTestEmitter.emitRuntimeTypeSupport(mainBuffer, mainOutputUnit);
     interceptorEmitter.emitGetInterceptorMethods(mainBuffer);
     interceptorEmitter.emitOneShotInterceptors(mainBuffer);
+
+    if (task.outputContainsConstantList) {
+      emitMakeConstantList(mainBuffer);
+    }
+
     // Constants in checked mode call into RTI code to set type information
     // which may need getInterceptor (and one-shot interceptor) methods, so
     // we have to make sure that [emitGetInterceptorMethods] and
     // [emitOneShotInterceptors] have been called.
     emitCompileTimeConstants(mainBuffer, mainOutputUnit);
 
-    if (isProgramSplit) {
-      /// Map from OutputUnit to a hash of its content. The hash uniquely
-      /// identifies the code of the output-unit. It does not include
-      /// boilerplate JS code, like the sourcemap directives or the hash
-      /// itself.
-      Map<OutputUnit, String> deferredLoadHashes =
-          emitDeferredCode(libraryDescriptorBuffers);
-      emitDeferredBoilerPlate(mainBuffer, deferredLoadHashes);
-    }
+    emitDeferredBoilerPlate(mainBuffer, deferredLoadHashes);
 
     // Static field initializations require the classes and compile-time
     // constants to be set up.
@@ -1573,6 +1542,7 @@
     interceptorEmitter.emitMapTypeToInterceptor(mainBuffer);
     emitLazilyInitializedStaticFields(mainBuffer);
 
+    mainBuffer.writeln();
     mainBuffer.add(nativeBuffer);
 
     metadataEmitter.emitMetadata(mainBuffer);
@@ -1686,6 +1656,83 @@
           ..add(cspBuffer.getText())
           ..close();
     }
+  }
+
+  /// Returns a map from OutputUnit to a hash of its content. The hash uniquely
+  /// identifies the code of the output-unit. It does not include
+  /// boilerplate JS code, like the sourcemap directives or the hash
+  /// itself.
+  Map<OutputUnit, String> emitDeferredOutputUnits() {
+    if (!compiler.deferredLoadTask.isProgramSplit) return const {};
+
+    Map<OutputUnit, CodeBuffer> outputBuffers =
+        new Map<OutputUnit, CodeBuffer>();
+
+    for (OutputUnit outputUnit in compiler.deferredLoadTask.allOutputUnits) {
+      if (outputUnit == compiler.deferredLoadTask.mainOutputUnit) continue;
+
+      List<Element> functions = task.outputStaticLists[outputUnit];
+      if (functions != null) {
+        emitStaticFunctions(functions);
+      }
+
+      List<ClassElement> classes = task.outputClassLists[outputUnit];
+      if (classes != null) {
+        for (ClassElement element in classes) {
+          generateClass(element, getElementDescriptor(element));
+        }
+      }
+
+      if (elementDescriptors.isNotEmpty) {
+        Iterable<LibraryElement> libraries =
+            task.outputLibraryLists[outputUnit];
+        if (libraries == null) libraries = [];
+        emitLibraries(libraries);
+
+        CodeBuffer buffer = new CodeBuffer();
+        outputBuffers[outputUnit] = buffer;
+        for (LibraryElement library in Elements.sortedByPosition(libraries)) {
+          writeLibraryDescriptors(buffer, library);
+          elementDescriptors.remove(library);
+        }
+      }
+    }
+
+    return emitDeferredCode(outputBuffers);
+  }
+
+  CodeBuffer buildNativesBuffer() {
+    // Emit native classes on [nativeBuffer].
+    final CodeBuffer nativeBuffer = new CodeBuffer();
+
+    if (nativeClasses.isEmpty) return nativeBuffer;
+
+
+    addComment('Native classes', nativeBuffer);
+
+    nativeEmitter.generateNativeClasses(nativeClasses, mainBuffer,
+        additionalProperties);
+
+    nativeEmitter.finishGenerateNativeClasses();
+    nativeEmitter.assembleCode(nativeBuffer);
+
+    return nativeBuffer;
+  }
+
+  void emitProgram(Program program) {
+    // Shorten the code by using [namer.currentIsolate] as temporary.
+    isolateProperties = namer.currentIsolate;
+
+    classesCollector = r"$$";
+
+    // Emit deferred units first, so we have their hashes.
+    // Map from OutputUnit to a hash of its content. The hash uniquely
+    // identifies the code of the output-unit. It does not include
+    // boilerplate JS code, like the sourcemap directives or the hash
+    // itself.
+    Map<OutputUnit, String> deferredLoadHashes = emitDeferredOutputUnits();
+    CodeBuffer nativeBuffer = buildNativesBuffer();
+    emitMainOutputUnit(deferredLoadHashes, nativeBuffer);
 
     if (backend.requiresPreamble &&
         !backend.htmlLibraryIsLoaded) {
@@ -1704,15 +1751,6 @@
     return '';
   }
 
-  ClassBuilder getElementDescriptorForOutputUnit(Element element,
-                                                 OutputUnit outputUnit) {
-    Map<OutputUnit, ClassBuilder> descriptors =
-        elementDescriptors.putIfAbsent(
-            element, () => new Map<OutputUnit, ClassBuilder>());
-    return descriptors.putIfAbsent(outputUnit,
-        () => new ClassBuilder(element, namer));
-  }
-
   ClassBuilder getElementDescriptor(Element element) {
     Element owner = element.library;
     if (!element.isLibrary && !element.isTopLevel && !element.isNative) {
@@ -1729,8 +1767,9 @@
     if (owner == null) {
       compiler.internalError(element, 'Owner is null.');
     }
-    return getElementDescriptorForOutputUnit(owner,
-        compiler.deferredLoadTask.outputUnitForElement(element));
+    return elementDescriptors.putIfAbsent(
+        owner,
+        () => new ClassBuilder(owner, namer));
   }
 
   /// Emits support-code for deferred loading into [buffer].
@@ -1802,20 +1841,17 @@
   /// Returns a mapping from outputUnit to a hash of the corresponding hunk that
   /// can be used for calling the initializer.
   Map<OutputUnit, String> emitDeferredCode(
-      Map<OutputUnit, CodeBuffer> libraryDescriptorBuffers) {
+      Map<OutputUnit, CodeBuffer> deferredBuffers) {
 
     Map<OutputUnit, String> hunkHashes = new Map<OutputUnit, String>();
 
     for (OutputUnit outputUnit in compiler.deferredLoadTask.allOutputUnits) {
       if (outputUnit == compiler.deferredLoadTask.mainOutputUnit) continue;
 
-      CodeBuffer libraryDescriptorBuffer = libraryDescriptorBuffers[outputUnit];
+      CodeBuffer libraryDescriptorBuffer = deferredBuffers[outputUnit];
 
       CodeBuffer outputBuffer = new CodeBuffer();
 
-      var oldClassesCollector = classesCollector;
-      classesCollector = r"$$";
-
       outputBuffer..write(buildGeneratedBy())
         ..write('${deferredInitializers}.current$_=$_'
                 'function$_(${globalsHolder}) {$N');
@@ -1855,8 +1891,6 @@
 
       }
 
-      classesCollector = oldClassesCollector;
-
       // Set the currentIsolate variable to the current isolate (which is
       // provided as second argument).
       // We need to do this, because we use the same variable for setting up
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart
index f541304..3738340 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart
@@ -8,10 +8,17 @@
 import '../common.dart';
 import '../js/js.dart' as js;
 
-import '../js_backend/js_backend.dart' show Namer, JavaScriptBackend;
-import '../js_emitter/js_emitter.dart' as emitterTask show
+import '../js_backend/js_backend.dart' show
+    Namer,
+    JavaScriptBackend,
+    JavaScriptConstantCompiler;
+
+import '../closure.dart' show ClosureFieldElement;
+
+import 'js_emitter.dart' as emitterTask show
     CodeEmitterTask,
-    Emitter;
+    Emitter,
+    InterceptorStubGenerator;
 
 import '../universe/universe.dart' show Universe;
 import '../deferred_load.dart' show DeferredLoadTask, OutputUnit;
@@ -42,13 +49,14 @@
   /// generate the deferredLoadingMap (to know which hunks to load).
   final Map<OutputUnit, Output> _outputs = <OutputUnit, Output>{};
 
-  Program buildProgram() {
-    Set<ClassElement> neededClasses = _task.neededClasses;
-    Iterable<Element> neededStatics = backend.generatedCode.keys
-        .where((Element e) => !e.isInstanceMember && !e.isField);
+  /// Mapping from [ConstantValue] to constructed [Constant]. We need this to
+  /// update field-initializers to point to the ConstantModel.
+  final Map<ConstantValue, Constant> _constants = <ConstantValue, Constant>{};
 
-    Elements.sortedByPosition(neededClasses).forEach(_registry.registerElement);
-    Elements.sortedByPosition(neededStatics).forEach(_registry.registerElement);
+  Program buildProgram() {
+    _task.outputClassLists.forEach(_registry.registerElements);
+    _task.outputStaticLists.forEach(_registry.registerElements);
+    _task.outputConstantLists.forEach(_registerConstants);
 
     // TODO(kasperl): There's code that implicitly needs access to the special
     // $ holder so we have to register that. Can we track if we have to?
@@ -62,7 +70,8 @@
     outputs[0] = mainOutput;
     outputs.setAll(1, deferredOutputs);
 
-    Program result = new Program(outputs, _buildLoadMap());
+    Program result =
+        new Program(outputs, _task.outputContainsConstantList, _buildLoadMap());
 
     // Resolve the superclass references after we've processed all the classes.
     _classes.forEach((ClassElement element, Class c) {
@@ -70,9 +79,16 @@
         c.setSuperclass(_classes[element.superclass]);
       }
     });
+
+    _markEagerClasses();
+
     return result;
   }
 
+  void _markEagerClasses() {
+    _markEagerInterceptorClasses();
+  }
+
   /// Builds a map from loadId to outputs-to-load.
   Map<String, List<Output>> _buildLoadMap() {
     List<OutputUnit> convertHunks(List<OutputUnit> hunks) {
@@ -96,6 +112,9 @@
         "",  // The empty string is the name for the main output file.
         namer.elementAccess(_compiler.mainFunction),
         _buildLibraries(fragment),
+        _buildStaticNonFinalFields(fragment),
+        _buildStaticLazilyInitializedFields(fragment),
+        _buildConstants(fragment),
         _registry.holders.toList(growable: false));
     _outputs[fragment.outputUnit] = result;
     return result;
@@ -115,11 +134,74 @@
                                       Fragment fragment) {
     DeferredOutput result = new DeferredOutput(
         _outputFileName(fragment.name), fragment.name,
-        mainOutput, _buildLibraries(fragment));
+        mainOutput,
+        _buildLibraries(fragment),
+        _buildStaticNonFinalFields(fragment),
+        _buildStaticLazilyInitializedFields(fragment),
+        _buildConstants(fragment));
     _outputs[fragment.outputUnit] = result;
     return result;
   }
 
+  List<Constant> _buildConstants(Fragment fragment) {
+    List<ConstantValue> constantValues =
+        _task.outputConstantLists[fragment.outputUnit];
+    if (constantValues == null) return const <Constant>[];
+    return constantValues.map((ConstantValue value) => _constants[value])
+        .toList(growable: false);
+  }
+
+  List<StaticField> _buildStaticNonFinalFields(Fragment fragment) {
+    // TODO(floitsch): handle static non-final fields correctly with deferred
+    // libraries.
+    if (fragment != _registry.mainFragment) return const <StaticField>[];
+    Iterable<VariableElement> staticNonFinalFields =
+        backend.constants.getStaticNonFinalFieldsForEmission();
+    return Elements.sortedByPosition(staticNonFinalFields)
+        .map(_buildStaticField)
+        .toList(growable: false);
+  }
+
+  StaticField _buildStaticField(Element element) {
+    JavaScriptConstantCompiler handler = backend.constants;
+    ConstantValue initialValue = handler.getInitialValueFor(element).value;
+    js.Expression code = _task.emitter.constantReference(initialValue);
+    String name = namer.getNameOfGlobalField(element);
+    bool isFinal = false;
+    bool isLazy = false;
+    return new StaticField(name, _registry.registerHolder(r'$'), code,
+                           isFinal, isLazy);
+  }
+
+  List<StaticField> _buildStaticLazilyInitializedFields(Fragment fragment) {
+    // TODO(floitsch): lazy fields should just be in their respective
+    // libraries.
+    if (fragment != _registry.mainFragment) return const <StaticField>[];
+
+    JavaScriptConstantCompiler handler = backend.constants;
+    List<VariableElement> lazyFields =
+        handler.getLazilyInitializedFieldsForEmission();
+    return Elements.sortedByPosition(lazyFields)
+        .map(_buildLazyField)
+        .where((field) => field != null)  // Happens when the field was unused.
+        .toList(growable: false);
+  }
+
+  StaticField _buildLazyField(Element element) {
+    JavaScriptConstantCompiler handler = backend.constants;
+    js.Expression code = backend.generatedCode[element];
+    // The code is null if we ended up not needing the lazily
+    // initialized field after all because of constant folding
+    // before code generation.
+    if (code == null) return null;
+
+    String name = namer.getNameOfGlobalField(element);
+    bool isFinal = element.isFinal;
+    bool isLazy = true;
+    return new StaticField(name, _registry.registerHolder(r'$'), code,
+                           isFinal, isLazy);
+  }
+
   List<Library> _buildLibraries(Fragment fragment) {
     List<Library> libraries = new List<Library>(fragment.length);
     int count = 0;
@@ -142,6 +224,11 @@
         .where((e) => universe.staticFunctionsNeedingGetter.contains(e))
         .map(_buildStaticMethodTearOff));
 
+    if (library == backend.interceptorsLibrary) {
+      statics.addAll(_generateGetInterceptorMethods());
+      statics.addAll(_generateOneShotInterceptors());
+    }
+
     List<Class> classes = elements
         .where((e) => e is ClassElement)
         .map(_buildClass)
@@ -151,20 +238,33 @@
   }
 
   Class _buildClass(ClassElement element) {
+    bool isInstantiated =
+        _compiler.codegenWorld.directlyInstantiatedClasses.contains(element);
+
     List<Method> methods = [];
+    List<InstanceField> fields = [];
+
     void visitMember(ClassElement enclosing, Element member) {
       assert(invariant(element, member.isDeclaration));
-      if (Elements.isNonAbstractInstanceMethod(member)) {
+      assert(invariant(element, element == enclosing));
+
+      if (Elements.isNonAbstractInstanceMember(member)) {
         js.Expression code = backend.generatedCode[member];
         // TODO(kasperl): Figure out under which conditions code is null.
         if (code != null) methods.add(_buildMethod(member, code));
+      } else if (member.isField && !member.isStatic) {
+        fields.add(_buildInstanceField(member, enclosing));
       }
     }
+
     ClassElement implementation = element.implementation;
-    implementation.forEachMember(visitMember, includeBackendMembers: true);
+    if (isInstantiated) {
+      implementation.forEachMember(visitMember, includeBackendMembers: true);
+    }
     String name = namer.getNameOfClass(element);
-    String holder = namer.globalObjectFor(element);
-    Class result = new Class(name, _registry.registerHolder(holder), methods);
+    String holderName = namer.globalObjectFor(element);
+    Holder holder = _registry.registerHolder(holderName);
+    Class result = new Class(name, holder, methods, fields);
     _classes[element] = result;
     return result;
   }
@@ -174,6 +274,107 @@
     return new Method(name, code);
   }
 
+  // The getInterceptor methods directly access the prototype of classes.
+  // We must evaluate these classes eagerly so that the prototype is
+  // accessible.
+  void _markEagerInterceptorClasses() {
+    Map<String, Set<ClassElement>> specializedGetInterceptors =
+        backend.specializedGetInterceptors;
+    for (Set<ClassElement> classes in specializedGetInterceptors.values) {
+      for (ClassElement element in classes) {
+        Class cls = _classes[element];
+        if (cls != null) cls.isEager = true;
+      }
+    }
+  }
+
+  Iterable<StaticMethod> _generateGetInterceptorMethods() {
+    emitterTask.InterceptorStubGenerator stubGenerator =
+        new emitterTask.InterceptorStubGenerator(_compiler, namer, backend);
+
+    String holderName = namer.globalObjectFor(backend.interceptorsLibrary);
+    Holder holder = _registry.registerHolder(holderName);
+
+    Map<String, Set<ClassElement>> specializedGetInterceptors =
+        backend.specializedGetInterceptors;
+    List<String> names = specializedGetInterceptors.keys.toList()..sort();
+    return names.map((String name) {
+      Set<ClassElement> classes = specializedGetInterceptors[name];
+      js.Expression code = stubGenerator.generateGetInterceptorMethod(classes);
+      return new StaticMethod(name, holder, code);
+    });
+  }
+
+  bool _fieldNeedsGetter(VariableElement field) {
+    assert(field.isField);
+    if (_fieldAccessNeverThrows(field)) return false;
+    return backend.shouldRetainGetter(field)
+        || _compiler.codegenWorld.hasInvokedGetter(field, _compiler.world);
+  }
+
+  bool _fieldNeedsSetter(VariableElement field) {
+    assert(field.isField);
+    if (_fieldAccessNeverThrows(field)) return false;
+    return (!field.isFinal && !field.isConst)
+        && (backend.shouldRetainSetter(field)
+            || _compiler.codegenWorld.hasInvokedSetter(field, _compiler.world));
+  }
+
+  // We never access a field in a closure (a captured variable) without knowing
+  // that it is there.  Therefore we don't need to use a getter (that will throw
+  // if the getter method is missing), but can always access the field directly.
+  bool _fieldAccessNeverThrows(VariableElement field) {
+    return field is ClosureFieldElement;
+  }
+
+  InstanceField _buildInstanceField(VariableElement field,
+                                    ClassElement holder) {
+    assert(invariant(field, field.isDeclaration));
+    String name = namer.fieldPropertyName(field);
+
+    int getterFlags = 0;
+    if (_fieldNeedsGetter(field)) {
+      bool isIntercepted = backend.fieldHasInterceptedGetter(field);
+      if (isIntercepted) {
+        getterFlags += 2;
+        if (backend.isInterceptorClass(holder)) {
+          getterFlags += 1;
+        }
+      } else {
+        getterFlags = 1;
+      }
+    }
+
+    int setterFlags = 0;
+    if (_fieldNeedsSetter(field)) {
+      bool isIntercepted = backend.fieldHasInterceptedSetter(field);
+      if (isIntercepted) {
+        setterFlags += 2;
+        if (backend.isInterceptorClass(holder)) {
+          setterFlags += 1;
+        }
+      } else {
+        setterFlags = 1;
+      }
+    }
+
+    return new InstanceField(name, getterFlags, setterFlags);
+  }
+
+  Iterable<StaticMethod> _generateOneShotInterceptors() {
+    emitterTask.InterceptorStubGenerator stubGenerator =
+        new emitterTask.InterceptorStubGenerator(_compiler, namer, backend);
+
+    String holderName = namer.globalObjectFor(backend.interceptorsLibrary);
+    Holder holder = _registry.registerHolder(holderName);
+
+    List<String> names = backend.oneShotInterceptors.keys.toList()..sort();
+    return names.map((String name) {
+      js.Expression code = stubGenerator.generateOneShotInterceptor(name);
+      return new StaticMethod(name, holder, code);
+    });
+  }
+
   StaticMethod _buildStaticMethod(FunctionElement element) {
     String name = namer.getNameOfMember(element);
     String holder = namer.globalObjectFor(element);
@@ -188,4 +389,17 @@
     js.Expression code = js.string("<<unimplemented>>");
     return new StaticMethod(name, _registry.registerHolder(holder), code);
   }
+
+  void _registerConstants(OutputUnit outputUnit,
+                          List<ConstantValue> constantValues) {
+    if (constantValues == null) return;
+    for (ConstantValue constantValue in constantValues) {
+      assert(!_constants.containsKey(constantValue));
+      String name = namer.constantName(constantValue);
+      String constantObject = namer.globalObjectForConstant(constantValue);
+      Holder holder = _registry.registerHolder(constantObject);
+      Constant constant = new Constant(name, holder, constantValue);
+      _constants[constantValue] = constant;
+    };
+  }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/registry.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/registry.dart
index ee99264..0c036b3 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/registry.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/registry.dart
@@ -22,7 +22,10 @@
   final OutputUnit outputUnit;
 
   Fragment.main(this.outputUnit) : name = "";
-  Fragment.deferred(this.outputUnit, this.name);
+
+  Fragment.deferred(this.outputUnit, this.name) {
+    assert(name != "");
+  }
 
   void add(LibraryElement library, Element element) {
     if (_lastLibrary != library) {
@@ -64,22 +67,26 @@
   bool get _isProgramSplit => _deferredLoadTask.isProgramSplit;
   OutputUnit get _mainOutputUnit => _deferredLoadTask.mainOutputUnit;
 
-  Fragment _computeTargetFragment(Element element) {
+  Fragment _mapUnitToFragment(OutputUnit targetUnit) {
     if (mainFragment == null) {
       mainFragment = new Fragment.main(_deferredLoadTask.mainOutputUnit);
     }
-    if (!_isProgramSplit) return mainFragment;
-    OutputUnit targetUnit = _deferredLoadTask.outputUnitForElement(element);
+    if (!_isProgramSplit) {
+      assert(targetUnit == _deferredLoadTask.mainOutputUnit);
+      return mainFragment;
+    }
     if (targetUnit == _mainOutputUnit) return mainFragment;
     String name = targetUnit.name;
     return _deferredFragmentsMap.putIfAbsent(
         targetUnit, () => new Fragment.deferred(targetUnit, name));
   }
 
-  /// Adds the element to the list of elements of the library in the right
-  /// fragment.
-  void registerElement(Element element) {
-    _computeTargetFragment(element).add(element.library, element);
+  /// Adds all elements to their respective libraries in the correct fragment.
+  void registerElements(OutputUnit outputUnit, List<Element> elements) {
+    Fragment targetFragment = _mapUnitToFragment(outputUnit);
+    for (Element element in Elements.sortedByPosition(elements)) {
+      targetFragment.add(element.library, element);
+    }
   }
 
   Holder registerHolder(String name) {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index bf9f3bb..28f0632 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -634,7 +634,7 @@
     // raw type.
     } else if (!RuntimeTypes.hasTypeArguments(type)) {
       TypeMask expressionMask = expression.instructionType;
-      assert(TypeMask.isNormalized(expressionMask, classWorld));
+      assert(TypeMask.assertIsNormalized(expressionMask, classWorld));
       TypeMask typeMask = (element == compiler.nullClass)
           ? new TypeMask.subtype(element, classWorld)
           : new TypeMask.nonNullSubtype(element, classWorld);
diff --git a/sdk/lib/_internal/compiler/implementation/types/flat_type_mask.dart b/sdk/lib/_internal/compiler/implementation/types/flat_type_mask.dart
index 9975c28a..91023a3 100644
--- a/sdk/lib/_internal/compiler/implementation/types/flat_type_mask.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/flat_type_mask.dart
@@ -43,7 +43,7 @@
 
   /**
    * Ensures that the generated mask is normalized, i.e., a call to
-   * [TypeMask.isNormalized] with the factory's result returns `true`.
+   * [TypeMask.assertIsNormalized] with the factory's result returns `true`.
    */
   factory FlatTypeMask.normalized(ClassElement base, int flags, World world) {
     if ((flags >> 1) == EMPTY || ((flags >> 1) == EXACT)) {
@@ -240,8 +240,8 @@
 
   TypeMask union(TypeMask other, ClassWorld classWorld) {
     assert(other != null);
-    assert(TypeMask.isNormalized(this, classWorld));
-    assert(TypeMask.isNormalized(other, classWorld));
+    assert(TypeMask.assertIsNormalized(this, classWorld));
+    assert(TypeMask.assertIsNormalized(other, classWorld));
     if (other is! FlatTypeMask) return other.union(this, classWorld);
     FlatTypeMask flatOther = other;
     if (isEmpty) {
@@ -265,8 +265,8 @@
 
   TypeMask unionSame(FlatTypeMask other, ClassWorld classWorld) {
     assert(base == other.base);
-    assert(TypeMask.isNormalized(this, classWorld));
-    assert(TypeMask.isNormalized(other, classWorld));
+    assert(TypeMask.assertIsNormalized(this, classWorld));
+    assert(TypeMask.assertIsNormalized(other, classWorld));
     // The two masks share the base type, so we must chose the least
     // constraining kind (the highest) of the two. If either one of
     // the masks are nullable the result should be nullable too.
@@ -279,15 +279,15 @@
     } else if (other.flags == combined) {
       return other;
     } else {
-      return new FlatTypeMask.internal(base, combined);
+      return new FlatTypeMask.normalized(base, combined, classWorld);
     }
   }
 
   TypeMask unionStrictSubclass(FlatTypeMask other, ClassWorld classWorld) {
     assert(base != other.base);
     assert(classWorld.isSubclassOf(other.base, base));
-    assert(TypeMask.isNormalized(this, classWorld));
-    assert(TypeMask.isNormalized(other, classWorld));
+    assert(TypeMask.assertIsNormalized(this, classWorld));
+    assert(TypeMask.assertIsNormalized(other, classWorld));
     int combined;
     if ((isExact && other.isExact) || base == classWorld.objectClass) {
       // Since the other mask is a subclass of this mask, we need the
@@ -305,9 +305,7 @@
     // If we weaken the constraint on this type, we have to make sure that
     // the result is normalized.
     return (flags != combined)
-        ? (combined >> 1 == flags >> 1)
-            ? new FlatTypeMask.internal(base, combined)
-            : new FlatTypeMask.normalized(base, combined, classWorld)
+        ? new FlatTypeMask.normalized(base, combined, classWorld)
         : this;
   }
 
@@ -315,8 +313,8 @@
     assert(base != other.base);
     assert(!classWorld.isSubclassOf(other.base, base));
     assert(classWorld.isSubtypeOf(other.base, base));
-    assert(TypeMask.isNormalized(this, classWorld));
-    assert(TypeMask.isNormalized(other, classWorld));
+    assert(TypeMask.assertIsNormalized(this, classWorld));
+    assert(TypeMask.assertIsNormalized(other, classWorld));
     // Since the other mask is a subtype of this mask, we need the
     // resulting union to be a subtype too. If either one of the masks
     // are nullable the result should be nullable too.
@@ -324,22 +322,22 @@
     // We know there is at least one subtype, [other.base], so no need
     // to normalize.
     return (flags != combined)
-        ? new FlatTypeMask.internal(base, combined)
+        ? new FlatTypeMask.normalized(base, combined, classWorld)
         : this;
   }
 
   TypeMask intersection(TypeMask other, ClassWorld classWorld) {
     assert(other != null);
     if (other is! FlatTypeMask) return other.intersection(this, classWorld);
-    assert(TypeMask.isNormalized(this, classWorld));
-    assert(TypeMask.isNormalized(other, classWorld));
+    assert(TypeMask.assertIsNormalized(this, classWorld));
+    assert(TypeMask.assertIsNormalized(other, classWorld));
     FlatTypeMask flatOther = other;
     if (isEmpty) {
       return flatOther.isNullable ? this : nonNullable();
     } else if (flatOther.isEmpty) {
       return isNullable ? flatOther : other.nonNullable();
     } else if (base == flatOther.base) {
-      return intersectionSame(flatOther);
+      return intersectionSame(flatOther, classWorld);
     } else if (classWorld.isSubclassOf(flatOther.base, base)) {
       return intersectionStrictSubclass(flatOther, classWorld);
     } else if (classWorld.isSubclassOf(base, flatOther.base)) {
@@ -353,7 +351,7 @@
     }
   }
 
-  TypeMask intersectionSame(FlatTypeMask other) {
+  TypeMask intersectionSame(FlatTypeMask other, ClassWorld classWorld) {
     assert(base == other.base);
     // The two masks share the base type, so we must chose the most
     // constraining kind (the lowest) of the two. Only if both masks
@@ -367,13 +365,14 @@
     } else if (other.flags == combined) {
       return other;
     } else {
-      return new FlatTypeMask.internal(base, combined);
+      return new FlatTypeMask.normalized(base, combined, classWorld);
     }
   }
 
-  TypeMask intersectionStrictSubclass(FlatTypeMask other, ClassWorld world) {
+  TypeMask intersectionStrictSubclass(FlatTypeMask other,
+                                      ClassWorld classWorld) {
     assert(base != other.base);
-    assert(world.isSubclassOf(other.base, base));
+    assert(classWorld.isSubclassOf(other.base, base));
     // If this mask isn't at least a subclass mask, then the
     // intersection with the other mask is empty.
     if (isExact) return intersectionEmpty(other);
@@ -386,7 +385,7 @@
     if (other.flags == combined) {
       return other;
     } else {
-      return new FlatTypeMask.internal(other.base, combined);
+      return new FlatTypeMask.normalized(other.base, combined, classWorld);
     }
   }
 
@@ -404,7 +403,7 @@
     if (other.flags == combined) {
       return other;
     } else {
-      return new FlatTypeMask.internal(other.base, combined);
+      return new FlatTypeMask.normalized(other.base, combined, classWorld);
     }
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/types/type_mask.dart b/sdk/lib/_internal/compiler/implementation/types/type_mask.dart
index 478f14f..bb97a15 100644
--- a/sdk/lib/_internal/compiler/implementation/types/type_mask.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/type_mask.dart
@@ -101,25 +101,52 @@
   }
 
   /**
-   * Checks whether this mask uses the smallest possible representation for
+   * Asserts that this mask uses the smallest possible representation for
    * its types. Currently, we normalize subtype and subclass to exact if no
    * subtypes or subclasses are present and subtype to subclass if only
    * subclasses exist. We also normalize exact to empty if the corresponding
    * baseclass was never instantiated.
    */
-  static bool isNormalized(TypeMask mask, ClassWorld classWorld) {
+  static bool assertIsNormalized(TypeMask mask, ClassWorld classWorld) {
+    String reason = getNotNormalizedReason(mask, classWorld);
+    return invariant(NO_LOCATION_SPANNABLE, reason == null,
+        message: () => '$mask is not normalized: $reason');
+  }
+
+  static String getNotNormalizedReason(TypeMask mask, ClassWorld classWorld) {
     mask = nonForwardingMask(mask);
     if (mask is FlatTypeMask) {
-      if (mask.isEmpty) return true;
-      if (mask.isExact) return classWorld.isInstantiated(mask.base);
-      if (mask.isSubclass) return classWorld.hasAnySubclass(mask.base);
+      if (mask.isEmpty) return null;
+      if (mask.isExact) {
+        if (!classWorld.isInstantiated(mask.base)) {
+          return 'Exact ${mask.base} is not instantiated.';
+        }
+        return null;
+      }
+      if (mask.isSubclass) {
+        if (!classWorld.hasAnySubclass(mask.base)) {
+          return 'Subclass ${mask.base} does not have any subclasses.';
+        }
+        return null;
+      }
       assert(mask.isSubtype);
-      return classWorld.hasAnySubtype(mask.base) &&
-             !classWorld.hasOnlySubclasses(mask.base);
+      if (!classWorld.hasAnySubtype(mask.base)) {
+        return 'Subtype ${mask.base} does not have any subclasses.';
+      }
+      if (classWorld.hasOnlySubclasses(mask.base)) {
+        return 'Subtype ${mask.base} only has subclasses.';
+      }
+      return null;
     } else if (mask is UnionTypeMask) {
-      return mask.disjointMasks.every((mask) => isNormalized(mask, classWorld));
+      for (TypeMask submask in mask.disjointMasks) {
+        String submaskReason = getNotNormalizedReason(submask, classWorld);
+        if (submaskReason != null) {
+          return 'Submask $submask in $mask: $submaskReason.';
+        }
+      }
+      return null;
     }
-    return false;
+    return 'Unknown type mask $mask.';
   }
 
   /**
diff --git a/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart b/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
index 083cf7f..0ad1cc6 100644
--- a/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
@@ -15,7 +15,7 @@
   }
 
   static TypeMask unionOf(Iterable<TypeMask> masks, ClassWorld classWorld) {
-    assert(masks.every((mask) => TypeMask.isNormalized(mask, classWorld)));
+    assert(masks.every((mask) => TypeMask.assertIsNormalized(mask, classWorld)));
     List<FlatTypeMask> disjoint = <FlatTypeMask>[];
     unionOfHelper(masks, disjoint, classWorld);
     if (disjoint.isEmpty) return new TypeMask.nonNullEmpty();
@@ -24,7 +24,7 @@
     }
     if (disjoint.length == 1) return disjoint[0];
     UnionTypeMask union = new UnionTypeMask._internal(disjoint);
-    assert(TypeMask.isNormalized(union, classWorld));
+    assert(TypeMask.assertIsNormalized(union, classWorld));
     return union;
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/use_unused_api.dart b/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
index d4a270e..354d710 100644
--- a/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
+++ b/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
@@ -232,7 +232,8 @@
     ..buildDoubleLiteral(null)
     ..buildBooleanLiteral(null)
     ..buildNullLiteral()
-    ..buildStringLiteral(null);
+    ..buildStringLiteral(null)
+    ..buildDynamicGet(null, null);
 }
 
 useCompiler(dart2jslib.Compiler compiler) {
diff --git a/sdk/lib/_internal/compiler/js_lib/core_patch.dart b/sdk/lib/_internal/compiler/js_lib/core_patch.dart
index 49cc6cb..77098e1 100644
--- a/sdk/lib/_internal/compiler/js_lib/core_patch.dart
+++ b/sdk/lib/_internal/compiler/js_lib/core_patch.dart
@@ -6,7 +6,7 @@
 import "dart:_internal" as _symbol_dev;
 import 'dart:_interceptors';
 import 'dart:_js_helper' show patch,
-                              checkNull,
+                              checkInt,
                               getRuntimeType,
                               JSSyntaxRegExp,
                               Primitives,
@@ -156,19 +156,16 @@
                      int second,
                      int millisecond,
                      bool isUtc)
-      : this.isUtc = checkNull(isUtc),
-        millisecondsSinceEpoch = Primitives.valueFromDecomposedDate(
-            year, month, day, hour, minute, second, millisecond, isUtc) {
-    if (millisecondsSinceEpoch == null) throw new ArgumentError();
-    Primitives.lazyAsJsDate(this);
-  }
+        // checkBool is manually inlined here because dart2js doesn't inline it
+        // and [isUtc] is usually a constant.
+      : this.isUtc = isUtc is bool ? isUtc : throw new ArgumentError(isUtc),
+        millisecondsSinceEpoch = checkInt(Primitives.valueFromDecomposedDate(
+            year, month, day, hour, minute, second, millisecond, isUtc));
 
   @patch
   DateTime._now()
       : isUtc = false,
-        millisecondsSinceEpoch = Primitives.dateNow() {
-    Primitives.lazyAsJsDate(this);
-  }
+        millisecondsSinceEpoch = Primitives.dateNow();
 
   @patch
   static int _brokenDownDateToMillisecondsSinceEpoch(
diff --git a/sdk/lib/_internal/compiler/js_lib/js_array.dart b/sdk/lib/_internal/compiler/js_lib/js_array.dart
index c817e11..23fbeca 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_array.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_array.dart
@@ -70,7 +70,10 @@
       JS('JSExtendableArray', '#', new JSArray<E>.typed(allocation));
 
   static List markFixedList(List list) {
-    JS('void', r'#.fixed$length = init', list);
+    // Functions are stored in the hidden class and not as properties in
+    // the object. We never actually look at the value, but only want
+    // to know if the property exists.
+    JS('void', r'#.fixed$length = Array', list);
     return JS('JSFixedArray', '#', list);
   }
 
diff --git a/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart b/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
index af3226e..5f613d3 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
@@ -141,7 +141,17 @@
     if (jsLibraries == null) return result;
     for (List data in jsLibraries) {
       String name = data[0];
-      Uri uri = Uri.parse(data[1]);
+      String uriString = data[1];
+      Uri uri;
+      // The Uri has been compiled out. Create a URI from the simple name.
+      if (uriString != "") {
+        uri = Uri.parse(uriString);
+      } else {
+        uri = new Uri(scheme: 'https',
+                      host: 'dartlang.org',
+                      path: 'dart2js-stripped-uri',
+                      queryParameters: { 'lib': name });
+      }
       List<String> classes = data[2];
       List<String> functions = data[3];
       var metadataFunction = data[4];
diff --git a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
index ec49eff..1f392a8 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart
@@ -24,8 +24,8 @@
 /// The set of all valid configuration options for this transformer.
 final _validOptions = new Set<String>.from([
   'commandLineOptions', 'checked', 'csp', 'minify', 'verbose', 'environment',
-  'analyzeAll', 'suppressWarnings', 'suppressHints', 'suppressPackageWarnings',
-  'terse'
+  'analyzeAll', 'preserveUris', 'suppressWarnings', 'suppressHints',
+  'suppressPackageWarnings', 'terse'
 ]);
 
 /// A [Transformer] that uses dart2js's library API to transform Dart
@@ -141,6 +141,7 @@
         environment: _configEnvironment,
         packageRoot: _environment.rootPackage.path("packages"),
         analyzeAll: _configBool('analyzeAll'),
+        preserveUris: _configBool('preserveUris'),
         suppressWarnings: _configBool('suppressWarnings'),
         suppressHints: _configBool('suppressHints'),
         suppressPackageWarnings: _configBool(
diff --git a/sdk/lib/_internal/pub/lib/src/dart.dart b/sdk/lib/_internal/pub/lib/src/dart.dart
index 0b5ab8c..a020d9b 100644
--- a/sdk/lib/_internal/pub/lib/src/dart.dart
+++ b/sdk/lib/_internal/pub/lib/src/dart.dart
@@ -65,6 +65,7 @@
     Map<String, String> environment,
     String packageRoot,
     bool analyzeAll: false,
+    bool preserveUris: false,
     bool suppressWarnings: false,
     bool suppressHints: false,
     bool suppressPackageWarnings: true,
@@ -78,6 +79,7 @@
     if (minify) options.add('--minify');
     if (verbose) options.add('--verbose');
     if (analyzeAll) options.add('--analyze-all');
+    if (preserveUris) options.add('--preserve-uris');
     if (suppressWarnings) options.add('--suppress-warnings');
     if (suppressHints) options.add('--suppress-hints');
     if (!suppressPackageWarnings) options.add('--show-package-warnings');
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/dart2js_transformer.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/dart2js_transformer.dart
index 7878c45..0d25cb8 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/barback/dart2js_transformer.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/dart2js_transformer.dart
@@ -30,6 +30,7 @@
         'verbose',
         'environment',
         'analyzeAll',
+        'preserveUris',
         'suppressWarnings',
         'suppressHints',
         'suppressPackageWarnings',
@@ -152,6 +153,7 @@
         environment: _configEnvironment,
         packageRoot: _environment.rootPackage.path("packages"),
         analyzeAll: _configBool('analyzeAll'),
+        preserveUris: _configBool('preserveUris'),
         suppressWarnings: _configBool('suppressWarnings'),
         suppressHints: _configBool('suppressHints'),
         suppressPackageWarnings: _configBool(
diff --git a/sdk/lib/_internal/pub_generated/lib/src/dart.dart b/sdk/lib/_internal/pub_generated/lib/src/dart.dart
index 35ff526..b639999 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/dart.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/dart.dart
@@ -58,9 +58,10 @@
 Future compile(String entrypoint, CompilerProvider provider,
     {Iterable<String> commandLineOptions, bool checked: false, bool csp: false,
     bool minify: true, bool verbose: false, Map<String, String> environment,
-    String packageRoot, bool analyzeAll: false, bool suppressWarnings: false,
-    bool suppressHints: false, bool suppressPackageWarnings: true, bool terse:
-    false, bool includeSourceMapUrls: false, bool toDart: false}) {
+    String packageRoot, bool analyzeAll: false, bool preserveUris: false,
+    bool suppressWarnings: false, bool suppressHints: false,
+    bool suppressPackageWarnings: true, bool terse: false,
+    bool includeSourceMapUrls: false, bool toDart: false}) {
   return new Future.sync(() {
     var options = <String>['--categories=Client,Server'];
     if (checked) options.add('--enable-checked-mode');
@@ -68,6 +69,7 @@
     if (minify) options.add('--minify');
     if (verbose) options.add('--verbose');
     if (analyzeAll) options.add('--analyze-all');
+    if (preserveUris) options.add('--preserve-uris');
     if (suppressWarnings) options.add('--suppress-warnings');
     if (suppressHints) options.add('--suppress-hints');
     if (!suppressPackageWarnings) options.add('--show-package-warnings');
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 9a28764..1c465c6 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -1430,6 +1430,31 @@
 class CacheStorage extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory CacheStorage._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('CacheStorage.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future create(String cacheName) native;
+
+  @DomName('CacheStorage.delete')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future delete(String cacheName) native;
+
+  @DomName('CacheStorage.get')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future get(String cacheName) native;
+
+  @DomName('CacheStorage.has')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future has(String cacheName) native;
+
+  @DomName('CacheStorage.keys')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future keys() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2819,6 +2844,42 @@
 class CredentialsContainer extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory CredentialsContainer._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('CredentialsContainer.notifyFailedSignIn')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future notifyFailedSignIn([Credential credential]) native;
+
+  @DomName('CredentialsContainer.notifySignedIn')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future notifySignedIn([Credential credential]) native;
+
+  @DomName('CredentialsContainer.notifySignedOut')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future notifySignedOut() native;
+
+  @DomName('CredentialsContainer.request')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future request([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _request_1(options_1);
+    }
+    return _request_2();
+  }
+  @JSName('request')
+  @DomName('CredentialsContainer.request')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _request_1(options) native;
+  @JSName('request')
+  @DomName('CredentialsContainer.request')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _request_2() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -13894,6 +13955,27 @@
 class FetchBodyStream extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory FetchBodyStream._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('FetchBodyStream.asArrayBuffer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asArrayBuffer() native;
+
+  @DomName('FetchBodyStream.asBlob')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asBlob() native;
+
+  @JSName('asJSON')
+  @DomName('FetchBodyStream.asJSON')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asJson() native;
+
+  @DomName('FetchBodyStream.asText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asText() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -13916,7 +13998,7 @@
   @DomName('FetchEvent.request')
   @DocsEditable()
   @Experimental() // untriaged
-  final Request request;
+  final _Request request;
 
   @DomName('FetchEvent.respondWith')
   @DocsEditable()
@@ -14660,6 +14742,11 @@
   @Experimental() // untriaged
   String featureSettings;
 
+  @DomName('FontFace.loaded')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Future loaded;
+
   @DomName('FontFace.status')
   @DocsEditable()
   @Experimental() // untriaged
@@ -14689,6 +14776,11 @@
   @DocsEditable()
   @Experimental() // untriaged
   String weight;
+
+  @DomName('FontFace.load')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future load() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -14999,6 +15091,21 @@
 class Geofencing extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory Geofencing._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('Geofencing.getRegisteredRegions')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getRegisteredRegions() native;
+
+  @DomName('Geofencing.registerRegion')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future registerRegion(GeofencingRegion region) native;
+
+  @DomName('Geofencing.unregisterRegion')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future unregisterRegion(String regionId) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -18380,6 +18487,11 @@
   // To suppress missing implicit constructor warnings.
   factory InstallEvent._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('InstallEvent.reloadAll')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future reloadAll() native;
+
   @DomName('InstallEvent.replace')
   @DocsEditable()
   @Experimental() // untriaged
@@ -19584,6 +19696,11 @@
   // To suppress missing implicit constructor warnings.
   factory MediaKeySession._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('MediaKeySession.closed')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Future closed;
+
   @DomName('MediaKeySession.error')
   @DocsEditable()
   final MediaKeyError error;
@@ -19595,6 +19712,16 @@
   @DomName('MediaKeySession.sessionId')
   @DocsEditable()
   final String sessionId;
+
+  @DomName('MediaKeySession.release')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future release() native;
+
+  @JSName('update')
+  @DomName('MediaKeySession.update')
+  @DocsEditable()
+  Future _update(response) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -19614,6 +19741,16 @@
   @DocsEditable()
   final String keySystem;
 
+  @DomName('MediaKeys.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static Future create(String keySystem) native;
+
+  @JSName('createSession')
+  @DomName('MediaKeys.createSession')
+  @DocsEditable()
+  Future _createSession(String initDataType, initData, [String sessionType]) native;
+
   @DomName('MediaKeys.isTypeSupported')
   @DocsEditable()
   @Experimental() // untriaged
@@ -21279,6 +21416,11 @@
   // http://www.w3.org/TR/quota-api/#accessing-storagequota
   final DeprecatedStorageQuota temporaryStorage;
 
+  @DomName('Navigator.getBattery')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getBattery() native;
+
   @DomName('Navigator.getGamepads')
   @DocsEditable()
   @Experimental() // untriaged
@@ -23678,6 +23820,11 @@
 class PushManager extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory PushManager._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('PushManager.register')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future register(String senderId) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23981,66 +24128,6 @@
 // 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.
 
-
-@DocsEditable()
-@DomName('Request')
-@Experimental() // untriaged
-@Native("Request")
-class Request extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory Request._() { throw new UnsupportedError("Not supported"); }
-
-  @DomName('Request.Request')
-  @DocsEditable()
-  factory Request(input, [Map requestInitDict]) {
-    if ((input is String || input == null) && requestInitDict == null) {
-      return Request._create_1(input);
-    }
-    if ((requestInitDict is Map || requestInitDict == null) && (input is String || input == null)) {
-      return Request._create_2(input, requestInitDict);
-    }
-    if ((input is Request || input == null) && requestInitDict == null) {
-      return Request._create_3(input);
-    }
-    if ((requestInitDict is Map || requestInitDict == null) && (input is Request || input == null)) {
-      return Request._create_4(input, requestInitDict);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
-  }
-  static Request _create_1(input) => JS('Request', 'new Request(#)', input);
-  static Request _create_2(input, requestInitDict) => JS('Request', 'new Request(#,#)', input, requestInitDict);
-  static Request _create_3(input) => JS('Request', 'new Request(#)', input);
-  static Request _create_4(input, requestInitDict) => JS('Request', 'new Request(#,#)', input, requestInitDict);
-
-  @DomName('Request.credentials')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String credentials;
-
-  @DomName('Request.headers')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final Headers headers;
-
-  @DomName('Request.mode')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String mode;
-
-  @DomName('Request.referrer')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String referrer;
-
-  @DomName('Request.url')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String url;
-}
-// Copyright (c) 2012, 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.
-
 // WARNING: Do not edit - generated code.
 
 
@@ -24924,6 +25011,11 @@
   @Experimental() // untriaged
   final String type;
 
+  @DomName('ScreenOrientation.lock')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future lock(String orientation) native;
+
   @DomName('ScreenOrientation.unlock')
   @DocsEditable()
   @Experimental() // untriaged
@@ -25335,6 +25427,11 @@
 class ServiceWorkerClients extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory ServiceWorkerClients._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('ServiceWorkerClients.getServiced')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getServiced() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25364,10 +25461,41 @@
   @Experimental() // untriaged
   final _ServiceWorker installing;
 
+  @DomName('ServiceWorkerContainer.ready')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Future ready;
+
   @DomName('ServiceWorkerContainer.waiting')
   @DocsEditable()
   @Experimental() // untriaged
   final _ServiceWorker waiting;
+
+  @DomName('ServiceWorkerContainer.register')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future register(String url, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _register_1(url, options_1);
+    }
+    return _register_2(url);
+  }
+  @JSName('register')
+  @DomName('ServiceWorkerContainer.register')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _register_1(url, options) native;
+  @JSName('register')
+  @DomName('ServiceWorkerContainer.register')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _register_2(url) native;
+
+  @DomName('ServiceWorkerContainer.unregister')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future unregister([String scope]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25402,6 +25530,47 @@
   @Experimental() // untriaged
   final String scope;
 
+  @DomName('ServiceWorkerGlobalScope.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _fetch(request, [Map requestInitDict]) {
+    if ((request is String || request == null) && requestInitDict == null) {
+      return _fetch_1(request);
+    }
+    if (requestInitDict != null && (request is String || request == null)) {
+      var requestInitDict_1 = convertDartToNative_Dictionary(requestInitDict);
+      return _fetch_2(request, requestInitDict_1);
+    }
+    if ((request is _Request || request == null) && requestInitDict == null) {
+      return _fetch_3(request);
+    }
+    if (requestInitDict != null && (request is _Request || request == null)) {
+      var requestInitDict_2 = convertDartToNative_Dictionary(requestInitDict);
+      return _fetch_4(request, requestInitDict_2);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+  @JSName('fetch')
+  @DomName('ServiceWorkerGlobalScope.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _fetch_1(String request) native;
+  @JSName('fetch')
+  @DomName('ServiceWorkerGlobalScope.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _fetch_2(String request, requestInitDict) native;
+  @JSName('fetch')
+  @DomName('ServiceWorkerGlobalScope.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _fetch_3(_Request request) native;
+  @JSName('fetch')
+  @DomName('ServiceWorkerGlobalScope.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _fetch_4(_Request request, requestInitDict) native;
+
   @DomName('ServiceWorkerGlobalScope.onmessage')
   @DocsEditable()
   @Experimental() // untriaged
@@ -25439,6 +25608,11 @@
   @DocsEditable()
   @Experimental() // untriaged
   final _ServiceWorker waiting;
+
+  @DomName('ServiceWorkerRegistration.unregister')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future unregister() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -26830,6 +27004,16 @@
   @DocsEditable()
   @Experimental() // untriaged
   final List<String> supportedTypes;
+
+  @DomName('StorageQuota.queryInfo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future queryInfo(String type) native;
+
+  @DomName('StorageQuota.requestPersistentQuota')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future requestPersistentQuota(int newQuota) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -33369,6 +33553,66 @@
 
 
 @DocsEditable()
+@DomName('Request')
+@Experimental() // untriaged
+@Native("Request")
+class _Request extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory _Request._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('Request.Request')
+  @DocsEditable()
+  factory _Request(input, [Map requestInitDict]) {
+    if ((input is String || input == null) && requestInitDict == null) {
+      return _Request._create_1(input);
+    }
+    if ((requestInitDict is Map || requestInitDict == null) && (input is String || input == null)) {
+      return _Request._create_2(input, requestInitDict);
+    }
+    if ((input is _Request || input == null) && requestInitDict == null) {
+      return _Request._create_3(input);
+    }
+    if ((requestInitDict is Map || requestInitDict == null) && (input is _Request || input == null)) {
+      return _Request._create_4(input, requestInitDict);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+  static _Request _create_1(input) => JS('_Request', 'new Request(#)', input);
+  static _Request _create_2(input, requestInitDict) => JS('_Request', 'new Request(#,#)', input, requestInitDict);
+  static _Request _create_3(input) => JS('_Request', 'new Request(#)', input);
+  static _Request _create_4(input, requestInitDict) => JS('_Request', 'new Request(#,#)', input, requestInitDict);
+
+  @DomName('Request.credentials')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String credentials;
+
+  @DomName('Request.headers')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Headers headers;
+
+  @DomName('Request.mode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String mode;
+
+  @DomName('Request.referrer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String referrer;
+
+  @DomName('Request.url')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String url;
+}
+// Copyright (c) 2012, 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.
+
+
+@DocsEditable()
 @DomName('Response')
 @Experimental() // untriaged
 @Native("Response")
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 2f4a16b..e1b8b5e 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -426,7 +426,7 @@
   'ReadableStream': () => ReadableStream,
   'Rect': () => _Rect,
   'RelatedEvent': () => RelatedEvent,
-  'Request': () => Request,
+  'Request': () => _Request,
   'ResourceProgressEvent': () => ResourceProgressEvent,
   'Response': () => _Response,
   'Screen': () => Screen,
@@ -670,7 +670,7 @@
 
   @DomName('HTMLAnchorElement.download')
   @DocsEditable()
-  void set download(String value) => _blink.BlinkHTMLAnchorElement.download_Setter_DOMString(this, value);
+  void set download(String value) => _blink.BlinkHTMLAnchorElement.download_Setter(this, value);
 
   @DomName('HTMLAnchorElement.hreflang')
   @DocsEditable()
@@ -678,7 +678,7 @@
 
   @DomName('HTMLAnchorElement.hreflang')
   @DocsEditable()
-  void set hreflang(String value) => _blink.BlinkHTMLAnchorElement.hreflang_Setter_DOMString(this, value);
+  void set hreflang(String value) => _blink.BlinkHTMLAnchorElement.hreflang_Setter(this, value);
 
   @DomName('HTMLAnchorElement.integrity')
   @DocsEditable()
@@ -688,7 +688,7 @@
   @DomName('HTMLAnchorElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLAnchorElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLAnchorElement.integrity_Setter(this, value);
 
   @DomName('HTMLAnchorElement.rel')
   @DocsEditable()
@@ -696,7 +696,7 @@
 
   @DomName('HTMLAnchorElement.rel')
   @DocsEditable()
-  void set rel(String value) => _blink.BlinkHTMLAnchorElement.rel_Setter_DOMString(this, value);
+  void set rel(String value) => _blink.BlinkHTMLAnchorElement.rel_Setter(this, value);
 
   @DomName('HTMLAnchorElement.target')
   @DocsEditable()
@@ -704,7 +704,7 @@
 
   @DomName('HTMLAnchorElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLAnchorElement.target_Setter_DOMString(this, value);
+  void set target(String value) => _blink.BlinkHTMLAnchorElement.target_Setter(this, value);
 
   @DomName('HTMLAnchorElement.type')
   @DocsEditable()
@@ -712,7 +712,7 @@
 
   @DomName('HTMLAnchorElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLAnchorElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLAnchorElement.type_Setter(this, value);
 
   @DomName('HTMLAnchorElement.hash')
   @DocsEditable()
@@ -720,7 +720,7 @@
 
   @DomName('HTMLAnchorElement.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkHTMLAnchorElement.hash_Setter_DOMString(this, value);
+  void set hash(String value) => _blink.BlinkHTMLAnchorElement.hash_Setter(this, value);
 
   @DomName('HTMLAnchorElement.host')
   @DocsEditable()
@@ -728,7 +728,7 @@
 
   @DomName('HTMLAnchorElement.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkHTMLAnchorElement.host_Setter_DOMString(this, value);
+  void set host(String value) => _blink.BlinkHTMLAnchorElement.host_Setter(this, value);
 
   @DomName('HTMLAnchorElement.hostname')
   @DocsEditable()
@@ -736,7 +736,7 @@
 
   @DomName('HTMLAnchorElement.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkHTMLAnchorElement.hostname_Setter_DOMString(this, value);
+  void set hostname(String value) => _blink.BlinkHTMLAnchorElement.hostname_Setter(this, value);
 
   @DomName('HTMLAnchorElement.href')
   @DocsEditable()
@@ -744,7 +744,7 @@
 
   @DomName('HTMLAnchorElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLAnchorElement.href_Setter_DOMString(this, value);
+  void set href(String value) => _blink.BlinkHTMLAnchorElement.href_Setter(this, value);
 
   @DomName('HTMLAnchorElement.origin')
   @DocsEditable()
@@ -760,7 +760,7 @@
   @DomName('HTMLAnchorElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkHTMLAnchorElement.password_Setter_DOMString(this, value);
+  void set password(String value) => _blink.BlinkHTMLAnchorElement.password_Setter(this, value);
 
   @DomName('HTMLAnchorElement.pathname')
   @DocsEditable()
@@ -768,7 +768,7 @@
 
   @DomName('HTMLAnchorElement.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkHTMLAnchorElement.pathname_Setter_DOMString(this, value);
+  void set pathname(String value) => _blink.BlinkHTMLAnchorElement.pathname_Setter(this, value);
 
   @DomName('HTMLAnchorElement.port')
   @DocsEditable()
@@ -776,7 +776,7 @@
 
   @DomName('HTMLAnchorElement.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkHTMLAnchorElement.port_Setter_DOMString(this, value);
+  void set port(String value) => _blink.BlinkHTMLAnchorElement.port_Setter(this, value);
 
   @DomName('HTMLAnchorElement.protocol')
   @DocsEditable()
@@ -784,7 +784,7 @@
 
   @DomName('HTMLAnchorElement.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkHTMLAnchorElement.protocol_Setter_DOMString(this, value);
+  void set protocol(String value) => _blink.BlinkHTMLAnchorElement.protocol_Setter(this, value);
 
   @DomName('HTMLAnchorElement.search')
   @DocsEditable()
@@ -792,7 +792,7 @@
 
   @DomName('HTMLAnchorElement.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkHTMLAnchorElement.search_Setter_DOMString(this, value);
+  void set search(String value) => _blink.BlinkHTMLAnchorElement.search_Setter(this, value);
 
   @DomName('HTMLAnchorElement.username')
   @DocsEditable()
@@ -802,7 +802,7 @@
   @DomName('HTMLAnchorElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkHTMLAnchorElement.username_Setter_DOMString(this, value);
+  void set username(String value) => _blink.BlinkHTMLAnchorElement.username_Setter(this, value);
 
   @DomName('HTMLAnchorElement.toString')
   @DocsEditable()
@@ -827,13 +827,13 @@
   @DocsEditable()
   factory Animation(Element target, List<Map> keyframes, [timingInput]) {
     if ((keyframes is List<Map> || keyframes == null) && (target is Element || target == null) && timingInput == null) {
-      return _blink.BlinkAnimation.constructorCallback_Element_SEQ_Dictionary_SEQ(target, keyframes);
+      return _blink.BlinkAnimation.constructorCallback_2(target, keyframes);
     }
     if ((timingInput is num || timingInput == null) && (keyframes is List<Map> || keyframes == null) && (target is Element || target == null)) {
-      return _blink.BlinkAnimation.constructorCallback_Element_SEQ_Dictionary_SEQ_double(target, keyframes, timingInput);
+      return _blink.BlinkAnimation.constructorCallback_3(target, keyframes, timingInput);
     }
     if ((timingInput is Map || timingInput == null) && (keyframes is List<Map> || keyframes == null) && (target is Element || target == null)) {
-      return _blink.BlinkAnimation.constructorCallback_Element_SEQ_Dictionary_SEQ_Dictionary(target, keyframes, timingInput);
+      return _blink.BlinkAnimation.constructorCallback_3(target, keyframes, timingInput);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -956,7 +956,7 @@
   @DomName('AnimationPlayer.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  void set currentTime(num value) => _blink.BlinkAnimationPlayer.currentTime_Setter_double(this, value);
+  void set currentTime(num value) => _blink.BlinkAnimationPlayer.currentTime_Setter(this, value);
 
   @DomName('AnimationPlayer.finished')
   @DocsEditable()
@@ -976,7 +976,7 @@
   @DomName('AnimationPlayer.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  void set playbackRate(num value) => _blink.BlinkAnimationPlayer.playbackRate_Setter_double(this, value);
+  void set playbackRate(num value) => _blink.BlinkAnimationPlayer.playbackRate_Setter(this, value);
 
   @DomName('AnimationPlayer.source')
   @DocsEditable()
@@ -986,7 +986,7 @@
   @DomName('AnimationPlayer.source')
   @DocsEditable()
   @Experimental() // untriaged
-  void set source(AnimationNode value) => _blink.BlinkAnimationPlayer.source_Setter_AnimationNode(this, value);
+  void set source(AnimationNode value) => _blink.BlinkAnimationPlayer.source_Setter(this, value);
 
   @DomName('AnimationPlayer.startTime')
   @DocsEditable()
@@ -996,7 +996,7 @@
   @DomName('AnimationPlayer.startTime')
   @DocsEditable()
   @Experimental() // untriaged
-  void set startTime(num value) => _blink.BlinkAnimationPlayer.startTime_Setter_double(this, value);
+  void set startTime(num value) => _blink.BlinkAnimationPlayer.startTime_Setter(this, value);
 
   @DomName('AnimationPlayer.cancel')
   @DocsEditable()
@@ -1076,7 +1076,7 @@
   @DomName('AnimationTimeline.play')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimationPlayer play(AnimationNode source) => _blink.BlinkAnimationTimeline.play_Callback_AnimationNode(this, source);
+  AnimationPlayer play(AnimationNode source) => _blink.BlinkAnimationTimeline.play_Callback_1(this, source);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1339,7 +1339,7 @@
 
   @DomName('HTMLAreaElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLAreaElement.alt_Setter_DOMString(this, value);
+  void set alt(String value) => _blink.BlinkHTMLAreaElement.alt_Setter(this, value);
 
   @DomName('HTMLAreaElement.coords')
   @DocsEditable()
@@ -1347,7 +1347,7 @@
 
   @DomName('HTMLAreaElement.coords')
   @DocsEditable()
-  void set coords(String value) => _blink.BlinkHTMLAreaElement.coords_Setter_DOMString(this, value);
+  void set coords(String value) => _blink.BlinkHTMLAreaElement.coords_Setter(this, value);
 
   @DomName('HTMLAreaElement.shape')
   @DocsEditable()
@@ -1355,7 +1355,7 @@
 
   @DomName('HTMLAreaElement.shape')
   @DocsEditable()
-  void set shape(String value) => _blink.BlinkHTMLAreaElement.shape_Setter_DOMString(this, value);
+  void set shape(String value) => _blink.BlinkHTMLAreaElement.shape_Setter(this, value);
 
   @DomName('HTMLAreaElement.target')
   @DocsEditable()
@@ -1363,7 +1363,7 @@
 
   @DomName('HTMLAreaElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLAreaElement.target_Setter_DOMString(this, value);
+  void set target(String value) => _blink.BlinkHTMLAreaElement.target_Setter(this, value);
 
   @DomName('HTMLAreaElement.hash')
   @DocsEditable()
@@ -1371,7 +1371,7 @@
 
   @DomName('HTMLAreaElement.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkHTMLAreaElement.hash_Setter_DOMString(this, value);
+  void set hash(String value) => _blink.BlinkHTMLAreaElement.hash_Setter(this, value);
 
   @DomName('HTMLAreaElement.host')
   @DocsEditable()
@@ -1379,7 +1379,7 @@
 
   @DomName('HTMLAreaElement.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkHTMLAreaElement.host_Setter_DOMString(this, value);
+  void set host(String value) => _blink.BlinkHTMLAreaElement.host_Setter(this, value);
 
   @DomName('HTMLAreaElement.hostname')
   @DocsEditable()
@@ -1387,7 +1387,7 @@
 
   @DomName('HTMLAreaElement.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkHTMLAreaElement.hostname_Setter_DOMString(this, value);
+  void set hostname(String value) => _blink.BlinkHTMLAreaElement.hostname_Setter(this, value);
 
   @DomName('HTMLAreaElement.href')
   @DocsEditable()
@@ -1395,7 +1395,7 @@
 
   @DomName('HTMLAreaElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLAreaElement.href_Setter_DOMString(this, value);
+  void set href(String value) => _blink.BlinkHTMLAreaElement.href_Setter(this, value);
 
   @DomName('HTMLAreaElement.origin')
   @DocsEditable()
@@ -1410,7 +1410,7 @@
   @DomName('HTMLAreaElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkHTMLAreaElement.password_Setter_DOMString(this, value);
+  void set password(String value) => _blink.BlinkHTMLAreaElement.password_Setter(this, value);
 
   @DomName('HTMLAreaElement.pathname')
   @DocsEditable()
@@ -1418,7 +1418,7 @@
 
   @DomName('HTMLAreaElement.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkHTMLAreaElement.pathname_Setter_DOMString(this, value);
+  void set pathname(String value) => _blink.BlinkHTMLAreaElement.pathname_Setter(this, value);
 
   @DomName('HTMLAreaElement.port')
   @DocsEditable()
@@ -1426,7 +1426,7 @@
 
   @DomName('HTMLAreaElement.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkHTMLAreaElement.port_Setter_DOMString(this, value);
+  void set port(String value) => _blink.BlinkHTMLAreaElement.port_Setter(this, value);
 
   @DomName('HTMLAreaElement.protocol')
   @DocsEditable()
@@ -1434,7 +1434,7 @@
 
   @DomName('HTMLAreaElement.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkHTMLAreaElement.protocol_Setter_DOMString(this, value);
+  void set protocol(String value) => _blink.BlinkHTMLAreaElement.protocol_Setter(this, value);
 
   @DomName('HTMLAreaElement.search')
   @DocsEditable()
@@ -1442,7 +1442,7 @@
 
   @DomName('HTMLAreaElement.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkHTMLAreaElement.search_Setter_DOMString(this, value);
+  void set search(String value) => _blink.BlinkHTMLAreaElement.search_Setter(this, value);
 
   @DomName('HTMLAreaElement.username')
   @DocsEditable()
@@ -1452,7 +1452,7 @@
   @DomName('HTMLAreaElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkHTMLAreaElement.username_Setter_DOMString(this, value);
+  void set username(String value) => _blink.BlinkHTMLAreaElement.username_Setter(this, value);
 
   @DomName('HTMLAreaElement.toString')
   @DocsEditable()
@@ -1476,7 +1476,7 @@
   @DomName('HTMLAudioElement.HTMLAudioElement')
   @DocsEditable()
   factory AudioElement([String src]) {
-    return _blink.BlinkHTMLAudioElement.constructorCallback_DOMString(src);
+    return _blink.BlinkHTMLAudioElement.constructorCallback_1(src);
   }
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -1508,7 +1508,7 @@
   @DomName('AudioTrack.enabled')
   @DocsEditable()
   @Experimental() // untriaged
-  void set enabled(bool value) => _blink.BlinkAudioTrack.enabled_Setter_boolean(this, value);
+  void set enabled(bool value) => _blink.BlinkAudioTrack.enabled_Setter(this, value);
 
   @DomName('AudioTrack.id')
   @DocsEditable()
@@ -1558,12 +1558,12 @@
   @DomName('AudioTrackList.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  AudioTrack __getter__(int index) => _blink.BlinkAudioTrackList.$__getter___Callback_ul(this, index);
+  AudioTrack __getter__(int index) => _blink.BlinkAudioTrackList.$__getter___Callback_1(this, index);
 
   @DomName('AudioTrackList.getTrackById')
   @DocsEditable()
   @Experimental() // untriaged
-  AudioTrack getTrackById(String id) => _blink.BlinkAudioTrackList.getTrackById_Callback_DOMString(this, id);
+  AudioTrack getTrackById(String id) => _blink.BlinkAudioTrackList.getTrackById_Callback_1(this, id);
 
   @DomName('AudioTrackList.onchange')
   @DocsEditable()
@@ -1664,7 +1664,7 @@
 
   @DomName('HTMLBaseElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLBaseElement.href_Setter_DOMString(this, value);
+  void set href(String value) => _blink.BlinkHTMLBaseElement.href_Setter(this, value);
 
   @DomName('HTMLBaseElement.target')
   @DocsEditable()
@@ -1672,7 +1672,7 @@
 
   @DomName('HTMLBaseElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLBaseElement.target_Setter_DOMString(this, value);
+  void set target(String value) => _blink.BlinkHTMLBaseElement.target_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1726,7 +1726,7 @@
 
   @DomName('BeforeUnloadEvent.returnValue')
   @DocsEditable()
-  void set returnValue(String value) => _blink.BlinkBeforeUnloadEvent.returnValue_Setter_DOMString(this, value);
+  void set returnValue(String value) => _blink.BlinkBeforeUnloadEvent.returnValue_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1744,7 +1744,7 @@
   factory Blob(List blobParts, [String type, String endings]) => _create(blobParts, type, endings);
 
   @DocsEditable()
-  static Blob _create(blobParts, type, endings) => _blink.BlinkBlob.constructorCallback_Array_DOMString_DOMString(blobParts, type, endings);
+  static Blob _create(blobParts, type, endings) => _blink.BlinkBlob.constructorCallback_3(blobParts, type, endings);
 
   @DomName('Blob.size')
   @DocsEditable()
@@ -1761,13 +1761,13 @@
 
   Blob slice([int start, int end, String contentType]) {
     if (contentType != null) {
-      return _blink.BlinkBlob.slice_Callback_ll_ll_DOMString(this, start, end, contentType);
+      return _blink.BlinkBlob.slice_Callback_3(this, start, end, contentType);
     }
     if (end != null) {
-      return _blink.BlinkBlob.slice_Callback_ll_ll(this, start, end);
+      return _blink.BlinkBlob.slice_Callback_2(this, start, end);
     }
     if (start != null) {
-      return _blink.BlinkBlob.slice_Callback_ll(this, start);
+      return _blink.BlinkBlob.slice_Callback_1(this, start);
     }
     return _blink.BlinkBlob.slice_Callback(this);
   }
@@ -2016,7 +2016,7 @@
 
   @DomName('HTMLButtonElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLButtonElement.autofocus_Setter_boolean(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLButtonElement.autofocus_Setter(this, value);
 
   @DomName('HTMLButtonElement.disabled')
   @DocsEditable()
@@ -2024,7 +2024,7 @@
 
   @DomName('HTMLButtonElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLButtonElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLButtonElement.disabled_Setter(this, value);
 
   @DomName('HTMLButtonElement.form')
   @DocsEditable()
@@ -2036,7 +2036,7 @@
 
   @DomName('HTMLButtonElement.formAction')
   @DocsEditable()
-  void set formAction(String value) => _blink.BlinkHTMLButtonElement.formAction_Setter_DOMString(this, value);
+  void set formAction(String value) => _blink.BlinkHTMLButtonElement.formAction_Setter(this, value);
 
   @DomName('HTMLButtonElement.formEnctype')
   @DocsEditable()
@@ -2044,7 +2044,7 @@
 
   @DomName('HTMLButtonElement.formEnctype')
   @DocsEditable()
-  void set formEnctype(String value) => _blink.BlinkHTMLButtonElement.formEnctype_Setter_DOMString(this, value);
+  void set formEnctype(String value) => _blink.BlinkHTMLButtonElement.formEnctype_Setter(this, value);
 
   @DomName('HTMLButtonElement.formMethod')
   @DocsEditable()
@@ -2052,7 +2052,7 @@
 
   @DomName('HTMLButtonElement.formMethod')
   @DocsEditable()
-  void set formMethod(String value) => _blink.BlinkHTMLButtonElement.formMethod_Setter_DOMString(this, value);
+  void set formMethod(String value) => _blink.BlinkHTMLButtonElement.formMethod_Setter(this, value);
 
   @DomName('HTMLButtonElement.formNoValidate')
   @DocsEditable()
@@ -2060,7 +2060,7 @@
 
   @DomName('HTMLButtonElement.formNoValidate')
   @DocsEditable()
-  void set formNoValidate(bool value) => _blink.BlinkHTMLButtonElement.formNoValidate_Setter_boolean(this, value);
+  void set formNoValidate(bool value) => _blink.BlinkHTMLButtonElement.formNoValidate_Setter(this, value);
 
   @DomName('HTMLButtonElement.formTarget')
   @DocsEditable()
@@ -2068,7 +2068,7 @@
 
   @DomName('HTMLButtonElement.formTarget')
   @DocsEditable()
-  void set formTarget(String value) => _blink.BlinkHTMLButtonElement.formTarget_Setter_DOMString(this, value);
+  void set formTarget(String value) => _blink.BlinkHTMLButtonElement.formTarget_Setter(this, value);
 
   @DomName('HTMLButtonElement.labels')
   @DocsEditable()
@@ -2081,7 +2081,7 @@
 
   @DomName('HTMLButtonElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLButtonElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLButtonElement.name_Setter(this, value);
 
   @DomName('HTMLButtonElement.type')
   @DocsEditable()
@@ -2089,7 +2089,7 @@
 
   @DomName('HTMLButtonElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLButtonElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLButtonElement.type_Setter(this, value);
 
   @DomName('HTMLButtonElement.validationMessage')
   @DocsEditable()
@@ -2105,7 +2105,7 @@
 
   @DomName('HTMLButtonElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLButtonElement.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkHTMLButtonElement.value_Setter(this, value);
 
   @DomName('HTMLButtonElement.willValidate')
   @DocsEditable()
@@ -2117,7 +2117,7 @@
 
   @DomName('HTMLButtonElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLButtonElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLButtonElement.setCustomValidity_Callback_1(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2150,6 +2150,31 @@
   // To suppress missing implicit constructor warnings.
   factory CacheStorage._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('CacheStorage.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future create(String cacheName) => _blink.BlinkCacheStorage.create_Callback_1(this, cacheName);
+
+  @DomName('CacheStorage.delete')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future delete(String cacheName) => _blink.BlinkCacheStorage.delete_Callback_1(this, cacheName);
+
+  @DomName('CacheStorage.get')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future get(String cacheName) => _blink.BlinkCacheStorage.get_Callback_1(this, cacheName);
+
+  @DomName('CacheStorage.has')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future has(String cacheName) => _blink.BlinkCacheStorage.has_Callback_1(this, cacheName);
+
+  @DomName('CacheStorage.keys')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future keys() => _blink.BlinkCacheStorage.keys_Callback(this);
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2172,7 +2197,7 @@
 
   @DomName('Canvas2DContextAttributes.alpha')
   @DocsEditable()
-  void set alpha(bool value) => _blink.BlinkCanvas2DContextAttributes.alpha_Setter_boolean(this, value);
+  void set alpha(bool value) => _blink.BlinkCanvas2DContextAttributes.alpha_Setter(this, value);
 
   @DomName('Canvas2DContextAttributes.storage')
   @DocsEditable()
@@ -2182,7 +2207,7 @@
   @DomName('Canvas2DContextAttributes.storage')
   @DocsEditable()
   @Experimental() // untriaged
-  void set storage(String value) => _blink.BlinkCanvas2DContextAttributes.storage_Setter_DOMString(this, value);
+  void set storage(String value) => _blink.BlinkCanvas2DContextAttributes.storage_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2238,7 +2263,7 @@
   /// The height of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLCanvasElement.height_Setter_long(this, value);
+  void set height(int value) => _blink.BlinkHTMLCanvasElement.height_Setter(this, value);
 
   /// The width of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.width')
@@ -2248,15 +2273,15 @@
   /// The width of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLCanvasElement.width_Setter_long(this, value);
+  void set width(int value) => _blink.BlinkHTMLCanvasElement.width_Setter(this, value);
 
   @DomName('HTMLCanvasElement.getContext')
   @DocsEditable()
-  Object getContext(String contextId, [Map attrs]) => _blink.BlinkHTMLCanvasElement.getContext_Callback_DOMString_Dictionary(this, contextId, attrs);
+  Object getContext(String contextId, [Map attrs]) => _blink.BlinkHTMLCanvasElement.getContext_Callback_2(this, contextId, attrs);
 
   @DomName('HTMLCanvasElement.toDataURL')
   @DocsEditable()
-  String _toDataUrl(String type, [num quality]) => _blink.BlinkHTMLCanvasElement.toDataURL_Callback_DOMString_float(this, type, quality);
+  String _toDataUrl(String type, [num quality]) => _blink.BlinkHTMLCanvasElement.toDataURL_Callback_2(this, type, quality);
 
   /// Stream of `webglcontextlost` events handled by this [CanvasElement].
   @DomName('HTMLCanvasElement.onwebglcontextlost')
@@ -2399,7 +2424,7 @@
    */
   @DomName('CanvasGradient.addColorStop')
   @DocsEditable()
-  void addColorStop(num offset, String color) => _blink.BlinkCanvasGradient.addColorStop_Callback_float_DOMString(this, offset, color);
+  void addColorStop(num offset, String color) => _blink.BlinkCanvasGradient.addColorStop_Callback_2(this, offset, color);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2470,7 +2495,7 @@
   @DomName('CanvasRenderingContext2D.currentTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  void set currentTransform(Matrix value) => _blink.BlinkCanvasRenderingContext2D.currentTransform_Setter_SVGMatrix(this, value);
+  void set currentTransform(Matrix value) => _blink.BlinkCanvasRenderingContext2D.currentTransform_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.fillStyle')
   @DocsEditable()
@@ -2478,7 +2503,7 @@
 
   @DomName('CanvasRenderingContext2D.fillStyle')
   @DocsEditable()
-  void set fillStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.fillStyle_Setter_object(this, value);
+  void set fillStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.fillStyle_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.font')
   @DocsEditable()
@@ -2486,7 +2511,7 @@
 
   @DomName('CanvasRenderingContext2D.font')
   @DocsEditable()
-  void set font(String value) => _blink.BlinkCanvasRenderingContext2D.font_Setter_DOMString(this, value);
+  void set font(String value) => _blink.BlinkCanvasRenderingContext2D.font_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.globalAlpha')
   @DocsEditable()
@@ -2494,7 +2519,7 @@
 
   @DomName('CanvasRenderingContext2D.globalAlpha')
   @DocsEditable()
-  void set globalAlpha(num value) => _blink.BlinkCanvasRenderingContext2D.globalAlpha_Setter_float(this, value);
+  void set globalAlpha(num value) => _blink.BlinkCanvasRenderingContext2D.globalAlpha_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   @DocsEditable()
@@ -2502,7 +2527,7 @@
 
   @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   @DocsEditable()
-  void set globalCompositeOperation(String value) => _blink.BlinkCanvasRenderingContext2D.globalCompositeOperation_Setter_DOMString(this, value);
+  void set globalCompositeOperation(String value) => _blink.BlinkCanvasRenderingContext2D.globalCompositeOperation_Setter(this, value);
 
   /**
    * Whether images and patterns on this canvas will be smoothed when this
@@ -2532,7 +2557,7 @@
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  void set imageSmoothingEnabled(bool value) => _blink.BlinkCanvasRenderingContext2D.imageSmoothingEnabled_Setter_boolean(this, value);
+  void set imageSmoothingEnabled(bool value) => _blink.BlinkCanvasRenderingContext2D.imageSmoothingEnabled_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.lineCap')
   @DocsEditable()
@@ -2540,7 +2565,7 @@
 
   @DomName('CanvasRenderingContext2D.lineCap')
   @DocsEditable()
-  void set lineCap(String value) => _blink.BlinkCanvasRenderingContext2D.lineCap_Setter_DOMString(this, value);
+  void set lineCap(String value) => _blink.BlinkCanvasRenderingContext2D.lineCap_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.lineDashOffset')
   @DocsEditable()
@@ -2548,7 +2573,7 @@
 
   @DomName('CanvasRenderingContext2D.lineDashOffset')
   @DocsEditable()
-  void set lineDashOffset(num value) => _blink.BlinkCanvasRenderingContext2D.lineDashOffset_Setter_float(this, value);
+  void set lineDashOffset(num value) => _blink.BlinkCanvasRenderingContext2D.lineDashOffset_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.lineJoin')
   @DocsEditable()
@@ -2556,7 +2581,7 @@
 
   @DomName('CanvasRenderingContext2D.lineJoin')
   @DocsEditable()
-  void set lineJoin(String value) => _blink.BlinkCanvasRenderingContext2D.lineJoin_Setter_DOMString(this, value);
+  void set lineJoin(String value) => _blink.BlinkCanvasRenderingContext2D.lineJoin_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.lineWidth')
   @DocsEditable()
@@ -2564,7 +2589,7 @@
 
   @DomName('CanvasRenderingContext2D.lineWidth')
   @DocsEditable()
-  void set lineWidth(num value) => _blink.BlinkCanvasRenderingContext2D.lineWidth_Setter_float(this, value);
+  void set lineWidth(num value) => _blink.BlinkCanvasRenderingContext2D.lineWidth_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.miterLimit')
   @DocsEditable()
@@ -2572,7 +2597,7 @@
 
   @DomName('CanvasRenderingContext2D.miterLimit')
   @DocsEditable()
-  void set miterLimit(num value) => _blink.BlinkCanvasRenderingContext2D.miterLimit_Setter_float(this, value);
+  void set miterLimit(num value) => _blink.BlinkCanvasRenderingContext2D.miterLimit_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowBlur')
   @DocsEditable()
@@ -2580,7 +2605,7 @@
 
   @DomName('CanvasRenderingContext2D.shadowBlur')
   @DocsEditable()
-  void set shadowBlur(num value) => _blink.BlinkCanvasRenderingContext2D.shadowBlur_Setter_float(this, value);
+  void set shadowBlur(num value) => _blink.BlinkCanvasRenderingContext2D.shadowBlur_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowColor')
   @DocsEditable()
@@ -2588,7 +2613,7 @@
 
   @DomName('CanvasRenderingContext2D.shadowColor')
   @DocsEditable()
-  void set shadowColor(String value) => _blink.BlinkCanvasRenderingContext2D.shadowColor_Setter_DOMString(this, value);
+  void set shadowColor(String value) => _blink.BlinkCanvasRenderingContext2D.shadowColor_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowOffsetX')
   @DocsEditable()
@@ -2596,7 +2621,7 @@
 
   @DomName('CanvasRenderingContext2D.shadowOffsetX')
   @DocsEditable()
-  void set shadowOffsetX(num value) => _blink.BlinkCanvasRenderingContext2D.shadowOffsetX_Setter_float(this, value);
+  void set shadowOffsetX(num value) => _blink.BlinkCanvasRenderingContext2D.shadowOffsetX_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowOffsetY')
   @DocsEditable()
@@ -2604,7 +2629,7 @@
 
   @DomName('CanvasRenderingContext2D.shadowOffsetY')
   @DocsEditable()
-  void set shadowOffsetY(num value) => _blink.BlinkCanvasRenderingContext2D.shadowOffsetY_Setter_float(this, value);
+  void set shadowOffsetY(num value) => _blink.BlinkCanvasRenderingContext2D.shadowOffsetY_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.strokeStyle')
   @DocsEditable()
@@ -2612,7 +2637,7 @@
 
   @DomName('CanvasRenderingContext2D.strokeStyle')
   @DocsEditable()
-  void set strokeStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.strokeStyle_Setter_object(this, value);
+  void set strokeStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.strokeStyle_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.textAlign')
   @DocsEditable()
@@ -2620,7 +2645,7 @@
 
   @DomName('CanvasRenderingContext2D.textAlign')
   @DocsEditable()
-  void set textAlign(String value) => _blink.BlinkCanvasRenderingContext2D.textAlign_Setter_DOMString(this, value);
+  void set textAlign(String value) => _blink.BlinkCanvasRenderingContext2D.textAlign_Setter(this, value);
 
   @DomName('CanvasRenderingContext2D.textBaseline')
   @DocsEditable()
@@ -2628,12 +2653,16 @@
 
   @DomName('CanvasRenderingContext2D.textBaseline')
   @DocsEditable()
-  void set textBaseline(String value) => _blink.BlinkCanvasRenderingContext2D.textBaseline_Setter_DOMString(this, value);
+  void set textBaseline(String value) => _blink.BlinkCanvasRenderingContext2D.textBaseline_Setter(this, value);
 
-  @DomName('CanvasRenderingContext2D.addHitRegion')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void addHitRegion([Map options]) => _blink.BlinkCanvasRenderingContext2D.addHitRegion_Callback_Dictionary(this, options);
+  void addHitRegion([Map options]) {
+    if (options != null) {
+      _blink.BlinkCanvasRenderingContext2D.addHitRegion_Callback_1(this, options);
+      return;
+    }
+    _blink.BlinkCanvasRenderingContext2D.addHitRegion_Callback(this);
+    return;
+  }
 
   @DomName('CanvasRenderingContext2D.beginPath')
   @DocsEditable()
@@ -2646,7 +2675,7 @@
 
   @DomName('CanvasRenderingContext2D.clearRect')
   @DocsEditable()
-  void clearRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.clearRect_Callback_float_float_float_float(this, x, y, width, height);
+  void clearRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.clearRect_Callback_4(this, x, y, width, height);
 
   void clip([path_OR_winding, String winding]) {
     if (path_OR_winding == null && winding == null) {
@@ -2654,15 +2683,15 @@
       return;
     }
     if ((path_OR_winding is String) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.clip_Callback_DOMString(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.clip_Callback_1(this, path_OR_winding);
       return;
     }
     if ((path_OR_winding is Path2D) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.clip_Callback_Path2D(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.clip_Callback_1(this, path_OR_winding);
       return;
     }
     if ((winding is String) && (path_OR_winding is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.clip_Callback_Path2D_DOMString(this, path_OR_winding, winding);
+      _blink.BlinkCanvasRenderingContext2D.clip_Callback_2(this, path_OR_winding, winding);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2670,41 +2699,41 @@
 
   @DomName('CanvasRenderingContext2D.createImageData')
   @DocsEditable()
-  ImageData createImageData(num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.createImageData_Callback_float_float(this, sw, sh);
+  ImageData createImageData(num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.createImageData_Callback_2(this, sw, sh);
 
   @DomName('CanvasRenderingContext2D.createImageDataFromImageData')
   @DocsEditable()
-  ImageData createImageDataFromImageData(ImageData imagedata) => _blink.BlinkCanvasRenderingContext2D.createImageData_Callback_ImageData(this, imagedata);
+  ImageData createImageDataFromImageData(ImageData imagedata) => _blink.BlinkCanvasRenderingContext2D.createImageData_Callback_1(this, imagedata);
 
   @DomName('CanvasRenderingContext2D.createLinearGradient')
   @DocsEditable()
-  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) => _blink.BlinkCanvasRenderingContext2D.createLinearGradient_Callback_float_float_float_float(this, x0, y0, x1, y1);
+  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) => _blink.BlinkCanvasRenderingContext2D.createLinearGradient_Callback_4(this, x0, y0, x1, y1);
 
   CanvasPattern createPattern(canvas_OR_image, String repetitionType) {
     if ((repetitionType is String || repetitionType == null) && (canvas_OR_image is CanvasElement)) {
-      return _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_HTMLCanvasElement_DOMString(this, canvas_OR_image, repetitionType);
+      return _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_2(this, canvas_OR_image, repetitionType);
     }
     if ((repetitionType is String || repetitionType == null) && (canvas_OR_image is VideoElement)) {
-      return _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_HTMLVideoElement_DOMString(this, canvas_OR_image, repetitionType);
+      return _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_2(this, canvas_OR_image, repetitionType);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('CanvasRenderingContext2D.createPatternFromImage')
   @DocsEditable()
-  CanvasPattern createPatternFromImage(ImageElement image, String repetitionType) => _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_HTMLImageElement_DOMString(this, image, repetitionType);
+  CanvasPattern createPatternFromImage(ImageElement image, String repetitionType) => _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_2(this, image, repetitionType);
 
   @DomName('CanvasRenderingContext2D.createRadialGradient')
   @DocsEditable()
-  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) => _blink.BlinkCanvasRenderingContext2D.createRadialGradient_Callback_float_float_float_float_float_float(this, x0, y0, r0, x1, y1, r1);
+  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) => _blink.BlinkCanvasRenderingContext2D.createRadialGradient_Callback_6(this, x0, y0, r0, x1, y1, r1);
 
   void drawFocusIfNeeded(element_OR_path, [Element element]) {
     if ((element_OR_path is Element) && element == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawFocusIfNeeded_Callback_Element(this, element_OR_path);
+      _blink.BlinkCanvasRenderingContext2D.drawFocusIfNeeded_Callback_1(this, element_OR_path);
       return;
     }
     if ((element is Element) && (element_OR_path is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.drawFocusIfNeeded_Callback_Path2D_Element(this, element_OR_path, element);
+      _blink.BlinkCanvasRenderingContext2D.drawFocusIfNeeded_Callback_2(this, element_OR_path, element);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2712,51 +2741,51 @@
 
   void _drawImage(canvas_OR_image_OR_imageBitmap_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]) {
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLImageElement_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_3(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLImageElement_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_5(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement)) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLImageElement_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_9(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLCanvasElement_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_3(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLCanvasElement_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_5(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement)) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLCanvasElement_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_9(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLVideoElement_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_3(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLVideoElement_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_5(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement)) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLVideoElement_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_9(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_ImageBitmap_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_3(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_ImageBitmap_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_5(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap)) {
-      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_ImageBitmap_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_9(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2768,15 +2797,15 @@
       return;
     }
     if ((path_OR_winding is String) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.fill_Callback_DOMString(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.fill_Callback_1(this, path_OR_winding);
       return;
     }
     if ((path_OR_winding is Path2D) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.fill_Callback_Path2D(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.fill_Callback_1(this, path_OR_winding);
       return;
     }
     if ((winding is String) && (path_OR_winding is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.fill_Callback_Path2D_DOMString(this, path_OR_winding, winding);
+      _blink.BlinkCanvasRenderingContext2D.fill_Callback_2(this, path_OR_winding, winding);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2784,14 +2813,14 @@
 
   @DomName('CanvasRenderingContext2D.fillRect')
   @DocsEditable()
-  void fillRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.fillRect_Callback_float_float_float_float(this, x, y, width, height);
+  void fillRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.fillRect_Callback_4(this, x, y, width, height);
 
   void fillText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
-      _blink.BlinkCanvasRenderingContext2D.fillText_Callback_DOMString_float_float_float(this, text, x, y, maxWidth);
+      _blink.BlinkCanvasRenderingContext2D.fillText_Callback_4(this, text, x, y, maxWidth);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.fillText_Callback_DOMString_float_float(this, text, x, y);
+    _blink.BlinkCanvasRenderingContext2D.fillText_Callback_3(this, text, x, y);
     return;
   }
 
@@ -2803,7 +2832,7 @@
 
   @DomName('CanvasRenderingContext2D.getImageData')
   @DocsEditable()
-  ImageData getImageData(num sx, num sy, num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.getImageData_Callback_float_float_float_float(this, sx, sy, sw, sh);
+  ImageData getImageData(num sx, num sy, num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.getImageData_Callback_4(this, sx, sy, sw, sh);
 
   @DomName('CanvasRenderingContext2D.getLineDash')
   @DocsEditable()
@@ -2816,41 +2845,41 @@
 
   bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding]) {
     if ((x_OR_y is num) && (path_OR_x is num) && winding_OR_y == null && winding == null) {
-      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_float_float(this, path_OR_x, x_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_2(this, path_OR_x, x_OR_y);
     }
     if ((winding_OR_y is String) && (x_OR_y is num) && (path_OR_x is num) && winding == null) {
-      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_float_float_DOMString(this, path_OR_x, x_OR_y, winding_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_3(this, path_OR_x, x_OR_y, winding_OR_y);
     }
     if ((winding_OR_y is num) && (x_OR_y is num) && (path_OR_x is Path2D) && winding == null) {
-      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_Path2D_float_float(this, path_OR_x, x_OR_y, winding_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_3(this, path_OR_x, x_OR_y, winding_OR_y);
     }
     if ((winding is String) && (winding_OR_y is num) && (x_OR_y is num) && (path_OR_x is Path2D)) {
-      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_Path2D_float_float_DOMString(this, path_OR_x, x_OR_y, winding_OR_y, winding);
+      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_4(this, path_OR_x, x_OR_y, winding_OR_y, winding);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) {
     if ((x_OR_y is num) && (path_OR_x is num) && y == null) {
-      return _blink.BlinkCanvasRenderingContext2D.isPointInStroke_Callback_float_float(this, path_OR_x, x_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.isPointInStroke_Callback_2(this, path_OR_x, x_OR_y);
     }
     if ((y is num) && (x_OR_y is num) && (path_OR_x is Path2D)) {
-      return _blink.BlinkCanvasRenderingContext2D.isPointInStroke_Callback_Path2D_float_float(this, path_OR_x, x_OR_y, y);
+      return _blink.BlinkCanvasRenderingContext2D.isPointInStroke_Callback_3(this, path_OR_x, x_OR_y, y);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('CanvasRenderingContext2D.measureText')
   @DocsEditable()
-  TextMetrics measureText(String text) => _blink.BlinkCanvasRenderingContext2D.measureText_Callback_DOMString(this, text);
+  TextMetrics measureText(String text) => _blink.BlinkCanvasRenderingContext2D.measureText_Callback_1(this, text);
 
   void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if ((dy is num) && (dx is num) && (imagedata is ImageData) && dirtyX == null && dirtyY == null && dirtyWidth == null && dirtyHeight == null) {
-      _blink.BlinkCanvasRenderingContext2D.putImageData_Callback_ImageData_float_float(this, imagedata, dx, dy);
+      _blink.BlinkCanvasRenderingContext2D.putImageData_Callback_3(this, imagedata, dx, dy);
       return;
     }
     if ((dirtyHeight is num) && (dirtyWidth is num) && (dirtyY is num) && (dirtyX is num) && (dy is num) && (dx is num) && (imagedata is ImageData)) {
-      _blink.BlinkCanvasRenderingContext2D.putImageData_Callback_ImageData_float_float_float_float_float_float(this, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+      _blink.BlinkCanvasRenderingContext2D.putImageData_Callback_7(this, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2859,7 +2888,7 @@
   @DomName('CanvasRenderingContext2D.removeHitRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void removeHitRegion(String id) => _blink.BlinkCanvasRenderingContext2D.removeHitRegion_Callback_DOMString(this, id);
+  void removeHitRegion(String id) => _blink.BlinkCanvasRenderingContext2D.removeHitRegion_Callback_1(this, id);
 
   @DomName('CanvasRenderingContext2D.resetTransform')
   @DocsEditable()
@@ -2872,7 +2901,7 @@
 
   @DomName('CanvasRenderingContext2D.rotate')
   @DocsEditable()
-  void rotate(num angle) => _blink.BlinkCanvasRenderingContext2D.rotate_Callback_float(this, angle);
+  void rotate(num angle) => _blink.BlinkCanvasRenderingContext2D.rotate_Callback_1(this, angle);
 
   @DomName('CanvasRenderingContext2D.save')
   @DocsEditable()
@@ -2880,11 +2909,11 @@
 
   @DomName('CanvasRenderingContext2D.scale')
   @DocsEditable()
-  void scale(num x, num y) => _blink.BlinkCanvasRenderingContext2D.scale_Callback_float_float(this, x, y);
+  void scale(num x, num y) => _blink.BlinkCanvasRenderingContext2D.scale_Callback_2(this, x, y);
 
   void scrollPathIntoView([Path2D path]) {
     if (path != null) {
-      _blink.BlinkCanvasRenderingContext2D.scrollPathIntoView_Callback_Path2D(this, path);
+      _blink.BlinkCanvasRenderingContext2D.scrollPathIntoView_Callback_1(this, path);
       return;
     }
     _blink.BlinkCanvasRenderingContext2D.scrollPathIntoView_Callback(this);
@@ -2893,11 +2922,11 @@
 
   @DomName('CanvasRenderingContext2D.setLineDash')
   @DocsEditable()
-  void setLineDash(List<num> dash) => _blink.BlinkCanvasRenderingContext2D.setLineDash_Callback_SEQ_float_SEQ(this, dash);
+  void setLineDash(List<num> dash) => _blink.BlinkCanvasRenderingContext2D.setLineDash_Callback_1(this, dash);
 
   @DomName('CanvasRenderingContext2D.setTransform')
   @DocsEditable()
-  void setTransform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.setTransform_Callback_float_float_float_float_float_float(this, a, b, c, d, e, f);
+  void setTransform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.setTransform_Callback_6(this, a, b, c, d, e, f);
 
   void stroke([Path2D path]) {
     if (path == null) {
@@ -2905,7 +2934,7 @@
       return;
     }
     if ((path is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.stroke_Callback_Path2D(this, path);
+      _blink.BlinkCanvasRenderingContext2D.stroke_Callback_1(this, path);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2913,36 +2942,36 @@
 
   @DomName('CanvasRenderingContext2D.strokeRect')
   @DocsEditable()
-  void strokeRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.strokeRect_Callback_float_float_float_float(this, x, y, width, height);
+  void strokeRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.strokeRect_Callback_4(this, x, y, width, height);
 
   void strokeText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
-      _blink.BlinkCanvasRenderingContext2D.strokeText_Callback_DOMString_float_float_float(this, text, x, y, maxWidth);
+      _blink.BlinkCanvasRenderingContext2D.strokeText_Callback_4(this, text, x, y, maxWidth);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.strokeText_Callback_DOMString_float_float(this, text, x, y);
+    _blink.BlinkCanvasRenderingContext2D.strokeText_Callback_3(this, text, x, y);
     return;
   }
 
   @DomName('CanvasRenderingContext2D.transform')
   @DocsEditable()
-  void transform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.transform_Callback_float_float_float_float_float_float(this, a, b, c, d, e, f);
+  void transform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.transform_Callback_6(this, a, b, c, d, e, f);
 
   @DomName('CanvasRenderingContext2D.translate')
   @DocsEditable()
-  void translate(num x, num y) => _blink.BlinkCanvasRenderingContext2D.translate_Callback_float_float(this, x, y);
+  void translate(num x, num y) => _blink.BlinkCanvasRenderingContext2D.translate_Callback_2(this, x, y);
 
   @DomName('CanvasRenderingContext2D.arc')
   @DocsEditable()
-  void _arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.arc_Callback_float_float_float_float_float_boolean(this, x, y, radius, startAngle, endAngle, anticlockwise);
+  void _arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.arc_Callback_6(this, x, y, radius, startAngle, endAngle, anticlockwise);
 
   @DomName('CanvasRenderingContext2D.arcTo')
   @DocsEditable()
-  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkCanvasRenderingContext2D.arcTo_Callback_float_float_float_float_float(this, x1, y1, x2, y2, radius);
+  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkCanvasRenderingContext2D.arcTo_Callback_5(this, x1, y1, x2, y2, radius);
 
   @DomName('CanvasRenderingContext2D.bezierCurveTo')
   @DocsEditable()
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkCanvasRenderingContext2D.bezierCurveTo_Callback_float_float_float_float_float_float(this, cp1x, cp1y, cp2x, cp2y, x, y);
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkCanvasRenderingContext2D.bezierCurveTo_Callback_6(this, cp1x, cp1y, cp2x, cp2y, x, y);
 
   @DomName('CanvasRenderingContext2D.closePath')
   @DocsEditable()
@@ -2951,23 +2980,23 @@
   @DomName('CanvasRenderingContext2D.ellipse')
   @DocsEditable()
   @Experimental() // untriaged
-  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.ellipse_Callback_float_float_float_float_float_float_float_boolean(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.ellipse_Callback_8(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
 
   @DomName('CanvasRenderingContext2D.lineTo')
   @DocsEditable()
-  void lineTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.lineTo_Callback_float_float(this, x, y);
+  void lineTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.lineTo_Callback_2(this, x, y);
 
   @DomName('CanvasRenderingContext2D.moveTo')
   @DocsEditable()
-  void moveTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.moveTo_Callback_float_float(this, x, y);
+  void moveTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.moveTo_Callback_2(this, x, y);
 
   @DomName('CanvasRenderingContext2D.quadraticCurveTo')
   @DocsEditable()
-  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkCanvasRenderingContext2D.quadraticCurveTo_Callback_float_float_float_float(this, cpx, cpy, x, y);
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkCanvasRenderingContext2D.quadraticCurveTo_Callback_4(this, cpx, cpy, x, y);
 
   @DomName('CanvasRenderingContext2D.rect')
   @DocsEditable()
-  void rect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.rect_Callback_float_float_float_float(this, x, y, width, height);
+  void rect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.rect_Callback_4(this, x, y, width, height);
 
 
   /**
@@ -3223,7 +3252,7 @@
 
   @DomName('CharacterData.data')
   @DocsEditable()
-  void set data(String value) => _blink.BlinkCharacterData.data_Setter_DOMString(this, value);
+  void set data(String value) => _blink.BlinkCharacterData.data_Setter(this, value);
 
   @DomName('CharacterData.length')
   @DocsEditable()
@@ -3231,23 +3260,23 @@
 
   @DomName('CharacterData.appendData')
   @DocsEditable()
-  void appendData(String data) => _blink.BlinkCharacterData.appendData_Callback_DOMString(this, data);
+  void appendData(String data) => _blink.BlinkCharacterData.appendData_Callback_1(this, data);
 
   @DomName('CharacterData.deleteData')
   @DocsEditable()
-  void deleteData(int offset, int length) => _blink.BlinkCharacterData.deleteData_Callback_ul_ul(this, offset, length);
+  void deleteData(int offset, int length) => _blink.BlinkCharacterData.deleteData_Callback_2(this, offset, length);
 
   @DomName('CharacterData.insertData')
   @DocsEditable()
-  void insertData(int offset, String data) => _blink.BlinkCharacterData.insertData_Callback_ul_DOMString(this, offset, data);
+  void insertData(int offset, String data) => _blink.BlinkCharacterData.insertData_Callback_2(this, offset, data);
 
   @DomName('CharacterData.replaceData')
   @DocsEditable()
-  void replaceData(int offset, int length, String data) => _blink.BlinkCharacterData.replaceData_Callback_ul_ul_DOMString(this, offset, length, data);
+  void replaceData(int offset, int length, String data) => _blink.BlinkCharacterData.replaceData_Callback_3(this, offset, length, data);
 
   @DomName('CharacterData.substringData')
   @DocsEditable()
-  String substringData(int offset, int length) => _blink.BlinkCharacterData.substringData_Callback_ul_ul(this, offset, length);
+  String substringData(int offset, int length) => _blink.BlinkCharacterData.substringData_Callback_2(this, offset, length);
 
   @DomName('CharacterData.nextElementSibling')
   @DocsEditable()
@@ -3305,7 +3334,7 @@
   @DomName('CircularRegion.CircularRegion')
   @DocsEditable()
   factory CircularRegion(Map init) {
-    return _blink.BlinkCircularRegion.constructorCallback_Dictionary(init);
+    return _blink.BlinkCircularRegion.constructorCallback_1(init);
   }
 
   @DomName('CircularRegion.MAX_RADIUS')
@@ -3375,7 +3404,7 @@
   @DocsEditable()
   factory Comment([String data]) {
     if (data != null) {
-      return _blink.BlinkComment.constructorCallback_DOMString(data);
+      return _blink.BlinkComment.constructorCallback_1(data);
     }
     return _blink.BlinkComment.constructorCallback();
   }
@@ -3423,7 +3452,7 @@
 
   @DomName('CompositionEvent.initCompositionEvent')
   @DocsEditable()
-  void _initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkCompositionEvent.initCompositionEvent_Callback_DOMString_boolean_boolean_Window_DOMString(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+  void _initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkCompositionEvent.initCompositionEvent_Callback_5(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3462,47 +3491,47 @@
   @DomName('ConsoleBase.assertCondition')
   @DocsEditable()
   @Experimental() // untriaged
-  void assertCondition(bool condition, Object arg) => _blink.BlinkConsoleBase.assert_Callback_boolean_object(this, condition, arg);
+  void assertCondition(bool condition, Object arg) => _blink.BlinkConsoleBase.assert_Callback_2(this, condition, arg);
 
   @DomName('ConsoleBase.clear')
   @DocsEditable()
   @Experimental() // untriaged
-  void clear(Object arg) => _blink.BlinkConsoleBase.clear_Callback_object(this, arg);
+  void clear(Object arg) => _blink.BlinkConsoleBase.clear_Callback_1(this, arg);
 
   @DomName('ConsoleBase.count')
   @DocsEditable()
   @Experimental() // untriaged
-  void count(Object arg) => _blink.BlinkConsoleBase.count_Callback_object(this, arg);
+  void count(Object arg) => _blink.BlinkConsoleBase.count_Callback_1(this, arg);
 
   @DomName('ConsoleBase.debug')
   @DocsEditable()
   @Experimental() // untriaged
-  void debug(Object arg) => _blink.BlinkConsoleBase.debug_Callback_object(this, arg);
+  void debug(Object arg) => _blink.BlinkConsoleBase.debug_Callback_1(this, arg);
 
   @DomName('ConsoleBase.dir')
   @DocsEditable()
   @Experimental() // untriaged
-  void dir(Object arg) => _blink.BlinkConsoleBase.dir_Callback_object(this, arg);
+  void dir(Object arg) => _blink.BlinkConsoleBase.dir_Callback_1(this, arg);
 
   @DomName('ConsoleBase.dirxml')
   @DocsEditable()
   @Experimental() // untriaged
-  void dirxml(Object arg) => _blink.BlinkConsoleBase.dirxml_Callback_object(this, arg);
+  void dirxml(Object arg) => _blink.BlinkConsoleBase.dirxml_Callback_1(this, arg);
 
   @DomName('ConsoleBase.error')
   @DocsEditable()
   @Experimental() // untriaged
-  void error(Object arg) => _blink.BlinkConsoleBase.error_Callback_object(this, arg);
+  void error(Object arg) => _blink.BlinkConsoleBase.error_Callback_1(this, arg);
 
   @DomName('ConsoleBase.group')
   @DocsEditable()
   @Experimental() // untriaged
-  void group(Object arg) => _blink.BlinkConsoleBase.group_Callback_object(this, arg);
+  void group(Object arg) => _blink.BlinkConsoleBase.group_Callback_1(this, arg);
 
   @DomName('ConsoleBase.groupCollapsed')
   @DocsEditable()
   @Experimental() // untriaged
-  void groupCollapsed(Object arg) => _blink.BlinkConsoleBase.groupCollapsed_Callback_object(this, arg);
+  void groupCollapsed(Object arg) => _blink.BlinkConsoleBase.groupCollapsed_Callback_1(this, arg);
 
   @DomName('ConsoleBase.groupEnd')
   @DocsEditable()
@@ -3512,67 +3541,67 @@
   @DomName('ConsoleBase.info')
   @DocsEditable()
   @Experimental() // untriaged
-  void info(Object arg) => _blink.BlinkConsoleBase.info_Callback_object(this, arg);
+  void info(Object arg) => _blink.BlinkConsoleBase.info_Callback_1(this, arg);
 
   @DomName('ConsoleBase.log')
   @DocsEditable()
   @Experimental() // untriaged
-  void log(Object arg) => _blink.BlinkConsoleBase.log_Callback_object(this, arg);
+  void log(Object arg) => _blink.BlinkConsoleBase.log_Callback_1(this, arg);
 
   @DomName('ConsoleBase.markTimeline')
   @DocsEditable()
   @Experimental() // untriaged
-  void markTimeline(String title) => _blink.BlinkConsoleBase.markTimeline_Callback_DOMString(this, title);
+  void markTimeline(String title) => _blink.BlinkConsoleBase.markTimeline_Callback_1(this, title);
 
   @DomName('ConsoleBase.profile')
   @DocsEditable()
   @Experimental() // untriaged
-  void profile(String title) => _blink.BlinkConsoleBase.profile_Callback_DOMString(this, title);
+  void profile(String title) => _blink.BlinkConsoleBase.profile_Callback_1(this, title);
 
   @DomName('ConsoleBase.profileEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void profileEnd(String title) => _blink.BlinkConsoleBase.profileEnd_Callback_DOMString(this, title);
+  void profileEnd(String title) => _blink.BlinkConsoleBase.profileEnd_Callback_1(this, title);
 
   @DomName('ConsoleBase.table')
   @DocsEditable()
   @Experimental() // untriaged
-  void table(Object arg) => _blink.BlinkConsoleBase.table_Callback_object(this, arg);
+  void table(Object arg) => _blink.BlinkConsoleBase.table_Callback_1(this, arg);
 
   @DomName('ConsoleBase.time')
   @DocsEditable()
   @Experimental() // untriaged
-  void time(String title) => _blink.BlinkConsoleBase.time_Callback_DOMString(this, title);
+  void time(String title) => _blink.BlinkConsoleBase.time_Callback_1(this, title);
 
   @DomName('ConsoleBase.timeEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeEnd(String title) => _blink.BlinkConsoleBase.timeEnd_Callback_DOMString(this, title);
+  void timeEnd(String title) => _blink.BlinkConsoleBase.timeEnd_Callback_1(this, title);
 
   @DomName('ConsoleBase.timeStamp')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeStamp(String title) => _blink.BlinkConsoleBase.timeStamp_Callback_DOMString(this, title);
+  void timeStamp(String title) => _blink.BlinkConsoleBase.timeStamp_Callback_1(this, title);
 
   @DomName('ConsoleBase.timeline')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeline(String title) => _blink.BlinkConsoleBase.timeline_Callback_DOMString(this, title);
+  void timeline(String title) => _blink.BlinkConsoleBase.timeline_Callback_1(this, title);
 
   @DomName('ConsoleBase.timelineEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void timelineEnd(String title) => _blink.BlinkConsoleBase.timelineEnd_Callback_DOMString(this, title);
+  void timelineEnd(String title) => _blink.BlinkConsoleBase.timelineEnd_Callback_1(this, title);
 
   @DomName('ConsoleBase.trace')
   @DocsEditable()
   @Experimental() // untriaged
-  void trace(Object arg) => _blink.BlinkConsoleBase.trace_Callback_object(this, arg);
+  void trace(Object arg) => _blink.BlinkConsoleBase.trace_Callback_1(this, arg);
 
   @DomName('ConsoleBase.warn')
   @DocsEditable()
   @Experimental() // untriaged
-  void warn(Object arg) => _blink.BlinkConsoleBase.warn_Callback_object(this, arg);
+  void warn(Object arg) => _blink.BlinkConsoleBase.warn_Callback_1(this, arg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3610,7 +3639,7 @@
 
   @DomName('HTMLContentElement.select')
   @DocsEditable()
-  void set select(String value) => _blink.BlinkHTMLContentElement.select_Setter_DOMString(this, value);
+  void set select(String value) => _blink.BlinkHTMLContentElement.select_Setter(this, value);
 
   @DomName('HTMLContentElement.getDistributedNodes')
   @DocsEditable()
@@ -3703,6 +3732,32 @@
   // To suppress missing implicit constructor warnings.
   factory CredentialsContainer._() { throw new UnsupportedError("Not supported"); }
 
+  Future notifyFailedSignIn([Credential credential]) {
+    if (credential != null) {
+      return _blink.BlinkCredentialsContainer.notifyFailedSignIn_Callback_1(this, credential);
+    }
+    return _blink.BlinkCredentialsContainer.notifyFailedSignIn_Callback(this);
+  }
+
+  Future notifySignedIn([Credential credential]) {
+    if (credential != null) {
+      return _blink.BlinkCredentialsContainer.notifySignedIn_Callback_1(this, credential);
+    }
+    return _blink.BlinkCredentialsContainer.notifySignedIn_Callback(this);
+  }
+
+  @DomName('CredentialsContainer.notifySignedOut')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future notifySignedOut() => _blink.BlinkCredentialsContainer.notifySignedOut_Callback(this);
+
+  Future request([Map options]) {
+    if (options != null) {
+      return _blink.BlinkCredentialsContainer.request_Callback_1(this, options);
+    }
+    return _blink.BlinkCredentialsContainer.request_Callback(this);
+  }
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3731,7 +3786,7 @@
 
   @DomName('Crypto.getRandomValues')
   @DocsEditable()
-  TypedData getRandomValues(TypedData array) => _blink.BlinkCrypto.getRandomValues_Callback_ArrayBufferView(this, array);
+  TypedData getRandomValues(TypedData array) => _blink.BlinkCrypto.getRandomValues_Callback_1(this, array);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3786,11 +3841,11 @@
 
   @DomName('CSS.supports')
   @DocsEditable()
-  bool supports(String property, String value) => _blink.BlinkCSS.supports_Callback_DOMString_DOMString(this, property, value);
+  bool supports(String property, String value) => _blink.BlinkCSS.supports_Callback_2(this, property, value);
 
   @DomName('CSS.supportsCondition')
   @DocsEditable()
-  bool supportsCondition(String conditionText) => _blink.BlinkCSS.supports_Callback_DOMString(this, conditionText);
+  bool supportsCondition(String conditionText) => _blink.BlinkCSS.supports_Callback_1(this, conditionText);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3814,7 +3869,7 @@
 
   @DomName('CSSCharsetRule.encoding')
   @DocsEditable()
-  void set encoding(String value) => _blink.BlinkCSSCharsetRule.encoding_Setter_DOMString(this, value);
+  void set encoding(String value) => _blink.BlinkCSSCharsetRule.encoding_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3905,7 +3960,7 @@
   @DomName('CSSKeyframeRule.keyText')
   @DocsEditable()
   @Experimental() // untriaged
-  void set keyText(String value) => _blink.BlinkCSSKeyframeRule.keyText_Setter_DOMString(this, value);
+  void set keyText(String value) => _blink.BlinkCSSKeyframeRule.keyText_Setter(this, value);
 
   @DomName('CSSKeyframeRule.style')
   @DocsEditable()
@@ -3940,27 +3995,27 @@
   @DomName('CSSKeyframesRule.name')
   @DocsEditable()
   @Experimental() // untriaged
-  void set name(String value) => _blink.BlinkCSSKeyframesRule.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkCSSKeyframesRule.name_Setter(this, value);
 
   @DomName('CSSKeyframesRule.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  CssKeyframeRule __getter__(int index) => _blink.BlinkCSSKeyframesRule.$__getter___Callback_ul(this, index);
+  CssKeyframeRule __getter__(int index) => _blink.BlinkCSSKeyframesRule.$__getter___Callback_1(this, index);
 
   @DomName('CSSKeyframesRule.deleteRule')
   @DocsEditable()
   @Experimental() // untriaged
-  void deleteRule(String key) => _blink.BlinkCSSKeyframesRule.deleteRule_Callback_DOMString(this, key);
+  void deleteRule(String key) => _blink.BlinkCSSKeyframesRule.deleteRule_Callback_1(this, key);
 
   @DomName('CSSKeyframesRule.findRule')
   @DocsEditable()
   @Experimental() // untriaged
-  CssKeyframeRule findRule(String key) => _blink.BlinkCSSKeyframesRule.findRule_Callback_DOMString(this, key);
+  CssKeyframeRule findRule(String key) => _blink.BlinkCSSKeyframesRule.findRule_Callback_1(this, key);
 
   @DomName('CSSKeyframesRule.insertRule')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendRule(String rule) => _blink.BlinkCSSKeyframesRule.insertRule_Callback_DOMString(this, rule);
+  void appendRule(String rule) => _blink.BlinkCSSKeyframesRule.insertRule_Callback_1(this, rule);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3986,11 +4041,11 @@
 
   @DomName('CSSMediaRule.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSMediaRule.deleteRule_Callback_ul(this, index);
+  void deleteRule(int index) => _blink.BlinkCSSMediaRule.deleteRule_Callback_1(this, index);
 
   @DomName('CSSMediaRule.insertRule')
   @DocsEditable()
-  int insertRule(String rule, int index) => _blink.BlinkCSSMediaRule.insertRule_Callback_DOMString_ul(this, rule, index);
+  int insertRule(String rule, int index) => _blink.BlinkCSSMediaRule.insertRule_Callback_2(this, rule, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4012,7 +4067,7 @@
 
   @DomName('CSSPageRule.selectorText')
   @DocsEditable()
-  void set selectorText(String value) => _blink.BlinkCSSPageRule.selectorText_Setter_DOMString(this, value);
+  void set selectorText(String value) => _blink.BlinkCSSPageRule.selectorText_Setter(this, value);
 
   @DomName('CSSPageRule.style')
   @DocsEditable()
@@ -4099,7 +4154,7 @@
 
   @DomName('CSSRule.cssText')
   @DocsEditable()
-  void set cssText(String value) => _blink.BlinkCSSRule.cssText_Setter_DOMString(this, value);
+  void set cssText(String value) => _blink.BlinkCSSRule.cssText_Setter(this, value);
 
   @DomName('CSSRule.parentRule')
   @DocsEditable()
@@ -4173,7 +4228,7 @@
   }
 
   bool _hasProperty(String propertyName) =>
-      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, propertyName);
+      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, propertyName);
 
   @DomName('CSSStyleDeclaration.setProperty')
   void setProperty(String propertyName, String value, [String priority]) {
@@ -4212,7 +4267,7 @@
 
   @DomName('CSSStyleDeclaration.cssText')
   @DocsEditable()
-  void set cssText(String value) => _blink.BlinkCSSStyleDeclaration.cssText_Setter_DOMString(this, value);
+  void set cssText(String value) => _blink.BlinkCSSStyleDeclaration.cssText_Setter(this, value);
 
   @DomName('CSSStyleDeclaration.length')
   @DocsEditable()
@@ -4225,36 +4280,36 @@
   @DomName('CSSStyleDeclaration.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  Object __getter__(String name) => _blink.BlinkCSSStyleDeclaration.$__getter___Callback_DOMString(this, name);
+  Object __getter__(String name) => _blink.BlinkCSSStyleDeclaration.$__getter___Callback_1(this, name);
 
   @DomName('CSSStyleDeclaration.__propertyQuery__')
   @DocsEditable()
   @Experimental() // untriaged
-  bool __propertyQuery__(String name) => _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, name);
+  bool __propertyQuery__(String name) => _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, name);
 
   @DomName('CSSStyleDeclaration.__setter__')
   @DocsEditable()
-  void __setter__(String propertyName, String propertyValue) => _blink.BlinkCSSStyleDeclaration.$__setter___Callback_DOMString_DOMString(this, propertyName, propertyValue);
+  void __setter__(String propertyName, String propertyValue) => _blink.BlinkCSSStyleDeclaration.$__setter___Callback_2(this, propertyName, propertyValue);
 
   @DomName('CSSStyleDeclaration.getPropertyPriority')
   @DocsEditable()
-  String getPropertyPriority(String propertyName) => _blink.BlinkCSSStyleDeclaration.getPropertyPriority_Callback_DOMString(this, propertyName);
+  String getPropertyPriority(String propertyName) => _blink.BlinkCSSStyleDeclaration.getPropertyPriority_Callback_1(this, propertyName);
 
   @DomName('CSSStyleDeclaration.getPropertyValue')
   @DocsEditable()
-  String _getPropertyValue(String propertyName) => _blink.BlinkCSSStyleDeclaration.getPropertyValue_Callback_DOMString(this, propertyName);
+  String _getPropertyValue(String propertyName) => _blink.BlinkCSSStyleDeclaration.getPropertyValue_Callback_1(this, propertyName);
 
   @DomName('CSSStyleDeclaration.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkCSSStyleDeclaration.item_Callback_ul(this, index);
+  String item(int index) => _blink.BlinkCSSStyleDeclaration.item_Callback_1(this, index);
 
   @DomName('CSSStyleDeclaration.removeProperty')
   @DocsEditable()
-  String removeProperty(String propertyName) => _blink.BlinkCSSStyleDeclaration.removeProperty_Callback_DOMString(this, propertyName);
+  String removeProperty(String propertyName) => _blink.BlinkCSSStyleDeclaration.removeProperty_Callback_1(this, propertyName);
 
   @DomName('CSSStyleDeclaration.setProperty')
   @DocsEditable()
-  void _setProperty(String propertyName, String value, String priority) => _blink.BlinkCSSStyleDeclaration.setProperty_Callback_DOMString_DOMString_DOMString(this, propertyName, value, priority);
+  void _setProperty(String propertyName, String value, String priority) => _blink.BlinkCSSStyleDeclaration.setProperty_Callback_3(this, propertyName, value, priority);
 
 }
 
@@ -7389,7 +7444,7 @@
 
   @DomName('CSSStyleRule.selectorText')
   @DocsEditable()
-  void set selectorText(String value) => _blink.BlinkCSSStyleRule.selectorText_Setter_DOMString(this, value);
+  void set selectorText(String value) => _blink.BlinkCSSStyleRule.selectorText_Setter(this, value);
 
   @DomName('CSSStyleRule.style')
   @DocsEditable()
@@ -7424,26 +7479,26 @@
 
   int addRule(String selector, String style, [int index]) {
     if (index != null) {
-      return _blink.BlinkCSSStyleSheet.addRule_Callback_DOMString_DOMString_ul(this, selector, style, index);
+      return _blink.BlinkCSSStyleSheet.addRule_Callback_3(this, selector, style, index);
     }
-    return _blink.BlinkCSSStyleSheet.addRule_Callback_DOMString_DOMString(this, selector, style);
+    return _blink.BlinkCSSStyleSheet.addRule_Callback_2(this, selector, style);
   }
 
   @DomName('CSSStyleSheet.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSStyleSheet.deleteRule_Callback_ul(this, index);
+  void deleteRule(int index) => _blink.BlinkCSSStyleSheet.deleteRule_Callback_1(this, index);
 
   int insertRule(String rule, [int index]) {
     if (index != null) {
-      return _blink.BlinkCSSStyleSheet.insertRule_Callback_DOMString_ul(this, rule, index);
+      return _blink.BlinkCSSStyleSheet.insertRule_Callback_2(this, rule, index);
     }
-    return _blink.BlinkCSSStyleSheet.insertRule_Callback_DOMString(this, rule);
+    return _blink.BlinkCSSStyleSheet.insertRule_Callback_1(this, rule);
   }
 
   @DomName('CSSStyleSheet.removeRule')
   @DocsEditable()
   @Experimental() // non-standard
-  void removeRule(int index) => _blink.BlinkCSSStyleSheet.removeRule_Callback_ul(this, index);
+  void removeRule(int index) => _blink.BlinkCSSStyleSheet.removeRule_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7469,11 +7524,11 @@
 
   @DomName('CSSSupportsRule.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSSupportsRule.deleteRule_Callback_ul(this, index);
+  void deleteRule(int index) => _blink.BlinkCSSSupportsRule.deleteRule_Callback_1(this, index);
 
   @DomName('CSSSupportsRule.insertRule')
   @DocsEditable()
-  int insertRule(String rule, int index) => _blink.BlinkCSSSupportsRule.insertRule_Callback_DOMString_ul(this, rule, index);
+  int insertRule(String rule, int index) => _blink.BlinkCSSSupportsRule.insertRule_Callback_2(this, rule, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7545,7 +7600,7 @@
 
   @DomName('CustomEvent.initCustomEvent')
   @DocsEditable()
-  void _initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) => _blink.BlinkCustomEvent.initCustomEvent_Callback_DOMString_boolean_boolean_ScriptValue(this, typeArg, canBubbleArg, cancelableArg, detailArg);
+  void _initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) => _blink.BlinkCustomEvent.initCustomEvent_Callback_4(this, typeArg, canBubbleArg, cancelableArg, detailArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7629,7 +7684,7 @@
   @DomName('DataTransfer.dropEffect')
   @DocsEditable()
   @Experimental() // untriaged
-  void set dropEffect(String value) => _blink.BlinkDataTransfer.dropEffect_Setter_DOMString(this, value);
+  void set dropEffect(String value) => _blink.BlinkDataTransfer.dropEffect_Setter(this, value);
 
   @DomName('DataTransfer.effectAllowed')
   @DocsEditable()
@@ -7639,7 +7694,7 @@
   @DomName('DataTransfer.effectAllowed')
   @DocsEditable()
   @Experimental() // untriaged
-  void set effectAllowed(String value) => _blink.BlinkDataTransfer.effectAllowed_Setter_DOMString(this, value);
+  void set effectAllowed(String value) => _blink.BlinkDataTransfer.effectAllowed_Setter(this, value);
 
   @DomName('DataTransfer.files')
   @DocsEditable()
@@ -7658,7 +7713,7 @@
 
   void clearData([String type]) {
     if (type != null) {
-      _blink.BlinkDataTransfer.clearData_Callback_DOMString(this, type);
+      _blink.BlinkDataTransfer.clearData_Callback_1(this, type);
       return;
     }
     _blink.BlinkDataTransfer.clearData_Callback(this);
@@ -7668,17 +7723,17 @@
   @DomName('DataTransfer.getData')
   @DocsEditable()
   @Experimental() // untriaged
-  String getData(String type) => _blink.BlinkDataTransfer.getData_Callback_DOMString(this, type);
+  String getData(String type) => _blink.BlinkDataTransfer.getData_Callback_1(this, type);
 
   @DomName('DataTransfer.setData')
   @DocsEditable()
   @Experimental() // untriaged
-  void setData(String type, String data) => _blink.BlinkDataTransfer.setData_Callback_DOMString_DOMString(this, type, data);
+  void setData(String type, String data) => _blink.BlinkDataTransfer.setData_Callback_2(this, type, data);
 
   @DomName('DataTransfer.setDragImage')
   @DocsEditable()
   @Experimental() // untriaged
-  void setDragImage(Element image, int x, int y) => _blink.BlinkDataTransfer.setDragImage_Callback_Element_long_long(this, image, x, y);
+  void setDragImage(Element image, int x, int y) => _blink.BlinkDataTransfer.setDragImage_Callback_3(this, image, x, y);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7710,7 +7765,7 @@
 
   @DomName('DataTransferItem.getAsString')
   @DocsEditable()
-  void _getAsString(_StringCallback callback) => _blink.BlinkDataTransferItem.getAsString_Callback_StringCallback(this, callback);
+  void _getAsString(_StringCallback callback) => _blink.BlinkDataTransferItem.getAsString_Callback_1(this, callback);
 
   Future<String> getAsString() {
     var completer = new Completer<String>();
@@ -7747,25 +7802,25 @@
   @DomName('DataTransferItemList.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  DataTransferItem __getter__(int index) => _blink.BlinkDataTransferItemList.$__getter___Callback_ul(this, index);
+  DataTransferItem __getter__(int index) => _blink.BlinkDataTransferItemList.$__getter___Callback_1(this, index);
 
   DataTransferItem add(data_OR_file, [String type]) {
     if ((type is String) && (data_OR_file is String)) {
-      return _blink.BlinkDataTransferItemList.add_Callback_DOMString_DOMString(this, data_OR_file, type);
+      return _blink.BlinkDataTransferItemList.add_Callback_2(this, data_OR_file, type);
     }
     if ((data_OR_file is File || data_OR_file == null) && type == null) {
-      return _blink.BlinkDataTransferItemList.add_Callback_File(this, data_OR_file);
+      return _blink.BlinkDataTransferItemList.add_Callback_1(this, data_OR_file);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('DataTransferItemList.addData')
   @DocsEditable()
-  DataTransferItem addData(String data, String type) => _blink.BlinkDataTransferItemList.add_Callback_DOMString_DOMString(this, data, type);
+  DataTransferItem addData(String data, String type) => _blink.BlinkDataTransferItemList.add_Callback_2(this, data, type);
 
   @DomName('DataTransferItemList.addFile')
   @DocsEditable()
-  DataTransferItem addFile(File file) => _blink.BlinkDataTransferItemList.add_Callback_File(this, file);
+  DataTransferItem addFile(File file) => _blink.BlinkDataTransferItemList.add_Callback_1(this, file);
 
   @DomName('DataTransferItemList.clear')
   @DocsEditable()
@@ -7774,7 +7829,7 @@
   @DomName('DataTransferItemList.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(int index) => _blink.BlinkDataTransferItemList.remove_Callback_ul(this, index);
+  void remove(int index) => _blink.BlinkDataTransferItemList.remove_Callback_1(this, index);
 
 
   DataTransferItem operator[] (int index) {
@@ -7821,7 +7876,7 @@
   @DomName('DedicatedWorkerGlobalScope.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkDedicatedWorkerGlobalScope.postMessage_Callback_ScriptValue_SEQ_MessagePort_SEQ(this, message, transfer);
+  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkDedicatedWorkerGlobalScope.postMessage_Callback_2(this, message, transfer);
 
   /// Stream of `message` events handled by this [DedicatedWorkerGlobalScope].
   @DomName('DedicatedWorkerGlobalScope.onmessage')
@@ -7854,15 +7909,31 @@
   @Experimental() // untriaged
   static const int TEMPORARY = 0;
 
-  @DomName('DeprecatedStorageInfo.queryUsageAndQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void queryUsageAndQuota(int storageType, [StorageUsageCallback usageCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageInfo.queryUsageAndQuota_Callback_us_StorageUsageCallback_StorageErrorCallback(this, storageType, usageCallback, errorCallback);
+  void queryUsageAndQuota(int storageType, [StorageUsageCallback usageCallback, StorageErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkDeprecatedStorageInfo.queryUsageAndQuota_Callback_3(this, storageType, usageCallback, errorCallback);
+      return;
+    }
+    if (usageCallback != null) {
+      _blink.BlinkDeprecatedStorageInfo.queryUsageAndQuota_Callback_2(this, storageType, usageCallback);
+      return;
+    }
+    _blink.BlinkDeprecatedStorageInfo.queryUsageAndQuota_Callback_1(this, storageType);
+    return;
+  }
 
-  @DomName('DeprecatedStorageInfo.requestQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void requestQuota(int storageType, int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageInfo.requestQuota_Callback_us_ull_StorageQuotaCallback_StorageErrorCallback(this, storageType, newQuotaInBytes, quotaCallback, errorCallback);
+  void requestQuota(int storageType, int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkDeprecatedStorageInfo.requestQuota_Callback_4(this, storageType, newQuotaInBytes, quotaCallback, errorCallback);
+      return;
+    }
+    if (quotaCallback != null) {
+      _blink.BlinkDeprecatedStorageInfo.requestQuota_Callback_3(this, storageType, newQuotaInBytes, quotaCallback);
+      return;
+    }
+    _blink.BlinkDeprecatedStorageInfo.requestQuota_Callback_2(this, storageType, newQuotaInBytes);
+    return;
+  }
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7879,15 +7950,27 @@
   // To suppress missing implicit constructor warnings.
   factory DeprecatedStorageQuota._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('DeprecatedStorageQuota.queryUsageAndQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void queryUsageAndQuota(StorageUsageCallback usageCallback, [StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageQuota.queryUsageAndQuota_Callback_StorageUsageCallback_StorageErrorCallback(this, usageCallback, errorCallback);
+  void queryUsageAndQuota(StorageUsageCallback usageCallback, [StorageErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkDeprecatedStorageQuota.queryUsageAndQuota_Callback_2(this, usageCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkDeprecatedStorageQuota.queryUsageAndQuota_Callback_1(this, usageCallback);
+    return;
+  }
 
-  @DomName('DeprecatedStorageQuota.requestQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void requestQuota(int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageQuota.requestQuota_Callback_ull_StorageQuotaCallback_StorageErrorCallback(this, newQuotaInBytes, quotaCallback, errorCallback);
+  void requestQuota(int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkDeprecatedStorageQuota.requestQuota_Callback_3(this, newQuotaInBytes, quotaCallback, errorCallback);
+      return;
+    }
+    if (quotaCallback != null) {
+      _blink.BlinkDeprecatedStorageQuota.requestQuota_Callback_2(this, newQuotaInBytes, quotaCallback);
+      return;
+    }
+    _blink.BlinkDeprecatedStorageQuota.requestQuota_Callback_1(this, newQuotaInBytes);
+    return;
+  }
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7925,7 +8008,7 @@
 
   @DomName('HTMLDetailsElement.open')
   @DocsEditable()
-  void set open(bool value) => _blink.BlinkHTMLDetailsElement.open_Setter_boolean(this, value);
+  void set open(bool value) => _blink.BlinkHTMLDetailsElement.open_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8010,7 +8093,7 @@
   @DomName('DeviceMotionEvent.initDeviceMotionEvent')
   @DocsEditable()
   @Experimental() // untriaged
-  void initDeviceMotionEvent(String type, bool bubbles, bool cancelable, DeviceAcceleration acceleration, DeviceAcceleration accelerationIncludingGravity, DeviceRotationRate rotationRate, num interval) => _blink.BlinkDeviceMotionEvent.initDeviceMotionEvent_Callback_DOMString_boolean_boolean_DeviceAcceleration_DeviceAcceleration_DeviceRotationRate_double(this, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
+  void initDeviceMotionEvent(String type, bool bubbles, bool cancelable, DeviceAcceleration acceleration, DeviceAcceleration accelerationIncludingGravity, DeviceRotationRate rotationRate, num interval) => _blink.BlinkDeviceMotionEvent.initDeviceMotionEvent_Callback_7(this, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -8052,7 +8135,7 @@
 
   @DomName('DeviceOrientationEvent.initDeviceOrientationEvent')
   @DocsEditable()
-  void _initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) => _blink.BlinkDeviceOrientationEvent.initDeviceOrientationEvent_Callback_DOMString_boolean_boolean_double_double_double_boolean(this, type, bubbles, cancelable, alpha, beta, gamma, absolute);
+  void _initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) => _blink.BlinkDeviceOrientationEvent.initDeviceOrientationEvent_Callback_7(this, type, bubbles, cancelable, alpha, beta, gamma, absolute);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8109,7 +8192,7 @@
 
   @DomName('HTMLDialogElement.open')
   @DocsEditable()
-  void set open(bool value) => _blink.BlinkHTMLDialogElement.open_Setter_boolean(this, value);
+  void set open(bool value) => _blink.BlinkHTMLDialogElement.open_Setter(this, value);
 
   @DomName('HTMLDialogElement.returnValue')
   @DocsEditable()
@@ -8119,11 +8202,11 @@
   @DomName('HTMLDialogElement.returnValue')
   @DocsEditable()
   @Experimental() // untriaged
-  void set returnValue(String value) => _blink.BlinkHTMLDialogElement.returnValue_Setter_DOMString(this, value);
+  void set returnValue(String value) => _blink.BlinkHTMLDialogElement.returnValue_Setter(this, value);
 
   @DomName('HTMLDialogElement.close')
   @DocsEditable()
-  void close(String returnValue) => _blink.BlinkHTMLDialogElement.close_Callback_DOMString(this, returnValue);
+  void close(String returnValue) => _blink.BlinkHTMLDialogElement.close_Callback_1(this, returnValue);
 
   @DomName('HTMLDialogElement.show')
   @DocsEditable()
@@ -8187,9 +8270,22 @@
   @DocsEditable()
   DirectoryReader createReader() => _blink.BlinkDirectoryEntry.createReader_Callback(this);
 
-  @DomName('DirectoryEntry.getDirectory')
-  @DocsEditable()
-  void __getDirectory(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) => _blink.BlinkDirectoryEntry.getDirectory_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(this, path, options, successCallback, errorCallback);
+  void __getDirectory(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
+    if (errorCallback != null) {
+      _blink.BlinkDirectoryEntry.getDirectory_Callback_4(this, path, options, successCallback, errorCallback);
+      return;
+    }
+    if (successCallback != null) {
+      _blink.BlinkDirectoryEntry.getDirectory_Callback_3(this, path, options, successCallback);
+      return;
+    }
+    if (options != null) {
+      _blink.BlinkDirectoryEntry.getDirectory_Callback_2(this, path, options);
+      return;
+    }
+    _blink.BlinkDirectoryEntry.getDirectory_Callback_1(this, path);
+    return;
+  }
 
   Future<Entry> _getDirectory(String path, {Map options}) {
     var completer = new Completer<Entry>();
@@ -8199,9 +8295,22 @@
     return completer.future;
   }
 
-  @DomName('DirectoryEntry.getFile')
-  @DocsEditable()
-  void __getFile(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) => _blink.BlinkDirectoryEntry.getFile_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(this, path, options, successCallback, errorCallback);
+  void __getFile(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
+    if (errorCallback != null) {
+      _blink.BlinkDirectoryEntry.getFile_Callback_4(this, path, options, successCallback, errorCallback);
+      return;
+    }
+    if (successCallback != null) {
+      _blink.BlinkDirectoryEntry.getFile_Callback_3(this, path, options, successCallback);
+      return;
+    }
+    if (options != null) {
+      _blink.BlinkDirectoryEntry.getFile_Callback_2(this, path, options);
+      return;
+    }
+    _blink.BlinkDirectoryEntry.getFile_Callback_1(this, path);
+    return;
+  }
 
   Future<Entry> _getFile(String path, {Map options}) {
     var completer = new Completer<Entry>();
@@ -8211,9 +8320,14 @@
     return completer.future;
   }
 
-  @DomName('DirectoryEntry.removeRecursively')
-  @DocsEditable()
-  void _removeRecursively(VoidCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkDirectoryEntry.removeRecursively_Callback_VoidCallback_ErrorCallback(this, successCallback, errorCallback);
+  void _removeRecursively(VoidCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkDirectoryEntry.removeRecursively_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkDirectoryEntry.removeRecursively_Callback_1(this, successCallback);
+    return;
+  }
 
   Future removeRecursively() {
     var completer = new Completer();
@@ -8239,9 +8353,14 @@
   // To suppress missing implicit constructor warnings.
   factory DirectoryReader._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('DirectoryReader.readEntries')
-  @DocsEditable()
-  void _readEntries(_EntriesCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkDirectoryReader.readEntries_Callback_EntriesCallback_ErrorCallback(this, successCallback, errorCallback);
+  void _readEntries(_EntriesCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkDirectoryReader.readEntries_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkDirectoryReader.readEntries_Callback_1(this, successCallback);
+    return;
+  }
 
   Future<List<Entry>> readEntries() {
     var completer = new Completer<List<Entry>>();
@@ -8363,7 +8482,7 @@
 
   @DomName('Document.body')
   @DocsEditable()
-  void set _body(HtmlElement value) => _blink.BlinkDocument.body_Setter_HTMLElement(this, value);
+  void set _body(HtmlElement value) => _blink.BlinkDocument.body_Setter(this, value);
 
   @DomName('Document.contentType')
   @DocsEditable()
@@ -8376,7 +8495,7 @@
 
   @DomName('Document.cookie')
   @DocsEditable()
-  void set cookie(String value) => _blink.BlinkDocument.cookie_Setter_DOMString(this, value);
+  void set cookie(String value) => _blink.BlinkDocument.cookie_Setter(this, value);
 
   @DomName('Document.currentScript')
   @DocsEditable()
@@ -8455,7 +8574,7 @@
 
   @DomName('Document.selectedStylesheetSet')
   @DocsEditable()
-  void set _selectedStylesheetSet(String value) => _blink.BlinkDocument.selectedStylesheetSet_Setter_DOMString(this, value);
+  void set _selectedStylesheetSet(String value) => _blink.BlinkDocument.selectedStylesheetSet_Setter(this, value);
 
   @DomName('Document.styleSheets')
   @DocsEditable()
@@ -8472,7 +8591,7 @@
 
   @DomName('Document.title')
   @DocsEditable()
-  void set _title(String value) => _blink.BlinkDocument.title_Setter_DOMString(this, value);
+  void set _title(String value) => _blink.BlinkDocument.title_Setter(this, value);
 
   @DomName('Document.visibilityState')
   @DocsEditable()
@@ -8513,13 +8632,13 @@
 
   @DomName('Document.adoptNode')
   @DocsEditable()
-  Node adoptNode(Node node) => _blink.BlinkDocument.adoptNode_Callback_Node(this, node);
+  Node adoptNode(Node node) => _blink.BlinkDocument.adoptNode_Callback_1(this, node);
 
   @DomName('Document.caretRangeFromPoint')
   @DocsEditable()
   // http://www.w3.org/TR/2009/WD-cssom-view-20090804/#dom-documentview-caretrangefrompoint
   @Experimental()
-  Range _caretRangeFromPoint(int x, int y) => _blink.BlinkDocument.caretRangeFromPoint_Callback_long_long(this, x, y);
+  Range _caretRangeFromPoint(int x, int y) => _blink.BlinkDocument.caretRangeFromPoint_Callback_2(this, x, y);
 
   @DomName('Document.createDocumentFragment')
   @DocsEditable()
@@ -8527,21 +8646,21 @@
 
   @DomName('Document.createElement')
   @DocsEditable()
-  Element _createElement(String localName_OR_tagName, [String typeExtension]) => _blink.BlinkDocument.createElement_Callback_DOMString(this, localName_OR_tagName, typeExtension);
+  Element _createElement(String localName_OR_tagName, [String typeExtension]) => _blink.BlinkDocument.createElement_Callback_2(this, localName_OR_tagName, typeExtension);
 
   @DomName('Document.createElementNS')
   @DocsEditable()
-  Element createElementNS(String namespaceURI, String qualifiedName, [String typeExtension]) => _blink.BlinkDocument.createElementNS_Callback_DOMString_DOMString(this, namespaceURI, qualifiedName, typeExtension);
+  Element createElementNS(String namespaceURI, String qualifiedName, [String typeExtension]) => _blink.BlinkDocument.createElementNS_Callback_3(this, namespaceURI, qualifiedName, typeExtension);
 
   @DomName('Document.createEvent')
   @DocsEditable()
-  Event _createEvent(String eventType) => _blink.BlinkDocument.createEvent_Callback_DOMString(this, eventType);
+  Event _createEvent(String eventType) => _blink.BlinkDocument.createEvent_Callback_1(this, eventType);
 
   NodeIterator _createNodeIterator(Node root, [int whatToShow, NodeFilter filter]) {
     if (whatToShow != null) {
-      return _blink.BlinkDocument.createNodeIterator_Callback_Node_ul_NodeFilter(this, root, whatToShow, filter);
+      return _blink.BlinkDocument.createNodeIterator_Callback_3(this, root, whatToShow, filter);
     }
-    return _blink.BlinkDocument.createNodeIterator_Callback_Node(this, root);
+    return _blink.BlinkDocument.createNodeIterator_Callback_1(this, root);
   }
 
   @DomName('Document.createRange')
@@ -8550,34 +8669,34 @@
 
   @DomName('Document.createTextNode')
   @DocsEditable()
-  Text _createTextNode(String data) => _blink.BlinkDocument.createTextNode_Callback_DOMString(this, data);
+  Text _createTextNode(String data) => _blink.BlinkDocument.createTextNode_Callback_1(this, data);
 
   @DomName('Document.createTouch')
   @DocsEditable()
   // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
   @Experimental()
-  Touch _createTouch(Window window, EventTarget target, int identifier, num pageX, num pageY, num screenX, num screenY, num webkitRadiusX, num webkitRadiusY, num webkitRotationAngle, num webkitForce) => _blink.BlinkDocument.createTouch_Callback_Window_EventTarget_long_double_double_double_double_double_double_float_float(this, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
+  Touch _createTouch(Window window, EventTarget target, int identifier, num pageX, num pageY, num screenX, num screenY, num webkitRadiusX, num webkitRadiusY, num webkitRotationAngle, num webkitForce) => _blink.BlinkDocument.createTouch_Callback_11(this, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
 
   @DomName('Document.createTouchList')
   @DocsEditable()
   // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
   @Experimental()
-  TouchList _createTouchList(Touch touches) => _blink.BlinkDocument.createTouchList_Callback_Touch(this, touches);
+  TouchList _createTouchList(Touch touches) => _blink.BlinkDocument.createTouchList_Callback_1(this, touches);
 
   TreeWalker _createTreeWalker(Node root, [int whatToShow, NodeFilter filter]) {
     if (whatToShow != null) {
-      return _blink.BlinkDocument.createTreeWalker_Callback_Node_ul_NodeFilter(this, root, whatToShow, filter);
+      return _blink.BlinkDocument.createTreeWalker_Callback_3(this, root, whatToShow, filter);
     }
-    return _blink.BlinkDocument.createTreeWalker_Callback_Node(this, root);
+    return _blink.BlinkDocument.createTreeWalker_Callback_1(this, root);
   }
 
   @DomName('Document.elementFromPoint')
   @DocsEditable()
-  Element _elementFromPoint(int x, int y) => _blink.BlinkDocument.elementFromPoint_Callback_long_long(this, x, y);
+  Element _elementFromPoint(int x, int y) => _blink.BlinkDocument.elementFromPoint_Callback_2(this, x, y);
 
   @DomName('Document.execCommand')
   @DocsEditable()
-  bool execCommand(String command, bool userInterface, String value) => _blink.BlinkDocument.execCommand_Callback_DOMString_boolean_DOMString(this, command, userInterface, value);
+  bool execCommand(String command, bool userInterface, String value) => _blink.BlinkDocument.execCommand_Callback_3(this, command, userInterface, value);
 
   @DomName('Document.exitFullscreen')
   @DocsEditable()
@@ -8593,50 +8712,50 @@
   @DocsEditable()
   // https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariCSSRef/Articles/Functions.html
   @Experimental() // non-standard
-  Object _getCssCanvasContext(String contextId, String name, int width, int height) => _blink.BlinkDocument.getCSSCanvasContext_Callback_DOMString_DOMString_long_long(this, contextId, name, width, height);
+  Object _getCssCanvasContext(String contextId, String name, int width, int height) => _blink.BlinkDocument.getCSSCanvasContext_Callback_4(this, contextId, name, width, height);
 
   @DomName('Document.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkDocument.getElementById_Callback_DOMString(this, elementId);
+  Element getElementById(String elementId) => _blink.BlinkDocument.getElementById_Callback_1(this, elementId);
 
   @DomName('Document.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String classNames) => _blink.BlinkDocument.getElementsByClassName_Callback_DOMString(this, classNames);
+  List<Node> getElementsByClassName(String classNames) => _blink.BlinkDocument.getElementsByClassName_Callback_1(this, classNames);
 
   @DomName('Document.getElementsByName')
   @DocsEditable()
-  List<Node> getElementsByName(String elementName) => _blink.BlinkDocument.getElementsByName_Callback_DOMString(this, elementName);
+  List<Node> getElementsByName(String elementName) => _blink.BlinkDocument.getElementsByName_Callback_1(this, elementName);
 
   @DomName('Document.getElementsByTagName')
   @DocsEditable()
-  List<Node> getElementsByTagName(String localName) => _blink.BlinkDocument.getElementsByTagName_Callback_DOMString(this, localName);
+  List<Node> getElementsByTagName(String localName) => _blink.BlinkDocument.getElementsByTagName_Callback_1(this, localName);
 
   Node importNode(Node node, [bool deep]) {
     if (deep != null) {
-      return _blink.BlinkDocument.importNode_Callback_Node_boolean(this, node, deep);
+      return _blink.BlinkDocument.importNode_Callback_2(this, node, deep);
     }
-    return _blink.BlinkDocument.importNode_Callback_Node(this, node);
+    return _blink.BlinkDocument.importNode_Callback_1(this, node);
   }
 
   @DomName('Document.queryCommandEnabled')
   @DocsEditable()
-  bool queryCommandEnabled(String command) => _blink.BlinkDocument.queryCommandEnabled_Callback_DOMString(this, command);
+  bool queryCommandEnabled(String command) => _blink.BlinkDocument.queryCommandEnabled_Callback_1(this, command);
 
   @DomName('Document.queryCommandIndeterm')
   @DocsEditable()
-  bool queryCommandIndeterm(String command) => _blink.BlinkDocument.queryCommandIndeterm_Callback_DOMString(this, command);
+  bool queryCommandIndeterm(String command) => _blink.BlinkDocument.queryCommandIndeterm_Callback_1(this, command);
 
   @DomName('Document.queryCommandState')
   @DocsEditable()
-  bool queryCommandState(String command) => _blink.BlinkDocument.queryCommandState_Callback_DOMString(this, command);
+  bool queryCommandState(String command) => _blink.BlinkDocument.queryCommandState_Callback_1(this, command);
 
   @DomName('Document.queryCommandSupported')
   @DocsEditable()
-  bool queryCommandSupported(String command) => _blink.BlinkDocument.queryCommandSupported_Callback_DOMString(this, command);
+  bool queryCommandSupported(String command) => _blink.BlinkDocument.queryCommandSupported_Callback_1(this, command);
 
   @DomName('Document.queryCommandValue')
   @DocsEditable()
-  String queryCommandValue(String command) => _blink.BlinkDocument.queryCommandValue_Callback_DOMString(this, command);
+  String queryCommandValue(String command) => _blink.BlinkDocument.queryCommandValue_Callback_1(this, command);
 
   @DomName('Document.webkitExitFullscreen')
   @DocsEditable()
@@ -8681,11 +8800,11 @@
    */
   @DomName('Document.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkDocument.querySelector_Callback_DOMString(this, selectors);
+  Element querySelector(String selectors) => _blink.BlinkDocument.querySelector_Callback_1(this, selectors);
 
   @DomName('Document.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocument.querySelectorAll_Callback_DOMString(this, selectors);
+  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocument.querySelectorAll_Callback_1(this, selectors);
 
   /// Stream of `abort` events handled by this [Document].
   @DomName('Document.onabort')
@@ -9230,7 +9349,7 @@
   @DomName('DocumentFragment.getElementById')
   @DocsEditable()
   @Experimental() // untriaged
-  Element getElementById(String elementId) => _blink.BlinkDocumentFragment.getElementById_Callback_DOMString(this, elementId);
+  Element getElementById(String elementId) => _blink.BlinkDocumentFragment.getElementById_Callback_1(this, elementId);
 
   @DomName('DocumentFragment.childElementCount')
   @DocsEditable()
@@ -9258,11 +9377,11 @@
    */
   @DomName('DocumentFragment.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkDocumentFragment.querySelector_Callback_DOMString(this, selectors);
+  Element querySelector(String selectors) => _blink.BlinkDocumentFragment.querySelector_Callback_1(this, selectors);
 
   @DomName('DocumentFragment.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocumentFragment.querySelectorAll_Callback_DOMString(this, selectors);
+  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocumentFragment.querySelectorAll_Callback_1(this, selectors);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9281,7 +9400,7 @@
   @DomName('DOMError.DOMError')
   @DocsEditable()
   factory DomError(String name, [String message]) {
-    return _blink.BlinkDOMError.constructorCallback_DOMString_DOMString(name, message);
+    return _blink.BlinkDOMError.constructorCallback_2(name, message);
   }
 
   @DomName('DOMError.message')
@@ -9356,19 +9475,19 @@
 
   @DomName('DOMImplementation.createDocument')
   @DocsEditable()
-  XmlDocument createDocument(String namespaceURI, String qualifiedName, _DocumentType doctype) => _blink.BlinkDOMImplementation.createDocument_Callback_DOMString_DOMString_DocumentType(this, namespaceURI, qualifiedName, doctype);
+  XmlDocument createDocument(String namespaceURI, String qualifiedName, _DocumentType doctype) => _blink.BlinkDOMImplementation.createDocument_Callback_3(this, namespaceURI, qualifiedName, doctype);
 
   @DomName('DOMImplementation.createDocumentType')
   @DocsEditable()
-  _DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) => _blink.BlinkDOMImplementation.createDocumentType_Callback_DOMString_DOMString_DOMString(this, qualifiedName, publicId, systemId);
+  _DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) => _blink.BlinkDOMImplementation.createDocumentType_Callback_3(this, qualifiedName, publicId, systemId);
 
   @DomName('DOMImplementation.createHTMLDocument')
   @DocsEditable()
-  HtmlDocument createHtmlDocument(String title) => _blink.BlinkDOMImplementation.createHTMLDocument_Callback_DOMString(this, title);
+  HtmlDocument createHtmlDocument(String title) => _blink.BlinkDOMImplementation.createHTMLDocument_Callback_1(this, title);
 
   @DomName('DOMImplementation.hasFeature')
   @DocsEditable()
-  bool hasFeature(String feature, String version) => _blink.BlinkDOMImplementation.hasFeature_Callback_DOMString_DOMString(this, feature, version);
+  bool hasFeature(String feature, String version) => _blink.BlinkDOMImplementation.hasFeature_Callback_2(this, feature, version);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9392,7 +9511,7 @@
       return _blink.BlinkDOMMatrix.constructorCallback();
     }
     if ((other is DomMatrixReadOnly || other == null)) {
-      return _blink.BlinkDOMMatrix.constructorCallback_DOMMatrixReadOnly(other);
+      return _blink.BlinkDOMMatrix.constructorCallback_1(other);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -9405,7 +9524,7 @@
   @DomName('DOMMatrix.a')
   @DocsEditable()
   @Experimental() // untriaged
-  void set a(num value) => _blink.BlinkDOMMatrix.a_Setter_double(this, value);
+  void set a(num value) => _blink.BlinkDOMMatrix.a_Setter(this, value);
 
   @DomName('DOMMatrix.b')
   @DocsEditable()
@@ -9415,7 +9534,7 @@
   @DomName('DOMMatrix.b')
   @DocsEditable()
   @Experimental() // untriaged
-  void set b(num value) => _blink.BlinkDOMMatrix.b_Setter_double(this, value);
+  void set b(num value) => _blink.BlinkDOMMatrix.b_Setter(this, value);
 
   @DomName('DOMMatrix.c')
   @DocsEditable()
@@ -9425,7 +9544,7 @@
   @DomName('DOMMatrix.c')
   @DocsEditable()
   @Experimental() // untriaged
-  void set c(num value) => _blink.BlinkDOMMatrix.c_Setter_double(this, value);
+  void set c(num value) => _blink.BlinkDOMMatrix.c_Setter(this, value);
 
   @DomName('DOMMatrix.d')
   @DocsEditable()
@@ -9435,7 +9554,7 @@
   @DomName('DOMMatrix.d')
   @DocsEditable()
   @Experimental() // untriaged
-  void set d(num value) => _blink.BlinkDOMMatrix.d_Setter_double(this, value);
+  void set d(num value) => _blink.BlinkDOMMatrix.d_Setter(this, value);
 
   @DomName('DOMMatrix.e')
   @DocsEditable()
@@ -9445,7 +9564,7 @@
   @DomName('DOMMatrix.e')
   @DocsEditable()
   @Experimental() // untriaged
-  void set e(num value) => _blink.BlinkDOMMatrix.e_Setter_double(this, value);
+  void set e(num value) => _blink.BlinkDOMMatrix.e_Setter(this, value);
 
   @DomName('DOMMatrix.f')
   @DocsEditable()
@@ -9455,7 +9574,7 @@
   @DomName('DOMMatrix.f')
   @DocsEditable()
   @Experimental() // untriaged
-  void set f(num value) => _blink.BlinkDOMMatrix.f_Setter_double(this, value);
+  void set f(num value) => _blink.BlinkDOMMatrix.f_Setter(this, value);
 
   @DomName('DOMMatrix.m11')
   @DocsEditable()
@@ -9465,7 +9584,7 @@
   @DomName('DOMMatrix.m11')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m11(num value) => _blink.BlinkDOMMatrix.m11_Setter_double(this, value);
+  void set m11(num value) => _blink.BlinkDOMMatrix.m11_Setter(this, value);
 
   @DomName('DOMMatrix.m12')
   @DocsEditable()
@@ -9475,7 +9594,7 @@
   @DomName('DOMMatrix.m12')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m12(num value) => _blink.BlinkDOMMatrix.m12_Setter_double(this, value);
+  void set m12(num value) => _blink.BlinkDOMMatrix.m12_Setter(this, value);
 
   @DomName('DOMMatrix.m13')
   @DocsEditable()
@@ -9485,7 +9604,7 @@
   @DomName('DOMMatrix.m13')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m13(num value) => _blink.BlinkDOMMatrix.m13_Setter_double(this, value);
+  void set m13(num value) => _blink.BlinkDOMMatrix.m13_Setter(this, value);
 
   @DomName('DOMMatrix.m14')
   @DocsEditable()
@@ -9495,7 +9614,7 @@
   @DomName('DOMMatrix.m14')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m14(num value) => _blink.BlinkDOMMatrix.m14_Setter_double(this, value);
+  void set m14(num value) => _blink.BlinkDOMMatrix.m14_Setter(this, value);
 
   @DomName('DOMMatrix.m21')
   @DocsEditable()
@@ -9505,7 +9624,7 @@
   @DomName('DOMMatrix.m21')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m21(num value) => _blink.BlinkDOMMatrix.m21_Setter_double(this, value);
+  void set m21(num value) => _blink.BlinkDOMMatrix.m21_Setter(this, value);
 
   @DomName('DOMMatrix.m22')
   @DocsEditable()
@@ -9515,7 +9634,7 @@
   @DomName('DOMMatrix.m22')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m22(num value) => _blink.BlinkDOMMatrix.m22_Setter_double(this, value);
+  void set m22(num value) => _blink.BlinkDOMMatrix.m22_Setter(this, value);
 
   @DomName('DOMMatrix.m23')
   @DocsEditable()
@@ -9525,7 +9644,7 @@
   @DomName('DOMMatrix.m23')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m23(num value) => _blink.BlinkDOMMatrix.m23_Setter_double(this, value);
+  void set m23(num value) => _blink.BlinkDOMMatrix.m23_Setter(this, value);
 
   @DomName('DOMMatrix.m24')
   @DocsEditable()
@@ -9535,7 +9654,7 @@
   @DomName('DOMMatrix.m24')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m24(num value) => _blink.BlinkDOMMatrix.m24_Setter_double(this, value);
+  void set m24(num value) => _blink.BlinkDOMMatrix.m24_Setter(this, value);
 
   @DomName('DOMMatrix.m31')
   @DocsEditable()
@@ -9545,7 +9664,7 @@
   @DomName('DOMMatrix.m31')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m31(num value) => _blink.BlinkDOMMatrix.m31_Setter_double(this, value);
+  void set m31(num value) => _blink.BlinkDOMMatrix.m31_Setter(this, value);
 
   @DomName('DOMMatrix.m32')
   @DocsEditable()
@@ -9555,7 +9674,7 @@
   @DomName('DOMMatrix.m32')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m32(num value) => _blink.BlinkDOMMatrix.m32_Setter_double(this, value);
+  void set m32(num value) => _blink.BlinkDOMMatrix.m32_Setter(this, value);
 
   @DomName('DOMMatrix.m33')
   @DocsEditable()
@@ -9565,7 +9684,7 @@
   @DomName('DOMMatrix.m33')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m33(num value) => _blink.BlinkDOMMatrix.m33_Setter_double(this, value);
+  void set m33(num value) => _blink.BlinkDOMMatrix.m33_Setter(this, value);
 
   @DomName('DOMMatrix.m34')
   @DocsEditable()
@@ -9575,7 +9694,7 @@
   @DomName('DOMMatrix.m34')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m34(num value) => _blink.BlinkDOMMatrix.m34_Setter_double(this, value);
+  void set m34(num value) => _blink.BlinkDOMMatrix.m34_Setter(this, value);
 
   @DomName('DOMMatrix.m41')
   @DocsEditable()
@@ -9585,7 +9704,7 @@
   @DomName('DOMMatrix.m41')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m41(num value) => _blink.BlinkDOMMatrix.m41_Setter_double(this, value);
+  void set m41(num value) => _blink.BlinkDOMMatrix.m41_Setter(this, value);
 
   @DomName('DOMMatrix.m42')
   @DocsEditable()
@@ -9595,7 +9714,7 @@
   @DomName('DOMMatrix.m42')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m42(num value) => _blink.BlinkDOMMatrix.m42_Setter_double(this, value);
+  void set m42(num value) => _blink.BlinkDOMMatrix.m42_Setter(this, value);
 
   @DomName('DOMMatrix.m43')
   @DocsEditable()
@@ -9605,7 +9724,7 @@
   @DomName('DOMMatrix.m43')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m43(num value) => _blink.BlinkDOMMatrix.m43_Setter_double(this, value);
+  void set m43(num value) => _blink.BlinkDOMMatrix.m43_Setter(this, value);
 
   @DomName('DOMMatrix.m44')
   @DocsEditable()
@@ -9615,7 +9734,7 @@
   @DomName('DOMMatrix.m44')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m44(num value) => _blink.BlinkDOMMatrix.m44_Setter_double(this, value);
+  void set m44(num value) => _blink.BlinkDOMMatrix.m44_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9774,7 +9893,7 @@
 
   @DomName('DOMParser.parseFromString')
   @DocsEditable()
-  Document parseFromString(String str, String contentType) => _blink.BlinkDOMParser.parseFromString_Callback_DOMString_DOMString(this, str, contentType);
+  Document parseFromString(String str, String contentType) => _blink.BlinkDOMParser.parseFromString_Callback_2(this, str, contentType);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9798,16 +9917,16 @@
       return _blink.BlinkDOMPoint.constructorCallback();
     }
     if ((point_OR_x is Map || point_OR_x == null) && y == null && z == null && w == null) {
-      return _blink.BlinkDOMPoint.constructorCallback_Dictionary(point_OR_x);
+      return _blink.BlinkDOMPoint.constructorCallback_1(point_OR_x);
     }
     if ((y is num || y == null) && (point_OR_x is num || point_OR_x == null) && z == null && w == null) {
-      return _blink.BlinkDOMPoint.constructorCallback_double_double(point_OR_x, y);
+      return _blink.BlinkDOMPoint.constructorCallback_2(point_OR_x, y);
     }
     if ((z is num || z == null) && (y is num || y == null) && (point_OR_x is num || point_OR_x == null) && w == null) {
-      return _blink.BlinkDOMPoint.constructorCallback_double_double_double(point_OR_x, y, z);
+      return _blink.BlinkDOMPoint.constructorCallback_3(point_OR_x, y, z);
     }
     if ((w is num || w == null) && (z is num || z == null) && (y is num || y == null) && (point_OR_x is num || point_OR_x == null)) {
-      return _blink.BlinkDOMPoint.constructorCallback_double_double_double_double(point_OR_x, y, z, w);
+      return _blink.BlinkDOMPoint.constructorCallback_4(point_OR_x, y, z, w);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -9820,7 +9939,7 @@
   @DomName('DOMPoint.w')
   @DocsEditable()
   @Experimental() // untriaged
-  void set w(num value) => _blink.BlinkDOMPoint.w_Setter_double(this, value);
+  void set w(num value) => _blink.BlinkDOMPoint.w_Setter(this, value);
 
   @DomName('DOMPoint.x')
   @DocsEditable()
@@ -9830,7 +9949,7 @@
   @DomName('DOMPoint.x')
   @DocsEditable()
   @Experimental() // untriaged
-  void set x(num value) => _blink.BlinkDOMPoint.x_Setter_double(this, value);
+  void set x(num value) => _blink.BlinkDOMPoint.x_Setter(this, value);
 
   @DomName('DOMPoint.y')
   @DocsEditable()
@@ -9840,7 +9959,7 @@
   @DomName('DOMPoint.y')
   @DocsEditable()
   @Experimental() // untriaged
-  void set y(num value) => _blink.BlinkDOMPoint.y_Setter_double(this, value);
+  void set y(num value) => _blink.BlinkDOMPoint.y_Setter(this, value);
 
   @DomName('DOMPoint.z')
   @DocsEditable()
@@ -9850,7 +9969,7 @@
   @DomName('DOMPoint.z')
   @DocsEditable()
   @Experimental() // untriaged
-  void set z(num value) => _blink.BlinkDOMPoint.z_Setter_double(this, value);
+  void set z(num value) => _blink.BlinkDOMPoint.z_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9870,7 +9989,7 @@
   @DomName('DOMPointReadOnly.DOMPointReadOnly')
   @DocsEditable()
   factory DomPointReadOnly(num x, num y, num z, num w) {
-    return _blink.BlinkDOMPointReadOnly.constructorCallback_double_double_double_double(x, y, z, w);
+    return _blink.BlinkDOMPointReadOnly.constructorCallback_4(x, y, z, w);
   }
 
   @DomName('DOMPointReadOnly.w')
@@ -9999,7 +10118,7 @@
   @DomName('DOMRectReadOnly.DOMRectReadOnly')
   @DocsEditable()
   factory DomRectReadOnly(num x, num y, num width, num height) {
-    return _blink.BlinkDOMRectReadOnly.constructorCallback_double_double_double_double(x, y, width, height);
+    return _blink.BlinkDOMRectReadOnly.constructorCallback_4(x, y, width, height);
   }
 
   @DomName('DOMRectReadOnly.bottom')
@@ -10062,11 +10181,11 @@
 
   @DomName('DOMSettableTokenList.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkDOMSettableTokenList.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkDOMSettableTokenList.value_Setter(this, value);
 
   @DomName('DOMSettableTokenList.__getter__')
   @DocsEditable()
-  String __getter__(int index) => _blink.BlinkDOMSettableTokenList.$__getter___Callback_ul(this, index);
+  String __getter__(int index) => _blink.BlinkDOMSettableTokenList.$__getter___Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10089,10 +10208,10 @@
   String operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkDOMStringList.item_Callback_ul(this, index);
+    return _blink.BlinkDOMStringList.item_Callback_1(this, index);
   }
 
-  String _nativeIndexedGetter(int index) => _blink.BlinkDOMStringList.item_Callback_ul(this, index);
+  String _nativeIndexedGetter(int index) => _blink.BlinkDOMStringList.item_Callback_1(this, index);
 
   void operator[]=(int index, String value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -10134,11 +10253,11 @@
 
   @DomName('DOMStringList.contains')
   @DocsEditable()
-  bool contains(String string) => _blink.BlinkDOMStringList.contains_Callback_DOMString(this, string);
+  bool contains(String string) => _blink.BlinkDOMStringList.contains_Callback_1(this, string);
 
   @DomName('DOMStringList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkDOMStringList.item_Callback_ul(this, index);
+  String item(int index) => _blink.BlinkDOMStringList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10156,31 +10275,31 @@
 
   bool __delete__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$__delete___Callback_ul(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__delete___Callback_1(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$__delete___Callback_DOMString(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__delete___Callback_1(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   String __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$__getter___Callback_ul(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__getter___Callback_1(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$__getter___Callback_DOMString(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__getter___Callback_1(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void __setter__(index_OR_name, String value) {
     if ((value is String || value == null) && (index_OR_name is int || index_OR_name == null)) {
-      _blink.BlinkDOMStringMap.$__setter___Callback_ul_DOMString(this, index_OR_name, value);
+      _blink.BlinkDOMStringMap.$__setter___Callback_2(this, index_OR_name, value);
       return;
     }
     if ((value is String || value == null) && (index_OR_name is String || index_OR_name == null)) {
-      _blink.BlinkDOMStringMap.$__setter___Callback_DOMString_DOMString(this, index_OR_name, value);
+      _blink.BlinkDOMStringMap.$__setter___Callback_2(this, index_OR_name, value);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -10207,26 +10326,26 @@
   @DomName('DOMTokenList.add')
   @DocsEditable()
   @Experimental() // untriaged
-  void add(String tokens) => _blink.BlinkDOMTokenList.add_Callback_DOMString(this, tokens);
+  void add(String tokens) => _blink.BlinkDOMTokenList.add_Callback_1(this, tokens);
 
   @DomName('DOMTokenList.contains')
   @DocsEditable()
-  bool contains(String token) => _blink.BlinkDOMTokenList.contains_Callback_DOMString(this, token);
+  bool contains(String token) => _blink.BlinkDOMTokenList.contains_Callback_1(this, token);
 
   @DomName('DOMTokenList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkDOMTokenList.item_Callback_ul(this, index);
+  String item(int index) => _blink.BlinkDOMTokenList.item_Callback_1(this, index);
 
   @DomName('DOMTokenList.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(String tokens) => _blink.BlinkDOMTokenList.remove_Callback_DOMString(this, tokens);
+  void remove(String tokens) => _blink.BlinkDOMTokenList.remove_Callback_1(this, tokens);
 
   bool toggle(String token, [bool force]) {
     if (force != null) {
-      return _blink.BlinkDOMTokenList.toggle_Callback_DOMString_boolean(this, token, force);
+      return _blink.BlinkDOMTokenList.toggle_Callback_2(this, token, force);
     }
-    return _blink.BlinkDOMTokenList.toggle_Callback_DOMString(this, token);
+    return _blink.BlinkDOMTokenList.toggle_Callback_1(this, token);
   }
 
 }
@@ -12327,7 +12446,7 @@
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  void set scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter_long(this, value.round());
+  void set scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter(this, value.round());
 
   @DomName('Element.scrollTop')
   @DocsEditable()
@@ -12335,7 +12454,7 @@
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  void set scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter_long(this, value.round());
+  void set scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter(this, value.round());
 
   @DomName('Element.scrollWidth')
   @DocsEditable()
@@ -13046,7 +13165,7 @@
 
   @DomName('Element.className')
   @DocsEditable()
-  void set className(String value) => _blink.BlinkElement.className_Setter_DOMString(this, value);
+  void set className(String value) => _blink.BlinkElement.className_Setter(this, value);
 
   @DomName('Element.clientHeight')
   @DocsEditable()
@@ -13070,7 +13189,7 @@
 
   @DomName('Element.id')
   @DocsEditable()
-  void set id(String value) => _blink.BlinkElement.id_Setter_DOMString(this, value);
+  void set id(String value) => _blink.BlinkElement.id_Setter(this, value);
 
   @DomName('Element.innerHTML')
   @DocsEditable()
@@ -13078,7 +13197,7 @@
 
   @DomName('Element.innerHTML')
   @DocsEditable()
-  void set _innerHtml(String value) => _blink.BlinkElement.innerHTML_Setter_DOMString(this, value);
+  void set _innerHtml(String value) => _blink.BlinkElement.innerHTML_Setter(this, value);
 
   @DomName('Element.localName')
   @DocsEditable()
@@ -13124,7 +13243,7 @@
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  void set _scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter_long(this, value);
+  void set _scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter(this, value);
 
   @DomName('Element.scrollTop')
   @DocsEditable()
@@ -13132,7 +13251,7 @@
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  void set _scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter_long(this, value);
+  void set _scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter(this, value);
 
   @DomName('Element.scrollWidth')
   @DocsEditable()
@@ -13155,7 +13274,7 @@
   @DomName('Element.animate')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimationPlayer animate(Object effect, [Object timing]) => _blink.BlinkElement.animate_Callback_object_object(this, effect, timing);
+  AnimationPlayer animate(Object effect, [Object timing]) => _blink.BlinkElement.animate_Callback_2(this, effect, timing);
 
   @DomName('Element.blur')
   @DocsEditable()
@@ -13180,12 +13299,12 @@
   @DomName('Element.getAttribute')
   @DocsEditable()
   @Experimental() // untriaged
-  String getAttribute(String name) => _blink.BlinkElement.getAttribute_Callback_DOMString(this, name);
+  String getAttribute(String name) => _blink.BlinkElement.getAttribute_Callback_1(this, name);
 
   @DomName('Element.getAttributeNS')
   @DocsEditable()
   @Experimental() // untriaged
-  String getAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.getAttributeNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
+  String getAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.getAttributeNS_Callback_2(this, namespaceURI, localName);
 
   /**
    * Returns the smallest bounding rectangle that encompasses this element's
@@ -13249,47 +13368,47 @@
    */
   @DomName('Element.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String classNames) => _blink.BlinkElement.getElementsByClassName_Callback_DOMString(this, classNames);
+  List<Node> getElementsByClassName(String classNames) => _blink.BlinkElement.getElementsByClassName_Callback_1(this, classNames);
 
   @DomName('Element.getElementsByTagName')
   @DocsEditable()
-  List<Node> _getElementsByTagName(String name) => _blink.BlinkElement.getElementsByTagName_Callback_DOMString(this, name);
+  List<Node> _getElementsByTagName(String name) => _blink.BlinkElement.getElementsByTagName_Callback_1(this, name);
 
   @DomName('Element.hasAttribute')
   @DocsEditable()
-  bool _hasAttribute(String name) => _blink.BlinkElement.hasAttribute_Callback_DOMString(this, name);
+  bool _hasAttribute(String name) => _blink.BlinkElement.hasAttribute_Callback_1(this, name);
 
   @DomName('Element.hasAttributeNS')
   @DocsEditable()
-  bool _hasAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.hasAttributeNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
+  bool _hasAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.hasAttributeNS_Callback_2(this, namespaceURI, localName);
 
   @DomName('Element.insertAdjacentElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Element insertAdjacentElement(String where, Element element) => _blink.BlinkElement.insertAdjacentElement_Callback_DOMString_Element(this, where, element);
+  Element insertAdjacentElement(String where, Element element) => _blink.BlinkElement.insertAdjacentElement_Callback_2(this, where, element);
 
   @DomName('Element.insertAdjacentHTML')
   @DocsEditable()
   @Experimental() // untriaged
-  void insertAdjacentHtml(String where, String html) => _blink.BlinkElement.insertAdjacentHTML_Callback_DOMString_DOMString(this, where, html);
+  void insertAdjacentHtml(String where, String html) => _blink.BlinkElement.insertAdjacentHTML_Callback_2(this, where, html);
 
   @DomName('Element.insertAdjacentText')
   @DocsEditable()
   @Experimental() // untriaged
-  void insertAdjacentText(String where, String text) => _blink.BlinkElement.insertAdjacentText_Callback_DOMString_DOMString(this, where, text);
+  void insertAdjacentText(String where, String text) => _blink.BlinkElement.insertAdjacentText_Callback_2(this, where, text);
 
   @DomName('Element.matches')
   @DocsEditable()
   @Experimental() // untriaged
-  bool matches(String selectors) => _blink.BlinkElement.matches_Callback_DOMString(this, selectors);
+  bool matches(String selectors) => _blink.BlinkElement.matches_Callback_1(this, selectors);
 
   @DomName('Element.removeAttribute')
   @DocsEditable()
-  void _removeAttribute(String name) => _blink.BlinkElement.removeAttribute_Callback_DOMString(this, name);
+  void _removeAttribute(String name) => _blink.BlinkElement.removeAttribute_Callback_1(this, name);
 
   @DomName('Element.removeAttributeNS')
   @DocsEditable()
-  void _removeAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.removeAttributeNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
+  void _removeAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.removeAttributeNS_Callback_2(this, namespaceURI, localName);
 
   @DomName('Element.requestFullscreen')
   @DocsEditable()
@@ -13303,7 +13422,7 @@
 
   void _scrollIntoView([bool alignWithTop]) {
     if (alignWithTop != null) {
-      _blink.BlinkElement.scrollIntoView_Callback_boolean(this, alignWithTop);
+      _blink.BlinkElement.scrollIntoView_Callback_1(this, alignWithTop);
       return;
     }
     _blink.BlinkElement.scrollIntoView_Callback(this);
@@ -13312,7 +13431,7 @@
 
   void _scrollIntoViewIfNeeded([bool centerIfNeeded]) {
     if (centerIfNeeded != null) {
-      _blink.BlinkElement.scrollIntoViewIfNeeded_Callback_boolean(this, centerIfNeeded);
+      _blink.BlinkElement.scrollIntoViewIfNeeded_Callback_1(this, centerIfNeeded);
       return;
     }
     _blink.BlinkElement.scrollIntoViewIfNeeded_Callback(this);
@@ -13321,11 +13440,11 @@
 
   @DomName('Element.setAttribute')
   @DocsEditable()
-  void setAttribute(String name, String value) => _blink.BlinkElement.setAttribute_Callback_DOMString_DOMString(this, name, value);
+  void setAttribute(String name, String value) => _blink.BlinkElement.setAttribute_Callback_2(this, name, value);
 
   @DomName('Element.setAttributeNS')
   @DocsEditable()
-  void setAttributeNS(String namespaceURI, String qualifiedName, String value) => _blink.BlinkElement.setAttributeNS_Callback_DOMString_DOMString_DOMString(this, namespaceURI, qualifiedName, value);
+  void setAttributeNS(String namespaceURI, String qualifiedName, String value) => _blink.BlinkElement.setAttributeNS_Callback_3(this, namespaceURI, qualifiedName, value);
 
   @DomName('Element.nextElementSibling')
   @DocsEditable()
@@ -13373,11 +13492,11 @@
    */
   @DomName('Element.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkElement.querySelector_Callback_DOMString(this, selectors);
+  Element querySelector(String selectors) => _blink.BlinkElement.querySelector_Callback_1(this, selectors);
 
   @DomName('Element.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkElement.querySelectorAll_Callback_DOMString(this, selectors);
+  List<Node> _querySelectorAll(String selectors) => _blink.BlinkElement.querySelectorAll_Callback_1(this, selectors);
 
   /// Stream of `abort` events handled by this [Element].
   @DomName('Element.onabort')
@@ -13907,7 +14026,7 @@
 
   @DomName('HTMLEmbedElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLEmbedElement.height_Setter_DOMString(this, value);
+  void set height(String value) => _blink.BlinkHTMLEmbedElement.height_Setter(this, value);
 
   @DomName('HTMLEmbedElement.integrity')
   @DocsEditable()
@@ -13917,7 +14036,7 @@
   @DomName('HTMLEmbedElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLEmbedElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLEmbedElement.integrity_Setter(this, value);
 
   @DomName('HTMLEmbedElement.name')
   @DocsEditable()
@@ -13925,7 +14044,7 @@
 
   @DomName('HTMLEmbedElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLEmbedElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLEmbedElement.name_Setter(this, value);
 
   @DomName('HTMLEmbedElement.src')
   @DocsEditable()
@@ -13933,7 +14052,7 @@
 
   @DomName('HTMLEmbedElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLEmbedElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLEmbedElement.src_Setter(this, value);
 
   @DomName('HTMLEmbedElement.type')
   @DocsEditable()
@@ -13941,7 +14060,7 @@
 
   @DomName('HTMLEmbedElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLEmbedElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLEmbedElement.type_Setter(this, value);
 
   @DomName('HTMLEmbedElement.width')
   @DocsEditable()
@@ -13949,15 +14068,15 @@
 
   @DomName('HTMLEmbedElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLEmbedElement.width_Setter_DOMString(this, value);
+  void set width(String value) => _blink.BlinkHTMLEmbedElement.width_Setter(this, value);
 
   @DomName('HTMLEmbedElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) => _blink.BlinkHTMLEmbedElement.$__getter___Callback_ul(this, index_OR_name);
+  bool __getter__(index_OR_name) => _blink.BlinkHTMLEmbedElement.$__getter___Callback_1(this, index_OR_name);
 
   @DomName('HTMLEmbedElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLEmbedElement.$__setter___Callback_ul_Node(this, index_OR_name, value);
+  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLEmbedElement.$__setter___Callback_2(this, index_OR_name, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14007,11 +14126,19 @@
   String get name => _blink.BlinkEntry.name_Getter(this);
 
   void _copyTo(DirectoryEntry parent, {String name, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
-    if (name != null) {
-      _blink.BlinkEntry.copyTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(this, parent, name, successCallback, errorCallback);
+    if (errorCallback != null) {
+      _blink.BlinkEntry.copyTo_Callback_4(this, parent, name, successCallback, errorCallback);
       return;
     }
-    _blink.BlinkEntry.copyTo_Callback_DirectoryEntry(this, parent);
+    if (successCallback != null) {
+      _blink.BlinkEntry.copyTo_Callback_3(this, parent, name, successCallback);
+      return;
+    }
+    if (name != null) {
+      _blink.BlinkEntry.copyTo_Callback_2(this, parent, name);
+      return;
+    }
+    _blink.BlinkEntry.copyTo_Callback_1(this, parent);
     return;
   }
 
@@ -14023,9 +14150,14 @@
     return completer.future;
   }
 
-  @DomName('Entry.getMetadata')
-  @DocsEditable()
-  void _getMetadata(MetadataCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkEntry.getMetadata_Callback_MetadataCallback_ErrorCallback(this, successCallback, errorCallback);
+  void _getMetadata(MetadataCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkEntry.getMetadata_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkEntry.getMetadata_Callback_1(this, successCallback);
+    return;
+  }
 
   Future<Metadata> getMetadata() {
     var completer = new Completer<Metadata>();
@@ -14035,9 +14167,18 @@
     return completer.future;
   }
 
-  @DomName('Entry.getParent')
-  @DocsEditable()
-  void _getParent([_EntryCallback successCallback, _ErrorCallback errorCallback]) => _blink.BlinkEntry.getParent_Callback_EntryCallback_ErrorCallback(this, successCallback, errorCallback);
+  void _getParent([_EntryCallback successCallback, _ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkEntry.getParent_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    if (successCallback != null) {
+      _blink.BlinkEntry.getParent_Callback_1(this, successCallback);
+      return;
+    }
+    _blink.BlinkEntry.getParent_Callback(this);
+    return;
+  }
 
   Future<Entry> getParent() {
     var completer = new Completer<Entry>();
@@ -14048,11 +14189,19 @@
   }
 
   void _moveTo(DirectoryEntry parent, {String name, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
-    if (name != null) {
-      _blink.BlinkEntry.moveTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(this, parent, name, successCallback, errorCallback);
+    if (errorCallback != null) {
+      _blink.BlinkEntry.moveTo_Callback_4(this, parent, name, successCallback, errorCallback);
       return;
     }
-    _blink.BlinkEntry.moveTo_Callback_DirectoryEntry(this, parent);
+    if (successCallback != null) {
+      _blink.BlinkEntry.moveTo_Callback_3(this, parent, name, successCallback);
+      return;
+    }
+    if (name != null) {
+      _blink.BlinkEntry.moveTo_Callback_2(this, parent, name);
+      return;
+    }
+    _blink.BlinkEntry.moveTo_Callback_1(this, parent);
     return;
   }
 
@@ -14064,9 +14213,14 @@
     return completer.future;
   }
 
-  @DomName('Entry.remove')
-  @DocsEditable()
-  void _remove(VoidCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkEntry.remove_Callback_VoidCallback_ErrorCallback(this, successCallback, errorCallback);
+  void _remove(VoidCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkEntry.remove_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkEntry.remove_Callback_1(this, successCallback);
+    return;
+  }
 
   Future remove() {
     var completer = new Completer();
@@ -14305,7 +14459,7 @@
 
   @DomName('Event.initEvent')
   @DocsEditable()
-  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) => _blink.BlinkEvent.initEvent_Callback_DOMString_boolean_boolean(this, eventTypeArg, canBubbleArg, cancelableArg);
+  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) => _blink.BlinkEvent.initEvent_Callback_3(this, eventTypeArg, canBubbleArg, cancelableArg);
 
   @DomName('Event.preventDefault')
   @DocsEditable()
@@ -14372,9 +14526,9 @@
   @DocsEditable()
   static EventSource _factoryEventSource(String url, [Map eventSourceInit]) {
     if (eventSourceInit != null) {
-      return _blink.BlinkEventSource.constructorCallback_DOMString_Dictionary(url, eventSourceInit);
+      return _blink.BlinkEventSource.constructorCallback_2(url, eventSourceInit);
     }
-    return _blink.BlinkEventSource.constructorCallback_DOMString(url);
+    return _blink.BlinkEventSource.constructorCallback_1(url);
   }
 
   @DomName('EventSource.CLOSED')
@@ -14546,12 +14700,16 @@
   factory EventTarget._() { throw new UnsupportedError("Not supported"); }
 
   void _addEventListener([String type, EventListener listener, bool useCapture]) {
+    if (useCapture != null) {
+      _blink.BlinkEventTarget.addEventListener_Callback_3(this, type, listener, useCapture);
+      return;
+    }
     if (listener != null) {
-      _blink.BlinkEventTarget.addEventListener_Callback_DOMString_EventListener_boolean(this, type, listener, useCapture);
+      _blink.BlinkEventTarget.addEventListener_Callback_2(this, type, listener);
       return;
     }
     if (type != null) {
-      _blink.BlinkEventTarget.addEventListener_Callback_DOMString(this, type);
+      _blink.BlinkEventTarget.addEventListener_Callback_1(this, type);
       return;
     }
     _blink.BlinkEventTarget.addEventListener_Callback(this);
@@ -14560,15 +14718,19 @@
 
   @DomName('EventTarget.dispatchEvent')
   @DocsEditable()
-  bool dispatchEvent(Event event) => _blink.BlinkEventTarget.dispatchEvent_Callback_Event(this, event);
+  bool dispatchEvent(Event event) => _blink.BlinkEventTarget.dispatchEvent_Callback_1(this, event);
 
   void _removeEventListener([String type, EventListener listener, bool useCapture]) {
+    if (useCapture != null) {
+      _blink.BlinkEventTarget.removeEventListener_Callback_3(this, type, listener, useCapture);
+      return;
+    }
     if (listener != null) {
-      _blink.BlinkEventTarget.removeEventListener_Callback_DOMString_EventListener_boolean(this, type, listener, useCapture);
+      _blink.BlinkEventTarget.removeEventListener_Callback_2(this, type, listener);
       return;
     }
     if (type != null) {
-      _blink.BlinkEventTarget.removeEventListener_Callback_DOMString(this, type);
+      _blink.BlinkEventTarget.removeEventListener_Callback_1(this, type);
       return;
     }
     _blink.BlinkEventTarget.removeEventListener_Callback(this);
@@ -14593,7 +14755,7 @@
   @DomName('FederatedCredential.FederatedCredential')
   @DocsEditable()
   factory FederatedCredential(String id, String name, String avatarURL, String federation) {
-    return _blink.BlinkFederatedCredential.constructorCallback_DOMString_DOMString_DOMString_DOMString(id, name, avatarURL, federation);
+    return _blink.BlinkFederatedCredential.constructorCallback_4(id, name, avatarURL, federation);
   }
 
   @DomName('FederatedCredential.federation')
@@ -14616,6 +14778,26 @@
   // To suppress missing implicit constructor warnings.
   factory FetchBodyStream._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('FetchBodyStream.asArrayBuffer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asArrayBuffer() => _blink.BlinkFetchBodyStream.asArrayBuffer_Callback(this);
+
+  @DomName('FetchBodyStream.asBlob')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asBlob() => _blink.BlinkFetchBodyStream.asBlob_Callback(this);
+
+  @DomName('FetchBodyStream.asJSON')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asJson() => _blink.BlinkFetchBodyStream.asJSON_Callback(this);
+
+  @DomName('FetchBodyStream.asText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future asText() => _blink.BlinkFetchBodyStream.asText_Callback(this);
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -14639,12 +14821,12 @@
   @DomName('FetchEvent.request')
   @DocsEditable()
   @Experimental() // untriaged
-  Request get request => _blink.BlinkFetchEvent.request_Getter(this);
+  _Request get request => _blink.BlinkFetchEvent.request_Getter(this);
 
   @DomName('FetchEvent.respondWith')
   @DocsEditable()
   @Experimental() // untriaged
-  void respondWith(Object value) => _blink.BlinkFetchEvent.respondWith_Callback_ScriptValue(this, value);
+  void respondWith(Object value) => _blink.BlinkFetchEvent.respondWith_Callback_1(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14677,7 +14859,7 @@
 
   @DomName('HTMLFieldSetElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLFieldSetElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLFieldSetElement.disabled_Setter(this, value);
 
   @DomName('HTMLFieldSetElement.elements')
   @DocsEditable()
@@ -14693,7 +14875,7 @@
 
   @DomName('HTMLFieldSetElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLFieldSetElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLFieldSetElement.name_Setter(this, value);
 
   @DomName('HTMLFieldSetElement.type')
   @DocsEditable()
@@ -14717,7 +14899,7 @@
 
   @DomName('HTMLFieldSetElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLFieldSetElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLFieldSetElement.setCustomValidity_Callback_1(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14781,9 +14963,14 @@
   // To suppress missing implicit constructor warnings.
   factory FileEntry._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('FileEntry.createWriter')
-  @DocsEditable()
-  void _createWriter(_FileWriterCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkFileEntry.createWriter_Callback_FileWriterCallback_ErrorCallback(this, successCallback, errorCallback);
+  void _createWriter(_FileWriterCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkFileEntry.createWriter_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkFileEntry.createWriter_Callback_1(this, successCallback);
+    return;
+  }
 
   Future<FileWriter> createWriter() {
     var completer = new Completer<FileWriter>();
@@ -14793,9 +14980,14 @@
     return completer.future;
   }
 
-  @DomName('FileEntry.file')
-  @DocsEditable()
-  void _file(_FileCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkFileEntry.file_Callback_FileCallback_ErrorCallback(this, successCallback, errorCallback);
+  void _file(_FileCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkFileEntry.file_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkFileEntry.file_Callback_1(this, successCallback);
+    return;
+  }
 
   Future<File> file() {
     var completer = new Completer<File>();
@@ -14894,10 +15086,10 @@
   File operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkFileList.item_Callback_ul(this, index);
+    return _blink.BlinkFileList.item_Callback_1(this, index);
   }
 
-  File _nativeIndexedGetter(int index) => _blink.BlinkFileList.item_Callback_ul(this, index);
+  File _nativeIndexedGetter(int index) => _blink.BlinkFileList.item_Callback_1(this, index);
 
   void operator[]=(int index, File value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -14939,7 +15131,7 @@
 
   @DomName('FileList.item')
   @DocsEditable()
-  File item(int index) => _blink.BlinkFileList.item_Callback_ul(this, index);
+  File item(int index) => _blink.BlinkFileList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
@@ -15060,18 +15252,18 @@
 
   @DomName('FileReader.readAsArrayBuffer')
   @DocsEditable()
-  void readAsArrayBuffer(Blob blob) => _blink.BlinkFileReader.readAsArrayBuffer_Callback_Blob(this, blob);
+  void readAsArrayBuffer(Blob blob) => _blink.BlinkFileReader.readAsArrayBuffer_Callback_1(this, blob);
 
   @DomName('FileReader.readAsDataURL')
   @DocsEditable()
-  void readAsDataUrl(Blob blob) => _blink.BlinkFileReader.readAsDataURL_Callback_Blob(this, blob);
+  void readAsDataUrl(Blob blob) => _blink.BlinkFileReader.readAsDataURL_Callback_1(this, blob);
 
   void readAsText(Blob blob, [String encoding]) {
     if (encoding != null) {
-      _blink.BlinkFileReader.readAsText_Callback_Blob_DOMString(this, blob, encoding);
+      _blink.BlinkFileReader.readAsText_Callback_2(this, blob, encoding);
       return;
     }
-    _blink.BlinkFileReader.readAsText_Callback_Blob(this, blob);
+    _blink.BlinkFileReader.readAsText_Callback_1(this, blob);
     return;
   }
 
@@ -15274,15 +15466,15 @@
 
   @DomName('FileWriter.seek')
   @DocsEditable()
-  void seek(int position) => _blink.BlinkFileWriter.seek_Callback_ll(this, position);
+  void seek(int position) => _blink.BlinkFileWriter.seek_Callback_1(this, position);
 
   @DomName('FileWriter.truncate')
   @DocsEditable()
-  void truncate(int size) => _blink.BlinkFileWriter.truncate_Callback_ll(this, size);
+  void truncate(int size) => _blink.BlinkFileWriter.truncate_Callback_1(this, size);
 
   @DomName('FileWriter.write')
   @DocsEditable()
-  void write(Blob data) => _blink.BlinkFileWriter.write_Callback_Blob(this, data);
+  void write(Blob data) => _blink.BlinkFileWriter.write_Callback_1(this, data);
 
   /// Stream of `abort` events handled by this [FileWriter].
   @DomName('FileWriter.onabort')
@@ -15362,22 +15554,22 @@
   @DocsEditable()
   factory FontFace(String family, source, [Map descriptors]) {
     if ((source is String || source == null) && (family is String || family == null) && descriptors == null) {
-      return _blink.BlinkFontFace.constructorCallback_DOMString_DOMString(family, source);
+      return _blink.BlinkFontFace.constructorCallback_2(family, source);
     }
     if ((descriptors is Map || descriptors == null) && (source is String || source == null) && (family is String || family == null)) {
-      return _blink.BlinkFontFace.constructorCallback_DOMString_DOMString_Dictionary(family, source, descriptors);
+      return _blink.BlinkFontFace.constructorCallback_3(family, source, descriptors);
     }
     if ((source is TypedData || source == null) && (family is String || family == null) && descriptors == null) {
-      return _blink.BlinkFontFace.constructorCallback_DOMString_ArrayBufferView(family, source);
+      return _blink.BlinkFontFace.constructorCallback_2(family, source);
     }
     if ((descriptors is Map || descriptors == null) && (source is TypedData || source == null) && (family is String || family == null)) {
-      return _blink.BlinkFontFace.constructorCallback_DOMString_ArrayBufferView_Dictionary(family, source, descriptors);
+      return _blink.BlinkFontFace.constructorCallback_3(family, source, descriptors);
     }
     if ((source is ByteBuffer || source == null) && (family is String || family == null) && descriptors == null) {
-      return _blink.BlinkFontFace.constructorCallback_DOMString_ArrayBuffer(family, source);
+      return _blink.BlinkFontFace.constructorCallback_2(family, source);
     }
     if ((descriptors is Map || descriptors == null) && (source is ByteBuffer || source == null) && (family is String || family == null)) {
-      return _blink.BlinkFontFace.constructorCallback_DOMString_ArrayBuffer_Dictionary(family, source, descriptors);
+      return _blink.BlinkFontFace.constructorCallback_3(family, source, descriptors);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -15390,7 +15582,7 @@
   @DomName('FontFace.family')
   @DocsEditable()
   @Experimental() // untriaged
-  void set family(String value) => _blink.BlinkFontFace.family_Setter_DOMString(this, value);
+  void set family(String value) => _blink.BlinkFontFace.family_Setter(this, value);
 
   @DomName('FontFace.featureSettings')
   @DocsEditable()
@@ -15400,7 +15592,12 @@
   @DomName('FontFace.featureSettings')
   @DocsEditable()
   @Experimental() // untriaged
-  void set featureSettings(String value) => _blink.BlinkFontFace.featureSettings_Setter_DOMString(this, value);
+  void set featureSettings(String value) => _blink.BlinkFontFace.featureSettings_Setter(this, value);
+
+  @DomName('FontFace.loaded')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future get loaded => _blink.BlinkFontFace.loaded_Getter(this);
 
   @DomName('FontFace.status')
   @DocsEditable()
@@ -15415,7 +15612,7 @@
   @DomName('FontFace.stretch')
   @DocsEditable()
   @Experimental() // untriaged
-  void set stretch(String value) => _blink.BlinkFontFace.stretch_Setter_DOMString(this, value);
+  void set stretch(String value) => _blink.BlinkFontFace.stretch_Setter(this, value);
 
   @DomName('FontFace.style')
   @DocsEditable()
@@ -15425,7 +15622,7 @@
   @DomName('FontFace.style')
   @DocsEditable()
   @Experimental() // untriaged
-  void set style(String value) => _blink.BlinkFontFace.style_Setter_DOMString(this, value);
+  void set style(String value) => _blink.BlinkFontFace.style_Setter(this, value);
 
   @DomName('FontFace.unicodeRange')
   @DocsEditable()
@@ -15435,7 +15632,7 @@
   @DomName('FontFace.unicodeRange')
   @DocsEditable()
   @Experimental() // untriaged
-  void set unicodeRange(String value) => _blink.BlinkFontFace.unicodeRange_Setter_DOMString(this, value);
+  void set unicodeRange(String value) => _blink.BlinkFontFace.unicodeRange_Setter(this, value);
 
   @DomName('FontFace.variant')
   @DocsEditable()
@@ -15445,7 +15642,7 @@
   @DomName('FontFace.variant')
   @DocsEditable()
   @Experimental() // untriaged
-  void set variant(String value) => _blink.BlinkFontFace.variant_Setter_DOMString(this, value);
+  void set variant(String value) => _blink.BlinkFontFace.variant_Setter(this, value);
 
   @DomName('FontFace.weight')
   @DocsEditable()
@@ -15455,7 +15652,12 @@
   @DomName('FontFace.weight')
   @DocsEditable()
   @Experimental() // untriaged
-  void set weight(String value) => _blink.BlinkFontFace.weight_Setter_DOMString(this, value);
+  void set weight(String value) => _blink.BlinkFontFace.weight_Setter(this, value);
+
+  @DomName('FontFace.load')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future load() => _blink.BlinkFontFace.load_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15485,12 +15687,12 @@
   @DomName('FontFaceSet.add')
   @DocsEditable()
   @Experimental() // untriaged
-  void add(FontFace fontFace) => _blink.BlinkFontFaceSet.add_Callback_FontFace(this, fontFace);
+  void add(FontFace fontFace) => _blink.BlinkFontFaceSet.add_Callback_1(this, fontFace);
 
   @DomName('FontFaceSet.check')
   @DocsEditable()
   @Experimental() // untriaged
-  bool check(String font, String text) => _blink.BlinkFontFaceSet.check_Callback_DOMString_DOMString(this, font, text);
+  bool check(String font, String text) => _blink.BlinkFontFaceSet.check_Callback_2(this, font, text);
 
   @DomName('FontFaceSet.clear')
   @DocsEditable()
@@ -15500,21 +15702,21 @@
   @DomName('FontFaceSet.delete')
   @DocsEditable()
   @Experimental() // untriaged
-  bool delete(FontFace fontFace) => _blink.BlinkFontFaceSet.delete_Callback_FontFace(this, fontFace);
+  bool delete(FontFace fontFace) => _blink.BlinkFontFaceSet.delete_Callback_1(this, fontFace);
 
   void forEach(FontFaceSetForEachCallback callback, [Object thisArg]) {
     if (thisArg != null) {
-      _blink.BlinkFontFaceSet.forEach_Callback_FontFaceSetForEachCallback_ScriptValue(this, callback, thisArg);
+      _blink.BlinkFontFaceSet.forEach_Callback_2(this, callback, thisArg);
       return;
     }
-    _blink.BlinkFontFaceSet.forEach_Callback_FontFaceSetForEachCallback(this, callback);
+    _blink.BlinkFontFaceSet.forEach_Callback_1(this, callback);
     return;
   }
 
   @DomName('FontFaceSet.has')
   @DocsEditable()
   @Experimental() // untriaged
-  bool has(FontFace fontFace) => _blink.BlinkFontFaceSet.has_Callback_FontFace(this, fontFace);
+  bool has(FontFace fontFace) => _blink.BlinkFontFaceSet.has_Callback_1(this, fontFace);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15569,18 +15771,18 @@
   factory FormData([FormElement form]) => _create(form);
 
   @DocsEditable()
-  static FormData _create(form) => _blink.BlinkFormData.constructorCallback_HTMLFormElement(form);
+  static FormData _create(form) => _blink.BlinkFormData.constructorCallback_1(form);
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
   @DomName('FormData.append')
   @DocsEditable()
-  void append(String name, String value) => _blink.BlinkFormData.append_Callback_DOMString_DOMString(this, name, value);
+  void append(String name, String value) => _blink.BlinkFormData.append_Callback_2(this, name, value);
 
   @DomName('FormData.appendBlob')
   @DocsEditable()
-  void appendBlob(String name, Blob value, [String filename]) => _blink.BlinkFormData.append_Callback_DOMString_Blob_DOMString(this, name, value, filename);
+  void appendBlob(String name, Blob value, [String filename]) => _blink.BlinkFormData.append_Callback_3(this, name, value, filename);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15612,7 +15814,7 @@
 
   @DomName('HTMLFormElement.acceptCharset')
   @DocsEditable()
-  void set acceptCharset(String value) => _blink.BlinkHTMLFormElement.acceptCharset_Setter_DOMString(this, value);
+  void set acceptCharset(String value) => _blink.BlinkHTMLFormElement.acceptCharset_Setter(this, value);
 
   @DomName('HTMLFormElement.action')
   @DocsEditable()
@@ -15620,7 +15822,7 @@
 
   @DomName('HTMLFormElement.action')
   @DocsEditable()
-  void set action(String value) => _blink.BlinkHTMLFormElement.action_Setter_DOMString(this, value);
+  void set action(String value) => _blink.BlinkHTMLFormElement.action_Setter(this, value);
 
   @DomName('HTMLFormElement.autocomplete')
   @DocsEditable()
@@ -15632,7 +15834,7 @@
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofilling-form-controls:-the-autocomplete-attribute
   @Experimental()
-  void set autocomplete(String value) => _blink.BlinkHTMLFormElement.autocomplete_Setter_DOMString(this, value);
+  void set autocomplete(String value) => _blink.BlinkHTMLFormElement.autocomplete_Setter(this, value);
 
   @DomName('HTMLFormElement.encoding')
   @DocsEditable()
@@ -15640,7 +15842,7 @@
 
   @DomName('HTMLFormElement.encoding')
   @DocsEditable()
-  void set encoding(String value) => _blink.BlinkHTMLFormElement.encoding_Setter_DOMString(this, value);
+  void set encoding(String value) => _blink.BlinkHTMLFormElement.encoding_Setter(this, value);
 
   @DomName('HTMLFormElement.enctype')
   @DocsEditable()
@@ -15648,7 +15850,7 @@
 
   @DomName('HTMLFormElement.enctype')
   @DocsEditable()
-  void set enctype(String value) => _blink.BlinkHTMLFormElement.enctype_Setter_DOMString(this, value);
+  void set enctype(String value) => _blink.BlinkHTMLFormElement.enctype_Setter(this, value);
 
   @DomName('HTMLFormElement.length')
   @DocsEditable()
@@ -15660,7 +15862,7 @@
 
   @DomName('HTMLFormElement.method')
   @DocsEditable()
-  void set method(String value) => _blink.BlinkHTMLFormElement.method_Setter_DOMString(this, value);
+  void set method(String value) => _blink.BlinkHTMLFormElement.method_Setter(this, value);
 
   @DomName('HTMLFormElement.name')
   @DocsEditable()
@@ -15668,7 +15870,7 @@
 
   @DomName('HTMLFormElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLFormElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLFormElement.name_Setter(this, value);
 
   @DomName('HTMLFormElement.noValidate')
   @DocsEditable()
@@ -15676,7 +15878,7 @@
 
   @DomName('HTMLFormElement.noValidate')
   @DocsEditable()
-  void set noValidate(bool value) => _blink.BlinkHTMLFormElement.noValidate_Setter_boolean(this, value);
+  void set noValidate(bool value) => _blink.BlinkHTMLFormElement.noValidate_Setter(this, value);
 
   @DomName('HTMLFormElement.target')
   @DocsEditable()
@@ -15684,14 +15886,14 @@
 
   @DomName('HTMLFormElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLFormElement.target_Setter_DOMString(this, value);
+  void set target(String value) => _blink.BlinkHTMLFormElement.target_Setter(this, value);
 
   Element __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkHTMLFormElement.$__getter___Callback_ul(this, index_OR_name);
+      return _blink.BlinkHTMLFormElement.$__getter___Callback_1(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkHTMLFormElement.$__getter___Callback_DOMString(this, index_OR_name);
+      return _blink.BlinkHTMLFormElement.$__getter___Callback_1(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -15704,7 +15906,7 @@
   @DocsEditable()
   // http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-October/037711.html
   @Experimental()
-  void requestAutocomplete(Map details) => _blink.BlinkHTMLFormElement.requestAutocomplete_Callback_Dictionary(this, details);
+  void requestAutocomplete(Map details) => _blink.BlinkHTMLFormElement.requestAutocomplete_Callback_1(this, details);
 
   @DomName('HTMLFormElement.reset')
   @DocsEditable()
@@ -15816,6 +16018,21 @@
   // To suppress missing implicit constructor warnings.
   factory Geofencing._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('Geofencing.getRegisteredRegions')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getRegisteredRegions() => _blink.BlinkGeofencing.getRegisteredRegions_Callback(this);
+
+  @DomName('Geofencing.registerRegion')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future registerRegion(GeofencingRegion region) => _blink.BlinkGeofencing.registerRegion_Callback_1(this, region);
+
+  @DomName('Geofencing.unregisterRegion')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future unregisterRegion(String regionId) => _blink.BlinkGeofencing.unregisterRegion_Callback_1(this, regionId);
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15922,15 +16139,30 @@
 
   @DomName('Geolocation.clearWatch')
   @DocsEditable()
-  void _clearWatch(int watchID) => _blink.BlinkGeolocation.clearWatch_Callback_long(this, watchID);
+  void _clearWatch(int watchID) => _blink.BlinkGeolocation.clearWatch_Callback_1(this, watchID);
 
-  @DomName('Geolocation.getCurrentPosition')
-  @DocsEditable()
-  void _getCurrentPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Map options]) => _blink.BlinkGeolocation.getCurrentPosition_Callback_PositionCallback_PositionErrorCallback_Dictionary(this, successCallback, errorCallback, options);
+  void _getCurrentPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Map options]) {
+    if (options != null) {
+      _blink.BlinkGeolocation.getCurrentPosition_Callback_3(this, successCallback, errorCallback, options);
+      return;
+    }
+    if (errorCallback != null) {
+      _blink.BlinkGeolocation.getCurrentPosition_Callback_2(this, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkGeolocation.getCurrentPosition_Callback_1(this, successCallback);
+    return;
+  }
 
-  @DomName('Geolocation.watchPosition')
-  @DocsEditable()
-  int _watchPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Map options]) => _blink.BlinkGeolocation.watchPosition_Callback_PositionCallback_PositionErrorCallback_Dictionary(this, successCallback, errorCallback, options);
+  int _watchPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Map options]) {
+    if (options != null) {
+      return _blink.BlinkGeolocation.watchPosition_Callback_3(this, successCallback, errorCallback, options);
+    }
+    if (errorCallback != null) {
+      return _blink.BlinkGeolocation.watchPosition_Callback_2(this, successCallback, errorCallback);
+    }
+    return _blink.BlinkGeolocation.watchPosition_Callback_1(this, successCallback);
+  }
 }
 
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16522,7 +16754,7 @@
   @DomName('HTMLHRElement.color')
   @DocsEditable()
   @Experimental() // untriaged
-  void set color(String value) => _blink.BlinkHTMLHRElement.color_Setter_DOMString(this, value);
+  void set color(String value) => _blink.BlinkHTMLHRElement.color_Setter(this, value);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -16560,7 +16792,7 @@
 
   @DomName('HashChangeEvent.initHashChangeEvent')
   @DocsEditable()
-  void _initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) => _blink.BlinkHashChangeEvent.initHashChangeEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString(this, type, canBubble, cancelable, oldURL, newURL);
+  void _initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) => _blink.BlinkHashChangeEvent.initHashChangeEvent_Callback_5(this, type, canBubble, cancelable, oldURL, newURL);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16608,10 +16840,10 @@
       return _blink.BlinkHeaders.constructorCallback();
     }
     if ((input is Headers || input == null)) {
-      return _blink.BlinkHeaders.constructorCallback_Headers(input);
+      return _blink.BlinkHeaders.constructorCallback_1(input);
     }
     if ((input is Map || input == null)) {
-      return _blink.BlinkHeaders.constructorCallback_Dictionary(input);
+      return _blink.BlinkHeaders.constructorCallback_1(input);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -16623,10 +16855,10 @@
 
   void forEach(HeadersForEachCallback callback, [Object thisArg]) {
     if (thisArg != null) {
-      _blink.BlinkHeaders.forEach_Callback_HeadersForEachCallback_ScriptValue(this, callback, thisArg);
+      _blink.BlinkHeaders.forEach_Callback_2(this, callback, thisArg);
       return;
     }
-    _blink.BlinkHeaders.forEach_Callback_HeadersForEachCallback(this, callback);
+    _blink.BlinkHeaders.forEach_Callback_1(this, callback);
     return;
   }
 
@@ -16724,7 +16956,7 @@
 
   @DomName('History.go')
   @DocsEditable()
-  void go(int distance) => _blink.BlinkHistory.go_Callback_long(this, distance);
+  void go(int distance) => _blink.BlinkHistory.go_Callback_1(this, distance);
 
   @DomName('History.pushState')
   @DocsEditable()
@@ -16732,7 +16964,7 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void pushState(Object data, String title, [String url]) => _blink.BlinkHistory.pushState_Callback_ScriptValue_DOMString_DOMString(this, data, title, url);
+  void pushState(Object data, String title, [String url]) => _blink.BlinkHistory.pushState_Callback_3(this, data, title, url);
 
   @DomName('History.replaceState')
   @DocsEditable()
@@ -16740,7 +16972,7 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void replaceState(Object data, String title, [String url]) => _blink.BlinkHistory.replaceState_Callback_ScriptValue_DOMString_DOMString(this, data, title, url);
+  void replaceState(Object data, String title, [String url]) => _blink.BlinkHistory.replaceState_Callback_3(this, data, title, url);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16762,10 +16994,10 @@
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkHTMLCollection.item_Callback_ul(this, index);
+    return _blink.BlinkHTMLCollection.item_Callback_1(this, index);
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkHTMLCollection.item_Callback_ul(this, index);
+  Node _nativeIndexedGetter(int index) => _blink.BlinkHTMLCollection.item_Callback_1(this, index);
 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -16807,11 +17039,11 @@
 
   @DomName('HTMLCollection.item')
   @DocsEditable()
-  Element item(int index) => _blink.BlinkHTMLCollection.item_Callback_ul(this, index);
+  Element item(int index) => _blink.BlinkHTMLCollection.item_Callback_1(this, index);
 
   @DomName('HTMLCollection.namedItem')
   @DocsEditable()
-  Element namedItem(String name) => _blink.BlinkHTMLCollection.namedItem_Callback_DOMString(this, name);
+  Element namedItem(String name) => _blink.BlinkHTMLCollection.namedItem_Callback_1(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17368,7 +17600,7 @@
 
   @DomName('HTMLElement.contentEditable')
   @DocsEditable()
-  void set contentEditable(String value) => _blink.BlinkHTMLElement.contentEditable_Setter_DOMString(this, value);
+  void set contentEditable(String value) => _blink.BlinkHTMLElement.contentEditable_Setter(this, value);
 
   @DomName('HTMLElement.dir')
   @DocsEditable()
@@ -17376,7 +17608,7 @@
 
   @DomName('HTMLElement.dir')
   @DocsEditable()
-  void set dir(String value) => _blink.BlinkHTMLElement.dir_Setter_DOMString(this, value);
+  void set dir(String value) => _blink.BlinkHTMLElement.dir_Setter(this, value);
 
   @DomName('HTMLElement.draggable')
   @DocsEditable()
@@ -17384,7 +17616,7 @@
 
   @DomName('HTMLElement.draggable')
   @DocsEditable()
-  void set draggable(bool value) => _blink.BlinkHTMLElement.draggable_Setter_boolean(this, value);
+  void set draggable(bool value) => _blink.BlinkHTMLElement.draggable_Setter(this, value);
 
   @DomName('HTMLElement.hidden')
   @DocsEditable()
@@ -17392,7 +17624,7 @@
 
   @DomName('HTMLElement.hidden')
   @DocsEditable()
-  void set hidden(bool value) => _blink.BlinkHTMLElement.hidden_Setter_boolean(this, value);
+  void set hidden(bool value) => _blink.BlinkHTMLElement.hidden_Setter(this, value);
 
   @DomName('HTMLElement.inputMethodContext')
   @DocsEditable()
@@ -17409,7 +17641,7 @@
 
   @DomName('HTMLElement.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkHTMLElement.lang_Setter_DOMString(this, value);
+  void set lang(String value) => _blink.BlinkHTMLElement.lang_Setter(this, value);
 
   @DomName('HTMLElement.spellcheck')
   @DocsEditable()
@@ -17421,7 +17653,7 @@
   @DocsEditable()
   // http://blog.whatwg.org/the-road-to-html-5-spellchecking
   @Experimental() // nonstandard
-  void set spellcheck(bool value) => _blink.BlinkHTMLElement.spellcheck_Setter_boolean(this, value);
+  void set spellcheck(bool value) => _blink.BlinkHTMLElement.spellcheck_Setter(this, value);
 
   @DomName('HTMLElement.tabIndex')
   @DocsEditable()
@@ -17429,7 +17661,7 @@
 
   @DomName('HTMLElement.tabIndex')
   @DocsEditable()
-  void set tabIndex(int value) => _blink.BlinkHTMLElement.tabIndex_Setter_long(this, value);
+  void set tabIndex(int value) => _blink.BlinkHTMLElement.tabIndex_Setter(this, value);
 
   @DomName('HTMLElement.title')
   @DocsEditable()
@@ -17437,7 +17669,7 @@
 
   @DomName('HTMLElement.title')
   @DocsEditable()
-  void set title(String value) => _blink.BlinkHTMLElement.title_Setter_DOMString(this, value);
+  void set title(String value) => _blink.BlinkHTMLElement.title_Setter(this, value);
 
   @DomName('HTMLElement.translate')
   @DocsEditable()
@@ -17445,7 +17677,7 @@
 
   @DomName('HTMLElement.translate')
   @DocsEditable()
-  void set translate(bool value) => _blink.BlinkHTMLElement.translate_Setter_boolean(this, value);
+  void set translate(bool value) => _blink.BlinkHTMLElement.translate_Setter(this, value);
 
   @DomName('HTMLElement.webkitdropzone')
   @DocsEditable()
@@ -17461,7 +17693,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
-  void set dropzone(String value) => _blink.BlinkHTMLElement.webkitdropzone_Setter_DOMString(this, value);
+  void set dropzone(String value) => _blink.BlinkHTMLElement.webkitdropzone_Setter(this, value);
 
   @DomName('HTMLElement.click')
   @DocsEditable()
@@ -17743,7 +17975,7 @@
 
   @DomName('HTMLFormControlsCollection.namedItem')
   @DocsEditable()
-  Object namedItem(String name) => _blink.BlinkHTMLFormControlsCollection.namedItem_Callback_DOMString(this, name);
+  Object namedItem(String name) => _blink.BlinkHTMLFormControlsCollection.namedItem_Callback_1(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18252,7 +18484,7 @@
    */
   @DomName('XMLHttpRequest.responseType')
   @DocsEditable()
-  void set responseType(String value) => _blink.BlinkXMLHttpRequest.responseType_Setter_DOMString(this, value);
+  void set responseType(String value) => _blink.BlinkXMLHttpRequest.responseType_Setter(this, value);
 
   @DomName('XMLHttpRequest.responseURL')
   @DocsEditable()
@@ -18326,7 +18558,7 @@
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void set timeout(int value) => _blink.BlinkXMLHttpRequest.timeout_Setter_ul(this, value);
+  void set timeout(int value) => _blink.BlinkXMLHttpRequest.timeout_Setter(this, value);
 
   /**
    * [EventTarget] that can hold listeners to track the progress of the request.
@@ -18355,7 +18587,7 @@
    */
   @DomName('XMLHttpRequest.withCredentials')
   @DocsEditable()
-  void set withCredentials(bool value) => _blink.BlinkXMLHttpRequest.withCredentials_Setter_boolean(this, value);
+  void set withCredentials(bool value) => _blink.BlinkXMLHttpRequest.withCredentials_Setter(this, value);
 
   /**
    * Stop the current request.
@@ -18392,7 +18624,7 @@
   @DomName('XMLHttpRequest.getResponseHeader')
   @DocsEditable()
   @Unstable()
-  String getResponseHeader(String header) => _blink.BlinkXMLHttpRequest.getResponseHeader_Callback_DOMString(this, header);
+  String getResponseHeader(String header) => _blink.BlinkXMLHttpRequest.getResponseHeader_Callback_1(this, header);
 
   /**
    * Specify the desired `url`, and `method` to use in making the request.
@@ -18411,7 +18643,7 @@
    */
   @DomName('XMLHttpRequest.open')
   @DocsEditable()
-  void open(String method, String url, {bool async, String user, String password}) => _blink.BlinkXMLHttpRequest.open_Callback_DOMString_DOMString_boolean_DOMString_DOMString(this, method, url, async, user, password);
+  void open(String method, String url, {bool async, String user, String password}) => _blink.BlinkXMLHttpRequest.open_Callback_5(this, method, url, async, user, password);
 
   /**
    * Specify a particular MIME type (such as `text/xml`) desired for the
@@ -18425,7 +18657,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void overrideMimeType(String override) => _blink.BlinkXMLHttpRequest.overrideMimeType_Callback_DOMString(this, override);
+  void overrideMimeType(String override) => _blink.BlinkXMLHttpRequest.overrideMimeType_Callback_1(this, override);
 
   /**
    * Send the request with any given `data`.
@@ -18443,7 +18675,7 @@
    */
   @DomName('XMLHttpRequest.send')
   @DocsEditable()
-  void send([data]) => _blink.BlinkXMLHttpRequest.send_Callback(this, data);
+  void send([data]) => _blink.BlinkXMLHttpRequest.send_Callback_1(this, data);
 
   /**
    * Sets the value of an HTTP requst header.
@@ -18465,7 +18697,7 @@
    */
   @DomName('XMLHttpRequest.setRequestHeader')
   @DocsEditable()
-  void setRequestHeader(String header, String value) => _blink.BlinkXMLHttpRequest.setRequestHeader_Callback_DOMString_DOMString(this, header, value);
+  void setRequestHeader(String header, String value) => _blink.BlinkXMLHttpRequest.setRequestHeader_Callback_2(this, header, value);
 
   /// Stream of `readystatechange` events handled by this [HttpRequest].
 /**
@@ -18666,7 +18898,7 @@
   @DomName('HTMLIFrameElement.allowFullscreen')
   @DocsEditable()
   @Experimental() // untriaged
-  void set allowFullscreen(bool value) => _blink.BlinkHTMLIFrameElement.allowFullscreen_Setter_boolean(this, value);
+  void set allowFullscreen(bool value) => _blink.BlinkHTMLIFrameElement.allowFullscreen_Setter(this, value);
 
   @DomName('HTMLIFrameElement.contentWindow')
   @DocsEditable()
@@ -18678,7 +18910,7 @@
 
   @DomName('HTMLIFrameElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLIFrameElement.height_Setter_DOMString(this, value);
+  void set height(String value) => _blink.BlinkHTMLIFrameElement.height_Setter(this, value);
 
   @DomName('HTMLIFrameElement.integrity')
   @DocsEditable()
@@ -18688,7 +18920,7 @@
   @DomName('HTMLIFrameElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLIFrameElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLIFrameElement.integrity_Setter(this, value);
 
   @DomName('HTMLIFrameElement.name')
   @DocsEditable()
@@ -18696,7 +18928,7 @@
 
   @DomName('HTMLIFrameElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLIFrameElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLIFrameElement.name_Setter(this, value);
 
   @DomName('HTMLIFrameElement.sandbox')
   @DocsEditable()
@@ -18704,7 +18936,7 @@
 
   @DomName('HTMLIFrameElement.sandbox')
   @DocsEditable()
-  void set sandbox(String value) => _blink.BlinkHTMLIFrameElement.sandbox_Setter_DOMString(this, value);
+  void set sandbox(String value) => _blink.BlinkHTMLIFrameElement.sandbox_Setter(this, value);
 
   @DomName('HTMLIFrameElement.src')
   @DocsEditable()
@@ -18712,7 +18944,7 @@
 
   @DomName('HTMLIFrameElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLIFrameElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLIFrameElement.src_Setter(this, value);
 
   @DomName('HTMLIFrameElement.srcdoc')
   @DocsEditable()
@@ -18720,7 +18952,7 @@
 
   @DomName('HTMLIFrameElement.srcdoc')
   @DocsEditable()
-  void set srcdoc(String value) => _blink.BlinkHTMLIFrameElement.srcdoc_Setter_DOMString(this, value);
+  void set srcdoc(String value) => _blink.BlinkHTMLIFrameElement.srcdoc_Setter(this, value);
 
   @DomName('HTMLIFrameElement.width')
   @DocsEditable()
@@ -18728,7 +18960,7 @@
 
   @DomName('HTMLIFrameElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLIFrameElement.width_Setter_DOMString(this, value);
+  void set width(String value) => _blink.BlinkHTMLIFrameElement.width_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18778,10 +19010,10 @@
   @DocsEditable()
   factory ImageData(data_OR_width, int height_OR_width, [int height]) {
     if ((height_OR_width is int || height_OR_width == null) && (data_OR_width is int || data_OR_width == null) && height == null) {
-      return _blink.BlinkImageData.constructorCallback_ul_ul(data_OR_width, height_OR_width);
+      return _blink.BlinkImageData.constructorCallback_2(data_OR_width, height_OR_width);
     }
     if ((height is int || height == null) && (height_OR_width is int || height_OR_width == null) && (data_OR_width is Uint8ClampedList || data_OR_width == null)) {
-      return _blink.BlinkImageData.constructorCallback_Uint8ClampedArray_ul_ul(data_OR_width, height_OR_width, height);
+      return _blink.BlinkImageData.constructorCallback_3(data_OR_width, height_OR_width, height);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -18831,7 +19063,7 @@
 
   @DomName('HTMLImageElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLImageElement.alt_Setter_DOMString(this, value);
+  void set alt(String value) => _blink.BlinkHTMLImageElement.alt_Setter(this, value);
 
   @DomName('HTMLImageElement.complete')
   @DocsEditable()
@@ -18843,7 +19075,7 @@
 
   @DomName('HTMLImageElement.crossOrigin')
   @DocsEditable()
-  void set crossOrigin(String value) => _blink.BlinkHTMLImageElement.crossOrigin_Setter_DOMString(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLImageElement.crossOrigin_Setter(this, value);
 
   @DomName('HTMLImageElement.currentSrc')
   @DocsEditable()
@@ -18856,7 +19088,7 @@
 
   @DomName('HTMLImageElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLImageElement.height_Setter_long(this, value);
+  void set height(int value) => _blink.BlinkHTMLImageElement.height_Setter(this, value);
 
   @DomName('HTMLImageElement.integrity')
   @DocsEditable()
@@ -18866,7 +19098,7 @@
   @DomName('HTMLImageElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLImageElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLImageElement.integrity_Setter(this, value);
 
   @DomName('HTMLImageElement.isMap')
   @DocsEditable()
@@ -18874,7 +19106,7 @@
 
   @DomName('HTMLImageElement.isMap')
   @DocsEditable()
-  void set isMap(bool value) => _blink.BlinkHTMLImageElement.isMap_Setter_boolean(this, value);
+  void set isMap(bool value) => _blink.BlinkHTMLImageElement.isMap_Setter(this, value);
 
   @DomName('HTMLImageElement.naturalHeight')
   @DocsEditable()
@@ -18892,7 +19124,7 @@
   @DomName('HTMLImageElement.sizes')
   @DocsEditable()
   @Experimental() // untriaged
-  void set sizes(String value) => _blink.BlinkHTMLImageElement.sizes_Setter_DOMString(this, value);
+  void set sizes(String value) => _blink.BlinkHTMLImageElement.sizes_Setter(this, value);
 
   @DomName('HTMLImageElement.src')
   @DocsEditable()
@@ -18900,7 +19132,7 @@
 
   @DomName('HTMLImageElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLImageElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLImageElement.src_Setter(this, value);
 
   @DomName('HTMLImageElement.srcset')
   @DocsEditable()
@@ -18910,7 +19142,7 @@
   @DomName('HTMLImageElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  void set srcset(String value) => _blink.BlinkHTMLImageElement.srcset_Setter_DOMString(this, value);
+  void set srcset(String value) => _blink.BlinkHTMLImageElement.srcset_Setter(this, value);
 
   @DomName('HTMLImageElement.useMap')
   @DocsEditable()
@@ -18918,7 +19150,7 @@
 
   @DomName('HTMLImageElement.useMap')
   @DocsEditable()
-  void set useMap(String value) => _blink.BlinkHTMLImageElement.useMap_Setter_DOMString(this, value);
+  void set useMap(String value) => _blink.BlinkHTMLImageElement.useMap_Setter(this, value);
 
   @DomName('HTMLImageElement.width')
   @DocsEditable()
@@ -18926,7 +19158,7 @@
 
   @DomName('HTMLImageElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLImageElement.width_Setter_long(this, value);
+  void set width(int value) => _blink.BlinkHTMLImageElement.width_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18946,7 +19178,7 @@
   @DomName('InjectedScriptHost.inspect')
   @DocsEditable()
   @Experimental() // untriaged
-  void inspect(Object objectId, Object hints) => _blink.BlinkInjectedScriptHost.inspect_Callback_ScriptValue_ScriptValue(this, objectId, hints);
+  void inspect(Object objectId, Object hints) => _blink.BlinkInjectedScriptHost.inspect_Callback_2(this, objectId, hints);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19004,7 +19236,7 @@
 
   @DomName('HTMLInputElement.accept')
   @DocsEditable()
-  void set accept(String value) => _blink.BlinkHTMLInputElement.accept_Setter_DOMString(this, value);
+  void set accept(String value) => _blink.BlinkHTMLInputElement.accept_Setter(this, value);
 
   @DomName('HTMLInputElement.alt')
   @DocsEditable()
@@ -19012,7 +19244,7 @@
 
   @DomName('HTMLInputElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLInputElement.alt_Setter_DOMString(this, value);
+  void set alt(String value) => _blink.BlinkHTMLInputElement.alt_Setter(this, value);
 
   @DomName('HTMLInputElement.autocomplete')
   @DocsEditable()
@@ -19020,7 +19252,7 @@
 
   @DomName('HTMLInputElement.autocomplete')
   @DocsEditable()
-  void set autocomplete(String value) => _blink.BlinkHTMLInputElement.autocomplete_Setter_DOMString(this, value);
+  void set autocomplete(String value) => _blink.BlinkHTMLInputElement.autocomplete_Setter(this, value);
 
   @DomName('HTMLInputElement.autofocus')
   @DocsEditable()
@@ -19028,7 +19260,7 @@
 
   @DomName('HTMLInputElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLInputElement.autofocus_Setter_boolean(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLInputElement.autofocus_Setter(this, value);
 
   @DomName('HTMLInputElement.capture')
   @DocsEditable()
@@ -19038,7 +19270,7 @@
   @DomName('HTMLInputElement.capture')
   @DocsEditable()
   @Experimental() // untriaged
-  void set capture(bool value) => _blink.BlinkHTMLInputElement.capture_Setter_boolean(this, value);
+  void set capture(bool value) => _blink.BlinkHTMLInputElement.capture_Setter(this, value);
 
   @DomName('HTMLInputElement.checked')
   @DocsEditable()
@@ -19046,7 +19278,7 @@
 
   @DomName('HTMLInputElement.checked')
   @DocsEditable()
-  void set checked(bool value) => _blink.BlinkHTMLInputElement.checked_Setter_boolean(this, value);
+  void set checked(bool value) => _blink.BlinkHTMLInputElement.checked_Setter(this, value);
 
   @DomName('HTMLInputElement.defaultChecked')
   @DocsEditable()
@@ -19054,7 +19286,7 @@
 
   @DomName('HTMLInputElement.defaultChecked')
   @DocsEditable()
-  void set defaultChecked(bool value) => _blink.BlinkHTMLInputElement.defaultChecked_Setter_boolean(this, value);
+  void set defaultChecked(bool value) => _blink.BlinkHTMLInputElement.defaultChecked_Setter(this, value);
 
   @DomName('HTMLInputElement.defaultValue')
   @DocsEditable()
@@ -19062,7 +19294,7 @@
 
   @DomName('HTMLInputElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLInputElement.defaultValue_Setter_DOMString(this, value);
+  void set defaultValue(String value) => _blink.BlinkHTMLInputElement.defaultValue_Setter(this, value);
 
   @DomName('HTMLInputElement.dirName')
   @DocsEditable()
@@ -19070,7 +19302,7 @@
 
   @DomName('HTMLInputElement.dirName')
   @DocsEditable()
-  void set dirName(String value) => _blink.BlinkHTMLInputElement.dirName_Setter_DOMString(this, value);
+  void set dirName(String value) => _blink.BlinkHTMLInputElement.dirName_Setter(this, value);
 
   @DomName('HTMLInputElement.disabled')
   @DocsEditable()
@@ -19078,7 +19310,7 @@
 
   @DomName('HTMLInputElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLInputElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLInputElement.disabled_Setter(this, value);
 
   @DomName('HTMLInputElement.files')
   @DocsEditable()
@@ -19086,7 +19318,7 @@
 
   @DomName('HTMLInputElement.files')
   @DocsEditable()
-  void set files(List<File> value) => _blink.BlinkHTMLInputElement.files_Setter_FileList(this, value);
+  void set files(List<File> value) => _blink.BlinkHTMLInputElement.files_Setter(this, value);
 
   @DomName('HTMLInputElement.form')
   @DocsEditable()
@@ -19098,7 +19330,7 @@
 
   @DomName('HTMLInputElement.formAction')
   @DocsEditable()
-  void set formAction(String value) => _blink.BlinkHTMLInputElement.formAction_Setter_DOMString(this, value);
+  void set formAction(String value) => _blink.BlinkHTMLInputElement.formAction_Setter(this, value);
 
   @DomName('HTMLInputElement.formEnctype')
   @DocsEditable()
@@ -19106,7 +19338,7 @@
 
   @DomName('HTMLInputElement.formEnctype')
   @DocsEditable()
-  void set formEnctype(String value) => _blink.BlinkHTMLInputElement.formEnctype_Setter_DOMString(this, value);
+  void set formEnctype(String value) => _blink.BlinkHTMLInputElement.formEnctype_Setter(this, value);
 
   @DomName('HTMLInputElement.formMethod')
   @DocsEditable()
@@ -19114,7 +19346,7 @@
 
   @DomName('HTMLInputElement.formMethod')
   @DocsEditable()
-  void set formMethod(String value) => _blink.BlinkHTMLInputElement.formMethod_Setter_DOMString(this, value);
+  void set formMethod(String value) => _blink.BlinkHTMLInputElement.formMethod_Setter(this, value);
 
   @DomName('HTMLInputElement.formNoValidate')
   @DocsEditable()
@@ -19122,7 +19354,7 @@
 
   @DomName('HTMLInputElement.formNoValidate')
   @DocsEditable()
-  void set formNoValidate(bool value) => _blink.BlinkHTMLInputElement.formNoValidate_Setter_boolean(this, value);
+  void set formNoValidate(bool value) => _blink.BlinkHTMLInputElement.formNoValidate_Setter(this, value);
 
   @DomName('HTMLInputElement.formTarget')
   @DocsEditable()
@@ -19130,7 +19362,7 @@
 
   @DomName('HTMLInputElement.formTarget')
   @DocsEditable()
-  void set formTarget(String value) => _blink.BlinkHTMLInputElement.formTarget_Setter_DOMString(this, value);
+  void set formTarget(String value) => _blink.BlinkHTMLInputElement.formTarget_Setter(this, value);
 
   @DomName('HTMLInputElement.height')
   @DocsEditable()
@@ -19138,7 +19370,7 @@
 
   @DomName('HTMLInputElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLInputElement.height_Setter_ul(this, value);
+  void set height(int value) => _blink.BlinkHTMLInputElement.height_Setter(this, value);
 
   @DomName('HTMLInputElement.incremental')
   @DocsEditable()
@@ -19150,7 +19382,7 @@
   @DocsEditable()
   // http://www.w3.org/TR/html-markup/input.search.html
   @Experimental()
-  void set incremental(bool value) => _blink.BlinkHTMLInputElement.incremental_Setter_boolean(this, value);
+  void set incremental(bool value) => _blink.BlinkHTMLInputElement.incremental_Setter(this, value);
 
   @DomName('HTMLInputElement.indeterminate')
   @DocsEditable()
@@ -19158,7 +19390,7 @@
 
   @DomName('HTMLInputElement.indeterminate')
   @DocsEditable()
-  void set indeterminate(bool value) => _blink.BlinkHTMLInputElement.indeterminate_Setter_boolean(this, value);
+  void set indeterminate(bool value) => _blink.BlinkHTMLInputElement.indeterminate_Setter(this, value);
 
   @DomName('HTMLInputElement.inputMode')
   @DocsEditable()
@@ -19168,7 +19400,7 @@
   @DomName('HTMLInputElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set inputMode(String value) => _blink.BlinkHTMLInputElement.inputMode_Setter_DOMString(this, value);
+  void set inputMode(String value) => _blink.BlinkHTMLInputElement.inputMode_Setter(this, value);
 
   @DomName('HTMLInputElement.labels')
   @DocsEditable()
@@ -19184,7 +19416,7 @@
 
   @DomName('HTMLInputElement.max')
   @DocsEditable()
-  void set max(String value) => _blink.BlinkHTMLInputElement.max_Setter_DOMString(this, value);
+  void set max(String value) => _blink.BlinkHTMLInputElement.max_Setter(this, value);
 
   @DomName('HTMLInputElement.maxLength')
   @DocsEditable()
@@ -19192,7 +19424,7 @@
 
   @DomName('HTMLInputElement.maxLength')
   @DocsEditable()
-  void set maxLength(int value) => _blink.BlinkHTMLInputElement.maxLength_Setter_long(this, value);
+  void set maxLength(int value) => _blink.BlinkHTMLInputElement.maxLength_Setter(this, value);
 
   @DomName('HTMLInputElement.min')
   @DocsEditable()
@@ -19200,7 +19432,7 @@
 
   @DomName('HTMLInputElement.min')
   @DocsEditable()
-  void set min(String value) => _blink.BlinkHTMLInputElement.min_Setter_DOMString(this, value);
+  void set min(String value) => _blink.BlinkHTMLInputElement.min_Setter(this, value);
 
   @DomName('HTMLInputElement.multiple')
   @DocsEditable()
@@ -19208,7 +19440,7 @@
 
   @DomName('HTMLInputElement.multiple')
   @DocsEditable()
-  void set multiple(bool value) => _blink.BlinkHTMLInputElement.multiple_Setter_boolean(this, value);
+  void set multiple(bool value) => _blink.BlinkHTMLInputElement.multiple_Setter(this, value);
 
   @DomName('HTMLInputElement.name')
   @DocsEditable()
@@ -19216,7 +19448,7 @@
 
   @DomName('HTMLInputElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLInputElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLInputElement.name_Setter(this, value);
 
   @DomName('HTMLInputElement.pattern')
   @DocsEditable()
@@ -19224,7 +19456,7 @@
 
   @DomName('HTMLInputElement.pattern')
   @DocsEditable()
-  void set pattern(String value) => _blink.BlinkHTMLInputElement.pattern_Setter_DOMString(this, value);
+  void set pattern(String value) => _blink.BlinkHTMLInputElement.pattern_Setter(this, value);
 
   @DomName('HTMLInputElement.placeholder')
   @DocsEditable()
@@ -19232,7 +19464,7 @@
 
   @DomName('HTMLInputElement.placeholder')
   @DocsEditable()
-  void set placeholder(String value) => _blink.BlinkHTMLInputElement.placeholder_Setter_DOMString(this, value);
+  void set placeholder(String value) => _blink.BlinkHTMLInputElement.placeholder_Setter(this, value);
 
   @DomName('HTMLInputElement.readOnly')
   @DocsEditable()
@@ -19240,7 +19472,7 @@
 
   @DomName('HTMLInputElement.readOnly')
   @DocsEditable()
-  void set readOnly(bool value) => _blink.BlinkHTMLInputElement.readOnly_Setter_boolean(this, value);
+  void set readOnly(bool value) => _blink.BlinkHTMLInputElement.readOnly_Setter(this, value);
 
   @DomName('HTMLInputElement.required')
   @DocsEditable()
@@ -19248,7 +19480,7 @@
 
   @DomName('HTMLInputElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLInputElement.required_Setter_boolean(this, value);
+  void set required(bool value) => _blink.BlinkHTMLInputElement.required_Setter(this, value);
 
   @DomName('HTMLInputElement.selectionDirection')
   @DocsEditable()
@@ -19256,7 +19488,7 @@
 
   @DomName('HTMLInputElement.selectionDirection')
   @DocsEditable()
-  void set selectionDirection(String value) => _blink.BlinkHTMLInputElement.selectionDirection_Setter_DOMString(this, value);
+  void set selectionDirection(String value) => _blink.BlinkHTMLInputElement.selectionDirection_Setter(this, value);
 
   @DomName('HTMLInputElement.selectionEnd')
   @DocsEditable()
@@ -19264,7 +19496,7 @@
 
   @DomName('HTMLInputElement.selectionEnd')
   @DocsEditable()
-  void set selectionEnd(int value) => _blink.BlinkHTMLInputElement.selectionEnd_Setter_long(this, value);
+  void set selectionEnd(int value) => _blink.BlinkHTMLInputElement.selectionEnd_Setter(this, value);
 
   @DomName('HTMLInputElement.selectionStart')
   @DocsEditable()
@@ -19272,7 +19504,7 @@
 
   @DomName('HTMLInputElement.selectionStart')
   @DocsEditable()
-  void set selectionStart(int value) => _blink.BlinkHTMLInputElement.selectionStart_Setter_long(this, value);
+  void set selectionStart(int value) => _blink.BlinkHTMLInputElement.selectionStart_Setter(this, value);
 
   @DomName('HTMLInputElement.size')
   @DocsEditable()
@@ -19280,7 +19512,7 @@
 
   @DomName('HTMLInputElement.size')
   @DocsEditable()
-  void set size(int value) => _blink.BlinkHTMLInputElement.size_Setter_ul(this, value);
+  void set size(int value) => _blink.BlinkHTMLInputElement.size_Setter(this, value);
 
   @DomName('HTMLInputElement.src')
   @DocsEditable()
@@ -19288,7 +19520,7 @@
 
   @DomName('HTMLInputElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLInputElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLInputElement.src_Setter(this, value);
 
   @DomName('HTMLInputElement.step')
   @DocsEditable()
@@ -19296,7 +19528,7 @@
 
   @DomName('HTMLInputElement.step')
   @DocsEditable()
-  void set step(String value) => _blink.BlinkHTMLInputElement.step_Setter_DOMString(this, value);
+  void set step(String value) => _blink.BlinkHTMLInputElement.step_Setter(this, value);
 
   @DomName('HTMLInputElement.type')
   @DocsEditable()
@@ -19304,7 +19536,7 @@
 
   @DomName('HTMLInputElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLInputElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLInputElement.type_Setter(this, value);
 
   @DomName('HTMLInputElement.validationMessage')
   @DocsEditable()
@@ -19320,7 +19552,7 @@
 
   @DomName('HTMLInputElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLInputElement.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkHTMLInputElement.value_Setter(this, value);
 
   @DomName('HTMLInputElement.valueAsDate')
   @DocsEditable()
@@ -19328,7 +19560,7 @@
 
   @DomName('HTMLInputElement.valueAsDate')
   @DocsEditable()
-  void set valueAsDate(DateTime value) => _blink.BlinkHTMLInputElement.valueAsDate_Setter_Date(this, value);
+  void set valueAsDate(DateTime value) => _blink.BlinkHTMLInputElement.valueAsDate_Setter(this, value);
 
   @DomName('HTMLInputElement.valueAsNumber')
   @DocsEditable()
@@ -19336,7 +19568,7 @@
 
   @DomName('HTMLInputElement.valueAsNumber')
   @DocsEditable()
-  void set valueAsNumber(num value) => _blink.BlinkHTMLInputElement.valueAsNumber_Setter_double(this, value);
+  void set valueAsNumber(num value) => _blink.BlinkHTMLInputElement.valueAsNumber_Setter(this, value);
 
   @DomName('HTMLInputElement.webkitEntries')
   @DocsEditable()
@@ -19360,7 +19592,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
-  void set directory(bool value) => _blink.BlinkHTMLInputElement.webkitdirectory_Setter_boolean(this, value);
+  void set directory(bool value) => _blink.BlinkHTMLInputElement.webkitdirectory_Setter(this, value);
 
   @DomName('HTMLInputElement.width')
   @DocsEditable()
@@ -19368,7 +19600,7 @@
 
   @DomName('HTMLInputElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLInputElement.width_Setter_ul(this, value);
+  void set width(int value) => _blink.BlinkHTMLInputElement.width_Setter(this, value);
 
   @DomName('HTMLInputElement.willValidate')
   @DocsEditable()
@@ -19384,15 +19616,15 @@
 
   @DomName('HTMLInputElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLInputElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLInputElement.setCustomValidity_Callback_1(this, error);
 
   void setRangeText(String replacement, {int start, int end, String selectionMode}) {
     if ((replacement is String || replacement == null) && start == null && end == null && selectionMode == null) {
-      _blink.BlinkHTMLInputElement.setRangeText_Callback_DOMString(this, replacement);
+      _blink.BlinkHTMLInputElement.setRangeText_Callback_1(this, replacement);
       return;
     }
     if ((selectionMode is String || selectionMode == null) && (end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null)) {
-      _blink.BlinkHTMLInputElement.setRangeText_Callback_DOMString_ul_ul_DOMString(this, replacement, start, end, selectionMode);
+      _blink.BlinkHTMLInputElement.setRangeText_Callback_4(this, replacement, start, end, selectionMode);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -19400,16 +19632,16 @@
 
   void setSelectionRange(int start, int end, [String direction]) {
     if (direction != null) {
-      _blink.BlinkHTMLInputElement.setSelectionRange_Callback_long_long_DOMString(this, start, end, direction);
+      _blink.BlinkHTMLInputElement.setSelectionRange_Callback_3(this, start, end, direction);
       return;
     }
-    _blink.BlinkHTMLInputElement.setSelectionRange_Callback_long_long(this, start, end);
+    _blink.BlinkHTMLInputElement.setSelectionRange_Callback_2(this, start, end);
     return;
   }
 
   void stepDown([int n]) {
     if (n != null) {
-      _blink.BlinkHTMLInputElement.stepDown_Callback_long(this, n);
+      _blink.BlinkHTMLInputElement.stepDown_Callback_1(this, n);
       return;
     }
     _blink.BlinkHTMLInputElement.stepDown_Callback(this);
@@ -19418,7 +19650,7 @@
 
   void stepUp([int n]) {
     if (n != null) {
-      _blink.BlinkHTMLInputElement.stepUp_Callback_long(this, n);
+      _blink.BlinkHTMLInputElement.stepUp_Callback_1(this, n);
       return;
     }
     _blink.BlinkHTMLInputElement.stepUp_Callback(this);
@@ -20034,6 +20266,11 @@
   // To suppress missing implicit constructor warnings.
   factory InstallEvent._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('InstallEvent.reloadAll')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future reloadAll() => _blink.BlinkInstallEvent.reloadAll_Callback(this);
+
   @DomName('InstallEvent.replace')
   @DocsEditable()
   @Experimental() // untriaged
@@ -20057,7 +20294,7 @@
   @DomName('InstallPhaseEvent.waitUntil')
   @DocsEditable()
   @Experimental() // untriaged
-  void waitUntil(Object value) => _blink.BlinkInstallPhaseEvent.waitUntil_Callback_ScriptValue(this, value);
+  void waitUntil(Object value) => _blink.BlinkInstallPhaseEvent.waitUntil_Callback_1(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20148,11 +20385,11 @@
   @DomName('KeyboardEvent.getModifierState')
   @DocsEditable()
   @Experimental() // untriaged
-  bool getModifierState(String keyArgument) => _blink.BlinkKeyboardEvent.getModifierState_Callback_DOMString(this, keyArgument);
+  bool getModifierState(String keyArgument) => _blink.BlinkKeyboardEvent.getModifierState_Callback_1(this, keyArgument);
 
   @DomName('KeyboardEvent.initKeyboardEvent')
   @DocsEditable()
-  void _initKeyboardEvent(String type, bool canBubble, bool cancelable, Window view, String keyIdentifier, int location, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkKeyboardEvent.initKeyboardEvent_Callback_DOMString_boolean_boolean_Window_DOMString_ul_boolean_boolean_boolean_boolean(this, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey);
+  void _initKeyboardEvent(String type, bool canBubble, bool cancelable, Window view, String keyIdentifier, int location, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkKeyboardEvent.initKeyboardEvent_Callback_10(this, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20191,7 +20428,7 @@
 
   @DomName('HTMLKeygenElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLKeygenElement.autofocus_Setter_boolean(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLKeygenElement.autofocus_Setter(this, value);
 
   @DomName('HTMLKeygenElement.challenge')
   @DocsEditable()
@@ -20199,7 +20436,7 @@
 
   @DomName('HTMLKeygenElement.challenge')
   @DocsEditable()
-  void set challenge(String value) => _blink.BlinkHTMLKeygenElement.challenge_Setter_DOMString(this, value);
+  void set challenge(String value) => _blink.BlinkHTMLKeygenElement.challenge_Setter(this, value);
 
   @DomName('HTMLKeygenElement.disabled')
   @DocsEditable()
@@ -20207,7 +20444,7 @@
 
   @DomName('HTMLKeygenElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLKeygenElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLKeygenElement.disabled_Setter(this, value);
 
   @DomName('HTMLKeygenElement.form')
   @DocsEditable()
@@ -20219,7 +20456,7 @@
 
   @DomName('HTMLKeygenElement.keytype')
   @DocsEditable()
-  void set keytype(String value) => _blink.BlinkHTMLKeygenElement.keytype_Setter_DOMString(this, value);
+  void set keytype(String value) => _blink.BlinkHTMLKeygenElement.keytype_Setter(this, value);
 
   @DomName('HTMLKeygenElement.labels')
   @DocsEditable()
@@ -20232,7 +20469,7 @@
 
   @DomName('HTMLKeygenElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLKeygenElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLKeygenElement.name_Setter(this, value);
 
   @DomName('HTMLKeygenElement.type')
   @DocsEditable()
@@ -20256,7 +20493,7 @@
 
   @DomName('HTMLKeygenElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLKeygenElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLKeygenElement.setCustomValidity_Callback_1(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20288,7 +20525,7 @@
 
   @DomName('HTMLLIElement.value')
   @DocsEditable()
-  void set value(int value) => _blink.BlinkHTMLLIElement.value_Setter_long(this, value);
+  void set value(int value) => _blink.BlinkHTMLLIElement.value_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20328,7 +20565,7 @@
 
   @DomName('HTMLLabelElement.htmlFor')
   @DocsEditable()
-  void set htmlFor(String value) => _blink.BlinkHTMLLabelElement.htmlFor_Setter_DOMString(this, value);
+  void set htmlFor(String value) => _blink.BlinkHTMLLabelElement.htmlFor_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20388,7 +20625,7 @@
   @DomName('HTMLLinkElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  void set crossOrigin(String value) => _blink.BlinkHTMLLinkElement.crossOrigin_Setter_DOMString(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLLinkElement.crossOrigin_Setter(this, value);
 
   @DomName('HTMLLinkElement.disabled')
   @DocsEditable()
@@ -20396,7 +20633,7 @@
 
   @DomName('HTMLLinkElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLLinkElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLLinkElement.disabled_Setter(this, value);
 
   @DomName('HTMLLinkElement.href')
   @DocsEditable()
@@ -20404,7 +20641,7 @@
 
   @DomName('HTMLLinkElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLLinkElement.href_Setter_DOMString(this, value);
+  void set href(String value) => _blink.BlinkHTMLLinkElement.href_Setter(this, value);
 
   @DomName('HTMLLinkElement.hreflang')
   @DocsEditable()
@@ -20412,7 +20649,7 @@
 
   @DomName('HTMLLinkElement.hreflang')
   @DocsEditable()
-  void set hreflang(String value) => _blink.BlinkHTMLLinkElement.hreflang_Setter_DOMString(this, value);
+  void set hreflang(String value) => _blink.BlinkHTMLLinkElement.hreflang_Setter(this, value);
 
   @DomName('HTMLLinkElement.import')
   @DocsEditable()
@@ -20428,7 +20665,7 @@
   @DomName('HTMLLinkElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLLinkElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLLinkElement.integrity_Setter(this, value);
 
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
@@ -20436,7 +20673,7 @@
 
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLLinkElement.media_Setter_DOMString(this, value);
+  void set media(String value) => _blink.BlinkHTMLLinkElement.media_Setter(this, value);
 
   @DomName('HTMLLinkElement.rel')
   @DocsEditable()
@@ -20444,7 +20681,7 @@
 
   @DomName('HTMLLinkElement.rel')
   @DocsEditable()
-  void set rel(String value) => _blink.BlinkHTMLLinkElement.rel_Setter_DOMString(this, value);
+  void set rel(String value) => _blink.BlinkHTMLLinkElement.rel_Setter(this, value);
 
   @DomName('HTMLLinkElement.sheet')
   @DocsEditable()
@@ -20460,7 +20697,7 @@
 
   @DomName('HTMLLinkElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLLinkElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLLinkElement.type_Setter(this, value);
 
 
     /// Checks if HTML imports are supported on the current platform.
@@ -20485,7 +20722,7 @@
   @DomName('LocalCredential.LocalCredential')
   @DocsEditable()
   factory LocalCredential(String id, String name, String avatarURL, String password) {
-    return _blink.BlinkLocalCredential.constructorCallback_DOMString_DOMString_DOMString_DOMString(id, name, avatarURL, password);
+    return _blink.BlinkLocalCredential.constructorCallback_4(id, name, avatarURL, password);
   }
 
   @DomName('LocalCredential.password')
@@ -20516,7 +20753,7 @@
 
   @DomName('Location.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkLocation.hash_Setter_DOMString(this, value);
+  void set hash(String value) => _blink.BlinkLocation.hash_Setter(this, value);
 
   @DomName('Location.host')
   @DocsEditable()
@@ -20524,7 +20761,7 @@
 
   @DomName('Location.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkLocation.host_Setter_DOMString(this, value);
+  void set host(String value) => _blink.BlinkLocation.host_Setter(this, value);
 
   @DomName('Location.hostname')
   @DocsEditable()
@@ -20532,7 +20769,7 @@
 
   @DomName('Location.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkLocation.hostname_Setter_DOMString(this, value);
+  void set hostname(String value) => _blink.BlinkLocation.hostname_Setter(this, value);
 
   @DomName('Location.href')
   @DocsEditable()
@@ -20540,7 +20777,7 @@
 
   @DomName('Location.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkLocation.href_Setter_DOMString(this, value);
+  void set href(String value) => _blink.BlinkLocation.href_Setter(this, value);
 
   @DomName('Location.origin')
   @DocsEditable()
@@ -20554,7 +20791,7 @@
 
   @DomName('Location.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkLocation.pathname_Setter_DOMString(this, value);
+  void set pathname(String value) => _blink.BlinkLocation.pathname_Setter(this, value);
 
   @DomName('Location.port')
   @DocsEditable()
@@ -20562,7 +20799,7 @@
 
   @DomName('Location.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkLocation.port_Setter_DOMString(this, value);
+  void set port(String value) => _blink.BlinkLocation.port_Setter(this, value);
 
   @DomName('Location.protocol')
   @DocsEditable()
@@ -20570,7 +20807,7 @@
 
   @DomName('Location.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkLocation.protocol_Setter_DOMString(this, value);
+  void set protocol(String value) => _blink.BlinkLocation.protocol_Setter(this, value);
 
   @DomName('Location.search')
   @DocsEditable()
@@ -20578,11 +20815,11 @@
 
   @DomName('Location.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkLocation.search_Setter_DOMString(this, value);
+  void set search(String value) => _blink.BlinkLocation.search_Setter(this, value);
 
   @DomName('Location.assign')
   @DocsEditable()
-  void assign([String url]) => _blink.BlinkLocation.assign_Callback_DOMString(this, url);
+  void assign([String url]) => _blink.BlinkLocation.assign_Callback_1(this, url);
 
   @DomName('Location.reload')
   @DocsEditable()
@@ -20590,7 +20827,7 @@
 
   @DomName('Location.replace')
   @DocsEditable()
-  void replace(String url) => _blink.BlinkLocation.replace_Callback_DOMString(this, url);
+  void replace(String url) => _blink.BlinkLocation.replace_Callback_1(this, url);
 
   @DomName('Location.toString')
   @DocsEditable()
@@ -20652,7 +20889,7 @@
 
   @DomName('HTMLMapElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLMapElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLMapElement.name_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20686,7 +20923,7 @@
 
   @DomName('MediaController.currentTime')
   @DocsEditable()
-  void set currentTime(num value) => _blink.BlinkMediaController.currentTime_Setter_double(this, value);
+  void set currentTime(num value) => _blink.BlinkMediaController.currentTime_Setter(this, value);
 
   @DomName('MediaController.defaultPlaybackRate')
   @DocsEditable()
@@ -20694,7 +20931,7 @@
 
   @DomName('MediaController.defaultPlaybackRate')
   @DocsEditable()
-  void set defaultPlaybackRate(num value) => _blink.BlinkMediaController.defaultPlaybackRate_Setter_double(this, value);
+  void set defaultPlaybackRate(num value) => _blink.BlinkMediaController.defaultPlaybackRate_Setter(this, value);
 
   @DomName('MediaController.duration')
   @DocsEditable()
@@ -20706,7 +20943,7 @@
 
   @DomName('MediaController.muted')
   @DocsEditable()
-  void set muted(bool value) => _blink.BlinkMediaController.muted_Setter_boolean(this, value);
+  void set muted(bool value) => _blink.BlinkMediaController.muted_Setter(this, value);
 
   @DomName('MediaController.paused')
   @DocsEditable()
@@ -20718,7 +20955,7 @@
 
   @DomName('MediaController.playbackRate')
   @DocsEditable()
-  void set playbackRate(num value) => _blink.BlinkMediaController.playbackRate_Setter_double(this, value);
+  void set playbackRate(num value) => _blink.BlinkMediaController.playbackRate_Setter(this, value);
 
   @DomName('MediaController.playbackState')
   @DocsEditable()
@@ -20738,7 +20975,7 @@
 
   @DomName('MediaController.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkMediaController.volume_Setter_double(this, value);
+  void set volume(num value) => _blink.BlinkMediaController.volume_Setter(this, value);
 
   @DomName('MediaController.pause')
   @DocsEditable()
@@ -20921,7 +21158,7 @@
 
   @DomName('HTMLMediaElement.autoplay')
   @DocsEditable()
-  void set autoplay(bool value) => _blink.BlinkHTMLMediaElement.autoplay_Setter_boolean(this, value);
+  void set autoplay(bool value) => _blink.BlinkHTMLMediaElement.autoplay_Setter(this, value);
 
   @DomName('HTMLMediaElement.buffered')
   @DocsEditable()
@@ -20933,7 +21170,7 @@
 
   @DomName('HTMLMediaElement.controller')
   @DocsEditable()
-  void set controller(MediaController value) => _blink.BlinkHTMLMediaElement.controller_Setter_MediaController(this, value);
+  void set controller(MediaController value) => _blink.BlinkHTMLMediaElement.controller_Setter(this, value);
 
   @DomName('HTMLMediaElement.controls')
   @DocsEditable()
@@ -20941,7 +21178,7 @@
 
   @DomName('HTMLMediaElement.controls')
   @DocsEditable()
-  void set controls(bool value) => _blink.BlinkHTMLMediaElement.controls_Setter_boolean(this, value);
+  void set controls(bool value) => _blink.BlinkHTMLMediaElement.controls_Setter(this, value);
 
   @DomName('HTMLMediaElement.crossOrigin')
   @DocsEditable()
@@ -20951,7 +21188,7 @@
   @DomName('HTMLMediaElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  void set crossOrigin(String value) => _blink.BlinkHTMLMediaElement.crossOrigin_Setter_DOMString(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLMediaElement.crossOrigin_Setter(this, value);
 
   @DomName('HTMLMediaElement.currentSrc')
   @DocsEditable()
@@ -20963,7 +21200,7 @@
 
   @DomName('HTMLMediaElement.currentTime')
   @DocsEditable()
-  void set currentTime(num value) => _blink.BlinkHTMLMediaElement.currentTime_Setter_double(this, value);
+  void set currentTime(num value) => _blink.BlinkHTMLMediaElement.currentTime_Setter(this, value);
 
   @DomName('HTMLMediaElement.defaultMuted')
   @DocsEditable()
@@ -20971,7 +21208,7 @@
 
   @DomName('HTMLMediaElement.defaultMuted')
   @DocsEditable()
-  void set defaultMuted(bool value) => _blink.BlinkHTMLMediaElement.defaultMuted_Setter_boolean(this, value);
+  void set defaultMuted(bool value) => _blink.BlinkHTMLMediaElement.defaultMuted_Setter(this, value);
 
   @DomName('HTMLMediaElement.defaultPlaybackRate')
   @DocsEditable()
@@ -20979,7 +21216,7 @@
 
   @DomName('HTMLMediaElement.defaultPlaybackRate')
   @DocsEditable()
-  void set defaultPlaybackRate(num value) => _blink.BlinkHTMLMediaElement.defaultPlaybackRate_Setter_double(this, value);
+  void set defaultPlaybackRate(num value) => _blink.BlinkHTMLMediaElement.defaultPlaybackRate_Setter(this, value);
 
   @DomName('HTMLMediaElement.duration')
   @DocsEditable()
@@ -21001,7 +21238,7 @@
   @DomName('HTMLMediaElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLMediaElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLMediaElement.integrity_Setter(this, value);
 
   @DomName('HTMLMediaElement.loop')
   @DocsEditable()
@@ -21009,7 +21246,7 @@
 
   @DomName('HTMLMediaElement.loop')
   @DocsEditable()
-  void set loop(bool value) => _blink.BlinkHTMLMediaElement.loop_Setter_boolean(this, value);
+  void set loop(bool value) => _blink.BlinkHTMLMediaElement.loop_Setter(this, value);
 
   @DomName('HTMLMediaElement.mediaGroup')
   @DocsEditable()
@@ -21017,7 +21254,7 @@
 
   @DomName('HTMLMediaElement.mediaGroup')
   @DocsEditable()
-  void set mediaGroup(String value) => _blink.BlinkHTMLMediaElement.mediaGroup_Setter_DOMString(this, value);
+  void set mediaGroup(String value) => _blink.BlinkHTMLMediaElement.mediaGroup_Setter(this, value);
 
   @DomName('HTMLMediaElement.mediaKeys')
   @DocsEditable()
@@ -21031,7 +21268,7 @@
 
   @DomName('HTMLMediaElement.muted')
   @DocsEditable()
-  void set muted(bool value) => _blink.BlinkHTMLMediaElement.muted_Setter_boolean(this, value);
+  void set muted(bool value) => _blink.BlinkHTMLMediaElement.muted_Setter(this, value);
 
   @DomName('HTMLMediaElement.networkState')
   @DocsEditable()
@@ -21047,7 +21284,7 @@
 
   @DomName('HTMLMediaElement.playbackRate')
   @DocsEditable()
-  void set playbackRate(num value) => _blink.BlinkHTMLMediaElement.playbackRate_Setter_double(this, value);
+  void set playbackRate(num value) => _blink.BlinkHTMLMediaElement.playbackRate_Setter(this, value);
 
   @DomName('HTMLMediaElement.played')
   @DocsEditable()
@@ -21059,7 +21296,7 @@
 
   @DomName('HTMLMediaElement.preload')
   @DocsEditable()
-  void set preload(String value) => _blink.BlinkHTMLMediaElement.preload_Setter_DOMString(this, value);
+  void set preload(String value) => _blink.BlinkHTMLMediaElement.preload_Setter(this, value);
 
   @DomName('HTMLMediaElement.readyState')
   @DocsEditable()
@@ -21079,7 +21316,7 @@
 
   @DomName('HTMLMediaElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLMediaElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLMediaElement.src_Setter(this, value);
 
   @DomName('HTMLMediaElement.textTracks')
   @DocsEditable()
@@ -21098,7 +21335,7 @@
 
   @DomName('HTMLMediaElement.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkHTMLMediaElement.volume_Setter_double(this, value);
+  void set volume(num value) => _blink.BlinkHTMLMediaElement.volume_Setter(this, value);
 
   @DomName('HTMLMediaElement.webkitAudioDecodedByteCount')
   @DocsEditable()
@@ -21118,18 +21355,20 @@
 
   TextTrack addTextTrack(String kind, [String label, String language]) {
     if (language != null) {
-      return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_DOMString_DOMString_DOMString(this, kind, label, language);
+      return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_3(this, kind, label, language);
     }
     if (label != null) {
-      return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_DOMString_DOMString(this, kind, label);
+      return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_2(this, kind, label);
     }
-    return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_DOMString(this, kind);
+    return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_1(this, kind);
   }
 
-  @DomName('HTMLMediaElement.canPlayType')
-  @DocsEditable()
-  @Unstable()
-  String canPlayType(String type, [String keySystem]) => _blink.BlinkHTMLMediaElement.canPlayType_Callback_DOMString_DOMString(this, type, keySystem);
+  String canPlayType(String type, [String keySystem]) {
+    if (keySystem != null) {
+      return _blink.BlinkHTMLMediaElement.canPlayType_Callback_2(this, type, keySystem);
+    }
+    return _blink.BlinkHTMLMediaElement.canPlayType_Callback_1(this, type);
+  }
 
   @DomName('HTMLMediaElement.load')
   @DocsEditable()
@@ -21146,14 +21385,14 @@
   @DomName('HTMLMediaElement.setMediaKeys')
   @DocsEditable()
   @Experimental() // untriaged
-  void setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.setMediaKeys_Callback_MediaKeys(this, mediaKeys);
+  void setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.setMediaKeys_Callback_1(this, mediaKeys);
 
   void addKey(String keySystem, Uint8List key, [Uint8List initData, String sessionId]) {
     if (initData != null) {
-      _blink.BlinkHTMLMediaElement.webkitAddKey_Callback_DOMString_Uint8Array_Uint8Array_DOMString(this, keySystem, key, initData, sessionId);
+      _blink.BlinkHTMLMediaElement.webkitAddKey_Callback_4(this, keySystem, key, initData, sessionId);
       return;
     }
-    _blink.BlinkHTMLMediaElement.webkitAddKey_Callback_DOMString_Uint8Array(this, keySystem, key);
+    _blink.BlinkHTMLMediaElement.webkitAddKey_Callback_2(this, keySystem, key);
     return;
   }
 
@@ -21163,14 +21402,14 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#extensions
-  void cancelKeyRequest(String keySystem, String sessionId) => _blink.BlinkHTMLMediaElement.webkitCancelKeyRequest_Callback_DOMString_DOMString(this, keySystem, sessionId);
+  void cancelKeyRequest(String keySystem, String sessionId) => _blink.BlinkHTMLMediaElement.webkitCancelKeyRequest_Callback_2(this, keySystem, sessionId);
 
   void generateKeyRequest(String keySystem, [Uint8List initData]) {
     if (initData != null) {
-      _blink.BlinkHTMLMediaElement.webkitGenerateKeyRequest_Callback_DOMString_Uint8Array(this, keySystem, initData);
+      _blink.BlinkHTMLMediaElement.webkitGenerateKeyRequest_Callback_2(this, keySystem, initData);
       return;
     }
-    _blink.BlinkHTMLMediaElement.webkitGenerateKeyRequest_Callback_DOMString(this, keySystem);
+    _blink.BlinkHTMLMediaElement.webkitGenerateKeyRequest_Callback_1(this, keySystem);
     return;
   }
 
@@ -21401,6 +21640,11 @@
   // To suppress missing implicit constructor warnings.
   factory MediaKeySession._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('MediaKeySession.closed')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future get closed => _blink.BlinkMediaKeySession.closed_Getter(this);
+
   @DomName('MediaKeySession.error')
   @DocsEditable()
   MediaKeyError get error => _blink.BlinkMediaKeySession.error_Getter(this);
@@ -21413,6 +21657,21 @@
   @DocsEditable()
   String get sessionId => _blink.BlinkMediaKeySession.sessionId_Getter(this);
 
+  @DomName('MediaKeySession.release')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future release() => _blink.BlinkMediaKeySession.release_Callback(this);
+
+  Future _update(response) {
+    if ((response is TypedData)) {
+      return _blink.BlinkMediaKeySession.update_Callback_1(this, response);
+    }
+    if ((response is ByteBuffer)) {
+      return _blink.BlinkMediaKeySession.update_Callback_1(this, response);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21433,10 +21692,31 @@
   @DocsEditable()
   String get keySystem => _blink.BlinkMediaKeys.keySystem_Getter(this);
 
+  @DomName('MediaKeys.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static Future create(String keySystem) => _blink.BlinkMediaKeys.create_Callback_1(keySystem);
+
+  Future _createSession(String initDataType, initData, [String sessionType]) {
+    if ((initData is TypedData) && (initDataType is String) && sessionType == null) {
+      return _blink.BlinkMediaKeys.createSession_Callback_2(this, initDataType, initData);
+    }
+    if ((sessionType is String || sessionType == null) && (initData is TypedData) && (initDataType is String)) {
+      return _blink.BlinkMediaKeys.createSession_Callback_3(this, initDataType, initData, sessionType);
+    }
+    if ((initData is ByteBuffer) && (initDataType is String) && sessionType == null) {
+      return _blink.BlinkMediaKeys.createSession_Callback_2(this, initDataType, initData);
+    }
+    if ((sessionType is String || sessionType == null) && (initData is ByteBuffer) && (initDataType is String)) {
+      return _blink.BlinkMediaKeys.createSession_Callback_3(this, initDataType, initData, sessionType);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
   @DomName('MediaKeys.isTypeSupported')
   @DocsEditable()
   @Experimental() // untriaged
-  static bool isTypeSupported(String keySystem, String contentType) => _blink.BlinkMediaKeys.isTypeSupported_Callback_DOMString_DOMString(keySystem, contentType);
+  static bool isTypeSupported(String keySystem, String contentType) => _blink.BlinkMediaKeys.isTypeSupported_Callback_2(keySystem, contentType);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21463,19 +21743,19 @@
 
   @DomName('MediaList.mediaText')
   @DocsEditable()
-  void set mediaText(String value) => _blink.BlinkMediaList.mediaText_Setter_DOMString(this, value);
+  void set mediaText(String value) => _blink.BlinkMediaList.mediaText_Setter(this, value);
 
   @DomName('MediaList.appendMedium')
   @DocsEditable()
-  void appendMedium(String newMedium) => _blink.BlinkMediaList.appendMedium_Callback_DOMString(this, newMedium);
+  void appendMedium(String newMedium) => _blink.BlinkMediaList.appendMedium_Callback_1(this, newMedium);
 
   @DomName('MediaList.deleteMedium')
   @DocsEditable()
-  void deleteMedium(String oldMedium) => _blink.BlinkMediaList.deleteMedium_Callback_DOMString(this, oldMedium);
+  void deleteMedium(String oldMedium) => _blink.BlinkMediaList.deleteMedium_Callback_1(this, oldMedium);
 
   @DomName('MediaList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkMediaList.item_Callback_ul(this, index);
+  String item(int index) => _blink.BlinkMediaList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21532,7 +21812,7 @@
 
   @DomName('MediaSource.duration')
   @DocsEditable()
-  void set duration(num value) => _blink.BlinkMediaSource.duration_Setter_double(this, value);
+  void set duration(num value) => _blink.BlinkMediaSource.duration_Setter(this, value);
 
   @DomName('MediaSource.readyState')
   @DocsEditable()
@@ -21544,11 +21824,11 @@
 
   @DomName('MediaSource.addSourceBuffer')
   @DocsEditable()
-  SourceBuffer addSourceBuffer(String type) => _blink.BlinkMediaSource.addSourceBuffer_Callback_DOMString(this, type);
+  SourceBuffer addSourceBuffer(String type) => _blink.BlinkMediaSource.addSourceBuffer_Callback_1(this, type);
 
   void endOfStream([String error]) {
     if (error != null) {
-      _blink.BlinkMediaSource.endOfStream_Callback_DOMString(this, error);
+      _blink.BlinkMediaSource.endOfStream_Callback_1(this, error);
       return;
     }
     _blink.BlinkMediaSource.endOfStream_Callback(this);
@@ -21557,11 +21837,11 @@
 
   @DomName('MediaSource.isTypeSupported')
   @DocsEditable()
-  static bool isTypeSupported(String type) => _blink.BlinkMediaSource.isTypeSupported_Callback_DOMString(type);
+  static bool isTypeSupported(String type) => _blink.BlinkMediaSource.isTypeSupported_Callback_1(type);
 
   @DomName('MediaSource.removeSourceBuffer')
   @DocsEditable()
-  void removeSourceBuffer(SourceBuffer buffer) => _blink.BlinkMediaSource.removeSourceBuffer_Callback_SourceBuffer(this, buffer);
+  void removeSourceBuffer(SourceBuffer buffer) => _blink.BlinkMediaSource.removeSourceBuffer_Callback_1(this, buffer);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -21614,10 +21894,10 @@
       return _blink.BlinkMediaStream.constructorCallback();
     }
     if ((stream_OR_tracks is MediaStream || stream_OR_tracks == null)) {
-      return _blink.BlinkMediaStream.constructorCallback_MediaStream(stream_OR_tracks);
+      return _blink.BlinkMediaStream.constructorCallback_1(stream_OR_tracks);
     }
     if ((stream_OR_tracks is List<MediaStreamTrack> || stream_OR_tracks == null)) {
-      return _blink.BlinkMediaStream.constructorCallback_A_MediaStreamTrack_A(stream_OR_tracks);
+      return _blink.BlinkMediaStream.constructorCallback_1(stream_OR_tracks);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -21637,7 +21917,7 @@
 
   @DomName('MediaStream.addTrack')
   @DocsEditable()
-  void addTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.addTrack_Callback_MediaStreamTrack(this, track);
+  void addTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.addTrack_Callback_1(this, track);
 
   @DomName('MediaStream.clone')
   @DocsEditable()
@@ -21650,7 +21930,7 @@
 
   @DomName('MediaStream.getTrackById')
   @DocsEditable()
-  MediaStreamTrack getTrackById(String trackId) => _blink.BlinkMediaStream.getTrackById_Callback_DOMString(this, trackId);
+  MediaStreamTrack getTrackById(String trackId) => _blink.BlinkMediaStream.getTrackById_Callback_1(this, trackId);
 
   @DomName('MediaStream.getTracks')
   @DocsEditable()
@@ -21663,7 +21943,7 @@
 
   @DomName('MediaStream.removeTrack')
   @DocsEditable()
-  void removeTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.removeTrack_Callback_MediaStreamTrack(this, track);
+  void removeTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.removeTrack_Callback_1(this, track);
 
   @DomName('MediaStream.stop')
   @DocsEditable()
@@ -21770,7 +22050,7 @@
 
   @DomName('MediaStreamTrack.enabled')
   @DocsEditable()
-  void set enabled(bool value) => _blink.BlinkMediaStreamTrack.enabled_Setter_boolean(this, value);
+  void set enabled(bool value) => _blink.BlinkMediaStreamTrack.enabled_Setter(this, value);
 
   @DomName('MediaStreamTrack.id')
   @DocsEditable()
@@ -21801,7 +22081,7 @@
   @DomName('MediaStreamTrack.getSources')
   @DocsEditable()
   @Experimental() // untriaged
-  static void _getSources(MediaStreamTrackSourcesCallback callback) => _blink.BlinkMediaStreamTrack.getSources_Callback_MediaStreamTrackSourcesCallback(callback);
+  static void _getSources(MediaStreamTrackSourcesCallback callback) => _blink.BlinkMediaStreamTrack.getSources_Callback_1(callback);
 
   static Future<List<SourceInfo>> getSources() {
     var completer = new Completer<List<SourceInfo>>();
@@ -21933,7 +22213,7 @@
   @DomName('HTMLMenuElement.label')
   @DocsEditable()
   @Experimental() // untriaged
-  void set label(String value) => _blink.BlinkHTMLMenuElement.label_Setter_DOMString(this, value);
+  void set label(String value) => _blink.BlinkHTMLMenuElement.label_Setter(this, value);
 
   @DomName('HTMLMenuElement.type')
   @DocsEditable()
@@ -21943,7 +22223,7 @@
   @DomName('HTMLMenuElement.type')
   @DocsEditable()
   @Experimental() // untriaged
-  void set type(String value) => _blink.BlinkHTMLMenuElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLMenuElement.type_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21974,7 +22254,7 @@
   @DomName('HTMLMenuItemElement.checked')
   @DocsEditable()
   @Experimental() // untriaged
-  void set checked(bool value) => _blink.BlinkHTMLMenuItemElement.checked_Setter_boolean(this, value);
+  void set checked(bool value) => _blink.BlinkHTMLMenuItemElement.checked_Setter(this, value);
 
   @DomName('HTMLMenuItemElement.default')
   @DocsEditable()
@@ -21984,7 +22264,7 @@
   @DomName('HTMLMenuItemElement.default')
   @DocsEditable()
   @Experimental() // untriaged
-  void set defaultValue(bool value) => _blink.BlinkHTMLMenuItemElement.default_Setter_boolean(this, value);
+  void set defaultValue(bool value) => _blink.BlinkHTMLMenuItemElement.default_Setter(this, value);
 
   @DomName('HTMLMenuItemElement.disabled')
   @DocsEditable()
@@ -21994,7 +22274,7 @@
   @DomName('HTMLMenuItemElement.disabled')
   @DocsEditable()
   @Experimental() // untriaged
-  void set disabled(bool value) => _blink.BlinkHTMLMenuItemElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLMenuItemElement.disabled_Setter(this, value);
 
   @DomName('HTMLMenuItemElement.label')
   @DocsEditable()
@@ -22004,7 +22284,7 @@
   @DomName('HTMLMenuItemElement.label')
   @DocsEditable()
   @Experimental() // untriaged
-  void set label(String value) => _blink.BlinkHTMLMenuItemElement.label_Setter_DOMString(this, value);
+  void set label(String value) => _blink.BlinkHTMLMenuItemElement.label_Setter(this, value);
 
   @DomName('HTMLMenuItemElement.type')
   @DocsEditable()
@@ -22014,7 +22294,7 @@
   @DomName('HTMLMenuItemElement.type')
   @DocsEditable()
   @Experimental() // untriaged
-  void set type(String value) => _blink.BlinkHTMLMenuItemElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLMenuItemElement.type_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22083,7 +22363,7 @@
 
   @DomName('MessageEvent.initMessageEvent')
   @DocsEditable()
-  void _initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List<MessagePort> messagePorts) => _blink.BlinkMessageEvent.initMessageEvent_Callback_DOMString_boolean_boolean_ScriptValue_DOMString_DOMString_Window_A_MessagePort_A(this, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts);
+  void _initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List<MessagePort> messagePorts) => _blink.BlinkMessageEvent.initMessageEvent_Callback_8(this, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22116,7 +22396,7 @@
 
   @DomName('MessagePort.postMessage')
   @DocsEditable()
-  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkMessagePort.postMessage_Callback_ScriptValue_SEQ_MessagePort_SEQ(this, message, transfer);
+  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkMessagePort.postMessage_Callback_2(this, message, transfer);
 
   @DomName('MessagePort.start')
   @DocsEditable()
@@ -22157,7 +22437,7 @@
 
   @DomName('HTMLMetaElement.content')
   @DocsEditable()
-  void set content(String value) => _blink.BlinkHTMLMetaElement.content_Setter_DOMString(this, value);
+  void set content(String value) => _blink.BlinkHTMLMetaElement.content_Setter(this, value);
 
   @DomName('HTMLMetaElement.httpEquiv')
   @DocsEditable()
@@ -22165,7 +22445,7 @@
 
   @DomName('HTMLMetaElement.httpEquiv')
   @DocsEditable()
-  void set httpEquiv(String value) => _blink.BlinkHTMLMetaElement.httpEquiv_Setter_DOMString(this, value);
+  void set httpEquiv(String value) => _blink.BlinkHTMLMetaElement.httpEquiv_Setter(this, value);
 
   @DomName('HTMLMetaElement.name')
   @DocsEditable()
@@ -22173,7 +22453,7 @@
 
   @DomName('HTMLMetaElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLMetaElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLMetaElement.name_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22247,7 +22527,7 @@
 
   @DomName('HTMLMeterElement.high')
   @DocsEditable()
-  void set high(num value) => _blink.BlinkHTMLMeterElement.high_Setter_double(this, value);
+  void set high(num value) => _blink.BlinkHTMLMeterElement.high_Setter(this, value);
 
   @DomName('HTMLMeterElement.labels')
   @DocsEditable()
@@ -22260,7 +22540,7 @@
 
   @DomName('HTMLMeterElement.low')
   @DocsEditable()
-  void set low(num value) => _blink.BlinkHTMLMeterElement.low_Setter_double(this, value);
+  void set low(num value) => _blink.BlinkHTMLMeterElement.low_Setter(this, value);
 
   @DomName('HTMLMeterElement.max')
   @DocsEditable()
@@ -22268,7 +22548,7 @@
 
   @DomName('HTMLMeterElement.max')
   @DocsEditable()
-  void set max(num value) => _blink.BlinkHTMLMeterElement.max_Setter_double(this, value);
+  void set max(num value) => _blink.BlinkHTMLMeterElement.max_Setter(this, value);
 
   @DomName('HTMLMeterElement.min')
   @DocsEditable()
@@ -22276,7 +22556,7 @@
 
   @DomName('HTMLMeterElement.min')
   @DocsEditable()
-  void set min(num value) => _blink.BlinkHTMLMeterElement.min_Setter_double(this, value);
+  void set min(num value) => _blink.BlinkHTMLMeterElement.min_Setter(this, value);
 
   @DomName('HTMLMeterElement.optimum')
   @DocsEditable()
@@ -22284,7 +22564,7 @@
 
   @DomName('HTMLMeterElement.optimum')
   @DocsEditable()
-  void set optimum(num value) => _blink.BlinkHTMLMeterElement.optimum_Setter_double(this, value);
+  void set optimum(num value) => _blink.BlinkHTMLMeterElement.optimum_Setter(this, value);
 
   @DomName('HTMLMeterElement.value')
   @DocsEditable()
@@ -22292,7 +22572,7 @@
 
   @DomName('HTMLMeterElement.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkHTMLMeterElement.value_Setter_double(this, value);
+  void set value(num value) => _blink.BlinkHTMLMeterElement.value_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22446,10 +22726,10 @@
 
   void send(Uint8List data, [num timestamp]) {
     if (timestamp != null) {
-      _blink.BlinkMIDIOutput.send_Callback_Uint8Array_double(this, data, timestamp);
+      _blink.BlinkMIDIOutput.send_Callback_2(this, data, timestamp);
       return;
     }
-    _blink.BlinkMIDIOutput.send_Callback_Uint8Array(this, data);
+    _blink.BlinkMIDIOutput.send_Callback_1(this, data);
     return;
   }
 
@@ -22557,10 +22837,10 @@
   MimeType operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkMimeTypeArray.item_Callback_ul(this, index);
+    return _blink.BlinkMimeTypeArray.item_Callback_1(this, index);
   }
 
-  MimeType _nativeIndexedGetter(int index) => _blink.BlinkMimeTypeArray.item_Callback_ul(this, index);
+  MimeType _nativeIndexedGetter(int index) => _blink.BlinkMimeTypeArray.item_Callback_1(this, index);
 
   void operator[]=(int index, MimeType value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -22602,15 +22882,15 @@
 
   @DomName('MimeTypeArray.__getter__')
   @DocsEditable()
-  MimeType __getter__(String name) => _blink.BlinkMimeTypeArray.$__getter___Callback_DOMString(this, name);
+  MimeType __getter__(String name) => _blink.BlinkMimeTypeArray.$__getter___Callback_1(this, name);
 
   @DomName('MimeTypeArray.item')
   @DocsEditable()
-  MimeType item(int index) => _blink.BlinkMimeTypeArray.item_Callback_ul(this, index);
+  MimeType item(int index) => _blink.BlinkMimeTypeArray.item_Callback_1(this, index);
 
   @DomName('MimeTypeArray.namedItem')
   @DocsEditable()
-  MimeType namedItem(String name) => _blink.BlinkMimeTypeArray.namedItem_Callback_DOMString(this, name);
+  MimeType namedItem(String name) => _blink.BlinkMimeTypeArray.namedItem_Callback_1(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22639,7 +22919,7 @@
 
   @DomName('HTMLModElement.cite')
   @DocsEditable()
-  void set cite(String value) => _blink.BlinkHTMLModElement.cite_Setter_DOMString(this, value);
+  void set cite(String value) => _blink.BlinkHTMLModElement.cite_Setter(this, value);
 
   @DomName('HTMLModElement.dateTime')
   @DocsEditable()
@@ -22647,7 +22927,7 @@
 
   @DomName('HTMLModElement.dateTime')
   @DocsEditable()
-  void set dateTime(String value) => _blink.BlinkHTMLModElement.dateTime_Setter_DOMString(this, value);
+  void set dateTime(String value) => _blink.BlinkHTMLModElement.dateTime_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22787,7 +23067,7 @@
 
   @DomName('MouseEvent.initMouseEvent')
   @DocsEditable()
-  void _initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) => _blink.BlinkMouseEvent.initMouseEvent_Callback_DOMString_boolean_boolean_Window_long_long_long_long_long_boolean_boolean_boolean_boolean_us_EventTarget(this, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
+  void _initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) => _blink.BlinkMouseEvent.initMouseEvent_Callback_15(this, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
 
 
   @deprecated
@@ -22857,7 +23137,7 @@
   factory MutationObserver._(MutationCallback callback) => _create(callback);
 
   @DocsEditable()
-  static MutationObserver _create(callback) => _blink.BlinkMutationObserver.constructorCallback_MutationCallback(callback);
+  static MutationObserver _create(callback) => _blink.BlinkMutationObserver.constructorCallback_1(callback);
 
   @DomName('MutationObserver.disconnect')
   @DocsEditable()
@@ -22865,7 +23145,7 @@
 
   @DomName('MutationObserver.observe')
   @DocsEditable()
-  void _observe(Node target, Map options) => _blink.BlinkMutationObserver.observe_Callback_Node_Dictionary(this, target, options);
+  void _observe(Node target, Map options) => _blink.BlinkMutationObserver.observe_Callback_2(this, target, options);
 
   @DomName('MutationObserver.takeRecords')
   @DocsEditable()
@@ -23143,6 +23423,11 @@
   // http://www.w3.org/TR/quota-api/#accessing-storagequota
   DeprecatedStorageQuota get temporaryStorage => _blink.BlinkNavigator.webkitTemporaryStorage_Getter(this);
 
+  @DomName('Navigator.getBattery')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getBattery() => _blink.BlinkNavigator.getBattery_Callback(this);
+
   @DomName('Navigator.getGamepads')
   @DocsEditable()
   @Experimental() // untriaged
@@ -23157,25 +23442,25 @@
   @DomName('Navigator.isProtocolHandlerRegistered')
   @DocsEditable()
   @Experimental() // untriaged
-  String isProtocolHandlerRegistered(String scheme, String url) => _blink.BlinkNavigator.isProtocolHandlerRegistered_Callback_DOMString_DOMString(this, scheme, url);
+  String isProtocolHandlerRegistered(String scheme, String url) => _blink.BlinkNavigator.isProtocolHandlerRegistered_Callback_2(this, scheme, url);
 
   @DomName('Navigator.registerProtocolHandler')
   @DocsEditable()
   @Unstable()
-  void registerProtocolHandler(String scheme, String url, String title) => _blink.BlinkNavigator.registerProtocolHandler_Callback_DOMString_DOMString_DOMString(this, scheme, url, title);
+  void registerProtocolHandler(String scheme, String url, String title) => _blink.BlinkNavigator.registerProtocolHandler_Callback_3(this, scheme, url, title);
 
   bool sendBeacon(String url, data) {
     if ((data is String || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.sendBeacon_Callback_DOMString_DOMString(this, url, data);
+      return _blink.BlinkNavigator.sendBeacon_Callback_2(this, url, data);
     }
     if ((data is TypedData || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.sendBeacon_Callback_DOMString_ArrayBufferView(this, url, data);
+      return _blink.BlinkNavigator.sendBeacon_Callback_2(this, url, data);
     }
     if ((data is FormData || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.sendBeacon_Callback_DOMString_FormData(this, url, data);
+      return _blink.BlinkNavigator.sendBeacon_Callback_2(this, url, data);
     }
     if ((data is Blob || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.sendBeacon_Callback_DOMString_Blob(this, url, data);
+      return _blink.BlinkNavigator.sendBeacon_Callback_2(this, url, data);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -23183,13 +23468,13 @@
   @DomName('Navigator.unregisterProtocolHandler')
   @DocsEditable()
   @Experimental() // untriaged
-  void unregisterProtocolHandler(String scheme, String url) => _blink.BlinkNavigator.unregisterProtocolHandler_Callback_DOMString_DOMString(this, scheme, url);
+  void unregisterProtocolHandler(String scheme, String url) => _blink.BlinkNavigator.unregisterProtocolHandler_Callback_2(this, scheme, url);
 
   @DomName('Navigator.webkitGetUserMedia')
   @DocsEditable()
   // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#navigatorusermedia
   @Experimental()
-  void _getUserMedia(Map options, _NavigatorUserMediaSuccessCallback successCallback, _NavigatorUserMediaErrorCallback errorCallback) => _blink.BlinkNavigator.webkitGetUserMedia_Callback_Dictionary_NavigatorUserMediaSuccessCallback_NavigatorUserMediaErrorCallback(this, options, successCallback, errorCallback);
+  void _getUserMedia(Map options, _NavigatorUserMediaSuccessCallback successCallback, _NavigatorUserMediaErrorCallback errorCallback) => _blink.BlinkNavigator.webkitGetUserMedia_Callback_3(this, options, successCallback, errorCallback);
 
   @DomName('Navigator.appCodeName')
   @DocsEditable()
@@ -23933,7 +24218,7 @@
    */
   @DomName('Node.textContent')
   @DocsEditable()
-  void set text(String value) => _blink.BlinkNode.textContent_Setter_DOMString(this, value);
+  void set text(String value) => _blink.BlinkNode.textContent_Setter(this, value);
 
   /**
    * Adds a node to the end of the child [nodes] list of this node.
@@ -23946,7 +24231,7 @@
    */
   @DomName('Node.appendChild')
   @DocsEditable()
-  Node append(Node newChild) => _blink.BlinkNode.appendChild_Callback_Node(this, newChild);
+  Node append(Node newChild) => _blink.BlinkNode.appendChild_Callback_1(this, newChild);
 
   /**
    * Returns a copy of this node.
@@ -23962,7 +24247,7 @@
    */
   @DomName('Node.cloneNode')
   @DocsEditable()
-  Node clone(bool deep) => _blink.BlinkNode.cloneNode_Callback_boolean(this, deep);
+  Node clone(bool deep) => _blink.BlinkNode.cloneNode_Callback_1(this, deep);
 
   /**
    * Returns true if this node contains the specified node.
@@ -23974,7 +24259,7 @@
    */
   @DomName('Node.contains')
   @DocsEditable()
-  bool contains(Node other) => _blink.BlinkNode.contains_Callback_Node(this, other);
+  bool contains(Node other) => _blink.BlinkNode.contains_Callback_1(this, other);
 
   /**
    * Returns true if this node has any children.
@@ -24000,15 +24285,15 @@
    */
   @DomName('Node.insertBefore')
   @DocsEditable()
-  Node insertBefore(Node newChild, Node refChild) => _blink.BlinkNode.insertBefore_Callback_Node_Node(this, newChild, refChild);
+  Node insertBefore(Node newChild, Node refChild) => _blink.BlinkNode.insertBefore_Callback_2(this, newChild, refChild);
 
   @DomName('Node.removeChild')
   @DocsEditable()
-  Node _removeChild(Node oldChild) => _blink.BlinkNode.removeChild_Callback_Node(this, oldChild);
+  Node _removeChild(Node oldChild) => _blink.BlinkNode.removeChild_Callback_1(this, oldChild);
 
   @DomName('Node.replaceChild')
   @DocsEditable()
-  Node _replaceChild(Node newChild, Node oldChild) => _blink.BlinkNode.replaceChild_Callback_Node_Node(this, newChild, oldChild);
+  Node _replaceChild(Node newChild, Node oldChild) => _blink.BlinkNode.replaceChild_Callback_2(this, newChild, oldChild);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24133,10 +24418,10 @@
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkNodeList.item_Callback_ul(this, index);
+    return _blink.BlinkNodeList.item_Callback_1(this, index);
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkNodeList.item_Callback_ul(this, index);
+  Node _nativeIndexedGetter(int index) => _blink.BlinkNodeList.item_Callback_1(this, index);
 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -24178,7 +24463,7 @@
 
   @DomName('NodeList.item')
   @DocsEditable()
-  Node _item(int index) => _blink.BlinkNodeList.item_Callback_ul(this, index);
+  Node _item(int index) => _blink.BlinkNodeList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -24249,7 +24534,7 @@
   @DomName('Notification.Notification')
   @DocsEditable()
   static Notification _factoryNotification(String title, [Map options]) {
-    return _blink.BlinkNotification.constructorCallback_DOMString_Dictionary(title, options);
+    return _blink.BlinkNotification.constructorCallback_2(title, options);
   }
 
   @DomName('Notification.body')
@@ -24290,9 +24575,14 @@
   @DocsEditable()
   void close() => _blink.BlinkNotification.close_Callback(this);
 
-  @DomName('Notification.requestPermission')
-  @DocsEditable()
-  static void _requestPermission([_NotificationPermissionCallback callback]) => _blink.BlinkNotification.requestPermission_Callback_NotificationPermissionCallback(callback);
+  static void _requestPermission([_NotificationPermissionCallback callback]) {
+    if (callback != null) {
+      _blink.BlinkNotification.requestPermission_Callback_1(callback);
+      return;
+    }
+    _blink.BlinkNotification.requestPermission_Callback();
+    return;
+  }
 
   static Future<String> requestPermission() {
     var completer = new Completer<String>();
@@ -24362,7 +24652,7 @@
 
   @DomName('HTMLOListElement.reversed')
   @DocsEditable()
-  void set reversed(bool value) => _blink.BlinkHTMLOListElement.reversed_Setter_boolean(this, value);
+  void set reversed(bool value) => _blink.BlinkHTMLOListElement.reversed_Setter(this, value);
 
   @DomName('HTMLOListElement.start')
   @DocsEditable()
@@ -24370,7 +24660,7 @@
 
   @DomName('HTMLOListElement.start')
   @DocsEditable()
-  void set start(int value) => _blink.BlinkHTMLOListElement.start_Setter_long(this, value);
+  void set start(int value) => _blink.BlinkHTMLOListElement.start_Setter(this, value);
 
   @DomName('HTMLOListElement.type')
   @DocsEditable()
@@ -24378,7 +24668,7 @@
 
   @DomName('HTMLOListElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLOListElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLOListElement.type_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24417,7 +24707,7 @@
 
   @DomName('HTMLObjectElement.data')
   @DocsEditable()
-  void set data(String value) => _blink.BlinkHTMLObjectElement.data_Setter_DOMString(this, value);
+  void set data(String value) => _blink.BlinkHTMLObjectElement.data_Setter(this, value);
 
   @DomName('HTMLObjectElement.form')
   @DocsEditable()
@@ -24429,7 +24719,7 @@
 
   @DomName('HTMLObjectElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLObjectElement.height_Setter_DOMString(this, value);
+  void set height(String value) => _blink.BlinkHTMLObjectElement.height_Setter(this, value);
 
   @DomName('HTMLObjectElement.integrity')
   @DocsEditable()
@@ -24439,7 +24729,7 @@
   @DomName('HTMLObjectElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLObjectElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLObjectElement.integrity_Setter(this, value);
 
   @DomName('HTMLObjectElement.name')
   @DocsEditable()
@@ -24447,7 +24737,7 @@
 
   @DomName('HTMLObjectElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLObjectElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLObjectElement.name_Setter(this, value);
 
   @DomName('HTMLObjectElement.type')
   @DocsEditable()
@@ -24455,7 +24745,7 @@
 
   @DomName('HTMLObjectElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLObjectElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLObjectElement.type_Setter(this, value);
 
   @DomName('HTMLObjectElement.useMap')
   @DocsEditable()
@@ -24463,7 +24753,7 @@
 
   @DomName('HTMLObjectElement.useMap')
   @DocsEditable()
-  void set useMap(String value) => _blink.BlinkHTMLObjectElement.useMap_Setter_DOMString(this, value);
+  void set useMap(String value) => _blink.BlinkHTMLObjectElement.useMap_Setter(this, value);
 
   @DomName('HTMLObjectElement.validationMessage')
   @DocsEditable()
@@ -24479,7 +24769,7 @@
 
   @DomName('HTMLObjectElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLObjectElement.width_Setter_DOMString(this, value);
+  void set width(String value) => _blink.BlinkHTMLObjectElement.width_Setter(this, value);
 
   @DomName('HTMLObjectElement.willValidate')
   @DocsEditable()
@@ -24487,11 +24777,11 @@
 
   @DomName('HTMLObjectElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) => _blink.BlinkHTMLObjectElement.$__getter___Callback_ul(this, index_OR_name);
+  bool __getter__(index_OR_name) => _blink.BlinkHTMLObjectElement.$__getter___Callback_1(this, index_OR_name);
 
   @DomName('HTMLObjectElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLObjectElement.$__setter___Callback_ul_Node(this, index_OR_name, value);
+  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLObjectElement.$__setter___Callback_2(this, index_OR_name, value);
 
   @DomName('HTMLObjectElement.checkValidity')
   @DocsEditable()
@@ -24499,7 +24789,7 @@
 
   @DomName('HTMLObjectElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLObjectElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLObjectElement.setCustomValidity_Callback_1(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24531,7 +24821,7 @@
 
   @DomName('HTMLOptGroupElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLOptGroupElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLOptGroupElement.disabled_Setter(this, value);
 
   @DomName('HTMLOptGroupElement.label')
   @DocsEditable()
@@ -24539,7 +24829,7 @@
 
   @DomName('HTMLOptGroupElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLOptGroupElement.label_Setter_DOMString(this, value);
+  void set label(String value) => _blink.BlinkHTMLOptGroupElement.label_Setter(this, value);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -24556,7 +24846,7 @@
   @DomName('HTMLOptionElement.HTMLOptionElement')
   @DocsEditable()
   factory OptionElement._([String data, String value, bool defaultSelected, bool selected]) {
-    return _blink.BlinkHTMLOptionElement.constructorCallback_DOMString_DOMString_boolean_boolean(data, value, defaultSelected, selected);
+    return _blink.BlinkHTMLOptionElement.constructorCallback_4(data, value, defaultSelected, selected);
   }
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -24571,7 +24861,7 @@
 
   @DomName('HTMLOptionElement.defaultSelected')
   @DocsEditable()
-  void set defaultSelected(bool value) => _blink.BlinkHTMLOptionElement.defaultSelected_Setter_boolean(this, value);
+  void set defaultSelected(bool value) => _blink.BlinkHTMLOptionElement.defaultSelected_Setter(this, value);
 
   @DomName('HTMLOptionElement.disabled')
   @DocsEditable()
@@ -24579,7 +24869,7 @@
 
   @DomName('HTMLOptionElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLOptionElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLOptionElement.disabled_Setter(this, value);
 
   @DomName('HTMLOptionElement.form')
   @DocsEditable()
@@ -24595,7 +24885,7 @@
 
   @DomName('HTMLOptionElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLOptionElement.label_Setter_DOMString(this, value);
+  void set label(String value) => _blink.BlinkHTMLOptionElement.label_Setter(this, value);
 
   @DomName('HTMLOptionElement.selected')
   @DocsEditable()
@@ -24603,7 +24893,7 @@
 
   @DomName('HTMLOptionElement.selected')
   @DocsEditable()
-  void set selected(bool value) => _blink.BlinkHTMLOptionElement.selected_Setter_boolean(this, value);
+  void set selected(bool value) => _blink.BlinkHTMLOptionElement.selected_Setter(this, value);
 
   @DomName('HTMLOptionElement.value')
   @DocsEditable()
@@ -24611,7 +24901,7 @@
 
   @DomName('HTMLOptionElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLOptionElement.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkHTMLOptionElement.value_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24649,7 +24939,7 @@
 
   @DomName('HTMLOutputElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLOutputElement.defaultValue_Setter_DOMString(this, value);
+  void set defaultValue(String value) => _blink.BlinkHTMLOutputElement.defaultValue_Setter(this, value);
 
   @DomName('HTMLOutputElement.form')
   @DocsEditable()
@@ -24670,7 +24960,7 @@
 
   @DomName('HTMLOutputElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLOutputElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLOutputElement.name_Setter(this, value);
 
   @DomName('HTMLOutputElement.type')
   @DocsEditable()
@@ -24690,7 +24980,7 @@
 
   @DomName('HTMLOutputElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLOutputElement.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkHTMLOutputElement.value_Setter(this, value);
 
   @DomName('HTMLOutputElement.willValidate')
   @DocsEditable()
@@ -24702,7 +24992,7 @@
 
   @DomName('HTMLOutputElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLOutputElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLOutputElement.setCustomValidity_Callback_1(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24818,7 +25108,7 @@
 
   @DomName('HTMLParamElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLParamElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLParamElement.name_Setter(this, value);
 
   @DomName('HTMLParamElement.value')
   @DocsEditable()
@@ -24826,7 +25116,7 @@
 
   @DomName('HTMLParamElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLParamElement.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkHTMLParamElement.value_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24866,12 +25156,12 @@
   @DomName('ParentNode.querySelector')
   @DocsEditable()
   @Experimental() // untriaged
-  Element querySelector(String selectors) => _blink.BlinkParentNode.querySelector_Callback_DOMString(this, selectors);
+  Element querySelector(String selectors) => _blink.BlinkParentNode.querySelector_Callback_1(this, selectors);
 
   @DomName('ParentNode.querySelectorAll')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> querySelectorAll(String selectors) => _blink.BlinkParentNode.querySelectorAll_Callback_DOMString(this, selectors);
+  List<Node> querySelectorAll(String selectors) => _blink.BlinkParentNode.querySelectorAll_Callback_1(this, selectors);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24895,37 +25185,37 @@
       return _blink.BlinkPath2D.constructorCallback();
     }
     if ((path_OR_text is Path2D || path_OR_text == null)) {
-      return _blink.BlinkPath2D.constructorCallback_Path2D(path_OR_text);
+      return _blink.BlinkPath2D.constructorCallback_1(path_OR_text);
     }
     if ((path_OR_text is String || path_OR_text == null)) {
-      return _blink.BlinkPath2D.constructorCallback_DOMString(path_OR_text);
+      return _blink.BlinkPath2D.constructorCallback_1(path_OR_text);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void addPath(Path2D path, [Matrix transform]) {
     if (transform != null) {
-      _blink.BlinkPath2D.addPath_Callback_Path2D_SVGMatrix(this, path, transform);
+      _blink.BlinkPath2D.addPath_Callback_2(this, path, transform);
       return;
     }
-    _blink.BlinkPath2D.addPath_Callback_Path2D(this, path);
+    _blink.BlinkPath2D.addPath_Callback_1(this, path);
     return;
   }
 
   @DomName('Path2D.arc')
   @DocsEditable()
   @Experimental() // untriaged
-  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.arc_Callback_float_float_float_float_float_boolean(this, x, y, radius, startAngle, endAngle, anticlockwise);
+  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.arc_Callback_6(this, x, y, radius, startAngle, endAngle, anticlockwise);
 
   @DomName('Path2D.arcTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkPath2D.arcTo_Callback_float_float_float_float_float(this, x1, y1, x2, y2, radius);
+  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkPath2D.arcTo_Callback_5(this, x1, y1, x2, y2, radius);
 
   @DomName('Path2D.bezierCurveTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkPath2D.bezierCurveTo_Callback_float_float_float_float_float_float(this, cp1x, cp1y, cp2x, cp2y, x, y);
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkPath2D.bezierCurveTo_Callback_6(this, cp1x, cp1y, cp2x, cp2y, x, y);
 
   @DomName('Path2D.closePath')
   @DocsEditable()
@@ -24935,27 +25225,27 @@
   @DomName('Path2D.ellipse')
   @DocsEditable()
   @Experimental() // untriaged
-  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.ellipse_Callback_float_float_float_float_float_float_float_boolean(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.ellipse_Callback_8(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
 
   @DomName('Path2D.lineTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void lineTo(num x, num y) => _blink.BlinkPath2D.lineTo_Callback_float_float(this, x, y);
+  void lineTo(num x, num y) => _blink.BlinkPath2D.lineTo_Callback_2(this, x, y);
 
   @DomName('Path2D.moveTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void moveTo(num x, num y) => _blink.BlinkPath2D.moveTo_Callback_float_float(this, x, y);
+  void moveTo(num x, num y) => _blink.BlinkPath2D.moveTo_Callback_2(this, x, y);
 
   @DomName('Path2D.quadraticCurveTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkPath2D.quadraticCurveTo_Callback_float_float_float_float(this, cpx, cpy, x, y);
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkPath2D.quadraticCurveTo_Callback_4(this, cpx, cpy, x, y);
 
   @DomName('Path2D.rect')
   @DocsEditable()
   @Experimental() // untriaged
-  void rect(num x, num y, num width, num height) => _blink.BlinkPath2D.rect_Callback_float_float_float_float(this, x, y, width, height);
+  void rect(num x, num y, num width, num height) => _blink.BlinkPath2D.rect_Callback_4(this, x, y, width, height);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25008,13 +25298,13 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void clearMarks(String markName) => _blink.BlinkPerformance.clearMarks_Callback_DOMString(this, markName);
+  void clearMarks(String markName) => _blink.BlinkPerformance.clearMarks_Callback_1(this, markName);
 
   @DomName('Performance.clearMeasures')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void clearMeasures(String measureName) => _blink.BlinkPerformance.clearMeasures_Callback_DOMString(this, measureName);
+  void clearMeasures(String measureName) => _blink.BlinkPerformance.clearMeasures_Callback_1(this, measureName);
 
   @DomName('Performance.getEntries')
   @DocsEditable()
@@ -25026,25 +25316,25 @@
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntriesByName(String name, String entryType) => _blink.BlinkPerformance.getEntriesByName_Callback_DOMString_DOMString(this, name, entryType);
+  List<PerformanceEntry> getEntriesByName(String name, String entryType) => _blink.BlinkPerformance.getEntriesByName_Callback_2(this, name, entryType);
 
   @DomName('Performance.getEntriesByType')
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntriesByType(String entryType) => _blink.BlinkPerformance.getEntriesByType_Callback_DOMString(this, entryType);
+  List<PerformanceEntry> getEntriesByType(String entryType) => _blink.BlinkPerformance.getEntriesByType_Callback_1(this, entryType);
 
   @DomName('Performance.mark')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void mark(String markName) => _blink.BlinkPerformance.mark_Callback_DOMString(this, markName);
+  void mark(String markName) => _blink.BlinkPerformance.mark_Callback_1(this, markName);
 
   @DomName('Performance.measure')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void measure(String measureName, String startMark, String endMark) => _blink.BlinkPerformance.measure_Callback_DOMString_DOMString_DOMString(this, measureName, startMark, endMark);
+  void measure(String measureName, String startMark, String endMark) => _blink.BlinkPerformance.measure_Callback_3(this, measureName, startMark, endMark);
 
   @DomName('Performance.now')
   @DocsEditable()
@@ -25064,7 +25354,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3c-test.org/webperf/specs/ResourceTiming/#performanceresourcetiming-methods
-  void setResourceTimingBufferSize(int maxSize) => _blink.BlinkPerformance.webkitSetResourceTimingBufferSize_Callback_ul(this, maxSize);
+  void setResourceTimingBufferSize(int maxSize) => _blink.BlinkPerformance.webkitSetResourceTimingBufferSize_Callback_1(this, maxSize);
 
   /// Stream of `resourcetimingbufferfull` events handled by this [Performance].
   @DomName('Performance.onwebkitresourcetimingbufferfull')
@@ -25396,15 +25686,15 @@
 
   @DomName('Plugin.__getter__')
   @DocsEditable()
-  MimeType __getter__(String name) => _blink.BlinkPlugin.$__getter___Callback_DOMString(this, name);
+  MimeType __getter__(String name) => _blink.BlinkPlugin.$__getter___Callback_1(this, name);
 
   @DomName('Plugin.item')
   @DocsEditable()
-  MimeType item(int index) => _blink.BlinkPlugin.item_Callback_ul(this, index);
+  MimeType item(int index) => _blink.BlinkPlugin.item_Callback_1(this, index);
 
   @DomName('Plugin.namedItem')
   @DocsEditable()
-  MimeType namedItem(String name) => _blink.BlinkPlugin.namedItem_Callback_DOMString(this, name);
+  MimeType namedItem(String name) => _blink.BlinkPlugin.namedItem_Callback_1(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25428,10 +25718,10 @@
   Plugin operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkPluginArray.item_Callback_ul(this, index);
+    return _blink.BlinkPluginArray.item_Callback_1(this, index);
   }
 
-  Plugin _nativeIndexedGetter(int index) => _blink.BlinkPluginArray.item_Callback_ul(this, index);
+  Plugin _nativeIndexedGetter(int index) => _blink.BlinkPluginArray.item_Callback_1(this, index);
 
   void operator[]=(int index, Plugin value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -25473,19 +25763,19 @@
 
   @DomName('PluginArray.__getter__')
   @DocsEditable()
-  Plugin __getter__(String name) => _blink.BlinkPluginArray.$__getter___Callback_DOMString(this, name);
+  Plugin __getter__(String name) => _blink.BlinkPluginArray.$__getter___Callback_1(this, name);
 
   @DomName('PluginArray.item')
   @DocsEditable()
-  Plugin item(int index) => _blink.BlinkPluginArray.item_Callback_ul(this, index);
+  Plugin item(int index) => _blink.BlinkPluginArray.item_Callback_1(this, index);
 
   @DomName('PluginArray.namedItem')
   @DocsEditable()
-  Plugin namedItem(String name) => _blink.BlinkPluginArray.namedItem_Callback_DOMString(this, name);
+  Plugin namedItem(String name) => _blink.BlinkPluginArray.namedItem_Callback_1(this, name);
 
   @DomName('PluginArray.refresh')
   @DocsEditable()
-  void refresh(bool reload) => _blink.BlinkPluginArray.refresh_Callback_boolean(this, reload);
+  void refresh(bool reload) => _blink.BlinkPluginArray.refresh_Callback_1(this, reload);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25654,7 +25944,7 @@
 
   @DomName('HTMLProgressElement.max')
   @DocsEditable()
-  void set max(num value) => _blink.BlinkHTMLProgressElement.max_Setter_double(this, value);
+  void set max(num value) => _blink.BlinkHTMLProgressElement.max_Setter(this, value);
 
   @DomName('HTMLProgressElement.position')
   @DocsEditable()
@@ -25666,7 +25956,7 @@
 
   @DomName('HTMLProgressElement.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkHTMLProgressElement.value_Setter_double(this, value);
+  void set value(num value) => _blink.BlinkHTMLProgressElement.value_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25729,6 +26019,11 @@
   // To suppress missing implicit constructor warnings.
   factory PushManager._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('PushManager.register')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future register(String senderId) => _blink.BlinkPushManager.register_Callback_1(this, senderId);
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -25784,7 +26079,7 @@
 
   @DomName('HTMLQuoteElement.cite')
   @DocsEditable()
-  void set cite(String value) => _blink.BlinkHTMLQuoteElement.cite_Setter_DOMString(this, value);
+  void set cite(String value) => _blink.BlinkHTMLQuoteElement.cite_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25907,7 +26202,7 @@
 
   void collapse([bool toStart]) {
     if (toStart != null) {
-      _blink.BlinkRange.collapse_Callback_boolean(this, toStart);
+      _blink.BlinkRange.collapse_Callback_1(this, toStart);
       return;
     }
     _blink.BlinkRange.collapse_Callback(this);
@@ -25916,11 +26211,11 @@
 
   @DomName('Range.comparePoint')
   @DocsEditable()
-  int comparePoint(Node refNode, int offset) => _blink.BlinkRange.comparePoint_Callback_Node_long(this, refNode, offset);
+  int comparePoint(Node refNode, int offset) => _blink.BlinkRange.comparePoint_Callback_2(this, refNode, offset);
 
   @DomName('Range.createContextualFragment')
   @DocsEditable()
-  DocumentFragment createContextualFragment(String html) => _blink.BlinkRange.createContextualFragment_Callback_DOMString(this, html);
+  DocumentFragment createContextualFragment(String html) => _blink.BlinkRange.createContextualFragment_Callback_1(this, html);
 
   @DomName('Range.deleteContents')
   @DocsEditable()
@@ -25933,7 +26228,7 @@
   @DomName('Range.expand')
   @DocsEditable()
   @Experimental() // non-standard
-  void expand(String unit) => _blink.BlinkRange.expand_Callback_DOMString(this, unit);
+  void expand(String unit) => _blink.BlinkRange.expand_Callback_1(this, unit);
 
   @DomName('Range.extractContents')
   @DocsEditable()
@@ -25949,47 +26244,47 @@
 
   @DomName('Range.insertNode')
   @DocsEditable()
-  void insertNode(Node newNode) => _blink.BlinkRange.insertNode_Callback_Node(this, newNode);
+  void insertNode(Node newNode) => _blink.BlinkRange.insertNode_Callback_1(this, newNode);
 
   @DomName('Range.isPointInRange')
   @DocsEditable()
-  bool isPointInRange(Node refNode, int offset) => _blink.BlinkRange.isPointInRange_Callback_Node_long(this, refNode, offset);
+  bool isPointInRange(Node refNode, int offset) => _blink.BlinkRange.isPointInRange_Callback_2(this, refNode, offset);
 
   @DomName('Range.selectNode')
   @DocsEditable()
-  void selectNode(Node refNode) => _blink.BlinkRange.selectNode_Callback_Node(this, refNode);
+  void selectNode(Node refNode) => _blink.BlinkRange.selectNode_Callback_1(this, refNode);
 
   @DomName('Range.selectNodeContents')
   @DocsEditable()
-  void selectNodeContents(Node refNode) => _blink.BlinkRange.selectNodeContents_Callback_Node(this, refNode);
+  void selectNodeContents(Node refNode) => _blink.BlinkRange.selectNodeContents_Callback_1(this, refNode);
 
   @DomName('Range.setEnd')
   @DocsEditable()
-  void setEnd(Node refNode, int offset) => _blink.BlinkRange.setEnd_Callback_Node_long(this, refNode, offset);
+  void setEnd(Node refNode, int offset) => _blink.BlinkRange.setEnd_Callback_2(this, refNode, offset);
 
   @DomName('Range.setEndAfter')
   @DocsEditable()
-  void setEndAfter(Node refNode) => _blink.BlinkRange.setEndAfter_Callback_Node(this, refNode);
+  void setEndAfter(Node refNode) => _blink.BlinkRange.setEndAfter_Callback_1(this, refNode);
 
   @DomName('Range.setEndBefore')
   @DocsEditable()
-  void setEndBefore(Node refNode) => _blink.BlinkRange.setEndBefore_Callback_Node(this, refNode);
+  void setEndBefore(Node refNode) => _blink.BlinkRange.setEndBefore_Callback_1(this, refNode);
 
   @DomName('Range.setStart')
   @DocsEditable()
-  void setStart(Node refNode, int offset) => _blink.BlinkRange.setStart_Callback_Node_long(this, refNode, offset);
+  void setStart(Node refNode, int offset) => _blink.BlinkRange.setStart_Callback_2(this, refNode, offset);
 
   @DomName('Range.setStartAfter')
   @DocsEditable()
-  void setStartAfter(Node refNode) => _blink.BlinkRange.setStartAfter_Callback_Node(this, refNode);
+  void setStartAfter(Node refNode) => _blink.BlinkRange.setStartAfter_Callback_1(this, refNode);
 
   @DomName('Range.setStartBefore')
   @DocsEditable()
-  void setStartBefore(Node refNode) => _blink.BlinkRange.setStartBefore_Callback_Node(this, refNode);
+  void setStartBefore(Node refNode) => _blink.BlinkRange.setStartBefore_Callback_1(this, refNode);
 
   @DomName('Range.surroundContents')
   @DocsEditable()
-  void surroundContents(Node newParent) => _blink.BlinkRange.surroundContents_Callback_Node(this, newParent);
+  void surroundContents(Node newParent) => _blink.BlinkRange.surroundContents_Callback_1(this, newParent);
 
 
   /**
@@ -26043,64 +26338,6 @@
 // WARNING: Do not edit - generated code.
 
 
-@DocsEditable()
-@DomName('Request')
-@Experimental() // untriaged
-class Request extends NativeFieldWrapperClass2 {
-  // To suppress missing implicit constructor warnings.
-  factory Request._() { throw new UnsupportedError("Not supported"); }
-
-  @DomName('Request.Request')
-  @DocsEditable()
-  factory Request(input, [Map requestInitDict]) {
-    if ((input is String || input == null) && requestInitDict == null) {
-      return _blink.BlinkRequest.constructorCallback_DOMString(input);
-    }
-    if ((requestInitDict is Map || requestInitDict == null) && (input is String || input == null)) {
-      return _blink.BlinkRequest.constructorCallback_DOMString_Dictionary(input, requestInitDict);
-    }
-    if ((input is Request || input == null) && requestInitDict == null) {
-      return _blink.BlinkRequest.constructorCallback_Request(input);
-    }
-    if ((requestInitDict is Map || requestInitDict == null) && (input is Request || input == null)) {
-      return _blink.BlinkRequest.constructorCallback_Request_Dictionary(input, requestInitDict);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
-  }
-
-  @DomName('Request.credentials')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String get credentials => _blink.BlinkRequest.credentials_Getter(this);
-
-  @DomName('Request.headers')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Headers get headers => _blink.BlinkRequest.headers_Getter(this);
-
-  @DomName('Request.mode')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String get mode => _blink.BlinkRequest.mode_Getter(this);
-
-  @DomName('Request.referrer')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String get referrer => _blink.BlinkRequest.referrer_Getter(this);
-
-  @DomName('Request.url')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String get url => _blink.BlinkRequest.url_Getter(this);
-
-}
-// Copyright (c) 2012, 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.
-
-// WARNING: Do not edit - generated code.
-
-
 @DomName('RequestAnimationFrameCallback')
 typedef void RequestAnimationFrameCallback(num highResTime);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26184,7 +26421,7 @@
 
   @DomName('RTCDataChannel.binaryType')
   @DocsEditable()
-  void set binaryType(String value) => _blink.BlinkRTCDataChannel.binaryType_Setter_DOMString(this, value);
+  void set binaryType(String value) => _blink.BlinkRTCDataChannel.binaryType_Setter(this, value);
 
   @DomName('RTCDataChannel.bufferedAmount')
   @DocsEditable()
@@ -26238,19 +26475,19 @@
 
   void send(data) {
     if ((data is String || data == null)) {
-      _blink.BlinkRTCDataChannel.send_Callback_DOMString(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
       return;
     }
     if ((data is Blob || data == null)) {
-      _blink.BlinkRTCDataChannel.send_Callback_Blob(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
       return;
     }
     if ((data is TypedData || data == null)) {
-      _blink.BlinkRTCDataChannel.send_Callback_ArrayBufferView(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
       return;
     }
     if ((data is ByteBuffer || data == null)) {
-      _blink.BlinkRTCDataChannel.send_Callback_ArrayBuffer(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -26258,19 +26495,19 @@
 
   @DomName('RTCDataChannel.sendBlob')
   @DocsEditable()
-  void sendBlob(Blob data) => _blink.BlinkRTCDataChannel.send_Callback_Blob(this, data);
+  void sendBlob(Blob data) => _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
 
   @DomName('RTCDataChannel.sendByteBuffer')
   @DocsEditable()
-  void sendByteBuffer(ByteBuffer data) => _blink.BlinkRTCDataChannel.send_Callback_ArrayBuffer(this, data);
+  void sendByteBuffer(ByteBuffer data) => _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
 
   @DomName('RTCDataChannel.sendString')
   @DocsEditable()
-  void sendString(String data) => _blink.BlinkRTCDataChannel.send_Callback_DOMString(this, data);
+  void sendString(String data) => _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
 
   @DomName('RTCDataChannel.sendTypedData')
   @DocsEditable()
-  void sendTypedData(TypedData data) => _blink.BlinkRTCDataChannel.send_Callback_ArrayBufferView(this, data);
+  void sendTypedData(TypedData data) => _blink.BlinkRTCDataChannel.send_Callback_1(this, data);
 
   /// Stream of `close` events handled by this [RtcDataChannel].
   @DomName('RTCDataChannel.onclose')
@@ -26360,14 +26597,14 @@
 
   void insertDtmf(String tones, [int duration, int interToneGap]) {
     if (interToneGap != null) {
-      _blink.BlinkRTCDTMFSender.insertDTMF_Callback_DOMString_long_long(this, tones, duration, interToneGap);
+      _blink.BlinkRTCDTMFSender.insertDTMF_Callback_3(this, tones, duration, interToneGap);
       return;
     }
     if (duration != null) {
-      _blink.BlinkRTCDTMFSender.insertDTMF_Callback_DOMString_long(this, tones, duration);
+      _blink.BlinkRTCDTMFSender.insertDTMF_Callback_2(this, tones, duration);
       return;
     }
-    _blink.BlinkRTCDTMFSender.insertDTMF_Callback_DOMString(this, tones);
+    _blink.BlinkRTCDTMFSender.insertDTMF_Callback_1(this, tones);
     return;
   }
 
@@ -26416,7 +26653,7 @@
   @DomName('RTCIceCandidate.RTCIceCandidate')
   @DocsEditable()
   factory RtcIceCandidate(Map dictionary) {
-    return _blink.BlinkRTCIceCandidate.constructorCallback_Dictionary(dictionary);
+    return _blink.BlinkRTCIceCandidate.constructorCallback_1(dictionary);
   }
 
   @DomName('RTCIceCandidate.candidate')
@@ -26425,7 +26662,7 @@
 
   @DomName('RTCIceCandidate.candidate')
   @DocsEditable()
-  void set candidate(String value) => _blink.BlinkRTCIceCandidate.candidate_Setter_DOMString(this, value);
+  void set candidate(String value) => _blink.BlinkRTCIceCandidate.candidate_Setter(this, value);
 
   @DomName('RTCIceCandidate.sdpMLineIndex')
   @DocsEditable()
@@ -26433,7 +26670,7 @@
 
   @DomName('RTCIceCandidate.sdpMLineIndex')
   @DocsEditable()
-  void set sdpMLineIndex(int value) => _blink.BlinkRTCIceCandidate.sdpMLineIndex_Setter_us(this, value);
+  void set sdpMLineIndex(int value) => _blink.BlinkRTCIceCandidate.sdpMLineIndex_Setter(this, value);
 
   @DomName('RTCIceCandidate.sdpMid')
   @DocsEditable()
@@ -26441,7 +26678,7 @@
 
   @DomName('RTCIceCandidate.sdpMid')
   @DocsEditable()
-  void set sdpMid(String value) => _blink.BlinkRTCIceCandidate.sdpMid_Setter_DOMString(this, value);
+  void set sdpMid(String value) => _blink.BlinkRTCIceCandidate.sdpMid_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26579,9 +26816,9 @@
   @DocsEditable()
   factory RtcPeerConnection(Map rtcConfiguration, [Map mediaConstraints]) {
     if (mediaConstraints != null) {
-      return _blink.BlinkRTCPeerConnection.constructorCallback_Dictionary_Dictionary(rtcConfiguration, mediaConstraints);
+      return _blink.BlinkRTCPeerConnection.constructorCallback_2(rtcConfiguration, mediaConstraints);
     }
-    return _blink.BlinkRTCPeerConnection.constructorCallback_Dictionary(rtcConfiguration);
+    return _blink.BlinkRTCPeerConnection.constructorCallback_1(rtcConfiguration);
   }
 
   @DomName('RTCPeerConnection.iceConnectionState')
@@ -26606,31 +26843,49 @@
 
   @DomName('RTCPeerConnection.addIceCandidate')
   @DocsEditable()
-  void addIceCandidate(RtcIceCandidate candidate, VoidCallback successCallback, _RtcErrorCallback failureCallback) => _blink.BlinkRTCPeerConnection.addIceCandidate_Callback_RTCIceCandidate_VoidCallback_RTCErrorCallback(this, candidate, successCallback, failureCallback);
+  void addIceCandidate(RtcIceCandidate candidate, VoidCallback successCallback, _RtcErrorCallback failureCallback) => _blink.BlinkRTCPeerConnection.addIceCandidate_Callback_3(this, candidate, successCallback, failureCallback);
 
-  @DomName('RTCPeerConnection.addStream')
-  @DocsEditable()
-  void addStream(MediaStream stream, [Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.addStream_Callback_MediaStream_Dictionary(this, stream, mediaConstraints);
+  void addStream(MediaStream stream, [Map mediaConstraints]) {
+    if (mediaConstraints != null) {
+      _blink.BlinkRTCPeerConnection.addStream_Callback_2(this, stream, mediaConstraints);
+      return;
+    }
+    _blink.BlinkRTCPeerConnection.addStream_Callback_1(this, stream);
+    return;
+  }
 
   @DomName('RTCPeerConnection.close')
   @DocsEditable()
   void close() => _blink.BlinkRTCPeerConnection.close_Callback(this);
 
-  @DomName('RTCPeerConnection.createAnswer')
-  @DocsEditable()
-  void _createAnswer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.createAnswer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(this, successCallback, failureCallback, mediaConstraints);
+  void _createAnswer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map mediaConstraints]) {
+    if (mediaConstraints != null) {
+      _blink.BlinkRTCPeerConnection.createAnswer_Callback_3(this, successCallback, failureCallback, mediaConstraints);
+      return;
+    }
+    _blink.BlinkRTCPeerConnection.createAnswer_Callback_2(this, successCallback, failureCallback);
+    return;
+  }
 
   @DomName('RTCPeerConnection.createDTMFSender')
   @DocsEditable()
-  RtcDtmfSender createDtmfSender(MediaStreamTrack track) => _blink.BlinkRTCPeerConnection.createDTMFSender_Callback_MediaStreamTrack(this, track);
+  RtcDtmfSender createDtmfSender(MediaStreamTrack track) => _blink.BlinkRTCPeerConnection.createDTMFSender_Callback_1(this, track);
 
-  @DomName('RTCPeerConnection.createDataChannel')
-  @DocsEditable()
-  RtcDataChannel createDataChannel(String label, [Map options]) => _blink.BlinkRTCPeerConnection.createDataChannel_Callback_DOMString_Dictionary(this, label, options);
+  RtcDataChannel createDataChannel(String label, [Map options]) {
+    if (options != null) {
+      return _blink.BlinkRTCPeerConnection.createDataChannel_Callback_2(this, label, options);
+    }
+    return _blink.BlinkRTCPeerConnection.createDataChannel_Callback_1(this, label);
+  }
 
-  @DomName('RTCPeerConnection.createOffer')
-  @DocsEditable()
-  void _createOffer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map rtcOfferOptions]) => _blink.BlinkRTCPeerConnection.createOffer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(this, successCallback, failureCallback, rtcOfferOptions);
+  void _createOffer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map rtcOfferOptions]) {
+    if (rtcOfferOptions != null) {
+      _blink.BlinkRTCPeerConnection.createOffer_Callback_3(this, successCallback, failureCallback, rtcOfferOptions);
+      return;
+    }
+    _blink.BlinkRTCPeerConnection.createOffer_Callback_2(this, successCallback, failureCallback);
+    return;
+  }
 
   @DomName('RTCPeerConnection.getLocalStreams')
   @DocsEditable()
@@ -26642,19 +26897,19 @@
 
   @DomName('RTCPeerConnection.getStats')
   @DocsEditable()
-  void _getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) => _blink.BlinkRTCPeerConnection.getStats_Callback_RTCStatsCallback_MediaStreamTrack(this, successCallback, selector);
+  void _getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) => _blink.BlinkRTCPeerConnection.getStats_Callback_2(this, successCallback, selector);
 
   @DomName('RTCPeerConnection.getStreamById')
   @DocsEditable()
-  MediaStream getStreamById(String streamId) => _blink.BlinkRTCPeerConnection.getStreamById_Callback_DOMString(this, streamId);
+  MediaStream getStreamById(String streamId) => _blink.BlinkRTCPeerConnection.getStreamById_Callback_1(this, streamId);
 
   @DomName('RTCPeerConnection.removeStream')
   @DocsEditable()
-  void removeStream(MediaStream stream) => _blink.BlinkRTCPeerConnection.removeStream_Callback_MediaStream(this, stream);
+  void removeStream(MediaStream stream) => _blink.BlinkRTCPeerConnection.removeStream_Callback_1(this, stream);
 
   @DomName('RTCPeerConnection.setLocalDescription')
   @DocsEditable()
-  void _setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.setLocalDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(this, description, successCallback, failureCallback);
+  void _setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.setLocalDescription_Callback_3(this, description, successCallback, failureCallback);
 
   Future setLocalDescription(RtcSessionDescription description) {
     var completer = new Completer();
@@ -26666,7 +26921,7 @@
 
   @DomName('RTCPeerConnection.setRemoteDescription')
   @DocsEditable()
-  void _setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.setRemoteDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(this, description, successCallback, failureCallback);
+  void _setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.setRemoteDescription_Callback_3(this, description, successCallback, failureCallback);
 
   Future setRemoteDescription(RtcSessionDescription description) {
     var completer = new Completer();
@@ -26676,9 +26931,18 @@
     return completer.future;
   }
 
-  @DomName('RTCPeerConnection.updateIce')
-  @DocsEditable()
-  void updateIce([Map configuration, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.updateIce_Callback_Dictionary_Dictionary(this, configuration, mediaConstraints);
+  void updateIce([Map configuration, Map mediaConstraints]) {
+    if (mediaConstraints != null) {
+      _blink.BlinkRTCPeerConnection.updateIce_Callback_2(this, configuration, mediaConstraints);
+      return;
+    }
+    if (configuration != null) {
+      _blink.BlinkRTCPeerConnection.updateIce_Callback_1(this, configuration);
+      return;
+    }
+    _blink.BlinkRTCPeerConnection.updateIce_Callback(this);
+    return;
+  }
 
   /// Stream of `addstream` events handled by this [RtcPeerConnection].
   @DomName('RTCPeerConnection.onaddstream')
@@ -26736,7 +27000,7 @@
   @DocsEditable()
   factory RtcSessionDescription([Map descriptionInitDict]) {
     if (descriptionInitDict != null) {
-      return _blink.BlinkRTCSessionDescription.constructorCallback_Dictionary(descriptionInitDict);
+      return _blink.BlinkRTCSessionDescription.constructorCallback_1(descriptionInitDict);
     }
     return _blink.BlinkRTCSessionDescription.constructorCallback();
   }
@@ -26747,7 +27011,7 @@
 
   @DomName('RTCSessionDescription.sdp')
   @DocsEditable()
-  void set sdp(String value) => _blink.BlinkRTCSessionDescription.sdp_Setter_DOMString(this, value);
+  void set sdp(String value) => _blink.BlinkRTCSessionDescription.sdp_Setter(this, value);
 
   @DomName('RTCSessionDescription.type')
   @DocsEditable()
@@ -26755,7 +27019,7 @@
 
   @DomName('RTCSessionDescription.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkRTCSessionDescription.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkRTCSessionDescription.type_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26799,7 +27063,7 @@
 
   @DomName('RTCStatsReport.stat')
   @DocsEditable()
-  String stat(String name) => _blink.BlinkRTCStatsReport.stat_Callback_DOMString(this, name);
+  String stat(String name) => _blink.BlinkRTCStatsReport.stat_Callback_1(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26819,11 +27083,11 @@
 
   @DomName('RTCStatsResponse.__getter__')
   @DocsEditable()
-  RtcStatsReport __getter__(String name) => _blink.BlinkRTCStatsResponse.$__getter___Callback_DOMString(this, name);
+  RtcStatsReport __getter__(String name) => _blink.BlinkRTCStatsResponse.$__getter___Callback_1(this, name);
 
   @DomName('RTCStatsResponse.namedItem')
   @DocsEditable()
-  RtcStatsReport namedItem(String name) => _blink.BlinkRTCStatsResponse.namedItem_Callback_DOMString(this, name);
+  RtcStatsReport namedItem(String name) => _blink.BlinkRTCStatsResponse.namedItem_Callback_1(this, name);
 
   @DomName('RTCStatsResponse.result')
   @DocsEditable()
@@ -26916,6 +27180,11 @@
   @Experimental() // untriaged
   String get type => _blink.BlinkScreenOrientation.type_Getter(this);
 
+  @DomName('ScreenOrientation.lock')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future lock(String orientation) => _blink.BlinkScreenOrientation.lock_Callback_1(this, orientation);
+
   @DomName('ScreenOrientation.unlock')
   @DocsEditable()
   @Experimental() // untriaged
@@ -26956,7 +27225,7 @@
 
   @DomName('HTMLScriptElement.async')
   @DocsEditable()
-  void set async(bool value) => _blink.BlinkHTMLScriptElement.async_Setter_boolean(this, value);
+  void set async(bool value) => _blink.BlinkHTMLScriptElement.async_Setter(this, value);
 
   @DomName('HTMLScriptElement.charset')
   @DocsEditable()
@@ -26964,7 +27233,7 @@
 
   @DomName('HTMLScriptElement.charset')
   @DocsEditable()
-  void set charset(String value) => _blink.BlinkHTMLScriptElement.charset_Setter_DOMString(this, value);
+  void set charset(String value) => _blink.BlinkHTMLScriptElement.charset_Setter(this, value);
 
   @DomName('HTMLScriptElement.crossOrigin')
   @DocsEditable()
@@ -26976,7 +27245,7 @@
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-crossorigin
   @Experimental()
-  void set crossOrigin(String value) => _blink.BlinkHTMLScriptElement.crossOrigin_Setter_DOMString(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLScriptElement.crossOrigin_Setter(this, value);
 
   @DomName('HTMLScriptElement.defer')
   @DocsEditable()
@@ -26984,7 +27253,7 @@
 
   @DomName('HTMLScriptElement.defer')
   @DocsEditable()
-  void set defer(bool value) => _blink.BlinkHTMLScriptElement.defer_Setter_boolean(this, value);
+  void set defer(bool value) => _blink.BlinkHTMLScriptElement.defer_Setter(this, value);
 
   @DomName('HTMLScriptElement.integrity')
   @DocsEditable()
@@ -26994,7 +27263,7 @@
   @DomName('HTMLScriptElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLScriptElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLScriptElement.integrity_Setter(this, value);
 
   @DomName('HTMLScriptElement.nonce')
   @DocsEditable()
@@ -27006,7 +27275,7 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#interaction-with-the-script-src-directive
   @Experimental()
-  void set nonce(String value) => _blink.BlinkHTMLScriptElement.nonce_Setter_DOMString(this, value);
+  void set nonce(String value) => _blink.BlinkHTMLScriptElement.nonce_Setter(this, value);
 
   @DomName('HTMLScriptElement.src')
   @DocsEditable()
@@ -27014,7 +27283,7 @@
 
   @DomName('HTMLScriptElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLScriptElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLScriptElement.src_Setter(this, value);
 
   @DomName('HTMLScriptElement.type')
   @DocsEditable()
@@ -27022,7 +27291,7 @@
 
   @DomName('HTMLScriptElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLScriptElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLScriptElement.type_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27108,7 +27377,7 @@
 
   @DomName('HTMLSelectElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLSelectElement.autofocus_Setter_boolean(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLSelectElement.autofocus_Setter(this, value);
 
   @DomName('HTMLSelectElement.disabled')
   @DocsEditable()
@@ -27116,7 +27385,7 @@
 
   @DomName('HTMLSelectElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLSelectElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLSelectElement.disabled_Setter(this, value);
 
   @DomName('HTMLSelectElement.form')
   @DocsEditable()
@@ -27133,7 +27402,7 @@
 
   @DomName('HTMLSelectElement.length')
   @DocsEditable()
-  void set length(int value) => _blink.BlinkHTMLSelectElement.length_Setter_ul(this, value);
+  void set length(int value) => _blink.BlinkHTMLSelectElement.length_Setter(this, value);
 
   @DomName('HTMLSelectElement.multiple')
   @DocsEditable()
@@ -27141,7 +27410,7 @@
 
   @DomName('HTMLSelectElement.multiple')
   @DocsEditable()
-  void set multiple(bool value) => _blink.BlinkHTMLSelectElement.multiple_Setter_boolean(this, value);
+  void set multiple(bool value) => _blink.BlinkHTMLSelectElement.multiple_Setter(this, value);
 
   @DomName('HTMLSelectElement.name')
   @DocsEditable()
@@ -27149,7 +27418,7 @@
 
   @DomName('HTMLSelectElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLSelectElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLSelectElement.name_Setter(this, value);
 
   @DomName('HTMLSelectElement.required')
   @DocsEditable()
@@ -27157,7 +27426,7 @@
 
   @DomName('HTMLSelectElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLSelectElement.required_Setter_boolean(this, value);
+  void set required(bool value) => _blink.BlinkHTMLSelectElement.required_Setter(this, value);
 
   @DomName('HTMLSelectElement.selectedIndex')
   @DocsEditable()
@@ -27165,7 +27434,7 @@
 
   @DomName('HTMLSelectElement.selectedIndex')
   @DocsEditable()
-  void set selectedIndex(int value) => _blink.BlinkHTMLSelectElement.selectedIndex_Setter_long(this, value);
+  void set selectedIndex(int value) => _blink.BlinkHTMLSelectElement.selectedIndex_Setter(this, value);
 
   @DomName('HTMLSelectElement.size')
   @DocsEditable()
@@ -27173,7 +27442,7 @@
 
   @DomName('HTMLSelectElement.size')
   @DocsEditable()
-  void set size(int value) => _blink.BlinkHTMLSelectElement.size_Setter_long(this, value);
+  void set size(int value) => _blink.BlinkHTMLSelectElement.size_Setter(this, value);
 
   @DomName('HTMLSelectElement.type')
   @DocsEditable()
@@ -27193,7 +27462,7 @@
 
   @DomName('HTMLSelectElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLSelectElement.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkHTMLSelectElement.value_Setter(this, value);
 
   @DomName('HTMLSelectElement.willValidate')
   @DocsEditable()
@@ -27201,12 +27470,12 @@
 
   @DomName('HTMLSelectElement.__setter__')
   @DocsEditable()
-  void __setter__(int index, OptionElement value) => _blink.BlinkHTMLSelectElement.$__setter___Callback_ul_HTMLOptionElement(this, index, value);
+  void __setter__(int index, OptionElement value) => _blink.BlinkHTMLSelectElement.$__setter___Callback_2(this, index, value);
 
   @DomName('HTMLSelectElement.add')
   @DocsEditable()
   @Experimental() // untriaged
-  void add(HtmlElement element, int before) => _blink.BlinkHTMLSelectElement.add_Callback_HTMLElement_long(this, element, before);
+  void add(HtmlElement element, int before) => _blink.BlinkHTMLSelectElement.add_Callback_2(this, element, before);
 
   @DomName('HTMLSelectElement.checkValidity')
   @DocsEditable()
@@ -27214,15 +27483,15 @@
 
   @DomName('HTMLSelectElement.item')
   @DocsEditable()
-  Element item(int index) => _blink.BlinkHTMLSelectElement.item_Callback_ul(this, index);
+  Element item(int index) => _blink.BlinkHTMLSelectElement.item_Callback_1(this, index);
 
   @DomName('HTMLSelectElement.namedItem')
   @DocsEditable()
-  Element namedItem(String name) => _blink.BlinkHTMLSelectElement.namedItem_Callback_DOMString(this, name);
+  Element namedItem(String name) => _blink.BlinkHTMLSelectElement.namedItem_Callback_1(this, name);
 
   @DomName('HTMLSelectElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLSelectElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLSelectElement.setCustomValidity_Callback_1(this, error);
 
 
   // Override default options, since IE returns SelectElement itself and it
@@ -27307,14 +27576,14 @@
 
   @DomName('Selection.addRange')
   @DocsEditable()
-  void addRange(Range range) => _blink.BlinkSelection.addRange_Callback_Range(this, range);
+  void addRange(Range range) => _blink.BlinkSelection.addRange_Callback_1(this, range);
 
   void collapse(Node node, [int offset]) {
     if (offset != null) {
-      _blink.BlinkSelection.collapse_Callback_Node_long(this, node, offset);
+      _blink.BlinkSelection.collapse_Callback_2(this, node, offset);
       return;
     }
-    _blink.BlinkSelection.collapse_Callback_Node(this, node);
+    _blink.BlinkSelection.collapse_Callback_1(this, node);
     return;
   }
 
@@ -27329,7 +27598,7 @@
   @DomName('Selection.containsNode')
   @DocsEditable()
   @Experimental() // non-standard
-  bool containsNode(Node node, bool allowPartial) => _blink.BlinkSelection.containsNode_Callback_Node_boolean(this, node, allowPartial);
+  bool containsNode(Node node, bool allowPartial) => _blink.BlinkSelection.containsNode_Callback_2(this, node, allowPartial);
 
   @DomName('Selection.deleteFromDocument')
   @DocsEditable()
@@ -27342,21 +27611,21 @@
 
   void extend(Node node, [int offset]) {
     if (offset != null) {
-      _blink.BlinkSelection.extend_Callback_Node_long(this, node, offset);
+      _blink.BlinkSelection.extend_Callback_2(this, node, offset);
       return;
     }
-    _blink.BlinkSelection.extend_Callback_Node(this, node);
+    _blink.BlinkSelection.extend_Callback_1(this, node);
     return;
   }
 
   @DomName('Selection.getRangeAt')
   @DocsEditable()
-  Range getRangeAt(int index) => _blink.BlinkSelection.getRangeAt_Callback_long(this, index);
+  Range getRangeAt(int index) => _blink.BlinkSelection.getRangeAt_Callback_1(this, index);
 
   @DomName('Selection.modify')
   @DocsEditable()
   @Experimental() // non-standard
-  void modify(String alter, String direction, String granularity) => _blink.BlinkSelection.modify_Callback_DOMString_DOMString_DOMString(this, alter, direction, granularity);
+  void modify(String alter, String direction, String granularity) => _blink.BlinkSelection.modify_Callback_3(this, alter, direction, granularity);
 
   @DomName('Selection.removeAllRanges')
   @DocsEditable()
@@ -27364,19 +27633,19 @@
 
   @DomName('Selection.selectAllChildren')
   @DocsEditable()
-  void selectAllChildren(Node node) => _blink.BlinkSelection.selectAllChildren_Callback_Node(this, node);
+  void selectAllChildren(Node node) => _blink.BlinkSelection.selectAllChildren_Callback_1(this, node);
 
   @DomName('Selection.setBaseAndExtent')
   @DocsEditable()
   @Experimental() // non-standard
-  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) => _blink.BlinkSelection.setBaseAndExtent_Callback_Node_long_Node_long(this, baseNode, baseOffset, extentNode, extentOffset);
+  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) => _blink.BlinkSelection.setBaseAndExtent_Callback_4(this, baseNode, baseOffset, extentNode, extentOffset);
 
   void setPosition(Node node, [int offset]) {
     if (offset != null) {
-      _blink.BlinkSelection.setPosition_Callback_Node_long(this, node, offset);
+      _blink.BlinkSelection.setPosition_Callback_2(this, node, offset);
       return;
     }
-    _blink.BlinkSelection.setPosition_Callback_Node(this, node);
+    _blink.BlinkSelection.setPosition_Callback_1(this, node);
     return;
   }
 
@@ -27403,7 +27672,7 @@
   @DomName('ServiceWorkerClient.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkServiceWorkerClient.postMessage_Callback_SerializedScriptValue_SEQ_MessagePort_SEQ(this, message, transfer);
+  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkServiceWorkerClient.postMessage_Callback_2(this, message, transfer);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27420,6 +27689,11 @@
   // To suppress missing implicit constructor warnings.
   factory ServiceWorkerClients._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('ServiceWorkerClients.getServiced')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getServiced() => _blink.BlinkServiceWorkerClients.getServiced_Callback(this);
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27450,11 +27724,30 @@
   @Experimental() // untriaged
   _ServiceWorker get installing => _blink.BlinkServiceWorkerContainer.installing_Getter(this);
 
+  @DomName('ServiceWorkerContainer.ready')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future get ready => _blink.BlinkServiceWorkerContainer.ready_Getter(this);
+
   @DomName('ServiceWorkerContainer.waiting')
   @DocsEditable()
   @Experimental() // untriaged
   _ServiceWorker get waiting => _blink.BlinkServiceWorkerContainer.waiting_Getter(this);
 
+  Future register(String url, [Map options]) {
+    if (options != null) {
+      return _blink.BlinkServiceWorkerContainer.register_Callback_2(this, url, options);
+    }
+    return _blink.BlinkServiceWorkerContainer.register_Callback_1(this, url);
+  }
+
+  Future unregister([String scope]) {
+    if (scope != null) {
+      return _blink.BlinkServiceWorkerContainer.unregister_Callback_1(this, scope);
+    }
+    return _blink.BlinkServiceWorkerContainer.unregister_Callback(this);
+  }
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27490,6 +27783,22 @@
   @Experimental() // untriaged
   String get scope => _blink.BlinkServiceWorkerGlobalScope.scope_Getter(this);
 
+  Future _fetch(request, [Map requestInitDict]) {
+    if ((request is String || request == null) && requestInitDict == null) {
+      return _blink.BlinkServiceWorkerGlobalScope.fetch_Callback_1(this, request);
+    }
+    if ((requestInitDict is Map || requestInitDict == null) && (request is String || request == null)) {
+      return _blink.BlinkServiceWorkerGlobalScope.fetch_Callback_2(this, request, requestInitDict);
+    }
+    if ((request is _Request || request == null) && requestInitDict == null) {
+      return _blink.BlinkServiceWorkerGlobalScope.fetch_Callback_1(this, request);
+    }
+    if ((requestInitDict is Map || requestInitDict == null) && (request is _Request || request == null)) {
+      return _blink.BlinkServiceWorkerGlobalScope.fetch_Callback_2(this, request, requestInitDict);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
   @DomName('ServiceWorkerGlobalScope.onmessage')
   @DocsEditable()
   @Experimental() // untriaged
@@ -27530,6 +27839,11 @@
   @Experimental() // untriaged
   _ServiceWorker get waiting => _blink.BlinkServiceWorkerRegistration.waiting_Getter(this);
 
+  @DomName('ServiceWorkerRegistration.unregister')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future unregister() => _blink.BlinkServiceWorkerRegistration.unregister_Callback(this);
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -27596,7 +27910,7 @@
 
   @DomName('ShadowRoot.innerHTML')
   @DocsEditable()
-  void set innerHtml(String value) => _blink.BlinkShadowRoot.innerHTML_Setter_DOMString(this, value);
+  void set innerHtml(String value) => _blink.BlinkShadowRoot.innerHTML_Setter(this, value);
 
   @DomName('ShadowRoot.olderShadowRoot')
   @DocsEditable()
@@ -27610,23 +27924,23 @@
 
   @DomName('ShadowRoot.cloneNode')
   @DocsEditable()
-  Node clone(bool deep) => _blink.BlinkShadowRoot.cloneNode_Callback_boolean(this, deep);
+  Node clone(bool deep) => _blink.BlinkShadowRoot.cloneNode_Callback_1(this, deep);
 
   @DomName('ShadowRoot.elementFromPoint')
   @DocsEditable()
-  Element elementFromPoint(int x, int y) => _blink.BlinkShadowRoot.elementFromPoint_Callback_long_long(this, x, y);
+  Element elementFromPoint(int x, int y) => _blink.BlinkShadowRoot.elementFromPoint_Callback_2(this, x, y);
 
   @DomName('ShadowRoot.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkShadowRoot.getElementById_Callback_DOMString(this, elementId);
+  Element getElementById(String elementId) => _blink.BlinkShadowRoot.getElementById_Callback_1(this, elementId);
 
   @DomName('ShadowRoot.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String className) => _blink.BlinkShadowRoot.getElementsByClassName_Callback_DOMString(this, className);
+  List<Node> getElementsByClassName(String className) => _blink.BlinkShadowRoot.getElementsByClassName_Callback_1(this, className);
 
   @DomName('ShadowRoot.getElementsByTagName')
   @DocsEditable()
-  List<Node> getElementsByTagName(String tagName) => _blink.BlinkShadowRoot.getElementsByTagName_Callback_DOMString(this, tagName);
+  List<Node> getElementsByTagName(String tagName) => _blink.BlinkShadowRoot.getElementsByTagName_Callback_1(this, tagName);
 
   @DomName('ShadowRoot.getSelection')
   @DocsEditable()
@@ -27692,7 +28006,7 @@
   @DomName('SharedWorker.SharedWorker')
   @DocsEditable()
   factory SharedWorker(String scriptURL, [String name]) {
-    return _blink.BlinkSharedWorker.constructorCallback_DOMString_DOMString(scriptURL, name);
+    return _blink.BlinkSharedWorker.constructorCallback_2(scriptURL, name);
   }
 
   @DomName('SharedWorker.port')
@@ -27770,7 +28084,7 @@
   @DomName('SourceBuffer.appendWindowEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void set appendWindowEnd(num value) => _blink.BlinkSourceBuffer.appendWindowEnd_Setter_double(this, value);
+  void set appendWindowEnd(num value) => _blink.BlinkSourceBuffer.appendWindowEnd_Setter(this, value);
 
   @DomName('SourceBuffer.appendWindowStart')
   @DocsEditable()
@@ -27780,7 +28094,7 @@
   @DomName('SourceBuffer.appendWindowStart')
   @DocsEditable()
   @Experimental() // untriaged
-  void set appendWindowStart(num value) => _blink.BlinkSourceBuffer.appendWindowStart_Setter_double(this, value);
+  void set appendWindowStart(num value) => _blink.BlinkSourceBuffer.appendWindowStart_Setter(this, value);
 
   @DomName('SourceBuffer.buffered')
   @DocsEditable()
@@ -27794,7 +28108,7 @@
   @DomName('SourceBuffer.mode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set mode(String value) => _blink.BlinkSourceBuffer.mode_Setter_DOMString(this, value);
+  void set mode(String value) => _blink.BlinkSourceBuffer.mode_Setter(this, value);
 
   @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
@@ -27802,7 +28116,7 @@
 
   @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
-  void set timestampOffset(num value) => _blink.BlinkSourceBuffer.timestampOffset_Setter_double(this, value);
+  void set timestampOffset(num value) => _blink.BlinkSourceBuffer.timestampOffset_Setter(this, value);
 
   @DomName('SourceBuffer.updating')
   @DocsEditable()
@@ -27816,26 +28130,26 @@
   @DomName('SourceBuffer.appendBuffer')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendBuffer(ByteBuffer data) => _blink.BlinkSourceBuffer.appendBuffer_Callback_ArrayBuffer(this, data);
+  void appendBuffer(ByteBuffer data) => _blink.BlinkSourceBuffer.appendBuffer_Callback_1(this, data);
 
   void appendStream(FileStream stream, [int maxSize]) {
     if (maxSize != null) {
-      _blink.BlinkSourceBuffer.appendStream_Callback_Stream_ull(this, stream, maxSize);
+      _blink.BlinkSourceBuffer.appendStream_Callback_2(this, stream, maxSize);
       return;
     }
-    _blink.BlinkSourceBuffer.appendStream_Callback_Stream(this, stream);
+    _blink.BlinkSourceBuffer.appendStream_Callback_1(this, stream);
     return;
   }
 
   @DomName('SourceBuffer.appendTypedData')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendTypedData(TypedData data) => _blink.BlinkSourceBuffer.appendBuffer_Callback_ArrayBufferView(this, data);
+  void appendTypedData(TypedData data) => _blink.BlinkSourceBuffer.appendBuffer_Callback_1(this, data);
 
   @DomName('SourceBuffer.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(num start, num end) => _blink.BlinkSourceBuffer.remove_Callback_double_double(this, start, end);
+  void remove(num start, num end) => _blink.BlinkSourceBuffer.remove_Callback_2(this, start, end);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27860,10 +28174,10 @@
   SourceBuffer operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSourceBufferList.item_Callback_ul(this, index);
+    return _blink.BlinkSourceBufferList.item_Callback_1(this, index);
   }
 
-  SourceBuffer _nativeIndexedGetter(int index) => _blink.BlinkSourceBufferList.item_Callback_ul(this, index);
+  SourceBuffer _nativeIndexedGetter(int index) => _blink.BlinkSourceBufferList.item_Callback_1(this, index);
 
   void operator[]=(int index, SourceBuffer value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -27905,7 +28219,7 @@
 
   @DomName('SourceBufferList.item')
   @DocsEditable()
-  SourceBuffer item(int index) => _blink.BlinkSourceBufferList.item_Callback_ul(this, index);
+  SourceBuffer item(int index) => _blink.BlinkSourceBufferList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27939,7 +28253,7 @@
   @DomName('HTMLSourceElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLSourceElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLSourceElement.integrity_Setter(this, value);
 
   @DomName('HTMLSourceElement.media')
   @DocsEditable()
@@ -27947,7 +28261,7 @@
 
   @DomName('HTMLSourceElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLSourceElement.media_Setter_DOMString(this, value);
+  void set media(String value) => _blink.BlinkHTMLSourceElement.media_Setter(this, value);
 
   @DomName('HTMLSourceElement.sizes')
   @DocsEditable()
@@ -27957,7 +28271,7 @@
   @DomName('HTMLSourceElement.sizes')
   @DocsEditable()
   @Experimental() // untriaged
-  void set sizes(String value) => _blink.BlinkHTMLSourceElement.sizes_Setter_DOMString(this, value);
+  void set sizes(String value) => _blink.BlinkHTMLSourceElement.sizes_Setter(this, value);
 
   @DomName('HTMLSourceElement.src')
   @DocsEditable()
@@ -27965,7 +28279,7 @@
 
   @DomName('HTMLSourceElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLSourceElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLSourceElement.src_Setter(this, value);
 
   @DomName('HTMLSourceElement.srcset')
   @DocsEditable()
@@ -27975,7 +28289,7 @@
   @DomName('HTMLSourceElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  void set srcset(String value) => _blink.BlinkHTMLSourceElement.srcset_Setter_DOMString(this, value);
+  void set srcset(String value) => _blink.BlinkHTMLSourceElement.srcset_Setter(this, value);
 
   @DomName('HTMLSourceElement.type')
   @DocsEditable()
@@ -27983,7 +28297,7 @@
 
   @DomName('HTMLSourceElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLSourceElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLSourceElement.type_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28072,7 +28386,7 @@
 
   @DomName('SpeechGrammar.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkSpeechGrammar.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkSpeechGrammar.src_Setter(this, value);
 
   @DomName('SpeechGrammar.weight')
   @DocsEditable()
@@ -28080,7 +28394,7 @@
 
   @DomName('SpeechGrammar.weight')
   @DocsEditable()
-  void set weight(num value) => _blink.BlinkSpeechGrammar.weight_Setter_float(this, value);
+  void set weight(num value) => _blink.BlinkSpeechGrammar.weight_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28111,10 +28425,10 @@
   SpeechGrammar operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSpeechGrammarList.item_Callback_ul(this, index);
+    return _blink.BlinkSpeechGrammarList.item_Callback_1(this, index);
   }
 
-  SpeechGrammar _nativeIndexedGetter(int index) => _blink.BlinkSpeechGrammarList.item_Callback_ul(this, index);
+  SpeechGrammar _nativeIndexedGetter(int index) => _blink.BlinkSpeechGrammarList.item_Callback_1(this, index);
 
   void operator[]=(int index, SpeechGrammar value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -28156,25 +28470,25 @@
 
   void addFromString(String string, [num weight]) {
     if (weight != null) {
-      _blink.BlinkSpeechGrammarList.addFromString_Callback_DOMString_float(this, string, weight);
+      _blink.BlinkSpeechGrammarList.addFromString_Callback_2(this, string, weight);
       return;
     }
-    _blink.BlinkSpeechGrammarList.addFromString_Callback_DOMString(this, string);
+    _blink.BlinkSpeechGrammarList.addFromString_Callback_1(this, string);
     return;
   }
 
   void addFromUri(String src, [num weight]) {
     if (weight != null) {
-      _blink.BlinkSpeechGrammarList.addFromUri_Callback_DOMString_float(this, src, weight);
+      _blink.BlinkSpeechGrammarList.addFromUri_Callback_2(this, src, weight);
       return;
     }
-    _blink.BlinkSpeechGrammarList.addFromUri_Callback_DOMString(this, src);
+    _blink.BlinkSpeechGrammarList.addFromUri_Callback_1(this, src);
     return;
   }
 
   @DomName('SpeechGrammarList.item')
   @DocsEditable()
-  SpeechGrammar item(int index) => _blink.BlinkSpeechGrammarList.item_Callback_ul(this, index);
+  SpeechGrammar item(int index) => _blink.BlinkSpeechGrammarList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28318,7 +28632,7 @@
 
   @DomName('SpeechRecognition.continuous')
   @DocsEditable()
-  void set continuous(bool value) => _blink.BlinkSpeechRecognition.continuous_Setter_boolean(this, value);
+  void set continuous(bool value) => _blink.BlinkSpeechRecognition.continuous_Setter(this, value);
 
   @DomName('SpeechRecognition.grammars')
   @DocsEditable()
@@ -28326,7 +28640,7 @@
 
   @DomName('SpeechRecognition.grammars')
   @DocsEditable()
-  void set grammars(SpeechGrammarList value) => _blink.BlinkSpeechRecognition.grammars_Setter_SpeechGrammarList(this, value);
+  void set grammars(SpeechGrammarList value) => _blink.BlinkSpeechRecognition.grammars_Setter(this, value);
 
   @DomName('SpeechRecognition.interimResults')
   @DocsEditable()
@@ -28334,7 +28648,7 @@
 
   @DomName('SpeechRecognition.interimResults')
   @DocsEditable()
-  void set interimResults(bool value) => _blink.BlinkSpeechRecognition.interimResults_Setter_boolean(this, value);
+  void set interimResults(bool value) => _blink.BlinkSpeechRecognition.interimResults_Setter(this, value);
 
   @DomName('SpeechRecognition.lang')
   @DocsEditable()
@@ -28342,7 +28656,7 @@
 
   @DomName('SpeechRecognition.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkSpeechRecognition.lang_Setter_DOMString(this, value);
+  void set lang(String value) => _blink.BlinkSpeechRecognition.lang_Setter(this, value);
 
   @DomName('SpeechRecognition.maxAlternatives')
   @DocsEditable()
@@ -28350,7 +28664,7 @@
 
   @DomName('SpeechRecognition.maxAlternatives')
   @DocsEditable()
-  void set maxAlternatives(int value) => _blink.BlinkSpeechRecognition.maxAlternatives_Setter_ul(this, value);
+  void set maxAlternatives(int value) => _blink.BlinkSpeechRecognition.maxAlternatives_Setter(this, value);
 
   @DomName('SpeechRecognition.abort')
   @DocsEditable()
@@ -28529,7 +28843,7 @@
 
   @DomName('SpeechRecognitionResult.item')
   @DocsEditable()
-  SpeechRecognitionAlternative item(int index) => _blink.BlinkSpeechRecognitionResult.item_Callback_ul(this, index);
+  SpeechRecognitionAlternative item(int index) => _blink.BlinkSpeechRecognitionResult.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28577,7 +28891,7 @@
 
   @DomName('SpeechSynthesis.speak')
   @DocsEditable()
-  void speak(SpeechSynthesisUtterance utterance) => _blink.BlinkSpeechSynthesis.speak_Callback_SpeechSynthesisUtterance(this, utterance);
+  void speak(SpeechSynthesisUtterance utterance) => _blink.BlinkSpeechSynthesis.speak_Callback_1(this, utterance);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28696,7 +29010,7 @@
   @DomName('SpeechSynthesisUtterance.SpeechSynthesisUtterance')
   @DocsEditable()
   factory SpeechSynthesisUtterance([String text]) {
-    return _blink.BlinkSpeechSynthesisUtterance.constructorCallback_DOMString(text);
+    return _blink.BlinkSpeechSynthesisUtterance.constructorCallback_1(text);
   }
 
   @DomName('SpeechSynthesisUtterance.lang')
@@ -28705,7 +29019,7 @@
 
   @DomName('SpeechSynthesisUtterance.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkSpeechSynthesisUtterance.lang_Setter_DOMString(this, value);
+  void set lang(String value) => _blink.BlinkSpeechSynthesisUtterance.lang_Setter(this, value);
 
   @DomName('SpeechSynthesisUtterance.pitch')
   @DocsEditable()
@@ -28713,7 +29027,7 @@
 
   @DomName('SpeechSynthesisUtterance.pitch')
   @DocsEditable()
-  void set pitch(num value) => _blink.BlinkSpeechSynthesisUtterance.pitch_Setter_float(this, value);
+  void set pitch(num value) => _blink.BlinkSpeechSynthesisUtterance.pitch_Setter(this, value);
 
   @DomName('SpeechSynthesisUtterance.rate')
   @DocsEditable()
@@ -28721,7 +29035,7 @@
 
   @DomName('SpeechSynthesisUtterance.rate')
   @DocsEditable()
-  void set rate(num value) => _blink.BlinkSpeechSynthesisUtterance.rate_Setter_float(this, value);
+  void set rate(num value) => _blink.BlinkSpeechSynthesisUtterance.rate_Setter(this, value);
 
   @DomName('SpeechSynthesisUtterance.text')
   @DocsEditable()
@@ -28729,7 +29043,7 @@
 
   @DomName('SpeechSynthesisUtterance.text')
   @DocsEditable()
-  void set text(String value) => _blink.BlinkSpeechSynthesisUtterance.text_Setter_DOMString(this, value);
+  void set text(String value) => _blink.BlinkSpeechSynthesisUtterance.text_Setter(this, value);
 
   @DomName('SpeechSynthesisUtterance.voice')
   @DocsEditable()
@@ -28737,7 +29051,7 @@
 
   @DomName('SpeechSynthesisUtterance.voice')
   @DocsEditable()
-  void set voice(SpeechSynthesisVoice value) => _blink.BlinkSpeechSynthesisUtterance.voice_Setter_SpeechSynthesisVoice(this, value);
+  void set voice(SpeechSynthesisVoice value) => _blink.BlinkSpeechSynthesisUtterance.voice_Setter(this, value);
 
   @DomName('SpeechSynthesisUtterance.volume')
   @DocsEditable()
@@ -28745,7 +29059,7 @@
 
   @DomName('SpeechSynthesisUtterance.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkSpeechSynthesisUtterance.volume_Setter_float(this, value);
+  void set volume(num value) => _blink.BlinkSpeechSynthesisUtterance.volume_Setter(this, value);
 
   /// Stream of `boundary` events handled by this [SpeechSynthesisUtterance].
   @DomName('SpeechSynthesisUtterance.onboundary')
@@ -28915,31 +29229,31 @@
 
   bool __delete__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkStorage.$__delete___Callback_ul(this, index_OR_name);
+      return _blink.BlinkStorage.$__delete___Callback_1(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkStorage.$__delete___Callback_DOMString(this, index_OR_name);
+      return _blink.BlinkStorage.$__delete___Callback_1(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   String __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkStorage.$__getter___Callback_ul(this, index_OR_name);
+      return _blink.BlinkStorage.$__getter___Callback_1(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkStorage.$__getter___Callback_DOMString(this, index_OR_name);
+      return _blink.BlinkStorage.$__getter___Callback_1(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void __setter__(index_OR_name, String value) {
     if ((value is String || value == null) && (index_OR_name is int || index_OR_name == null)) {
-      _blink.BlinkStorage.$__setter___Callback_ul_DOMString(this, index_OR_name, value);
+      _blink.BlinkStorage.$__setter___Callback_2(this, index_OR_name, value);
       return;
     }
     if ((value is String || value == null) && (index_OR_name is String || index_OR_name == null)) {
-      _blink.BlinkStorage.$__setter___Callback_DOMString_DOMString(this, index_OR_name, value);
+      _blink.BlinkStorage.$__setter___Callback_2(this, index_OR_name, value);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -28951,19 +29265,19 @@
 
   @DomName('Storage.getItem')
   @DocsEditable()
-  String _getItem(String key) => _blink.BlinkStorage.getItem_Callback_DOMString(this, key);
+  String _getItem(String key) => _blink.BlinkStorage.getItem_Callback_1(this, key);
 
   @DomName('Storage.key')
   @DocsEditable()
-  String _key(int index) => _blink.BlinkStorage.key_Callback_ul(this, index);
+  String _key(int index) => _blink.BlinkStorage.key_Callback_1(this, index);
 
   @DomName('Storage.removeItem')
   @DocsEditable()
-  void _removeItem(String key) => _blink.BlinkStorage.removeItem_Callback_DOMString(this, key);
+  void _removeItem(String key) => _blink.BlinkStorage.removeItem_Callback_1(this, key);
 
   @DomName('Storage.setItem')
   @DocsEditable()
-  void _setItem(String key, String data) => _blink.BlinkStorage.setItem_Callback_DOMString_DOMString(this, key, data);
+  void _setItem(String key, String data) => _blink.BlinkStorage.setItem_Callback_2(this, key, data);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29021,7 +29335,7 @@
 
   @DomName('StorageEvent.initStorageEvent')
   @DocsEditable()
-  void _initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) => _blink.BlinkStorageEvent.initStorageEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString_DOMString_DOMString_Storage(this, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
+  void _initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) => _blink.BlinkStorageEvent.initStorageEvent_Callback_8(this, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29070,6 +29384,16 @@
   @Experimental() // untriaged
   List<String> get supportedTypes => _blink.BlinkStorageQuota.supportedTypes_Getter(this);
 
+  @DomName('StorageQuota.queryInfo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future queryInfo(String type) => _blink.BlinkStorageQuota.queryInfo_Callback_1(this, type);
+
+  @DomName('StorageQuota.requestPersistentQuota')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future requestPersistentQuota(int newQuota) => _blink.BlinkStorageQuota.requestPersistentQuota_Callback_1(this, newQuota);
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -29133,7 +29457,7 @@
 
   @DomName('HTMLStyleElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLStyleElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLStyleElement.disabled_Setter(this, value);
 
   @DomName('HTMLStyleElement.media')
   @DocsEditable()
@@ -29141,7 +29465,7 @@
 
   @DomName('HTMLStyleElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLStyleElement.media_Setter_DOMString(this, value);
+  void set media(String value) => _blink.BlinkHTMLStyleElement.media_Setter(this, value);
 
   @DomName('HTMLStyleElement.sheet')
   @DocsEditable()
@@ -29153,7 +29477,7 @@
 
   @DomName('HTMLStyleElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLStyleElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkHTMLStyleElement.type_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29177,7 +29501,7 @@
 
   @DomName('StyleMedia.matchMedium')
   @DocsEditable()
-  bool matchMedium(String mediaquery) => _blink.BlinkStyleMedia.matchMedium_Callback_DOMString(this, mediaquery);
+  bool matchMedium(String mediaquery) => _blink.BlinkStyleMedia.matchMedium_Callback_1(this, mediaquery);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29199,7 +29523,7 @@
 
   @DomName('StyleSheet.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkStyleSheet.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkStyleSheet.disabled_Setter(this, value);
 
   @DomName('StyleSheet.href')
   @DocsEditable()
@@ -29283,7 +29607,7 @@
 
   @DomName('HTMLTableCellElement.colSpan')
   @DocsEditable()
-  void set colSpan(int value) => _blink.BlinkHTMLTableCellElement.colSpan_Setter_long(this, value);
+  void set colSpan(int value) => _blink.BlinkHTMLTableCellElement.colSpan_Setter(this, value);
 
   @DomName('HTMLTableCellElement.headers')
   @DocsEditable()
@@ -29291,7 +29615,7 @@
 
   @DomName('HTMLTableCellElement.headers')
   @DocsEditable()
-  void set headers(String value) => _blink.BlinkHTMLTableCellElement.headers_Setter_DOMString(this, value);
+  void set headers(String value) => _blink.BlinkHTMLTableCellElement.headers_Setter(this, value);
 
   @DomName('HTMLTableCellElement.rowSpan')
   @DocsEditable()
@@ -29299,7 +29623,7 @@
 
   @DomName('HTMLTableCellElement.rowSpan')
   @DocsEditable()
-  void set rowSpan(int value) => _blink.BlinkHTMLTableCellElement.rowSpan_Setter_long(this, value);
+  void set rowSpan(int value) => _blink.BlinkHTMLTableCellElement.rowSpan_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29331,7 +29655,7 @@
 
   @DomName('HTMLTableColElement.span')
   @DocsEditable()
-  void set span(int value) => _blink.BlinkHTMLTableColElement.span_Setter_long(this, value);
+  void set span(int value) => _blink.BlinkHTMLTableColElement.span_Setter(this, value);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -29381,7 +29705,7 @@
 
   @DomName('HTMLTableElement.caption')
   @DocsEditable()
-  void set caption(TableCaptionElement value) => _blink.BlinkHTMLTableElement.caption_Setter_HTMLTableCaptionElement(this, value);
+  void set caption(TableCaptionElement value) => _blink.BlinkHTMLTableElement.caption_Setter(this, value);
 
   @DomName('HTMLTableElement.rows')
   @DocsEditable()
@@ -29397,7 +29721,7 @@
 
   @DomName('HTMLTableElement.tFoot')
   @DocsEditable()
-  void set tFoot(TableSectionElement value) => _blink.BlinkHTMLTableElement.tFoot_Setter_HTMLTableSectionElement(this, value);
+  void set tFoot(TableSectionElement value) => _blink.BlinkHTMLTableElement.tFoot_Setter(this, value);
 
   @DomName('HTMLTableElement.tHead')
   @DocsEditable()
@@ -29405,7 +29729,7 @@
 
   @DomName('HTMLTableElement.tHead')
   @DocsEditable()
-  void set tHead(TableSectionElement value) => _blink.BlinkHTMLTableElement.tHead_Setter_HTMLTableSectionElement(this, value);
+  void set tHead(TableSectionElement value) => _blink.BlinkHTMLTableElement.tHead_Setter(this, value);
 
   @DomName('HTMLTableElement.createCaption')
   @DocsEditable()
@@ -29429,7 +29753,7 @@
 
   @DomName('HTMLTableElement.deleteRow')
   @DocsEditable()
-  void deleteRow(int index) => _blink.BlinkHTMLTableElement.deleteRow_Callback_long(this, index);
+  void deleteRow(int index) => _blink.BlinkHTMLTableElement.deleteRow_Callback_1(this, index);
 
   @DomName('HTMLTableElement.deleteTFoot')
   @DocsEditable()
@@ -29441,7 +29765,7 @@
 
   HtmlElement _insertRow([int index]) {
     if (index != null) {
-      return _blink.BlinkHTMLTableElement.insertRow_Callback_long(this, index);
+      return _blink.BlinkHTMLTableElement.insertRow_Callback_1(this, index);
     }
     return _blink.BlinkHTMLTableElement.insertRow_Callback(this);
   }
@@ -29493,11 +29817,11 @@
 
   @DomName('HTMLTableRowElement.deleteCell')
   @DocsEditable()
-  void deleteCell(int index) => _blink.BlinkHTMLTableRowElement.deleteCell_Callback_long(this, index);
+  void deleteCell(int index) => _blink.BlinkHTMLTableRowElement.deleteCell_Callback_1(this, index);
 
   HtmlElement _insertCell([int index]) {
     if (index != null) {
-      return _blink.BlinkHTMLTableRowElement.insertCell_Callback_long(this, index);
+      return _blink.BlinkHTMLTableRowElement.insertCell_Callback_1(this, index);
     }
     return _blink.BlinkHTMLTableRowElement.insertCell_Callback(this);
   }
@@ -29537,11 +29861,11 @@
 
   @DomName('HTMLTableSectionElement.deleteRow')
   @DocsEditable()
-  void deleteRow(int index) => _blink.BlinkHTMLTableSectionElement.deleteRow_Callback_long(this, index);
+  void deleteRow(int index) => _blink.BlinkHTMLTableSectionElement.deleteRow_Callback_1(this, index);
 
   HtmlElement _insertRow([int index]) {
     if (index != null) {
-      return _blink.BlinkHTMLTableSectionElement.insertRow_Callback_long(this, index);
+      return _blink.BlinkHTMLTableSectionElement.insertRow_Callback_1(this, index);
     }
     return _blink.BlinkHTMLTableSectionElement.insertRow_Callback(this);
   }
@@ -29620,7 +29944,7 @@
 
   @DomName('Text.splitText')
   @DocsEditable()
-  Text splitText(int offset) => _blink.BlinkText.splitText_Callback_ul(this, offset);
+  Text splitText(int offset) => _blink.BlinkText.splitText_Callback_1(this, offset);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29652,7 +29976,7 @@
 
   @DomName('HTMLTextAreaElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLTextAreaElement.autofocus_Setter_boolean(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLTextAreaElement.autofocus_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.cols')
   @DocsEditable()
@@ -29660,7 +29984,7 @@
 
   @DomName('HTMLTextAreaElement.cols')
   @DocsEditable()
-  void set cols(int value) => _blink.BlinkHTMLTextAreaElement.cols_Setter_long(this, value);
+  void set cols(int value) => _blink.BlinkHTMLTextAreaElement.cols_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.defaultValue')
   @DocsEditable()
@@ -29668,7 +29992,7 @@
 
   @DomName('HTMLTextAreaElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLTextAreaElement.defaultValue_Setter_DOMString(this, value);
+  void set defaultValue(String value) => _blink.BlinkHTMLTextAreaElement.defaultValue_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.dirName')
   @DocsEditable()
@@ -29680,7 +30004,7 @@
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#dom-textarea-dirname
   @Experimental()
-  void set dirName(String value) => _blink.BlinkHTMLTextAreaElement.dirName_Setter_DOMString(this, value);
+  void set dirName(String value) => _blink.BlinkHTMLTextAreaElement.dirName_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.disabled')
   @DocsEditable()
@@ -29688,7 +30012,7 @@
 
   @DomName('HTMLTextAreaElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLTextAreaElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLTextAreaElement.disabled_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.form')
   @DocsEditable()
@@ -29702,7 +30026,7 @@
   @DomName('HTMLTextAreaElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set inputMode(String value) => _blink.BlinkHTMLTextAreaElement.inputMode_Setter_DOMString(this, value);
+  void set inputMode(String value) => _blink.BlinkHTMLTextAreaElement.inputMode_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.labels')
   @DocsEditable()
@@ -29715,7 +30039,7 @@
 
   @DomName('HTMLTextAreaElement.maxLength')
   @DocsEditable()
-  void set maxLength(int value) => _blink.BlinkHTMLTextAreaElement.maxLength_Setter_long(this, value);
+  void set maxLength(int value) => _blink.BlinkHTMLTextAreaElement.maxLength_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.name')
   @DocsEditable()
@@ -29723,7 +30047,7 @@
 
   @DomName('HTMLTextAreaElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLTextAreaElement.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkHTMLTextAreaElement.name_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.placeholder')
   @DocsEditable()
@@ -29731,7 +30055,7 @@
 
   @DomName('HTMLTextAreaElement.placeholder')
   @DocsEditable()
-  void set placeholder(String value) => _blink.BlinkHTMLTextAreaElement.placeholder_Setter_DOMString(this, value);
+  void set placeholder(String value) => _blink.BlinkHTMLTextAreaElement.placeholder_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.readOnly')
   @DocsEditable()
@@ -29739,7 +30063,7 @@
 
   @DomName('HTMLTextAreaElement.readOnly')
   @DocsEditable()
-  void set readOnly(bool value) => _blink.BlinkHTMLTextAreaElement.readOnly_Setter_boolean(this, value);
+  void set readOnly(bool value) => _blink.BlinkHTMLTextAreaElement.readOnly_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.required')
   @DocsEditable()
@@ -29747,7 +30071,7 @@
 
   @DomName('HTMLTextAreaElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLTextAreaElement.required_Setter_boolean(this, value);
+  void set required(bool value) => _blink.BlinkHTMLTextAreaElement.required_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.rows')
   @DocsEditable()
@@ -29755,7 +30079,7 @@
 
   @DomName('HTMLTextAreaElement.rows')
   @DocsEditable()
-  void set rows(int value) => _blink.BlinkHTMLTextAreaElement.rows_Setter_long(this, value);
+  void set rows(int value) => _blink.BlinkHTMLTextAreaElement.rows_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.selectionDirection')
   @DocsEditable()
@@ -29763,7 +30087,7 @@
 
   @DomName('HTMLTextAreaElement.selectionDirection')
   @DocsEditable()
-  void set selectionDirection(String value) => _blink.BlinkHTMLTextAreaElement.selectionDirection_Setter_DOMString(this, value);
+  void set selectionDirection(String value) => _blink.BlinkHTMLTextAreaElement.selectionDirection_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.selectionEnd')
   @DocsEditable()
@@ -29771,7 +30095,7 @@
 
   @DomName('HTMLTextAreaElement.selectionEnd')
   @DocsEditable()
-  void set selectionEnd(int value) => _blink.BlinkHTMLTextAreaElement.selectionEnd_Setter_long(this, value);
+  void set selectionEnd(int value) => _blink.BlinkHTMLTextAreaElement.selectionEnd_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.selectionStart')
   @DocsEditable()
@@ -29779,7 +30103,7 @@
 
   @DomName('HTMLTextAreaElement.selectionStart')
   @DocsEditable()
-  void set selectionStart(int value) => _blink.BlinkHTMLTextAreaElement.selectionStart_Setter_long(this, value);
+  void set selectionStart(int value) => _blink.BlinkHTMLTextAreaElement.selectionStart_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.textLength')
   @DocsEditable()
@@ -29803,7 +30127,7 @@
 
   @DomName('HTMLTextAreaElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLTextAreaElement.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkHTMLTextAreaElement.value_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.willValidate')
   @DocsEditable()
@@ -29815,7 +30139,7 @@
 
   @DomName('HTMLTextAreaElement.wrap')
   @DocsEditable()
-  void set wrap(String value) => _blink.BlinkHTMLTextAreaElement.wrap_Setter_DOMString(this, value);
+  void set wrap(String value) => _blink.BlinkHTMLTextAreaElement.wrap_Setter(this, value);
 
   @DomName('HTMLTextAreaElement.checkValidity')
   @DocsEditable()
@@ -29827,15 +30151,15 @@
 
   @DomName('HTMLTextAreaElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLTextAreaElement.setCustomValidity_Callback_DOMString(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLTextAreaElement.setCustomValidity_Callback_1(this, error);
 
   void setRangeText(String replacement, {int start, int end, String selectionMode}) {
     if ((replacement is String || replacement == null) && start == null && end == null && selectionMode == null) {
-      _blink.BlinkHTMLTextAreaElement.setRangeText_Callback_DOMString(this, replacement);
+      _blink.BlinkHTMLTextAreaElement.setRangeText_Callback_1(this, replacement);
       return;
     }
     if ((selectionMode is String || selectionMode == null) && (end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null)) {
-      _blink.BlinkHTMLTextAreaElement.setRangeText_Callback_DOMString_ul_ul_DOMString(this, replacement, start, end, selectionMode);
+      _blink.BlinkHTMLTextAreaElement.setRangeText_Callback_4(this, replacement, start, end, selectionMode);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -29843,10 +30167,10 @@
 
   void setSelectionRange(int start, int end, [String direction]) {
     if (direction != null) {
-      _blink.BlinkHTMLTextAreaElement.setSelectionRange_Callback_long_long_DOMString(this, start, end, direction);
+      _blink.BlinkHTMLTextAreaElement.setSelectionRange_Callback_3(this, start, end, direction);
       return;
     }
-    _blink.BlinkHTMLTextAreaElement.setSelectionRange_Callback_long_long(this, start, end);
+    _blink.BlinkHTMLTextAreaElement.setSelectionRange_Callback_2(this, start, end);
     return;
   }
 
@@ -29879,7 +30203,7 @@
 
   @DomName('TextEvent.initTextEvent')
   @DocsEditable()
-  void _initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkTextEvent.initTextEvent_Callback_DOMString_boolean_boolean_Window_DOMString(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+  void _initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkTextEvent.initTextEvent_Callback_5(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30011,7 +30335,7 @@
 
   @DomName('TextTrack.mode')
   @DocsEditable()
-  void set mode(String value) => _blink.BlinkTextTrack.mode_Setter_DOMString(this, value);
+  void set mode(String value) => _blink.BlinkTextTrack.mode_Setter(this, value);
 
   @DomName('TextTrack.regions')
   @DocsEditable()
@@ -30020,21 +30344,21 @@
 
   @DomName('TextTrack.addCue')
   @DocsEditable()
-  void addCue(TextTrackCue cue) => _blink.BlinkTextTrack.addCue_Callback_TextTrackCue(this, cue);
+  void addCue(TextTrackCue cue) => _blink.BlinkTextTrack.addCue_Callback_1(this, cue);
 
   @DomName('TextTrack.addRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void addRegion(VttRegion region) => _blink.BlinkTextTrack.addRegion_Callback_VTTRegion(this, region);
+  void addRegion(VttRegion region) => _blink.BlinkTextTrack.addRegion_Callback_1(this, region);
 
   @DomName('TextTrack.removeCue')
   @DocsEditable()
-  void removeCue(TextTrackCue cue) => _blink.BlinkTextTrack.removeCue_Callback_TextTrackCue(this, cue);
+  void removeCue(TextTrackCue cue) => _blink.BlinkTextTrack.removeCue_Callback_1(this, cue);
 
   @DomName('TextTrack.removeRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void removeRegion(VttRegion region) => _blink.BlinkTextTrack.removeRegion_Callback_VTTRegion(this, region);
+  void removeRegion(VttRegion region) => _blink.BlinkTextTrack.removeRegion_Callback_1(this, region);
 
   /// Stream of `cuechange` events handled by this [TextTrack].
   @DomName('TextTrack.oncuechange')
@@ -30083,7 +30407,7 @@
 
   @DomName('TextTrackCue.endTime')
   @DocsEditable()
-  void set endTime(num value) => _blink.BlinkTextTrackCue.endTime_Setter_double(this, value);
+  void set endTime(num value) => _blink.BlinkTextTrackCue.endTime_Setter(this, value);
 
   @DomName('TextTrackCue.id')
   @DocsEditable()
@@ -30091,7 +30415,7 @@
 
   @DomName('TextTrackCue.id')
   @DocsEditable()
-  void set id(String value) => _blink.BlinkTextTrackCue.id_Setter_DOMString(this, value);
+  void set id(String value) => _blink.BlinkTextTrackCue.id_Setter(this, value);
 
   @DomName('TextTrackCue.pauseOnExit')
   @DocsEditable()
@@ -30099,7 +30423,7 @@
 
   @DomName('TextTrackCue.pauseOnExit')
   @DocsEditable()
-  void set pauseOnExit(bool value) => _blink.BlinkTextTrackCue.pauseOnExit_Setter_boolean(this, value);
+  void set pauseOnExit(bool value) => _blink.BlinkTextTrackCue.pauseOnExit_Setter(this, value);
 
   @DomName('TextTrackCue.startTime')
   @DocsEditable()
@@ -30107,7 +30431,7 @@
 
   @DomName('TextTrackCue.startTime')
   @DocsEditable()
-  void set startTime(num value) => _blink.BlinkTextTrackCue.startTime_Setter_double(this, value);
+  void set startTime(num value) => _blink.BlinkTextTrackCue.startTime_Setter(this, value);
 
   @DomName('TextTrackCue.track')
   @DocsEditable()
@@ -30146,10 +30470,10 @@
   TextTrackCue operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkTextTrackCueList.item_Callback_ul(this, index);
+    return _blink.BlinkTextTrackCueList.item_Callback_1(this, index);
   }
 
-  TextTrackCue _nativeIndexedGetter(int index) => _blink.BlinkTextTrackCueList.item_Callback_ul(this, index);
+  TextTrackCue _nativeIndexedGetter(int index) => _blink.BlinkTextTrackCueList.item_Callback_1(this, index);
 
   void operator[]=(int index, TextTrackCue value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -30191,11 +30515,11 @@
 
   @DomName('TextTrackCueList.getCueById')
   @DocsEditable()
-  TextTrackCue getCueById(String id) => _blink.BlinkTextTrackCueList.getCueById_Callback_DOMString(this, id);
+  TextTrackCue getCueById(String id) => _blink.BlinkTextTrackCueList.getCueById_Callback_1(this, id);
 
   @DomName('TextTrackCueList.item')
   @DocsEditable()
-  TextTrackCue item(int index) => _blink.BlinkTextTrackCueList.item_Callback_ul(this, index);
+  TextTrackCue item(int index) => _blink.BlinkTextTrackCueList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30235,10 +30559,10 @@
   TextTrack operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkTextTrackList.item_Callback_ul(this, index);
+    return _blink.BlinkTextTrackList.item_Callback_1(this, index);
   }
 
-  TextTrack _nativeIndexedGetter(int index) => _blink.BlinkTextTrackList.item_Callback_ul(this, index);
+  TextTrack _nativeIndexedGetter(int index) => _blink.BlinkTextTrackList.item_Callback_1(this, index);
 
   void operator[]=(int index, TextTrack value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -30281,11 +30605,11 @@
   @DomName('TextTrackList.getTrackById')
   @DocsEditable()
   @Experimental() // untriaged
-  TextTrack getTrackById(String id) => _blink.BlinkTextTrackList.getTrackById_Callback_DOMString(this, id);
+  TextTrack getTrackById(String id) => _blink.BlinkTextTrackList.getTrackById_Callback_1(this, id);
 
   @DomName('TextTrackList.item')
   @DocsEditable()
-  TextTrack item(int index) => _blink.BlinkTextTrackList.item_Callback_ul(this, index);
+  TextTrack item(int index) => _blink.BlinkTextTrackList.item_Callback_1(this, index);
 
   /// Stream of `addtrack` events handled by this [TextTrackList].
   @DomName('TextTrackList.onaddtrack')
@@ -30318,11 +30642,11 @@
 
   @DomName('TimeRanges.end')
   @DocsEditable()
-  double end(int index) => _blink.BlinkTimeRanges.end_Callback_ul(this, index);
+  double end(int index) => _blink.BlinkTimeRanges.end_Callback_1(this, index);
 
   @DomName('TimeRanges.start')
   @DocsEditable()
-  double start(int index) => _blink.BlinkTimeRanges.start_Callback_ul(this, index);
+  double start(int index) => _blink.BlinkTimeRanges.start_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30356,7 +30680,7 @@
   @DomName('Timing.delay')
   @DocsEditable()
   @Experimental() // untriaged
-  void set delay(num value) => _blink.BlinkTiming.delay_Setter_double(this, value);
+  void set delay(num value) => _blink.BlinkTiming.delay_Setter(this, value);
 
   @DomName('Timing.direction')
   @DocsEditable()
@@ -30366,7 +30690,7 @@
   @DomName('Timing.direction')
   @DocsEditable()
   @Experimental() // untriaged
-  void set direction(String value) => _blink.BlinkTiming.direction_Setter_DOMString(this, value);
+  void set direction(String value) => _blink.BlinkTiming.direction_Setter(this, value);
 
   @DomName('Timing.easing')
   @DocsEditable()
@@ -30376,7 +30700,7 @@
   @DomName('Timing.easing')
   @DocsEditable()
   @Experimental() // untriaged
-  void set easing(String value) => _blink.BlinkTiming.easing_Setter_DOMString(this, value);
+  void set easing(String value) => _blink.BlinkTiming.easing_Setter(this, value);
 
   @DomName('Timing.endDelay')
   @DocsEditable()
@@ -30386,7 +30710,7 @@
   @DomName('Timing.endDelay')
   @DocsEditable()
   @Experimental() // untriaged
-  void set endDelay(num value) => _blink.BlinkTiming.endDelay_Setter_double(this, value);
+  void set endDelay(num value) => _blink.BlinkTiming.endDelay_Setter(this, value);
 
   @DomName('Timing.fill')
   @DocsEditable()
@@ -30396,7 +30720,7 @@
   @DomName('Timing.fill')
   @DocsEditable()
   @Experimental() // untriaged
-  void set fill(String value) => _blink.BlinkTiming.fill_Setter_DOMString(this, value);
+  void set fill(String value) => _blink.BlinkTiming.fill_Setter(this, value);
 
   @DomName('Timing.iterationStart')
   @DocsEditable()
@@ -30406,7 +30730,7 @@
   @DomName('Timing.iterationStart')
   @DocsEditable()
   @Experimental() // untriaged
-  void set iterationStart(num value) => _blink.BlinkTiming.iterationStart_Setter_double(this, value);
+  void set iterationStart(num value) => _blink.BlinkTiming.iterationStart_Setter(this, value);
 
   @DomName('Timing.iterations')
   @DocsEditable()
@@ -30416,7 +30740,7 @@
   @DomName('Timing.iterations')
   @DocsEditable()
   @Experimental() // untriaged
-  void set iterations(num value) => _blink.BlinkTiming.iterations_Setter_double(this, value);
+  void set iterations(num value) => _blink.BlinkTiming.iterations_Setter(this, value);
 
   @DomName('Timing.playbackRate')
   @DocsEditable()
@@ -30426,17 +30750,17 @@
   @DomName('Timing.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  void set playbackRate(num value) => _blink.BlinkTiming.playbackRate_Setter_double(this, value);
+  void set playbackRate(num value) => _blink.BlinkTiming.playbackRate_Setter(this, value);
 
   @DomName('Timing.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  Object __getter__(String name) => _blink.BlinkTiming.$__getter___Callback_DOMString(this, name);
+  Object __getter__(String name) => _blink.BlinkTiming.$__getter___Callback_1(this, name);
 
   @DomName('Timing.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(String name, num duration) => _blink.BlinkTiming.$__setter___Callback_DOMString_double(this, name, duration);
+  void __setter__(String name, num duration) => _blink.BlinkTiming.$__setter___Callback_2(this, name, duration);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30626,7 +30950,7 @@
 
   @DomName('TouchEvent.initTouchEvent')
   @DocsEditable()
-  void _initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int unused1, int unused2, int unused3, int unused4, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkTouchEvent.initTouchEvent_Callback_TouchList_TouchList_TouchList_DOMString_Window_long_long_long_long_boolean_boolean_boolean_boolean(this, touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
+  void _initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int unused1, int unused2, int unused3, int unused4, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkTouchEvent.initTouchEvent_Callback_13(this, touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
 
 
   /**
@@ -30666,10 +30990,10 @@
   Touch operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkTouchList.item_Callback_ul(this, index);
+    return _blink.BlinkTouchList.item_Callback_1(this, index);
   }
 
-  Touch _nativeIndexedGetter(int index) => _blink.BlinkTouchList.item_Callback_ul(this, index);
+  Touch _nativeIndexedGetter(int index) => _blink.BlinkTouchList.item_Callback_1(this, index);
 
   void operator[]=(int index, Touch value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -30711,7 +31035,7 @@
 
   @DomName('TouchList.item')
   @DocsEditable()
-  Touch item(int index) => _blink.BlinkTouchList.item_Callback_ul(this, index);
+  Touch item(int index) => _blink.BlinkTouchList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30767,7 +31091,7 @@
 
   @DomName('HTMLTrackElement.default')
   @DocsEditable()
-  void set defaultValue(bool value) => _blink.BlinkHTMLTrackElement.default_Setter_boolean(this, value);
+  void set defaultValue(bool value) => _blink.BlinkHTMLTrackElement.default_Setter(this, value);
 
   @DomName('HTMLTrackElement.integrity')
   @DocsEditable()
@@ -30777,7 +31101,7 @@
   @DomName('HTMLTrackElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLTrackElement.integrity_Setter_DOMString(this, value);
+  void set integrity(String value) => _blink.BlinkHTMLTrackElement.integrity_Setter(this, value);
 
   @DomName('HTMLTrackElement.kind')
   @DocsEditable()
@@ -30785,7 +31109,7 @@
 
   @DomName('HTMLTrackElement.kind')
   @DocsEditable()
-  void set kind(String value) => _blink.BlinkHTMLTrackElement.kind_Setter_DOMString(this, value);
+  void set kind(String value) => _blink.BlinkHTMLTrackElement.kind_Setter(this, value);
 
   @DomName('HTMLTrackElement.label')
   @DocsEditable()
@@ -30793,7 +31117,7 @@
 
   @DomName('HTMLTrackElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLTrackElement.label_Setter_DOMString(this, value);
+  void set label(String value) => _blink.BlinkHTMLTrackElement.label_Setter(this, value);
 
   @DomName('HTMLTrackElement.readyState')
   @DocsEditable()
@@ -30805,7 +31129,7 @@
 
   @DomName('HTMLTrackElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLTrackElement.src_Setter_DOMString(this, value);
+  void set src(String value) => _blink.BlinkHTMLTrackElement.src_Setter(this, value);
 
   @DomName('HTMLTrackElement.srclang')
   @DocsEditable()
@@ -30813,7 +31137,7 @@
 
   @DomName('HTMLTrackElement.srclang')
   @DocsEditable()
-  void set srclang(String value) => _blink.BlinkHTMLTrackElement.srclang_Setter_DOMString(this, value);
+  void set srclang(String value) => _blink.BlinkHTMLTrackElement.srclang_Setter(this, value);
 
   @DomName('HTMLTrackElement.track')
   @DocsEditable()
@@ -30885,7 +31209,7 @@
 
   @DomName('TreeWalker.currentNode')
   @DocsEditable()
-  void set currentNode(Node value) => _blink.BlinkTreeWalker.currentNode_Setter_Node(this, value);
+  void set currentNode(Node value) => _blink.BlinkTreeWalker.currentNode_Setter(this, value);
 
   @DomName('TreeWalker.filter')
   @DocsEditable()
@@ -31005,7 +31329,7 @@
 
   @DomName('UIEvent.initUIEvent')
   @DocsEditable()
-  void _initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) => _blink.BlinkUIEvent.initUIEvent_Callback_DOMString_boolean_boolean_Window_long(this, type, canBubble, cancelable, view, detail);
+  void _initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) => _blink.BlinkUIEvent.initUIEvent_Callback_5(this, type, canBubble, cancelable, view, detail);
 
 
   @DomName('UIEvent.layerX')
@@ -31075,32 +31399,32 @@
 
   static String createObjectUrl(blob_OR_source_OR_stream) {
     if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
-      return _blink.BlinkURL.createObjectURL_Callback_Blob(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.createObjectURL_Callback_1(blob_OR_source_OR_stream);
     }
     if ((blob_OR_source_OR_stream is MediaSource)) {
-      return _blink.BlinkURL.createObjectURL_Callback_MediaSource(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.createObjectURL_Callback_1(blob_OR_source_OR_stream);
     }
     if ((blob_OR_source_OR_stream is MediaStream)) {
-      return _blink.BlinkURL.createObjectURL_Callback_MediaStream(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.createObjectURL_Callback_1(blob_OR_source_OR_stream);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('URL.createObjectUrlFromBlob')
   @DocsEditable()
-  static String createObjectUrlFromBlob(Blob blob) => _blink.BlinkURL.createObjectURL_Callback_Blob(blob);
+  static String createObjectUrlFromBlob(Blob blob) => _blink.BlinkURL.createObjectURL_Callback_1(blob);
 
   @DomName('URL.createObjectUrlFromSource')
   @DocsEditable()
-  static String createObjectUrlFromSource(MediaSource source) => _blink.BlinkURL.createObjectURL_Callback_MediaSource(source);
+  static String createObjectUrlFromSource(MediaSource source) => _blink.BlinkURL.createObjectURL_Callback_1(source);
 
   @DomName('URL.createObjectUrlFromStream')
   @DocsEditable()
-  static String createObjectUrlFromStream(MediaStream stream) => _blink.BlinkURL.createObjectURL_Callback_MediaStream(stream);
+  static String createObjectUrlFromStream(MediaStream stream) => _blink.BlinkURL.createObjectURL_Callback_1(stream);
 
   @DomName('URL.revokeObjectURL')
   @DocsEditable()
-  static void revokeObjectUrl(String url) => _blink.BlinkURL.revokeObjectURL_Callback_DOMString(url);
+  static void revokeObjectUrl(String url) => _blink.BlinkURL.revokeObjectURL_Callback_1(url);
 
   @DomName('URL.hash')
   @DocsEditable()
@@ -31110,7 +31434,7 @@
   @DomName('URL.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hash(String value) => _blink.BlinkURL.hash_Setter_DOMString(this, value);
+  void set hash(String value) => _blink.BlinkURL.hash_Setter(this, value);
 
   @DomName('URL.host')
   @DocsEditable()
@@ -31120,7 +31444,7 @@
   @DomName('URL.host')
   @DocsEditable()
   @Experimental() // untriaged
-  void set host(String value) => _blink.BlinkURL.host_Setter_DOMString(this, value);
+  void set host(String value) => _blink.BlinkURL.host_Setter(this, value);
 
   @DomName('URL.hostname')
   @DocsEditable()
@@ -31130,7 +31454,7 @@
   @DomName('URL.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hostname(String value) => _blink.BlinkURL.hostname_Setter_DOMString(this, value);
+  void set hostname(String value) => _blink.BlinkURL.hostname_Setter(this, value);
 
   @DomName('URL.href')
   @DocsEditable()
@@ -31140,7 +31464,7 @@
   @DomName('URL.href')
   @DocsEditable()
   @Experimental() // untriaged
-  void set href(String value) => _blink.BlinkURL.href_Setter_DOMString(this, value);
+  void set href(String value) => _blink.BlinkURL.href_Setter(this, value);
 
   @DomName('URL.origin')
   @DocsEditable()
@@ -31155,7 +31479,7 @@
   @DomName('URL.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkURL.password_Setter_DOMString(this, value);
+  void set password(String value) => _blink.BlinkURL.password_Setter(this, value);
 
   @DomName('URL.pathname')
   @DocsEditable()
@@ -31165,7 +31489,7 @@
   @DomName('URL.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set pathname(String value) => _blink.BlinkURL.pathname_Setter_DOMString(this, value);
+  void set pathname(String value) => _blink.BlinkURL.pathname_Setter(this, value);
 
   @DomName('URL.port')
   @DocsEditable()
@@ -31175,7 +31499,7 @@
   @DomName('URL.port')
   @DocsEditable()
   @Experimental() // untriaged
-  void set port(String value) => _blink.BlinkURL.port_Setter_DOMString(this, value);
+  void set port(String value) => _blink.BlinkURL.port_Setter(this, value);
 
   @DomName('URL.protocol')
   @DocsEditable()
@@ -31185,7 +31509,7 @@
   @DomName('URL.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  void set protocol(String value) => _blink.BlinkURL.protocol_Setter_DOMString(this, value);
+  void set protocol(String value) => _blink.BlinkURL.protocol_Setter(this, value);
 
   @DomName('URL.search')
   @DocsEditable()
@@ -31195,7 +31519,7 @@
   @DomName('URL.search')
   @DocsEditable()
   @Experimental() // untriaged
-  void set search(String value) => _blink.BlinkURL.search_Setter_DOMString(this, value);
+  void set search(String value) => _blink.BlinkURL.search_Setter(this, value);
 
   @DomName('URL.username')
   @DocsEditable()
@@ -31205,7 +31529,7 @@
   @DomName('URL.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkURL.username_Setter_DOMString(this, value);
+  void set username(String value) => _blink.BlinkURL.username_Setter(this, value);
 
   @DomName('URL.toString')
   @DocsEditable()
@@ -31235,7 +31559,7 @@
   @DomName('URLUtils.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hash(String value) => _blink.BlinkURLUtils.hash_Setter_DOMString(this, value);
+  void set hash(String value) => _blink.BlinkURLUtils.hash_Setter(this, value);
 
   @DomName('URLUtils.host')
   @DocsEditable()
@@ -31245,7 +31569,7 @@
   @DomName('URLUtils.host')
   @DocsEditable()
   @Experimental() // untriaged
-  void set host(String value) => _blink.BlinkURLUtils.host_Setter_DOMString(this, value);
+  void set host(String value) => _blink.BlinkURLUtils.host_Setter(this, value);
 
   @DomName('URLUtils.hostname')
   @DocsEditable()
@@ -31255,7 +31579,7 @@
   @DomName('URLUtils.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hostname(String value) => _blink.BlinkURLUtils.hostname_Setter_DOMString(this, value);
+  void set hostname(String value) => _blink.BlinkURLUtils.hostname_Setter(this, value);
 
   @DomName('URLUtils.href')
   @DocsEditable()
@@ -31265,7 +31589,7 @@
   @DomName('URLUtils.href')
   @DocsEditable()
   @Experimental() // untriaged
-  void set href(String value) => _blink.BlinkURLUtils.href_Setter_DOMString(this, value);
+  void set href(String value) => _blink.BlinkURLUtils.href_Setter(this, value);
 
   @DomName('URLUtils.origin')
   @DocsEditable()
@@ -31280,7 +31604,7 @@
   @DomName('URLUtils.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkURLUtils.password_Setter_DOMString(this, value);
+  void set password(String value) => _blink.BlinkURLUtils.password_Setter(this, value);
 
   @DomName('URLUtils.pathname')
   @DocsEditable()
@@ -31290,7 +31614,7 @@
   @DomName('URLUtils.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set pathname(String value) => _blink.BlinkURLUtils.pathname_Setter_DOMString(this, value);
+  void set pathname(String value) => _blink.BlinkURLUtils.pathname_Setter(this, value);
 
   @DomName('URLUtils.port')
   @DocsEditable()
@@ -31300,7 +31624,7 @@
   @DomName('URLUtils.port')
   @DocsEditable()
   @Experimental() // untriaged
-  void set port(String value) => _blink.BlinkURLUtils.port_Setter_DOMString(this, value);
+  void set port(String value) => _blink.BlinkURLUtils.port_Setter(this, value);
 
   @DomName('URLUtils.protocol')
   @DocsEditable()
@@ -31310,7 +31634,7 @@
   @DomName('URLUtils.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  void set protocol(String value) => _blink.BlinkURLUtils.protocol_Setter_DOMString(this, value);
+  void set protocol(String value) => _blink.BlinkURLUtils.protocol_Setter(this, value);
 
   @DomName('URLUtils.search')
   @DocsEditable()
@@ -31320,7 +31644,7 @@
   @DomName('URLUtils.search')
   @DocsEditable()
   @Experimental() // untriaged
-  void set search(String value) => _blink.BlinkURLUtils.search_Setter_DOMString(this, value);
+  void set search(String value) => _blink.BlinkURLUtils.search_Setter(this, value);
 
   @DomName('URLUtils.username')
   @DocsEditable()
@@ -31330,7 +31654,7 @@
   @DomName('URLUtils.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkURLUtils.username_Setter_DOMString(this, value);
+  void set username(String value) => _blink.BlinkURLUtils.username_Setter(this, value);
 
   @DomName('URLUtils.toString')
   @DocsEditable()
@@ -31483,7 +31807,7 @@
 
   @DomName('HTMLVideoElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLVideoElement.height_Setter_ul(this, value);
+  void set height(int value) => _blink.BlinkHTMLVideoElement.height_Setter(this, value);
 
   @DomName('HTMLVideoElement.poster')
   @DocsEditable()
@@ -31491,7 +31815,7 @@
 
   @DomName('HTMLVideoElement.poster')
   @DocsEditable()
-  void set poster(String value) => _blink.BlinkHTMLVideoElement.poster_Setter_DOMString(this, value);
+  void set poster(String value) => _blink.BlinkHTMLVideoElement.poster_Setter(this, value);
 
   @DomName('HTMLVideoElement.videoHeight')
   @DocsEditable()
@@ -31521,7 +31845,7 @@
 
   @DomName('HTMLVideoElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLVideoElement.width_Setter_ul(this, value);
+  void set width(int value) => _blink.BlinkHTMLVideoElement.width_Setter(this, value);
 
   @DomName('HTMLVideoElement.getVideoPlaybackQuality')
   @DocsEditable()
@@ -31622,7 +31946,7 @@
   @DomName('VideoTrack.selected')
   @DocsEditable()
   @Experimental() // untriaged
-  void set selected(bool value) => _blink.BlinkVideoTrack.selected_Setter_boolean(this, value);
+  void set selected(bool value) => _blink.BlinkVideoTrack.selected_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31657,12 +31981,12 @@
   @DomName('VideoTrackList.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  VideoTrack __getter__(int index) => _blink.BlinkVideoTrackList.$__getter___Callback_ul(this, index);
+  VideoTrack __getter__(int index) => _blink.BlinkVideoTrackList.$__getter___Callback_1(this, index);
 
   @DomName('VideoTrackList.getTrackById')
   @DocsEditable()
   @Experimental() // untriaged
-  VideoTrack getTrackById(String id) => _blink.BlinkVideoTrackList.getTrackById_Callback_DOMString(this, id);
+  VideoTrack getTrackById(String id) => _blink.BlinkVideoTrackList.getTrackById_Callback_1(this, id);
 
   @DomName('VideoTrackList.onchange')
   @DocsEditable()
@@ -31698,7 +32022,7 @@
   @DomName('VTTCue.VTTCue')
   @DocsEditable()
   factory VttCue(num startTime, num endTime, String text) {
-    return _blink.BlinkVTTCue.constructorCallback_double_double_DOMString(startTime, endTime, text);
+    return _blink.BlinkVTTCue.constructorCallback_3(startTime, endTime, text);
   }
 
   @DomName('VTTCue.align')
@@ -31709,7 +32033,7 @@
   @DomName('VTTCue.align')
   @DocsEditable()
   @Experimental() // untriaged
-  void set align(String value) => _blink.BlinkVTTCue.align_Setter_DOMString(this, value);
+  void set align(String value) => _blink.BlinkVTTCue.align_Setter(this, value);
 
   @DomName('VTTCue.line')
   @DocsEditable()
@@ -31719,7 +32043,7 @@
   @DomName('VTTCue.line')
   @DocsEditable()
   @Experimental() // untriaged
-  void set line(int value) => _blink.BlinkVTTCue.line_Setter_long(this, value);
+  void set line(int value) => _blink.BlinkVTTCue.line_Setter(this, value);
 
   @DomName('VTTCue.position')
   @DocsEditable()
@@ -31729,7 +32053,7 @@
   @DomName('VTTCue.position')
   @DocsEditable()
   @Experimental() // untriaged
-  void set position(int value) => _blink.BlinkVTTCue.position_Setter_long(this, value);
+  void set position(int value) => _blink.BlinkVTTCue.position_Setter(this, value);
 
   @DomName('VTTCue.regionId')
   @DocsEditable()
@@ -31739,7 +32063,7 @@
   @DomName('VTTCue.regionId')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionId(String value) => _blink.BlinkVTTCue.regionId_Setter_DOMString(this, value);
+  void set regionId(String value) => _blink.BlinkVTTCue.regionId_Setter(this, value);
 
   @DomName('VTTCue.size')
   @DocsEditable()
@@ -31749,7 +32073,7 @@
   @DomName('VTTCue.size')
   @DocsEditable()
   @Experimental() // untriaged
-  void set size(int value) => _blink.BlinkVTTCue.size_Setter_long(this, value);
+  void set size(int value) => _blink.BlinkVTTCue.size_Setter(this, value);
 
   @DomName('VTTCue.snapToLines')
   @DocsEditable()
@@ -31759,7 +32083,7 @@
   @DomName('VTTCue.snapToLines')
   @DocsEditable()
   @Experimental() // untriaged
-  void set snapToLines(bool value) => _blink.BlinkVTTCue.snapToLines_Setter_boolean(this, value);
+  void set snapToLines(bool value) => _blink.BlinkVTTCue.snapToLines_Setter(this, value);
 
   @DomName('VTTCue.text')
   @DocsEditable()
@@ -31769,7 +32093,7 @@
   @DomName('VTTCue.text')
   @DocsEditable()
   @Experimental() // untriaged
-  void set text(String value) => _blink.BlinkVTTCue.text_Setter_DOMString(this, value);
+  void set text(String value) => _blink.BlinkVTTCue.text_Setter(this, value);
 
   @DomName('VTTCue.vertical')
   @DocsEditable()
@@ -31779,7 +32103,7 @@
   @DomName('VTTCue.vertical')
   @DocsEditable()
   @Experimental() // untriaged
-  void set vertical(String value) => _blink.BlinkVTTCue.vertical_Setter_DOMString(this, value);
+  void set vertical(String value) => _blink.BlinkVTTCue.vertical_Setter(this, value);
 
   @DomName('VTTCue.getCueAsHTML')
   @DocsEditable()
@@ -31815,7 +32139,7 @@
   @DomName('VTTRegion.height')
   @DocsEditable()
   @Experimental() // untriaged
-  void set height(int value) => _blink.BlinkVTTRegion.height_Setter_long(this, value);
+  void set height(int value) => _blink.BlinkVTTRegion.height_Setter(this, value);
 
   @DomName('VTTRegion.id')
   @DocsEditable()
@@ -31825,7 +32149,7 @@
   @DomName('VTTRegion.id')
   @DocsEditable()
   @Experimental() // untriaged
-  void set id(String value) => _blink.BlinkVTTRegion.id_Setter_DOMString(this, value);
+  void set id(String value) => _blink.BlinkVTTRegion.id_Setter(this, value);
 
   @DomName('VTTRegion.regionAnchorX')
   @DocsEditable()
@@ -31835,7 +32159,7 @@
   @DomName('VTTRegion.regionAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionAnchorX(num value) => _blink.BlinkVTTRegion.regionAnchorX_Setter_double(this, value);
+  void set regionAnchorX(num value) => _blink.BlinkVTTRegion.regionAnchorX_Setter(this, value);
 
   @DomName('VTTRegion.regionAnchorY')
   @DocsEditable()
@@ -31845,7 +32169,7 @@
   @DomName('VTTRegion.regionAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionAnchorY(num value) => _blink.BlinkVTTRegion.regionAnchorY_Setter_double(this, value);
+  void set regionAnchorY(num value) => _blink.BlinkVTTRegion.regionAnchorY_Setter(this, value);
 
   @DomName('VTTRegion.scroll')
   @DocsEditable()
@@ -31855,7 +32179,7 @@
   @DomName('VTTRegion.scroll')
   @DocsEditable()
   @Experimental() // untriaged
-  void set scroll(String value) => _blink.BlinkVTTRegion.scroll_Setter_DOMString(this, value);
+  void set scroll(String value) => _blink.BlinkVTTRegion.scroll_Setter(this, value);
 
   @DomName('VTTRegion.track')
   @DocsEditable()
@@ -31870,7 +32194,7 @@
   @DomName('VTTRegion.viewportAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  void set viewportAnchorX(num value) => _blink.BlinkVTTRegion.viewportAnchorX_Setter_double(this, value);
+  void set viewportAnchorX(num value) => _blink.BlinkVTTRegion.viewportAnchorX_Setter(this, value);
 
   @DomName('VTTRegion.viewportAnchorY')
   @DocsEditable()
@@ -31880,7 +32204,7 @@
   @DomName('VTTRegion.viewportAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  void set viewportAnchorY(num value) => _blink.BlinkVTTRegion.viewportAnchorY_Setter_double(this, value);
+  void set viewportAnchorY(num value) => _blink.BlinkVTTRegion.viewportAnchorY_Setter(this, value);
 
   @DomName('VTTRegion.width')
   @DocsEditable()
@@ -31890,7 +32214,7 @@
   @DomName('VTTRegion.width')
   @DocsEditable()
   @Experimental() // untriaged
-  void set width(num value) => _blink.BlinkVTTRegion.width_Setter_double(this, value);
+  void set width(num value) => _blink.BlinkVTTRegion.width_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31915,12 +32239,12 @@
   @DomName('VTTRegionList.getRegionById')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegion getRegionById(String id) => _blink.BlinkVTTRegionList.getRegionById_Callback_DOMString(this, id);
+  VttRegion getRegionById(String id) => _blink.BlinkVTTRegionList.getRegionById_Callback_1(this, id);
 
   @DomName('VTTRegionList.item')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegion item(int index) => _blink.BlinkVTTRegionList.item_Callback_ul(this, index);
+  VttRegion item(int index) => _blink.BlinkVTTRegionList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32019,13 +32343,13 @@
   @DocsEditable()
   factory WebSocket(String url, [protocol_OR_protocols]) {
     if ((url is String || url == null) && protocol_OR_protocols == null) {
-      return _blink.BlinkWebSocket.constructorCallback_DOMString(url);
+      return _blink.BlinkWebSocket.constructorCallback_1(url);
     }
     if ((protocol_OR_protocols is String || protocol_OR_protocols == null) && (url is String || url == null)) {
-      return _blink.BlinkWebSocket.constructorCallback_DOMString_DOMString(url, protocol_OR_protocols);
+      return _blink.BlinkWebSocket.constructorCallback_2(url, protocol_OR_protocols);
     }
     if ((protocol_OR_protocols is List<String> || protocol_OR_protocols == null) && (url is String || url == null)) {
-      return _blink.BlinkWebSocket.constructorCallback_DOMString_SEQ_DOMString_SEQ(url, protocol_OR_protocols);
+      return _blink.BlinkWebSocket.constructorCallback_2(url, protocol_OR_protocols);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -32055,7 +32379,7 @@
 
   @DomName('WebSocket.binaryType')
   @DocsEditable()
-  void set binaryType(String value) => _blink.BlinkWebSocket.binaryType_Setter_DOMString(this, value);
+  void set binaryType(String value) => _blink.BlinkWebSocket.binaryType_Setter(this, value);
 
   @DomName('WebSocket.bufferedAmount')
   @DocsEditable()
@@ -32079,11 +32403,11 @@
 
   void close([int code, String reason]) {
     if (reason != null) {
-      _blink.BlinkWebSocket.close_Callback_us_DOMString(this, code, reason);
+      _blink.BlinkWebSocket.close_Callback_2(this, code, reason);
       return;
     }
     if (code != null) {
-      _blink.BlinkWebSocket.close_Callback_us(this, code);
+      _blink.BlinkWebSocket.close_Callback_1(this, code);
       return;
     }
     _blink.BlinkWebSocket.close_Callback(this);
@@ -32092,19 +32416,19 @@
 
   void send(data) {
     if ((data is String || data == null)) {
-      _blink.BlinkWebSocket.send_Callback_DOMString(this, data);
+      _blink.BlinkWebSocket.send_Callback_1(this, data);
       return;
     }
     if ((data is Blob || data == null)) {
-      _blink.BlinkWebSocket.send_Callback_Blob(this, data);
+      _blink.BlinkWebSocket.send_Callback_1(this, data);
       return;
     }
     if ((data is TypedData || data == null)) {
-      _blink.BlinkWebSocket.send_Callback_ArrayBufferView(this, data);
+      _blink.BlinkWebSocket.send_Callback_1(this, data);
       return;
     }
     if ((data is ByteBuffer || data == null)) {
-      _blink.BlinkWebSocket.send_Callback_ArrayBuffer(this, data);
+      _blink.BlinkWebSocket.send_Callback_1(this, data);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -32112,19 +32436,19 @@
 
   @DomName('WebSocket.sendBlob')
   @DocsEditable()
-  void sendBlob(Blob data) => _blink.BlinkWebSocket.send_Callback_Blob(this, data);
+  void sendBlob(Blob data) => _blink.BlinkWebSocket.send_Callback_1(this, data);
 
   @DomName('WebSocket.sendByteBuffer')
   @DocsEditable()
-  void sendByteBuffer(ByteBuffer data) => _blink.BlinkWebSocket.send_Callback_ArrayBuffer(this, data);
+  void sendByteBuffer(ByteBuffer data) => _blink.BlinkWebSocket.send_Callback_1(this, data);
 
   @DomName('WebSocket.sendString')
   @DocsEditable()
-  void sendString(String data) => _blink.BlinkWebSocket.send_Callback_DOMString(this, data);
+  void sendString(String data) => _blink.BlinkWebSocket.send_Callback_1(this, data);
 
   @DomName('WebSocket.sendTypedData')
   @DocsEditable()
-  void sendTypedData(TypedData data) => _blink.BlinkWebSocket.send_Callback_ArrayBufferView(this, data);
+  void sendTypedData(TypedData data) => _blink.BlinkWebSocket.send_Callback_1(this, data);
 
   /// Stream of `close` events handled by this [WebSocket].
   @DomName('WebSocket.onclose')
@@ -32616,7 +32940,7 @@
   @DomName('Window.defaultStatus')
   @DocsEditable()
   @Experimental() // non-standard
-  void set defaultStatus(String value) => _blink.BlinkWindow.defaultStatus_Setter_DOMString(this, value);
+  void set defaultStatus(String value) => _blink.BlinkWindow.defaultStatus_Setter(this, value);
 
   /// *Deprecated*.
   @DomName('Window.defaultstatus')
@@ -32628,7 +32952,7 @@
   @DomName('Window.defaultstatus')
   @DocsEditable()
   @Experimental() // non-standard
-  void set defaultstatus(String value) => _blink.BlinkWindow.defaultstatus_Setter_DOMString(this, value);
+  void set defaultstatus(String value) => _blink.BlinkWindow.defaultstatus_Setter(this, value);
 
   /**
    * The ratio between physical pixels and logical CSS pixels.
@@ -32770,7 +33094,7 @@
    */
   @DomName('Window.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkWindow.name_Setter_DOMString(this, value);
+  void set name(String value) => _blink.BlinkWindow.name_Setter(this, value);
 
   /**
    * The user agent accessing this window.
@@ -32805,7 +33129,7 @@
 
   @DomName('Window.opener')
   @DocsEditable()
-  void set opener(Window value) => _blink.BlinkWindow.opener_Setter_Window(this, value);
+  void set opener(Window value) => _blink.BlinkWindow.opener_Setter(this, value);
 
   @DomName('Window.orientation')
   @DocsEditable()
@@ -33026,7 +33350,7 @@
   /// *Deprecated*.
   @DomName('Window.status')
   @DocsEditable()
-  void set status(String value) => _blink.BlinkWindow.status_Setter_DOMString(this, value);
+  void set status(String value) => _blink.BlinkWindow.status_Setter(this, value);
 
   /**
    * This window's status bar.
@@ -33087,17 +33411,17 @@
 
   WindowBase __getter__(index_OR_name) {
     if ((index_OR_name is int)) {
-      return _blink.BlinkWindow.$__getter___Callback_ul(this, index_OR_name);
+      return _blink.BlinkWindow.$__getter___Callback_1(this, index_OR_name);
     }
     if ((index_OR_name is String)) {
-      return _blink.BlinkWindow.$__getter___Callback_DOMString(this, index_OR_name);
+      return _blink.BlinkWindow.$__getter___Callback_1(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void alert([String message]) {
     if (message != null) {
-      _blink.BlinkWindow.alert_Callback_DOMString(this, message);
+      _blink.BlinkWindow.alert_Callback_1(this, message);
       return;
     }
     _blink.BlinkWindow.alert_Callback(this);
@@ -33106,7 +33430,7 @@
 
   @DomName('Window.cancelAnimationFrame')
   @DocsEditable()
-  void cancelAnimationFrame(int id) => _blink.BlinkWindow.cancelAnimationFrame_Callback_long(this, id);
+  void cancelAnimationFrame(int id) => _blink.BlinkWindow.cancelAnimationFrame_Callback_1(this, id);
 
   @DomName('Window.close')
   @DocsEditable()
@@ -33114,7 +33438,7 @@
 
   bool confirm([String message]) {
     if (message != null) {
-      return _blink.BlinkWindow.confirm_Callback_DOMString(this, message);
+      return _blink.BlinkWindow.confirm_Callback_1(this, message);
     }
     return _blink.BlinkWindow.confirm_Callback(this);
   }
@@ -33130,11 +33454,11 @@
   @DomName('Window.find')
   @DocsEditable()
   @Experimental() // non-standard
-  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) => _blink.BlinkWindow.find_Callback_DOMString_boolean_boolean_boolean_boolean_boolean_boolean(this, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
+  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) => _blink.BlinkWindow.find_Callback_7(this, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
 
   @DomName('Window.getComputedStyle')
   @DocsEditable()
-  CssStyleDeclaration _getComputedStyle(Element element, String pseudoElement) => _blink.BlinkWindow.getComputedStyle_Callback_Element_DOMString(this, element, pseudoElement);
+  CssStyleDeclaration _getComputedStyle(Element element, String pseudoElement) => _blink.BlinkWindow.getComputedStyle_Callback_2(this, element, pseudoElement);
 
   /**
    * Returns all CSS rules that apply to the element's pseudo-element.
@@ -33142,7 +33466,7 @@
   @DomName('Window.getMatchedCSSRules')
   @DocsEditable()
   @Experimental() // non-standard
-  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) => _blink.BlinkWindow.getMatchedCSSRules_Callback_Element_DOMString(this, element, pseudoElement);
+  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) => _blink.BlinkWindow.getMatchedCSSRules_Callback_2(this, element, pseudoElement);
 
   /**
    * Returns the currently selected text.
@@ -33170,7 +33494,7 @@
    */
   @DomName('Window.matchMedia')
   @DocsEditable()
-  MediaQueryList matchMedia(String query) => _blink.BlinkWindow.matchMedia_Callback_DOMString(this, query);
+  MediaQueryList matchMedia(String query) => _blink.BlinkWindow.matchMedia_Callback_1(this, query);
 
   /**
    * Moves this window.
@@ -33186,29 +33510,26 @@
    */
   @DomName('Window.moveBy')
   @DocsEditable()
-  void moveBy(num x, num y) => _blink.BlinkWindow.moveBy_Callback_float_float(this, x, y);
+  void moveBy(num x, num y) => _blink.BlinkWindow.moveBy_Callback_2(this, x, y);
 
   @DomName('Window.moveTo')
   @DocsEditable()
-  void _moveTo(num x, num y) => _blink.BlinkWindow.moveTo_Callback_float_float(this, x, y);
+  void _moveTo(num x, num y) => _blink.BlinkWindow.moveTo_Callback_2(this, x, y);
 
   @DomName('Window.open')
   @DocsEditable()
-  WindowBase open(String url, String name, [String options]) => _blink.BlinkWindow.open_Callback_DOMString_DOMString_DOMString(this, url, name, options);
+  WindowBase open(String url, String name, [String options]) => _blink.BlinkWindow.open_Callback_3(this, url, name, options);
 
-  /// *Deprecated.*
-  @DomName('Window.openDatabase')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.w3.org/TR/webdatabase/
-  @Experimental() // deprecated
-  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWindow.openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(this, name, version, displayName, estimatedSize, creationCallback);
+  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) {
+    if (creationCallback != null) {
+      return _blink.BlinkWindow.openDatabase_Callback_5(this, name, version, displayName, estimatedSize, creationCallback);
+    }
+    return _blink.BlinkWindow.openDatabase_Callback_4(this, name, version, displayName, estimatedSize);
+  }
 
   @DomName('Window.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List<MessagePort> transfer]) => _blink.BlinkWindow.postMessage_Callback_SerializedScriptValue_DOMString_SEQ_MessagePort_SEQ(this, message, targetOrigin, transfer);
+  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List<MessagePort> transfer]) => _blink.BlinkWindow.postMessage_Callback_3(this, message, targetOrigin, transfer);
 
   /**
    * Opens the print dialog for this window.
@@ -33224,7 +33545,7 @@
 
   @DomName('Window.requestAnimationFrame')
   @DocsEditable()
-  int _requestAnimationFrame(RequestAnimationFrameCallback callback) => _blink.BlinkWindow.requestAnimationFrame_Callback_RequestAnimationFrameCallback(this, callback);
+  int _requestAnimationFrame(RequestAnimationFrameCallback callback) => _blink.BlinkWindow.requestAnimationFrame_Callback_1(this, callback);
 
   /**
    * Resizes this window by an offset.
@@ -33236,7 +33557,7 @@
    */
   @DomName('Window.resizeBy')
   @DocsEditable()
-  void resizeBy(num x, num y) => _blink.BlinkWindow.resizeBy_Callback_float_float(this, x, y);
+  void resizeBy(num x, num y) => _blink.BlinkWindow.resizeBy_Callback_2(this, x, y);
 
   /**
    * Resizes this window to a specific width and height.
@@ -33248,47 +33569,34 @@
    */
   @DomName('Window.resizeTo')
   @DocsEditable()
-  void resizeTo(num width, num height) => _blink.BlinkWindow.resizeTo_Callback_float_float(this, width, height);
+  void resizeTo(num width, num height) => _blink.BlinkWindow.resizeTo_Callback_2(this, width, height);
 
-  /**
-   * Scrolls the page horizontally and vertically to a specific point.
-   *
-   * This method is identical to [scrollTo].
-   *
-   * ## Other resources
-   *
-   * * [Window scroll] (http://docs.webplatform.org/wiki/dom/methods/scroll)
-   * from WebPlatform.org.
-   */
-  @DomName('Window.scroll')
-  @DocsEditable()
-  void scroll(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.scroll_Callback_long_long_Dictionary(this, x, y, scrollOptions);
+  void scroll(int x, int y, [Map scrollOptions]) {
+    if (scrollOptions != null) {
+      _blink.BlinkWindow.scroll_Callback_3(this, x, y, scrollOptions);
+      return;
+    }
+    _blink.BlinkWindow.scroll_Callback_2(this, x, y);
+    return;
+  }
 
-  /**
-   * Scrolls the page horizontally and vertically by an offset.
-   *
-   * ## Other resources
-   *
-   * * [Window scrollBy] (http://docs.webplatform.org/wiki/dom/methods/scrollBy)
-   * from WebPlatform.org.
-   */
-  @DomName('Window.scrollBy')
-  @DocsEditable()
-  void scrollBy(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.scrollBy_Callback_long_long_Dictionary(this, x, y, scrollOptions);
+  void scrollBy(int x, int y, [Map scrollOptions]) {
+    if (scrollOptions != null) {
+      _blink.BlinkWindow.scrollBy_Callback_3(this, x, y, scrollOptions);
+      return;
+    }
+    _blink.BlinkWindow.scrollBy_Callback_2(this, x, y);
+    return;
+  }
 
-  /**
-   * Scrolls the page horizontally and vertically to a specific point.
-   *
-   * This method is identical to [scroll].
-   *
-   * ## Other resources
-   *
-   * * [Window scrollTo] (http://docs.webplatform.org/wiki/dom/methods/scrollTo)
-   * from WebPlatform.org.
-   */
-  @DomName('Window.scrollTo')
-  @DocsEditable()
-  void scrollTo(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.scrollTo_Callback_long_long_Dictionary(this, x, y, scrollOptions);
+  void scrollTo(int x, int y, [Map scrollOptions]) {
+    if (scrollOptions != null) {
+      _blink.BlinkWindow.scrollTo_Callback_3(this, x, y, scrollOptions);
+      return;
+    }
+    _blink.BlinkWindow.scrollTo_Callback_2(this, x, y);
+    return;
+  }
 
   /**
    * Opens a new page as a modal dialog.
@@ -33301,7 +33609,7 @@
    */
   @DomName('Window.showModalDialog')
   @DocsEditable()
-  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) => _blink.BlinkWindow.showModalDialog_Callback_DOMString_ScriptValue_DOMString(this, url, dialogArgs, featureArgs);
+  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) => _blink.BlinkWindow.showModalDialog_Callback_3(this, url, dialogArgs, featureArgs);
 
   /**
    * Stops the window from loading.
@@ -33316,12 +33624,14 @@
   @DocsEditable()
   void stop() => _blink.BlinkWindow.stop_Callback(this);
 
-  @DomName('Window.webkitRequestFileSystem')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  void __requestFileSystem(int type, int size, _FileSystemCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWindow.webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(this, type, size, successCallback, errorCallback);
+  void __requestFileSystem(int type, int size, _FileSystemCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkWindow.webkitRequestFileSystem_Callback_4(this, type, size, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkWindow.webkitRequestFileSystem_Callback_3(this, type, size, successCallback);
+    return;
+  }
 
   Future<FileSystem> _requestFileSystem(int type, int size) {
     var completer = new Completer<FileSystem>();
@@ -33331,21 +33641,14 @@
     return completer.future;
   }
 
-  /**
-   * Asynchronously retrieves a local filesystem entry.
-   *
-   * ## Other resources
-   *
-   * * [Obtaining access to file system entry points]
-   * (http://www.w3.org/TR/file-system-api/#obtaining-access-to-file-system-entry-points)
-   * from W3C.
-   */
-  @DomName('Window.webkitResolveLocalFileSystemURL')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWindow.webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(this, url, successCallback, errorCallback);
+  void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkWindow.webkitResolveLocalFileSystemURL_Callback_3(this, url, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkWindow.webkitResolveLocalFileSystemURL_Callback_2(this, url, successCallback);
+    return;
+  }
 
   Future<Entry> resolveLocalFileSystemUrl(String url) {
     var completer = new Completer<Entry>();
@@ -33357,27 +33660,27 @@
 
   @DomName('Window.atob')
   @DocsEditable()
-  String atob(String string) => _blink.BlinkWindow.atob_Callback_DOMString(this, string);
+  String atob(String string) => _blink.BlinkWindow.atob_Callback_1(this, string);
 
   @DomName('Window.btoa')
   @DocsEditable()
-  String btoa(String string) => _blink.BlinkWindow.btoa_Callback_DOMString(this, string);
+  String btoa(String string) => _blink.BlinkWindow.btoa_Callback_1(this, string);
 
   @DomName('Window.clearInterval')
   @DocsEditable()
-  void _clearInterval(int handle) => _blink.BlinkWindow.clearInterval_Callback_long(this, handle);
+  void _clearInterval(int handle) => _blink.BlinkWindow.clearInterval_Callback_1(this, handle);
 
   @DomName('Window.clearTimeout')
   @DocsEditable()
-  void _clearTimeout(int handle) => _blink.BlinkWindow.clearTimeout_Callback_long(this, handle);
+  void _clearTimeout(int handle) => _blink.BlinkWindow.clearTimeout_Callback_1(this, handle);
 
   @DomName('Window.setInterval')
   @DocsEditable()
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWindow.setInterval_Callback_ScriptValue_long(this, handler, timeout);
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWindow.setInterval_Callback_2(this, handler, timeout);
 
   @DomName('Window.setTimeout')
   @DocsEditable()
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindow.setTimeout_Callback_ScriptValue_long(this, handler, timeout);
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindow.setTimeout_Callback_2(this, handler, timeout);
 
   /// Stream of `contentloaded` events handled by this [Window].
   @DomName('Window.onDOMContentLoaded')
@@ -33828,12 +34131,12 @@
   @DomName('WindowBase64.atob')
   @DocsEditable()
   @Experimental() // untriaged
-  String atob(String string) => _blink.BlinkWindowBase64.atob_Callback_DOMString(this, string);
+  String atob(String string) => _blink.BlinkWindowBase64.atob_Callback_1(this, string);
 
   @DomName('WindowBase64.btoa')
   @DocsEditable()
   @Experimental() // untriaged
-  String btoa(String string) => _blink.BlinkWindowBase64.btoa_Callback_DOMString(this, string);
+  String btoa(String string) => _blink.BlinkWindowBase64.btoa_Callback_1(this, string);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33961,7 +34264,7 @@
   @DomName('Worker.Worker')
   @DocsEditable()
   factory Worker(String scriptUrl) {
-    return _blink.BlinkWorker.constructorCallback_DOMString(scriptUrl);
+    return _blink.BlinkWorker.constructorCallback_1(scriptUrl);
   }
 
   /// Checks if this type is supported on the current platform.
@@ -33969,7 +34272,7 @@
 
   @DomName('Worker.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkWorker.postMessage_Callback_SerializedScriptValue_SEQ_MessagePort_SEQ(this, message, transfer);
+  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkWorker.postMessage_Callback_2(this, message, transfer);
 
   @DomName('Worker.terminate')
   @DocsEditable()
@@ -34080,22 +34383,34 @@
   @DomName('WorkerGlobalScope.importScripts')
   @DocsEditable()
   @Experimental() // untriaged
-  void importScripts(String urls) => _blink.BlinkWorkerGlobalScope.importScripts_Callback_DOMString(this, urls);
+  void importScripts(String urls) => _blink.BlinkWorkerGlobalScope.importScripts_Callback_1(this, urls);
 
-  @DomName('WorkerGlobalScope.openDatabase')
-  @DocsEditable()
-  @Experimental() // untriaged
-  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWorkerGlobalScope.openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(this, name, version, displayName, estimatedSize, creationCallback);
+  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) {
+    if (creationCallback != null) {
+      return _blink.BlinkWorkerGlobalScope.openDatabase_Callback_5(this, name, version, displayName, estimatedSize, creationCallback);
+    }
+    return _blink.BlinkWorkerGlobalScope.openDatabase_Callback_4(this, name, version, displayName, estimatedSize);
+  }
 
-  @DomName('WorkerGlobalScope.openDatabaseSync')
-  @DocsEditable()
-  @Experimental() // untriaged
-  _DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWorkerGlobalScope.openDatabaseSync_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(this, name, version, displayName, estimatedSize, creationCallback);
+  _DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) {
+    if (creationCallback != null) {
+      return _blink.BlinkWorkerGlobalScope.openDatabaseSync_Callback_5(this, name, version, displayName, estimatedSize, creationCallback);
+    }
+    return _blink.BlinkWorkerGlobalScope.openDatabaseSync_Callback_4(this, name, version, displayName, estimatedSize);
+  }
 
-  @DomName('WorkerGlobalScope.webkitRequestFileSystem')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _webkitRequestFileSystem(int type, int size, [_FileSystemCallback successCallback, _ErrorCallback errorCallback]) => _blink.BlinkWorkerGlobalScope.webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(this, type, size, successCallback, errorCallback);
+  void _webkitRequestFileSystem(int type, int size, [_FileSystemCallback successCallback, _ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkWorkerGlobalScope.webkitRequestFileSystem_Callback_4(this, type, size, successCallback, errorCallback);
+      return;
+    }
+    if (successCallback != null) {
+      _blink.BlinkWorkerGlobalScope.webkitRequestFileSystem_Callback_3(this, type, size, successCallback);
+      return;
+    }
+    _blink.BlinkWorkerGlobalScope.webkitRequestFileSystem_Callback_2(this, type, size);
+    return;
+  }
 
   Future<FileSystem> webkitRequestFileSystem(int type, int size) {
     var completer = new Completer<FileSystem>();
@@ -34111,7 +34426,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // untriaged
-  _DOMFileSystemSync requestFileSystemSync(int type, int size) => _blink.BlinkWorkerGlobalScope.webkitRequestFileSystemSync_Callback_us_ll(this, type, size);
+  _DOMFileSystemSync requestFileSystemSync(int type, int size) => _blink.BlinkWorkerGlobalScope.webkitRequestFileSystemSync_Callback_2(this, type, size);
 
   @DomName('WorkerGlobalScope.webkitResolveLocalFileSystemSyncURL')
   @DocsEditable()
@@ -34119,12 +34434,16 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // untriaged
-  _EntrySync resolveLocalFileSystemSyncUrl(String url) => _blink.BlinkWorkerGlobalScope.webkitResolveLocalFileSystemSyncURL_Callback_DOMString(this, url);
+  _EntrySync resolveLocalFileSystemSyncUrl(String url) => _blink.BlinkWorkerGlobalScope.webkitResolveLocalFileSystemSyncURL_Callback_1(this, url);
 
-  @DomName('WorkerGlobalScope.webkitResolveLocalFileSystemURL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _webkitResolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWorkerGlobalScope.webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(this, url, successCallback, errorCallback);
+  void _webkitResolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) {
+    if (errorCallback != null) {
+      _blink.BlinkWorkerGlobalScope.webkitResolveLocalFileSystemURL_Callback_3(this, url, successCallback, errorCallback);
+      return;
+    }
+    _blink.BlinkWorkerGlobalScope.webkitResolveLocalFileSystemURL_Callback_2(this, url, successCallback);
+    return;
+  }
 
   Future<Entry> webkitResolveLocalFileSystemUrl(String url) {
     var completer = new Completer<Entry>();
@@ -34137,32 +34456,32 @@
   @DomName('WorkerGlobalScope.atob')
   @DocsEditable()
   @Experimental() // untriaged
-  String atob(String string) => _blink.BlinkWorkerGlobalScope.atob_Callback_DOMString(this, string);
+  String atob(String string) => _blink.BlinkWorkerGlobalScope.atob_Callback_1(this, string);
 
   @DomName('WorkerGlobalScope.btoa')
   @DocsEditable()
   @Experimental() // untriaged
-  String btoa(String string) => _blink.BlinkWorkerGlobalScope.btoa_Callback_DOMString(this, string);
+  String btoa(String string) => _blink.BlinkWorkerGlobalScope.btoa_Callback_1(this, string);
 
   @DomName('WorkerGlobalScope.clearInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearInterval(int handle) => _blink.BlinkWorkerGlobalScope.clearInterval_Callback_long(this, handle);
+  void _clearInterval(int handle) => _blink.BlinkWorkerGlobalScope.clearInterval_Callback_1(this, handle);
 
   @DomName('WorkerGlobalScope.clearTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearTimeout(int handle) => _blink.BlinkWorkerGlobalScope.clearTimeout_Callback_long(this, handle);
+  void _clearTimeout(int handle) => _blink.BlinkWorkerGlobalScope.clearTimeout_Callback_1(this, handle);
 
   @DomName('WorkerGlobalScope.setInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.setInterval_Callback_ScriptValue_long(this, handler, timeout);
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.setInterval_Callback_2(this, handler, timeout);
 
   @DomName('WorkerGlobalScope.setTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.setTimeout_Callback_ScriptValue_long(this, handler, timeout);
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.setTimeout_Callback_2(this, handler, timeout);
 
   /// Stream of `error` events handled by this [WorkerGlobalScope].
   @DomName('WorkerGlobalScope.onerror')
@@ -34219,15 +34538,15 @@
 
   @DomName('XPathEvaluator.createExpression')
   @DocsEditable()
-  XPathExpression createExpression(String expression, XPathNSResolver resolver) => _blink.BlinkXPathEvaluator.createExpression_Callback_DOMString_XPathNSResolver(this, expression, resolver);
+  XPathExpression createExpression(String expression, XPathNSResolver resolver) => _blink.BlinkXPathEvaluator.createExpression_Callback_2(this, expression, resolver);
 
   @DomName('XPathEvaluator.createNSResolver')
   @DocsEditable()
-  XPathNSResolver createNSResolver(Node nodeResolver) => _blink.BlinkXPathEvaluator.createNSResolver_Callback_Node(this, nodeResolver);
+  XPathNSResolver createNSResolver(Node nodeResolver) => _blink.BlinkXPathEvaluator.createNSResolver_Callback_1(this, nodeResolver);
 
   @DomName('XPathEvaluator.evaluate')
   @DocsEditable()
-  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) => _blink.BlinkXPathEvaluator.evaluate_Callback_DOMString_Node_XPathNSResolver_us_XPathResult(this, expression, contextNode, resolver, type, inResult);
+  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) => _blink.BlinkXPathEvaluator.evaluate_Callback_5(this, expression, contextNode, resolver, type, inResult);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34247,7 +34566,7 @@
 
   @DomName('XPathExpression.evaluate')
   @DocsEditable()
-  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) => _blink.BlinkXPathExpression.evaluate_Callback_Node_us_XPathResult(this, contextNode, type, inResult);
+  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) => _blink.BlinkXPathExpression.evaluate_Callback_3(this, contextNode, type, inResult);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34267,7 +34586,7 @@
 
   @DomName('XPathNSResolver.lookupNamespaceURI')
   @DocsEditable()
-  String lookupNamespaceUri(String prefix) => _blink.BlinkXPathNSResolver.lookupNamespaceURI_Callback_DOMString(this, prefix);
+  String lookupNamespaceUri(String prefix) => _blink.BlinkXPathNSResolver.lookupNamespaceURI_Callback_1(this, prefix);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34359,7 +34678,7 @@
 
   @DomName('XPathResult.snapshotItem')
   @DocsEditable()
-  Node snapshotItem(int index) => _blink.BlinkXPathResult.snapshotItem_Callback_ul(this, index);
+  Node snapshotItem(int index) => _blink.BlinkXPathResult.snapshotItem_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34400,7 +34719,7 @@
 
   @DomName('XMLSerializer.serializeToString')
   @DocsEditable()
-  String serializeToString(Node node) => _blink.BlinkXMLSerializer.serializeToString_Callback_Node(this, node);
+  String serializeToString(Node node) => _blink.BlinkXMLSerializer.serializeToString_Callback_1(this, node);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34435,15 +34754,15 @@
 
   @DomName('XSLTProcessor.getParameter')
   @DocsEditable()
-  String getParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.getParameter_Callback_DOMString_DOMString(this, namespaceURI, localName);
+  String getParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.getParameter_Callback_2(this, namespaceURI, localName);
 
   @DomName('XSLTProcessor.importStylesheet')
   @DocsEditable()
-  void importStylesheet(Node stylesheet) => _blink.BlinkXSLTProcessor.importStylesheet_Callback_Node(this, stylesheet);
+  void importStylesheet(Node stylesheet) => _blink.BlinkXSLTProcessor.importStylesheet_Callback_1(this, stylesheet);
 
   @DomName('XSLTProcessor.removeParameter')
   @DocsEditable()
-  void removeParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.removeParameter_Callback_DOMString_DOMString(this, namespaceURI, localName);
+  void removeParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.removeParameter_Callback_2(this, namespaceURI, localName);
 
   @DomName('XSLTProcessor.reset')
   @DocsEditable()
@@ -34451,15 +34770,15 @@
 
   @DomName('XSLTProcessor.setParameter')
   @DocsEditable()
-  void setParameter(String namespaceURI, String localName, String value) => _blink.BlinkXSLTProcessor.setParameter_Callback_DOMString_DOMString_DOMString(this, namespaceURI, localName, value);
+  void setParameter(String namespaceURI, String localName, String value) => _blink.BlinkXSLTProcessor.setParameter_Callback_3(this, namespaceURI, localName, value);
 
   @DomName('XSLTProcessor.transformToDocument')
   @DocsEditable()
-  Document transformToDocument(Node source) => _blink.BlinkXSLTProcessor.transformToDocument_Callback_Node(this, source);
+  Document transformToDocument(Node source) => _blink.BlinkXSLTProcessor.transformToDocument_Callback_1(this, source);
 
   @DomName('XSLTProcessor.transformToFragment')
   @DocsEditable()
-  DocumentFragment transformToFragment(Node source, Document docVal) => _blink.BlinkXSLTProcessor.transformToFragment_Callback_Node_Document(this, source, docVal);
+  DocumentFragment transformToFragment(Node source, Document docVal) => _blink.BlinkXSLTProcessor.transformToFragment_Callback_2(this, source, docVal);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34502,7 +34821,7 @@
   @DomName('Attr.textContent')
   @DocsEditable()
   @Experimental() // untriaged
-  void set text(String value) => _blink.BlinkAttr.textContent_Setter_DOMString(this, value);
+  void set text(String value) => _blink.BlinkAttr.textContent_Setter(this, value);
 
   @DomName('Attr.value')
   @DocsEditable()
@@ -34510,7 +34829,7 @@
 
   @DomName('Attr.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkAttr.value_Setter_DOMString(this, value);
+  void set value(String value) => _blink.BlinkAttr.value_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34773,10 +35092,10 @@
   Rectangle operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkClientRectList.item_Callback_ul(this, index);
+    return _blink.BlinkClientRectList.item_Callback_1(this, index);
   }
 
-  Rectangle _nativeIndexedGetter(int index) => _blink.BlinkClientRectList.item_Callback_ul(this, index);
+  Rectangle _nativeIndexedGetter(int index) => _blink.BlinkClientRectList.item_Callback_1(this, index);
 
   void operator[]=(int index, Rectangle value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -34818,7 +35137,7 @@
 
   @DomName('ClientRectList.item')
   @DocsEditable()
-  Rectangle item(int index) => _blink.BlinkClientRectList.item_Callback_ul(this, index);
+  Rectangle item(int index) => _blink.BlinkClientRectList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34857,10 +35176,10 @@
   CssRule operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkCSSRuleList.item_Callback_ul(this, index);
+    return _blink.BlinkCSSRuleList.item_Callback_1(this, index);
   }
 
-  CssRule _nativeIndexedGetter(int index) => _blink.BlinkCSSRuleList.item_Callback_ul(this, index);
+  CssRule _nativeIndexedGetter(int index) => _blink.BlinkCSSRuleList.item_Callback_1(this, index);
 
   void operator[]=(int index, CssRule value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -34902,7 +35221,7 @@
 
   @DomName('CSSRuleList.item')
   @DocsEditable()
-  CssRule item(int index) => _blink.BlinkCSSRuleList.item_Callback_ul(this, index);
+  CssRule item(int index) => _blink.BlinkCSSRuleList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34927,10 +35246,10 @@
   _CSSValue operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkCSSValueList.item_Callback_ul(this, index);
+    return _blink.BlinkCSSValueList.item_Callback_1(this, index);
   }
 
-  _CSSValue _nativeIndexedGetter(int index) => _blink.BlinkCSSValueList.item_Callback_ul(this, index);
+  _CSSValue _nativeIndexedGetter(int index) => _blink.BlinkCSSValueList.item_Callback_1(this, index);
 
   void operator[]=(int index, _CSSValue value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -34972,7 +35291,7 @@
 
   @DomName('CSSValueList.item')
   @DocsEditable()
-  _CSSValue item(int index) => _blink.BlinkCSSValueList.item_Callback_ul(this, index);
+  _CSSValue item(int index) => _blink.BlinkCSSValueList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35082,7 +35401,7 @@
   factory _DomPoint(num x, num y) => _create(x, y);
 
   @DocsEditable()
-  static _DomPoint _create(x, y) => _blink.BlinkWebKitPoint.constructorCallback_float_float(x, y);
+  static _DomPoint _create(x, y) => _blink.BlinkWebKitPoint.constructorCallback_2(x, y);
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
@@ -35093,7 +35412,7 @@
 
   @DomName('WebKitPoint.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkWebKitPoint.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkWebKitPoint.x_Setter(this, value);
 
   @DomName('WebKitPoint.y')
   @DocsEditable()
@@ -35101,7 +35420,7 @@
 
   @DomName('WebKitPoint.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkWebKitPoint.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkWebKitPoint.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35122,16 +35441,16 @@
   @DocsEditable()
   factory _DomRect([num x, num y, num width, num height]) {
     if (height != null) {
-      return _blink.BlinkDOMRect.constructorCallback_double_double_double_double(x, y, width, height);
+      return _blink.BlinkDOMRect.constructorCallback_4(x, y, width, height);
     }
     if (width != null) {
-      return _blink.BlinkDOMRect.constructorCallback_double_double_double(x, y, width);
+      return _blink.BlinkDOMRect.constructorCallback_3(x, y, width);
     }
     if (y != null) {
-      return _blink.BlinkDOMRect.constructorCallback_double_double(x, y);
+      return _blink.BlinkDOMRect.constructorCallback_2(x, y);
     }
     if (x != null) {
-      return _blink.BlinkDOMRect.constructorCallback_double(x);
+      return _blink.BlinkDOMRect.constructorCallback_1(x);
     }
     return _blink.BlinkDOMRect.constructorCallback();
   }
@@ -35144,7 +35463,7 @@
   @DomName('DOMRect.height')
   @DocsEditable()
   @Experimental() // untriaged
-  void set height(num value) => _blink.BlinkDOMRect.height_Setter_double(this, value);
+  void set height(num value) => _blink.BlinkDOMRect.height_Setter(this, value);
 
   @DomName('DOMRect.width')
   @DocsEditable()
@@ -35154,7 +35473,7 @@
   @DomName('DOMRect.width')
   @DocsEditable()
   @Experimental() // untriaged
-  void set width(num value) => _blink.BlinkDOMRect.width_Setter_double(this, value);
+  void set width(num value) => _blink.BlinkDOMRect.width_Setter(this, value);
 
   @DomName('DOMRect.x')
   @DocsEditable()
@@ -35164,7 +35483,7 @@
   @DomName('DOMRect.x')
   @DocsEditable()
   @Experimental() // untriaged
-  void set x(num value) => _blink.BlinkDOMRect.x_Setter_double(this, value);
+  void set x(num value) => _blink.BlinkDOMRect.x_Setter(this, value);
 
   @DomName('DOMRect.y')
   @DocsEditable()
@@ -35174,7 +35493,7 @@
   @DomName('DOMRect.y')
   @DocsEditable()
   @Experimental() // untriaged
-  void set y(num value) => _blink.BlinkDOMRect.y_Setter_double(this, value);
+  void set y(num value) => _blink.BlinkDOMRect.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35269,10 +35588,10 @@
   Gamepad operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkGamepadList.item_Callback_ul(this, index);
+    return _blink.BlinkGamepadList.item_Callback_1(this, index);
   }
 
-  Gamepad _nativeIndexedGetter(int index) => _blink.BlinkGamepadList.item_Callback_ul(this, index);
+  Gamepad _nativeIndexedGetter(int index) => _blink.BlinkGamepadList.item_Callback_1(this, index);
 
   void operator[]=(int index, Gamepad value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -35314,7 +35633,7 @@
 
   @DomName('GamepadList.item')
   @DocsEditable()
-  Gamepad item(int index) => _blink.BlinkGamepadList.item_Callback_ul(this, index);
+  Gamepad item(int index) => _blink.BlinkGamepadList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35334,7 +35653,7 @@
 
   @DomName('HTMLAllCollection.item')
   @DocsEditable()
-  Element _item(int index) => _blink.BlinkHTMLAllCollection.item_Callback_ul(this, index);
+  Element _item(int index) => _blink.BlinkHTMLAllCollection.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35513,10 +35832,10 @@
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkNamedNodeMap.item_Callback_ul(this, index);
+    return _blink.BlinkNamedNodeMap.item_Callback_1(this, index);
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkNamedNodeMap.item_Callback_ul(this, index);
+  Node _nativeIndexedGetter(int index) => _blink.BlinkNamedNodeMap.item_Callback_1(this, index);
 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -35558,35 +35877,35 @@
 
   @DomName('NamedNodeMap.__getter__')
   @DocsEditable()
-  Node __getter__(String name) => _blink.BlinkNamedNodeMap.$__getter___Callback_DOMString(this, name);
+  Node __getter__(String name) => _blink.BlinkNamedNodeMap.$__getter___Callback_1(this, name);
 
   @DomName('NamedNodeMap.getNamedItem')
   @DocsEditable()
-  Node getNamedItem(String name) => _blink.BlinkNamedNodeMap.getNamedItem_Callback_DOMString(this, name);
+  Node getNamedItem(String name) => _blink.BlinkNamedNodeMap.getNamedItem_Callback_1(this, name);
 
   @DomName('NamedNodeMap.getNamedItemNS')
   @DocsEditable()
-  Node getNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.getNamedItemNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
+  Node getNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.getNamedItemNS_Callback_2(this, namespaceURI, localName);
 
   @DomName('NamedNodeMap.item')
   @DocsEditable()
-  Node item(int index) => _blink.BlinkNamedNodeMap.item_Callback_ul(this, index);
+  Node item(int index) => _blink.BlinkNamedNodeMap.item_Callback_1(this, index);
 
   @DomName('NamedNodeMap.removeNamedItem')
   @DocsEditable()
-  Node removeNamedItem(String name) => _blink.BlinkNamedNodeMap.removeNamedItem_Callback_DOMString(this, name);
+  Node removeNamedItem(String name) => _blink.BlinkNamedNodeMap.removeNamedItem_Callback_1(this, name);
 
   @DomName('NamedNodeMap.removeNamedItemNS')
   @DocsEditable()
-  Node removeNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.removeNamedItemNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
+  Node removeNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.removeNamedItemNS_Callback_2(this, namespaceURI, localName);
 
   @DomName('NamedNodeMap.setNamedItem')
   @DocsEditable()
-  Node setNamedItem(Node node) => _blink.BlinkNamedNodeMap.setNamedItem_Callback_Node(this, node);
+  Node setNamedItem(Node node) => _blink.BlinkNamedNodeMap.setNamedItem_Callback_1(this, node);
 
   @DomName('NamedNodeMap.setNamedItemNS')
   @DocsEditable()
-  Node setNamedItemNS(Node node) => _blink.BlinkNamedNodeMap.setNamedItemNS_Callback_Node(this, node);
+  Node setNamedItemNS(Node node) => _blink.BlinkNamedNodeMap.setNamedItemNS_Callback_1(this, node);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35671,6 +35990,64 @@
 
 
 @DocsEditable()
+@DomName('Request')
+@Experimental() // untriaged
+class _Request extends NativeFieldWrapperClass2 {
+  // To suppress missing implicit constructor warnings.
+  factory _Request._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('Request.Request')
+  @DocsEditable()
+  factory _Request(input, [Map requestInitDict]) {
+    if ((input is String || input == null) && requestInitDict == null) {
+      return _blink.BlinkRequest.constructorCallback_1(input);
+    }
+    if ((requestInitDict is Map || requestInitDict == null) && (input is String || input == null)) {
+      return _blink.BlinkRequest.constructorCallback_2(input, requestInitDict);
+    }
+    if ((input is _Request || input == null) && requestInitDict == null) {
+      return _blink.BlinkRequest.constructorCallback_1(input);
+    }
+    if ((requestInitDict is Map || requestInitDict == null) && (input is _Request || input == null)) {
+      return _blink.BlinkRequest.constructorCallback_2(input, requestInitDict);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  @DomName('Request.credentials')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get credentials => _blink.BlinkRequest.credentials_Getter(this);
+
+  @DomName('Request.headers')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Headers get headers => _blink.BlinkRequest.headers_Getter(this);
+
+  @DomName('Request.mode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get mode => _blink.BlinkRequest.mode_Getter(this);
+
+  @DomName('Request.referrer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get referrer => _blink.BlinkRequest.referrer_Getter(this);
+
+  @DomName('Request.url')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get url => _blink.BlinkRequest.url_Getter(this);
+
+}
+// Copyright (c) 2012, 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.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
 @DomName('Response')
 @Experimental() // untriaged
 abstract class _Response extends NativeFieldWrapperClass2 {
@@ -35681,16 +36058,16 @@
   @DocsEditable()
   factory _Response(body, [Map responseInitDict]) {
     if ((body is String || body == null) && responseInitDict == null) {
-      return _blink.BlinkResponse.constructorCallback_DOMString(body);
+      return _blink.BlinkResponse.constructorCallback_1(body);
     }
     if ((responseInitDict is Map || responseInitDict == null) && (body is String || body == null)) {
-      return _blink.BlinkResponse.constructorCallback_DOMString_Dictionary(body, responseInitDict);
+      return _blink.BlinkResponse.constructorCallback_2(body, responseInitDict);
     }
     if ((body is Blob || body == null) && responseInitDict == null) {
-      return _blink.BlinkResponse.constructorCallback_Blob(body);
+      return _blink.BlinkResponse.constructorCallback_1(body);
     }
     if ((responseInitDict is Map || responseInitDict == null) && (body is Blob || body == null)) {
-      return _blink.BlinkResponse.constructorCallback_Blob_Dictionary(body, responseInitDict);
+      return _blink.BlinkResponse.constructorCallback_2(body, responseInitDict);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -35733,10 +36110,10 @@
   SpeechRecognitionResult operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSpeechRecognitionResultList.item_Callback_ul(this, index);
+    return _blink.BlinkSpeechRecognitionResultList.item_Callback_1(this, index);
   }
 
-  SpeechRecognitionResult _nativeIndexedGetter(int index) => _blink.BlinkSpeechRecognitionResultList.item_Callback_ul(this, index);
+  SpeechRecognitionResult _nativeIndexedGetter(int index) => _blink.BlinkSpeechRecognitionResultList.item_Callback_1(this, index);
 
   void operator[]=(int index, SpeechRecognitionResult value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -35778,7 +36155,7 @@
 
   @DomName('SpeechRecognitionResultList.item')
   @DocsEditable()
-  SpeechRecognitionResult item(int index) => _blink.BlinkSpeechRecognitionResultList.item_Callback_ul(this, index);
+  SpeechRecognitionResult item(int index) => _blink.BlinkSpeechRecognitionResultList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35801,10 +36178,10 @@
   StyleSheet operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkStyleSheetList.item_Callback_ul(this, index);
+    return _blink.BlinkStyleSheetList.item_Callback_1(this, index);
   }
 
-  StyleSheet _nativeIndexedGetter(int index) => _blink.BlinkStyleSheetList.item_Callback_ul(this, index);
+  StyleSheet _nativeIndexedGetter(int index) => _blink.BlinkStyleSheetList.item_Callback_1(this, index);
 
   void operator[]=(int index, StyleSheet value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -35846,11 +36223,11 @@
 
   @DomName('StyleSheetList.__getter__')
   @DocsEditable()
-  CssStyleSheet __getter__(String name) => _blink.BlinkStyleSheetList.$__getter___Callback_DOMString(this, name);
+  CssStyleSheet __getter__(String name) => _blink.BlinkStyleSheetList.$__getter___Callback_1(this, name);
 
   @DomName('StyleSheetList.item')
   @DocsEditable()
-  StyleSheet item(int index) => _blink.BlinkStyleSheetList.item_Callback_ul(this, index);
+  StyleSheet item(int index) => _blink.BlinkStyleSheetList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35905,7 +36282,7 @@
   @DomName('WebKitCSSMatrix.WebKitCSSMatrix')
   @DocsEditable()
   factory _WebKitCSSMatrix([String cssValue]) {
-    return _blink.BlinkWebKitCSSMatrix.constructorCallback_DOMString(cssValue);
+    return _blink.BlinkWebKitCSSMatrix.constructorCallback_1(cssValue);
   }
 
 }
@@ -35942,22 +36319,22 @@
   @DomName('WindowTimers.clearInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearInterval(int handle) => _blink.BlinkWindowTimers.clearInterval_Callback_long(this, handle);
+  void _clearInterval(int handle) => _blink.BlinkWindowTimers.clearInterval_Callback_1(this, handle);
 
   @DomName('WindowTimers.clearTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearTimeout(int handle) => _blink.BlinkWindowTimers.clearTimeout_Callback_long(this, handle);
+  void _clearTimeout(int handle) => _blink.BlinkWindowTimers.clearTimeout_Callback_1(this, handle);
 
   @DomName('WindowTimers.setInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWindowTimers.setInterval_Callback_ScriptValue_long(this, handler, timeout);
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWindowTimers.setInterval_Callback_2(this, handler, timeout);
 
   @DomName('WindowTimers.setTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindowTimers.setTimeout_Callback_ScriptValue_long(this, handler, timeout);
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindowTimers.setTimeout_Callback_2(this, handler, timeout);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
index bd7a009..2360ca5 100644
--- a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
+++ b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
@@ -96,25 +96,29 @@
 
   @DomName('IDBCursor.advance')
   @DocsEditable()
-  void advance(int count) => _blink.BlinkIDBCursor.advance_Callback_ul(this, count);
+  void advance(int count) => _blink.BlinkIDBCursor.advance_Callback_1(this, count);
 
   @DomName('IDBCursor.continuePrimaryKey')
   @DocsEditable()
   @Experimental() // untriaged
-  void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.continuePrimaryKey_Callback_ScriptValue_ScriptValue(this, key, primaryKey);
+  void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.continuePrimaryKey_Callback_2(this, key, primaryKey);
 
   @DomName('IDBCursor.delete')
   @DocsEditable()
   Request _delete() => _blink.BlinkIDBCursor.delete_Callback(this);
 
-  @DomName('IDBCursor.next')
-  @DocsEditable()
-  @Experimental() // non-standard
-  void next([Object key]) => _blink.BlinkIDBCursor.continue_Callback_ScriptValue(this, key);
+  void next([Object key]) {
+    if (key != null) {
+      _blink.BlinkIDBCursor.continue_Callback_1(this, key);
+      return;
+    }
+    _blink.BlinkIDBCursor.continue_Callback(this);
+    return;
+  }
 
   @DomName('IDBCursor.update')
   @DocsEditable()
-  Request _update(Object value) => _blink.BlinkIDBCursor.update_Callback_ScriptValue(this, value);
+  Request _update(Object value) => _blink.BlinkIDBCursor.update_Callback_1(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -230,55 +234,58 @@
   @DocsEditable()
   void close() => _blink.BlinkIDBDatabase.close_Callback(this);
 
-  @DomName('IDBDatabase.createObjectStore')
-  @DocsEditable()
-  ObjectStore _createObjectStore(String name, [Map options]) => _blink.BlinkIDBDatabase.createObjectStore_Callback_DOMString_Dictionary(this, name, options);
+  ObjectStore _createObjectStore(String name, [Map options]) {
+    if (options != null) {
+      return _blink.BlinkIDBDatabase.createObjectStore_Callback_2(this, name, options);
+    }
+    return _blink.BlinkIDBDatabase.createObjectStore_Callback_1(this, name);
+  }
 
   @DomName('IDBDatabase.deleteObjectStore')
   @DocsEditable()
-  void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.deleteObjectStore_Callback_DOMString(this, name);
+  void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.deleteObjectStore_Callback_1(this, name);
 
   Transaction transaction(storeName_OR_storeNames, [String mode]) {
     if ((storeName_OR_storeNames is String || storeName_OR_storeNames == null) && mode == null) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_DOMString(this, storeName_OR_storeNames);
+      return _blink.BlinkIDBDatabase.transaction_Callback_1(this, storeName_OR_storeNames);
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is String || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_DOMString_DOMString(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_2(this, storeName_OR_storeNames, mode);
     }
     if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && mode == null) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_SEQ_DOMString_SEQ(this, storeName_OR_storeNames);
+      return _blink.BlinkIDBDatabase.transaction_Callback_1(this, storeName_OR_storeNames);
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_SEQ_DOMString_SEQ_DOMString(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_2(this, storeName_OR_storeNames, mode);
     }
     if ((storeName_OR_storeNames is DomStringList || storeName_OR_storeNames == null) && mode == null) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_DOMStringList(this, storeName_OR_storeNames);
+      return _blink.BlinkIDBDatabase.transaction_Callback_1(this, storeName_OR_storeNames);
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is DomStringList || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_DOMStringList_DOMString(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_2(this, storeName_OR_storeNames, mode);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   Transaction transactionList(List<String> storeNames, [String mode]) {
     if (mode != null) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_SEQ_DOMString_SEQ_DOMString(this, storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_2(this, storeNames, mode);
     }
-    return _blink.BlinkIDBDatabase.transaction_Callback_SEQ_DOMString_SEQ(this, storeNames);
+    return _blink.BlinkIDBDatabase.transaction_Callback_1(this, storeNames);
   }
 
   Transaction transactionStore(String storeName, [String mode]) {
     if (mode != null) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_DOMString_DOMString(this, storeName, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_2(this, storeName, mode);
     }
-    return _blink.BlinkIDBDatabase.transaction_Callback_DOMString(this, storeName);
+    return _blink.BlinkIDBDatabase.transaction_Callback_1(this, storeName);
   }
 
   Transaction transactionStores(List<String> storeNames, [String mode]) {
     if (mode != null) {
-      return _blink.BlinkIDBDatabase.transaction_Callback_DOMStringList_DOMString(this, storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_2(this, storeNames, mode);
     }
-    return _blink.BlinkIDBDatabase.transaction_Callback_DOMStringList(this, storeNames);
+    return _blink.BlinkIDBDatabase.transaction_Callback_1(this, storeNames);
   }
 
   /// Stream of `abort` events handled by this [Database].
@@ -395,17 +402,17 @@
 
   @DomName('IDBFactory.cmp')
   @DocsEditable()
-  int cmp(Object first, Object second) => _blink.BlinkIDBFactory.cmp_Callback_ScriptValue_ScriptValue(this, first, second);
+  int cmp(Object first, Object second) => _blink.BlinkIDBFactory.cmp_Callback_2(this, first, second);
 
   @DomName('IDBFactory.deleteDatabase')
   @DocsEditable()
-  OpenDBRequest _deleteDatabase(String name) => _blink.BlinkIDBFactory.deleteDatabase_Callback_DOMString(this, name);
+  OpenDBRequest _deleteDatabase(String name) => _blink.BlinkIDBFactory.deleteDatabase_Callback_1(this, name);
 
   OpenDBRequest _open(String name, [int version]) {
     if (version != null) {
-      return _blink.BlinkIDBFactory.open_Callback_DOMString_ull(this, name, version);
+      return _blink.BlinkIDBFactory.open_Callback_2(this, name, version);
     }
-    return _blink.BlinkIDBFactory.open_Callback_DOMString(this, name);
+    return _blink.BlinkIDBFactory.open_Callback_1(this, name);
   }
 
   @DomName('IDBFactory.webkitGetDatabaseNames')
@@ -553,28 +560,28 @@
 
   @DomName('IDBIndex.count')
   @DocsEditable()
-  Request _count(Object key) => _blink.BlinkIDBIndex.count_Callback_ScriptValue(this, key);
+  Request _count(Object key) => _blink.BlinkIDBIndex.count_Callback_1(this, key);
 
   @DomName('IDBIndex.get')
   @DocsEditable()
-  Request _get(Object key) => _blink.BlinkIDBIndex.get_Callback_ScriptValue(this, key);
+  Request _get(Object key) => _blink.BlinkIDBIndex.get_Callback_1(this, key);
 
   @DomName('IDBIndex.getKey')
   @DocsEditable()
-  Request _getKey(Object key) => _blink.BlinkIDBIndex.getKey_Callback_ScriptValue(this, key);
+  Request _getKey(Object key) => _blink.BlinkIDBIndex.getKey_Callback_1(this, key);
 
   Request _openCursor(Object range, [String direction]) {
     if (direction != null) {
-      return _blink.BlinkIDBIndex.openCursor_Callback_ScriptValue_DOMString(this, range, direction);
+      return _blink.BlinkIDBIndex.openCursor_Callback_2(this, range, direction);
     }
-    return _blink.BlinkIDBIndex.openCursor_Callback_ScriptValue(this, range);
+    return _blink.BlinkIDBIndex.openCursor_Callback_1(this, range);
   }
 
   Request _openKeyCursor(Object range, [String direction]) {
     if (direction != null) {
-      return _blink.BlinkIDBIndex.openKeyCursor_Callback_ScriptValue_DOMString(this, range, direction);
+      return _blink.BlinkIDBIndex.openKeyCursor_Callback_2(this, range, direction);
     }
-    return _blink.BlinkIDBIndex.openKeyCursor_Callback_ScriptValue(this, range);
+    return _blink.BlinkIDBIndex.openKeyCursor_Callback_1(this, range);
   }
 
 }
@@ -623,25 +630,34 @@
   @DocsEditable()
   bool get upperOpen => _blink.BlinkIDBKeyRange.upperOpen_Getter(this);
 
-  @DomName('IDBKeyRange.bound_')
-  @DocsEditable()
-  @Experimental() // non-standard
-  static KeyRange bound_(Object lower, Object upper, [bool lowerOpen, bool upperOpen]) => _blink.BlinkIDBKeyRange.bound_Callback_ScriptValue_ScriptValue_boolean_boolean(lower, upper, lowerOpen, upperOpen);
+  static KeyRange bound_(Object lower, Object upper, [bool lowerOpen, bool upperOpen]) {
+    if (upperOpen != null) {
+      return _blink.BlinkIDBKeyRange.bound_Callback_4(lower, upper, lowerOpen, upperOpen);
+    }
+    if (lowerOpen != null) {
+      return _blink.BlinkIDBKeyRange.bound_Callback_3(lower, upper, lowerOpen);
+    }
+    return _blink.BlinkIDBKeyRange.bound_Callback_2(lower, upper);
+  }
 
-  @DomName('IDBKeyRange.lowerBound_')
-  @DocsEditable()
-  @Experimental() // non-standard
-  static KeyRange lowerBound_(Object bound, [bool open]) => _blink.BlinkIDBKeyRange.lowerBound_Callback_ScriptValue_boolean(bound, open);
+  static KeyRange lowerBound_(Object bound, [bool open]) {
+    if (open != null) {
+      return _blink.BlinkIDBKeyRange.lowerBound_Callback_2(bound, open);
+    }
+    return _blink.BlinkIDBKeyRange.lowerBound_Callback_1(bound);
+  }
 
   @DomName('IDBKeyRange.only_')
   @DocsEditable()
   @Experimental() // non-standard
-  static KeyRange only_(Object value) => _blink.BlinkIDBKeyRange.only_Callback_ScriptValue(value);
+  static KeyRange only_(Object value) => _blink.BlinkIDBKeyRange.only_Callback_1(value);
 
-  @DomName('IDBKeyRange.upperBound_')
-  @DocsEditable()
-  @Experimental() // non-standard
-  static KeyRange upperBound_(Object bound, [bool open]) => _blink.BlinkIDBKeyRange.upperBound_Callback_ScriptValue_boolean(bound, open);
+  static KeyRange upperBound_(Object bound, [bool open]) {
+    if (open != null) {
+      return _blink.BlinkIDBKeyRange.upperBound_Callback_2(bound, open);
+    }
+    return _blink.BlinkIDBKeyRange.upperBound_Callback_1(bound);
+  }
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -802,9 +818,12 @@
   @DocsEditable()
   Transaction get transaction => _blink.BlinkIDBObjectStore.transaction_Getter(this);
 
-  @DomName('IDBObjectStore.add')
-  @DocsEditable()
-  Request _add(Object value, [Object key]) => _blink.BlinkIDBObjectStore.add_Callback_ScriptValue_ScriptValue(this, value, key);
+  Request _add(Object value, [Object key]) {
+    if (key != null) {
+      return _blink.BlinkIDBObjectStore.add_Callback_2(this, value, key);
+    }
+    return _blink.BlinkIDBObjectStore.add_Callback_1(this, value);
+  }
 
   @DomName('IDBObjectStore.clear')
   @DocsEditable()
@@ -812,48 +831,60 @@
 
   @DomName('IDBObjectStore.count')
   @DocsEditable()
-  Request _count(Object key) => _blink.BlinkIDBObjectStore.count_Callback_ScriptValue(this, key);
+  Request _count(Object key) => _blink.BlinkIDBObjectStore.count_Callback_1(this, key);
 
   Index _createIndex(String name, keyPath, [Map options]) {
+    if ((keyPath is String || keyPath == null) && (name is String || name == null) && options == null) {
+      return _blink.BlinkIDBObjectStore.createIndex_Callback_2(this, name, keyPath);
+    }
     if ((options is Map || options == null) && (keyPath is String || keyPath == null) && (name is String || name == null)) {
-      return _blink.BlinkIDBObjectStore.createIndex_Callback_DOMString_DOMString_Dictionary(this, name, keyPath, options);
+      return _blink.BlinkIDBObjectStore.createIndex_Callback_3(this, name, keyPath, options);
+    }
+    if ((keyPath is List<String> || keyPath == null) && (name is String || name == null) && options == null) {
+      return _blink.BlinkIDBObjectStore.createIndex_Callback_2(this, name, keyPath);
     }
     if ((options is Map || options == null) && (keyPath is List<String> || keyPath == null) && (name is String || name == null)) {
-      return _blink.BlinkIDBObjectStore.createIndex_Callback_DOMString_SEQ_DOMString_SEQ_Dictionary(this, name, keyPath, options);
+      return _blink.BlinkIDBObjectStore.createIndex_Callback_3(this, name, keyPath, options);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('IDBObjectStore.delete')
   @DocsEditable()
-  Request _delete(Object key) => _blink.BlinkIDBObjectStore.delete_Callback_ScriptValue(this, key);
+  Request _delete(Object key) => _blink.BlinkIDBObjectStore.delete_Callback_1(this, key);
 
   @DomName('IDBObjectStore.deleteIndex')
   @DocsEditable()
-  void deleteIndex(String name) => _blink.BlinkIDBObjectStore.deleteIndex_Callback_DOMString(this, name);
+  void deleteIndex(String name) => _blink.BlinkIDBObjectStore.deleteIndex_Callback_1(this, name);
 
   @DomName('IDBObjectStore.get')
   @DocsEditable()
-  Request _get(Object key) => _blink.BlinkIDBObjectStore.get_Callback_ScriptValue(this, key);
+  Request _get(Object key) => _blink.BlinkIDBObjectStore.get_Callback_1(this, key);
 
   @DomName('IDBObjectStore.index')
   @DocsEditable()
-  Index index(String name) => _blink.BlinkIDBObjectStore.index_Callback_DOMString(this, name);
+  Index index(String name) => _blink.BlinkIDBObjectStore.index_Callback_1(this, name);
 
-  @DomName('IDBObjectStore.openCursor')
-  @DocsEditable()
-  Request _openCursor(Object range, [String direction]) => _blink.BlinkIDBObjectStore.openCursor_Callback_ScriptValue_DOMString(this, range, direction);
+  Request _openCursor(Object range, [String direction]) {
+    if (direction != null) {
+      return _blink.BlinkIDBObjectStore.openCursor_Callback_2(this, range, direction);
+    }
+    return _blink.BlinkIDBObjectStore.openCursor_Callback_1(this, range);
+  }
 
   Request openKeyCursor(Object range, [String direction]) {
     if (direction != null) {
-      return _blink.BlinkIDBObjectStore.openKeyCursor_Callback_ScriptValue_DOMString(this, range, direction);
+      return _blink.BlinkIDBObjectStore.openKeyCursor_Callback_2(this, range, direction);
     }
-    return _blink.BlinkIDBObjectStore.openKeyCursor_Callback_ScriptValue(this, range);
+    return _blink.BlinkIDBObjectStore.openKeyCursor_Callback_1(this, range);
   }
 
-  @DomName('IDBObjectStore.put')
-  @DocsEditable()
-  Request _put(Object value, [Object key]) => _blink.BlinkIDBObjectStore.put_Callback_ScriptValue_ScriptValue(this, value, key);
+  Request _put(Object value, [Object key]) {
+    if (key != null) {
+      return _blink.BlinkIDBObjectStore.put_Callback_2(this, value, key);
+    }
+    return _blink.BlinkIDBObjectStore.put_Callback_1(this, value);
+  }
 
 
   /**
@@ -1081,7 +1112,7 @@
 
   @DomName('IDBTransaction.objectStore')
   @DocsEditable()
-  ObjectStore objectStore(String name) => _blink.BlinkIDBTransaction.objectStore_Callback_DOMString(this, name);
+  ObjectStore objectStore(String name) => _blink.BlinkIDBTransaction.objectStore_Callback_1(this, name);
 
   /// Stream of `abort` events handled by this [Transaction].
   @DomName('IDBTransaction.onabort')
diff --git a/sdk/lib/svg/dartium/svg_dartium.dart b/sdk/lib/svg/dartium/svg_dartium.dart
index 08bb81f..5cba7fb 100644
--- a/sdk/lib/svg/dartium/svg_dartium.dart
+++ b/sdk/lib/svg/dartium/svg_dartium.dart
@@ -241,7 +241,7 @@
 
   @DomName('SVGAltGlyphElement.format')
   @DocsEditable()
-  void set format(String value) => _blink.BlinkSVGAltGlyphElement.format_Setter_DOMString(this, value);
+  void set format(String value) => _blink.BlinkSVGAltGlyphElement.format_Setter(this, value);
 
   @DomName('SVGAltGlyphElement.glyphRef')
   @DocsEditable()
@@ -249,7 +249,7 @@
 
   @DomName('SVGAltGlyphElement.glyphRef')
   @DocsEditable()
-  void set glyphRef(String value) => _blink.BlinkSVGAltGlyphElement.glyphRef_Setter_DOMString(this, value);
+  void set glyphRef(String value) => _blink.BlinkSVGAltGlyphElement.glyphRef_Setter(this, value);
 
   @DomName('SVGAltGlyphElement.href')
   @DocsEditable()
@@ -300,7 +300,7 @@
 
   @DomName('SVGAngle.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGAngle.value_Setter_float(this, value);
+  void set value(num value) => _blink.BlinkSVGAngle.value_Setter(this, value);
 
   @DomName('SVGAngle.valueAsString')
   @DocsEditable()
@@ -308,7 +308,7 @@
 
   @DomName('SVGAngle.valueAsString')
   @DocsEditable()
-  void set valueAsString(String value) => _blink.BlinkSVGAngle.valueAsString_Setter_DOMString(this, value);
+  void set valueAsString(String value) => _blink.BlinkSVGAngle.valueAsString_Setter(this, value);
 
   @DomName('SVGAngle.valueInSpecifiedUnits')
   @DocsEditable()
@@ -316,15 +316,15 @@
 
   @DomName('SVGAngle.valueInSpecifiedUnits')
   @DocsEditable()
-  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGAngle.valueInSpecifiedUnits_Setter_float(this, value);
+  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGAngle.valueInSpecifiedUnits_Setter(this, value);
 
   @DomName('SVGAngle.convertToSpecifiedUnits')
   @DocsEditable()
-  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGAngle.convertToSpecifiedUnits_Callback_us(this, unitType);
+  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGAngle.convertToSpecifiedUnits_Callback_1(this, unitType);
 
   @DomName('SVGAngle.newValueSpecifiedUnits')
   @DocsEditable()
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGAngle.newValueSpecifiedUnits_Callback_us_float(this, unitType, valueInSpecifiedUnits);
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGAngle.newValueSpecifiedUnits_Callback_2(this, unitType, valueInSpecifiedUnits);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -467,7 +467,7 @@
 
   @DomName('SVGAnimatedBoolean.baseVal')
   @DocsEditable()
-  void set baseVal(bool value) => _blink.BlinkSVGAnimatedBoolean.baseVal_Setter_boolean(this, value);
+  void set baseVal(bool value) => _blink.BlinkSVGAnimatedBoolean.baseVal_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -494,7 +494,7 @@
 
   @DomName('SVGAnimatedEnumeration.baseVal')
   @DocsEditable()
-  void set baseVal(int value) => _blink.BlinkSVGAnimatedEnumeration.baseVal_Setter_us(this, value);
+  void set baseVal(int value) => _blink.BlinkSVGAnimatedEnumeration.baseVal_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -521,7 +521,7 @@
 
   @DomName('SVGAnimatedInteger.baseVal')
   @DocsEditable()
-  void set baseVal(int value) => _blink.BlinkSVGAnimatedInteger.baseVal_Setter_long(this, value);
+  void set baseVal(int value) => _blink.BlinkSVGAnimatedInteger.baseVal_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -594,7 +594,7 @@
 
   @DomName('SVGAnimatedNumber.baseVal')
   @DocsEditable()
-  void set baseVal(num value) => _blink.BlinkSVGAnimatedNumber.baseVal_Setter_float(this, value);
+  void set baseVal(num value) => _blink.BlinkSVGAnimatedNumber.baseVal_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -690,7 +690,7 @@
 
   @DomName('SVGAnimatedString.baseVal')
   @DocsEditable()
-  void set baseVal(String value) => _blink.BlinkSVGAnimatedString.baseVal_Setter_DOMString(this, value);
+  void set baseVal(String value) => _blink.BlinkSVGAnimatedString.baseVal_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -750,7 +750,7 @@
 
   @DomName('SVGAnimationElement.beginElementAt')
   @DocsEditable()
-  void beginElementAt(num offset) => _blink.BlinkSVGAnimationElement.beginElementAt_Callback_float(this, offset);
+  void beginElementAt(num offset) => _blink.BlinkSVGAnimationElement.beginElementAt_Callback_1(this, offset);
 
   @DomName('SVGAnimationElement.endElement')
   @DocsEditable()
@@ -758,7 +758,7 @@
 
   @DomName('SVGAnimationElement.endElementAt')
   @DocsEditable()
-  void endElementAt(num offset) => _blink.BlinkSVGAnimationElement.endElementAt_Callback_float(this, offset);
+  void endElementAt(num offset) => _blink.BlinkSVGAnimationElement.endElementAt_Callback_1(this, offset);
 
   @DomName('SVGAnimationElement.getCurrentTime')
   @DocsEditable()
@@ -786,7 +786,7 @@
 
   @DomName('SVGAnimationElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGAnimationElement.hasExtension_Callback_DOMString(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGAnimationElement.hasExtension_Callback_1(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1837,7 +1837,7 @@
 
   @DomName('SVGFEGaussianBlurElement.setStdDeviation')
   @DocsEditable()
-  void setStdDeviation(num stdDeviationX, num stdDeviationY) => _blink.BlinkSVGFEGaussianBlurElement.setStdDeviation_Callback_float_float(this, stdDeviationX, stdDeviationY);
+  void setStdDeviation(num stdDeviationX, num stdDeviationY) => _blink.BlinkSVGFEGaussianBlurElement.setStdDeviation_Callback_2(this, stdDeviationX, stdDeviationY);
 
   @DomName('SVGFEGaussianBlurElement.height')
   @DocsEditable()
@@ -2542,7 +2542,7 @@
 
   @DomName('SVGFilterElement.setFilterRes')
   @DocsEditable()
-  void setFilterRes(int filterResX, int filterResY) => _blink.BlinkSVGFilterElement.setFilterRes_Callback_ul_ul(this, filterResX, filterResY);
+  void setFilterRes(int filterResX, int filterResY) => _blink.BlinkSVGFilterElement.setFilterRes_Callback_2(this, filterResX, filterResY);
 
   @DomName('SVGFilterElement.href')
   @DocsEditable()
@@ -2702,12 +2702,12 @@
   @DomName('SVGGeometryElement.isPointInFill')
   @DocsEditable()
   @Experimental() // untriaged
-  bool isPointInFill(Point point) => _blink.BlinkSVGGeometryElement.isPointInFill_Callback_SVGPoint(this, point);
+  bool isPointInFill(Point point) => _blink.BlinkSVGGeometryElement.isPointInFill_Callback_1(this, point);
 
   @DomName('SVGGeometryElement.isPointInStroke')
   @DocsEditable()
   @Experimental() // untriaged
-  bool isPointInStroke(Point point) => _blink.BlinkSVGGeometryElement.isPointInStroke_Callback_SVGPoint(this, point);
+  bool isPointInStroke(Point point) => _blink.BlinkSVGGeometryElement.isPointInStroke_Callback_1(this, point);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2763,7 +2763,7 @@
   @DomName('SVGGraphicsElement.getTransformToElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix getTransformToElement(SvgElement element) => _blink.BlinkSVGGraphicsElement.getTransformToElement_Callback_SVGElement(this, element);
+  Matrix getTransformToElement(SvgElement element) => _blink.BlinkSVGGraphicsElement.getTransformToElement_Callback_1(this, element);
 
   @DomName('SVGGraphicsElement.requiredExtensions')
   @DocsEditable()
@@ -2783,7 +2783,7 @@
   @DomName('SVGGraphicsElement.hasExtension')
   @DocsEditable()
   @Experimental() // untriaged
-  bool hasExtension(String extension) => _blink.BlinkSVGGraphicsElement.hasExtension_Callback_DOMString(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGGraphicsElement.hasExtension_Callback_1(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2903,7 +2903,7 @@
 
   @DomName('SVGLength.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGLength.value_Setter_float(this, value);
+  void set value(num value) => _blink.BlinkSVGLength.value_Setter(this, value);
 
   @DomName('SVGLength.valueAsString')
   @DocsEditable()
@@ -2911,7 +2911,7 @@
 
   @DomName('SVGLength.valueAsString')
   @DocsEditable()
-  void set valueAsString(String value) => _blink.BlinkSVGLength.valueAsString_Setter_DOMString(this, value);
+  void set valueAsString(String value) => _blink.BlinkSVGLength.valueAsString_Setter(this, value);
 
   @DomName('SVGLength.valueInSpecifiedUnits')
   @DocsEditable()
@@ -2919,15 +2919,15 @@
 
   @DomName('SVGLength.valueInSpecifiedUnits')
   @DocsEditable()
-  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGLength.valueInSpecifiedUnits_Setter_float(this, value);
+  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGLength.valueInSpecifiedUnits_Setter(this, value);
 
   @DomName('SVGLength.convertToSpecifiedUnits')
   @DocsEditable()
-  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGLength.convertToSpecifiedUnits_Callback_us(this, unitType);
+  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGLength.convertToSpecifiedUnits_Callback_1(this, unitType);
 
   @DomName('SVGLength.newValueSpecifiedUnits')
   @DocsEditable()
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGLength.newValueSpecifiedUnits_Callback_us_float(this, unitType, valueInSpecifiedUnits);
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGLength.newValueSpecifiedUnits_Callback_2(this, unitType, valueInSpecifiedUnits);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3000,11 +3000,11 @@
   @DomName('SVGLengthList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Length value) => _blink.BlinkSVGLengthList.$__setter___Callback_ul_SVGLength(this, index, value);
+  void __setter__(int index, Length value) => _blink.BlinkSVGLengthList.$__setter___Callback_2(this, index, value);
 
   @DomName('SVGLengthList.appendItem')
   @DocsEditable()
-  Length appendItem(Length item) => _blink.BlinkSVGLengthList.appendItem_Callback_SVGLength(this, item);
+  Length appendItem(Length item) => _blink.BlinkSVGLengthList.appendItem_Callback_1(this, item);
 
   @DomName('SVGLengthList.clear')
   @DocsEditable()
@@ -3012,23 +3012,23 @@
 
   @DomName('SVGLengthList.getItem')
   @DocsEditable()
-  Length getItem(int index) => _blink.BlinkSVGLengthList.getItem_Callback_ul(this, index);
+  Length getItem(int index) => _blink.BlinkSVGLengthList.getItem_Callback_1(this, index);
 
   @DomName('SVGLengthList.initialize')
   @DocsEditable()
-  Length initialize(Length item) => _blink.BlinkSVGLengthList.initialize_Callback_SVGLength(this, item);
+  Length initialize(Length item) => _blink.BlinkSVGLengthList.initialize_Callback_1(this, item);
 
   @DomName('SVGLengthList.insertItemBefore')
   @DocsEditable()
-  Length insertItemBefore(Length item, int index) => _blink.BlinkSVGLengthList.insertItemBefore_Callback_SVGLength_ul(this, item, index);
+  Length insertItemBefore(Length item, int index) => _blink.BlinkSVGLengthList.insertItemBefore_Callback_2(this, item, index);
 
   @DomName('SVGLengthList.removeItem')
   @DocsEditable()
-  Length removeItem(int index) => _blink.BlinkSVGLengthList.removeItem_Callback_ul(this, index);
+  Length removeItem(int index) => _blink.BlinkSVGLengthList.removeItem_Callback_1(this, index);
 
   @DomName('SVGLengthList.replaceItem')
   @DocsEditable()
-  Length replaceItem(Length item, int index) => _blink.BlinkSVGLengthList.replaceItem_Callback_SVGLength_ul(this, item, index);
+  Length replaceItem(Length item, int index) => _blink.BlinkSVGLengthList.replaceItem_Callback_2(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3191,7 +3191,7 @@
 
   @DomName('SVGMarkerElement.setOrientToAngle')
   @DocsEditable()
-  void setOrientToAngle(Angle angle) => _blink.BlinkSVGMarkerElement.setOrientToAngle_Callback_SVGAngle(this, angle);
+  void setOrientToAngle(Angle angle) => _blink.BlinkSVGMarkerElement.setOrientToAngle_Callback_1(this, angle);
 
   @DomName('SVGMarkerElement.setOrientToAuto')
   @DocsEditable()
@@ -3268,7 +3268,7 @@
 
   @DomName('SVGMaskElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGMaskElement.hasExtension_Callback_DOMString(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGMaskElement.hasExtension_Callback_1(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3291,7 +3291,7 @@
 
   @DomName('SVGMatrix.a')
   @DocsEditable()
-  void set a(num value) => _blink.BlinkSVGMatrix.a_Setter_double(this, value);
+  void set a(num value) => _blink.BlinkSVGMatrix.a_Setter(this, value);
 
   @DomName('SVGMatrix.b')
   @DocsEditable()
@@ -3299,7 +3299,7 @@
 
   @DomName('SVGMatrix.b')
   @DocsEditable()
-  void set b(num value) => _blink.BlinkSVGMatrix.b_Setter_double(this, value);
+  void set b(num value) => _blink.BlinkSVGMatrix.b_Setter(this, value);
 
   @DomName('SVGMatrix.c')
   @DocsEditable()
@@ -3307,7 +3307,7 @@
 
   @DomName('SVGMatrix.c')
   @DocsEditable()
-  void set c(num value) => _blink.BlinkSVGMatrix.c_Setter_double(this, value);
+  void set c(num value) => _blink.BlinkSVGMatrix.c_Setter(this, value);
 
   @DomName('SVGMatrix.d')
   @DocsEditable()
@@ -3315,7 +3315,7 @@
 
   @DomName('SVGMatrix.d')
   @DocsEditable()
-  void set d(num value) => _blink.BlinkSVGMatrix.d_Setter_double(this, value);
+  void set d(num value) => _blink.BlinkSVGMatrix.d_Setter(this, value);
 
   @DomName('SVGMatrix.e')
   @DocsEditable()
@@ -3323,7 +3323,7 @@
 
   @DomName('SVGMatrix.e')
   @DocsEditable()
-  void set e(num value) => _blink.BlinkSVGMatrix.e_Setter_double(this, value);
+  void set e(num value) => _blink.BlinkSVGMatrix.e_Setter(this, value);
 
   @DomName('SVGMatrix.f')
   @DocsEditable()
@@ -3331,7 +3331,7 @@
 
   @DomName('SVGMatrix.f')
   @DocsEditable()
-  void set f(num value) => _blink.BlinkSVGMatrix.f_Setter_double(this, value);
+  void set f(num value) => _blink.BlinkSVGMatrix.f_Setter(this, value);
 
   @DomName('SVGMatrix.flipX')
   @DocsEditable()
@@ -3347,35 +3347,35 @@
 
   @DomName('SVGMatrix.multiply')
   @DocsEditable()
-  Matrix multiply(Matrix secondMatrix) => _blink.BlinkSVGMatrix.multiply_Callback_SVGMatrix(this, secondMatrix);
+  Matrix multiply(Matrix secondMatrix) => _blink.BlinkSVGMatrix.multiply_Callback_1(this, secondMatrix);
 
   @DomName('SVGMatrix.rotate')
   @DocsEditable()
-  Matrix rotate(num angle) => _blink.BlinkSVGMatrix.rotate_Callback_float(this, angle);
+  Matrix rotate(num angle) => _blink.BlinkSVGMatrix.rotate_Callback_1(this, angle);
 
   @DomName('SVGMatrix.rotateFromVector')
   @DocsEditable()
-  Matrix rotateFromVector(num x, num y) => _blink.BlinkSVGMatrix.rotateFromVector_Callback_float_float(this, x, y);
+  Matrix rotateFromVector(num x, num y) => _blink.BlinkSVGMatrix.rotateFromVector_Callback_2(this, x, y);
 
   @DomName('SVGMatrix.scale')
   @DocsEditable()
-  Matrix scale(num scaleFactor) => _blink.BlinkSVGMatrix.scale_Callback_float(this, scaleFactor);
+  Matrix scale(num scaleFactor) => _blink.BlinkSVGMatrix.scale_Callback_1(this, scaleFactor);
 
   @DomName('SVGMatrix.scaleNonUniform')
   @DocsEditable()
-  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) => _blink.BlinkSVGMatrix.scaleNonUniform_Callback_float_float(this, scaleFactorX, scaleFactorY);
+  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) => _blink.BlinkSVGMatrix.scaleNonUniform_Callback_2(this, scaleFactorX, scaleFactorY);
 
   @DomName('SVGMatrix.skewX')
   @DocsEditable()
-  Matrix skewX(num angle) => _blink.BlinkSVGMatrix.skewX_Callback_float(this, angle);
+  Matrix skewX(num angle) => _blink.BlinkSVGMatrix.skewX_Callback_1(this, angle);
 
   @DomName('SVGMatrix.skewY')
   @DocsEditable()
-  Matrix skewY(num angle) => _blink.BlinkSVGMatrix.skewY_Callback_float(this, angle);
+  Matrix skewY(num angle) => _blink.BlinkSVGMatrix.skewY_Callback_1(this, angle);
 
   @DomName('SVGMatrix.translate')
   @DocsEditable()
-  Matrix translate(num x, num y) => _blink.BlinkSVGMatrix.translate_Callback_float_float(this, x, y);
+  Matrix translate(num x, num y) => _blink.BlinkSVGMatrix.translate_Callback_2(this, x, y);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3419,7 +3419,7 @@
 
   @DomName('SVGNumber.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGNumber.value_Setter_float(this, value);
+  void set value(num value) => _blink.BlinkSVGNumber.value_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3492,11 +3492,11 @@
   @DomName('SVGNumberList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Number value) => _blink.BlinkSVGNumberList.$__setter___Callback_ul_SVGNumber(this, index, value);
+  void __setter__(int index, Number value) => _blink.BlinkSVGNumberList.$__setter___Callback_2(this, index, value);
 
   @DomName('SVGNumberList.appendItem')
   @DocsEditable()
-  Number appendItem(Number item) => _blink.BlinkSVGNumberList.appendItem_Callback_SVGNumber(this, item);
+  Number appendItem(Number item) => _blink.BlinkSVGNumberList.appendItem_Callback_1(this, item);
 
   @DomName('SVGNumberList.clear')
   @DocsEditable()
@@ -3504,23 +3504,23 @@
 
   @DomName('SVGNumberList.getItem')
   @DocsEditable()
-  Number getItem(int index) => _blink.BlinkSVGNumberList.getItem_Callback_ul(this, index);
+  Number getItem(int index) => _blink.BlinkSVGNumberList.getItem_Callback_1(this, index);
 
   @DomName('SVGNumberList.initialize')
   @DocsEditable()
-  Number initialize(Number item) => _blink.BlinkSVGNumberList.initialize_Callback_SVGNumber(this, item);
+  Number initialize(Number item) => _blink.BlinkSVGNumberList.initialize_Callback_1(this, item);
 
   @DomName('SVGNumberList.insertItemBefore')
   @DocsEditable()
-  Number insertItemBefore(Number item, int index) => _blink.BlinkSVGNumberList.insertItemBefore_Callback_SVGNumber_ul(this, item, index);
+  Number insertItemBefore(Number item, int index) => _blink.BlinkSVGNumberList.insertItemBefore_Callback_2(this, item, index);
 
   @DomName('SVGNumberList.removeItem')
   @DocsEditable()
-  Number removeItem(int index) => _blink.BlinkSVGNumberList.removeItem_Callback_ul(this, index);
+  Number removeItem(int index) => _blink.BlinkSVGNumberList.removeItem_Callback_1(this, index);
 
   @DomName('SVGNumberList.replaceItem')
   @DocsEditable()
-  Number replaceItem(Number item, int index) => _blink.BlinkSVGNumberList.replaceItem_Callback_SVGNumber_ul(this, item, index);
+  Number replaceItem(Number item, int index) => _blink.BlinkSVGNumberList.replaceItem_Callback_2(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3569,11 +3569,11 @@
 
   @DomName('SVGPathElement.createSVGPathSegArcAbs')
   @DocsEditable()
-  PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.createSVGPathSegArcAbs_Callback_float_float_float_float_float_boolean_boolean(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.createSVGPathSegArcAbs_Callback_7(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
 
   @DomName('SVGPathElement.createSVGPathSegArcRel')
   @DocsEditable()
-  PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.createSVGPathSegArcRel_Callback_float_float_float_float_float_boolean_boolean(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.createSVGPathSegArcRel_Callback_7(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
 
   @DomName('SVGPathElement.createSVGPathSegClosePath')
   @DocsEditable()
@@ -3581,75 +3581,75 @@
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicAbs')
   @DocsEditable()
-  PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicAbs_Callback_float_float_float_float_float_float(this, x, y, x1, y1, x2, y2);
+  PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicAbs_Callback_6(this, x, y, x1, y1, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicRel')
   @DocsEditable()
-  PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicRel_Callback_float_float_float_float_float_float(this, x, y, x1, y1, x2, y2);
+  PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicRel_Callback_6(this, x, y, x1, y1, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs')
   @DocsEditable()
-  PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs_Callback_float_float_float_float(this, x, y, x2, y2);
+  PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs_Callback_4(this, x, y, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel')
   @DocsEditable()
-  PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicSmoothRel_Callback_float_float_float_float(this, x, y, x2, y2);
+  PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicSmoothRel_Callback_4(this, x, y, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticAbs')
   @DocsEditable()
-  PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticAbs_Callback_float_float_float_float(this, x, y, x1, y1);
+  PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticAbs_Callback_4(this, x, y, x1, y1);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticRel')
   @DocsEditable()
-  PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticRel_Callback_float_float_float_float(this, x, y, x1, y1);
+  PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticRel_Callback_4(this, x, y, x1, y1);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs')
   @DocsEditable()
-  PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_float_float(this, x, y);
+  PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel')
   @DocsEditable()
-  PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel_Callback_float_float(this, x, y);
+  PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoAbs')
   @DocsEditable()
-  PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoAbs_Callback_float_float(this, x, y);
+  PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoAbs_Callback_2(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalAbs')
   @DocsEditable()
-  PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoHorizontalAbs_Callback_float(this, x);
+  PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoHorizontalAbs_Callback_1(this, x);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalRel')
   @DocsEditable()
-  PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoHorizontalRel_Callback_float(this, x);
+  PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoHorizontalRel_Callback_1(this, x);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoRel')
   @DocsEditable()
-  PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoRel_Callback_float_float(this, x, y);
+  PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoRel_Callback_2(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoVerticalAbs')
   @DocsEditable()
-  PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoVerticalAbs_Callback_float(this, y);
+  PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoVerticalAbs_Callback_1(this, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoVerticalRel')
   @DocsEditable()
-  PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoVerticalRel_Callback_float(this, y);
+  PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoVerticalRel_Callback_1(this, y);
 
   @DomName('SVGPathElement.createSVGPathSegMovetoAbs')
   @DocsEditable()
-  PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegMovetoAbs_Callback_float_float(this, x, y);
+  PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegMovetoAbs_Callback_2(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegMovetoRel')
   @DocsEditable()
-  PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegMovetoRel_Callback_float_float(this, x, y);
+  PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegMovetoRel_Callback_2(this, x, y);
 
   @DomName('SVGPathElement.getPathSegAtLength')
   @DocsEditable()
-  int getPathSegAtLength(num distance) => _blink.BlinkSVGPathElement.getPathSegAtLength_Callback_float(this, distance);
+  int getPathSegAtLength(num distance) => _blink.BlinkSVGPathElement.getPathSegAtLength_Callback_1(this, distance);
 
   @DomName('SVGPathElement.getPointAtLength')
   @DocsEditable()
-  Point getPointAtLength(num distance) => _blink.BlinkSVGPathElement.getPointAtLength_Callback_float(this, distance);
+  Point getPointAtLength(num distance) => _blink.BlinkSVGPathElement.getPointAtLength_Callback_1(this, distance);
 
   @DomName('SVGPathElement.getTotalLength')
   @DocsEditable()
@@ -3779,7 +3779,7 @@
 
   @DomName('SVGPathSegArcAbs.angle')
   @DocsEditable()
-  void set angle(num value) => _blink.BlinkSVGPathSegArcAbs.angle_Setter_float(this, value);
+  void set angle(num value) => _blink.BlinkSVGPathSegArcAbs.angle_Setter(this, value);
 
   @DomName('SVGPathSegArcAbs.largeArcFlag')
   @DocsEditable()
@@ -3787,7 +3787,7 @@
 
   @DomName('SVGPathSegArcAbs.largeArcFlag')
   @DocsEditable()
-  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.largeArcFlag_Setter_boolean(this, value);
+  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.largeArcFlag_Setter(this, value);
 
   @DomName('SVGPathSegArcAbs.r1')
   @DocsEditable()
@@ -3795,7 +3795,7 @@
 
   @DomName('SVGPathSegArcAbs.r1')
   @DocsEditable()
-  void set r1(num value) => _blink.BlinkSVGPathSegArcAbs.r1_Setter_float(this, value);
+  void set r1(num value) => _blink.BlinkSVGPathSegArcAbs.r1_Setter(this, value);
 
   @DomName('SVGPathSegArcAbs.r2')
   @DocsEditable()
@@ -3803,7 +3803,7 @@
 
   @DomName('SVGPathSegArcAbs.r2')
   @DocsEditable()
-  void set r2(num value) => _blink.BlinkSVGPathSegArcAbs.r2_Setter_float(this, value);
+  void set r2(num value) => _blink.BlinkSVGPathSegArcAbs.r2_Setter(this, value);
 
   @DomName('SVGPathSegArcAbs.sweepFlag')
   @DocsEditable()
@@ -3811,7 +3811,7 @@
 
   @DomName('SVGPathSegArcAbs.sweepFlag')
   @DocsEditable()
-  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.sweepFlag_Setter_boolean(this, value);
+  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.sweepFlag_Setter(this, value);
 
   @DomName('SVGPathSegArcAbs.x')
   @DocsEditable()
@@ -3819,7 +3819,7 @@
 
   @DomName('SVGPathSegArcAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegArcAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegArcAbs.x_Setter(this, value);
 
   @DomName('SVGPathSegArcAbs.y')
   @DocsEditable()
@@ -3827,7 +3827,7 @@
 
   @DomName('SVGPathSegArcAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegArcAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegArcAbs.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3850,7 +3850,7 @@
 
   @DomName('SVGPathSegArcRel.angle')
   @DocsEditable()
-  void set angle(num value) => _blink.BlinkSVGPathSegArcRel.angle_Setter_float(this, value);
+  void set angle(num value) => _blink.BlinkSVGPathSegArcRel.angle_Setter(this, value);
 
   @DomName('SVGPathSegArcRel.largeArcFlag')
   @DocsEditable()
@@ -3858,7 +3858,7 @@
 
   @DomName('SVGPathSegArcRel.largeArcFlag')
   @DocsEditable()
-  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcRel.largeArcFlag_Setter_boolean(this, value);
+  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcRel.largeArcFlag_Setter(this, value);
 
   @DomName('SVGPathSegArcRel.r1')
   @DocsEditable()
@@ -3866,7 +3866,7 @@
 
   @DomName('SVGPathSegArcRel.r1')
   @DocsEditable()
-  void set r1(num value) => _blink.BlinkSVGPathSegArcRel.r1_Setter_float(this, value);
+  void set r1(num value) => _blink.BlinkSVGPathSegArcRel.r1_Setter(this, value);
 
   @DomName('SVGPathSegArcRel.r2')
   @DocsEditable()
@@ -3874,7 +3874,7 @@
 
   @DomName('SVGPathSegArcRel.r2')
   @DocsEditable()
-  void set r2(num value) => _blink.BlinkSVGPathSegArcRel.r2_Setter_float(this, value);
+  void set r2(num value) => _blink.BlinkSVGPathSegArcRel.r2_Setter(this, value);
 
   @DomName('SVGPathSegArcRel.sweepFlag')
   @DocsEditable()
@@ -3882,7 +3882,7 @@
 
   @DomName('SVGPathSegArcRel.sweepFlag')
   @DocsEditable()
-  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcRel.sweepFlag_Setter_boolean(this, value);
+  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcRel.sweepFlag_Setter(this, value);
 
   @DomName('SVGPathSegArcRel.x')
   @DocsEditable()
@@ -3890,7 +3890,7 @@
 
   @DomName('SVGPathSegArcRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegArcRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegArcRel.x_Setter(this, value);
 
   @DomName('SVGPathSegArcRel.y')
   @DocsEditable()
@@ -3898,7 +3898,7 @@
 
   @DomName('SVGPathSegArcRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegArcRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegArcRel.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3936,7 +3936,7 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.x1')
   @DocsEditable()
@@ -3944,7 +3944,7 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x1_Setter_float(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x1_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.x2')
   @DocsEditable()
@@ -3952,7 +3952,7 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x2_Setter_float(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x2_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y')
   @DocsEditable()
@@ -3960,7 +3960,7 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y1')
   @DocsEditable()
@@ -3968,7 +3968,7 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y1_Setter_float(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y1_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y2')
   @DocsEditable()
@@ -3976,7 +3976,7 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y2_Setter_float(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y2_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3999,7 +3999,7 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.x1')
   @DocsEditable()
@@ -4007,7 +4007,7 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x1_Setter_float(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x1_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.x2')
   @DocsEditable()
@@ -4015,7 +4015,7 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x2_Setter_float(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x2_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.y')
   @DocsEditable()
@@ -4023,7 +4023,7 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.y1')
   @DocsEditable()
@@ -4031,7 +4031,7 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y1_Setter_float(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y1_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.y2')
   @DocsEditable()
@@ -4039,7 +4039,7 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y2_Setter_float(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y2_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4062,7 +4062,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   @DocsEditable()
@@ -4070,7 +4070,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x2_Setter_float(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x2_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   @DocsEditable()
@@ -4078,7 +4078,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   @DocsEditable()
@@ -4086,7 +4086,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y2_Setter_float(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y2_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4109,7 +4109,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   @DocsEditable()
@@ -4117,7 +4117,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x2_Setter_float(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x2_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   @DocsEditable()
@@ -4125,7 +4125,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   @DocsEditable()
@@ -4133,7 +4133,7 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y2_Setter_float(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y2_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4156,7 +4156,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   @DocsEditable()
@@ -4164,7 +4164,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x1_Setter_float(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x1_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   @DocsEditable()
@@ -4172,7 +4172,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   @DocsEditable()
@@ -4180,7 +4180,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y1_Setter_float(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y1_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4203,7 +4203,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   @DocsEditable()
@@ -4211,7 +4211,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x1_Setter_float(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x1_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y')
   @DocsEditable()
@@ -4219,7 +4219,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   @DocsEditable()
@@ -4227,7 +4227,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y1_Setter_float(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y1_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4250,7 +4250,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   @DocsEditable()
@@ -4258,7 +4258,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4281,7 +4281,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.x_Setter(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   @DocsEditable()
@@ -4289,7 +4289,7 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4312,7 +4312,7 @@
 
   @DomName('SVGPathSegLinetoAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoAbs.x_Setter(this, value);
 
   @DomName('SVGPathSegLinetoAbs.y')
   @DocsEditable()
@@ -4320,7 +4320,7 @@
 
   @DomName('SVGPathSegLinetoAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoAbs.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4343,7 +4343,7 @@
 
   @DomName('SVGPathSegLinetoHorizontalAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalAbs.x_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4366,7 +4366,7 @@
 
   @DomName('SVGPathSegLinetoHorizontalRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalRel.x_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4389,7 +4389,7 @@
 
   @DomName('SVGPathSegLinetoRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoRel.x_Setter(this, value);
 
   @DomName('SVGPathSegLinetoRel.y')
   @DocsEditable()
@@ -4397,7 +4397,7 @@
 
   @DomName('SVGPathSegLinetoRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoRel.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4420,7 +4420,7 @@
 
   @DomName('SVGPathSegLinetoVerticalAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalAbs.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4443,7 +4443,7 @@
 
   @DomName('SVGPathSegLinetoVerticalRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalRel.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4516,11 +4516,11 @@
   @DomName('SVGPathSegList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, PathSeg value) => _blink.BlinkSVGPathSegList.$__setter___Callback_ul_SVGPathSeg(this, index, value);
+  void __setter__(int index, PathSeg value) => _blink.BlinkSVGPathSegList.$__setter___Callback_2(this, index, value);
 
   @DomName('SVGPathSegList.appendItem')
   @DocsEditable()
-  PathSeg appendItem(PathSeg newItem) => _blink.BlinkSVGPathSegList.appendItem_Callback_SVGPathSeg(this, newItem);
+  PathSeg appendItem(PathSeg newItem) => _blink.BlinkSVGPathSegList.appendItem_Callback_1(this, newItem);
 
   @DomName('SVGPathSegList.clear')
   @DocsEditable()
@@ -4528,23 +4528,23 @@
 
   @DomName('SVGPathSegList.getItem')
   @DocsEditable()
-  PathSeg getItem(int index) => _blink.BlinkSVGPathSegList.getItem_Callback_ul(this, index);
+  PathSeg getItem(int index) => _blink.BlinkSVGPathSegList.getItem_Callback_1(this, index);
 
   @DomName('SVGPathSegList.initialize')
   @DocsEditable()
-  PathSeg initialize(PathSeg newItem) => _blink.BlinkSVGPathSegList.initialize_Callback_SVGPathSeg(this, newItem);
+  PathSeg initialize(PathSeg newItem) => _blink.BlinkSVGPathSegList.initialize_Callback_1(this, newItem);
 
   @DomName('SVGPathSegList.insertItemBefore')
   @DocsEditable()
-  PathSeg insertItemBefore(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.insertItemBefore_Callback_SVGPathSeg_ul(this, newItem, index);
+  PathSeg insertItemBefore(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.insertItemBefore_Callback_2(this, newItem, index);
 
   @DomName('SVGPathSegList.removeItem')
   @DocsEditable()
-  PathSeg removeItem(int index) => _blink.BlinkSVGPathSegList.removeItem_Callback_ul(this, index);
+  PathSeg removeItem(int index) => _blink.BlinkSVGPathSegList.removeItem_Callback_1(this, index);
 
   @DomName('SVGPathSegList.replaceItem')
   @DocsEditable()
-  PathSeg replaceItem(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.replaceItem_Callback_SVGPathSeg_ul(this, newItem, index);
+  PathSeg replaceItem(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.replaceItem_Callback_2(this, newItem, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4567,7 +4567,7 @@
 
   @DomName('SVGPathSegMovetoAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegMovetoAbs.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegMovetoAbs.x_Setter(this, value);
 
   @DomName('SVGPathSegMovetoAbs.y')
   @DocsEditable()
@@ -4575,7 +4575,7 @@
 
   @DomName('SVGPathSegMovetoAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegMovetoAbs.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegMovetoAbs.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4598,7 +4598,7 @@
 
   @DomName('SVGPathSegMovetoRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegMovetoRel.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegMovetoRel.x_Setter(this, value);
 
   @DomName('SVGPathSegMovetoRel.y')
   @DocsEditable()
@@ -4606,7 +4606,7 @@
 
   @DomName('SVGPathSegMovetoRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegMovetoRel.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegMovetoRel.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4683,7 +4683,7 @@
 
   @DomName('SVGPatternElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGPatternElement.hasExtension_Callback_DOMString(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGPatternElement.hasExtension_Callback_1(this, extension);
 
   @DomName('SVGPatternElement.href')
   @DocsEditable()
@@ -4710,7 +4710,7 @@
 
   @DomName('SVGPoint.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPoint.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGPoint.x_Setter(this, value);
 
   @DomName('SVGPoint.y')
   @DocsEditable()
@@ -4718,11 +4718,11 @@
 
   @DomName('SVGPoint.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPoint.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGPoint.y_Setter(this, value);
 
   @DomName('SVGPoint.matrixTransform')
   @DocsEditable()
-  Point matrixTransform(Matrix matrix) => _blink.BlinkSVGPoint.matrixTransform_Callback_SVGMatrix(this, matrix);
+  Point matrixTransform(Matrix matrix) => _blink.BlinkSVGPoint.matrixTransform_Callback_1(this, matrix);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4751,11 +4751,11 @@
   @DomName('SVGPointList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Point value) => _blink.BlinkSVGPointList.$__setter___Callback_ul_SVGPoint(this, index, value);
+  void __setter__(int index, Point value) => _blink.BlinkSVGPointList.$__setter___Callback_2(this, index, value);
 
   @DomName('SVGPointList.appendItem')
   @DocsEditable()
-  Point appendItem(Point item) => _blink.BlinkSVGPointList.appendItem_Callback_SVGPoint(this, item);
+  Point appendItem(Point item) => _blink.BlinkSVGPointList.appendItem_Callback_1(this, item);
 
   @DomName('SVGPointList.clear')
   @DocsEditable()
@@ -4763,23 +4763,23 @@
 
   @DomName('SVGPointList.getItem')
   @DocsEditable()
-  Point getItem(int index) => _blink.BlinkSVGPointList.getItem_Callback_ul(this, index);
+  Point getItem(int index) => _blink.BlinkSVGPointList.getItem_Callback_1(this, index);
 
   @DomName('SVGPointList.initialize')
   @DocsEditable()
-  Point initialize(Point item) => _blink.BlinkSVGPointList.initialize_Callback_SVGPoint(this, item);
+  Point initialize(Point item) => _blink.BlinkSVGPointList.initialize_Callback_1(this, item);
 
   @DomName('SVGPointList.insertItemBefore')
   @DocsEditable()
-  Point insertItemBefore(Point item, int index) => _blink.BlinkSVGPointList.insertItemBefore_Callback_SVGPoint_ul(this, item, index);
+  Point insertItemBefore(Point item, int index) => _blink.BlinkSVGPointList.insertItemBefore_Callback_2(this, item, index);
 
   @DomName('SVGPointList.removeItem')
   @DocsEditable()
-  Point removeItem(int index) => _blink.BlinkSVGPointList.removeItem_Callback_ul(this, index);
+  Point removeItem(int index) => _blink.BlinkSVGPointList.removeItem_Callback_1(this, index);
 
   @DomName('SVGPointList.replaceItem')
   @DocsEditable()
-  Point replaceItem(Point item, int index) => _blink.BlinkSVGPointList.replaceItem_Callback_SVGPoint_ul(this, item, index);
+  Point replaceItem(Point item, int index) => _blink.BlinkSVGPointList.replaceItem_Callback_2(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4924,7 +4924,7 @@
 
   @DomName('SVGPreserveAspectRatio.align')
   @DocsEditable()
-  void set align(int value) => _blink.BlinkSVGPreserveAspectRatio.align_Setter_us(this, value);
+  void set align(int value) => _blink.BlinkSVGPreserveAspectRatio.align_Setter(this, value);
 
   @DomName('SVGPreserveAspectRatio.meetOrSlice')
   @DocsEditable()
@@ -4932,7 +4932,7 @@
 
   @DomName('SVGPreserveAspectRatio.meetOrSlice')
   @DocsEditable()
-  void set meetOrSlice(int value) => _blink.BlinkSVGPreserveAspectRatio.meetOrSlice_Setter_us(this, value);
+  void set meetOrSlice(int value) => _blink.BlinkSVGPreserveAspectRatio.meetOrSlice_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5004,7 +5004,7 @@
 
   @DomName('SVGRect.height')
   @DocsEditable()
-  void set height(num value) => _blink.BlinkSVGRect.height_Setter_float(this, value);
+  void set height(num value) => _blink.BlinkSVGRect.height_Setter(this, value);
 
   @DomName('SVGRect.width')
   @DocsEditable()
@@ -5012,7 +5012,7 @@
 
   @DomName('SVGRect.width')
   @DocsEditable()
-  void set width(num value) => _blink.BlinkSVGRect.width_Setter_float(this, value);
+  void set width(num value) => _blink.BlinkSVGRect.width_Setter(this, value);
 
   @DomName('SVGRect.x')
   @DocsEditable()
@@ -5020,7 +5020,7 @@
 
   @DomName('SVGRect.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGRect.x_Setter_float(this, value);
+  void set x(num value) => _blink.BlinkSVGRect.x_Setter(this, value);
 
   @DomName('SVGRect.y')
   @DocsEditable()
@@ -5028,7 +5028,7 @@
 
   @DomName('SVGRect.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGRect.y_Setter_float(this, value);
+  void set y(num value) => _blink.BlinkSVGRect.y_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5149,7 +5149,7 @@
 
   @DomName('SVGScriptElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkSVGScriptElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkSVGScriptElement.type_Setter(this, value);
 
   @DomName('SVGScriptElement.href')
   @DocsEditable()
@@ -5286,11 +5286,11 @@
   @DomName('SVGStringList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, String value) => _blink.BlinkSVGStringList.$__setter___Callback_ul_DOMString(this, index, value);
+  void __setter__(int index, String value) => _blink.BlinkSVGStringList.$__setter___Callback_2(this, index, value);
 
   @DomName('SVGStringList.appendItem')
   @DocsEditable()
-  String appendItem(String item) => _blink.BlinkSVGStringList.appendItem_Callback_DOMString(this, item);
+  String appendItem(String item) => _blink.BlinkSVGStringList.appendItem_Callback_1(this, item);
 
   @DomName('SVGStringList.clear')
   @DocsEditable()
@@ -5298,23 +5298,23 @@
 
   @DomName('SVGStringList.getItem')
   @DocsEditable()
-  String getItem(int index) => _blink.BlinkSVGStringList.getItem_Callback_ul(this, index);
+  String getItem(int index) => _blink.BlinkSVGStringList.getItem_Callback_1(this, index);
 
   @DomName('SVGStringList.initialize')
   @DocsEditable()
-  String initialize(String item) => _blink.BlinkSVGStringList.initialize_Callback_DOMString(this, item);
+  String initialize(String item) => _blink.BlinkSVGStringList.initialize_Callback_1(this, item);
 
   @DomName('SVGStringList.insertItemBefore')
   @DocsEditable()
-  String insertItemBefore(String item, int index) => _blink.BlinkSVGStringList.insertItemBefore_Callback_DOMString_ul(this, item, index);
+  String insertItemBefore(String item, int index) => _blink.BlinkSVGStringList.insertItemBefore_Callback_2(this, item, index);
 
   @DomName('SVGStringList.removeItem')
   @DocsEditable()
-  String removeItem(int index) => _blink.BlinkSVGStringList.removeItem_Callback_ul(this, index);
+  String removeItem(int index) => _blink.BlinkSVGStringList.removeItem_Callback_1(this, index);
 
   @DomName('SVGStringList.replaceItem')
   @DocsEditable()
-  String replaceItem(String item, int index) => _blink.BlinkSVGStringList.replaceItem_Callback_DOMString_ul(this, item, index);
+  String replaceItem(String item, int index) => _blink.BlinkSVGStringList.replaceItem_Callback_2(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5348,7 +5348,7 @@
 
   @DomName('SVGStyleElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkSVGStyleElement.disabled_Setter_boolean(this, value);
+  void set disabled(bool value) => _blink.BlinkSVGStyleElement.disabled_Setter(this, value);
 
   @DomName('SVGStyleElement.media')
   @DocsEditable()
@@ -5356,7 +5356,7 @@
 
   @DomName('SVGStyleElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkSVGStyleElement.media_Setter_DOMString(this, value);
+  void set media(String value) => _blink.BlinkSVGStyleElement.media_Setter(this, value);
 
   @DomName('SVGStyleElement.sheet')
   @DocsEditable()
@@ -5369,7 +5369,7 @@
 
   @DomName('SVGStyleElement.title')
   @DocsEditable()
-  void set title(String value) => _blink.BlinkSVGStyleElement.title_Setter_DOMString(this, value);
+  void set title(String value) => _blink.BlinkSVGStyleElement.title_Setter(this, value);
 
   @DomName('SVGStyleElement.type')
   @DocsEditable()
@@ -5377,7 +5377,7 @@
 
   @DomName('SVGStyleElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkSVGStyleElement.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkSVGStyleElement.type_Setter(this, value);
 
 }
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
@@ -5822,7 +5822,7 @@
   @DomName('SVGElement.tabIndex')
   @DocsEditable()
   @Experimental() // untriaged
-  void set tabIndex(int value) => _blink.BlinkSVGElement.tabIndex_Setter_long(this, value);
+  void set tabIndex(int value) => _blink.BlinkSVGElement.tabIndex_Setter(this, value);
 
   @DomName('SVGElement.viewportElement')
   @DocsEditable()
@@ -5834,7 +5834,7 @@
 
   @DomName('SVGElement.xmlbase')
   @DocsEditable()
-  void set xmlbase(String value) => _blink.BlinkSVGElement.xmlbase_Setter_DOMString(this, value);
+  void set xmlbase(String value) => _blink.BlinkSVGElement.xmlbase_Setter(this, value);
 
   @DomName('SVGElement.xmllang')
   @DocsEditable()
@@ -5844,7 +5844,7 @@
   @DomName('SVGElement.xmllang')
   @DocsEditable()
   @Experimental() // untriaged
-  void set xmllang(String value) => _blink.BlinkSVGElement.xmllang_Setter_DOMString(this, value);
+  void set xmllang(String value) => _blink.BlinkSVGElement.xmllang_Setter(this, value);
 
   @DomName('SVGElement.xmlspace')
   @DocsEditable()
@@ -5854,7 +5854,7 @@
   @DomName('SVGElement.xmlspace')
   @DocsEditable()
   @Experimental() // untriaged
-  void set xmlspace(String value) => _blink.BlinkSVGElement.xmlspace_Setter_DOMString(this, value);
+  void set xmlspace(String value) => _blink.BlinkSVGElement.xmlspace_Setter(this, value);
 
   @DomName('SVGElement.onabort')
   @DocsEditable()
@@ -6147,7 +6147,7 @@
 
   @DomName('SVGSVGElement.currentScale')
   @DocsEditable()
-  void set currentScale(num value) => _blink.BlinkSVGSVGElement.currentScale_Setter_float(this, value);
+  void set currentScale(num value) => _blink.BlinkSVGSVGElement.currentScale_Setter(this, value);
 
   @DomName('SVGSVGElement.currentTranslate')
   @DocsEditable()
@@ -6203,11 +6203,11 @@
 
   @DomName('SVGSVGElement.checkEnclosure')
   @DocsEditable()
-  bool checkEnclosure(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.checkEnclosure_Callback_SVGElement_SVGRect(this, element, rect);
+  bool checkEnclosure(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.checkEnclosure_Callback_2(this, element, rect);
 
   @DomName('SVGSVGElement.checkIntersection')
   @DocsEditable()
-  bool checkIntersection(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.checkIntersection_Callback_SVGElement_SVGRect(this, element, rect);
+  bool checkIntersection(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.checkIntersection_Callback_2(this, element, rect);
 
   @DomName('SVGSVGElement.createSVGAngle')
   @DocsEditable()
@@ -6239,7 +6239,7 @@
 
   @DomName('SVGSVGElement.createSVGTransformFromMatrix')
   @DocsEditable()
-  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGSVGElement.createSVGTransformFromMatrix_Callback_SVGMatrix(this, matrix);
+  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGSVGElement.createSVGTransformFromMatrix_Callback_1(this, matrix);
 
   @DomName('SVGSVGElement.deselectAll')
   @DocsEditable()
@@ -6255,15 +6255,15 @@
 
   @DomName('SVGSVGElement.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkSVGSVGElement.getElementById_Callback_DOMString(this, elementId);
+  Element getElementById(String elementId) => _blink.BlinkSVGSVGElement.getElementById_Callback_1(this, elementId);
 
   @DomName('SVGSVGElement.getEnclosureList')
   @DocsEditable()
-  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.getEnclosureList_Callback_SVGRect_SVGElement(this, rect, referenceElement);
+  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.getEnclosureList_Callback_2(this, rect, referenceElement);
 
   @DomName('SVGSVGElement.getIntersectionList')
   @DocsEditable()
-  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.getIntersectionList_Callback_SVGRect_SVGElement(this, rect, referenceElement);
+  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.getIntersectionList_Callback_2(this, rect, referenceElement);
 
   @DomName('SVGSVGElement.pauseAnimations')
   @DocsEditable()
@@ -6271,11 +6271,11 @@
 
   @DomName('SVGSVGElement.setCurrentTime')
   @DocsEditable()
-  void setCurrentTime(num seconds) => _blink.BlinkSVGSVGElement.setCurrentTime_Callback_float(this, seconds);
+  void setCurrentTime(num seconds) => _blink.BlinkSVGSVGElement.setCurrentTime_Callback_1(this, seconds);
 
   @DomName('SVGSVGElement.suspendRedraw')
   @DocsEditable()
-  int suspendRedraw(int maxWaitMilliseconds) => _blink.BlinkSVGSVGElement.suspendRedraw_Callback_ul(this, maxWaitMilliseconds);
+  int suspendRedraw(int maxWaitMilliseconds) => _blink.BlinkSVGSVGElement.suspendRedraw_Callback_1(this, maxWaitMilliseconds);
 
   @DomName('SVGSVGElement.unpauseAnimations')
   @DocsEditable()
@@ -6283,7 +6283,7 @@
 
   @DomName('SVGSVGElement.unsuspendRedraw')
   @DocsEditable()
-  void unsuspendRedraw(int suspendHandleId) => _blink.BlinkSVGSVGElement.unsuspendRedraw_Callback_ul(this, suspendHandleId);
+  void unsuspendRedraw(int suspendHandleId) => _blink.BlinkSVGSVGElement.unsuspendRedraw_Callback_1(this, suspendHandleId);
 
   @DomName('SVGSVGElement.unsuspendRedrawAll')
   @DocsEditable()
@@ -6303,7 +6303,7 @@
 
   @DomName('SVGSVGElement.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGSVGElement.zoomAndPan_Setter_us(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGSVGElement.zoomAndPan_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6417,7 +6417,7 @@
 
   @DomName('SVGTests.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGTests.hasExtension_Callback_DOMString(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGTests.hasExtension_Callback_1(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6462,7 +6462,7 @@
 
   @DomName('SVGTextContentElement.getCharNumAtPosition')
   @DocsEditable()
-  int getCharNumAtPosition(Point point) => _blink.BlinkSVGTextContentElement.getCharNumAtPosition_Callback_SVGPoint(this, point);
+  int getCharNumAtPosition(Point point) => _blink.BlinkSVGTextContentElement.getCharNumAtPosition_Callback_1(this, point);
 
   @DomName('SVGTextContentElement.getComputedTextLength')
   @DocsEditable()
@@ -6470,11 +6470,11 @@
 
   @DomName('SVGTextContentElement.getEndPositionOfChar')
   @DocsEditable()
-  Point getEndPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.getEndPositionOfChar_Callback_ul(this, offset);
+  Point getEndPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.getEndPositionOfChar_Callback_1(this, offset);
 
   @DomName('SVGTextContentElement.getExtentOfChar')
   @DocsEditable()
-  Rect getExtentOfChar(int offset) => _blink.BlinkSVGTextContentElement.getExtentOfChar_Callback_ul(this, offset);
+  Rect getExtentOfChar(int offset) => _blink.BlinkSVGTextContentElement.getExtentOfChar_Callback_1(this, offset);
 
   @DomName('SVGTextContentElement.getNumberOfChars')
   @DocsEditable()
@@ -6482,19 +6482,19 @@
 
   @DomName('SVGTextContentElement.getRotationOfChar')
   @DocsEditable()
-  double getRotationOfChar(int offset) => _blink.BlinkSVGTextContentElement.getRotationOfChar_Callback_ul(this, offset);
+  double getRotationOfChar(int offset) => _blink.BlinkSVGTextContentElement.getRotationOfChar_Callback_1(this, offset);
 
   @DomName('SVGTextContentElement.getStartPositionOfChar')
   @DocsEditable()
-  Point getStartPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.getStartPositionOfChar_Callback_ul(this, offset);
+  Point getStartPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.getStartPositionOfChar_Callback_1(this, offset);
 
   @DomName('SVGTextContentElement.getSubStringLength')
   @DocsEditable()
-  double getSubStringLength(int offset, int length) => _blink.BlinkSVGTextContentElement.getSubStringLength_Callback_ul_ul(this, offset, length);
+  double getSubStringLength(int offset, int length) => _blink.BlinkSVGTextContentElement.getSubStringLength_Callback_2(this, offset, length);
 
   @DomName('SVGTextContentElement.selectSubString')
   @DocsEditable()
-  void selectSubString(int offset, int length) => _blink.BlinkSVGTextContentElement.selectSubString_Callback_ul_ul(this, offset, length);
+  void selectSubString(int offset, int length) => _blink.BlinkSVGTextContentElement.selectSubString_Callback_2(this, offset, length);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6705,27 +6705,27 @@
 
   @DomName('SVGTransform.setMatrix')
   @DocsEditable()
-  void setMatrix(Matrix matrix) => _blink.BlinkSVGTransform.setMatrix_Callback_SVGMatrix(this, matrix);
+  void setMatrix(Matrix matrix) => _blink.BlinkSVGTransform.setMatrix_Callback_1(this, matrix);
 
   @DomName('SVGTransform.setRotate')
   @DocsEditable()
-  void setRotate(num angle, num cx, num cy) => _blink.BlinkSVGTransform.setRotate_Callback_float_float_float(this, angle, cx, cy);
+  void setRotate(num angle, num cx, num cy) => _blink.BlinkSVGTransform.setRotate_Callback_3(this, angle, cx, cy);
 
   @DomName('SVGTransform.setScale')
   @DocsEditable()
-  void setScale(num sx, num sy) => _blink.BlinkSVGTransform.setScale_Callback_float_float(this, sx, sy);
+  void setScale(num sx, num sy) => _blink.BlinkSVGTransform.setScale_Callback_2(this, sx, sy);
 
   @DomName('SVGTransform.setSkewX')
   @DocsEditable()
-  void setSkewX(num angle) => _blink.BlinkSVGTransform.setSkewX_Callback_float(this, angle);
+  void setSkewX(num angle) => _blink.BlinkSVGTransform.setSkewX_Callback_1(this, angle);
 
   @DomName('SVGTransform.setSkewY')
   @DocsEditable()
-  void setSkewY(num angle) => _blink.BlinkSVGTransform.setSkewY_Callback_float(this, angle);
+  void setSkewY(num angle) => _blink.BlinkSVGTransform.setSkewY_Callback_1(this, angle);
 
   @DomName('SVGTransform.setTranslate')
   @DocsEditable()
-  void setTranslate(num tx, num ty) => _blink.BlinkSVGTransform.setTranslate_Callback_float_float(this, tx, ty);
+  void setTranslate(num tx, num ty) => _blink.BlinkSVGTransform.setTranslate_Callback_2(this, tx, ty);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6798,11 +6798,11 @@
   @DomName('SVGTransformList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Transform value) => _blink.BlinkSVGTransformList.$__setter___Callback_ul_SVGTransform(this, index, value);
+  void __setter__(int index, Transform value) => _blink.BlinkSVGTransformList.$__setter___Callback_2(this, index, value);
 
   @DomName('SVGTransformList.appendItem')
   @DocsEditable()
-  Transform appendItem(Transform item) => _blink.BlinkSVGTransformList.appendItem_Callback_SVGTransform(this, item);
+  Transform appendItem(Transform item) => _blink.BlinkSVGTransformList.appendItem_Callback_1(this, item);
 
   @DomName('SVGTransformList.clear')
   @DocsEditable()
@@ -6814,27 +6814,27 @@
 
   @DomName('SVGTransformList.createSVGTransformFromMatrix')
   @DocsEditable()
-  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGTransformList.createSVGTransformFromMatrix_Callback_SVGMatrix(this, matrix);
+  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGTransformList.createSVGTransformFromMatrix_Callback_1(this, matrix);
 
   @DomName('SVGTransformList.getItem')
   @DocsEditable()
-  Transform getItem(int index) => _blink.BlinkSVGTransformList.getItem_Callback_ul(this, index);
+  Transform getItem(int index) => _blink.BlinkSVGTransformList.getItem_Callback_1(this, index);
 
   @DomName('SVGTransformList.initialize')
   @DocsEditable()
-  Transform initialize(Transform item) => _blink.BlinkSVGTransformList.initialize_Callback_SVGTransform(this, item);
+  Transform initialize(Transform item) => _blink.BlinkSVGTransformList.initialize_Callback_1(this, item);
 
   @DomName('SVGTransformList.insertItemBefore')
   @DocsEditable()
-  Transform insertItemBefore(Transform item, int index) => _blink.BlinkSVGTransformList.insertItemBefore_Callback_SVGTransform_ul(this, item, index);
+  Transform insertItemBefore(Transform item, int index) => _blink.BlinkSVGTransformList.insertItemBefore_Callback_2(this, item, index);
 
   @DomName('SVGTransformList.removeItem')
   @DocsEditable()
-  Transform removeItem(int index) => _blink.BlinkSVGTransformList.removeItem_Callback_ul(this, index);
+  Transform removeItem(int index) => _blink.BlinkSVGTransformList.removeItem_Callback_1(this, index);
 
   @DomName('SVGTransformList.replaceItem')
   @DocsEditable()
-  Transform replaceItem(Transform item, int index) => _blink.BlinkSVGTransformList.replaceItem_Callback_SVGTransform_ul(this, item, index);
+  Transform replaceItem(Transform item, int index) => _blink.BlinkSVGTransformList.replaceItem_Callback_2(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6970,7 +6970,7 @@
 
   @DomName('SVGViewElement.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGViewElement.zoomAndPan_Setter_us(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGViewElement.zoomAndPan_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7029,7 +7029,7 @@
   @DomName('SVGViewSpec.zoomAndPan')
   @DocsEditable()
   @Experimental() // nonstandard
-  void set zoomAndPan(int value) => _blink.BlinkSVGViewSpec.zoomAndPan_Setter_us(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGViewSpec.zoomAndPan_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7064,7 +7064,7 @@
 
   @DomName('SVGZoomAndPan.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGZoomAndPan.zoomAndPan_Setter_us(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGZoomAndPan.zoomAndPan_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/sdk/lib/web_audio/dartium/web_audio_dartium.dart b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
index 7b7b6a9..d21f80c 100644
--- a/sdk/lib/web_audio/dartium/web_audio_dartium.dart
+++ b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
@@ -66,7 +66,7 @@
 
   @DomName('AnalyserNode.fftSize')
   @DocsEditable()
-  void set fftSize(int value) => _blink.BlinkAnalyserNode.fftSize_Setter_ul(this, value);
+  void set fftSize(int value) => _blink.BlinkAnalyserNode.fftSize_Setter(this, value);
 
   @DomName('AnalyserNode.frequencyBinCount')
   @DocsEditable()
@@ -78,7 +78,7 @@
 
   @DomName('AnalyserNode.maxDecibels')
   @DocsEditable()
-  void set maxDecibels(num value) => _blink.BlinkAnalyserNode.maxDecibels_Setter_double(this, value);
+  void set maxDecibels(num value) => _blink.BlinkAnalyserNode.maxDecibels_Setter(this, value);
 
   @DomName('AnalyserNode.minDecibels')
   @DocsEditable()
@@ -86,7 +86,7 @@
 
   @DomName('AnalyserNode.minDecibels')
   @DocsEditable()
-  void set minDecibels(num value) => _blink.BlinkAnalyserNode.minDecibels_Setter_double(this, value);
+  void set minDecibels(num value) => _blink.BlinkAnalyserNode.minDecibels_Setter(this, value);
 
   @DomName('AnalyserNode.smoothingTimeConstant')
   @DocsEditable()
@@ -94,24 +94,24 @@
 
   @DomName('AnalyserNode.smoothingTimeConstant')
   @DocsEditable()
-  void set smoothingTimeConstant(num value) => _blink.BlinkAnalyserNode.smoothingTimeConstant_Setter_double(this, value);
+  void set smoothingTimeConstant(num value) => _blink.BlinkAnalyserNode.smoothingTimeConstant_Setter(this, value);
 
   @DomName('AnalyserNode.getByteFrequencyData')
   @DocsEditable()
-  void getByteFrequencyData(Uint8List array) => _blink.BlinkAnalyserNode.getByteFrequencyData_Callback_Uint8Array(this, array);
+  void getByteFrequencyData(Uint8List array) => _blink.BlinkAnalyserNode.getByteFrequencyData_Callback_1(this, array);
 
   @DomName('AnalyserNode.getByteTimeDomainData')
   @DocsEditable()
-  void getByteTimeDomainData(Uint8List array) => _blink.BlinkAnalyserNode.getByteTimeDomainData_Callback_Uint8Array(this, array);
+  void getByteTimeDomainData(Uint8List array) => _blink.BlinkAnalyserNode.getByteTimeDomainData_Callback_1(this, array);
 
   @DomName('AnalyserNode.getFloatFrequencyData')
   @DocsEditable()
-  void getFloatFrequencyData(Float32List array) => _blink.BlinkAnalyserNode.getFloatFrequencyData_Callback_Float32Array(this, array);
+  void getFloatFrequencyData(Float32List array) => _blink.BlinkAnalyserNode.getFloatFrequencyData_Callback_1(this, array);
 
   @DomName('AnalyserNode.getFloatTimeDomainData')
   @DocsEditable()
   @Experimental() // untriaged
-  void getFloatTimeDomainData(Float32List array) => _blink.BlinkAnalyserNode.getFloatTimeDomainData_Callback_Float32Array(this, array);
+  void getFloatTimeDomainData(Float32List array) => _blink.BlinkAnalyserNode.getFloatTimeDomainData_Callback_1(this, array);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -147,7 +147,7 @@
 
   @DomName('AudioBuffer.getChannelData')
   @DocsEditable()
-  Float32List getChannelData(int channelIndex) => _blink.BlinkAudioBuffer.getChannelData_Callback_ul(this, channelIndex);
+  Float32List getChannelData(int channelIndex) => _blink.BlinkAudioBuffer.getChannelData_Callback_1(this, channelIndex);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -195,7 +195,7 @@
 
   @DomName('AudioBufferSourceNode.buffer')
   @DocsEditable()
-  void set buffer(AudioBuffer value) => _blink.BlinkAudioBufferSourceNode.buffer_Setter_AudioBuffer(this, value);
+  void set buffer(AudioBuffer value) => _blink.BlinkAudioBufferSourceNode.buffer_Setter(this, value);
 
   @DomName('AudioBufferSourceNode.loop')
   @DocsEditable()
@@ -203,7 +203,7 @@
 
   @DomName('AudioBufferSourceNode.loop')
   @DocsEditable()
-  void set loop(bool value) => _blink.BlinkAudioBufferSourceNode.loop_Setter_boolean(this, value);
+  void set loop(bool value) => _blink.BlinkAudioBufferSourceNode.loop_Setter(this, value);
 
   @DomName('AudioBufferSourceNode.loopEnd')
   @DocsEditable()
@@ -211,7 +211,7 @@
 
   @DomName('AudioBufferSourceNode.loopEnd')
   @DocsEditable()
-  void set loopEnd(num value) => _blink.BlinkAudioBufferSourceNode.loopEnd_Setter_double(this, value);
+  void set loopEnd(num value) => _blink.BlinkAudioBufferSourceNode.loopEnd_Setter(this, value);
 
   @DomName('AudioBufferSourceNode.loopStart')
   @DocsEditable()
@@ -219,7 +219,7 @@
 
   @DomName('AudioBufferSourceNode.loopStart')
   @DocsEditable()
-  void set loopStart(num value) => _blink.BlinkAudioBufferSourceNode.loopStart_Setter_double(this, value);
+  void set loopStart(num value) => _blink.BlinkAudioBufferSourceNode.loopStart_Setter(this, value);
 
   @DomName('AudioBufferSourceNode.playbackRate')
   @DocsEditable()
@@ -227,15 +227,15 @@
 
   void start([num when, num grainOffset, num grainDuration]) {
     if (grainDuration != null) {
-      _blink.BlinkAudioBufferSourceNode.start_Callback_double_double_double(this, when, grainOffset, grainDuration);
+      _blink.BlinkAudioBufferSourceNode.start_Callback_3(this, when, grainOffset, grainDuration);
       return;
     }
     if (grainOffset != null) {
-      _blink.BlinkAudioBufferSourceNode.start_Callback_double_double(this, when, grainOffset);
+      _blink.BlinkAudioBufferSourceNode.start_Callback_2(this, when, grainOffset);
       return;
     }
     if (when != null) {
-      _blink.BlinkAudioBufferSourceNode.start_Callback_double(this, when);
+      _blink.BlinkAudioBufferSourceNode.start_Callback_1(this, when);
       return;
     }
     _blink.BlinkAudioBufferSourceNode.start_Callback(this);
@@ -244,7 +244,7 @@
 
   void stop([num when]) {
     if (when != null) {
-      _blink.BlinkAudioBufferSourceNode.stop_Callback_double(this, when);
+      _blink.BlinkAudioBufferSourceNode.stop_Callback_1(this, when);
       return;
     }
     _blink.BlinkAudioBufferSourceNode.stop_Callback(this);
@@ -317,7 +317,7 @@
 
   @DomName('AudioContext.createBuffer')
   @DocsEditable()
-  AudioBuffer createBuffer(int numberOfChannels, int numberOfFrames, num sampleRate) => _blink.BlinkAudioContext.createBuffer_Callback_ul_ul_float(this, numberOfChannels, numberOfFrames, sampleRate);
+  AudioBuffer createBuffer(int numberOfChannels, int numberOfFrames, num sampleRate) => _blink.BlinkAudioContext.createBuffer_Callback_3(this, numberOfChannels, numberOfFrames, sampleRate);
 
   @DomName('AudioContext.createBufferSource')
   @DocsEditable()
@@ -325,14 +325,14 @@
 
   ChannelMergerNode createChannelMerger([int numberOfInputs]) {
     if (numberOfInputs != null) {
-      return _blink.BlinkAudioContext.createChannelMerger_Callback_ul(this, numberOfInputs);
+      return _blink.BlinkAudioContext.createChannelMerger_Callback_1(this, numberOfInputs);
     }
     return _blink.BlinkAudioContext.createChannelMerger_Callback(this);
   }
 
   ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) {
     if (numberOfOutputs != null) {
-      return _blink.BlinkAudioContext.createChannelSplitter_Callback_ul(this, numberOfOutputs);
+      return _blink.BlinkAudioContext.createChannelSplitter_Callback_1(this, numberOfOutputs);
     }
     return _blink.BlinkAudioContext.createChannelSplitter_Callback(this);
   }
@@ -343,7 +343,7 @@
 
   DelayNode createDelay([num maxDelayTime]) {
     if (maxDelayTime != null) {
-      return _blink.BlinkAudioContext.createDelay_Callback_double(this, maxDelayTime);
+      return _blink.BlinkAudioContext.createDelay_Callback_1(this, maxDelayTime);
     }
     return _blink.BlinkAudioContext.createDelay_Callback(this);
   }
@@ -358,7 +358,7 @@
 
   @DomName('AudioContext.createMediaElementSource')
   @DocsEditable()
-  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) => _blink.BlinkAudioContext.createMediaElementSource_Callback_HTMLMediaElement(this, mediaElement);
+  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) => _blink.BlinkAudioContext.createMediaElementSource_Callback_1(this, mediaElement);
 
   @DomName('AudioContext.createMediaStreamDestination')
   @DocsEditable()
@@ -366,7 +366,7 @@
 
   @DomName('AudioContext.createMediaStreamSource')
   @DocsEditable()
-  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) => _blink.BlinkAudioContext.createMediaStreamSource_Callback_MediaStream(this, mediaStream);
+  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) => _blink.BlinkAudioContext.createMediaStreamSource_Callback_1(this, mediaStream);
 
   @DomName('AudioContext.createOscillator')
   @DocsEditable()
@@ -379,17 +379,17 @@
   @DomName('AudioContext.createPeriodicWave')
   @DocsEditable()
   @Experimental() // untriaged
-  PeriodicWave createPeriodicWave(Float32List real, Float32List imag) => _blink.BlinkAudioContext.createPeriodicWave_Callback_Float32Array_Float32Array(this, real, imag);
+  PeriodicWave createPeriodicWave(Float32List real, Float32List imag) => _blink.BlinkAudioContext.createPeriodicWave_Callback_2(this, real, imag);
 
   ScriptProcessorNode createScriptProcessor([int bufferSize, int numberOfInputChannels, int numberOfOutputChannels]) {
     if (numberOfOutputChannels != null) {
-      return _blink.BlinkAudioContext.createScriptProcessor_Callback_ul_ul_ul(this, bufferSize, numberOfInputChannels, numberOfOutputChannels);
+      return _blink.BlinkAudioContext.createScriptProcessor_Callback_3(this, bufferSize, numberOfInputChannels, numberOfOutputChannels);
     }
     if (numberOfInputChannels != null) {
-      return _blink.BlinkAudioContext.createScriptProcessor_Callback_ul_ul(this, bufferSize, numberOfInputChannels);
+      return _blink.BlinkAudioContext.createScriptProcessor_Callback_2(this, bufferSize, numberOfInputChannels);
     }
     if (bufferSize != null) {
-      return _blink.BlinkAudioContext.createScriptProcessor_Callback_ul(this, bufferSize);
+      return _blink.BlinkAudioContext.createScriptProcessor_Callback_1(this, bufferSize);
     }
     return _blink.BlinkAudioContext.createScriptProcessor_Callback(this);
   }
@@ -400,7 +400,7 @@
 
   @DomName('AudioContext.decodeAudioData')
   @DocsEditable()
-  void _decodeAudioData(ByteBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) => _blink.BlinkAudioContext.decodeAudioData_Callback_ArrayBuffer_AudioBufferCallback_AudioBufferCallback(this, audioData, successCallback, errorCallback);
+  void _decodeAudioData(ByteBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) => _blink.BlinkAudioContext.decodeAudioData_Callback_3(this, audioData, successCallback, errorCallback);
 
   @DomName('AudioContext.startRendering')
   @DocsEditable()
@@ -467,7 +467,7 @@
 
   @DomName('AudioListener.dopplerFactor')
   @DocsEditable()
-  void set dopplerFactor(num value) => _blink.BlinkAudioListener.dopplerFactor_Setter_float(this, value);
+  void set dopplerFactor(num value) => _blink.BlinkAudioListener.dopplerFactor_Setter(this, value);
 
   @DomName('AudioListener.speedOfSound')
   @DocsEditable()
@@ -475,19 +475,19 @@
 
   @DomName('AudioListener.speedOfSound')
   @DocsEditable()
-  void set speedOfSound(num value) => _blink.BlinkAudioListener.speedOfSound_Setter_float(this, value);
+  void set speedOfSound(num value) => _blink.BlinkAudioListener.speedOfSound_Setter(this, value);
 
   @DomName('AudioListener.setOrientation')
   @DocsEditable()
-  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) => _blink.BlinkAudioListener.setOrientation_Callback_float_float_float_float_float_float(this, x, y, z, xUp, yUp, zUp);
+  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) => _blink.BlinkAudioListener.setOrientation_Callback_6(this, x, y, z, xUp, yUp, zUp);
 
   @DomName('AudioListener.setPosition')
   @DocsEditable()
-  void setPosition(num x, num y, num z) => _blink.BlinkAudioListener.setPosition_Callback_float_float_float(this, x, y, z);
+  void setPosition(num x, num y, num z) => _blink.BlinkAudioListener.setPosition_Callback_3(this, x, y, z);
 
   @DomName('AudioListener.setVelocity')
   @DocsEditable()
-  void setVelocity(num x, num y, num z) => _blink.BlinkAudioListener.setVelocity_Callback_float_float_float(this, x, y, z);
+  void setVelocity(num x, num y, num z) => _blink.BlinkAudioListener.setVelocity_Callback_3(this, x, y, z);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -508,7 +508,7 @@
 
   @DomName('AudioNode.channelCount')
   @DocsEditable()
-  void set channelCount(int value) => _blink.BlinkAudioNode.channelCount_Setter_ul(this, value);
+  void set channelCount(int value) => _blink.BlinkAudioNode.channelCount_Setter(this, value);
 
   @DomName('AudioNode.channelCountMode')
   @DocsEditable()
@@ -516,7 +516,7 @@
 
   @DomName('AudioNode.channelCountMode')
   @DocsEditable()
-  void set channelCountMode(String value) => _blink.BlinkAudioNode.channelCountMode_Setter_DOMString(this, value);
+  void set channelCountMode(String value) => _blink.BlinkAudioNode.channelCountMode_Setter(this, value);
 
   @DomName('AudioNode.channelInterpretation')
   @DocsEditable()
@@ -524,7 +524,7 @@
 
   @DomName('AudioNode.channelInterpretation')
   @DocsEditable()
-  void set channelInterpretation(String value) => _blink.BlinkAudioNode.channelInterpretation_Setter_DOMString(this, value);
+  void set channelInterpretation(String value) => _blink.BlinkAudioNode.channelInterpretation_Setter(this, value);
 
   @DomName('AudioNode.context')
   @DocsEditable()
@@ -540,11 +540,11 @@
 
   void _connect(destination, int output, [int input]) {
     if ((input is int || input == null) && (output is int || output == null) && (destination is AudioNode || destination == null)) {
-      _blink.BlinkAudioNode.connect_Callback_AudioNode_ul_ul(this, destination, output, input);
+      _blink.BlinkAudioNode.connect_Callback_3(this, destination, output, input);
       return;
     }
     if ((output is int || output == null) && (destination is AudioParam || destination == null) && input == null) {
-      _blink.BlinkAudioNode.connect_Callback_AudioParam_ul(this, destination, output);
+      _blink.BlinkAudioNode.connect_Callback_2(this, destination, output);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -552,7 +552,7 @@
 
   @DomName('AudioNode.disconnect')
   @DocsEditable()
-  void disconnect(int output) => _blink.BlinkAudioNode.disconnect_Callback_ul(this, output);
+  void disconnect(int output) => _blink.BlinkAudioNode.disconnect_Callback_1(this, output);
 
   @DomName('AudioNode.connect')
   void connectNode(AudioNode destination, [int output = 0, int input = 0]) =>
@@ -587,31 +587,31 @@
 
   @DomName('AudioParam.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkAudioParam.value_Setter_float(this, value);
+  void set value(num value) => _blink.BlinkAudioParam.value_Setter(this, value);
 
   @DomName('AudioParam.cancelScheduledValues')
   @DocsEditable()
-  void cancelScheduledValues(num startTime) => _blink.BlinkAudioParam.cancelScheduledValues_Callback_double(this, startTime);
+  void cancelScheduledValues(num startTime) => _blink.BlinkAudioParam.cancelScheduledValues_Callback_1(this, startTime);
 
   @DomName('AudioParam.exponentialRampToValueAtTime')
   @DocsEditable()
-  void exponentialRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.exponentialRampToValueAtTime_Callback_float_double(this, value, time);
+  void exponentialRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.exponentialRampToValueAtTime_Callback_2(this, value, time);
 
   @DomName('AudioParam.linearRampToValueAtTime')
   @DocsEditable()
-  void linearRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.linearRampToValueAtTime_Callback_float_double(this, value, time);
+  void linearRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.linearRampToValueAtTime_Callback_2(this, value, time);
 
   @DomName('AudioParam.setTargetAtTime')
   @DocsEditable()
-  void setTargetAtTime(num target, num time, num timeConstant) => _blink.BlinkAudioParam.setTargetAtTime_Callback_float_double_double(this, target, time, timeConstant);
+  void setTargetAtTime(num target, num time, num timeConstant) => _blink.BlinkAudioParam.setTargetAtTime_Callback_3(this, target, time, timeConstant);
 
   @DomName('AudioParam.setValueAtTime')
   @DocsEditable()
-  void setValueAtTime(num value, num time) => _blink.BlinkAudioParam.setValueAtTime_Callback_float_double(this, value, time);
+  void setValueAtTime(num value, num time) => _blink.BlinkAudioParam.setValueAtTime_Callback_2(this, value, time);
 
   @DomName('AudioParam.setValueCurveAtTime')
   @DocsEditable()
-  void setValueCurveAtTime(Float32List values, num time, num duration) => _blink.BlinkAudioParam.setValueCurveAtTime_Callback_Float32Array_double_double(this, values, time, duration);
+  void setValueCurveAtTime(Float32List values, num time, num duration) => _blink.BlinkAudioParam.setValueCurveAtTime_Callback_3(this, values, time, duration);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -696,11 +696,11 @@
 
   @DomName('BiquadFilterNode.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkBiquadFilterNode.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkBiquadFilterNode.type_Setter(this, value);
 
   @DomName('BiquadFilterNode.getFrequencyResponse')
   @DocsEditable()
-  void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse, Float32List phaseResponse) => _blink.BlinkBiquadFilterNode.getFrequencyResponse_Callback_Float32Array_Float32Array_Float32Array(this, frequencyHz, magResponse, phaseResponse);
+  void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse, Float32List phaseResponse) => _blink.BlinkBiquadFilterNode.getFrequencyResponse_Callback_3(this, frequencyHz, magResponse, phaseResponse);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -756,7 +756,7 @@
 
   @DomName('ConvolverNode.buffer')
   @DocsEditable()
-  void set buffer(AudioBuffer value) => _blink.BlinkConvolverNode.buffer_Setter_AudioBuffer(this, value);
+  void set buffer(AudioBuffer value) => _blink.BlinkConvolverNode.buffer_Setter(this, value);
 
   @DomName('ConvolverNode.normalize')
   @DocsEditable()
@@ -764,7 +764,7 @@
 
   @DomName('ConvolverNode.normalize')
   @DocsEditable()
-  void set normalize(bool value) => _blink.BlinkConvolverNode.normalize_Setter_boolean(this, value);
+  void set normalize(bool value) => _blink.BlinkConvolverNode.normalize_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -946,7 +946,7 @@
   @DomName('OfflineAudioContext.OfflineAudioContext')
   @DocsEditable()
   factory OfflineAudioContext(int numberOfChannels, int numberOfFrames, num sampleRate) {
-    return _blink.BlinkOfflineAudioContext.constructorCallback_ul_ul_float(numberOfChannels, numberOfFrames, sampleRate);
+    return _blink.BlinkOfflineAudioContext.constructorCallback_3(numberOfChannels, numberOfFrames, sampleRate);
   }
 
 }
@@ -990,24 +990,24 @@
 
   @DomName('OscillatorNode.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkOscillatorNode.type_Setter_DOMString(this, value);
+  void set type(String value) => _blink.BlinkOscillatorNode.type_Setter(this, value);
 
   @DomName('OscillatorNode.noteOff')
   @DocsEditable()
-  void noteOff(num when) => _blink.BlinkOscillatorNode.noteOff_Callback_double(this, when);
+  void noteOff(num when) => _blink.BlinkOscillatorNode.noteOff_Callback_1(this, when);
 
   @DomName('OscillatorNode.noteOn')
   @DocsEditable()
-  void noteOn(num when) => _blink.BlinkOscillatorNode.noteOn_Callback_double(this, when);
+  void noteOn(num when) => _blink.BlinkOscillatorNode.noteOn_Callback_1(this, when);
 
   @DomName('OscillatorNode.setPeriodicWave')
   @DocsEditable()
   @Experimental() // untriaged
-  void setPeriodicWave(PeriodicWave periodicWave) => _blink.BlinkOscillatorNode.setPeriodicWave_Callback_PeriodicWave(this, periodicWave);
+  void setPeriodicWave(PeriodicWave periodicWave) => _blink.BlinkOscillatorNode.setPeriodicWave_Callback_1(this, periodicWave);
 
   void start([num when]) {
     if (when != null) {
-      _blink.BlinkOscillatorNode.start_Callback_double(this, when);
+      _blink.BlinkOscillatorNode.start_Callback_1(this, when);
       return;
     }
     _blink.BlinkOscillatorNode.start_Callback(this);
@@ -1016,7 +1016,7 @@
 
   void stop([num when]) {
     if (when != null) {
-      _blink.BlinkOscillatorNode.stop_Callback_double(this, when);
+      _blink.BlinkOscillatorNode.stop_Callback_1(this, when);
       return;
     }
     _blink.BlinkOscillatorNode.stop_Callback(this);
@@ -1051,7 +1051,7 @@
 
   @DomName('PannerNode.coneInnerAngle')
   @DocsEditable()
-  void set coneInnerAngle(num value) => _blink.BlinkPannerNode.coneInnerAngle_Setter_double(this, value);
+  void set coneInnerAngle(num value) => _blink.BlinkPannerNode.coneInnerAngle_Setter(this, value);
 
   @DomName('PannerNode.coneOuterAngle')
   @DocsEditable()
@@ -1059,7 +1059,7 @@
 
   @DomName('PannerNode.coneOuterAngle')
   @DocsEditable()
-  void set coneOuterAngle(num value) => _blink.BlinkPannerNode.coneOuterAngle_Setter_double(this, value);
+  void set coneOuterAngle(num value) => _blink.BlinkPannerNode.coneOuterAngle_Setter(this, value);
 
   @DomName('PannerNode.coneOuterGain')
   @DocsEditable()
@@ -1067,7 +1067,7 @@
 
   @DomName('PannerNode.coneOuterGain')
   @DocsEditable()
-  void set coneOuterGain(num value) => _blink.BlinkPannerNode.coneOuterGain_Setter_double(this, value);
+  void set coneOuterGain(num value) => _blink.BlinkPannerNode.coneOuterGain_Setter(this, value);
 
   @DomName('PannerNode.distanceModel')
   @DocsEditable()
@@ -1075,7 +1075,7 @@
 
   @DomName('PannerNode.distanceModel')
   @DocsEditable()
-  void set distanceModel(String value) => _blink.BlinkPannerNode.distanceModel_Setter_DOMString(this, value);
+  void set distanceModel(String value) => _blink.BlinkPannerNode.distanceModel_Setter(this, value);
 
   @DomName('PannerNode.maxDistance')
   @DocsEditable()
@@ -1083,7 +1083,7 @@
 
   @DomName('PannerNode.maxDistance')
   @DocsEditable()
-  void set maxDistance(num value) => _blink.BlinkPannerNode.maxDistance_Setter_double(this, value);
+  void set maxDistance(num value) => _blink.BlinkPannerNode.maxDistance_Setter(this, value);
 
   @DomName('PannerNode.panningModel')
   @DocsEditable()
@@ -1091,7 +1091,7 @@
 
   @DomName('PannerNode.panningModel')
   @DocsEditable()
-  void set panningModel(String value) => _blink.BlinkPannerNode.panningModel_Setter_DOMString(this, value);
+  void set panningModel(String value) => _blink.BlinkPannerNode.panningModel_Setter(this, value);
 
   @DomName('PannerNode.refDistance')
   @DocsEditable()
@@ -1099,7 +1099,7 @@
 
   @DomName('PannerNode.refDistance')
   @DocsEditable()
-  void set refDistance(num value) => _blink.BlinkPannerNode.refDistance_Setter_double(this, value);
+  void set refDistance(num value) => _blink.BlinkPannerNode.refDistance_Setter(this, value);
 
   @DomName('PannerNode.rolloffFactor')
   @DocsEditable()
@@ -1107,19 +1107,19 @@
 
   @DomName('PannerNode.rolloffFactor')
   @DocsEditable()
-  void set rolloffFactor(num value) => _blink.BlinkPannerNode.rolloffFactor_Setter_double(this, value);
+  void set rolloffFactor(num value) => _blink.BlinkPannerNode.rolloffFactor_Setter(this, value);
 
   @DomName('PannerNode.setOrientation')
   @DocsEditable()
-  void setOrientation(num x, num y, num z) => _blink.BlinkPannerNode.setOrientation_Callback_float_float_float(this, x, y, z);
+  void setOrientation(num x, num y, num z) => _blink.BlinkPannerNode.setOrientation_Callback_3(this, x, y, z);
 
   @DomName('PannerNode.setPosition')
   @DocsEditable()
-  void setPosition(num x, num y, num z) => _blink.BlinkPannerNode.setPosition_Callback_float_float_float(this, x, y, z);
+  void setPosition(num x, num y, num z) => _blink.BlinkPannerNode.setPosition_Callback_3(this, x, y, z);
 
   @DomName('PannerNode.setVelocity')
   @DocsEditable()
-  void setVelocity(num x, num y, num z) => _blink.BlinkPannerNode.setVelocity_Callback_float_float_float(this, x, y, z);
+  void setVelocity(num x, num y, num z) => _blink.BlinkPannerNode.setVelocity_Callback_3(this, x, y, z);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1159,7 +1159,7 @@
   @DomName('ScriptProcessorNode.setEventListener')
   @DocsEditable()
   @Experimental() // untriaged
-  void setEventListener(EventListener eventListener) => _blink.BlinkScriptProcessorNode.setEventListener_Callback_EventListener(this, eventListener);
+  void setEventListener(EventListener eventListener) => _blink.BlinkScriptProcessorNode.setEventListener_Callback_1(this, eventListener);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1183,7 +1183,7 @@
 
   @DomName('WaveShaperNode.curve')
   @DocsEditable()
-  void set curve(Float32List value) => _blink.BlinkWaveShaperNode.curve_Setter_Float32Array(this, value);
+  void set curve(Float32List value) => _blink.BlinkWaveShaperNode.curve_Setter(this, value);
 
   @DomName('WaveShaperNode.oversample')
   @DocsEditable()
@@ -1191,6 +1191,6 @@
 
   @DomName('WaveShaperNode.oversample')
   @DocsEditable()
-  void set oversample(String value) => _blink.BlinkWaveShaperNode.oversample_Setter_DOMString(this, value);
+  void set oversample(String value) => _blink.BlinkWaveShaperNode.oversample_Setter(this, value);
 
 }
diff --git a/sdk/lib/web_gl/dartium/web_gl_dartium.dart b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
index 1275ae1..ec946e4 100644
--- a/sdk/lib/web_gl/dartium/web_gl_dartium.dart
+++ b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
@@ -404,17 +404,17 @@
   @DomName('ANGLEInstancedArrays.drawArraysInstancedANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) => _blink.BlinkANGLEInstancedArrays.drawArraysInstancedANGLE_Callback_ul_long_long_long(this, mode, first, count, primcount);
+  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) => _blink.BlinkANGLEInstancedArrays.drawArraysInstancedANGLE_Callback_4(this, mode, first, count, primcount);
 
   @DomName('ANGLEInstancedArrays.drawElementsInstancedANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) => _blink.BlinkANGLEInstancedArrays.drawElementsInstancedANGLE_Callback_ul_long_ul_ll_long(this, mode, count, type, offset, primcount);
+  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) => _blink.BlinkANGLEInstancedArrays.drawElementsInstancedANGLE_Callback_5(this, mode, count, type, offset, primcount);
 
   @DomName('ANGLEInstancedArrays.vertexAttribDivisorANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void vertexAttribDivisorAngle(int index, int divisor) => _blink.BlinkANGLEInstancedArrays.vertexAttribDivisorANGLE_Callback_ul_long(this, index, divisor);
+  void vertexAttribDivisorAngle(int index, int divisor) => _blink.BlinkANGLEInstancedArrays.vertexAttribDivisorANGLE_Callback_2(this, index, divisor);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -586,7 +586,7 @@
 
   @DomName('WebGLContextAttributes.alpha')
   @DocsEditable()
-  void set alpha(bool value) => _blink.BlinkWebGLContextAttributes.alpha_Setter_boolean(this, value);
+  void set alpha(bool value) => _blink.BlinkWebGLContextAttributes.alpha_Setter(this, value);
 
   @DomName('WebGLContextAttributes.antialias')
   @DocsEditable()
@@ -594,7 +594,7 @@
 
   @DomName('WebGLContextAttributes.antialias')
   @DocsEditable()
-  void set antialias(bool value) => _blink.BlinkWebGLContextAttributes.antialias_Setter_boolean(this, value);
+  void set antialias(bool value) => _blink.BlinkWebGLContextAttributes.antialias_Setter(this, value);
 
   @DomName('WebGLContextAttributes.depth')
   @DocsEditable()
@@ -602,7 +602,7 @@
 
   @DomName('WebGLContextAttributes.depth')
   @DocsEditable()
-  void set depth(bool value) => _blink.BlinkWebGLContextAttributes.depth_Setter_boolean(this, value);
+  void set depth(bool value) => _blink.BlinkWebGLContextAttributes.depth_Setter(this, value);
 
   @DomName('WebGLContextAttributes.failIfMajorPerformanceCaveat')
   @DocsEditable()
@@ -612,7 +612,7 @@
   @DomName('WebGLContextAttributes.failIfMajorPerformanceCaveat')
   @DocsEditable()
   @Experimental() // untriaged
-  void set failIfMajorPerformanceCaveat(bool value) => _blink.BlinkWebGLContextAttributes.failIfMajorPerformanceCaveat_Setter_boolean(this, value);
+  void set failIfMajorPerformanceCaveat(bool value) => _blink.BlinkWebGLContextAttributes.failIfMajorPerformanceCaveat_Setter(this, value);
 
   @DomName('WebGLContextAttributes.premultipliedAlpha')
   @DocsEditable()
@@ -620,7 +620,7 @@
 
   @DomName('WebGLContextAttributes.premultipliedAlpha')
   @DocsEditable()
-  void set premultipliedAlpha(bool value) => _blink.BlinkWebGLContextAttributes.premultipliedAlpha_Setter_boolean(this, value);
+  void set premultipliedAlpha(bool value) => _blink.BlinkWebGLContextAttributes.premultipliedAlpha_Setter(this, value);
 
   @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   @DocsEditable()
@@ -628,7 +628,7 @@
 
   @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   @DocsEditable()
-  void set preserveDrawingBuffer(bool value) => _blink.BlinkWebGLContextAttributes.preserveDrawingBuffer_Setter_boolean(this, value);
+  void set preserveDrawingBuffer(bool value) => _blink.BlinkWebGLContextAttributes.preserveDrawingBuffer_Setter(this, value);
 
   @DomName('WebGLContextAttributes.stencil')
   @DocsEditable()
@@ -636,7 +636,7 @@
 
   @DomName('WebGLContextAttributes.stencil')
   @DocsEditable()
-  void set stencil(bool value) => _blink.BlinkWebGLContextAttributes.stencil_Setter_boolean(this, value);
+  void set stencil(bool value) => _blink.BlinkWebGLContextAttributes.stencil_Setter(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -699,7 +699,7 @@
 
   @DomName('WebGLDebugShaders.getTranslatedShaderSource')
   @DocsEditable()
-  String getTranslatedShaderSource(Shader shader) => _blink.BlinkWebGLDebugShaders.getTranslatedShaderSource_Callback_WebGLShader(this, shader);
+  String getTranslatedShaderSource(Shader shader) => _blink.BlinkWebGLDebugShaders.getTranslatedShaderSource_Callback_1(this, shader);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -875,7 +875,7 @@
 
   @DomName('WebGLDrawBuffers.drawBuffersWEBGL')
   @DocsEditable()
-  void drawBuffersWebgl(List<int> buffers) => _blink.BlinkWebGLDrawBuffers.drawBuffersWEBGL_Callback_SEQ_ul_SEQ(this, buffers);
+  void drawBuffersWebgl(List<int> buffers) => _blink.BlinkWebGLDrawBuffers.drawBuffersWEBGL_Callback_1(this, buffers);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1122,7 +1122,7 @@
 
   @DomName('OESVertexArrayObject.bindVertexArrayOES')
   @DocsEditable()
-  void bindVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.bindVertexArrayOES_Callback_WebGLVertexArrayObjectOES(this, arrayObject);
+  void bindVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.bindVertexArrayOES_Callback_1(this, arrayObject);
 
   @DomName('OESVertexArrayObject.createVertexArrayOES')
   @DocsEditable()
@@ -1130,11 +1130,11 @@
 
   @DomName('OESVertexArrayObject.deleteVertexArrayOES')
   @DocsEditable()
-  void deleteVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.deleteVertexArrayOES_Callback_WebGLVertexArrayObjectOES(this, arrayObject);
+  void deleteVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.deleteVertexArrayOES_Callback_1(this, arrayObject);
 
   @DomName('OESVertexArrayObject.isVertexArrayOES')
   @DocsEditable()
-  bool isVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.isVertexArrayOES_Callback_WebGLVertexArrayObjectOES(this, arrayObject);
+  bool isVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.isVertexArrayOES_Callback_1(this, arrayObject);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2389,67 +2389,67 @@
 
   @DomName('WebGLRenderingContext.activeTexture')
   @DocsEditable()
-  void activeTexture(int texture) => _blink.BlinkWebGLRenderingContext.activeTexture_Callback_ul(this, texture);
+  void activeTexture(int texture) => _blink.BlinkWebGLRenderingContext.activeTexture_Callback_1(this, texture);
 
   @DomName('WebGLRenderingContext.attachShader')
   @DocsEditable()
-  void attachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.attachShader_Callback_WebGLProgram_WebGLShader(this, program, shader);
+  void attachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.attachShader_Callback_2(this, program, shader);
 
   @DomName('WebGLRenderingContext.bindAttribLocation')
   @DocsEditable()
-  void bindAttribLocation(Program program, int index, String name) => _blink.BlinkWebGLRenderingContext.bindAttribLocation_Callback_WebGLProgram_ul_DOMString(this, program, index, name);
+  void bindAttribLocation(Program program, int index, String name) => _blink.BlinkWebGLRenderingContext.bindAttribLocation_Callback_3(this, program, index, name);
 
   @DomName('WebGLRenderingContext.bindBuffer')
   @DocsEditable()
-  void bindBuffer(int target, Buffer buffer) => _blink.BlinkWebGLRenderingContext.bindBuffer_Callback_ul_WebGLBuffer(this, target, buffer);
+  void bindBuffer(int target, Buffer buffer) => _blink.BlinkWebGLRenderingContext.bindBuffer_Callback_2(this, target, buffer);
 
   @DomName('WebGLRenderingContext.bindFramebuffer')
   @DocsEditable()
-  void bindFramebuffer(int target, Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.bindFramebuffer_Callback_ul_WebGLFramebuffer(this, target, framebuffer);
+  void bindFramebuffer(int target, Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.bindFramebuffer_Callback_2(this, target, framebuffer);
 
   @DomName('WebGLRenderingContext.bindRenderbuffer')
   @DocsEditable()
-  void bindRenderbuffer(int target, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.bindRenderbuffer_Callback_ul_WebGLRenderbuffer(this, target, renderbuffer);
+  void bindRenderbuffer(int target, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.bindRenderbuffer_Callback_2(this, target, renderbuffer);
 
   @DomName('WebGLRenderingContext.bindTexture')
   @DocsEditable()
-  void bindTexture(int target, Texture texture) => _blink.BlinkWebGLRenderingContext.bindTexture_Callback_ul_WebGLTexture(this, target, texture);
+  void bindTexture(int target, Texture texture) => _blink.BlinkWebGLRenderingContext.bindTexture_Callback_2(this, target, texture);
 
   @DomName('WebGLRenderingContext.blendColor')
   @DocsEditable()
-  void blendColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.blendColor_Callback_float_float_float_float(this, red, green, blue, alpha);
+  void blendColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.blendColor_Callback_4(this, red, green, blue, alpha);
 
   @DomName('WebGLRenderingContext.blendEquation')
   @DocsEditable()
-  void blendEquation(int mode) => _blink.BlinkWebGLRenderingContext.blendEquation_Callback_ul(this, mode);
+  void blendEquation(int mode) => _blink.BlinkWebGLRenderingContext.blendEquation_Callback_1(this, mode);
 
   @DomName('WebGLRenderingContext.blendEquationSeparate')
   @DocsEditable()
-  void blendEquationSeparate(int modeRGB, int modeAlpha) => _blink.BlinkWebGLRenderingContext.blendEquationSeparate_Callback_ul_ul(this, modeRGB, modeAlpha);
+  void blendEquationSeparate(int modeRGB, int modeAlpha) => _blink.BlinkWebGLRenderingContext.blendEquationSeparate_Callback_2(this, modeRGB, modeAlpha);
 
   @DomName('WebGLRenderingContext.blendFunc')
   @DocsEditable()
-  void blendFunc(int sfactor, int dfactor) => _blink.BlinkWebGLRenderingContext.blendFunc_Callback_ul_ul(this, sfactor, dfactor);
+  void blendFunc(int sfactor, int dfactor) => _blink.BlinkWebGLRenderingContext.blendFunc_Callback_2(this, sfactor, dfactor);
 
   @DomName('WebGLRenderingContext.blendFuncSeparate')
   @DocsEditable()
-  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) => _blink.BlinkWebGLRenderingContext.blendFuncSeparate_Callback_ul_ul_ul_ul(this, srcRGB, dstRGB, srcAlpha, dstAlpha);
+  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) => _blink.BlinkWebGLRenderingContext.blendFuncSeparate_Callback_4(this, srcRGB, dstRGB, srcAlpha, dstAlpha);
 
   @DomName('WebGLRenderingContext.bufferByteData')
   @DocsEditable()
-  void bufferByteData(int target, ByteBuffer data, int usage) => _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBuffer_ul(this, target, data, usage);
+  void bufferByteData(int target, ByteBuffer data, int usage) => _blink.BlinkWebGLRenderingContext.bufferData_Callback_3(this, target, data, usage);
 
   void bufferData(int target, data_OR_size, int usage) {
     if ((usage is int) && (data_OR_size is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ll_ul(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.bufferData_Callback_3(this, target, data_OR_size, usage);
       return;
     }
     if ((usage is int) && (data_OR_size is TypedData) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBufferView_ul(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.bufferData_Callback_3(this, target, data_OR_size, usage);
       return;
     }
     if ((usage is int) && (data_OR_size is ByteBuffer || data_OR_size == null) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBuffer_ul(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.bufferData_Callback_3(this, target, data_OR_size, usage);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2457,19 +2457,19 @@
 
   @DomName('WebGLRenderingContext.bufferDataTyped')
   @DocsEditable()
-  void bufferDataTyped(int target, TypedData data, int usage) => _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBufferView_ul(this, target, data, usage);
+  void bufferDataTyped(int target, TypedData data, int usage) => _blink.BlinkWebGLRenderingContext.bufferData_Callback_3(this, target, data, usage);
 
   @DomName('WebGLRenderingContext.bufferSubByteData')
   @DocsEditable()
-  void bufferSubByteData(int target, int offset, ByteBuffer data) => _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBuffer(this, target, offset, data);
+  void bufferSubByteData(int target, int offset, ByteBuffer data) => _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_3(this, target, offset, data);
 
   void bufferSubData(int target, int offset, data) {
     if ((data is TypedData) && (offset is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBufferView(this, target, offset, data);
+      _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_3(this, target, offset, data);
       return;
     }
     if ((data is ByteBuffer || data == null) && (offset is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBuffer(this, target, offset, data);
+      _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_3(this, target, offset, data);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2477,51 +2477,51 @@
 
   @DomName('WebGLRenderingContext.bufferSubDataTyped')
   @DocsEditable()
-  void bufferSubDataTyped(int target, int offset, TypedData data) => _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBufferView(this, target, offset, data);
+  void bufferSubDataTyped(int target, int offset, TypedData data) => _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_3(this, target, offset, data);
 
   @DomName('WebGLRenderingContext.checkFramebufferStatus')
   @DocsEditable()
-  int checkFramebufferStatus(int target) => _blink.BlinkWebGLRenderingContext.checkFramebufferStatus_Callback_ul(this, target);
+  int checkFramebufferStatus(int target) => _blink.BlinkWebGLRenderingContext.checkFramebufferStatus_Callback_1(this, target);
 
   @DomName('WebGLRenderingContext.clear')
   @DocsEditable()
-  void clear(int mask) => _blink.BlinkWebGLRenderingContext.clear_Callback_ul(this, mask);
+  void clear(int mask) => _blink.BlinkWebGLRenderingContext.clear_Callback_1(this, mask);
 
   @DomName('WebGLRenderingContext.clearColor')
   @DocsEditable()
-  void clearColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.clearColor_Callback_float_float_float_float(this, red, green, blue, alpha);
+  void clearColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.clearColor_Callback_4(this, red, green, blue, alpha);
 
   @DomName('WebGLRenderingContext.clearDepth')
   @DocsEditable()
-  void clearDepth(num depth) => _blink.BlinkWebGLRenderingContext.clearDepth_Callback_float(this, depth);
+  void clearDepth(num depth) => _blink.BlinkWebGLRenderingContext.clearDepth_Callback_1(this, depth);
 
   @DomName('WebGLRenderingContext.clearStencil')
   @DocsEditable()
-  void clearStencil(int s) => _blink.BlinkWebGLRenderingContext.clearStencil_Callback_long(this, s);
+  void clearStencil(int s) => _blink.BlinkWebGLRenderingContext.clearStencil_Callback_1(this, s);
 
   @DomName('WebGLRenderingContext.colorMask')
   @DocsEditable()
-  void colorMask(bool red, bool green, bool blue, bool alpha) => _blink.BlinkWebGLRenderingContext.colorMask_Callback_boolean_boolean_boolean_boolean(this, red, green, blue, alpha);
+  void colorMask(bool red, bool green, bool blue, bool alpha) => _blink.BlinkWebGLRenderingContext.colorMask_Callback_4(this, red, green, blue, alpha);
 
   @DomName('WebGLRenderingContext.compileShader')
   @DocsEditable()
-  void compileShader(Shader shader) => _blink.BlinkWebGLRenderingContext.compileShader_Callback_WebGLShader(this, shader);
+  void compileShader(Shader shader) => _blink.BlinkWebGLRenderingContext.compileShader_Callback_1(this, shader);
 
   @DomName('WebGLRenderingContext.compressedTexImage2D')
   @DocsEditable()
-  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, TypedData data) => _blink.BlinkWebGLRenderingContext.compressedTexImage2D_Callback_ul_long_ul_long_long_long_ArrayBufferView(this, target, level, internalformat, width, height, border, data);
+  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, TypedData data) => _blink.BlinkWebGLRenderingContext.compressedTexImage2D_Callback_7(this, target, level, internalformat, width, height, border, data);
 
   @DomName('WebGLRenderingContext.compressedTexSubImage2D')
   @DocsEditable()
-  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, TypedData data) => _blink.BlinkWebGLRenderingContext.compressedTexSubImage2D_Callback_ul_long_long_long_long_long_ul_ArrayBufferView(this, target, level, xoffset, yoffset, width, height, format, data);
+  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, TypedData data) => _blink.BlinkWebGLRenderingContext.compressedTexSubImage2D_Callback_8(this, target, level, xoffset, yoffset, width, height, format, data);
 
   @DomName('WebGLRenderingContext.copyTexImage2D')
   @DocsEditable()
-  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) => _blink.BlinkWebGLRenderingContext.copyTexImage2D_Callback_ul_long_ul_long_long_long_long_long(this, target, level, internalformat, x, y, width, height, border);
+  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) => _blink.BlinkWebGLRenderingContext.copyTexImage2D_Callback_8(this, target, level, internalformat, x, y, width, height, border);
 
   @DomName('WebGLRenderingContext.copyTexSubImage2D')
   @DocsEditable()
-  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.copyTexSubImage2D_Callback_ul_long_long_long_long_long_long_long(this, target, level, xoffset, yoffset, x, y, width, height);
+  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.copyTexSubImage2D_Callback_8(this, target, level, xoffset, yoffset, x, y, width, height);
 
   @DomName('WebGLRenderingContext.createBuffer')
   @DocsEditable()
@@ -2541,7 +2541,7 @@
 
   @DomName('WebGLRenderingContext.createShader')
   @DocsEditable()
-  Shader createShader(int type) => _blink.BlinkWebGLRenderingContext.createShader_Callback_ul(this, type);
+  Shader createShader(int type) => _blink.BlinkWebGLRenderingContext.createShader_Callback_1(this, type);
 
   @DomName('WebGLRenderingContext.createTexture')
   @DocsEditable()
@@ -2549,71 +2549,71 @@
 
   @DomName('WebGLRenderingContext.cullFace')
   @DocsEditable()
-  void cullFace(int mode) => _blink.BlinkWebGLRenderingContext.cullFace_Callback_ul(this, mode);
+  void cullFace(int mode) => _blink.BlinkWebGLRenderingContext.cullFace_Callback_1(this, mode);
 
   @DomName('WebGLRenderingContext.deleteBuffer')
   @DocsEditable()
-  void deleteBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.deleteBuffer_Callback_WebGLBuffer(this, buffer);
+  void deleteBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.deleteBuffer_Callback_1(this, buffer);
 
   @DomName('WebGLRenderingContext.deleteFramebuffer')
   @DocsEditable()
-  void deleteFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.deleteFramebuffer_Callback_WebGLFramebuffer(this, framebuffer);
+  void deleteFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.deleteFramebuffer_Callback_1(this, framebuffer);
 
   @DomName('WebGLRenderingContext.deleteProgram')
   @DocsEditable()
-  void deleteProgram(Program program) => _blink.BlinkWebGLRenderingContext.deleteProgram_Callback_WebGLProgram(this, program);
+  void deleteProgram(Program program) => _blink.BlinkWebGLRenderingContext.deleteProgram_Callback_1(this, program);
 
   @DomName('WebGLRenderingContext.deleteRenderbuffer')
   @DocsEditable()
-  void deleteRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.deleteRenderbuffer_Callback_WebGLRenderbuffer(this, renderbuffer);
+  void deleteRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.deleteRenderbuffer_Callback_1(this, renderbuffer);
 
   @DomName('WebGLRenderingContext.deleteShader')
   @DocsEditable()
-  void deleteShader(Shader shader) => _blink.BlinkWebGLRenderingContext.deleteShader_Callback_WebGLShader(this, shader);
+  void deleteShader(Shader shader) => _blink.BlinkWebGLRenderingContext.deleteShader_Callback_1(this, shader);
 
   @DomName('WebGLRenderingContext.deleteTexture')
   @DocsEditable()
-  void deleteTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.deleteTexture_Callback_WebGLTexture(this, texture);
+  void deleteTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.deleteTexture_Callback_1(this, texture);
 
   @DomName('WebGLRenderingContext.depthFunc')
   @DocsEditable()
-  void depthFunc(int func) => _blink.BlinkWebGLRenderingContext.depthFunc_Callback_ul(this, func);
+  void depthFunc(int func) => _blink.BlinkWebGLRenderingContext.depthFunc_Callback_1(this, func);
 
   @DomName('WebGLRenderingContext.depthMask')
   @DocsEditable()
-  void depthMask(bool flag) => _blink.BlinkWebGLRenderingContext.depthMask_Callback_boolean(this, flag);
+  void depthMask(bool flag) => _blink.BlinkWebGLRenderingContext.depthMask_Callback_1(this, flag);
 
   @DomName('WebGLRenderingContext.depthRange')
   @DocsEditable()
-  void depthRange(num zNear, num zFar) => _blink.BlinkWebGLRenderingContext.depthRange_Callback_float_float(this, zNear, zFar);
+  void depthRange(num zNear, num zFar) => _blink.BlinkWebGLRenderingContext.depthRange_Callback_2(this, zNear, zFar);
 
   @DomName('WebGLRenderingContext.detachShader')
   @DocsEditable()
-  void detachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.detachShader_Callback_WebGLProgram_WebGLShader(this, program, shader);
+  void detachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.detachShader_Callback_2(this, program, shader);
 
   @DomName('WebGLRenderingContext.disable')
   @DocsEditable()
-  void disable(int cap) => _blink.BlinkWebGLRenderingContext.disable_Callback_ul(this, cap);
+  void disable(int cap) => _blink.BlinkWebGLRenderingContext.disable_Callback_1(this, cap);
 
   @DomName('WebGLRenderingContext.disableVertexAttribArray')
   @DocsEditable()
-  void disableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.disableVertexAttribArray_Callback_ul(this, index);
+  void disableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.disableVertexAttribArray_Callback_1(this, index);
 
   @DomName('WebGLRenderingContext.drawArrays')
   @DocsEditable()
-  void drawArrays(int mode, int first, int count) => _blink.BlinkWebGLRenderingContext.drawArrays_Callback_ul_long_long(this, mode, first, count);
+  void drawArrays(int mode, int first, int count) => _blink.BlinkWebGLRenderingContext.drawArrays_Callback_3(this, mode, first, count);
 
   @DomName('WebGLRenderingContext.drawElements')
   @DocsEditable()
-  void drawElements(int mode, int count, int type, int offset) => _blink.BlinkWebGLRenderingContext.drawElements_Callback_ul_long_ul_ll(this, mode, count, type, offset);
+  void drawElements(int mode, int count, int type, int offset) => _blink.BlinkWebGLRenderingContext.drawElements_Callback_4(this, mode, count, type, offset);
 
   @DomName('WebGLRenderingContext.enable')
   @DocsEditable()
-  void enable(int cap) => _blink.BlinkWebGLRenderingContext.enable_Callback_ul(this, cap);
+  void enable(int cap) => _blink.BlinkWebGLRenderingContext.enable_Callback_1(this, cap);
 
   @DomName('WebGLRenderingContext.enableVertexAttribArray')
   @DocsEditable()
-  void enableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.enableVertexAttribArray_Callback_ul(this, index);
+  void enableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.enableVertexAttribArray_Callback_1(this, index);
 
   @DomName('WebGLRenderingContext.finish')
   @DocsEditable()
@@ -2625,39 +2625,39 @@
 
   @DomName('WebGLRenderingContext.framebufferRenderbuffer')
   @DocsEditable()
-  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.framebufferRenderbuffer_Callback_ul_ul_ul_WebGLRenderbuffer(this, target, attachment, renderbuffertarget, renderbuffer);
+  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.framebufferRenderbuffer_Callback_4(this, target, attachment, renderbuffertarget, renderbuffer);
 
   @DomName('WebGLRenderingContext.framebufferTexture2D')
   @DocsEditable()
-  void framebufferTexture2D(int target, int attachment, int textarget, Texture texture, int level) => _blink.BlinkWebGLRenderingContext.framebufferTexture2D_Callback_ul_ul_ul_WebGLTexture_long(this, target, attachment, textarget, texture, level);
+  void framebufferTexture2D(int target, int attachment, int textarget, Texture texture, int level) => _blink.BlinkWebGLRenderingContext.framebufferTexture2D_Callback_5(this, target, attachment, textarget, texture, level);
 
   @DomName('WebGLRenderingContext.frontFace')
   @DocsEditable()
-  void frontFace(int mode) => _blink.BlinkWebGLRenderingContext.frontFace_Callback_ul(this, mode);
+  void frontFace(int mode) => _blink.BlinkWebGLRenderingContext.frontFace_Callback_1(this, mode);
 
   @DomName('WebGLRenderingContext.generateMipmap')
   @DocsEditable()
-  void generateMipmap(int target) => _blink.BlinkWebGLRenderingContext.generateMipmap_Callback_ul(this, target);
+  void generateMipmap(int target) => _blink.BlinkWebGLRenderingContext.generateMipmap_Callback_1(this, target);
 
   @DomName('WebGLRenderingContext.getActiveAttrib')
   @DocsEditable()
-  ActiveInfo getActiveAttrib(Program program, int index) => _blink.BlinkWebGLRenderingContext.getActiveAttrib_Callback_WebGLProgram_ul(this, program, index);
+  ActiveInfo getActiveAttrib(Program program, int index) => _blink.BlinkWebGLRenderingContext.getActiveAttrib_Callback_2(this, program, index);
 
   @DomName('WebGLRenderingContext.getActiveUniform')
   @DocsEditable()
-  ActiveInfo getActiveUniform(Program program, int index) => _blink.BlinkWebGLRenderingContext.getActiveUniform_Callback_WebGLProgram_ul(this, program, index);
+  ActiveInfo getActiveUniform(Program program, int index) => _blink.BlinkWebGLRenderingContext.getActiveUniform_Callback_2(this, program, index);
 
   @DomName('WebGLRenderingContext.getAttachedShaders')
   @DocsEditable()
-  List<Shader> getAttachedShaders(Program program) => _blink.BlinkWebGLRenderingContext.getAttachedShaders_Callback_WebGLProgram(this, program);
+  List<Shader> getAttachedShaders(Program program) => _blink.BlinkWebGLRenderingContext.getAttachedShaders_Callback_1(this, program);
 
   @DomName('WebGLRenderingContext.getAttribLocation')
   @DocsEditable()
-  int getAttribLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.getAttribLocation_Callback_WebGLProgram_DOMString(this, program, name);
+  int getAttribLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.getAttribLocation_Callback_2(this, program, name);
 
   @DomName('WebGLRenderingContext.getBufferParameter')
   @DocsEditable()
-  Object getBufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getBufferParameter_Callback_ul_ul(this, target, pname);
+  Object getBufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getBufferParameter_Callback_2(this, target, pname);
 
   @DomName('WebGLRenderingContext.getContextAttributes')
   @DocsEditable()
@@ -2669,43 +2669,43 @@
 
   @DomName('WebGLRenderingContext.getExtension')
   @DocsEditable()
-  Object getExtension(String name) => _blink.BlinkWebGLRenderingContext.getExtension_Callback_DOMString(this, name);
+  Object getExtension(String name) => _blink.BlinkWebGLRenderingContext.getExtension_Callback_1(this, name);
 
   @DomName('WebGLRenderingContext.getFramebufferAttachmentParameter')
   @DocsEditable()
-  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) => _blink.BlinkWebGLRenderingContext.getFramebufferAttachmentParameter_Callback_ul_ul_ul(this, target, attachment, pname);
+  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) => _blink.BlinkWebGLRenderingContext.getFramebufferAttachmentParameter_Callback_3(this, target, attachment, pname);
 
   @DomName('WebGLRenderingContext.getParameter')
   @DocsEditable()
-  Object getParameter(int pname) => _blink.BlinkWebGLRenderingContext.getParameter_Callback_ul(this, pname);
+  Object getParameter(int pname) => _blink.BlinkWebGLRenderingContext.getParameter_Callback_1(this, pname);
 
   @DomName('WebGLRenderingContext.getProgramInfoLog')
   @DocsEditable()
-  String getProgramInfoLog(Program program) => _blink.BlinkWebGLRenderingContext.getProgramInfoLog_Callback_WebGLProgram(this, program);
+  String getProgramInfoLog(Program program) => _blink.BlinkWebGLRenderingContext.getProgramInfoLog_Callback_1(this, program);
 
   @DomName('WebGLRenderingContext.getProgramParameter')
   @DocsEditable()
-  Object getProgramParameter(Program program, int pname) => _blink.BlinkWebGLRenderingContext.getProgramParameter_Callback_WebGLProgram_ul(this, program, pname);
+  Object getProgramParameter(Program program, int pname) => _blink.BlinkWebGLRenderingContext.getProgramParameter_Callback_2(this, program, pname);
 
   @DomName('WebGLRenderingContext.getRenderbufferParameter')
   @DocsEditable()
-  Object getRenderbufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getRenderbufferParameter_Callback_ul_ul(this, target, pname);
+  Object getRenderbufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getRenderbufferParameter_Callback_2(this, target, pname);
 
   @DomName('WebGLRenderingContext.getShaderInfoLog')
   @DocsEditable()
-  String getShaderInfoLog(Shader shader) => _blink.BlinkWebGLRenderingContext.getShaderInfoLog_Callback_WebGLShader(this, shader);
+  String getShaderInfoLog(Shader shader) => _blink.BlinkWebGLRenderingContext.getShaderInfoLog_Callback_1(this, shader);
 
   @DomName('WebGLRenderingContext.getShaderParameter')
   @DocsEditable()
-  Object getShaderParameter(Shader shader, int pname) => _blink.BlinkWebGLRenderingContext.getShaderParameter_Callback_WebGLShader_ul(this, shader, pname);
+  Object getShaderParameter(Shader shader, int pname) => _blink.BlinkWebGLRenderingContext.getShaderParameter_Callback_2(this, shader, pname);
 
   @DomName('WebGLRenderingContext.getShaderPrecisionFormat')
   @DocsEditable()
-  ShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) => _blink.BlinkWebGLRenderingContext.getShaderPrecisionFormat_Callback_ul_ul(this, shadertype, precisiontype);
+  ShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) => _blink.BlinkWebGLRenderingContext.getShaderPrecisionFormat_Callback_2(this, shadertype, precisiontype);
 
   @DomName('WebGLRenderingContext.getShaderSource')
   @DocsEditable()
-  String getShaderSource(Shader shader) => _blink.BlinkWebGLRenderingContext.getShaderSource_Callback_WebGLShader(this, shader);
+  String getShaderSource(Shader shader) => _blink.BlinkWebGLRenderingContext.getShaderSource_Callback_1(this, shader);
 
   @DomName('WebGLRenderingContext.getSupportedExtensions')
   @DocsEditable()
@@ -2713,31 +2713,31 @@
 
   @DomName('WebGLRenderingContext.getTexParameter')
   @DocsEditable()
-  Object getTexParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getTexParameter_Callback_ul_ul(this, target, pname);
+  Object getTexParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getTexParameter_Callback_2(this, target, pname);
 
   @DomName('WebGLRenderingContext.getUniform')
   @DocsEditable()
-  Object getUniform(Program program, UniformLocation location) => _blink.BlinkWebGLRenderingContext.getUniform_Callback_WebGLProgram_WebGLUniformLocation(this, program, location);
+  Object getUniform(Program program, UniformLocation location) => _blink.BlinkWebGLRenderingContext.getUniform_Callback_2(this, program, location);
 
   @DomName('WebGLRenderingContext.getUniformLocation')
   @DocsEditable()
-  UniformLocation getUniformLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.getUniformLocation_Callback_WebGLProgram_DOMString(this, program, name);
+  UniformLocation getUniformLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.getUniformLocation_Callback_2(this, program, name);
 
   @DomName('WebGLRenderingContext.getVertexAttrib')
   @DocsEditable()
-  Object getVertexAttrib(int index, int pname) => _blink.BlinkWebGLRenderingContext.getVertexAttrib_Callback_ul_ul(this, index, pname);
+  Object getVertexAttrib(int index, int pname) => _blink.BlinkWebGLRenderingContext.getVertexAttrib_Callback_2(this, index, pname);
 
   @DomName('WebGLRenderingContext.getVertexAttribOffset')
   @DocsEditable()
-  int getVertexAttribOffset(int index, int pname) => _blink.BlinkWebGLRenderingContext.getVertexAttribOffset_Callback_ul_ul(this, index, pname);
+  int getVertexAttribOffset(int index, int pname) => _blink.BlinkWebGLRenderingContext.getVertexAttribOffset_Callback_2(this, index, pname);
 
   @DomName('WebGLRenderingContext.hint')
   @DocsEditable()
-  void hint(int target, int mode) => _blink.BlinkWebGLRenderingContext.hint_Callback_ul_ul(this, target, mode);
+  void hint(int target, int mode) => _blink.BlinkWebGLRenderingContext.hint_Callback_2(this, target, mode);
 
   @DomName('WebGLRenderingContext.isBuffer')
   @DocsEditable()
-  bool isBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.isBuffer_Callback_WebGLBuffer(this, buffer);
+  bool isBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.isBuffer_Callback_1(this, buffer);
 
   @DomName('WebGLRenderingContext.isContextLost')
   @DocsEditable()
@@ -2745,107 +2745,107 @@
 
   @DomName('WebGLRenderingContext.isEnabled')
   @DocsEditable()
-  bool isEnabled(int cap) => _blink.BlinkWebGLRenderingContext.isEnabled_Callback_ul(this, cap);
+  bool isEnabled(int cap) => _blink.BlinkWebGLRenderingContext.isEnabled_Callback_1(this, cap);
 
   @DomName('WebGLRenderingContext.isFramebuffer')
   @DocsEditable()
-  bool isFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.isFramebuffer_Callback_WebGLFramebuffer(this, framebuffer);
+  bool isFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.isFramebuffer_Callback_1(this, framebuffer);
 
   @DomName('WebGLRenderingContext.isProgram')
   @DocsEditable()
-  bool isProgram(Program program) => _blink.BlinkWebGLRenderingContext.isProgram_Callback_WebGLProgram(this, program);
+  bool isProgram(Program program) => _blink.BlinkWebGLRenderingContext.isProgram_Callback_1(this, program);
 
   @DomName('WebGLRenderingContext.isRenderbuffer')
   @DocsEditable()
-  bool isRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.isRenderbuffer_Callback_WebGLRenderbuffer(this, renderbuffer);
+  bool isRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.isRenderbuffer_Callback_1(this, renderbuffer);
 
   @DomName('WebGLRenderingContext.isShader')
   @DocsEditable()
-  bool isShader(Shader shader) => _blink.BlinkWebGLRenderingContext.isShader_Callback_WebGLShader(this, shader);
+  bool isShader(Shader shader) => _blink.BlinkWebGLRenderingContext.isShader_Callback_1(this, shader);
 
   @DomName('WebGLRenderingContext.isTexture')
   @DocsEditable()
-  bool isTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.isTexture_Callback_WebGLTexture(this, texture);
+  bool isTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.isTexture_Callback_1(this, texture);
 
   @DomName('WebGLRenderingContext.lineWidth')
   @DocsEditable()
-  void lineWidth(num width) => _blink.BlinkWebGLRenderingContext.lineWidth_Callback_float(this, width);
+  void lineWidth(num width) => _blink.BlinkWebGLRenderingContext.lineWidth_Callback_1(this, width);
 
   @DomName('WebGLRenderingContext.linkProgram')
   @DocsEditable()
-  void linkProgram(Program program) => _blink.BlinkWebGLRenderingContext.linkProgram_Callback_WebGLProgram(this, program);
+  void linkProgram(Program program) => _blink.BlinkWebGLRenderingContext.linkProgram_Callback_1(this, program);
 
   @DomName('WebGLRenderingContext.pixelStorei')
   @DocsEditable()
-  void pixelStorei(int pname, int param) => _blink.BlinkWebGLRenderingContext.pixelStorei_Callback_ul_long(this, pname, param);
+  void pixelStorei(int pname, int param) => _blink.BlinkWebGLRenderingContext.pixelStorei_Callback_2(this, pname, param);
 
   @DomName('WebGLRenderingContext.polygonOffset')
   @DocsEditable()
-  void polygonOffset(num factor, num units) => _blink.BlinkWebGLRenderingContext.polygonOffset_Callback_float_float(this, factor, units);
+  void polygonOffset(num factor, num units) => _blink.BlinkWebGLRenderingContext.polygonOffset_Callback_2(this, factor, units);
 
   @DomName('WebGLRenderingContext.readPixels')
   @DocsEditable()
-  void readPixels(int x, int y, int width, int height, int format, int type, TypedData pixels) => _blink.BlinkWebGLRenderingContext.readPixels_Callback_long_long_long_long_ul_ul_ArrayBufferView(this, x, y, width, height, format, type, pixels);
+  void readPixels(int x, int y, int width, int height, int format, int type, TypedData pixels) => _blink.BlinkWebGLRenderingContext.readPixels_Callback_7(this, x, y, width, height, format, type, pixels);
 
   @DomName('WebGLRenderingContext.renderbufferStorage')
   @DocsEditable()
-  void renderbufferStorage(int target, int internalformat, int width, int height) => _blink.BlinkWebGLRenderingContext.renderbufferStorage_Callback_ul_ul_long_long(this, target, internalformat, width, height);
+  void renderbufferStorage(int target, int internalformat, int width, int height) => _blink.BlinkWebGLRenderingContext.renderbufferStorage_Callback_4(this, target, internalformat, width, height);
 
   @DomName('WebGLRenderingContext.sampleCoverage')
   @DocsEditable()
-  void sampleCoverage(num value, bool invert) => _blink.BlinkWebGLRenderingContext.sampleCoverage_Callback_float_boolean(this, value, invert);
+  void sampleCoverage(num value, bool invert) => _blink.BlinkWebGLRenderingContext.sampleCoverage_Callback_2(this, value, invert);
 
   @DomName('WebGLRenderingContext.scissor')
   @DocsEditable()
-  void scissor(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.scissor_Callback_long_long_long_long(this, x, y, width, height);
+  void scissor(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.scissor_Callback_4(this, x, y, width, height);
 
   @DomName('WebGLRenderingContext.shaderSource')
   @DocsEditable()
-  void shaderSource(Shader shader, String string) => _blink.BlinkWebGLRenderingContext.shaderSource_Callback_WebGLShader_DOMString(this, shader, string);
+  void shaderSource(Shader shader, String string) => _blink.BlinkWebGLRenderingContext.shaderSource_Callback_2(this, shader, string);
 
   @DomName('WebGLRenderingContext.stencilFunc')
   @DocsEditable()
-  void stencilFunc(int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.stencilFunc_Callback_ul_long_ul(this, func, ref, mask);
+  void stencilFunc(int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.stencilFunc_Callback_3(this, func, ref, mask);
 
   @DomName('WebGLRenderingContext.stencilFuncSeparate')
   @DocsEditable()
-  void stencilFuncSeparate(int face, int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.stencilFuncSeparate_Callback_ul_ul_long_ul(this, face, func, ref, mask);
+  void stencilFuncSeparate(int face, int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.stencilFuncSeparate_Callback_4(this, face, func, ref, mask);
 
   @DomName('WebGLRenderingContext.stencilMask')
   @DocsEditable()
-  void stencilMask(int mask) => _blink.BlinkWebGLRenderingContext.stencilMask_Callback_ul(this, mask);
+  void stencilMask(int mask) => _blink.BlinkWebGLRenderingContext.stencilMask_Callback_1(this, mask);
 
   @DomName('WebGLRenderingContext.stencilMaskSeparate')
   @DocsEditable()
-  void stencilMaskSeparate(int face, int mask) => _blink.BlinkWebGLRenderingContext.stencilMaskSeparate_Callback_ul_ul(this, face, mask);
+  void stencilMaskSeparate(int face, int mask) => _blink.BlinkWebGLRenderingContext.stencilMaskSeparate_Callback_2(this, face, mask);
 
   @DomName('WebGLRenderingContext.stencilOp')
   @DocsEditable()
-  void stencilOp(int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.stencilOp_Callback_ul_ul_ul(this, fail, zfail, zpass);
+  void stencilOp(int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.stencilOp_Callback_3(this, fail, zfail, zpass);
 
   @DomName('WebGLRenderingContext.stencilOpSeparate')
   @DocsEditable()
-  void stencilOpSeparate(int face, int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.stencilOpSeparate_Callback_ul_ul_ul_ul(this, face, fail, zfail, zpass);
+  void stencilOpSeparate(int face, int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.stencilOpSeparate_Callback_4(this, face, fail, zfail, zpass);
 
   void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [int format, int type, TypedData pixels]) {
     if ((pixels is TypedData || pixels == null) && (type is int) && (format is int) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_long_long_long_ul_ul_ArrayBufferView(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_9(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_ImageData(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLImageElement(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLCanvasElement(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLVideoElement(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2853,47 +2853,47 @@
 
   @DomName('WebGLRenderingContext.texImage2DCanvas')
   @DocsEditable()
-  void texImage2DCanvas(int target, int level, int internalformat, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLCanvasElement(this, target, level, internalformat, format, type, canvas);
+  void texImage2DCanvas(int target, int level, int internalformat, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format, type, canvas);
 
   @DomName('WebGLRenderingContext.texImage2DImage')
   @DocsEditable()
-  void texImage2DImage(int target, int level, int internalformat, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLImageElement(this, target, level, internalformat, format, type, image);
+  void texImage2DImage(int target, int level, int internalformat, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format, type, image);
 
   @DomName('WebGLRenderingContext.texImage2DImageData')
   @DocsEditable()
-  void texImage2DImageData(int target, int level, int internalformat, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_ImageData(this, target, level, internalformat, format, type, pixels);
+  void texImage2DImageData(int target, int level, int internalformat, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format, type, pixels);
 
   @DomName('WebGLRenderingContext.texImage2DVideo')
   @DocsEditable()
-  void texImage2DVideo(int target, int level, int internalformat, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLVideoElement(this, target, level, internalformat, format, type, video);
+  void texImage2DVideo(int target, int level, int internalformat, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_6(this, target, level, internalformat, format, type, video);
 
   @DomName('WebGLRenderingContext.texParameterf')
   @DocsEditable()
-  void texParameterf(int target, int pname, num param) => _blink.BlinkWebGLRenderingContext.texParameterf_Callback_ul_ul_float(this, target, pname, param);
+  void texParameterf(int target, int pname, num param) => _blink.BlinkWebGLRenderingContext.texParameterf_Callback_3(this, target, pname, param);
 
   @DomName('WebGLRenderingContext.texParameteri')
   @DocsEditable()
-  void texParameteri(int target, int pname, int param) => _blink.BlinkWebGLRenderingContext.texParameteri_Callback_ul_ul_long(this, target, pname, param);
+  void texParameteri(int target, int pname, int param) => _blink.BlinkWebGLRenderingContext.texParameteri_Callback_3(this, target, pname, param);
 
   void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [int type, TypedData pixels]) {
     if ((pixels is TypedData || pixels == null) && (type is int) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_long_long_ul_ul_ArrayBufferView(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_9(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_ImageData(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLImageElement(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLCanvasElement(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLVideoElement(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2901,143 +2901,143 @@
 
   @DomName('WebGLRenderingContext.texSubImage2DCanvas')
   @DocsEditable()
-  void texSubImage2DCanvas(int target, int level, int xoffset, int yoffset, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLCanvasElement(this, target, level, xoffset, yoffset, format, type, canvas);
+  void texSubImage2DCanvas(int target, int level, int xoffset, int yoffset, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format, type, canvas);
 
   @DomName('WebGLRenderingContext.texSubImage2DImage')
   @DocsEditable()
-  void texSubImage2DImage(int target, int level, int xoffset, int yoffset, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLImageElement(this, target, level, xoffset, yoffset, format, type, image);
+  void texSubImage2DImage(int target, int level, int xoffset, int yoffset, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format, type, image);
 
   @DomName('WebGLRenderingContext.texSubImage2DImageData')
   @DocsEditable()
-  void texSubImage2DImageData(int target, int level, int xoffset, int yoffset, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_ImageData(this, target, level, xoffset, yoffset, format, type, pixels);
+  void texSubImage2DImageData(int target, int level, int xoffset, int yoffset, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format, type, pixels);
 
   @DomName('WebGLRenderingContext.texSubImage2DVideo')
   @DocsEditable()
-  void texSubImage2DVideo(int target, int level, int xoffset, int yoffset, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLVideoElement(this, target, level, xoffset, yoffset, format, type, video);
+  void texSubImage2DVideo(int target, int level, int xoffset, int yoffset, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_7(this, target, level, xoffset, yoffset, format, type, video);
 
   @DomName('WebGLRenderingContext.uniform1f')
   @DocsEditable()
-  void uniform1f(UniformLocation location, num x) => _blink.BlinkWebGLRenderingContext.uniform1f_Callback_WebGLUniformLocation_float(this, location, x);
+  void uniform1f(UniformLocation location, num x) => _blink.BlinkWebGLRenderingContext.uniform1f_Callback_2(this, location, x);
 
   @DomName('WebGLRenderingContext.uniform1fv')
   @DocsEditable()
-  void uniform1fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform1fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
+  void uniform1fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform1fv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform1i')
   @DocsEditable()
-  void uniform1i(UniformLocation location, int x) => _blink.BlinkWebGLRenderingContext.uniform1i_Callback_WebGLUniformLocation_long(this, location, x);
+  void uniform1i(UniformLocation location, int x) => _blink.BlinkWebGLRenderingContext.uniform1i_Callback_2(this, location, x);
 
   @DomName('WebGLRenderingContext.uniform1iv')
   @DocsEditable()
-  void uniform1iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform1iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
+  void uniform1iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform1iv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform2f')
   @DocsEditable()
-  void uniform2f(UniformLocation location, num x, num y) => _blink.BlinkWebGLRenderingContext.uniform2f_Callback_WebGLUniformLocation_float_float(this, location, x, y);
+  void uniform2f(UniformLocation location, num x, num y) => _blink.BlinkWebGLRenderingContext.uniform2f_Callback_3(this, location, x, y);
 
   @DomName('WebGLRenderingContext.uniform2fv')
   @DocsEditable()
-  void uniform2fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform2fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
+  void uniform2fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform2fv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform2i')
   @DocsEditable()
-  void uniform2i(UniformLocation location, int x, int y) => _blink.BlinkWebGLRenderingContext.uniform2i_Callback_WebGLUniformLocation_long_long(this, location, x, y);
+  void uniform2i(UniformLocation location, int x, int y) => _blink.BlinkWebGLRenderingContext.uniform2i_Callback_3(this, location, x, y);
 
   @DomName('WebGLRenderingContext.uniform2iv')
   @DocsEditable()
-  void uniform2iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform2iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
+  void uniform2iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform2iv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform3f')
   @DocsEditable()
-  void uniform3f(UniformLocation location, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.uniform3f_Callback_WebGLUniformLocation_float_float_float(this, location, x, y, z);
+  void uniform3f(UniformLocation location, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.uniform3f_Callback_4(this, location, x, y, z);
 
   @DomName('WebGLRenderingContext.uniform3fv')
   @DocsEditable()
-  void uniform3fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform3fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
+  void uniform3fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform3fv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform3i')
   @DocsEditable()
-  void uniform3i(UniformLocation location, int x, int y, int z) => _blink.BlinkWebGLRenderingContext.uniform3i_Callback_WebGLUniformLocation_long_long_long(this, location, x, y, z);
+  void uniform3i(UniformLocation location, int x, int y, int z) => _blink.BlinkWebGLRenderingContext.uniform3i_Callback_4(this, location, x, y, z);
 
   @DomName('WebGLRenderingContext.uniform3iv')
   @DocsEditable()
-  void uniform3iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform3iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
+  void uniform3iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform3iv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform4f')
   @DocsEditable()
-  void uniform4f(UniformLocation location, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.uniform4f_Callback_WebGLUniformLocation_float_float_float_float(this, location, x, y, z, w);
+  void uniform4f(UniformLocation location, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.uniform4f_Callback_5(this, location, x, y, z, w);
 
   @DomName('WebGLRenderingContext.uniform4fv')
   @DocsEditable()
-  void uniform4fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform4fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
+  void uniform4fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform4fv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform4i')
   @DocsEditable()
-  void uniform4i(UniformLocation location, int x, int y, int z, int w) => _blink.BlinkWebGLRenderingContext.uniform4i_Callback_WebGLUniformLocation_long_long_long_long(this, location, x, y, z, w);
+  void uniform4i(UniformLocation location, int x, int y, int z, int w) => _blink.BlinkWebGLRenderingContext.uniform4i_Callback_5(this, location, x, y, z, w);
 
   @DomName('WebGLRenderingContext.uniform4iv')
   @DocsEditable()
-  void uniform4iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform4iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
+  void uniform4iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform4iv_Callback_2(this, location, v);
 
   @DomName('WebGLRenderingContext.uniformMatrix2fv')
   @DocsEditable()
-  void uniformMatrix2fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix2fv_Callback_WebGLUniformLocation_boolean_Float32Array(this, location, transpose, array);
+  void uniformMatrix2fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix2fv_Callback_3(this, location, transpose, array);
 
   @DomName('WebGLRenderingContext.uniformMatrix3fv')
   @DocsEditable()
-  void uniformMatrix3fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix3fv_Callback_WebGLUniformLocation_boolean_Float32Array(this, location, transpose, array);
+  void uniformMatrix3fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix3fv_Callback_3(this, location, transpose, array);
 
   @DomName('WebGLRenderingContext.uniformMatrix4fv')
   @DocsEditable()
-  void uniformMatrix4fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix4fv_Callback_WebGLUniformLocation_boolean_Float32Array(this, location, transpose, array);
+  void uniformMatrix4fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix4fv_Callback_3(this, location, transpose, array);
 
   @DomName('WebGLRenderingContext.useProgram')
   @DocsEditable()
-  void useProgram(Program program) => _blink.BlinkWebGLRenderingContext.useProgram_Callback_WebGLProgram(this, program);
+  void useProgram(Program program) => _blink.BlinkWebGLRenderingContext.useProgram_Callback_1(this, program);
 
   @DomName('WebGLRenderingContext.validateProgram')
   @DocsEditable()
-  void validateProgram(Program program) => _blink.BlinkWebGLRenderingContext.validateProgram_Callback_WebGLProgram(this, program);
+  void validateProgram(Program program) => _blink.BlinkWebGLRenderingContext.validateProgram_Callback_1(this, program);
 
   @DomName('WebGLRenderingContext.vertexAttrib1f')
   @DocsEditable()
-  void vertexAttrib1f(int indx, num x) => _blink.BlinkWebGLRenderingContext.vertexAttrib1f_Callback_ul_float(this, indx, x);
+  void vertexAttrib1f(int indx, num x) => _blink.BlinkWebGLRenderingContext.vertexAttrib1f_Callback_2(this, indx, x);
 
   @DomName('WebGLRenderingContext.vertexAttrib1fv')
   @DocsEditable()
-  void vertexAttrib1fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib1fv_Callback_ul_Float32Array(this, indx, values);
+  void vertexAttrib1fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib1fv_Callback_2(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttrib2f')
   @DocsEditable()
-  void vertexAttrib2f(int indx, num x, num y) => _blink.BlinkWebGLRenderingContext.vertexAttrib2f_Callback_ul_float_float(this, indx, x, y);
+  void vertexAttrib2f(int indx, num x, num y) => _blink.BlinkWebGLRenderingContext.vertexAttrib2f_Callback_3(this, indx, x, y);
 
   @DomName('WebGLRenderingContext.vertexAttrib2fv')
   @DocsEditable()
-  void vertexAttrib2fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib2fv_Callback_ul_Float32Array(this, indx, values);
+  void vertexAttrib2fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib2fv_Callback_2(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttrib3f')
   @DocsEditable()
-  void vertexAttrib3f(int indx, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.vertexAttrib3f_Callback_ul_float_float_float(this, indx, x, y, z);
+  void vertexAttrib3f(int indx, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.vertexAttrib3f_Callback_4(this, indx, x, y, z);
 
   @DomName('WebGLRenderingContext.vertexAttrib3fv')
   @DocsEditable()
-  void vertexAttrib3fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib3fv_Callback_ul_Float32Array(this, indx, values);
+  void vertexAttrib3fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib3fv_Callback_2(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttrib4f')
   @DocsEditable()
-  void vertexAttrib4f(int indx, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.vertexAttrib4f_Callback_ul_float_float_float_float(this, indx, x, y, z, w);
+  void vertexAttrib4f(int indx, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.vertexAttrib4f_Callback_5(this, indx, x, y, z, w);
 
   @DomName('WebGLRenderingContext.vertexAttrib4fv')
   @DocsEditable()
-  void vertexAttrib4fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib4fv_Callback_ul_Float32Array(this, indx, values);
+  void vertexAttrib4fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib4fv_Callback_2(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttribPointer')
   @DocsEditable()
-  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) => _blink.BlinkWebGLRenderingContext.vertexAttribPointer_Callback_ul_long_ul_boolean_long_ll(this, indx, size, type, normalized, stride, offset);
+  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) => _blink.BlinkWebGLRenderingContext.vertexAttribPointer_Callback_6(this, indx, size, type, normalized, stride, offset);
 
   @DomName('WebGLRenderingContext.viewport')
   @DocsEditable()
-  void viewport(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.viewport_Callback_long_long_long_long(this, x, y, width, height);
+  void viewport(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.viewport_Callback_4(this, x, y, width, height);
 
 
   /**
diff --git a/sdk/lib/web_sql/dartium/web_sql_dartium.dart b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
index 4b57aed..2494889 100644
--- a/sdk/lib/web_sql/dartium/web_sql_dartium.dart
+++ b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
@@ -103,29 +103,48 @@
   @DocsEditable()
   String get version => _blink.BlinkDatabase.version_Getter(this);
 
-  /**
-   * Atomically update the database version to [newVersion], asynchronously
-   * running [callback] on the [SqlTransaction] representing this
-   * [changeVersion] transaction.
-   *
-   * If [callback] runs successfully, then [successCallback] is called.
-   * Otherwise, [errorCallback] is called.
-   *
-   * [oldVersion] should match the database's current [version] exactly.
-   *
-   * * [Database.changeVersion](http://www.w3.org/TR/webdatabase/#dom-database-changeversion) from W3C.
-   */
-  @DomName('Database.changeVersion')
-  @DocsEditable()
-  void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.changeVersion_Callback_DOMString_DOMString_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(this, oldVersion, newVersion, callback, errorCallback, successCallback);
+  void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
+    if (successCallback != null) {
+      _blink.BlinkDatabase.changeVersion_Callback_5(this, oldVersion, newVersion, callback, errorCallback, successCallback);
+      return;
+    }
+    if (errorCallback != null) {
+      _blink.BlinkDatabase.changeVersion_Callback_4(this, oldVersion, newVersion, callback, errorCallback);
+      return;
+    }
+    if (callback != null) {
+      _blink.BlinkDatabase.changeVersion_Callback_3(this, oldVersion, newVersion, callback);
+      return;
+    }
+    _blink.BlinkDatabase.changeVersion_Callback_2(this, oldVersion, newVersion);
+    return;
+  }
 
-  @DomName('Database.readTransaction')
-  @DocsEditable()
-  void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.readTransaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(this, callback, errorCallback, successCallback);
+  void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
+    if (successCallback != null) {
+      _blink.BlinkDatabase.readTransaction_Callback_3(this, callback, errorCallback, successCallback);
+      return;
+    }
+    if (errorCallback != null) {
+      _blink.BlinkDatabase.readTransaction_Callback_2(this, callback, errorCallback);
+      return;
+    }
+    _blink.BlinkDatabase.readTransaction_Callback_1(this, callback);
+    return;
+  }
 
-  @DomName('Database.transaction')
-  @DocsEditable()
-  void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.transaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(this, callback, errorCallback, successCallback);
+  void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
+    if (successCallback != null) {
+      _blink.BlinkDatabase.transaction_Callback_3(this, callback, errorCallback, successCallback);
+      return;
+    }
+    if (errorCallback != null) {
+      _blink.BlinkDatabase.transaction_Callback_2(this, callback, errorCallback);
+      return;
+    }
+    _blink.BlinkDatabase.transaction_Callback_1(this, callback);
+    return;
+  }
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -234,10 +253,10 @@
   Map operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSQLResultSetRowList.item_Callback_ul(this, index);
+    return _blink.BlinkSQLResultSetRowList.item_Callback_1(this, index);
   }
 
-  Map _nativeIndexedGetter(int index) => _blink.BlinkSQLResultSetRowList.item_Callback_ul(this, index);
+  Map _nativeIndexedGetter(int index) => _blink.BlinkSQLResultSetRowList.item_Callback_1(this, index);
 
   void operator[]=(int index, Map value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -279,7 +298,7 @@
 
   @DomName('SQLResultSetRowList.item')
   @DocsEditable()
-  Map item(int index) => _blink.BlinkSQLResultSetRowList.item_Callback_ul(this, index);
+  Map item(int index) => _blink.BlinkSQLResultSetRowList.item_Callback_1(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -302,7 +321,7 @@
 
   @DomName('SQLTransaction.executeSql')
   @DocsEditable()
-  void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) => _blink.BlinkSQLTransaction.executeSql_Callback_DOMString_A_object_A_SQLStatementCallback_SQLStatementErrorCallback(this, sqlStatement, arguments, callback, errorCallback);
+  void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) => _blink.BlinkSQLTransaction.executeSql_Callback_4(this, sqlStatement, arguments, callback, errorCallback);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index 765d1ba..f0b2ae2 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -2,9 +2,28 @@
 # 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.
 
+LayoutTests/fast/borders/border-radius-child_t01: Skip # co19 issue 732.
+LayoutTests/fast/css-generated-content/hit-test-generated-content_t01: Skip # co19 issue 732.
+LayoutTests/fast/css/collapsed-whitespace-reattach-in-style-recalc_t01: Skip # co19 issue 732.
+LayoutTests/fast/events/document-elementFromPoint_t01: Skip # co19 issue 732.
+LayoutTests/fast/sub-pixel/float-containing-block-with-margin_t01: Skip # co19 issue 732.
+LayoutTests/fast/sub-pixel/table-rows-have-stable-height_t01: Skip # co19 issue 732.
+LayoutTests/fast/table/col-width-span-expand_t01: Skip # co19 issue 732.
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: Skip # co19 issue 732.
+LayoutTests/fast/text/international/rtl-text-wrapping_t01: Skip # co19 issue 732.
+LayoutTests/fast/writing-mode/positionForPoint_t01: Skip # co19 issue 732.
+LayoutTests/fast/css/computed-offset-with-zoom_t01: Skip # co19 issue 732.
+LayoutTests/fast/sub-pixel/inline-block-with-padding_t01: Skip # co19 issue 732.
+LayoutTests/fast/sub-pixel/size-of-span-with-different-positions_t01: Skip # co19 issue 732.
+LayoutTests/fast/text/international/complex-text-rectangle_t01: Skip # co19 issue 732.
+LayoutTests/fast/text/line-breaks-after-hyphen-before-number_t01: Skip # co19 issue 732.
+
 [ $compiler == none && $runtime == drt ]
 *: Skip # running co19 tests on content_shell would make our dartium cycle-times very long
 
+[ $compiler == none && $runtime == dartium && $system == macos ]
+LayoutTests/fast/writing-mode/broken-ideographic-font_t01: Skip # Timing out on the bots
+
 [ $compiler == none && $mode == debug && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 LayoutTests/fast/canvas/canvas-lineDash-input-sequence_t01: Skip # Issue 20867
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Skip # Issue 20540
diff --git a/tests/compiler/dart2js/preserve_uris_test.dart b/tests/compiler/dart2js/preserve_uris_test.dart
new file mode 100644
index 0000000..e0b8f1f
--- /dev/null
+++ b/tests/compiler/dart2js/preserve_uris_test.dart
@@ -0,0 +1,62 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+import 'package:async_helper/async_helper.dart';
+import 'memory_compiler.dart' show compilerFor, OutputCollector;
+
+const MEMORY_SOURCE_FILES = const <String, String> {
+  'main.dart': """
+library main;
+
+@MirrorsUsed(targets: const ['main', 'lib'])
+import 'dart:mirrors';
+import 'lib.dart';
+
+
+class Subclass extends Super {
+  int _private;
+
+  int magic() => _private++;
+}
+
+main() {
+  var objects = [new Super(), new Subclass()];
+  print(currentMirrorSystem().findLibrary(#main).uri);
+}
+""",
+  'lib.dart': """
+library lib;
+
+class Super {
+  int _private;
+
+  int magic() => _private++;
+}
+"""
+};
+
+runTest(bool preserveUris) {
+  OutputCollector collector = new OutputCollector();
+  var options = ["--minify"];
+  if (preserveUris) options.add("--preserve-uris");
+  var compiler = compilerFor(MEMORY_SOURCE_FILES,
+                             outputProvider: collector,
+                             options: options);
+  return compiler.runCompiler(Uri.parse('memory:main.dart')).then((_) {
+    String jsOutput = collector.getOutput('', 'js');
+    Expect.equals(preserveUris, jsOutput.contains("main.dart"));
+    Expect.equals(preserveUris, jsOutput.contains("lib.dart"));
+  });
+}
+
+void main() {
+  asyncStart();
+  new Future.value()
+    .then((_) => runTest(true))
+    .then((_) => runTest(false))
+    .whenComplete(asyncEnd);
+}
diff --git a/tests/compiler/dart2js/uri_retention_test.dart b/tests/compiler/dart2js/uri_retention_test.dart
index fcdcdcc..d79aa32 100644
--- a/tests/compiler/dart2js/uri_retention_test.dart
+++ b/tests/compiler/dart2js/uri_retention_test.dart
@@ -12,21 +12,30 @@
 import 'memory_compiler.dart' show
     compilerFor;
 
-Future<String> compileSources(sources, {bool minify}) {
-  var compiler = compilerFor(sources, options: minify ? ['--minify'] : []);
+Future<String> compileSources(sources, {bool minify, bool preserveUri}) {
+  var options = [];
+  if (minify) options.add("--minify");
+  if (preserveUri) options.add("--preserve-uris");
+  var compiler = compilerFor(sources, options: options);
   return compiler.runCompiler(Uri.parse('memory:main.dart')).then((_) {
     return compiler.assembledCode;
   });
 }
 
 Future test(sources, { bool libName, bool fileName }) {
-  return compileSources(sources, minify: false).then((output) {
+  return
+      compileSources(sources, minify: false, preserveUri: false).then((output) {
     // Unminified the sources should always contain the library name and the
     // file name.
     Expect.isTrue(output.contains("main_lib"));
     Expect.isTrue(output.contains("main.dart"));
   }).then((_) {
-    compileSources(sources, minify: true).then((output) {
+    compileSources(sources, minify: true, preserveUri: false).then((output) {
+      Expect.equals(libName, output.contains("main_lib"));
+      Expect.isFalse(output.contains("main.dart"));
+    });
+  }).then((_) {
+    compileSources(sources, minify: true, preserveUri: true).then((output) {
       Expect.equals(libName, output.contains("main_lib"));
       Expect.equals(fileName, output.contains("main.dart"));
     });
diff --git a/tests/html/fontface_loaded_test.dart b/tests/html/fontface_loaded_test.dart
new file mode 100644
index 0000000..d192688
--- /dev/null
+++ b/tests/html/fontface_loaded_test.dart
@@ -0,0 +1,46 @@
+library fontface_loaded_test;
+
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:html';
+
+class NullTreeSanitizer implements NodeTreeSanitizer {
+    void sanitizeTree(Node node) {}
+}
+
+main() {
+  useHtmlConfiguration();
+
+  var style = new Element.html('''
+      <style>
+      @font-face {
+        font-family: 'Ahem';
+        src: url(../../resources/Ahem.ttf);
+        font-style: italic;
+        font-weight: 300;
+        unicode-range: U+0-3FF;
+        font-variant: small-caps;
+        -webkit-font-feature-settings: "dlig" 1;
+        /* font-stretch property is not supported */
+      }
+      </style>
+      ''', treeSanitizer: new NullTreeSanitizer());
+  document.head.append(style);
+
+
+  test('document fonts - temporary', () {
+    var atLeastOneFont = false;
+    document.fonts.forEach((FontFace fontFace, _, __) {
+      atLeastOneFont = true;
+      Future f1 = fontFace.loaded;
+      Future f2 = fontFace.loaded;
+      expect(f1, equals(f2)); // Repeated calls should answer the same Future.
+
+      expect(fontFace.load(), throws);
+    });
+    expect(atLeastOneFont, isTrue);
+  });
+}
diff --git a/tests/html/html.status b/tests/html/html.status
index e55c8a3..0f65c7f 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -9,10 +9,12 @@
 [ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Issue 18931 (Disabled for Chrome 35 roll)
 custom/document_register_basic_test: RuntimeError # Issue 20813
-indexeddb_1_test/functional: Skip # Issue 19512 (timing out)
+fontface_loaded_test: Skip # Issue 21359
 form_data_test/functional: Skip # Issue 19726
+indexeddb_1_test/functional: Skip # Issue 19512 (timing out)
 indexeddb_4_test: Skip # Issue 19726
 mouse_event_test: Fail # Issue 20437
+storage_quota_test/missingenumcheck: Fail
 
 [ $compiler == none && $mode == debug && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 datalistelement_test: Skip # Issue 20540
@@ -23,6 +25,8 @@
 
 [ $compiler == dart2js && $browser ]
 custom/created_callback_test: Fail # Support for created constructor.
+fontface_loaded_test: Fail # Support for promises.
+storage_quota_test: Fail # Support for promises.
 
 [ $compiler == dart2js && ($runtime == safari || $runtime == safarimobilesim || $runtime == ff  || $ie) ]
 custom/entered_left_view_test/viewless_document: Fail # Polyfill does not handle this
diff --git a/tests/html/storage_quota_test.dart b/tests/html/storage_quota_test.dart
new file mode 100644
index 0000000..54e5346
--- /dev/null
+++ b/tests/html/storage_quota_test.dart
@@ -0,0 +1,38 @@
+library storage_quota_test;
+
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:html';
+
+main() {
+  useHtmlConfiguration();
+
+  expectSaneStorageInfo(StorageInfo storageInfo) {
+     expect(storageInfo.usage, isNotNull);
+     expect(storageInfo.quota, isNotNull);
+     expect(storageInfo.usage >= 0, isTrue);
+     expect(storageInfo.quota >= storageInfo.usage, isNotNull);
+  };
+
+  test('storage quota - temporary', () {
+    Future f = window.navigator.storageQuota.queryInfo('temporary');
+    expect(f.then(expectSaneStorageInfo), completes);
+  });
+
+  test('storage quota - persistent', () {
+    Future f = window.navigator.storageQuota.queryInfo('persistent');
+    expect(f.then(expectSaneStorageInfo), completes);
+  });
+
+  test('storage quota - unknown', () {
+    // Throwing synchronously is bogus upstream behavior; should result in a
+    // smashed promise.
+    expect(() => window.navigator.storageQuota.queryInfo("foo"), throws);  /// missingenumcheck: ok
+    var wrongType = 3;
+    expect(() => window.navigator.storageQuota.queryInfo(wrongType), throws);
+    expect(() => window.navigator.storageQuota.queryInfo(null), throws);
+  });
+}
diff --git a/tests/language/compile_time_constant_checked4_test.dart b/tests/language/compile_time_constant_checked4_test.dart
new file mode 100644
index 0000000..f271e77
--- /dev/null
+++ b/tests/language/compile_time_constant_checked4_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+class A {
+  final _x;
+  const A.a1(
+    String /// 01: checked mode compile-time error, static type warning
+    x) : this.a2(x);
+  const A.a2(
+    String /// 02: checked mode compile-time error
+    x) : this.a3(x);
+  const A.a3(
+    String /// 03: checked mode compile-time error
+    x) : _x = x;
+}
+
+use(x) => x;
+
+main() {
+  use(const A.a1(0));
+}
diff --git a/tests/language/isssue_21159.dart b/tests/language/isssue_21159.dart
new file mode 100644
index 0000000..2d2b6c8
--- /dev/null
+++ b/tests/language/isssue_21159.dart
@@ -0,0 +1,11 @@
+// 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.
+
+class C {
+ get call => this;
+}
+
+main() {
+ new C()();
+}
diff --git a/tests/language/language.status b/tests/language/language.status
index 71b2a24..1b4afdf 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -63,7 +63,6 @@
 
 [ $compiler == none && $runtime == vm ]
 class_keyword_test/02: MissingCompileTimeError # Issue 13627
-large_class_declaration_test: Skip # Issue 21343
 unicode_bom_test: Fail # Issue 16067
 
 [ $compiler == none && $checked ]
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index 08b421e..2c5db5a 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -461,6 +461,7 @@
 # Issue 16391. These tests are supposed to produce a compile time
 # error in checked mode, but they don't:
 [ $compiler == dartanalyzer && $checked ]
+assign_static_type_test/02: MissingCompileTimeError # Issue 16391
 compile_time_constant_checked2_test/02: MissingCompileTimeError # Issue 16391
 compile_time_constant_checked2_test/03: MissingCompileTimeError # Issue 16391
 compile_time_constant_checked2_test/04: MissingCompileTimeError # Issue 16391
@@ -469,6 +470,9 @@
 compile_time_constant_checked3_test/03: MissingCompileTimeError # Issue 16391
 compile_time_constant_checked3_test/04: MissingCompileTimeError # Issue 16391
 compile_time_constant_checked3_test/06: MissingCompileTimeError # Issue 16391
+compile_time_constant_checked4_test/01: MissingCompileTimeError # Issue 16391
+compile_time_constant_checked4_test/02: MissingCompileTimeError # Issue 16391
+compile_time_constant_checked4_test/03: MissingCompileTimeError # Issue 16391
 compile_time_constant_checked_test/02: MissingCompileTimeError # Issue 16391
 const_constructor2_test/13: MissingCompileTimeError # Issue 16391
 const_constructor2_test/14: MissingCompileTimeError # Issue 16391
@@ -482,4 +486,5 @@
 const_constructor3_test/04: MissingCompileTimeError # Issue 16391
 const_init2_test/02: MissingCompileTimeError # Issue 16391
 malformed2_test/01: MissingCompileTimeError # Issue 16391
-type_check_const_function_typedef2_test/00: MissingCompileTimeError # Issue 16391
\ No newline at end of file
+type_check_const_function_typedef2_test/00: MissingCompileTimeError # Issue 16391
+type_parameter_test/05: MissingCompileTimeError # Issue 16391
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index f8dbd8e..12b7bf0 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -210,6 +210,7 @@
 [ $compiler == dart2js ]
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
 typed_data/int32x4_bigint_test: RuntimeError # Issue 1533
+typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
 
 [ $runtime == opera ]
 async/multiple_timer_test: Pass, Fail # Probably issue 14734
diff --git a/tests/lib/mirrors/libraries_test.dart b/tests/lib/mirrors/libraries_test.dart
index 1fd5d33..f754c19 100644
--- a/tests/lib/mirrors/libraries_test.dart
+++ b/tests/lib/mirrors/libraries_test.dart
@@ -15,8 +15,17 @@
   Map<Uri, LibraryMirror> libraries = mirrors.libraries;
   Expect.isNotNull(libraries, 'libraries is null');
 
+  Expect.isTrue(libraries.isNotEmpty);
   LibraryMirror mirrorsLibrary = libraries[Uri.parse('dart:mirrors')];
-  Expect.isNotNull(mirrorsLibrary, 'mirrorsLibrary is null');
+  if (mirrorsLibrary == null) {
+    // In minified mode we don't preserve the URIs.
+    mirrorsLibrary = libraries.values
+        .firstWhere((LibraryMirror lm) => lm.simpleName == #dart.mirrors);
+    Uri uri = mirrorsLibrary.uri;
+    Expect.equals("https", uri.scheme);
+    Expect.equals("dartlang.org", uri.host);
+    Expect.equals("/dart2js-stripped-uri", uri.path);
+  }
 
   ClassMirror cls = mirrorsLibrary.declarations[#LibraryMirror];
   Expect.isNotNull(cls, 'cls is null');
diff --git a/tests/lib/mirrors/library_uri_package_test.dart b/tests/lib/mirrors/library_uri_package_test.dart
index 6c8effc..bc3021e 100644
--- a/tests/lib/mirrors/library_uri_package_test.dart
+++ b/tests/lib/mirrors/library_uri_package_test.dart
@@ -14,7 +14,12 @@
   var valueMirror = reflect(value);
   ClassMirror valueClass = valueMirror.type;
   LibraryMirror valueLibrary = valueClass.owner;
-  expect(valueLibrary.uri, equals(expectedUri));
+  Uri uri = valueLibrary.uri;
+  if (uri.scheme != "https" ||
+      uri.host != "dartlang.org" ||
+      uri.path != "/dart2js-stripped-uri") {
+    expect(uri, equals(expectedUri));
+  }
 }
 
 main() {
diff --git a/tests/lib/mirrors/mirrors_test.dart b/tests/lib/mirrors/mirrors_test.dart
index a083622..a821c99 100644
--- a/tests/lib/mirrors/mirrors_test.dart
+++ b/tests/lib/mirrors/mirrors_test.dart
@@ -206,7 +206,12 @@
   var valueMirror = reflect(value);
   ClassMirror valueClass = valueMirror.type;
   LibraryMirror valueLibrary = valueClass.owner;
-  expect(check(valueLibrary.uri), isTrue);
+  Uri uri = valueLibrary.uri;
+  if (uri.scheme != "https" ||
+      uri.host != "dartlang.org" ||
+      uri.path != "/dart2js-stripped-uri") {
+    expect(check(uri), isTrue);
+  }
 }
 
 main() {
diff --git a/tests/lib/mirrors/null_test.dart b/tests/lib/mirrors/null_test.dart
index 72f5e23..2b6407b 100644
--- a/tests/lib/mirrors/null_test.dart
+++ b/tests/lib/mirrors/null_test.dart
@@ -31,6 +31,16 @@
   Expect.equals(#Object, NullMirror.superclass.simpleName);
   Expect.equals(null, NullMirror.superclass.superclass);
   Expect.listEquals([], NullMirror.superinterfaces);
-  Expect.equals(currentMirrorSystem().libraries[Uri.parse('dart:core')],
-                NullMirror.owner);
+  Map<Uri, LibraryMirror> libraries = currentMirrorSystem().libraries;
+  LibraryMirror coreLibrary = libraries[Uri.parse('dart:core')];
+  if (coreLibrary == null) {
+    // In minified mode we don't preserve the URIs.
+    coreLibrary = libraries.values
+        .firstWhere((LibraryMirror lm) => lm.simpleName == #dart.core);
+    Uri uri = coreLibrary.uri;
+    Expect.equals("https", uri.scheme);
+    Expect.equals("dartlang.org", uri.host);
+    Expect.equals("/dart2js-stripped-uri", uri.path);
+  }
+  Expect.equals(coreLibrary, NullMirror.owner);
 }
diff --git a/tests/lib/typed_data/int64_list_load_store_test.dart b/tests/lib/typed_data/int64_list_load_store_test.dart
new file mode 100644
index 0000000..6dd09c6
--- /dev/null
+++ b/tests/lib/typed_data/int64_list_load_store_test.dart
@@ -0,0 +1,38 @@
+// 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.
+// VMOptions=--optimization-counter-threshold=10
+
+// Test that the compiler's load elimination phase sees interfering writes to
+// the array's buffer.
+
+import "dart:typed_data";
+import 'package:expect/expect.dart';
+
+void testStoreLoad(l, z) {
+  l[0] = 9223372036854775807;
+  l[1] = 9223372036854775806;
+  l[2] = l[0];
+  l[3] = z;
+  Expect.equals(l[0], 9223372036854775807);
+  Expect.equals(l[1], 9223372036854775806);
+  Expect.isTrue(l[1] < l[0]);
+  Expect.equals(l[2], l[0]);
+  Expect.equals(l[3], z);
+}
+
+main() {
+  var l = new Int64List(4);
+  var zGood = 9223372036854775807;
+  var zBad = false;
+  for (var i = 0; i < 40; i++) {
+    testStoreLoad(l, zGood);
+  }
+  // Deopt.
+  try {
+    testStoreLoad(l, zBad);
+  } catch (_) { }
+  for (var i = 0; i < 40; i++) {
+    testStoreLoad(l, zGood);
+  }
+}
diff --git a/tests/standalone/io/addlatexhash_test.dart b/tests/standalone/io/addlatexhash_test.dart
new file mode 100644
index 0000000..98f1ba5
--- /dev/null
+++ b/tests/standalone/io/addlatexhash_test.dart
@@ -0,0 +1,122 @@
+// 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.
+
+// testing ../../../tools/addlatexhash.dart
+
+import 'dart:io';
+import 'package:path/path.dart' as path;
+import '../../../tools/addlatexhash.dart';
+
+final scriptDir = path.dirname(path.fromUri(Platform.script));
+final dartRootDir = path.dirname(path.dirname(path.dirname(scriptDir)));
+final dartRootPath = dartRootDir.toString();
+
+// Check that the given ProcessResult indicates success; if so
+// return the standard output, otherwise report the failure
+checkAction(result, errorMessage) {
+  if (result.exitCode != 0) {
+    print(result.stdout);
+    print(result.stderr);
+    throw errorMessage;
+  }
+  return result.stdout;
+}
+
+oneTestCutMatch(line, re, expected) {
+  var result = cutMatch(line, new RegExp(re).firstMatch(line));
+  if (result != expected) {
+    throw "cutMatch '$re' from '$line' yields '$result' != '$expected'";
+  }
+}
+
+void testCutMatch() {
+  oneTestCutMatch("test", "", "test");
+  oneTestCutMatch("test", "e", "tst");
+  oneTestCutMatch("test", "te", "st");
+  oneTestCutMatch("test", "st", "te");
+  oneTestCutMatch("test", "test", "");
+}
+
+oneTestSisp(sispFun, nameSuffix, line, expected) {
+  var result = sispFun(line);
+  if (result != expected) {
+    throw "sispIsDart$nameSuffix '$line' yields $result";
+  }
+}
+
+testSisp() {
+  oneTestSisp(sispIsDartBegin, "Begin", "\\begin{dartCode}\n", true);
+  oneTestSisp(sispIsDartBegin, "Begin", " \\begin{dartCode}\n", true);
+  oneTestSisp(sispIsDartBegin, "Begin", "whatever else ..", false);
+  oneTestSisp(sispIsDartEnd, "End", "\\end{dartCode}", true);
+  oneTestSisp(sispIsDartEnd, "End", " \\end{dartCode}\t  \n", true);
+  oneTestSisp(sispIsDartEnd, "End", "whatever else ..", false);
+}
+
+// Check that the LaTeX source transformation done by addlatexhash.dart
+// does not affect the generated output, as seen via dvi2tty and diff.
+// NB: Not part of normal testing (only local): latex and dvi2tty are
+// not installed in the standard test environment.
+testNoChange() {
+  // set up /tmp directory to hold output
+  final tmpDir = Directory.systemTemp.createTempSync("addlatexhash_test");
+  final tmpDirPath = tmpDir.path;
+
+  // file names/paths for original spec
+  const specName = "dartLangSpec";
+  const specFileName = "$specName.tex";
+  final specDirPath = path.join(dartRootDir, "docs", "language");
+  final specPath = path.join(specDirPath, specFileName);
+  final tmpSpecPath = path.join(tmpDirPath, specFileName);
+  const specDviFileName = "$specName.dvi";
+  final specDviPath = path.join(tmpDirPath, specDviFileName);
+
+  // file names/paths for associated sty
+  const styFileName = "dart.sty";
+  final styPath = path.join(specDirPath, styFileName);
+  final tmpStyPath = path.join(tmpDirPath, styFileName);
+
+  // file names paths for output
+  const hashName = "dartLangSpec-hash";
+  const hashFileName = "$hashName.tex";
+  final hashPath = path.join(tmpDirPath, hashFileName);
+  final hashDviPath = path.join(tmpDirPath, "$hashName.dvi");
+
+  // actions to take
+  runLatex(fileName,workingDirectory) =>
+      Process.runSync("latex", [fileName], workingDirectory: workingDirectory);
+
+  runAddHash() =>
+      Process.runSync("dart",
+                      [path.join(dartRootPath, "tools", "addlatexhash.dart"),
+                       tmpSpecPath,
+                       hashPath]);
+
+  runDvi2tty(dviFile) =>
+      Process.runSync("dvi2tty", [dviFile], workingDirectory: tmpDir.path);
+
+  chkDvi2tty(file, subject) =>
+      checkAction(runDvi2tty(file), "dvitty on $subject failed");
+
+  // perform test
+  new File(styPath).copySync(tmpStyPath);
+  new File(specPath).copySync(tmpSpecPath);
+  for (var i = 0; i < 5; i++) {
+    checkAction(runLatex(specName, tmpDirPath), "LaTeX on spec failed");
+  }
+  checkAction(runAddHash(),"addlatexhash.dart failed");
+  for (var i = 0; i < 5; i++) {
+    checkAction(runLatex(hashFileName, tmpDirPath), "LaTeX on output failed");
+  }
+  if (chkDvi2tty(specDviPath, "spec") != chkDvi2tty(hashDviPath, "output")) {
+    throw "dvi2tty spec != dvitty output";
+  }
+}
+
+main([args]) {
+  testCutMatch();
+  testSisp();
+  // latex and dvi2tty are not installed in the standard test environment
+  if (args.length > 0 && args[0] == "local") testNoChange();
+}
diff --git a/tests/standalone/io/code_collection_test.dart b/tests/standalone/io/code_collection_test.dart
index 0cf5bc0..6ab720b 100644
--- a/tests/standalone/io/code_collection_test.dart
+++ b/tests/standalone/io/code_collection_test.dart
@@ -48,7 +48,7 @@
     var pr = Process.runSync(Platform.executable,
         ["--collect-code",
          "--code-collection-interval-in-us=100000",
-         "--heap_growth_rate=10",
+         "--old_gen_growth_rate=10",
          "--log-code-drop",
          "--optimization-counter-threshold=-1",
          "--package-root=${Platform.packageRoot}",
diff --git a/tests/standalone/vmservice/websocket_client_test.dart b/tests/standalone/vmservice/websocket_client_test.dart
index ebf75b3..25b94ae 100644
--- a/tests/standalone/vmservice/websocket_client_test.dart
+++ b/tests/standalone/vmservice/websocket_client_test.dart
@@ -12,6 +12,10 @@
   int _count = 0;
 
   onResponse(var seq, Map response) {
+    if (seq == null) {
+      // Ignore push events.
+      return;
+    }
     if (seq == 'cli') {
       // Verify response is correct for 'cli' sequence id.
       Expect.equals('ClientList', response['type']);
@@ -21,6 +25,8 @@
       // Verify response is correct for 'vm' sequence id.
       Expect.equals('VM', response['type']);
       _count++;
+    } else {
+      Expect.fail('Unexpected response from $seq: $response');
     }
     if (_count == 2) {
       // After receiving both responses, the test is complete.
diff --git a/tests/try/try.status b/tests/try/try.status
index e3b7f96..02c8edc 100644
--- a/tests/try/try.status
+++ b/tests/try/try.status
@@ -31,5 +31,5 @@
 [ $compiler == dart2js ]
 poi/*: Skip # http://dartbug.com/20031
 
-[ $runtime == ff || $checked ]
+[ $runtime == ff || $checked || ($system == windows && $compiler == dart2js)]
 web/incremental_compilation_update_test: Slow, Pass
diff --git a/tests/try/web/incremental_compilation_update_test.dart b/tests/try/web/incremental_compilation_update_test.dart
index 991fbbe..db2e40ad 100644
--- a/tests/try/web/incremental_compilation_update_test.dart
+++ b/tests/try/web/incremental_compilation_update_test.dart
@@ -95,8 +95,72 @@
 """,
             const <String> ['b a', 'c a']),
     ],
-];
 
+    // Test modifying a static method works.
+    const <ProgramResult>[
+        const ProgramResult(
+            """
+class C {
+  static m() {
+    print('v1');
+  }
+}
+main() {
+  C.m();
+}
+""",
+            const <String> ['v1']),
+        const ProgramResult(
+            """
+class C {
+  static m() {
+    print('v2');
+  }
+}
+main() {
+  C.m();
+}
+""",
+            const <String> ['v2']),
+    ],
+
+    // Test modifying an instance method works.
+    const <ProgramResult>[
+        const ProgramResult(
+            """
+class C {
+  m() {
+    print('v1');
+  }
+}
+var instance;
+main() {
+  if (instance == null) {
+    instance = new C();
+  }
+  instance.m();
+}
+""",
+            const <String> ['v1']),
+        const ProgramResult(
+            """
+class C {
+  m() {
+    print('v2');
+  }
+}
+var instance;
+main() {
+  if (instance == null) {
+    instance = new C();
+  }
+  instance.m();
+}
+""",
+            // TODO(ahe): This test is failing, should print "v2".
+            const <String> ['v1']),
+    ],
+];
 
 void main() {
   listener.start();
@@ -139,8 +203,9 @@
           Uri uri = test.scriptUri.resolve('?v${version++}');
           inputProvider.cachedSources[uri] = new Future.value(program.code);
           Future future = test.incrementalCompiler.compileUpdates(
-              {test.scriptUri: uri});
+              {test.scriptUri: uri}, logVerbose: print, logTime: print);
           return future.then((String update) {
+            print({'update': update});
             iframe.contentWindow.postMessage(['apply-update', update], '*');
 
             return listener.expect(
diff --git a/tools/VERSION b/tools/VERSION
index 04d78c6..191cf67 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 8
 PATCH 0
-PRERELEASE 0
+PRERELEASE 1
 PRERELEASE_PATCH 0
diff --git a/tools/addlatexhash.dart b/tools/addlatexhash.dart
new file mode 100644
index 0000000..f79a0b3
--- /dev/null
+++ b/tools/addlatexhash.dart
@@ -0,0 +1,204 @@
+// 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.
+//
+// ----------------------------------------------------------------------
+// This is a very specialized tool which was created in order to support
+// adding hash values used as location markers in the LaTeX source of the
+// language specification.  It is intended to take its input file as the
+// first argument and the output file name as the second argument. From
+// docs/language a typical usage would be as follows:
+//
+//   dart ../../tools/addlatexhash.dart dartLangSpec.tex tmp.tex
+//
+// This will yield a normalized variant tmp.tex of the language
+// specification with hash values filled in.  For more details, please
+// check the language specification source itself.
+//
+// NB: This utility assumes UN*X style line endings, \n, in the LaTeX
+// source file receieved as input; it will not work with other styles.
+//
+// TODO: The current version does not fill in hash values, it only
+// standardizes the LaTeX source by removing comments and normalizing
+// white space.
+
+import 'dart:io';
+import 'dart:convert';
+import '../pkg/crypto/lib/crypto.dart';
+
+// Normalization of the text, i.e., removal or normalization
+// of elements that do not affect the output from latex
+
+final commentRE = new RegExp(r"[^\\]%.*"); // NB: . does not match \n
+final whitespaceAllRE = new RegExp(r"^\s+$");
+final whitespaceRE = new RegExp(r"[ \t]{2,}");
+
+// normalization steps
+
+cutMatch(line, match, {startOffset: 0, endOffset: 0, glue: ""}) {
+  if (match == null) return line;
+  var start = match.start + startOffset;
+  var end = match.end + endOffset;
+  var len = line.length;
+  if (start < 0) start = 0;
+  if (end > len) end = len;
+  return line.substring(0, start) + glue + line.substring(end);
+}
+
+cutRegexp(line, re, {startOffset: 0, endOffset: 0, glue: ""}) {
+  return cutMatch(line, re.firstMatch(line),
+                  startOffset: startOffset,
+                  endOffset: endOffset,
+                  glue: glue);
+}
+
+cutFromMatch(line, match, {offset: 0, glue: ""}) {
+  if (match == null) return line;
+  return line.substring(0, match.start + offset) + glue;
+}
+
+cutFromRegexp(line, re, {offset: 0, glue: ""}) {
+  return cutFromMatch(line, re.firstMatch(line), offset: offset, glue: glue);
+}
+
+isWsOnly(line) => whitespaceAllRE.firstMatch(line) != null;
+isCommentOnly(line) => line.startsWith("%");
+
+justEol(line) {
+  return line.endsWith("\n") ? "\n" : "";
+}
+
+stripComment(line) {
+  // NB: it is tempting to remove everything from the '%' and out,
+  // including the final newline, if any, but this does not work.
+  // The problem is that TeX will do exactly this, but then it will
+  // add back a character that depends on its state (S, M, or N),
+  // and it is tricky to maintain a similar state that matches the
+  // state of TeX faithfully.  Hence, we remove the content of
+  // comments but do not remove the comments themselves, we just
+  // leave the '%' at the end of the line and let TeX manage its
+  // states in a way that does not differ from the file from before
+  // stripComment
+  if (isCommentOnly(line)) return "%\n";
+  return cutRegexp(line, commentRE, startOffset: 2);
+}
+
+// Reduce a wsOnly line to its eol, remove leading ws
+// entirely, and reduce multiple ws chars to one
+normalizeWhitespace(line) {
+  var trimLine = line.trimLeft();
+  if (trimLine.isEmpty) return justEol(line);
+  return trimLine.replaceAll(whitespaceRE, " ");
+}
+
+// Reduce sequences of >1 wsOnly lines to 1, and sequences of >1
+// commentOnly lines to 1; moreover, treat commentOnly lines as
+// wsOnly when occurring in wsOnly line blocks
+multilineNormalize(lines) {
+  var afterBlankLines = false; // does 'line' succeed >0 empty lines?
+  var afterCommentLines = false; // .. succeed >0 commentOnly lines?
+  var newLines = new List();
+  for (var line in lines) {
+    if (afterBlankLines && afterCommentLines) {
+      // can never happen
+      throw "Bug, please report to eernst@";
+    } else if (afterBlankLines && !afterCommentLines) {
+      // at least one line before 'line' is wsOnly
+      if (!isWsOnly(line)) {
+        // blank line block ended
+        afterCommentLines = isCommentOnly(line);
+        // special case: it seems to be safe to remove commentOnly lines
+        // after wsOnly lines, so the TeX state must be predictably right;
+        // next line will then be afterCommentLines and be dropped, so
+        // we drop the entire comment block---which is very useful; we can
+        // also consider this comment line to be an empty line, such that
+        // subsequent empty lines can be considered to be in a block of
+        // empty lines; note that almost all variants of this will break..
+        if (afterCommentLines) {
+          // _current_ 'line' a commentOnly here
+          afterBlankLines = true;
+          afterCommentLines = false;
+          // and do not add 'line'
+        } else {
+          // after blanks, but current 'line' is neither blank nor comment
+          afterBlankLines = false;
+          newLines.add(line);
+        }
+      } else {
+        // blank line block continues, do not add 'line'
+      }
+    } else if (!afterBlankLines && afterCommentLines) {
+      // at least one line before 'line' is commentOnly
+      if (!isCommentOnly(line)) {
+        // comment line block ended
+        afterBlankLines = isWsOnly(line);
+        afterCommentLines = false;
+        newLines.add(line);
+      } else {
+        // comment line block continues, do not add 'line'
+      }
+    } else {
+      assert(!afterBlankLines && !afterCommentLines);
+      // no wsOnly or commentOnly lines preceed 'line'
+      afterBlankLines = isWsOnly(line);
+      afterCommentLines = isCommentOnly(line);
+      if (!afterCommentLines) newLines.add(line);
+      // else skipping commentOnly line after nonWs, nonComment text
+    }
+  }
+  return newLines;
+}
+
+// Selecting the elements in the pipeline
+
+normalize(line) => normalizeWhitespace(stripComment(line));
+sispNormalize(line) => stripComment(line);
+
+// Managing fragments with significant spacing
+
+final dartCodeBeginRE = new RegExp(r"^\s*\\begin\{dartCode\}");
+final dartCodeEndRE = new RegExp (r"^\s*\\end\{dartCode\}");
+
+sispIs(line, targetRE) {
+  return targetRE.firstMatch(line) != null;
+}
+
+sispIsDartBegin(line) => sispIs(line, dartCodeBeginRE);
+sispIsDartEnd(line) => sispIs(line, dartCodeEndRE);
+
+// Transform input file into output file
+
+main ([args]) {
+  if (args.length != 2) {
+    print("Usage: addlatexhash.dart <input-file> <output-file>");
+    throw "Received ${args.length} arguments, expected two";
+  }
+
+  var inputFile = new File(args[0]);
+  var outputFile = new File(args[1]);
+  assert(inputFile.existsSync());
+
+  var lines = inputFile.readAsLinesSync();
+  // single-line normalization
+  var inDartCode = false;
+  var newLines = new List();
+
+  for (var line in lines) {
+    if (sispIsDartBegin(line)) {
+      inDartCode = true;
+    } else if (sispIsDartEnd(line)) {
+      inDartCode = false;
+    }
+    if (inDartCode) {
+      newLines.add(sispNormalize(line + "\n"));
+    } else {
+      newLines.add(normalize(line + "\n"));
+    }
+  }
+
+  // multi-line normalization
+  newLines = multilineNormalize(newLines);
+
+  // output result
+  outputFile.writeAsStringSync(newLines.join());
+}
diff --git a/tools/apps/update_homebrew/bin/update_homebrew.dart b/tools/apps/update_homebrew/bin/update_homebrew.dart
index 91085c4..28b82cb 100644
--- a/tools/apps/update_homebrew/bin/update_homebrew.dart
+++ b/tools/apps/update_homebrew/bin/update_homebrew.dart
@@ -46,7 +46,7 @@
       .whenComplete(client.close);
 }
 
-Future<Map> setCurrentRevisions(Map revisions) {
+Future setCurrentRevisions(Map revisions) {
   return new File('$repository/dart.rb')
     .readAsLines()
     .then((lines) {
@@ -58,7 +58,7 @@
     });
 }
 
-Future<Map> setHashes(Map revisions, Map hashes) {
+Future setHashes(Map revisions, Map hashes) {
   List waitOn = [];
   for (var channel in CHANNELS) {
     hashes[channel] = {};
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 2a785fd..2083f05 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -112,7 +112,8 @@
 
 
 def CopyDartScripts(home, sdk_root):
-  for executable in ['dart2js', 'dartanalyzer', 'dartfmt', 'docgen', 'pub_sdk']:
+  for executable in ['dart2js', 'dartanalyzer_sdk', 'dartfmt', 'docgen',
+                     'pub_sdk']:
     CopyShellScript(os.path.join(home, 'sdk', 'bin', executable),
                     os.path.join(sdk_root, 'bin'))
 
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index b4ca55b..7be54d7 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -925,7 +925,23 @@
     "support_level": "untriaged"
   },
   "CacheStorage": {
-    "members": {},
+    "members": {
+      "create": {
+        "support_level": "untriaged"
+      },
+      "delete": {
+        "support_level": "untriaged"
+      },
+      "get": {
+        "support_level": "untriaged"
+      },
+      "has": {
+        "support_level": "untriaged"
+      },
+      "keys": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "Canvas2DContextAttributes": {
@@ -1495,7 +1511,20 @@
     "support_level": "untriaged"
   },
   "CredentialsContainer": {
-    "members": {},
+    "members": {
+      "notifyFailedSignIn": {
+        "support_level": "untriaged"
+      },
+      "notifySignedIn": {
+        "support_level": "untriaged"
+      },
+      "notifySignedOut": {
+        "support_level": "untriaged"
+      },
+      "request": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "Crypto": {
@@ -3575,7 +3604,20 @@
     "support_level": "untriaged"
   },
   "FetchBodyStream": {
-    "members": {},
+    "members": {
+      "asArrayBuffer": {
+        "support_level": "untriaged"
+      },
+      "asBlob": {
+        "support_level": "untriaged"
+      },
+      "asJSON": {
+        "support_level": "untriaged"
+      },
+      "asText": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "FetchEvent": {
@@ -3810,6 +3852,9 @@
       "load": {
         "support_level": "untriaged"
       },
+      "loaded": {
+        "support_level": "untriaged"
+      },
       "status": {
         "support_level": "untriaged"
       },
@@ -3964,7 +4009,17 @@
     "support_level": "experimental"
   },
   "Geofencing": {
-    "members": {},
+    "members": {
+      "getRegisteredRegions": {
+        "support_level": "untriaged"
+      },
+      "registerRegion": {
+        "support_level": "untriaged"
+      },
+      "unregisterRegion": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "GeofencingRegion": {
@@ -7171,6 +7226,9 @@
     "members": {
       "addEventListener": {},
       "close": {},
+      "closed": {
+        "support_level": "untriaged"
+      },
       "dispatchEvent": {},
       "error": {},
       "keySystem": {},
@@ -7199,6 +7257,9 @@
     "comment": "https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html",
     "members": {
       "MediaKeys": {},
+      "create": {
+        "support_level": "untriaged"
+      },
       "createSession": {},
       "isTypeSupported": {
         "support_level": "untriaged"
@@ -7594,6 +7655,9 @@
         "dart_action": "unstable",
         "support_level": "stable"
       },
+      "getBattery": {
+        "support_level": "untriaged"
+      },
       "getGamepads": {
         "support_level": "untriaged"
       },
@@ -8627,7 +8691,11 @@
     "support_level": "untriaged"
   },
   "PushManager": {
-    "members": {},
+    "members": {
+      "register": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "PushRegistration": {
@@ -12592,6 +12660,9 @@
       "angle": {
         "support_level": "untriaged"
       },
+      "lock": {
+        "support_level": "untriaged"
+      },
       "onchange": {
         "support_level": "untriaged"
       },
@@ -12727,7 +12798,11 @@
     "support_level": "untriaged"
   },
   "ServiceWorkerClients": {
-    "members": {},
+    "members": {
+      "getServiced": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "ServiceWorkerContainer": {
@@ -12741,6 +12816,9 @@
       "installing": {
         "support_level": "untriaged"
       },
+      "ready": {
+        "support_level": "untriaged"
+      },
       "register": {
         "support_level": "untriaged"
       },
@@ -12758,6 +12836,9 @@
       "clients": {
         "support_level": "untriaged"
       },
+      "fetch": {
+        "support_level": "untriaged"
+      },
       "nativeCaches": {
         "support_level": "untriaged"
       },
@@ -12781,6 +12862,9 @@
       "scope": {
         "support_level": "untriaged"
       },
+      "unregister": {
+        "support_level": "untriaged"
+      },
       "waiting": {
         "support_level": "untriaged"
       }
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index 8a312ce..06f470c 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -353,9 +353,6 @@
   [RaisesException] void scroll(long x, long y, optional Dictionary scrollOptions);
 };
 
-[DartSuppress]
-interface Promise {};
-
 [DartSupplemental]
 interface CanvasRenderingContext2D {
     [DartSuppress] void webkitPutImageDataHD(ImageData? imagedata, float dx, float dy);
diff --git a/tools/dom/scripts/css_code_generator.py b/tools/dom/scripts/css_code_generator.py
index 1e588de..a290c5f 100644
--- a/tools/dom/scripts/css_code_generator.py
+++ b/tools/dom/scripts/css_code_generator.py
@@ -112,7 +112,7 @@
 $if DARTIUM
 
   bool _hasProperty(String propertyName) =>
-      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, propertyName);
+      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, propertyName);
 $endif
 
   @DomName('CSSStyleDeclaration.setProperty')
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index d8ecaa2..37117e7 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -1154,6 +1154,7 @@
     'ClientRect': TypeData(clazz='Interface',
         dart_type='Rectangle', suppress_interface=True),
     'Date': TypeData(clazz='Primitive', dart_type='DateTime', native_type='double'),
+    'Promise': TypeData(clazz='Primitive', dart_type='Future', native_type='ScriptPromise'),
     'DOMObject': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue'),
     'DOMString': TypeData(clazz='Primitive', dart_type='String', native_type='String'),
     # TODO(vsm): This won't actually work until we convert the Map to
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 9cc4124..6699fd3 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -475,7 +475,7 @@
           version, operations[signature_index], argument_count)
 
     def IsOptional(signature_index, argument):
-      return is_optional(operations[signature_index], argument)
+      return is_optional(argument)
 
     emitter = self._members_emitter
 
@@ -589,8 +589,7 @@
         if self._dart_use_blink:
             type_ids = [p.type.id for p in arguments]
             base_name, rs = \
-                self.DeriveNativeEntry("constructorCallback", None, type_ids,
-                                       False)
+                self.DeriveNativeEntry("constructorCallback", 'Constructor', argument_count)
             qualified_name = \
                 self.DeriveQualifiedBlinkName(self._interface.id,
                                               base_name)
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 0ef9fe9..1bc0077 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -49,6 +49,7 @@
     'NotificationPermissionCallback': '_NotificationPermissionCallback',
     'PositionCallback': '_PositionCallback',
     'PositionErrorCallback': '_PositionErrorCallback',
+    'Request': '_Request',
     'RTCDTMFSender': 'RtcDtmfSender',
     'RTCDTMFToneChangeEvent': 'RtcDtmfToneChangeEvent',
     'RTCErrorCallback': '_RtcErrorCallback',
@@ -188,6 +189,12 @@
 private_html_members = monitored.Set('htmlrenamer.private_html_members', [
   'AudioContext.decodeAudioData',
   'AudioNode.connect',
+  'Cache.add',
+  'Cache.delete',
+  'Cache.keys',
+  'Cache.match',
+  'Cache.matchAll',
+  'Cache.put',
   'CanvasRenderingContext2D.arc',
   'CanvasRenderingContext2D.drawImage',
   'CanvasRenderingContext2D.getLineDash',
@@ -297,6 +304,8 @@
   'IDBObjectStore.put',
   'KeyboardEvent.initKeyboardEvent',
   'KeyboardEvent.keyIdentifier',
+  'MediaKeys.createSession',
+  'MediaKeySession.update',
   'MessageEvent.initMessageEvent',
   'MouseEvent.initMouseEvent',
   'MouseEvent.clientX',
@@ -327,7 +336,7 @@
   'Screen.availLeft',
   'Screen.availTop',
   'Screen.availWidth',
-  'ShadowRoot.applyAuthorStyles',
+  'ServiceWorkerGlobalScope.fetch',
   'ShadowRoot.resetStyleInheritance',
   'Storage.clear',
   'Storage.getItem',
@@ -336,6 +345,14 @@
   'Storage.removeItem',
   'Storage.setItem',
   'StorageEvent.initStorageEvent',
+  'SubtleCrypto.encrypt',
+  'SubtleCrypto.decrypt',
+  'SubtleCrypto.sign',
+  'SubtleCrypto.digest',
+  'SubtleCrypto.importKey',
+  'SubtleCrypto.unwrapKey',
+  'ShadowRoot.applyAuthorStyles',
+
   'TextEvent.initTextEvent',
   # TODO(leafp): These have been converted from int to double in Chrome 37.
   # client, page, and screen were already special cased, adding radiusX/radiusY.
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 30749cc..b8409e9 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -1085,7 +1085,7 @@
         operations,
         declaration,
         GenerateCall,
-        lambda _, argument: IsOptional(argument),
+        IsOptional,
         can_omit_type_check=lambda type, pos: type == parameter_types[pos])
 
   def _AddInterfaceOperation(self, info, html_name):
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index 458c26b..84bfa75 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -584,30 +584,40 @@
   def RootClassName(self):
     return 'NativeFieldWrapperClass2'
 
-  def DeriveNativeEntry(self, operation_id, native_suffix, type_ids, skip_types):
+  # This code matches up with the _generate_native_entry code in
+  # dart_utilities.py in the dartium repository.  Any changes to this
+  # should have matching changes on that end.
+  def DeriveNativeEntry(self, name, kind, count):
     interface_id = self._interface.id
     database = self._database
-    type_ids = map(lambda type_id : TypeIdToBlinkName(type_id, database),
-                   type_ids)
-    encoded_type_ids = map(EncodeType, type_ids)
-    if native_suffix:
-      operation_id = "%s_%s" % (operation_id, native_suffix)
-      interface_id = TypeIdToBlinkName(interface_id, database)
+    tag = ""
+    if kind == 'Getter':
+        tag = "%s_Getter" % name
+        blink_entry = tag
+    elif kind == 'Setter':
+        tag = "%s_Setter" % name
+        blink_entry = tag
+    elif kind == 'Constructor':
+        tag = "constructorCallback"
+        blink_entry = tag
+    elif kind == 'Method':
+        tag = "%s_Callback" % name
+        blink_entry = tag
 
-    def DeriveString(components, types, use_types):
-      if use_types:
-        components.extend(types)
-      full_name = "_".join(components)
-      return full_name
+    interface_id = TypeIdToBlinkName(interface_id, database)
 
     def mkPublic(s):
       if s.startswith("_") or s.startswith("$"):
         return "$" + s
       return s
 
-    dart_name = mkPublic(DeriveString([operation_id], encoded_type_ids, True))
-    resolver_string = DeriveString([interface_id, operation_id], type_ids,
-                                   not skip_types)
+    if count:
+      arity = str(count)
+      dart_name = mkPublic("_".join([tag, arity]))
+    else:
+      dart_name = mkPublic(tag)
+    resolver_string = "_".join([interface_id, tag])
+
     return (dart_name, resolver_string)
 
 
@@ -703,9 +713,8 @@
     parameters = constructor_info.ParametersAsStringOfVariables(argument_count)
     interface_name =  self._interface_type_info.interface_name()
 
-    type_ids = [p.type.id for p in arguments[:argument_count]]
     dart_native_name, constructor_callback_id = \
-        self.DeriveNativeEntry(cpp_suffix, None, type_ids, is_custom)
+        self.DeriveNativeEntry(cpp_suffix, 'Constructor', argument_count)
     if constructor_callback_id in _cpp_resolver_string_map:
         constructor_callback_id = \
             _cpp_resolver_string_map[constructor_callback_id]
@@ -1005,7 +1014,7 @@
     native_suffix = 'Getter'
     auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
     native_entry = \
-        self.DeriveNativeEntry(attr.id, native_suffix, [], True)
+        self.DeriveNativeEntry(attr.id, 'Getter', None)
     cpp_callback_name = self._GenerateNativeBinding(attr.id, 1,
         dart_declaration, False, return_type, parameters,
         native_suffix, is_custom, auto_scope_setup, native_entry=native_entry)
@@ -1060,7 +1069,7 @@
     native_suffix = 'Setter'
     auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
     native_entry = \
-        self.DeriveNativeEntry(attr.id, native_suffix, [attr.type.id], True)
+        self.DeriveNativeEntry(attr.id, 'Setter', None)
     cpp_callback_name = self._GenerateNativeBinding(attr.id, 2,
         dart_declaration, False, return_type, parameters,
         native_suffix, is_custom, auto_scope_setup, native_entry=native_entry)
@@ -1123,8 +1132,7 @@
       # First emit a toplevel function to do the native call
       # Calls to this are emitted elsewhere,
       dart_native_name, resolver_string = \
-          self.DeriveNativeEntry("item", "Callback", ["unsigned long"],
-                                 is_custom)
+          self.DeriveNativeEntry("item", 'Method', 1)
       if resolver_string in _cpp_resolver_string_map:
           resolver_string = \
               _cpp_resolver_string_map[resolver_string]
@@ -1230,7 +1238,7 @@
 
     operation = info.operations[0]
     is_custom = _IsCustom(operation)
-    has_optional_arguments = any(self._IsArgumentOptionalInWebCore(operation, argument) for argument in operation.arguments)
+    has_optional_arguments = any(IsOptional(argument) for argument in operation.arguments)
     needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_optional_arguments)
 
     if info.callback_args:
@@ -1240,11 +1248,8 @@
       argument_count = (0 if info.IsStatic() else 1) + len(info.param_infos)
       native_suffix = 'Callback'
       auto_scope_setup = self._GenerateAutoSetupScope(info.name, native_suffix)
-      type_ids = [argument.type.id
-                  for argument in operation.arguments[:len(info.param_infos)]]
       native_entry = \
-          self.DeriveNativeEntry(operation.id, native_suffix, type_ids,
-                                 is_custom)
+          self.DeriveNativeEntry(operation.id, 'Method', len(info.param_infos))
       cpp_callback_name = self._GenerateNativeBinding(
         info.name, argument_count, dart_declaration,
         info.IsStatic(), return_type, parameters,
@@ -1275,11 +1280,8 @@
       formals_s = ", ".join(formals)
       dart_declaration = '%s(%s)' % (
         base_name, formals_s)
-      type_ids = [argument.type.id
-                  for argument in operation.arguments[:argument_count]]
       native_entry = \
-          self.DeriveNativeEntry(operation.id, native_suffix, type_ids,
-                                 is_custom)
+          self.DeriveNativeEntry(operation.id, 'Method', argument_count)
       overload_base_name = native_entry[0]
       overload_name = \
           self.DeriveQualifiedBlinkName(self._interface.id,
@@ -1303,7 +1305,7 @@
         operations,
         dart_declaration,
         GenerateCall,
-        self._IsArgumentOptionalInWebCore)
+        IsOptional)
 
   def SecondaryContext(self, interface):
     pass
diff --git a/tools/dom/src/blink_native_DOMImplementation.dart b/tools/dom/src/blink_native_DOMImplementation.dart
index 7d3e6e5..bc274e4 100644
--- a/tools/dom/src/blink_native_DOMImplementation.dart
+++ b/tools/dom/src/blink_native_DOMImplementation.dart
@@ -46,7 +46,7 @@
 
   static forward(_HistoryCrossFrame) native "History_forward_Callback";
 
-  static go(_HistoryCrossFrame, distance) native "History_go_Callback_long";
+  static go(_HistoryCrossFrame, distance) native "History_go_Callback";
 }
 
 class Blink_LocationCrossFrame {
diff --git a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index f1a123a8..1b47c7d 100644
--- a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -62,7 +62,7 @@
 $if DARTIUM
 
   bool _hasProperty(String propertyName) =>
-      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, propertyName);
+      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, propertyName);
 $endif
 
   @DomName('CSSStyleDeclaration.setProperty')
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 622af6d..04f51e1 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -1429,7 +1429,7 @@
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  void set scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter_long(this, value.round());
+  void set scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter(this, value.round());
 
   @DomName('Element.scrollTop')
   @DocsEditable()
@@ -1437,7 +1437,7 @@
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  void set scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter_long(this, value.round());
+  void set scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter(this, value.round());
 
   @DomName('Element.scrollWidth')
   @DocsEditable()
diff --git a/tools/testing/dart/browser_controller.dart b/tools/testing/dart/browser_controller.dart
index 4938662..d17612d 100644
--- a/tools/testing/dart/browser_controller.dart
+++ b/tools/testing/dart/browser_controller.dart
@@ -1223,20 +1223,29 @@
   }
 
   Future<bool> terminate() {
-    var futures = [];
+    var browsers = [];
     underTermination = true;
     testingServer.underTermination = true;
     for (BrowserTestingStatus status in browserStatus.values) {
-      futures.add(status.browser.close());
+      browsers.add(status.browser);
       if (status.nextTestTimeout != null) {
         status.nextTestTimeout.cancel();
         status.nextTestTimeout = null;
       }
     }
-    return Future.wait(futures).then((values) {
+    // Success if all the browsers closed successfully.
+    bool success = true;
+    Future closeBrowser(Browser b) {
+      return b.close().then((bool closeSucceeded) {
+        if (!closeSucceeded) {
+          success = false;
+        }
+      });
+    }
+    return Future.forEach(browsers, closeBrowser).then((_) {
       testingServer.errorReportingServer.close();
       printDoubleReportingTests();
-      return !values.contains(false);
+      return success;
     });
   }
 
@@ -1429,6 +1438,26 @@
     String driverContent = """
 <!DOCTYPE html><html>
 <head>
+  <style>
+    body {
+      margin: 0;
+    }
+    .box {
+      overflow: hidden;
+      overflow-y: auto;
+      position: absolute;
+      left: 0;
+      right: 0;
+    }
+    .controller.box {
+      height: 75px;
+      top: 0;
+    }
+    .test.box {
+      top: 75px;
+      bottom: 0;
+    }
+  </style>
   <title>Driving page</title>
   <script type='text/javascript'>
     var STATUS_UPDATE_INTERVAL = 10000;
@@ -1710,10 +1739,14 @@
   </script>
 </head>
   <body onload="startTesting()">
-    Dart test driver, number of tests: <div id="number"></div><br>
-    Currently executing: <div id="currently_executing"></div><br>
-    Unhandled error: <div id="unhandled_error"></div>
-    <iframe id="embedded_iframe"></iframe>
+    <div class="controller box">
+    Dart test driver, number of tests: <span id="number"></span><br>
+    Currently executing: <span id="currently_executing"></span><br>
+    Unhandled error: <span id="unhandled_error"></span>
+    </div>
+    <div class="test box">
+      <iframe style="width:100%;height:100%;" id="embedded_iframe"></iframe>
+    </div>
   </body>
 </html>
 """;
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 9782227..668804a3 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -350,7 +350,7 @@
 
   String computeCompilerPath(String buildDir) {
     String suffix = executableScriptSuffix;
-    return 'sdk/bin/dartanalyzer_developer$suffix';
+    return 'sdk/bin/dartanalyzer_java$suffix';
   }
 
   CommandArtifact computeCompilationArtifact(
@@ -392,5 +392,21 @@
           'dart2analyzer', isDebug: isDebug, isChecked: isChecked,
           isHostChecked: isHostChecked, useSdk: useSdk);
 
-  String computeCompilerPath(String buildDir) => 'editor/tools/analyzer';
+  String computeCompilerPath(String buildDir) {
+    var prefix = 'sdk/bin';
+    String suffix = executableScriptSuffix;
+    if (isHostChecked) {
+      if (useSdk) {
+        throw "--host-checked and --use-sdk cannot be used together";
+      }
+      // The script dartanalyzer_developer is not included in the
+      // shipped SDK, that is the script is not installed in
+      // "$buildDir/dart-sdk/bin/"
+      return '$prefix/dartanalyzer_developer$suffix';
+    }
+    if (useSdk) {
+      prefix = '$buildDir/dart-sdk/bin';
+    }
+    return '$prefix/dartanalyzer$suffix';
+  }
 }