Version 0.5.16.0

 svn merge -r 23744:23796 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@23799 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/analyzer_experimental/lib/src/generated/ast.dart b/pkg/analyzer_experimental/lib/src/generated/ast.dart
index e242155..f18ed43 100644
--- a/pkg/analyzer_experimental/lib/src/generated/ast.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/ast.dart
@@ -81,12 +81,12 @@
    * @return the number of characters in the node's source range
    */
   int get length {
-    Token beginToken2 = beginToken;
-    Token endToken2 = endToken;
-    if (beginToken2 == null || endToken2 == null) {
+    Token beginToken = this.beginToken;
+    Token endToken = this.endToken;
+    if (beginToken == null || endToken == null) {
       return -1;
     }
-    return endToken2.offset + endToken2.length - beginToken2.offset;
+    return endToken.offset + endToken.length - beginToken.offset;
   }
 
   /**
@@ -96,8 +96,8 @@
    * range
    */
   int get offset {
-    Token beginToken2 = beginToken;
-    if (beginToken2 == null) {
+    Token beginToken = this.beginToken;
+    if (beginToken == null) {
       return -1;
     }
     return beginToken.offset;
@@ -131,10 +131,10 @@
    */
   ASTNode get root {
     ASTNode root = this;
-    ASTNode parent2 = parent;
-    while (parent2 != null) {
-      root = parent2;
-      parent2 = root.parent;
+    ASTNode parent = this.parent;
+    while (parent != null) {
+      root = parent;
+      parent = root.parent;
     }
     return root;
   }
@@ -1460,11 +1460,11 @@
     if (_propagatedElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _propagatedElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _propagatedElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 
   /**
@@ -1480,11 +1480,11 @@
     if (_staticElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _staticElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _staticElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 }
 /**
@@ -2984,11 +2984,11 @@
     }
   }
   int get length {
-    Token endToken2 = endToken;
-    if (endToken2 == null) {
+    Token endToken = this.endToken;
+    if (endToken == null) {
       return 0;
     }
-    return endToken2.offset + endToken2.length;
+    return endToken.offset + endToken.length;
   }
 
   /**
@@ -4084,11 +4084,11 @@
   DeclaredIdentifier({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier}) : this.full(comment, metadata, keyword, type, identifier);
   accept(ASTVisitor visitor) => visitor.visitDeclaredIdentifier(this);
   LocalVariableElement get element {
-    SimpleIdentifier identifier2 = identifier;
-    if (identifier2 == null) {
+    SimpleIdentifier identifier = this.identifier;
+    if (identifier == null) {
       return null;
     }
-    return identifier2.element as LocalVariableElement;
+    return identifier.element as LocalVariableElement;
   }
   Token get endToken => _identifier.endToken;
 
@@ -4740,9 +4740,9 @@
   ExportDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryUri, combinators, semicolon);
   accept(ASTVisitor visitor) => visitor.visitExportDirective(this);
   LibraryElement get uriElement {
-    Element element2 = element;
-    if (element2 is ExportElement) {
-      return ((element2 as ExportElement)).exportedLibrary;
+    Element element = this.element;
+    if (element is ExportElement) {
+      return ((element as ExportElement)).exportedLibrary;
     }
     return null;
   }
@@ -4782,23 +4782,23 @@
    * will be bound
    */
   ParameterElement get parameterElement {
-    ASTNode parent2 = parent;
-    if (parent2 is ArgumentList) {
-      return ((parent2 as ArgumentList)).getPropagatedParameterElementFor(this);
-    } else if (parent2 is IndexExpression) {
-      IndexExpression indexExpression = parent2 as IndexExpression;
+    ASTNode parent = this.parent;
+    if (parent is ArgumentList) {
+      return ((parent as ArgumentList)).getPropagatedParameterElementFor(this);
+    } else if (parent is IndexExpression) {
+      IndexExpression indexExpression = parent as IndexExpression;
       if (identical(indexExpression.index, this)) {
         return indexExpression.propagatedParameterElementForIndex;
       }
-    } else if (parent2 is BinaryExpression) {
-      BinaryExpression binaryExpression = parent2 as BinaryExpression;
+    } else if (parent is BinaryExpression) {
+      BinaryExpression binaryExpression = parent as BinaryExpression;
       if (identical(binaryExpression.rightOperand, this)) {
         return binaryExpression.propagatedParameterElementForRightOperand;
       }
-    } else if (parent2 is PrefixExpression) {
-      return ((parent2 as PrefixExpression)).propagatedParameterElementForOperand;
-    } else if (parent2 is PostfixExpression) {
-      return ((parent2 as PostfixExpression)).propagatedParameterElementForOperand;
+    } else if (parent is PrefixExpression) {
+      return ((parent as PrefixExpression)).propagatedParameterElementForOperand;
+    } else if (parent is PostfixExpression) {
+      return ((parent as PostfixExpression)).propagatedParameterElementForOperand;
     }
     return null;
   }
@@ -4820,23 +4820,23 @@
    * will be bound
    */
   ParameterElement get staticParameterElement {
-    ASTNode parent2 = parent;
-    if (parent2 is ArgumentList) {
-      return ((parent2 as ArgumentList)).getStaticParameterElementFor(this);
-    } else if (parent2 is IndexExpression) {
-      IndexExpression indexExpression = parent2 as IndexExpression;
+    ASTNode parent = this.parent;
+    if (parent is ArgumentList) {
+      return ((parent as ArgumentList)).getStaticParameterElementFor(this);
+    } else if (parent is IndexExpression) {
+      IndexExpression indexExpression = parent as IndexExpression;
       if (identical(indexExpression.index, this)) {
         return indexExpression.staticParameterElementForIndex;
       }
-    } else if (parent2 is BinaryExpression) {
-      BinaryExpression binaryExpression = parent2 as BinaryExpression;
+    } else if (parent is BinaryExpression) {
+      BinaryExpression binaryExpression = parent as BinaryExpression;
       if (identical(binaryExpression.rightOperand, this)) {
         return binaryExpression.staticParameterElementForRightOperand;
       }
-    } else if (parent2 is PrefixExpression) {
-      return ((parent2 as PrefixExpression)).staticParameterElementForOperand;
-    } else if (parent2 is PostfixExpression) {
-      return ((parent2 as PostfixExpression)).staticParameterElementForOperand;
+    } else if (parent is PrefixExpression) {
+      return ((parent as PrefixExpression)).staticParameterElementForOperand;
+    } else if (parent is PostfixExpression) {
+      return ((parent as PostfixExpression)).staticParameterElementForOperand;
     }
     return null;
   }
@@ -5811,11 +5811,11 @@
    * @return the element representing this parameter
    */
   ParameterElement get element {
-    SimpleIdentifier identifier2 = identifier;
-    if (identifier2 == null) {
+    SimpleIdentifier identifier = this.identifier;
+    if (identifier == null) {
       return null;
     }
-    return identifier2.element as ParameterElement;
+    return identifier.element as ParameterElement;
   }
 
   /**
@@ -7072,9 +7072,9 @@
    */
   SimpleIdentifier get prefix => _prefix;
   LibraryElement get uriElement {
-    Element element2 = element;
-    if (element2 is ImportElement) {
-      return ((element2 as ImportElement)).importedLibrary;
+    Element element = this.element;
+    if (element is ImportElement) {
+      return ((element as ImportElement)).importedLibrary;
     }
     return null;
   }
@@ -7287,9 +7287,9 @@
    * @return {@code true} if this expression is in a context where the operator '\[\]' will be invoked
    */
   bool inGetterContext() {
-    ASTNode parent2 = parent;
-    if (parent2 is AssignmentExpression) {
-      AssignmentExpression assignment = parent2 as AssignmentExpression;
+    ASTNode parent = this.parent;
+    if (parent is AssignmentExpression) {
+      AssignmentExpression assignment = parent as AssignmentExpression;
       if (identical(assignment.leftHandSide, this) && identical(assignment.operator.type, TokenType.EQ)) {
         return false;
       }
@@ -7306,13 +7306,13 @@
    * invoked
    */
   bool inSetterContext() {
-    ASTNode parent2 = parent;
-    if (parent2 is PrefixExpression) {
-      return ((parent2 as PrefixExpression)).operator.type.isIncrementOperator();
-    } else if (parent2 is PostfixExpression) {
+    ASTNode parent = this.parent;
+    if (parent is PrefixExpression) {
+      return ((parent as PrefixExpression)).operator.type.isIncrementOperator();
+    } else if (parent is PostfixExpression) {
       return true;
-    } else if (parent2 is AssignmentExpression) {
-      return identical(((parent2 as AssignmentExpression)).leftHandSide, this);
+    } else if (parent is AssignmentExpression) {
+      return identical(((parent as AssignmentExpression)).leftHandSide, this);
     }
     return false;
   }
@@ -7400,11 +7400,11 @@
     if (_propagatedElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _propagatedElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _propagatedElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 
   /**
@@ -7420,11 +7420,11 @@
     if (_staticElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _staticElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _staticElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 }
 /**
@@ -8291,9 +8291,9 @@
     if (token != null) {
       return token;
     }
-    TypeArgumentList typeArguments2 = typeArguments;
-    if (typeArguments2 != null) {
-      return typeArguments2.beginToken;
+    TypeArgumentList typeArguments = this.typeArguments;
+    if (typeArguments != null) {
+      return typeArguments.beginToken;
     }
     return _leftBracket;
   }
@@ -8403,9 +8403,9 @@
     if (token != null) {
       return token;
     }
-    TypeArgumentList typeArguments2 = typeArguments;
-    if (typeArguments2 != null) {
-      return typeArguments2.beginToken;
+    TypeArgumentList typeArguments = this.typeArguments;
+    if (typeArguments != null) {
+      return typeArguments.beginToken;
     }
     return _leftBracket;
   }
@@ -9019,9 +9019,9 @@
    * @return the element representing the parameter being named by this expression
    */
   ParameterElement get element {
-    Element element2 = _name.label.element;
-    if (element2 is ParameterElement) {
-      return element2 as ParameterElement;
+    Element element = _name.label.element;
+    if (element is ParameterElement) {
+      return element as ParameterElement;
     }
     return null;
   }
@@ -9268,9 +9268,9 @@
   Comment get documentationComment => _comment;
   SimpleIdentifier get identifier => _identifier;
   ParameterKind get kind {
-    ASTNode parent2 = parent;
-    if (parent2 is DefaultFormalParameter) {
-      return ((parent2 as DefaultFormalParameter)).kind;
+    ASTNode parent = this.parent;
+    if (parent is DefaultFormalParameter) {
+      return ((parent as DefaultFormalParameter)).kind;
     }
     return ParameterKind.REQUIRED;
   }
@@ -9812,11 +9812,11 @@
     if (_propagatedElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _propagatedElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _propagatedElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 
   /**
@@ -9832,11 +9832,11 @@
     if (_staticElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _staticElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _staticElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 }
 /**
@@ -9967,11 +9967,11 @@
     if (_propagatedElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _propagatedElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _propagatedElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 
   /**
@@ -9987,11 +9987,11 @@
     if (_staticElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = _staticElement.parameters;
-    if (parameters2.length < 1) {
+    List<ParameterElement> parameters = _staticElement.parameters;
+    if (parameters.length < 1) {
       return null;
     }
-    return parameters2[0];
+    return parameters[0];
   }
 }
 /**
@@ -10784,30 +10784,30 @@
    * @return {@code true} if this identifier is the name being declared in a declaration
    */
   bool inDeclarationContext() {
-    ASTNode parent2 = parent;
-    if (parent2 is CatchClause) {
-      CatchClause clause = parent2 as CatchClause;
+    ASTNode parent = this.parent;
+    if (parent is CatchClause) {
+      CatchClause clause = parent as CatchClause;
       return identical(this, clause.exceptionParameter) || identical(this, clause.stackTraceParameter);
-    } else if (parent2 is ClassDeclaration) {
-      return identical(this, ((parent2 as ClassDeclaration)).name);
-    } else if (parent2 is ClassTypeAlias) {
-      return identical(this, ((parent2 as ClassTypeAlias)).name);
-    } else if (parent2 is ConstructorDeclaration) {
-      return identical(this, ((parent2 as ConstructorDeclaration)).name);
-    } else if (parent2 is FunctionDeclaration) {
-      return identical(this, ((parent2 as FunctionDeclaration)).name);
-    } else if (parent2 is FunctionTypeAlias) {
-      return identical(this, ((parent2 as FunctionTypeAlias)).name);
-    } else if (parent2 is Label) {
-      return identical(this, ((parent2 as Label)).label) && (parent2.parent is LabeledStatement);
-    } else if (parent2 is MethodDeclaration) {
-      return identical(this, ((parent2 as MethodDeclaration)).name);
-    } else if (parent2 is FunctionTypedFormalParameter || parent2 is SimpleFormalParameter) {
-      return identical(this, ((parent2 as NormalFormalParameter)).identifier);
-    } else if (parent2 is TypeParameter) {
-      return identical(this, ((parent2 as TypeParameter)).name);
-    } else if (parent2 is VariableDeclaration) {
-      return identical(this, ((parent2 as VariableDeclaration)).name);
+    } else if (parent is ClassDeclaration) {
+      return identical(this, ((parent as ClassDeclaration)).name);
+    } else if (parent is ClassTypeAlias) {
+      return identical(this, ((parent as ClassTypeAlias)).name);
+    } else if (parent is ConstructorDeclaration) {
+      return identical(this, ((parent as ConstructorDeclaration)).name);
+    } else if (parent is FunctionDeclaration) {
+      return identical(this, ((parent as FunctionDeclaration)).name);
+    } else if (parent is FunctionTypeAlias) {
+      return identical(this, ((parent as FunctionTypeAlias)).name);
+    } else if (parent is Label) {
+      return identical(this, ((parent as Label)).label) && (parent.parent is LabeledStatement);
+    } else if (parent is MethodDeclaration) {
+      return identical(this, ((parent as MethodDeclaration)).name);
+    } else if (parent is FunctionTypedFormalParameter || parent is SimpleFormalParameter) {
+      return identical(this, ((parent as NormalFormalParameter)).identifier);
+    } else if (parent is TypeParameter) {
+      return identical(this, ((parent as TypeParameter)).name);
+    } else if (parent is VariableDeclaration) {
+      return identical(this, ((parent as VariableDeclaration)).name);
     }
     return false;
   }
@@ -10820,28 +10820,28 @@
    * @return {@code true} if this expression is in a context where a getter will be invoked
    */
   bool inGetterContext() {
-    ASTNode parent2 = parent;
+    ASTNode parent = this.parent;
     ASTNode target = this;
-    if (parent2 is PrefixedIdentifier) {
-      PrefixedIdentifier prefixed = parent2 as PrefixedIdentifier;
+    if (parent is PrefixedIdentifier) {
+      PrefixedIdentifier prefixed = parent as PrefixedIdentifier;
       if (identical(prefixed.prefix, this)) {
         return true;
       }
-      parent2 = prefixed.parent;
+      parent = prefixed.parent;
       target = prefixed;
-    } else if (parent2 is PropertyAccess) {
-      PropertyAccess access = parent2 as PropertyAccess;
+    } else if (parent is PropertyAccess) {
+      PropertyAccess access = parent as PropertyAccess;
       if (identical(access.target, this)) {
         return true;
       }
-      parent2 = access.parent;
+      parent = access.parent;
       target = access;
     }
-    if (parent2 is Label) {
+    if (parent is Label) {
       return false;
     }
-    if (parent2 is AssignmentExpression) {
-      AssignmentExpression expr = parent2 as AssignmentExpression;
+    if (parent is AssignmentExpression) {
+      AssignmentExpression expr = parent as AssignmentExpression;
       if (identical(expr.leftHandSide, target) && identical(expr.operator.type, TokenType.EQ)) {
         return false;
       }
@@ -10857,29 +10857,29 @@
    * @return {@code true} if this expression is in a context where a setter will be invoked
    */
   bool inSetterContext() {
-    ASTNode parent2 = parent;
+    ASTNode parent = this.parent;
     ASTNode target = this;
-    if (parent2 is PrefixedIdentifier) {
-      PrefixedIdentifier prefixed = parent2 as PrefixedIdentifier;
+    if (parent is PrefixedIdentifier) {
+      PrefixedIdentifier prefixed = parent as PrefixedIdentifier;
       if (identical(prefixed.prefix, this)) {
         return false;
       }
-      parent2 = prefixed.parent;
+      parent = prefixed.parent;
       target = prefixed;
-    } else if (parent2 is PropertyAccess) {
-      PropertyAccess access = parent2 as PropertyAccess;
+    } else if (parent is PropertyAccess) {
+      PropertyAccess access = parent as PropertyAccess;
       if (identical(access.target, this)) {
         return false;
       }
-      parent2 = access.parent;
+      parent = access.parent;
       target = access;
     }
-    if (parent2 is PrefixExpression) {
-      return ((parent2 as PrefixExpression)).operator.type.isIncrementOperator();
-    } else if (parent2 is PostfixExpression) {
+    if (parent is PrefixExpression) {
+      return ((parent as PrefixExpression)).operator.type.isIncrementOperator();
+    } else if (parent is PostfixExpression) {
       return true;
-    } else if (parent2 is AssignmentExpression) {
-      return identical(((parent2 as AssignmentExpression)).leftHandSide, target);
+    } else if (parent is AssignmentExpression) {
+      return identical(((parent as AssignmentExpression)).leftHandSide, target);
     }
     return false;
   }
@@ -12703,8 +12703,8 @@
    * @return {@code true} if this variable was declared with the 'const' modifier
    */
   bool isConst() {
-    ASTNode parent2 = parent;
-    return parent2 is VariableDeclarationList && ((parent2 as VariableDeclarationList)).isConst();
+    ASTNode parent = this.parent;
+    return parent is VariableDeclarationList && ((parent as VariableDeclarationList)).isConst();
   }
 
   /**
@@ -12714,8 +12714,8 @@
    * @return {@code true} if this variable was declared with the 'final' modifier
    */
   bool isFinal() {
-    ASTNode parent2 = parent;
-    return parent2 is VariableDeclarationList && ((parent2 as VariableDeclarationList)).isFinal();
+    ASTNode parent = this.parent;
+    return parent is VariableDeclarationList && ((parent as VariableDeclarationList)).isFinal();
   }
 
   /**
@@ -13228,130 +13228,130 @@
     return builder.toString();
   }
   Object visitBinaryExpression(BinaryExpression node) {
-    Object leftOperand2 = node.leftOperand.accept(this);
-    if (identical(leftOperand2, NOT_A_CONSTANT)) {
-      return leftOperand2;
+    Object leftOperand = node.leftOperand.accept(this);
+    if (identical(leftOperand, NOT_A_CONSTANT)) {
+      return leftOperand;
     }
-    Object rightOperand2 = node.rightOperand.accept(this);
-    if (identical(rightOperand2, NOT_A_CONSTANT)) {
-      return rightOperand2;
+    Object rightOperand = node.rightOperand.accept(this);
+    if (identical(rightOperand, NOT_A_CONSTANT)) {
+      return rightOperand;
     }
     while (true) {
       if (node.operator.type == TokenType.AMPERSAND) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) & (rightOperand2 as int);
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) & (rightOperand as int);
         }
       } else if (node.operator.type == TokenType.AMPERSAND_AMPERSAND) {
-        if (leftOperand2 is bool && rightOperand2 is bool) {
-          return ((leftOperand2 as bool)) && ((rightOperand2 as bool));
+        if (leftOperand is bool && rightOperand is bool) {
+          return ((leftOperand as bool)) && ((rightOperand as bool));
         }
       } else if (node.operator.type == TokenType.BANG_EQ) {
-        if (leftOperand2 is bool && rightOperand2 is bool) {
-          return ((leftOperand2 as bool)) != ((rightOperand2 as bool));
-        } else if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) != rightOperand2;
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) != rightOperand2;
-        } else if (leftOperand2 is String && rightOperand2 is String) {
-          return ((leftOperand2 as String)) != rightOperand2;
+        if (leftOperand is bool && rightOperand is bool) {
+          return ((leftOperand as bool)) != ((rightOperand as bool));
+        } else if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) != rightOperand;
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) != rightOperand;
+        } else if (leftOperand is String && rightOperand is String) {
+          return ((leftOperand as String)) != rightOperand;
         }
       } else if (node.operator.type == TokenType.BAR) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) | (rightOperand2 as int);
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) | (rightOperand as int);
         }
       } else if (node.operator.type == TokenType.BAR_BAR) {
-        if (leftOperand2 is bool && rightOperand2 is bool) {
-          return ((leftOperand2 as bool)) || ((rightOperand2 as bool));
+        if (leftOperand is bool && rightOperand is bool) {
+          return ((leftOperand as bool)) || ((rightOperand as bool));
         }
       } else if (node.operator.type == TokenType.CARET) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) ^ (rightOperand2 as int);
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) ^ (rightOperand as int);
         }
       } else if (node.operator.type == TokenType.EQ_EQ) {
-        if (leftOperand2 is bool && rightOperand2 is bool) {
-          return identical(((leftOperand2 as bool)), ((rightOperand2 as bool)));
-        } else if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) == rightOperand2;
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) == rightOperand2;
-        } else if (leftOperand2 is String && rightOperand2 is String) {
-          return ((leftOperand2 as String)) == rightOperand2;
+        if (leftOperand is bool && rightOperand is bool) {
+          return identical(((leftOperand as bool)), ((rightOperand as bool)));
+        } else if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) == rightOperand;
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) == rightOperand;
+        } else if (leftOperand is String && rightOperand is String) {
+          return ((leftOperand as String)) == rightOperand;
         }
       } else if (node.operator.type == TokenType.GT) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) > 0;
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) > 0;
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)).compareTo((rightOperand as int)) > 0;
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)).compareTo((rightOperand as double)) > 0;
         }
       } else if (node.operator.type == TokenType.GT_EQ) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) >= 0;
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) >= 0;
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)).compareTo((rightOperand as int)) >= 0;
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)).compareTo((rightOperand as double)) >= 0;
         }
       } else if (node.operator.type == TokenType.GT_GT) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) >> ((rightOperand2 as int));
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) >> ((rightOperand as int));
         }
       } else if (node.operator.type == TokenType.LT) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) < 0;
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) < 0;
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)).compareTo((rightOperand as int)) < 0;
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)).compareTo((rightOperand as double)) < 0;
         }
       } else if (node.operator.type == TokenType.LT_EQ) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) <= 0;
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) <= 0;
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)).compareTo((rightOperand as int)) <= 0;
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)).compareTo((rightOperand as double)) <= 0;
         }
       } else if (node.operator.type == TokenType.LT_LT) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) << ((rightOperand2 as int));
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) << ((rightOperand as int));
         }
       } else if (node.operator.type == TokenType.MINUS) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) - (rightOperand2 as int);
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) - ((rightOperand2 as double));
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) - (rightOperand as int);
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) - ((rightOperand as double));
         }
       } else if (node.operator.type == TokenType.PERCENT) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)).remainder((rightOperand2 as int));
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) % ((rightOperand2 as double));
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)).remainder((rightOperand as int));
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) % ((rightOperand as double));
         }
       } else if (node.operator.type == TokenType.PLUS) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) + (rightOperand2 as int);
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) + ((rightOperand2 as double));
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) + (rightOperand as int);
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) + ((rightOperand as double));
         }
       } else if (node.operator.type == TokenType.STAR) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          return ((leftOperand2 as int)) * (rightOperand2 as int);
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) * ((rightOperand2 as double));
+        if (leftOperand is int && rightOperand is int) {
+          return ((leftOperand as int)) * (rightOperand as int);
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) * ((rightOperand as double));
         }
       } else if (node.operator.type == TokenType.SLASH) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          if (rightOperand2 != 0) {
-            return ((leftOperand2 as int)) ~/ (rightOperand2 as int);
+        if (leftOperand is int && rightOperand is int) {
+          if (rightOperand != 0) {
+            return ((leftOperand as int)) ~/ (rightOperand as int);
           } else {
-            return ((leftOperand2 as int)).toDouble() / ((rightOperand2 as int)).toDouble();
+            return ((leftOperand as int)).toDouble() / ((rightOperand as int)).toDouble();
           }
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) / ((rightOperand2 as double));
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) / ((rightOperand as double));
         }
       } else if (node.operator.type == TokenType.TILDE_SLASH) {
-        if (leftOperand2 is int && rightOperand2 is int) {
-          if (rightOperand2 != 0) {
-            return ((leftOperand2 as int)) ~/ (rightOperand2 as int);
+        if (leftOperand is int && rightOperand is int) {
+          if (rightOperand != 0) {
+            return ((leftOperand as int)) ~/ (rightOperand as int);
           } else {
             return 0;
           }
-        } else if (leftOperand2 is double && rightOperand2 is double) {
-          return ((leftOperand2 as double)) ~/ ((rightOperand2 as double));
+        } else if (leftOperand is double && rightOperand is double) {
+          return ((leftOperand as double)) ~/ ((rightOperand as double));
         }
       }
       break;
@@ -13383,12 +13383,12 @@
   Object visitMapLiteral(MapLiteral node) {
     Map<String, Object> map = new Map<String, Object>();
     for (MapLiteralEntry entry in node.entries) {
-      Object key2 = entry.key.accept(this);
-      Object value2 = entry.value.accept(this);
-      if (key2 is! String || identical(value2, NOT_A_CONSTANT)) {
+      Object key = entry.key.accept(this);
+      Object value = entry.value.accept(this);
+      if (key is! String || identical(value, NOT_A_CONSTANT)) {
         return NOT_A_CONSTANT;
       }
-      map[(key2 as String)] = value2;
+      map[(key as String)] = value;
     }
     return map;
   }
@@ -13398,28 +13398,28 @@
   Object visitParenthesizedExpression(ParenthesizedExpression node) => node.expression.accept(this);
   Object visitPrefixedIdentifier(PrefixedIdentifier node) => getConstantValue(null);
   Object visitPrefixExpression(PrefixExpression node) {
-    Object operand2 = node.operand.accept(this);
-    if (identical(operand2, NOT_A_CONSTANT)) {
-      return operand2;
+    Object operand = node.operand.accept(this);
+    if (identical(operand, NOT_A_CONSTANT)) {
+      return operand;
     }
     while (true) {
       if (node.operator.type == TokenType.BANG) {
-        if (identical(operand2, true)) {
+        if (identical(operand, true)) {
           return false;
-        } else if (identical(operand2, false)) {
+        } else if (identical(operand, false)) {
           return true;
         }
       } else if (node.operator.type == TokenType.TILDE) {
-        if (operand2 is int) {
-          return ~((operand2 as int));
+        if (operand is int) {
+          return ~((operand as int));
         }
       } else if (node.operator.type == TokenType.MINUS) {
-        if (operand2 == null) {
+        if (operand == null) {
           return null;
-        } else if (operand2 is int) {
-          return -((operand2 as int));
-        } else if (operand2 is double) {
-          return -((operand2 as double));
+        } else if (operand is int) {
+          return -((operand as int));
+        } else if (operand is double) {
+          return -((operand as double));
         }
       }
       break;
@@ -13482,27 +13482,27 @@
   Element visitConstructorDeclaration(ConstructorDeclaration node) => node.element;
   Element visitFunctionDeclaration(FunctionDeclaration node) => node.element;
   Element visitIdentifier(Identifier node) {
-    ASTNode parent2 = node.parent;
-    if (parent2 is ConstructorDeclaration) {
-      ConstructorDeclaration decl = parent2 as ConstructorDeclaration;
-      Identifier returnType2 = decl.returnType;
-      if (identical(returnType2, node)) {
-        SimpleIdentifier name2 = decl.name;
-        if (name2 != null) {
-          return name2.element;
+    ASTNode parent = node.parent;
+    if (parent is ConstructorDeclaration) {
+      ConstructorDeclaration decl = parent as ConstructorDeclaration;
+      Identifier returnType = decl.returnType;
+      if (identical(returnType, node)) {
+        SimpleIdentifier name = decl.name;
+        if (name != null) {
+          return name.element;
         }
-        Element element2 = node.element;
-        if (element2 is ClassElement) {
-          return ((element2 as ClassElement)).unnamedConstructor;
+        Element element = node.element;
+        if (element is ClassElement) {
+          return ((element as ClassElement)).unnamedConstructor;
         }
       }
     }
-    if (parent2 is LibraryIdentifier) {
-      ASTNode grandParent = ((parent2 as LibraryIdentifier)).parent;
+    if (parent is LibraryIdentifier) {
+      ASTNode grandParent = ((parent as LibraryIdentifier)).parent;
       if (grandParent is PartOfDirective) {
-        Element element3 = ((grandParent as PartOfDirective)).element;
-        if (element3 is LibraryElement) {
-          return ((element3 as LibraryElement)).definingCompilationUnit;
+        Element element = ((grandParent as PartOfDirective)).element;
+        if (element is LibraryElement) {
+          return ((element as LibraryElement)).definingCompilationUnit;
         }
       }
     }
@@ -13518,9 +13518,9 @@
   Element visitPrefixedIdentifier(PrefixedIdentifier node) => node.element;
   Element visitPrefixExpression(PrefixExpression node) => node.element;
   Element visitStringLiteral(StringLiteral node) {
-    ASTNode parent2 = node.parent;
-    if (parent2 is UriBasedDirective) {
-      return ((parent2 as UriBasedDirective)).uriElement;
+    ASTNode parent = node.parent;
+    if (parent is UriBasedDirective) {
+      return ((parent as UriBasedDirective)).uriElement;
     }
     return null;
   }
@@ -14443,12 +14443,12 @@
   Object visitComment(Comment node) => null;
   Object visitCommentReference(CommentReference node) => null;
   Object visitCompilationUnit(CompilationUnit node) {
-    ScriptTag scriptTag2 = node.scriptTag;
-    NodeList<Directive> directives2 = node.directives;
-    visit(scriptTag2);
-    String prefix = scriptTag2 == null ? "" : " ";
-    visitList4(prefix, directives2, " ");
-    prefix = scriptTag2 == null && directives2.isEmpty ? "" : " ";
+    ScriptTag scriptTag = node.scriptTag;
+    NodeList<Directive> directives = node.directives;
+    visit(scriptTag);
+    String prefix = scriptTag == null ? "" : " ";
+    visitList4(prefix, directives, " ");
+    prefix = scriptTag == null && directives.isEmpty ? "" : " ";
     visitList4(prefix, node.declarations, " ");
     return null;
   }
@@ -14575,10 +14575,10 @@
   Object visitFormalParameterList(FormalParameterList node) {
     String groupEnd = null;
     _writer.print('(');
-    NodeList<FormalParameter> parameters2 = node.parameters;
-    int size2 = parameters2.length;
-    for (int i = 0; i < size2; i++) {
-      FormalParameter parameter = parameters2[i];
+    NodeList<FormalParameter> parameters = node.parameters;
+    int size = parameters.length;
+    for (int i = 0; i < size; i++) {
+      FormalParameter parameter = parameters[i];
       if (i > 0) {
         _writer.print(", ");
       }
@@ -14600,10 +14600,10 @@
     return null;
   }
   Object visitForStatement(ForStatement node) {
-    Expression initialization2 = node.initialization;
+    Expression initialization = node.initialization;
     _writer.print("for (");
-    if (initialization2 != null) {
-      visit(initialization2);
+    if (initialization != null) {
+      visit(initialization);
     } else {
       visit(node.variables);
     }
@@ -14866,12 +14866,12 @@
     return null;
   }
   Object visitReturnStatement(ReturnStatement node) {
-    Expression expression2 = node.expression;
-    if (expression2 == null) {
+    Expression expression = node.expression;
+    if (expression == null) {
       _writer.print("return;");
     } else {
       _writer.print("return ");
-      expression2.accept(this);
+      expression.accept(this);
       _writer.print(";");
     }
     return null;
@@ -15080,8 +15080,8 @@
    */
   void visitList2(NodeList<ASTNode> nodes, String separator) {
     if (nodes != null) {
-      int size2 = nodes.length;
-      for (int i = 0; i < size2; i++) {
+      int size = nodes.length;
+      for (int i = 0; i < size; i++) {
         if (i > 0) {
           _writer.print(separator);
         }
@@ -15098,9 +15098,9 @@
    */
   void visitList3(NodeList<ASTNode> nodes, String separator, String suffix) {
     if (nodes != null) {
-      int size2 = nodes.length;
-      if (size2 > 0) {
-        for (int i = 0; i < size2; i++) {
+      int size = nodes.length;
+      if (size > 0) {
+        for (int i = 0; i < size; i++) {
           if (i > 0) {
             _writer.print(separator);
           }
@@ -15119,10 +15119,10 @@
    */
   void visitList4(String prefix, NodeList<ASTNode> nodes, String separator) {
     if (nodes != null) {
-      int size2 = nodes.length;
-      if (size2 > 0) {
+      int size = nodes.length;
+      if (size > 0) {
         _writer.print(prefix);
-        for (int i = 0; i < size2; i++) {
+        for (int i = 0; i < size; i++) {
           if (i > 0) {
             _writer.print(separator);
           }
@@ -15201,11 +15201,11 @@
   ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause.full(node.keyword, clone3(node.interfaces));
   ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.uri), node.asToken, clone2(node.prefix), clone3(node.combinators), node.semicolon);
   IndexExpression visitIndexExpression(IndexExpression node) {
-    Token period2 = node.period;
-    if (period2 == null) {
+    Token period = node.period;
+    if (period == null) {
       return new IndexExpression.forTarget_full(clone2(node.array), node.leftBracket, clone2(node.index), node.rightBracket);
     } else {
-      return new IndexExpression.forCascade_full(period2, node.leftBracket, clone2(node.index), node.rightBracket);
+      return new IndexExpression.forCascade_full(period, node.leftBracket, clone2(node.index), node.rightBracket);
     }
   }
   InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) => new InstanceCreationExpression.full(node.keyword, clone2(node.constructorName), clone2(node.argumentList));
@@ -15352,9 +15352,9 @@
   }
   Object visitNode(ASTNode node) {
     _immediateChild = node;
-    ASTNode parent2 = node.parent;
-    if (parent2 != null) {
-      parent2.accept(this);
+    ASTNode parent = node.parent;
+    if (parent != null) {
+      parent.accept(this);
     }
     return null;
   }
@@ -15377,9 +15377,9 @@
   }
   void addToScope(SimpleIdentifier identifier) {
     if (identifier != null && isInRange(identifier)) {
-      String name2 = identifier.name;
-      if (!_locals.containsKey(name2)) {
-        _locals[name2] = identifier;
+      String name = identifier.name;
+      if (!_locals.containsKey(name)) {
+        _locals[name] = identifier;
       }
     }
   }
diff --git a/pkg/analyzer_experimental/lib/src/generated/constant.dart b/pkg/analyzer_experimental/lib/src/generated/constant.dart
index 41d94c9..2b39d59 100644
--- a/pkg/analyzer_experimental/lib/src/generated/constant.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/constant.dart
@@ -60,8 +60,8 @@
     }
     List<AnalysisError> errors = new List<AnalysisError>();
     for (ErrorResult_ErrorData data in ((result as ErrorResult)).errorData) {
-      ASTNode node2 = data.node;
-      errors.add(new AnalysisError.con2(_source, node2.offset, node2.length, data.errorCode, []));
+      ASTNode node = data.node;
+      errors.add(new AnalysisError.con2(_source, node.offset, node.length, data.errorCode, []));
     }
     return EvaluationResult.forErrors(new List.from(errors));
   }
@@ -150,11 +150,11 @@
   Map<VariableElement, VariableDeclaration> get variableMap => _variableMap;
   Object visitVariableDeclaration(VariableDeclaration node) {
     super.visitVariableDeclaration(node);
-    Expression initializer2 = node.initializer;
-    if (initializer2 != null && node.isConst()) {
-      VariableElement element2 = node.element;
-      if (element2 != null) {
-        _variableMap[element2] = node;
+    Expression initializer = node.initializer;
+    if (initializer != null && node.isConst()) {
+      VariableElement element = node.element;
+      if (element != null) {
+        _variableMap[element] = node;
       }
     }
     return null;
@@ -238,9 +238,9 @@
     if (result is ErrorResult) {
       List<AnalysisError> errors = new List<AnalysisError>();
       for (ErrorResult_ErrorData data in ((result as ErrorResult)).errorData) {
-        ASTNode node2 = data.node;
-        Source source2 = variable.getAncestor(CompilationUnitElement).source;
-        errors.add(new AnalysisError.con2(source2, node2.offset, node2.length, data.errorCode, []));
+        ASTNode node = data.node;
+        Source source = variable.getAncestor(CompilationUnitElement).source;
+        errors.add(new AnalysisError.con2(source, node.offset, node.length, data.errorCode, []));
       }
     }
   }
@@ -390,18 +390,18 @@
     return ValidResult.RESULT_OBJECT;
   }
   EvaluationResultImpl visitMethodInvocation(MethodInvocation node) {
-    Element element2 = node.methodName.element;
-    if (element2 is FunctionElement) {
-      FunctionElement function = element2 as FunctionElement;
+    Element element = node.methodName.element;
+    if (element is FunctionElement) {
+      FunctionElement function = element as FunctionElement;
       if (function.name == "identical") {
-        NodeList<Expression> arguments2 = node.argumentList.arguments;
-        if (arguments2.length == 2) {
-          Element enclosingElement2 = function.enclosingElement;
-          if (enclosingElement2 is CompilationUnitElement) {
-            LibraryElement library2 = ((enclosingElement2 as CompilationUnitElement)).library;
-            if (library2.isDartCore()) {
-              EvaluationResultImpl leftArgument = arguments2[0].accept(this);
-              EvaluationResultImpl rightArgument = arguments2[1].accept(this);
+        NodeList<Expression> arguments = node.argumentList.arguments;
+        if (arguments.length == 2) {
+          Element enclosingElement = function.enclosingElement;
+          if (enclosingElement is CompilationUnitElement) {
+            LibraryElement library = ((enclosingElement as CompilationUnitElement)).library;
+            if (library.isDartCore()) {
+              EvaluationResultImpl leftArgument = arguments[0].accept(this);
+              EvaluationResultImpl rightArgument = arguments[1].accept(this);
               return leftArgument.equalEqual(node, rightArgument);
             }
           }
@@ -415,17 +415,17 @@
   EvaluationResultImpl visitParenthesizedExpression(ParenthesizedExpression node) => node.expression.accept(this);
   EvaluationResultImpl visitPrefixedIdentifier(PrefixedIdentifier node) => getConstantValue(node, node.element);
   EvaluationResultImpl visitPrefixExpression(PrefixExpression node) {
-    EvaluationResultImpl operand2 = node.operand.accept(this);
-    if (operand2 is ValidResult && ((operand2 as ValidResult)).isNull()) {
+    EvaluationResultImpl operand = node.operand.accept(this);
+    if (operand is ValidResult && ((operand as ValidResult)).isNull()) {
       return error(node, CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
     }
     while (true) {
       if (node.operator.type == TokenType.BANG) {
-        return operand2.logicalNot(node);
+        return operand.logicalNot(node);
       } else if (node.operator.type == TokenType.TILDE) {
-        return operand2.bitNot(node);
+        return operand.bitNot(node);
       } else if (node.operator.type == TokenType.MINUS) {
-        return operand2.negated(node);
+        return operand.negated(node);
       }
       break;
     }
@@ -879,12 +879,12 @@
     this._referenceGraph = referenceGraph;
   }
   Object visitSimpleIdentifier(SimpleIdentifier node) {
-    Element element2 = node.element;
-    if (element2 is PropertyAccessorElement) {
-      element2 = ((element2 as PropertyAccessorElement)).variable;
+    Element element = node.element;
+    if (element is PropertyAccessorElement) {
+      element = ((element as PropertyAccessorElement)).variable;
     }
-    if (element2 is VariableElement) {
-      VariableElement variable = element2 as VariableElement;
+    if (element is VariableElement) {
+      VariableElement variable = element as VariableElement;
       if (variable.isConst()) {
         _referenceGraph.addEdge(_source, variable);
       }
diff --git a/pkg/analyzer_experimental/lib/src/generated/element.dart b/pkg/analyzer_experimental/lib/src/generated/element.dart
index 98ec241..62e1d3d 100644
--- a/pkg/analyzer_experimental/lib/src/generated/element.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/element.dart
@@ -252,6 +252,18 @@
   PropertyAccessorElement lookUpSetter(String setterName, LibraryElement library);
 }
 /**
+ * The interface {@code ClassMemberElement} defines the behavior of elements that are contained
+ * within a {@link ClassElement}.
+ */
+abstract class ClassMemberElement implements Element {
+
+  /**
+   * Return the type in which this constructor is defined.
+   * @return the type in which this constructor is defined
+   */
+  ClassElement get enclosingElement;
+}
+/**
  * The interface {@code CompilationUnitElement} defines the behavior of elements representing a
  * compilation unit.
  * @coverage dart.engine.element
@@ -308,13 +320,7 @@
  * constructor or a factory method defined within a type.
  * @coverage dart.engine.element
  */
-abstract class ConstructorElement implements ExecutableElement {
-
-  /**
-   * Return the type in which this constructor is defined.
-   * @return the type in which this constructor is defined
-   */
-  ClassElement get enclosingElement;
+abstract class ConstructorElement implements ClassMemberElement, ExecutableElement {
 
   /**
    * Return the constructor to which this constructor is redirecting.
@@ -709,13 +715,7 @@
  * within a type.
  * @coverage dart.engine.element
  */
-abstract class FieldElement implements PropertyInducingElement {
-
-  /**
-   * Return the type in which this field is defined.
-   * @return the type in which this field is defined
-   */
-  ClassElement get enclosingElement;
+abstract class FieldElement implements ClassMemberElement, PropertyInducingElement {
 }
 /**
  * The interface {@code FieldFormalParameterElement} defines the behavior of elements representing a
@@ -973,13 +973,7 @@
  * defined within a type.
  * @coverage dart.engine.element
  */
-abstract class MethodElement implements ExecutableElement {
-
-  /**
-   * Return the type in which this method is defined.
-   * @return the type in which this method is defined
-   */
-  ClassElement get enclosingElement;
+abstract class MethodElement implements ClassMemberElement, ExecutableElement {
 
   /**
    * Return {@code true} if this method is abstract. Methods are abstract if they are not external
@@ -1696,9 +1690,9 @@
           ClassElement mixinElement = mixinType.element;
           classesToVisit.add(mixinElement);
         }
-        InterfaceType supertype2 = currentElement.supertype;
-        if (supertype2 != null) {
-          ClassElement superElement = supertype2.element;
+        InterfaceType supertype = currentElement.supertype;
+        if (supertype != null) {
+          ClassElement superElement = supertype.element;
           if (superElement != null) {
             classesToVisit.add(superElement);
           }
@@ -1729,11 +1723,11 @@
           }
         }
       }
-      InterfaceType supertype2 = currentElement.supertype;
-      if (supertype2 == null) {
+      InterfaceType supertype = currentElement.supertype;
+      if (supertype == null) {
         return null;
       }
-      currentElement = supertype2.element;
+      currentElement = supertype.element;
     }
     return null;
   }
@@ -1755,11 +1749,11 @@
           }
         }
       }
-      InterfaceType supertype2 = currentElement.supertype;
-      if (supertype2 == null) {
+      InterfaceType supertype = currentElement.supertype;
+      if (supertype == null) {
         return null;
       }
-      currentElement = supertype2.element;
+      currentElement = supertype.element;
     }
     return null;
   }
@@ -1781,11 +1775,11 @@
           }
         }
       }
-      InterfaceType supertype2 = currentElement.supertype;
-      if (supertype2 == null) {
+      InterfaceType supertype = currentElement.supertype;
+      if (supertype == null) {
         return null;
       }
-      currentElement = supertype2.element;
+      currentElement = supertype.element;
     }
     return null;
   }
@@ -1956,8 +1950,8 @@
           typesToVisit.add(type);
         }
         for (InterfaceType type in currentElement.mixins) {
-          ClassElement element2 = type.element;
-          if (!visitedClasses.contains(element2)) {
+          ClassElement element = type.element;
+          if (!visitedClasses.contains(element)) {
             supertypes.add(type);
           }
         }
@@ -2414,11 +2408,11 @@
     this._nameOffset = nameOffset2;
   }
   String computeDocumentationComment() {
-    AnalysisContext context2 = context;
-    if (context2 == null) {
+    AnalysisContext context = this.context;
+    if (context == null) {
       return null;
     }
-    return context2.computeDocumentationComment(this);
+    return context.computeDocumentationComment(this);
   }
   bool operator ==(Object object) => object != null && object.runtimeType == runtimeType && ((object as Element)).location == location;
   Element getAncestor(Type elementClass) {
@@ -2641,8 +2635,8 @@
   List<String> get components => _components;
   String get encoding {
     JavaStringBuilder builder = new JavaStringBuilder();
-    int length2 = _components.length;
-    for (int i = 0; i < length2; i++) {
+    int length = _components.length;
+    for (int i = 0; i < length; i++) {
       if (i > 0) {
         builder.appendChar(_SEPARATOR_CHAR);
       }
@@ -2662,11 +2656,11 @@
     List<String> components = new List<String>();
     JavaStringBuilder builder = new JavaStringBuilder();
     int index = 0;
-    int length2 = encoding.length;
-    while (index < length2) {
+    int length = encoding.length;
+    while (index < length) {
       int currentChar = encoding.codeUnitAt(index);
       if (currentChar == _SEPARATOR_CHAR) {
-        if (index + 1 < length2 && encoding.codeUnitAt(index + 1) == _SEPARATOR_CHAR) {
+        if (index + 1 < length && encoding.codeUnitAt(index + 1) == _SEPARATOR_CHAR) {
           builder.appendChar(_SEPARATOR_CHAR);
           index += 2;
         } else {
@@ -2691,8 +2685,8 @@
    * @param component the component to be appended to the builder
    */
   void encode(JavaStringBuilder builder, String component) {
-    int length2 = component.length;
-    for (int i = 0; i < length2; i++) {
+    int length = component.length;
+    for (int i = 0; i < length; i++) {
       int currentChar = component.codeUnitAt(i);
       if (currentChar == _SEPARATOR_CHAR) {
         builder.appendChar(_SEPARATOR_CHAR);
@@ -3652,9 +3646,9 @@
   List<PrefixElement> get prefixes {
     Set<PrefixElement> prefixes = new Set<PrefixElement>();
     for (ImportElement element in _imports) {
-      PrefixElement prefix2 = element.prefix;
-      if (prefix2 != null) {
-        javaSetAdd(prefixes, prefix2);
+      PrefixElement prefix = element.prefix;
+      if (prefix != null) {
+        javaSetAdd(prefixes, prefix);
       }
     }
     return new List.from(prefixes);
@@ -3721,9 +3715,9 @@
   void set imports(List<ImportElement> imports2) {
     for (ImportElement importElement in imports2) {
       ((importElement as ImportElementImpl)).enclosingElement = this;
-      PrefixElementImpl prefix2 = importElement.prefix as PrefixElementImpl;
-      if (prefix2 != null) {
-        prefix2.enclosingElement = this;
+      PrefixElementImpl prefix = importElement.prefix as PrefixElementImpl;
+      if (prefix != null) {
+        prefix.enclosingElement = this;
       }
     }
     this._imports = imports2;
@@ -3757,8 +3751,8 @@
     visited.add(this);
     for (int index = 0; index < visited.length; index++) {
       LibraryElement library = visited[index];
-      Source source2 = library.definingCompilationUnit.source;
-      if (source2 == htmlLibSource) {
+      Source source = library.definingCompilationUnit.source;
+      if (source == htmlLibSource) {
         return true;
       }
       for (LibraryElement importedLibrary in library.importedLibraries) {
@@ -3865,8 +3859,8 @@
   ClassElement get enclosingElement => super.enclosingElement as ClassElement;
   ElementKind get kind => ElementKind.METHOD;
   String get name {
-    String name2 = super.name;
-    if (isOperator() && name2 == "-") {
+    String name = super.name;
+    if (isOperator() && name == "-") {
       if (parameters.length == 0) {
         return "unary-";
       }
@@ -4637,28 +4631,28 @@
   bool isConst() => baseElement.isConst();
   bool isFactory() => baseElement.isFactory();
   String toString() {
-    ConstructorElement baseElement2 = baseElement;
-    List<ParameterElement> parameters2 = parameters;
-    FunctionType type2 = type;
+    ConstructorElement baseElement = this.baseElement;
+    List<ParameterElement> parameters = this.parameters;
+    FunctionType type = this.type;
     JavaStringBuilder builder = new JavaStringBuilder();
-    builder.append(baseElement2.enclosingElement.displayName);
+    builder.append(baseElement.enclosingElement.displayName);
     String name = displayName;
     if (name != null && !name.isEmpty) {
       builder.append(".");
       builder.append(name);
     }
     builder.append("(");
-    int parameterCount = parameters2.length;
+    int parameterCount = parameters.length;
     for (int i = 0; i < parameterCount; i++) {
       if (i > 0) {
         builder.append(", ");
       }
-      builder.append(parameters2[i]).toString();
+      builder.append(parameters[i]).toString();
     }
     builder.append(")");
-    if (type2 != null) {
+    if (type != null) {
       builder.append(" -> ");
-      builder.append(type2.returnType);
+      builder.append(type.returnType);
     }
     return builder.toString();
   }
@@ -4904,25 +4898,25 @@
   ClassElement get enclosingElement => baseElement.enclosingElement;
   bool isAbstract() => baseElement.isAbstract();
   String toString() {
-    MethodElement baseElement2 = baseElement;
-    List<ParameterElement> parameters2 = parameters;
-    FunctionType type2 = type;
+    MethodElement baseElement = this.baseElement;
+    List<ParameterElement> parameters = this.parameters;
+    FunctionType type = this.type;
     JavaStringBuilder builder = new JavaStringBuilder();
-    builder.append(baseElement2.enclosingElement.displayName);
+    builder.append(baseElement.enclosingElement.displayName);
     builder.append(".");
-    builder.append(baseElement2.displayName);
+    builder.append(baseElement.displayName);
     builder.append("(");
-    int parameterCount = parameters2.length;
+    int parameterCount = parameters.length;
     for (int i = 0; i < parameterCount; i++) {
       if (i > 0) {
         builder.append(", ");
       }
-      builder.append(parameters2[i]).toString();
+      builder.append(parameters[i]).toString();
     }
     builder.append(")");
-    if (type2 != null) {
+    if (type != null) {
       builder.append(" -> ");
-      builder.append(type2.returnType);
+      builder.append(type.returnType);
     }
     return builder.toString();
   }
@@ -4967,9 +4961,9 @@
   accept(ElementVisitor visitor) => visitor.visitParameterElement(this);
   Element getAncestor(Type elementClass) {
     Element element = baseElement.getAncestor(elementClass);
-    ParameterizedType definingType2 = definingType;
-    if (definingType2 is InterfaceType) {
-      InterfaceType definingInterfaceType = definingType2 as InterfaceType;
+    ParameterizedType definingType = this.definingType;
+    if (definingType is InterfaceType) {
+      InterfaceType definingInterfaceType = definingType as InterfaceType;
       if (element is ConstructorElement) {
         return ConstructorMember.from((element as ConstructorElement), definingInterfaceType) as Element;
       } else if (element is MethodElement) {
@@ -4998,14 +4992,14 @@
   SourceRange get visibleRange => baseElement.visibleRange;
   bool isInitializingFormal() => baseElement.isInitializingFormal();
   String toString() {
-    ParameterElement baseElement2 = baseElement;
+    ParameterElement baseElement = this.baseElement;
     String left = "";
     String right = "";
     while (true) {
-      if (baseElement2.parameterKind == ParameterKind.NAMED) {
+      if (baseElement.parameterKind == ParameterKind.NAMED) {
         left = "{";
         right = "}";
-      } else if (baseElement2.parameterKind == ParameterKind.POSITIONAL) {
+      } else if (baseElement.parameterKind == ParameterKind.POSITIONAL) {
         left = "[";
         right = "]";
       }
@@ -5015,7 +5009,7 @@
     builder.append(left);
     builder.append(type);
     builder.append(" ");
-    builder.append(baseElement2.displayName);
+    builder.append(baseElement.displayName);
     builder.append(right);
     return builder.toString();
   }
@@ -5068,11 +5062,11 @@
   PropertyAccessorElement get correspondingSetter => from(baseElement.correspondingSetter, definingType);
   Element get enclosingElement => baseElement.enclosingElement;
   PropertyInducingElement get variable {
-    PropertyInducingElement variable2 = baseElement.variable;
-    if (variable2 is FieldElement) {
-      return FieldMember.from(((variable2 as FieldElement)), definingType);
+    PropertyInducingElement variable = baseElement.variable;
+    if (variable is FieldElement) {
+      return FieldMember.from(((variable as FieldElement)), definingType);
     }
-    return variable2;
+    return variable;
   }
   bool isAbstract() => baseElement.isAbstract();
   bool isGetter() => baseElement.isGetter();
@@ -5297,8 +5291,8 @@
     return element == otherType.element && JavaArrays.equals(_normalParameterTypes, otherType._normalParameterTypes) && JavaArrays.equals(_optionalParameterTypes, otherType._optionalParameterTypes) && equals2(_namedParameterTypes, otherType._namedParameterTypes) && _returnType == otherType._returnType;
   }
   String get displayName {
-    String name2 = name;
-    if (name2 == null) {
+    String name = this.name;
+    if (name == null) {
       JavaStringBuilder builder = new JavaStringBuilder();
       builder.append("(");
       bool needsComma = false;
@@ -5354,40 +5348,40 @@
       } else {
         builder.append(_returnType.displayName);
       }
-      name2 = builder.toString();
+      name = builder.toString();
     }
-    return name2;
+    return name;
   }
   Map<String, Type2> get namedParameterTypes => _namedParameterTypes;
   List<Type2> get normalParameterTypes => _normalParameterTypes;
   List<Type2> get optionalParameterTypes => _optionalParameterTypes;
   List<ParameterElement> get parameters {
-    List<ParameterElement> baseParameters2 = baseParameters;
-    int parameterCount = baseParameters2.length;
+    List<ParameterElement> baseParameters = this.baseParameters;
+    int parameterCount = baseParameters.length;
     if (parameterCount == 0) {
-      return baseParameters2;
+      return baseParameters;
     }
     List<ParameterElement> specializedParameters = new List<ParameterElement>(parameterCount);
     for (int i = 0; i < parameterCount; i++) {
-      specializedParameters[i] = ParameterMember.from(baseParameters2[i], this);
+      specializedParameters[i] = ParameterMember.from(baseParameters[i], this);
     }
     return specializedParameters;
   }
   Type2 get returnType => _returnType;
   List<Type2> get typeArguments => _typeArguments;
   List<TypeVariableElement> get typeVariables {
-    Element element2 = element;
-    if (element2 is FunctionTypeAliasElement) {
-      return ((element2 as FunctionTypeAliasElement)).typeVariables;
+    Element element = this.element;
+    if (element is FunctionTypeAliasElement) {
+      return ((element as FunctionTypeAliasElement)).typeVariables;
     }
     return TypeVariableElementImpl.EMPTY_ARRAY;
   }
   int get hashCode {
-    Element element2 = element;
-    if (element2 == null) {
+    Element element = this.element;
+    if (element == null) {
       return 0;
     }
-    return element2.hashCode;
+    return element.hashCode;
   }
   bool isSubtypeOf(Type2 type) {
     if (type == null) {
@@ -5516,8 +5510,8 @@
     if (argumentTypes.length == 0) {
       return this;
     }
-    Element element2 = element;
-    FunctionTypeImpl newType = (element2 is ExecutableElement) ? new FunctionTypeImpl.con1((element2 as ExecutableElement)) : new FunctionTypeImpl.con2((element2 as FunctionTypeAliasElement));
+    Element element = this.element;
+    FunctionTypeImpl newType = (element is ExecutableElement) ? new FunctionTypeImpl.con1((element as ExecutableElement)) : new FunctionTypeImpl.con2((element as FunctionTypeAliasElement));
     newType.returnType = _returnType.substitute2(argumentTypes, parameterTypes);
     newType.normalParameterTypes = TypeImpl.substitute(_normalParameterTypes, argumentTypes, parameterTypes);
     newType.optionalParameterTypes = TypeImpl.substitute(_optionalParameterTypes, argumentTypes, parameterTypes);
@@ -5586,11 +5580,11 @@
    * @return the base parameter elements of this function element, not {@code null}.
    */
   List<ParameterElement> get baseParameters {
-    Element element2 = element;
-    if (element2 is ExecutableElement) {
-      return ((element2 as ExecutableElement)).parameters;
+    Element element = this.element;
+    if (element is ExecutableElement) {
+      return ((element as ExecutableElement)).parameters;
     } else {
-      return ((element2 as FunctionTypeAliasElement)).parameters;
+      return ((element as FunctionTypeAliasElement)).parameters;
     }
   }
 }
@@ -5651,8 +5645,8 @@
           }
         }
       }
-      InterfaceType supertype2 = classElement.supertype;
-      pathLength = computeLongestInheritancePathToObject2(supertype2, depth + 1, visitedClasses);
+      InterfaceType supertype = classElement.supertype;
+      pathLength = computeLongestInheritancePathToObject2(supertype, depth + 1, visitedClasses);
       if (pathLength > longestPath) {
         longestPath = pathLength;
       }
@@ -5672,19 +5666,19 @@
    * @see #getLeastUpperBound(Type)
    */
   static Set<InterfaceType> computeSuperinterfaceSet2(InterfaceType type, Set<InterfaceType> set) {
-    Element element2 = type.element;
-    if (element2 != null && element2 is ClassElement) {
-      ClassElement classElement = element2 as ClassElement;
+    Element element = type.element;
+    if (element != null && element is ClassElement) {
+      ClassElement classElement = element as ClassElement;
       List<InterfaceType> superinterfaces = classElement.interfaces;
       for (InterfaceType superinterface in superinterfaces) {
         if (javaSetAdd(set, superinterface)) {
           computeSuperinterfaceSet2(superinterface, set);
         }
       }
-      InterfaceType supertype2 = classElement.supertype;
-      if (supertype2 != null) {
-        if (javaSetAdd(set, supertype2)) {
-          computeSuperinterfaceSet2(supertype2, set);
+      InterfaceType supertype = classElement.supertype;
+      if (supertype != null) {
+        if (javaSetAdd(set, supertype)) {
+          computeSuperinterfaceSet2(supertype, set);
         }
       }
     }
@@ -5785,15 +5779,15 @@
   PropertyAccessorElement getGetter(String getterName) => PropertyAccessorMember.from(((element as ClassElementImpl)).getGetter(getterName), this);
   List<InterfaceType> get interfaces {
     ClassElement classElement = element;
-    List<InterfaceType> interfaces2 = classElement.interfaces;
-    List<TypeVariableElement> typeVariables2 = classElement.typeVariables;
-    if (typeVariables2.length == 0) {
-      return interfaces2;
+    List<InterfaceType> interfaces = classElement.interfaces;
+    List<TypeVariableElement> typeVariables = classElement.typeVariables;
+    if (typeVariables.length == 0) {
+      return interfaces;
     }
-    int count = interfaces2.length;
+    int count = interfaces.length;
     List<InterfaceType> typedInterfaces = new List<InterfaceType>(count);
     for (int i = 0; i < count; i++) {
-      typedInterfaces[i] = interfaces2[i].substitute2(_typeArguments, TypeVariableTypeImpl.getTypes(typeVariables2));
+      typedInterfaces[i] = interfaces[i].substitute2(_typeArguments, TypeVariableTypeImpl.getTypes(typeVariables));
     }
     return typedInterfaces;
   }
@@ -5841,51 +5835,51 @@
   MethodElement getMethod(String methodName) => MethodMember.from(((element as ClassElementImpl)).getMethod(methodName), this);
   List<InterfaceType> get mixins {
     ClassElement classElement = element;
-    List<InterfaceType> mixins2 = classElement.mixins;
-    List<TypeVariableElement> typeVariables2 = classElement.typeVariables;
-    if (typeVariables2.length == 0) {
-      return mixins2;
+    List<InterfaceType> mixins = classElement.mixins;
+    List<TypeVariableElement> typeVariables = classElement.typeVariables;
+    if (typeVariables.length == 0) {
+      return mixins;
     }
-    int count = mixins2.length;
+    int count = mixins.length;
     List<InterfaceType> typedMixins = new List<InterfaceType>(count);
     for (int i = 0; i < count; i++) {
-      typedMixins[i] = mixins2[i].substitute2(_typeArguments, TypeVariableTypeImpl.getTypes(typeVariables2));
+      typedMixins[i] = mixins[i].substitute2(_typeArguments, TypeVariableTypeImpl.getTypes(typeVariables));
     }
     return typedMixins;
   }
   PropertyAccessorElement getSetter(String setterName) => PropertyAccessorMember.from(((element as ClassElementImpl)).getSetter(setterName), this);
   InterfaceType get superclass {
     ClassElement classElement = element;
-    InterfaceType supertype2 = classElement.supertype;
-    if (supertype2 == null) {
+    InterfaceType supertype = classElement.supertype;
+    if (supertype == null) {
       return null;
     }
-    return supertype2.substitute2(_typeArguments, TypeVariableTypeImpl.getTypes(classElement.typeVariables));
+    return supertype.substitute2(_typeArguments, TypeVariableTypeImpl.getTypes(classElement.typeVariables));
   }
   List<Type2> get typeArguments => _typeArguments;
   List<TypeVariableElement> get typeVariables => element.typeVariables;
   int get hashCode {
-    ClassElement element2 = element;
-    if (element2 == null) {
+    ClassElement element = this.element;
+    if (element == null) {
       return 0;
     }
-    return element2.hashCode;
+    return element.hashCode;
   }
   bool isDartCoreFunction() {
-    ClassElement element2 = element;
-    if (element2 == null) {
+    ClassElement element = this.element;
+    if (element == null) {
       return false;
     }
-    return element2.name == "Function" && element2.library.isDartCore();
+    return element.name == "Function" && element.library.isDartCore();
   }
   bool isDirectSupertypeOf(InterfaceType type) {
     ClassElement i = element;
     ClassElement j = type.element;
-    InterfaceType supertype2 = j.supertype;
-    if (supertype2 == null) {
+    InterfaceType supertype = j.supertype;
+    if (supertype == null) {
       return false;
     }
-    ClassElement supertypeElement = supertype2.element;
+    ClassElement supertypeElement = supertype.element;
     if (supertypeElement == i) {
       return true;
     }
@@ -6092,21 +6086,21 @@
       }
       return true;
     }
-    ClassElement element2 = element;
-    if (element2 == null || visitedClasses.contains(element2)) {
+    ClassElement element = this.element;
+    if (element == null || visitedClasses.contains(element)) {
       return false;
     }
-    javaSetAdd(visitedClasses, element2);
-    InterfaceType supertype2 = element2.supertype;
-    if (supertype2 != null && ((supertype2 as InterfaceTypeImpl)).isMoreSpecificThan2(s, visitedClasses)) {
+    javaSetAdd(visitedClasses, element);
+    InterfaceType supertype = element.supertype;
+    if (supertype != null && ((supertype as InterfaceTypeImpl)).isMoreSpecificThan2(s, visitedClasses)) {
       return true;
     }
-    for (InterfaceType interfaceType in element2.interfaces) {
+    for (InterfaceType interfaceType in element.interfaces) {
       if (((interfaceType as InterfaceTypeImpl)).isMoreSpecificThan2(s, visitedClasses)) {
         return true;
       }
     }
-    for (InterfaceType mixinType in element2.mixins) {
+    for (InterfaceType mixinType in element.mixins) {
       if (((mixinType as InterfaceTypeImpl)).isMoreSpecificThan2(s, visitedClasses)) {
         return true;
       }
@@ -6139,8 +6133,8 @@
     } else if (typeS.isDartCoreFunction() && elementT.getMethod("call") != null) {
       return true;
     }
-    InterfaceType supertype2 = elementT.supertype;
-    if (supertype2 != null && ((supertype2 as InterfaceTypeImpl)).isSubtypeOf2(typeS, visitedClasses)) {
+    InterfaceType supertype = elementT.supertype;
+    if (supertype != null && ((supertype as InterfaceTypeImpl)).isSubtypeOf2(typeS, visitedClasses)) {
       return true;
     }
     List<InterfaceType> interfaceTypes = elementT.interfaces;
@@ -6174,12 +6168,12 @@
    * @return the result of performing the substitution on each of the types
    */
   static List<Type2> substitute(List<Type2> types, List<Type2> argumentTypes, List<Type2> parameterTypes) {
-    int length2 = types.length;
-    if (length2 == 0) {
+    int length = types.length;
+    if (length == 0) {
       return types;
     }
-    List<Type2> newTypes = new List<Type2>(length2);
-    for (int i = 0; i < length2; i++) {
+    List<Type2> newTypes = new List<Type2>(length);
+    for (int i = 0; i < length; i++) {
       newTypes[i] = types[i].substitute2(argumentTypes, parameterTypes);
     }
     return newTypes;
@@ -6277,8 +6271,8 @@
   }
   bool isSubtypeOf(Type2 type) => true;
   Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) {
-    int length2 = parameterTypes.length;
-    for (int i = 0; i < length2; i++) {
+    int length = parameterTypes.length;
+    for (int i = 0; i < length; i++) {
       if (parameterTypes[i] == this) {
         return argumentTypes[i];
       }
diff --git a/pkg/analyzer_experimental/lib/src/generated/engine.dart b/pkg/analyzer_experimental/lib/src/generated/engine.dart
index b82126a..0b7365a 100644
--- a/pkg/analyzer_experimental/lib/src/generated/engine.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/engine.dart
@@ -1919,20 +1919,20 @@
     if (element == null) {
       return null;
     }
-    Source source2 = element.source;
-    if (source2 == null) {
+    Source source = element.source;
+    if (source == null) {
       return null;
     }
     List<CharSequence> contentHolder = new List<CharSequence>(1);
     try {
-      source2.getContents(new Source_ContentReceiver_6(contentHolder));
+      source.getContents(new Source_ContentReceiver_6(contentHolder));
     } catch (exception) {
-      throw new AnalysisException.con2("Could not get contents of ${source2.fullName}", exception);
+      throw new AnalysisException.con2("Could not get contents of ${source.fullName}", exception);
     }
     if (contentHolder[0] == null) {
       return null;
     }
-    CompilationUnit unit = parseCompilationUnit(source2);
+    CompilationUnit unit = parseCompilationUnit(source);
     if (unit == null) {
       return null;
     }
@@ -1944,8 +1944,8 @@
         if (comment == null) {
           return null;
         }
-        int offset2 = comment.offset;
-        return contentHolder[0].subSequence(offset2, offset2 + comment.length).toString();
+        int offset = comment.offset;
+        return contentHolder[0].subSequence(offset, offset + comment.length).toString();
       }
       nameNode = nameNode.parent;
     }
@@ -2101,21 +2101,21 @@
   }
   AnalysisOptions get analysisOptions => _options;
   Element getElement(ElementLocation location) {
-    List<String> components2 = ((location as ElementLocationImpl)).components;
+    List<String> components = ((location as ElementLocationImpl)).components;
     ElementImpl element;
     {
-      Source librarySource = _sourceFactory.fromEncoding(components2[0]);
+      Source librarySource = _sourceFactory.fromEncoding(components[0]);
       try {
         element = computeLibraryElement(librarySource) as ElementImpl;
       } on AnalysisException catch (exception) {
         return null;
       }
     }
-    for (int i = 1; i < components2.length; i++) {
+    for (int i = 1; i < components.length; i++) {
       if (element == null) {
         return null;
       }
-      element = element.getChild(components2[i]);
+      element = element.getChild(components[i]);
     }
     return element;
   }
@@ -2246,9 +2246,9 @@
     return null;
   }
   Namespace getPublicNamespace(LibraryElement library) {
-    Source source2 = library.definingCompilationUnit.source;
+    Source source = library.definingCompilationUnit.source;
     {
-      DartEntry dartEntry = getDartEntry(source2);
+      DartEntry dartEntry = getDartEntry(source);
       if (dartEntry == null) {
         return null;
       }
@@ -2258,7 +2258,7 @@
         namespace = builder.createPublicNamespace(library);
         DartEntryImpl dartCopy = dartEntry.writableCopy;
         dartCopy.setValue(DartEntry.PUBLIC_NAMESPACE, namespace);
-        _sourceMap[source2] = dartCopy;
+        _sourceMap[source] = dartCopy;
       }
       return namespace;
     }
@@ -3075,9 +3075,9 @@
    */
   void recordResolutionResults(LibraryResolver resolver) {
     Source htmlSource = _sourceFactory.forUri(DartSdk.DART_HTML);
-    RecordingErrorListener errorListener2 = resolver.errorListener;
+    RecordingErrorListener errorListener = resolver.errorListener;
     for (Library library in resolver.resolvedLibraries) {
-      Source librarySource2 = library.librarySource;
+      Source librarySource = library.librarySource;
       Set<Source> referencedLibraries = new Set<Source>();
       for (Library referencedLibrary in library.exports) {
         javaSetAdd(referencedLibraries, referencedLibrary.librarySource);
@@ -3087,18 +3087,18 @@
       }
       for (Source source in library.compilationUnitSources) {
         CompilationUnit unit = library.getAST(source);
-        List<AnalysisError> errors = errorListener2.getErrors2(source);
+        List<AnalysisError> errors = errorListener.getErrors2(source);
         unit.resolutionErrors = errors;
-        LineInfo lineInfo2 = unit.lineInfo;
+        LineInfo lineInfo = unit.lineInfo;
         {
           DartEntry dartEntry = getDartEntry(source);
           if (dartEntry != null) {
             DartEntryImpl dartCopy = dartEntry.writableCopy;
-            dartCopy.setValue(SourceEntry.LINE_INFO, lineInfo2);
+            dartCopy.setValue(SourceEntry.LINE_INFO, lineInfo);
             dartCopy.setState(DartEntry.PARSED_UNIT, CacheState.FLUSHED);
-            dartCopy.setValue2(DartEntry.RESOLVED_UNIT, librarySource2, unit);
-            dartCopy.setValue2(DartEntry.RESOLUTION_ERRORS, librarySource2, errors);
-            if (identical(source, librarySource2)) {
+            dartCopy.setValue2(DartEntry.RESOLVED_UNIT, librarySource, unit);
+            dartCopy.setValue2(DartEntry.RESOLUTION_ERRORS, librarySource, errors);
+            if (identical(source, librarySource)) {
               recordElementData(dartCopy, library.libraryElement, htmlSource);
               List<Source> libraries;
               if (referencedLibraries.isEmpty) {
@@ -3111,7 +3111,7 @@
             _sourceMap[source] = dartCopy;
             ChangeNoticeImpl notice = getNotice(source);
             notice.compilationUnit = unit;
-            notice.setErrors(dartCopy.allErrors, lineInfo2);
+            notice.setErrors(dartCopy.allErrors, lineInfo);
           }
         }
       }
@@ -3158,16 +3158,22 @@
       htmlCopy.setState(HtmlEntry.RESOLVED_UNIT, CacheState.INVALID);
       _sourceMap[source] = htmlCopy;
     } else if (sourceEntry is DartEntry) {
+      Set<Source> librariesToInvalidate = new Set<Source>();
       List<Source> containingLibraries = getLibrariesContaining(source);
+      for (Source containingLibrary in containingLibraries) {
+        javaSetAdd(librariesToInvalidate, containingLibrary);
+        for (Source dependentLibrary in getLibrariesDependingOn(containingLibrary)) {
+          javaSetAdd(librariesToInvalidate, dependentLibrary);
+        }
+      }
       DartEntryImpl dartCopy = ((sourceEntry as DartEntry)).writableCopy;
       dartCopy.setState(SourceEntry.LINE_INFO, CacheState.INVALID);
       dartCopy.setState(DartEntry.PARSE_ERRORS, CacheState.INVALID);
       dartCopy.setState(DartEntry.PARSED_UNIT, CacheState.INVALID);
       dartCopy.setState(DartEntry.SOURCE_KIND, CacheState.INVALID);
       _sourceMap[source] = dartCopy;
-      invalidateLibraryResolution(source);
-      for (Source librarySource in containingLibraries) {
-        invalidateLibraryResolution(librarySource);
+      for (Source library in librariesToInvalidate) {
+        invalidateLibraryResolution(library);
       }
     }
   }
@@ -3623,8 +3629,8 @@
     }
   }
   Namespace getPublicNamespace(LibraryElement library) {
-    Source source2 = library.source;
-    if (source2.isInSystemLibrary()) {
+    Source source = library.source;
+    if (source.isInSystemLibrary()) {
       return _sdkAnalysisContext.getPublicNamespace(library);
     } else {
       return super.getPublicNamespace(library);
@@ -4290,12 +4296,12 @@
    * @return an array of errors (not {@code null}, contains no {@code null}s)
    */
   List<AnalysisError> get errors {
-    Set<MapEntry<Source, List<AnalysisError>>> entrySet2 = getMapEntrySet(_errors);
-    if (entrySet2.length == 0) {
+    Set<MapEntry<Source, List<AnalysisError>>> entrySet = getMapEntrySet(_errors);
+    if (entrySet.length == 0) {
       return AnalysisError.NO_ERRORS;
     }
     List<AnalysisError> resultList = new List<AnalysisError>();
-    for (MapEntry<Source, List<AnalysisError>> entry in entrySet2) {
+    for (MapEntry<Source, List<AnalysisError>> entry in entrySet) {
       resultList.addAll(entry.getValue());
     }
     return new List.from(resultList);
@@ -4316,11 +4322,11 @@
     }
   }
   void onError(AnalysisError event) {
-    Source source2 = event.source;
-    List<AnalysisError> errorsForSource = _errors[source2];
-    if (_errors[source2] == null) {
+    Source source = event.source;
+    List<AnalysisError> errorsForSource = _errors[source];
+    if (_errors[source] == null) {
       errorsForSource = new List<AnalysisError>();
-      _errors[source2] = errorsForSource;
+      _errors[source] = errorsForSource;
     }
     errorsForSource.add(event);
   }
diff --git a/pkg/analyzer_experimental/lib/src/generated/error.dart b/pkg/analyzer_experimental/lib/src/generated/error.dart
index 32cfa70..018ee78 100644
--- a/pkg/analyzer_experimental/lib/src/generated/error.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/error.dart
@@ -1913,36 +1913,24 @@
   static final StaticWarningCode INVOCATION_OF_NON_FUNCTION = new StaticWarningCode('INVOCATION_OF_NON_FUNCTION', 34, "");
 
   /**
-   * 15.1 Static Types: A type <i>T</i> is malformed iff: <li><i>T</i> has the form <i>id</i> or the
-   * form <i>prefix.id</i>, and in the enclosing lexical scope, the name <i>id</i> (respectively
-   * <i>prefix.id</i>) does not denote a type.</li> <li><i>T</i> denotes a type variable in the
-   * enclosing lexical scope, but occurs in the signature or body of a static member.</li> <li>
-   * <i>T</i> is a parameterized type of the form <i>G&lt;S<sub>1</sub>, .., S<sub>n</sub>&gt;</i>,
-   * and <i>G</i> is malformed.</li></ul>
-   * <p>
-   * Any use of a malformed type gives rise to a static warning.
-   */
-  static final StaticWarningCode MALFORMED_TYPE = new StaticWarningCode('MALFORMED_TYPE', 35, "");
-
-  /**
    * 7.3 Setters: It is a static warning if a class has a setter named <i>v=</i> with argument type
    * <i>T</i> and a getter named <i>v</i> with return type <i>S</i>, and <i>T</i> may not be
    * assigned to <i>S</i>.
    */
-  static final StaticWarningCode MISMATCHED_GETTER_AND_SETTER_TYPES = new StaticWarningCode('MISMATCHED_GETTER_AND_SETTER_TYPES', 36, "The parameter type for setter '%s' is %s which is not assignable to its getter (of type %s)");
+  static final StaticWarningCode MISMATCHED_GETTER_AND_SETTER_TYPES = new StaticWarningCode('MISMATCHED_GETTER_AND_SETTER_TYPES', 35, "The parameter type for setter '%s' is %s which is not assignable to its getter (of type %s)");
 
   /**
    * 12.11.1 New: It is a static warning if <i>q</i> is a constructor of an abstract class and
    * <i>q</i> is not a factory constructor.
    */
-  static final StaticWarningCode NEW_WITH_ABSTRACT_CLASS = new StaticWarningCode('NEW_WITH_ABSTRACT_CLASS', 37, "Abstract classes cannot be created with a 'new' expression");
+  static final StaticWarningCode NEW_WITH_ABSTRACT_CLASS = new StaticWarningCode('NEW_WITH_ABSTRACT_CLASS', 36, "Abstract classes cannot be created with a 'new' expression");
 
   /**
    * 12.11.1 New: It is a static warning if <i>T</i> is not a class accessible in the current scope,
    * optionally followed by type arguments.
    * @param name the name of the non-type element
    */
-  static final StaticWarningCode NEW_WITH_NON_TYPE = new StaticWarningCode('NEW_WITH_NON_TYPE', 38, "The name '%s' is not a class");
+  static final StaticWarningCode NEW_WITH_NON_TYPE = new StaticWarningCode('NEW_WITH_NON_TYPE', 37, "The name '%s' is not a class");
 
   /**
    * 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the current scope then:
@@ -1953,7 +1941,7 @@
    * a<sub>n+1</sub>, &hellip; x<sub>n+k</sub>: a<sub>n+kM/sub>)</i> it is a static warning if the
    * type <i>T</i> does not declare a constructor with the same name as the declaration of <i>T</i>.
    */
-  static final StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR = new StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR', 39, "The class '%s' does not have a constructor '%s'");
+  static final StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR = new StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR', 38, "The class '%s' does not have a constructor '%s'");
 
   /**
    * 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the current scope then:
@@ -1964,7 +1952,7 @@
    * a<sub>n+1</sub>, &hellip; x<sub>n+k</sub>: a<sub>n+kM/sub>)</i> it is a static warning if the
    * type <i>T</i> does not declare a constructor with the same name as the declaration of <i>T</i>.
    */
-  static final StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT = new StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT', 40, "The class '%s' does not have a default constructor");
+  static final StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT = new StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT', 39, "The class '%s' does not have a default constructor");
 
   /**
    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract class inherits an
@@ -1991,7 +1979,7 @@
    * @param name fourth member name
    * @param additionalCount the number of additional missing members that aren't listed
    */
-  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS', 41, "Missing inherited members: %s'%s.%s', %s'%s.%s', %s'%s.%s', %s'%s.%s' and %d more");
+  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS', 40, "Missing inherited members: %s'%s.%s', %s'%s.%s', %s'%s.%s', %s'%s.%s' and %d more");
 
   /**
    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract class inherits an
@@ -2017,7 +2005,7 @@
    * @param enclosingClass enclosing class of the fourth missing member
    * @param name fourth member name
    */
-  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR', 42, "Missing inherited members: %s'%s.%s', %s'%s.%s', %s'%s.%s' and %s'%s.%s'");
+  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR', 41, "Missing inherited members: %s'%s.%s', %s'%s.%s', %s'%s.%s' and %s'%s.%s'");
 
   /**
    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract class inherits an
@@ -2030,7 +2018,7 @@
    * @param enclosingClass enclosing class of the missing member
    * @param name member name
    */
-  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE', 43, "Missing inherited member %s'%s.%s'");
+  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE', 42, "Missing inherited member %s'%s.%s'");
 
   /**
    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract class inherits an
@@ -2052,7 +2040,7 @@
    * @param enclosingClass enclosing class of the third missing member
    * @param name third member name
    */
-  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE', 44, "Missing inherited members: %s'%s.%s', %s'%s.%s' and %s'%s.%s'");
+  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE', 43, "Missing inherited members: %s'%s.%s', %s'%s.%s' and %s'%s.%s'");
 
   /**
    * 7.9.1 Inheritance and Overriding: It is a static warning if a non-abstract class inherits an
@@ -2070,7 +2058,7 @@
    * @param enclosingClass enclosing class of the second missing member
    * @param name second member name
    */
-  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO', 45, "Missing inherited members: %s'%s.%s' and %s'%s.%s'");
+  static final StaticWarningCode NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO = new StaticWarningCode('NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO', 44, "Missing inherited members: %s'%s.%s' and %s'%s.%s'");
 
   /**
    * 13.11 Try: An on-catch clause of the form <i>on T catch (p<sub>1</sub>, p<sub>2</sub>) s</i> or
@@ -2079,18 +2067,31 @@
    * catch clause.
    * @param name the name of the non-type element
    */
-  static final StaticWarningCode NON_TYPE_IN_CATCH_CLAUSE = new StaticWarningCode('NON_TYPE_IN_CATCH_CLAUSE', 46, "The name '%s' is not a type and cannot be used in an on-catch clause");
+  static final StaticWarningCode NON_TYPE_IN_CATCH_CLAUSE = new StaticWarningCode('NON_TYPE_IN_CATCH_CLAUSE', 45, "The name '%s' is not a type and cannot be used in an on-catch clause");
 
   /**
    * 7.1.1 Operators: It is a static warning if the return type of the user-declared operator \[\]= is
    * explicitly declared and not void.
    */
-  static final StaticWarningCode NON_VOID_RETURN_FOR_OPERATOR = new StaticWarningCode('NON_VOID_RETURN_FOR_OPERATOR', 47, "The return type of the operator []= must be 'void'");
+  static final StaticWarningCode NON_VOID_RETURN_FOR_OPERATOR = new StaticWarningCode('NON_VOID_RETURN_FOR_OPERATOR', 46, "The return type of the operator []= must be 'void'");
 
   /**
    * 7.3 Setters: It is a static warning if a setter declares a return type other than void.
    */
-  static final StaticWarningCode NON_VOID_RETURN_FOR_SETTER = new StaticWarningCode('NON_VOID_RETURN_FOR_SETTER', 48, "The return type of the setter must be 'void'");
+  static final StaticWarningCode NON_VOID_RETURN_FOR_SETTER = new StaticWarningCode('NON_VOID_RETURN_FOR_SETTER', 47, "The return type of the setter must be 'void'");
+
+  /**
+   * 15.1 Static Types: A type <i>T</i> is malformed iff: <li><i>T</i> has the form <i>id</i> or the
+   * form <i>prefix.id</i>, and in the enclosing lexical scope, the name <i>id</i> (respectively
+   * <i>prefix.id</i>) does not denote a type.</li> <li><i>T</i> denotes a type variable in the
+   * enclosing lexical scope, but occurs in the signature or body of a static member.</li> <li>
+   * <i>T</i> is a parameterized type of the form <i>G&lt;S<sub>1</sub>, .., S<sub>n</sub>&gt;</i>,
+   * and <i>G</i> is malformed.</li></ul>
+   * <p>
+   * Any use of a malformed type gives rise to a static warning.
+   * @param nonTypeName the name that is not a type
+   */
+  static final StaticWarningCode NOT_A_TYPE = new StaticWarningCode('NOT_A_TYPE', 48, "%s is not a type");
 
   /**
    * 12.14.2 Binding Actuals to Formals: It is a static warning if <i>m < h</i> or if <i>m > n</i>.
@@ -2167,17 +2168,29 @@
   static final StaticWarningCode TYPE_TEST_NON_TYPE = new StaticWarningCode('TYPE_TEST_NON_TYPE', 58, "The name '%s' is not a type and cannot be used in an 'is' expression");
 
   /**
+   * 15.1 Static Types: A type <i>T</i> is malformed iff: <li><i>T</i> has the form <i>id</i> or the
+   * form <i>prefix.id</i>, and in the enclosing lexical scope, the name <i>id</i> (respectively
+   * <i>prefix.id</i>) does not denote a type.</li> <li><i>T</i> denotes a type variable in the
+   * enclosing lexical scope, but occurs in the signature or body of a static member.</li> <li>
+   * <i>T</i> is a parameterized type of the form <i>G&lt;S<sub>1</sub>, .., S<sub>n</sub>&gt;</i>,
+   * and <i>G</i> is malformed.</li></ul>
+   * <p>
+   * Any use of a malformed type gives rise to a static warning.
+   */
+  static final StaticWarningCode TYPE_VARIABLE_IN_STATIC_SCOPE = new StaticWarningCode('TYPE_VARIABLE_IN_STATIC_SCOPE', 59, "");
+
+  /**
    * 12.15.3 Static Invocation: A static method invocation <i>i</i> has the form
    * <i>C.m(a<sub>1</sub>, &hellip;, a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, &hellip;
    * x<sub>n+k</sub>: a<sub>n+k</sub>)</i>. It is a static warning if <i>C</i> does not denote a
    * class in the current scope.
    */
-  static final StaticWarningCode UNDEFINED_CLASS = new StaticWarningCode('UNDEFINED_CLASS', 59, "Undefined class '%s'");
+  static final StaticWarningCode UNDEFINED_CLASS = new StaticWarningCode('UNDEFINED_CLASS', 60, "Undefined class '%s'");
 
   /**
    * Same as {@link #UNDEFINED_CLASS}, but to catch using "boolean" instead of "bool".
    */
-  static final StaticWarningCode UNDEFINED_CLASS_BOOLEAN = new StaticWarningCode('UNDEFINED_CLASS_BOOLEAN', 60, "Undefined class 'boolean'; did you mean 'bool'?");
+  static final StaticWarningCode UNDEFINED_CLASS_BOOLEAN = new StaticWarningCode('UNDEFINED_CLASS_BOOLEAN', 61, "Undefined class 'boolean'; did you mean 'bool'?");
 
   /**
    * 12.17 Getter Invocation: It is a static warning if there is no class <i>C</i> in the enclosing
@@ -2186,7 +2199,7 @@
    * @param getterName the name of the getter
    * @param enclosingType the name of the enclosing type where the getter is being looked for
    */
-  static final StaticWarningCode UNDEFINED_GETTER = new StaticWarningCode('UNDEFINED_GETTER', 61, "There is no such getter '%s' in '%s'");
+  static final StaticWarningCode UNDEFINED_GETTER = new StaticWarningCode('UNDEFINED_GETTER', 62, "There is no such getter '%s' in '%s'");
 
   /**
    * 12.30 Identifier Reference: It is as static warning if an identifier expression of the form
@@ -2194,7 +2207,7 @@
    * setter) or variable initializer and there is no declaration <i>d</i> with name <i>id</i> in the
    * lexical scope enclosing the expression.
    */
-  static final StaticWarningCode UNDEFINED_IDENTIFIER = new StaticWarningCode('UNDEFINED_IDENTIFIER', 62, "Undefined name '%s'");
+  static final StaticWarningCode UNDEFINED_IDENTIFIER = new StaticWarningCode('UNDEFINED_IDENTIFIER', 63, "Undefined name '%s'");
 
   /**
    * 12.14.2 Binding Actuals to Formals: Furthermore, each <i>q<sub>i</sub></i>, <i>1<=i<=l</i>,
@@ -2202,7 +2215,7 @@
    * <i>p<sub>n+k</sub></i>} or a static warning occurs.
    * @param name the name of the requested named parameter
    */
-  static final StaticWarningCode UNDEFINED_NAMED_PARAMETER = new StaticWarningCode('UNDEFINED_NAMED_PARAMETER', 63, "The named parameter '%s' is not defined");
+  static final StaticWarningCode UNDEFINED_NAMED_PARAMETER = new StaticWarningCode('UNDEFINED_NAMED_PARAMETER', 64, "The named parameter '%s' is not defined");
 
   /**
    * 12.18 Assignment: It is as static warning if an assignment of the form <i>v = e</i> occurs
@@ -2216,7 +2229,7 @@
    * @param setterName the name of the getter
    * @param enclosingType the name of the enclosing type where the setter is being looked for
    */
-  static final StaticWarningCode UNDEFINED_SETTER = new StaticWarningCode('UNDEFINED_SETTER', 64, "There is no such setter '%s' in '%s'");
+  static final StaticWarningCode UNDEFINED_SETTER = new StaticWarningCode('UNDEFINED_SETTER', 65, "There is no such setter '%s' in '%s'");
 
   /**
    * 12.15.3 Static Invocation: It is a static warning if <i>C</i> does not declare a static method
@@ -2224,8 +2237,8 @@
    * @param methodName the name of the method
    * @param enclosingType the name of the enclosing type where the method is being looked for
    */
-  static final StaticWarningCode UNDEFINED_STATIC_METHOD_OR_GETTER = new StaticWarningCode('UNDEFINED_STATIC_METHOD_OR_GETTER', 65, "There is no such static method '%s' in '%s'");
-  static final List<StaticWarningCode> values = [AMBIGUOUS_IMPORT, ARGUMENT_TYPE_NOT_ASSIGNABLE, ASSIGNMENT_TO_FINAL, CASE_BLOCK_NOT_TERMINATED, CAST_TO_NON_TYPE, COMMENT_REFERENCE_CONSTRUCTOR_NOT_VISIBLE, COMMENT_REFERENCE_IDENTIFIER_NOT_VISIBLE, COMMENT_REFERENCE_UNDECLARED_CONSTRUCTOR, COMMENT_REFERENCE_UNDECLARED_IDENTIFIER, COMMENT_REFERENCE_URI_NOT_LIBRARY, CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER, CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER, CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER, CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER, CONST_WITH_ABSTRACT_CLASS, EQUAL_KEYS_IN_MAP, EXPORT_DUPLICATED_LIBRARY_NAME, EXTRA_POSITIONAL_ARGUMENTS, FIELD_INITIALIZER_NOT_ASSIGNABLE, FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, FINAL_NOT_INITIALIZED, IMPORT_DUPLICATED_LIBRARY_NAME, INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD, INCORRECT_NUMBER_OF_ARGUMENTS, INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC, INVALID_FACTORY_NAME, INVALID_GETTER_OVERRIDE_RETURN_TYPE, INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE, INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE, INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE, INVALID_METHOD_OVERRIDE_RETURN_TYPE, INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES, INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE, INVOCATION_OF_NON_FUNCTION, MALFORMED_TYPE, MISMATCHED_GETTER_AND_SETTER_TYPES, NEW_WITH_ABSTRACT_CLASS, NEW_WITH_NON_TYPE, NEW_WITH_UNDEFINED_CONSTRUCTOR, NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO, NON_TYPE_IN_CATCH_CLAUSE, NON_VOID_RETURN_FOR_OPERATOR, NON_VOID_RETURN_FOR_SETTER, NOT_ENOUGH_REQUIRED_ARGUMENTS, PART_OF_DIFFERENT_LIBRARY, REDIRECT_TO_INVALID_FUNCTION_TYPE, REDIRECT_TO_INVALID_RETURN_TYPE, REDIRECT_TO_MISSING_CONSTRUCTOR, REDIRECT_TO_NON_CLASS, RETURN_WITHOUT_VALUE, STATIC_ACCESS_TO_INSTANCE_MEMBER, SWITCH_EXPRESSION_NOT_ASSIGNABLE, TYPE_TEST_NON_TYPE, UNDEFINED_CLASS, UNDEFINED_CLASS_BOOLEAN, UNDEFINED_GETTER, UNDEFINED_IDENTIFIER, UNDEFINED_NAMED_PARAMETER, UNDEFINED_SETTER, UNDEFINED_STATIC_METHOD_OR_GETTER];
+  static final StaticWarningCode UNDEFINED_STATIC_METHOD_OR_GETTER = new StaticWarningCode('UNDEFINED_STATIC_METHOD_OR_GETTER', 66, "There is no such static method '%s' in '%s'");
+  static final List<StaticWarningCode> values = [AMBIGUOUS_IMPORT, ARGUMENT_TYPE_NOT_ASSIGNABLE, ASSIGNMENT_TO_FINAL, CASE_BLOCK_NOT_TERMINATED, CAST_TO_NON_TYPE, COMMENT_REFERENCE_CONSTRUCTOR_NOT_VISIBLE, COMMENT_REFERENCE_IDENTIFIER_NOT_VISIBLE, COMMENT_REFERENCE_UNDECLARED_CONSTRUCTOR, COMMENT_REFERENCE_UNDECLARED_IDENTIFIER, COMMENT_REFERENCE_URI_NOT_LIBRARY, CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER, CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER, CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER, CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER, CONST_WITH_ABSTRACT_CLASS, EQUAL_KEYS_IN_MAP, EXPORT_DUPLICATED_LIBRARY_NAME, EXTRA_POSITIONAL_ARGUMENTS, FIELD_INITIALIZER_NOT_ASSIGNABLE, FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, FINAL_NOT_INITIALIZED, IMPORT_DUPLICATED_LIBRARY_NAME, INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD, INCORRECT_NUMBER_OF_ARGUMENTS, INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC, INVALID_FACTORY_NAME, INVALID_GETTER_OVERRIDE_RETURN_TYPE, INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE, INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE, INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE, INVALID_METHOD_OVERRIDE_RETURN_TYPE, INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES, INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE, INVOCATION_OF_NON_FUNCTION, MISMATCHED_GETTER_AND_SETTER_TYPES, NEW_WITH_ABSTRACT_CLASS, NEW_WITH_NON_TYPE, NEW_WITH_UNDEFINED_CONSTRUCTOR, NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE, NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO, NON_TYPE_IN_CATCH_CLAUSE, NON_VOID_RETURN_FOR_OPERATOR, NON_VOID_RETURN_FOR_SETTER, NOT_A_TYPE, NOT_ENOUGH_REQUIRED_ARGUMENTS, PART_OF_DIFFERENT_LIBRARY, REDIRECT_TO_INVALID_FUNCTION_TYPE, REDIRECT_TO_INVALID_RETURN_TYPE, REDIRECT_TO_MISSING_CONSTRUCTOR, REDIRECT_TO_NON_CLASS, RETURN_WITHOUT_VALUE, STATIC_ACCESS_TO_INSTANCE_MEMBER, SWITCH_EXPRESSION_NOT_ASSIGNABLE, TYPE_TEST_NON_TYPE, TYPE_VARIABLE_IN_STATIC_SCOPE, UNDEFINED_CLASS, UNDEFINED_CLASS_BOOLEAN, UNDEFINED_GETTER, UNDEFINED_IDENTIFIER, UNDEFINED_NAMED_PARAMETER, UNDEFINED_SETTER, UNDEFINED_STATIC_METHOD_OR_GETTER];
 
   /// The name of this enum constant, as declared in the enum declaration.
   final String name;
diff --git a/pkg/analyzer_experimental/lib/src/generated/html.dart b/pkg/analyzer_experimental/lib/src/generated/html.dart
index 741c07f..02ca349 100644
--- a/pkg/analyzer_experimental/lib/src/generated/html.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/html.dart
@@ -8,6 +8,7 @@
 import 'error.dart';
 import 'instrumentation.dart';
 import 'element.dart' show HtmlElementImpl;
+import 'engine.dart' show AnalysisEngine;
 /**
  * Instances of the class {@code Token} represent a token that was scanned from the input. Each
  * token knows which token follows it, acting as the head of a linked list of tokens.
@@ -227,12 +228,12 @@
    * @return the number of characters in the node's source range
    */
   int get length {
-    Token beginToken2 = beginToken;
-    Token endToken2 = endToken;
-    if (beginToken2 == null || endToken2 == null) {
+    Token beginToken = this.beginToken;
+    Token endToken = this.endToken;
+    if (beginToken == null || endToken == null) {
       return -1;
     }
-    return endToken2.offset + endToken2.length - beginToken2.offset;
+    return endToken.offset + endToken.length - beginToken.offset;
   }
 
   /**
@@ -242,8 +243,8 @@
    * range
    */
   int get offset {
-    Token beginToken2 = beginToken;
-    if (beginToken2 == null) {
+    Token beginToken = this.beginToken;
+    if (beginToken == null) {
       return -1;
     }
     return beginToken.offset;
@@ -806,18 +807,18 @@
     return null;
   }
   Object visitXmlAttributeNode(XmlAttributeNode node) {
-    String name2 = node.name.lexeme;
-    Token value2 = node.value;
-    if (name2.length == 0) {
+    String name = node.name.lexeme;
+    Token value = node.value;
+    if (name.length == 0) {
       _writer.print("__");
     } else {
-      _writer.print(name2);
+      _writer.print(name);
     }
     _writer.print("=");
-    if (value2 == null) {
+    if (value == null) {
       _writer.print("__");
     } else {
-      _writer.print(value2.lexeme);
+      _writer.print(value.lexeme);
     }
     return null;
   }
@@ -1161,8 +1162,8 @@
    * @return a collection of zero or more attributes (not {@code null}, contains no {@code null}s)
    */
   List<XmlAttributeNode> parseAttributes() {
-    TokenType type2 = _currentToken.type;
-    if (identical(type2, TokenType.GT) || identical(type2, TokenType.SLASH_GT) || identical(type2, TokenType.EOF)) {
+    TokenType type = _currentToken.type;
+    if (identical(type, TokenType.GT) || identical(type, TokenType.SLASH_GT) || identical(type, TokenType.EOF)) {
       return XmlTagNode.NO_ATTRIBUTES;
     }
     List<XmlAttributeNode> attributes = new List<XmlAttributeNode>();
@@ -1187,8 +1188,8 @@
    * @return a list of nodes (not {@code null}, contains no {@code null}s)
    */
   List<XmlTagNode> parseChildTagNodes() {
-    TokenType type2 = _currentToken.type;
-    if (identical(type2, TokenType.LT_SLASH) || identical(type2, TokenType.EOF)) {
+    TokenType type = _currentToken.type;
+    if (identical(type, TokenType.LT_SLASH) || identical(type, TokenType.EOF)) {
       return XmlTagNode.NO_TAG_NODES;
     }
     List<XmlTagNode> nodes = new List<XmlTagNode>();
diff --git a/pkg/analyzer_experimental/lib/src/generated/parser.dart b/pkg/analyzer_experimental/lib/src/generated/parser.dart
index c24b42e..b03b6f2 100644
--- a/pkg/analyzer_experimental/lib/src/generated/parser.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/parser.dart
@@ -590,21 +590,21 @@
    */
   List<List<int>> getCodeBlockRanges(String comment) {
     List<List<int>> ranges = new List<List<int>>();
-    int length2 = comment.length;
+    int length = comment.length;
     int index = 0;
     if (comment.startsWith("/**") || comment.startsWith("///")) {
       index = 3;
     }
-    while (index < length2) {
+    while (index < length) {
       int currentChar = comment.codeUnitAt(index);
       if (currentChar == 0xD || currentChar == 0xA) {
         index = index + 1;
-        while (index < length2 && Character.isWhitespace(comment.codeUnitAt(index))) {
+        while (index < length && Character.isWhitespace(comment.codeUnitAt(index))) {
           index = index + 1;
         }
         if (JavaString.startsWithBefore(comment, "*     ", index)) {
           int end = index + 6;
-          while (end < length2 && comment.codeUnitAt(end) != 0xD && comment.codeUnitAt(end) != 0xA) {
+          while (end < length && comment.codeUnitAt(end) != 0xD && comment.codeUnitAt(end) != 0xA) {
             end = end + 1;
           }
           ranges.add(<int> [index, end]);
@@ -613,7 +613,7 @@
       } else if (JavaString.startsWithBefore(comment, "[:", index)) {
         int end = comment.indexOf(":]", index + 2);
         if (end < 0) {
-          end = length2;
+          end = length;
         }
         ranges.add(<int> [index, end]);
         index = end + 1;
@@ -732,8 +732,8 @@
     if (token == null) {
       return false;
     }
-    TokenType type2 = token.type;
-    return identical(type2, TokenType.EQ) || identical(type2, TokenType.COMMA) || identical(type2, TokenType.SEMICOLON) || matches3(token, Keyword.IN);
+    TokenType type = token.type;
+    return identical(type, TokenType.EQ) || identical(type, TokenType.COMMA) || identical(type, TokenType.SEMICOLON) || matches3(token, Keyword.IN);
   }
 
   /**
@@ -748,9 +748,9 @@
    * @return {@code true} if the bracketed text is followed by a link address
    */
   bool isLinkText(String comment, int rightIndex) {
-    int length2 = comment.length;
+    int length = comment.length;
     int index = rightIndex + 1;
-    if (index >= length2) {
+    if (index >= length) {
       return false;
     }
     int nextChar = comment.codeUnitAt(index);
@@ -759,7 +759,7 @@
     }
     while (Character.isWhitespace(nextChar)) {
       index = index + 1;
-      if (index >= length2) {
+      if (index >= length) {
         return false;
       }
       nextChar = comment.codeUnitAt(index);
@@ -793,8 +793,8 @@
       token = token.next.next;
     }
     if (identical(token.type, TokenType.KEYWORD)) {
-      Keyword keyword2 = ((token as KeywordToken)).keyword;
-      return identical(keyword2, Keyword.CASE) || identical(keyword2, Keyword.DEFAULT);
+      Keyword keyword = ((token as KeywordToken)).keyword;
+      return identical(keyword, Keyword.CASE) || identical(keyword, Keyword.DEFAULT);
     }
     return false;
   }
@@ -812,10 +812,10 @@
     int firstOffset = 2147483647;
     for (Token token in tokens) {
       if (token != null) {
-        int offset2 = token.offset;
-        if (offset2 < firstOffset) {
+        int offset = token.offset;
+        if (offset < firstOffset) {
           first = token;
-          firstOffset = offset2;
+          firstOffset = offset;
         }
       }
     }
@@ -865,28 +865,28 @@
     if (currentType != type2) {
       if (identical(type2, TokenType.GT)) {
         if (identical(currentType, TokenType.GT_GT)) {
-          int offset2 = _currentToken.offset;
-          Token first = new Token(TokenType.GT, offset2);
-          Token second = new Token(TokenType.GT, offset2 + 1);
+          int offset = _currentToken.offset;
+          Token first = new Token(TokenType.GT, offset);
+          Token second = new Token(TokenType.GT, offset + 1);
           second.setNext(_currentToken.next);
           first.setNext(second);
           _currentToken.previous.setNext(first);
           _currentToken = first;
           return true;
         } else if (identical(currentType, TokenType.GT_EQ)) {
-          int offset3 = _currentToken.offset;
-          Token first = new Token(TokenType.GT, offset3);
-          Token second = new Token(TokenType.EQ, offset3 + 1);
+          int offset = _currentToken.offset;
+          Token first = new Token(TokenType.GT, offset);
+          Token second = new Token(TokenType.EQ, offset + 1);
           second.setNext(_currentToken.next);
           first.setNext(second);
           _currentToken.previous.setNext(first);
           _currentToken = first;
           return true;
         } else if (identical(currentType, TokenType.GT_GT_EQ)) {
-          int offset4 = _currentToken.offset;
-          Token first = new Token(TokenType.GT, offset4);
-          Token second = new Token(TokenType.GT, offset4 + 1);
-          Token third = new Token(TokenType.EQ, offset4 + 2);
+          int offset = _currentToken.offset;
+          Token first = new Token(TokenType.GT, offset);
+          Token second = new Token(TokenType.GT, offset + 1);
+          Token third = new Token(TokenType.EQ, offset + 2);
           third.setNext(_currentToken.next);
           second.setNext(third);
           first.setNext(second);
@@ -1723,10 +1723,10 @@
     List<CommentReference> references = new List<CommentReference>();
     for (Token token in tokens) {
       String comment = token.lexeme;
-      int length2 = comment.length;
+      int length = comment.length;
       List<List<int>> codeBlockRanges = getCodeBlockRanges(comment);
       int leftIndex = comment.indexOf('[');
-      while (leftIndex >= 0 && leftIndex + 1 < length2) {
+      while (leftIndex >= 0 && leftIndex + 1 < length) {
         List<int> range = findRange(codeBlockRanges, leftIndex);
         if (range == null) {
           int rightIndex = comment.indexOf(']', leftIndex);
@@ -2558,11 +2558,11 @@
           if (variableList == null) {
             reportError7(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH, []);
           } else {
-            NodeList<VariableDeclaration> variables2 = variableList.variables;
-            if (variables2.length > 1) {
-              reportError7(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [variables2.length.toString()]);
+            NodeList<VariableDeclaration> variables = variableList.variables;
+            if (variables.length > 1) {
+              reportError7(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [variables.length.toString()]);
             }
-            VariableDeclaration variable = variables2[0];
+            VariableDeclaration variable = variables[0];
             if (variable.initializer != null) {
               reportError7(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH, []);
             }
@@ -3313,34 +3313,34 @@
       }
       return parseBlock();
     } else if (matches5(TokenType.KEYWORD) && !((_currentToken as KeywordToken)).keyword.isPseudoKeyword()) {
-      Keyword keyword2 = ((_currentToken as KeywordToken)).keyword;
-      if (identical(keyword2, Keyword.ASSERT)) {
+      Keyword keyword = ((_currentToken as KeywordToken)).keyword;
+      if (identical(keyword, Keyword.ASSERT)) {
         return parseAssertStatement();
-      } else if (identical(keyword2, Keyword.BREAK)) {
+      } else if (identical(keyword, Keyword.BREAK)) {
         return parseBreakStatement();
-      } else if (identical(keyword2, Keyword.CONTINUE)) {
+      } else if (identical(keyword, Keyword.CONTINUE)) {
         return parseContinueStatement();
-      } else if (identical(keyword2, Keyword.DO)) {
+      } else if (identical(keyword, Keyword.DO)) {
         return parseDoStatement();
-      } else if (identical(keyword2, Keyword.FOR)) {
+      } else if (identical(keyword, Keyword.FOR)) {
         return parseForStatement();
-      } else if (identical(keyword2, Keyword.IF)) {
+      } else if (identical(keyword, Keyword.IF)) {
         return parseIfStatement();
-      } else if (identical(keyword2, Keyword.RETHROW)) {
+      } else if (identical(keyword, Keyword.RETHROW)) {
         return new ExpressionStatement.full(parseRethrowExpression(), expect2(TokenType.SEMICOLON));
-      } else if (identical(keyword2, Keyword.RETURN)) {
+      } else if (identical(keyword, Keyword.RETURN)) {
         return parseReturnStatement();
-      } else if (identical(keyword2, Keyword.SWITCH)) {
+      } else if (identical(keyword, Keyword.SWITCH)) {
         return parseSwitchStatement();
-      } else if (identical(keyword2, Keyword.THROW)) {
+      } else if (identical(keyword, Keyword.THROW)) {
         return new ExpressionStatement.full(parseThrowExpression(), expect2(TokenType.SEMICOLON));
-      } else if (identical(keyword2, Keyword.TRY)) {
+      } else if (identical(keyword, Keyword.TRY)) {
         return parseTryStatement();
-      } else if (identical(keyword2, Keyword.WHILE)) {
+      } else if (identical(keyword, Keyword.WHILE)) {
         return parseWhileStatement();
-      } else if (identical(keyword2, Keyword.VAR) || identical(keyword2, Keyword.FINAL)) {
+      } else if (identical(keyword, Keyword.VAR) || identical(keyword, Keyword.FINAL)) {
         return parseVariableDeclarationStatement(commentAndMetadata);
-      } else if (identical(keyword2, Keyword.VOID)) {
+      } else if (identical(keyword, Keyword.VOID)) {
         TypeName returnType = parseReturnType();
         if (matchesIdentifier() && matchesAny(peek(), [TokenType.OPEN_PAREN, TokenType.OPEN_CURLY_BRACKET, TokenType.FUNCTION])) {
           return parseFunctionDeclarationStatement2(commentAndMetadata, returnType);
@@ -3356,7 +3356,7 @@
           reportError7(ParserErrorCode.MISSING_STATEMENT, []);
           return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON));
         }
-      } else if (identical(keyword2, Keyword.CONST)) {
+      } else if (identical(keyword, Keyword.CONST)) {
         if (matchesAny(peek(), [TokenType.LT, TokenType.OPEN_CURLY_BRACKET, TokenType.OPEN_SQUARE_BRACKET, TokenType.INDEX])) {
           return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.SEMICOLON));
         } else if (matches4(peek(), TokenType.IDENTIFIER)) {
@@ -3368,7 +3368,7 @@
           }
         }
         return parseVariableDeclarationStatement(commentAndMetadata);
-      } else if (identical(keyword2, Keyword.NEW) || identical(keyword2, Keyword.TRUE) || identical(keyword2, Keyword.FALSE) || identical(keyword2, Keyword.NULL) || identical(keyword2, Keyword.SUPER) || identical(keyword2, Keyword.THIS)) {
+      } else if (identical(keyword, Keyword.NEW) || identical(keyword, Keyword.TRUE) || identical(keyword, Keyword.FALSE) || identical(keyword, Keyword.NULL) || identical(keyword, Keyword.SUPER) || identical(keyword, Keyword.THIS)) {
         return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.SEMICOLON));
       } else {
         reportError7(ParserErrorCode.MISSING_STATEMENT, []);
@@ -3421,9 +3421,9 @@
       FormalParameterList parameters = parseFormalParameterList();
       return new FunctionTypedFormalParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, holder.type, identifier, parameters);
     }
-    TypeName type2 = holder.type;
-    if (type2 != null && matches3(type2.name.beginToken, Keyword.VOID)) {
-      reportError8(ParserErrorCode.VOID_PARAMETER, type2.name.beginToken, []);
+    TypeName type = holder.type;
+    if (type != null && matches3(type.name.beginToken, Keyword.VOID)) {
+      reportError8(ParserErrorCode.VOID_PARAMETER, type.name.beginToken, []);
     }
     if (thisKeyword != null) {
       return new FieldFormalParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier);
@@ -3459,9 +3459,9 @@
     }
     SimpleIdentifier name = new SimpleIdentifier.full(andAdvance);
     if (matches5(TokenType.EQ)) {
-      Token previous2 = _currentToken.previous;
-      if ((matches4(previous2, TokenType.EQ_EQ) || matches4(previous2, TokenType.BANG_EQ)) && _currentToken.offset == previous2.offset + 2) {
-        reportError7(ParserErrorCode.INVALID_OPERATOR, ["${previous2.lexeme}${_currentToken.lexeme}"]);
+      Token previous = _currentToken.previous;
+      if ((matches4(previous, TokenType.EQ_EQ) || matches4(previous, TokenType.BANG_EQ)) && _currentToken.offset == previous.offset + 2) {
+        reportError7(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_currentToken.lexeme}"]);
         advance();
       }
     }
@@ -4263,9 +4263,9 @@
           return new PrefixExpression.full(operator, parseUnaryExpression());
         }
         if (identical(operator.type, TokenType.MINUS_MINUS)) {
-          int offset2 = operator.offset;
-          Token firstOperator = new Token(TokenType.MINUS, offset2);
-          Token secondOperator = new Token(TokenType.MINUS, offset2 + 1);
+          int offset = operator.offset;
+          Token firstOperator = new Token(TokenType.MINUS, offset);
+          Token secondOperator = new Token(TokenType.MINUS, offset + 1);
           secondOperator.setNext(_currentToken);
           firstOperator.setNext(secondOperator);
           operator.previous.setNext(firstOperator);
@@ -4480,15 +4480,15 @@
    */
   Token skipFinalConstVarOrType(Token startToken) {
     if (matches3(startToken, Keyword.FINAL) || matches3(startToken, Keyword.CONST)) {
-      Token next2 = startToken.next;
-      if (matchesIdentifier2(next2.next) || matches4(next2.next, TokenType.LT) || matches3(next2.next, Keyword.THIS)) {
-        return skipTypeName(next2);
+      Token next = startToken.next;
+      if (matchesIdentifier2(next.next) || matches4(next.next, TokenType.LT) || matches3(next.next, Keyword.THIS)) {
+        return skipTypeName(next);
       }
     } else if (matches3(startToken, Keyword.VAR)) {
       return startToken.next;
     } else if (matchesIdentifier2(startToken)) {
-      Token next3 = startToken.next;
-      if (matchesIdentifier2(next3) || matches4(next3, TokenType.LT) || matches3(next3, Keyword.THIS) || (matches4(next3, TokenType.PERIOD) && matchesIdentifier2(next3.next) && (matchesIdentifier2(next3.next.next) || matches4(next3.next.next, TokenType.LT) || matches3(next3.next.next, Keyword.THIS)))) {
+      Token next = startToken.next;
+      if (matchesIdentifier2(next) || matches4(next, TokenType.LT) || matches3(next, Keyword.THIS) || (matches4(next, TokenType.PERIOD) && matchesIdentifier2(next.next) && (matchesIdentifier2(next.next.next) || matches4(next.next.next, TokenType.LT) || matches3(next.next.next, Keyword.THIS)))) {
         return skipReturnType(startToken);
       }
     }
@@ -4530,20 +4530,20 @@
     if (!matches4(startToken, TokenType.OPEN_PAREN)) {
       return null;
     }
-    Token next2 = startToken.next;
-    if (matches4(next2, TokenType.CLOSE_PAREN)) {
-      return next2.next;
+    Token next = startToken.next;
+    if (matches4(next, TokenType.CLOSE_PAREN)) {
+      return next.next;
     }
-    if (matchesAny(next2, [TokenType.AT, TokenType.OPEN_SQUARE_BRACKET, TokenType.OPEN_CURLY_BRACKET]) || matches3(next2, Keyword.VOID) || (matchesIdentifier2(next2) && (matchesAny(next2.next, [TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
+    if (matchesAny(next, [TokenType.AT, TokenType.OPEN_SQUARE_BRACKET, TokenType.OPEN_CURLY_BRACKET]) || matches3(next, Keyword.VOID) || (matchesIdentifier2(next) && (matchesAny(next.next, [TokenType.COMMA, TokenType.CLOSE_PAREN])))) {
       return skipPastMatchingToken(startToken);
     }
-    if (matchesIdentifier2(next2) && matches4(next2.next, TokenType.OPEN_PAREN)) {
-      Token afterParameters = skipFormalParameterList(next2.next);
+    if (matchesIdentifier2(next) && matches4(next.next, TokenType.OPEN_PAREN)) {
+      Token afterParameters = skipFormalParameterList(next.next);
       if (afterParameters != null && (matchesAny(afterParameters, [TokenType.COMMA, TokenType.CLOSE_PAREN]))) {
         return skipPastMatchingToken(startToken);
       }
     }
-    Token afterType = skipFinalConstVarOrType(next2);
+    Token afterType = skipFinalConstVarOrType(next);
     if (afterType == null) {
       return null;
     }
@@ -4648,20 +4648,20 @@
    */
   Token skipStringInterpolation(Token startToken) {
     Token token = startToken;
-    TokenType type2 = token.type;
-    while (identical(type2, TokenType.STRING_INTERPOLATION_EXPRESSION) || identical(type2, TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
-      if (identical(type2, TokenType.STRING_INTERPOLATION_EXPRESSION)) {
+    TokenType type = token.type;
+    while (identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION) || identical(type, TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
+      if (identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION)) {
         token = token.next;
-        type2 = token.type;
+        type = token.type;
         int bracketNestingLevel = 1;
         while (bracketNestingLevel > 0) {
-          if (identical(type2, TokenType.EOF)) {
+          if (identical(type, TokenType.EOF)) {
             return null;
-          } else if (identical(type2, TokenType.OPEN_CURLY_BRACKET)) {
+          } else if (identical(type, TokenType.OPEN_CURLY_BRACKET)) {
             bracketNestingLevel++;
-          } else if (identical(type2, TokenType.CLOSE_CURLY_BRACKET)) {
+          } else if (identical(type, TokenType.CLOSE_CURLY_BRACKET)) {
             bracketNestingLevel--;
-          } else if (identical(type2, TokenType.STRING)) {
+          } else if (identical(type, TokenType.STRING)) {
             token = skipStringLiteral(token);
             if (token == null) {
               return null;
@@ -4669,10 +4669,10 @@
           } else {
             token = token.next;
           }
-          type2 = token.type;
+          type = token.type;
         }
         token = token.next;
-        type2 = token.type;
+        type = token.type;
       } else {
         token = token.next;
         if (token.type != TokenType.IDENTIFIER) {
@@ -4680,10 +4680,10 @@
         }
         token = token.next;
       }
-      type2 = token.type;
-      if (identical(type2, TokenType.STRING)) {
+      type = token.type;
+      if (identical(type, TokenType.STRING)) {
         token = token.next;
-        type2 = token.type;
+        type = token.type;
       }
     }
     return token;
@@ -4707,8 +4707,8 @@
     Token token = startToken;
     while (token != null && matches4(token, TokenType.STRING)) {
       token = token.next;
-      TokenType type2 = token.type;
-      if (identical(type2, TokenType.STRING_INTERPOLATION_EXPRESSION) || identical(type2, TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
+      TokenType type = token.type;
+      if (identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION) || identical(type, TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
         token = skipStringInterpolation(token);
       }
     }
@@ -4800,36 +4800,36 @@
       return null;
     }
     int depth = 1;
-    Token next2 = startToken.next;
+    Token next = startToken.next;
     while (depth > 0) {
-      if (matches4(next2, TokenType.EOF)) {
+      if (matches4(next, TokenType.EOF)) {
         return null;
-      } else if (matches4(next2, TokenType.LT)) {
+      } else if (matches4(next, TokenType.LT)) {
         depth++;
-      } else if (matches4(next2, TokenType.GT)) {
+      } else if (matches4(next, TokenType.GT)) {
         depth--;
-      } else if (matches4(next2, TokenType.GT_EQ)) {
+      } else if (matches4(next, TokenType.GT_EQ)) {
         if (depth == 1) {
-          Token fakeEquals = new Token(TokenType.EQ, next2.offset + 2);
-          fakeEquals.setNextWithoutSettingPrevious(next2.next);
+          Token fakeEquals = new Token(TokenType.EQ, next.offset + 2);
+          fakeEquals.setNextWithoutSettingPrevious(next.next);
           return fakeEquals;
         }
         depth--;
-      } else if (matches4(next2, TokenType.GT_GT)) {
+      } else if (matches4(next, TokenType.GT_GT)) {
         depth -= 2;
-      } else if (matches4(next2, TokenType.GT_GT_EQ)) {
+      } else if (matches4(next, TokenType.GT_GT_EQ)) {
         if (depth < 2) {
           return null;
         } else if (depth == 2) {
-          Token fakeEquals = new Token(TokenType.EQ, next2.offset + 2);
-          fakeEquals.setNextWithoutSettingPrevious(next2.next);
+          Token fakeEquals = new Token(TokenType.EQ, next.offset + 2);
+          fakeEquals.setNextWithoutSettingPrevious(next.next);
           return fakeEquals;
         }
         depth -= 2;
       }
-      next2 = next2.next;
+      next = next.next;
     }
-    return next2;
+    return next;
   }
 
   /**
@@ -4846,10 +4846,10 @@
       builder.appendChar(currentChar);
       return index + 1;
     }
-    int length2 = lexeme.length;
+    int length = lexeme.length;
     int currentIndex = index + 1;
-    if (currentIndex >= length2) {
-      return length2;
+    if (currentIndex >= length) {
+      return length;
     }
     currentChar = lexeme.codeUnitAt(currentIndex);
     if (currentChar == 0x6E) {
@@ -4865,9 +4865,9 @@
     } else if (currentChar == 0x76) {
       builder.appendChar(0xB);
     } else if (currentChar == 0x78) {
-      if (currentIndex + 2 >= length2) {
+      if (currentIndex + 2 >= length) {
         reportError7(ParserErrorCode.INVALID_HEX_ESCAPE, []);
-        return length2;
+        return length;
       }
       int firstDigit = lexeme.codeUnitAt(currentIndex + 1);
       int secondDigit = lexeme.codeUnitAt(currentIndex + 2);
@@ -4879,16 +4879,16 @@
       return currentIndex + 3;
     } else if (currentChar == 0x75) {
       currentIndex++;
-      if (currentIndex >= length2) {
+      if (currentIndex >= length) {
         reportError7(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
-        return length2;
+        return length;
       }
       currentChar = lexeme.codeUnitAt(currentIndex);
       if (currentChar == 0x7B) {
         currentIndex++;
-        if (currentIndex >= length2) {
+        if (currentIndex >= length) {
           reportError7(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
-          return length2;
+          return length;
         }
         currentChar = lexeme.codeUnitAt(currentIndex);
         int digitCount = 0;
@@ -4897,7 +4897,7 @@
           if (!isHexDigit(currentChar)) {
             reportError7(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
             currentIndex++;
-            while (currentIndex < length2 && lexeme.codeUnitAt(currentIndex) != 0x7D) {
+            while (currentIndex < length && lexeme.codeUnitAt(currentIndex) != 0x7D) {
               currentIndex++;
             }
             return currentIndex + 1;
@@ -4905,9 +4905,9 @@
           digitCount++;
           value = (value << 4) + Character.digit(currentChar, 16);
           currentIndex++;
-          if (currentIndex >= length2) {
+          if (currentIndex >= length) {
             reportError7(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
-            return length2;
+            return length;
           }
           currentChar = lexeme.codeUnitAt(currentIndex);
         }
@@ -4917,9 +4917,9 @@
         appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), value, index, currentIndex);
         return currentIndex + 1;
       } else {
-        if (currentIndex + 3 >= length2) {
+        if (currentIndex + 3 >= length) {
           reportError7(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
-          return length2;
+          return length;
         }
         int firstDigit = currentChar;
         int secondDigit = lexeme.codeUnitAt(currentIndex + 1);
@@ -4991,16 +4991,16 @@
     if (modifiers.varKeyword != null) {
       reportError8(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varKeyword, []);
     }
-    Token externalKeyword2 = modifiers.externalKeyword;
-    Token constKeyword2 = modifiers.constKeyword;
-    Token factoryKeyword2 = modifiers.factoryKeyword;
-    if (externalKeyword2 != null && constKeyword2 != null && constKeyword2.offset < externalKeyword2.offset) {
-      reportError8(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword2, []);
+    Token externalKeyword = modifiers.externalKeyword;
+    Token constKeyword = modifiers.constKeyword;
+    Token factoryKeyword = modifiers.factoryKeyword;
+    if (externalKeyword != null && constKeyword != null && constKeyword.offset < externalKeyword.offset) {
+      reportError8(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword, []);
     }
-    if (externalKeyword2 != null && factoryKeyword2 != null && factoryKeyword2.offset < externalKeyword2.offset) {
-      reportError8(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword2, []);
+    if (externalKeyword != null && factoryKeyword != null && factoryKeyword.offset < externalKeyword.offset) {
+      reportError8(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword, []);
     }
-    return constKeyword2;
+    return constKeyword;
   }
 
   /**
@@ -5019,31 +5019,31 @@
     if (modifiers.factoryKeyword != null) {
       reportError8(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
     }
-    Token staticKeyword2 = modifiers.staticKeyword;
-    Token constKeyword2 = modifiers.constKeyword;
-    Token finalKeyword2 = modifiers.finalKeyword;
-    Token varKeyword2 = modifiers.varKeyword;
-    if (constKeyword2 != null) {
-      if (finalKeyword2 != null) {
-        reportError8(ParserErrorCode.CONST_AND_FINAL, finalKeyword2, []);
+    Token staticKeyword = modifiers.staticKeyword;
+    Token constKeyword = modifiers.constKeyword;
+    Token finalKeyword = modifiers.finalKeyword;
+    Token varKeyword = modifiers.varKeyword;
+    if (constKeyword != null) {
+      if (finalKeyword != null) {
+        reportError8(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
       }
-      if (varKeyword2 != null) {
-        reportError8(ParserErrorCode.CONST_AND_VAR, varKeyword2, []);
+      if (varKeyword != null) {
+        reportError8(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
       }
-      if (staticKeyword2 != null && constKeyword2.offset < staticKeyword2.offset) {
-        reportError8(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword2, []);
+      if (staticKeyword != null && constKeyword.offset < staticKeyword.offset) {
+        reportError8(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword, []);
       }
-    } else if (finalKeyword2 != null) {
-      if (varKeyword2 != null) {
-        reportError8(ParserErrorCode.FINAL_AND_VAR, varKeyword2, []);
+    } else if (finalKeyword != null) {
+      if (varKeyword != null) {
+        reportError8(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
       }
-      if (staticKeyword2 != null && finalKeyword2.offset < staticKeyword2.offset) {
-        reportError8(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword2, []);
+      if (staticKeyword != null && finalKeyword.offset < staticKeyword.offset) {
+        reportError8(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword, []);
       }
-    } else if (varKeyword2 != null && staticKeyword2 != null && varKeyword2.offset < staticKeyword2.offset) {
-      reportError8(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword2, []);
+    } else if (varKeyword != null && staticKeyword != null && varKeyword.offset < staticKeyword.offset) {
+      reportError8(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword, []);
     }
-    return lexicallyFirst([constKeyword2, finalKeyword2, varKeyword2]);
+    return lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
   }
 
   /**
@@ -5066,10 +5066,10 @@
     if (modifiers.varKeyword != null) {
       reportError8(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
     }
-    Token externalKeyword2 = modifiers.externalKeyword;
-    Token staticKeyword2 = modifiers.staticKeyword;
-    if (externalKeyword2 != null && staticKeyword2 != null && staticKeyword2.offset < externalKeyword2.offset) {
-      reportError8(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword2, []);
+    Token externalKeyword = modifiers.externalKeyword;
+    Token staticKeyword = modifiers.staticKeyword;
+    if (externalKeyword != null && staticKeyword != null && staticKeyword.offset < externalKeyword.offset) {
+      reportError8(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword, []);
     }
   }
 
@@ -5145,22 +5145,22 @@
     if (modifiers.externalKeyword != null) {
       reportError8(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
     }
-    Token constKeyword2 = modifiers.constKeyword;
-    Token finalKeyword2 = modifiers.finalKeyword;
-    Token varKeyword2 = modifiers.varKeyword;
-    if (constKeyword2 != null) {
-      if (finalKeyword2 != null) {
-        reportError8(ParserErrorCode.CONST_AND_FINAL, finalKeyword2, []);
+    Token constKeyword = modifiers.constKeyword;
+    Token finalKeyword = modifiers.finalKeyword;
+    Token varKeyword = modifiers.varKeyword;
+    if (constKeyword != null) {
+      if (finalKeyword != null) {
+        reportError8(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
       }
-      if (varKeyword2 != null) {
-        reportError8(ParserErrorCode.CONST_AND_VAR, varKeyword2, []);
+      if (varKeyword != null) {
+        reportError8(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
       }
-    } else if (finalKeyword2 != null) {
-      if (varKeyword2 != null) {
-        reportError8(ParserErrorCode.FINAL_AND_VAR, varKeyword2, []);
+    } else if (finalKeyword != null) {
+      if (varKeyword != null) {
+        reportError8(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
       }
     }
-    return lexicallyFirst([constKeyword2, finalKeyword2, varKeyword2]);
+    return lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
   }
 
   /**
@@ -5548,12 +5548,12 @@
   }
   Object visitCommentReference(CommentReference node) => null;
   Object visitCompilationUnit(CompilationUnit node) {
-    ScriptTag scriptTag2 = node.scriptTag;
-    NodeList<Directive> directives2 = node.directives;
-    visit(scriptTag2);
-    String prefix = scriptTag2 == null ? "" : " ";
-    visitList7(prefix, directives2, "\n");
-    prefix = scriptTag2 == null && directives2.isEmpty ? "" : "\n\n";
+    ScriptTag scriptTag = node.scriptTag;
+    NodeList<Directive> directives = node.directives;
+    visit(scriptTag);
+    String prefix = scriptTag == null ? "" : " ";
+    visitList7(prefix, directives, "\n");
+    prefix = scriptTag == null && directives.isEmpty ? "" : "\n\n";
     visitList7(prefix, node.declarations, "\n");
     return null;
   }
@@ -5685,10 +5685,10 @@
   Object visitFormalParameterList(FormalParameterList node) {
     String groupEnd = null;
     _writer.print('(');
-    NodeList<FormalParameter> parameters2 = node.parameters;
-    int size2 = parameters2.length;
-    for (int i = 0; i < size2; i++) {
-      FormalParameter parameter = parameters2[i];
+    NodeList<FormalParameter> parameters = node.parameters;
+    int size = parameters.length;
+    for (int i = 0; i < size; i++) {
+      FormalParameter parameter = parameters[i];
       if (i > 0) {
         _writer.print(", ");
       }
@@ -5710,10 +5710,10 @@
     return null;
   }
   Object visitForStatement(ForStatement node) {
-    Expression initialization2 = node.initialization;
+    Expression initialization = node.initialization;
     _writer.print("for (");
-    if (initialization2 != null) {
-      visit(initialization2);
+    if (initialization != null) {
+      visit(initialization);
     } else {
       visit(node.variables);
     }
@@ -5980,12 +5980,12 @@
     return null;
   }
   Object visitReturnStatement(ReturnStatement node) {
-    Expression expression2 = node.expression;
-    if (expression2 == null) {
+    Expression expression = node.expression;
+    if (expression == null) {
       _writer.print("return;");
     } else {
       _writer.print("return ");
-      expression2.accept(this);
+      expression.accept(this);
       _writer.print(";");
     }
     return null;
@@ -6214,8 +6214,8 @@
    */
   void visitList5(NodeList<ASTNode> nodes, String separator) {
     if (nodes != null) {
-      int size2 = nodes.length;
-      for (int i = 0; i < size2; i++) {
+      int size = nodes.length;
+      for (int i = 0; i < size; i++) {
         if ("\n" == separator) {
           _writer.print("\n");
           indent();
@@ -6235,9 +6235,9 @@
    */
   void visitList6(NodeList<ASTNode> nodes, String separator, String suffix) {
     if (nodes != null) {
-      int size2 = nodes.length;
-      if (size2 > 0) {
-        for (int i = 0; i < size2; i++) {
+      int size = nodes.length;
+      if (size > 0) {
+        for (int i = 0; i < size; i++) {
           if (i > 0) {
             _writer.print(separator);
           }
@@ -6256,10 +6256,10 @@
    */
   void visitList7(String prefix, NodeList<ASTNode> nodes, String separator) {
     if (nodes != null) {
-      int size2 = nodes.length;
-      if (size2 > 0) {
+      int size = nodes.length;
+      if (size > 0) {
         _writer.print(prefix);
-        for (int i = 0; i < size2; i++) {
+        for (int i = 0; i < size; i++) {
           if (i > 0) {
             _writer.print(separator);
           }
diff --git a/pkg/analyzer_experimental/lib/src/generated/resolver.dart b/pkg/analyzer_experimental/lib/src/generated/resolver.dart
index e0a4a74..abc4eb0 100644
--- a/pkg/analyzer_experimental/lib/src/generated/resolver.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/resolver.dart
@@ -94,16 +94,16 @@
     return null;
   }
   Object visitCatchClause(CatchClause node) {
-    SimpleIdentifier exceptionParameter2 = node.exceptionParameter;
-    if (exceptionParameter2 != null) {
-      LocalVariableElementImpl exception = new LocalVariableElementImpl(exceptionParameter2);
+    SimpleIdentifier exceptionParameter = node.exceptionParameter;
+    if (exceptionParameter != null) {
+      LocalVariableElementImpl exception = new LocalVariableElementImpl(exceptionParameter);
       _currentHolder.addLocalVariable(exception);
-      exceptionParameter2.element = exception;
-      SimpleIdentifier stackTraceParameter2 = node.stackTraceParameter;
-      if (stackTraceParameter2 != null) {
-        LocalVariableElementImpl stackTrace = new LocalVariableElementImpl(stackTraceParameter2);
+      exceptionParameter.element = exception;
+      SimpleIdentifier stackTraceParameter = node.stackTraceParameter;
+      if (stackTraceParameter != null) {
+        LocalVariableElementImpl stackTrace = new LocalVariableElementImpl(stackTraceParameter);
         _currentHolder.addLocalVariable(stackTrace);
-        stackTraceParameter2.element = stackTrace;
+        stackTraceParameter.element = stackTrace;
       }
     }
     return super.visitCatchClause(node);
@@ -114,20 +114,20 @@
     visitChildren(holder, node);
     SimpleIdentifier className = node.name;
     ClassElementImpl element = new ClassElementImpl(className);
-    List<TypeVariableElement> typeVariables2 = holder.typeVariables;
+    List<TypeVariableElement> typeVariables = holder.typeVariables;
     InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element);
-    interfaceType.typeArguments = createTypeVariableTypes(typeVariables2);
+    interfaceType.typeArguments = createTypeVariableTypes(typeVariables);
     element.type = interfaceType;
-    List<ConstructorElement> constructors2 = holder.constructors;
-    if (constructors2.length == 0) {
-      constructors2 = createDefaultConstructors(interfaceType);
+    List<ConstructorElement> constructors = holder.constructors;
+    if (constructors.length == 0) {
+      constructors = createDefaultConstructors(interfaceType);
     }
     element.abstract = node.abstractKeyword != null;
     element.accessors = holder.accessors;
-    element.constructors = constructors2;
+    element.constructors = constructors;
     element.fields = holder.fields;
     element.methods = holder.methods;
-    element.typeVariables = typeVariables2;
+    element.typeVariables = typeVariables;
     element.validMixin = _isValidMixin;
     _currentHolder.addType(element);
     className.element = element;
@@ -140,10 +140,10 @@
     ClassElementImpl element = new ClassElementImpl(className);
     element.abstract = node.abstractKeyword != null;
     element.typedef = true;
-    List<TypeVariableElement> typeVariables2 = holder.typeVariables;
-    element.typeVariables = typeVariables2;
+    List<TypeVariableElement> typeVariables = holder.typeVariables;
+    element.typeVariables = typeVariables;
     InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element);
-    interfaceType.typeArguments = createTypeVariableTypes(typeVariables2);
+    interfaceType.typeArguments = createTypeVariableTypes(typeVariables);
     element.type = interfaceType;
     element.constructors = createDefaultConstructors(interfaceType);
     _currentHolder.addType(element);
@@ -173,9 +173,9 @@
     _currentHolder.addConstructor(element);
     node.element = element;
     if (constructorName == null) {
-      Identifier returnType2 = node.returnType;
-      if (returnType2 != null) {
-        element.nameOffset = returnType2.offset;
+      Identifier returnType = node.returnType;
+      if (returnType != null) {
+        element.nameOffset = returnType.offset;
       }
     } else {
       constructorName.element = element;
@@ -184,14 +184,14 @@
   }
   Object visitDeclaredIdentifier(DeclaredIdentifier node) {
     SimpleIdentifier variableName = node.identifier;
-    sc.Token keyword2 = node.keyword;
+    sc.Token keyword = node.keyword;
     LocalVariableElementImpl element = new LocalVariableElementImpl(variableName);
     ForEachStatement statement = node.parent as ForEachStatement;
     int declarationEnd = node.offset + node.length;
     int statementEnd = statement.offset + statement.length;
     element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1);
-    element.const3 = matches(keyword2, sc.Keyword.CONST);
-    element.final2 = matches(keyword2, sc.Keyword.FINAL);
+    element.const3 = matches(keyword, sc.Keyword.CONST);
+    element.final2 = matches(keyword, sc.Keyword.FINAL);
     _currentHolder.addLocalVariable(element);
     variableName.element = element;
     return super.visitDeclaredIdentifier(node);
@@ -346,13 +346,13 @@
     ElementHolder holder = new ElementHolder();
     visitChildren(holder, node);
     SimpleIdentifier aliasName = node.name;
-    List<ParameterElement> parameters2 = holder.parameters;
-    List<TypeVariableElement> typeVariables2 = holder.typeVariables;
+    List<ParameterElement> parameters = holder.parameters;
+    List<TypeVariableElement> typeVariables = holder.typeVariables;
     FunctionTypeAliasElementImpl element = new FunctionTypeAliasElementImpl(aliasName);
-    element.parameters = parameters2;
-    element.typeVariables = typeVariables2;
+    element.parameters = parameters;
+    element.typeVariables = typeVariables;
     FunctionTypeImpl type = new FunctionTypeImpl.con2(element);
-    type.typeArguments = createTypeVariableTypes(typeVariables2);
+    type.typeArguments = createTypeVariableTypes(typeVariables);
     element.type = type;
     _currentHolder.addTypeAlias(element);
     aliasName.element = element;
@@ -390,7 +390,7 @@
     } finally {
       _inFunction = wasInFunction;
     }
-    bool isStatic2 = node.isStatic();
+    bool isStatic = node.isStatic();
     sc.Token property = node.propertyKeyword;
     if (property == null) {
       SimpleIdentifier methodName = node.name;
@@ -404,7 +404,7 @@
       element.labels = holder.labels;
       element.localVariables = holder.localVariables;
       element.parameters = holder.parameters;
-      element.static = isStatic2;
+      element.static = isStatic;
       _currentHolder.addMethod(element);
       methodName.element = element;
     } else {
@@ -414,7 +414,7 @@
       if (field == null) {
         field = new FieldElementImpl.con2(node.name.name);
         field.final2 = true;
-        field.static = isStatic2;
+        field.static = isStatic;
         _currentHolder.addField(field);
       }
       if (matches(property, sc.Keyword.GET)) {
@@ -425,7 +425,7 @@
         getter.variable = field;
         getter.abstract = node.body is EmptyFunctionBody && node.externalKeyword == null;
         getter.getter = true;
-        getter.static = isStatic2;
+        getter.static = isStatic;
         field.getter = getter;
         _currentHolder.addAccessor(getter);
         propertyNameNode.element = getter;
@@ -438,7 +438,7 @@
         setter.variable = field;
         setter.abstract = node.body is EmptyFunctionBody && !matches(node.externalKeyword, sc.Keyword.EXTERNAL);
         setter.setter = true;
-        setter.static = isStatic2;
+        setter.static = isStatic;
         field.setter = setter;
         field.final2 = false;
         _currentHolder.addAccessor(setter);
@@ -491,9 +491,9 @@
     return super.visitTypeParameter(node);
   }
   Object visitVariableDeclaration(VariableDeclaration node) {
-    sc.Token keyword2 = ((node.parent as VariableDeclarationList)).keyword;
-    bool isConst = matches(keyword2, sc.Keyword.CONST);
-    bool isFinal = matches(keyword2, sc.Keyword.FINAL);
+    sc.Token keyword = ((node.parent as VariableDeclarationList)).keyword;
+    bool isConst = matches(keyword, sc.Keyword.CONST);
+    bool isFinal = matches(keyword, sc.Keyword.FINAL);
     bool hasInitializer = node.initializer != null;
     VariableElementImpl element;
     if (_inFieldContext) {
@@ -605,14 +605,14 @@
    * @return the body of the function that contains the given parameter
    */
   FunctionBody getFunctionBody(FormalParameter node) {
-    ASTNode parent2 = node.parent;
-    while (parent2 != null) {
-      if (parent2 is FunctionExpression) {
-        return ((parent2 as FunctionExpression)).body;
-      } else if (parent2 is MethodDeclaration) {
-        return ((parent2 as MethodDeclaration)).body;
+    ASTNode parent = node.parent;
+    while (parent != null) {
+      if (parent is FunctionExpression) {
+        return ((parent as FunctionExpression)).body;
+      } else if (parent is MethodDeclaration) {
+        return ((parent as MethodDeclaration)).body;
       }
-      parent2 = parent2.parent;
+      parent = parent.parent;
     }
     return null;
   }
@@ -929,15 +929,15 @@
         if (identical(node.attributeEnd.type, ht.TokenType.GT) && scriptSourcePath == null) {
           EmbeddedHtmlScriptElementImpl script = new EmbeddedHtmlScriptElementImpl(node);
           String contents = node.content;
-          int attributeEnd2 = node.attributeEnd.end;
-          LineInfo_Location location = _lineInfo.getLocation(attributeEnd2);
+          int attributeEnd = node.attributeEnd.end;
+          LineInfo_Location location = _lineInfo.getLocation(attributeEnd);
           sc.StringScanner scanner = new sc.StringScanner(htmlSource, contents, _errorListener);
-          scanner.setSourceStart(location.lineNumber, location.columnNumber, attributeEnd2);
+          scanner.setSourceStart(location.lineNumber, location.columnNumber, attributeEnd);
           sc.Token firstToken = scanner.tokenize();
-          List<int> lineStarts2 = scanner.lineStarts;
+          List<int> lineStarts = scanner.lineStarts;
           Parser parser = new Parser(htmlSource, _errorListener);
           CompilationUnit unit = parser.parseCompilationUnit(firstToken);
-          unit.lineInfo = new LineInfo(lineStarts2);
+          unit.lineInfo = new LineInfo(lineStarts);
           try {
             LibraryResolver resolver = new LibraryResolver(_context);
             LibraryElementImpl library = resolver.resolveEmbeddedLibrary(htmlSource, unit, true) as LibraryElementImpl;
@@ -1069,13 +1069,13 @@
     unit.accept(this);
   }
   Object visitCatchClause(CatchClause node) {
-    SimpleIdentifier exceptionParameter2 = node.exceptionParameter;
-    if (exceptionParameter2 != null) {
-      List<LocalVariableElement> localVariables2 = _enclosingExecutable.localVariables;
-      find3(localVariables2, exceptionParameter2);
-      SimpleIdentifier stackTraceParameter2 = node.stackTraceParameter;
-      if (stackTraceParameter2 != null) {
-        find3(localVariables2, stackTraceParameter2);
+    SimpleIdentifier exceptionParameter = node.exceptionParameter;
+    if (exceptionParameter != null) {
+      List<LocalVariableElement> localVariables = _enclosingExecutable.localVariables;
+      find3(localVariables, exceptionParameter);
+      SimpleIdentifier stackTraceParameter = node.stackTraceParameter;
+      if (stackTraceParameter != null) {
+        find3(localVariables, stackTraceParameter);
       }
     }
     return super.visitCatchClause(node);
@@ -1131,23 +1131,23 @@
       writer.println("Invalid state found in the Analysis Engine:");
       writer.println("DeclarationResolver.visitDefaultFormalParameter() is visiting a parameter that does not appear to be in a method or function.");
       writer.println("Ancestors:");
-      ASTNode parent2 = node.parent;
-      while (parent2 != null) {
-        writer.println(parent2.runtimeType.toString());
+      ASTNode parent = node.parent;
+      while (parent != null) {
+        writer.println(parent.runtimeType.toString());
         writer.println("---------");
-        parent2 = parent2.parent;
+        parent = parent.parent;
       }
       AnalysisEngine.instance.logger.logError2(writer.toString(), new AnalysisException());
     }
-    Expression defaultValue2 = node.defaultValue;
-    if (defaultValue2 != null) {
+    Expression defaultValue = node.defaultValue;
+    if (defaultValue != null) {
       ExecutableElement outerExecutable = _enclosingExecutable;
       try {
         if (element == null) {
         } else {
           _enclosingExecutable = element.initializer;
         }
-        defaultValue2.accept(this);
+        defaultValue.accept(this);
       } finally {
         _enclosingExecutable = outerExecutable;
       }
@@ -1161,10 +1161,10 @@
     }
   }
   Object visitExportDirective(ExportDirective node) {
-    String uri2 = getStringValue(node.uri);
-    if (uri2 != null) {
-      LibraryElement library2 = _enclosingUnit.library;
-      ExportElement exportElement = find5(library2.exports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri2));
+    String uri = getStringValue(node.uri);
+    if (uri != null) {
+      LibraryElement library = _enclosingUnit.library;
+      ExportElement exportElement = find5(library.exports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri));
       node.element = exportElement;
     }
     return super.visitExportDirective(node);
@@ -1248,10 +1248,10 @@
     }
   }
   Object visitImportDirective(ImportDirective node) {
-    String uri2 = getStringValue(node.uri);
-    if (uri2 != null) {
-      LibraryElement library2 = _enclosingUnit.library;
-      ImportElement importElement = find6(library2.imports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri2), node.prefix);
+    String uri = getStringValue(node.uri);
+    if (uri != null) {
+      LibraryElement library = _enclosingUnit.library;
+      ImportElement importElement = find6(library.imports, _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri), node.prefix);
       node.element = importElement;
     }
     return super.visitImportDirective(node);
@@ -1293,9 +1293,9 @@
     }
   }
   Object visitPartDirective(PartDirective node) {
-    String uri2 = getStringValue(node.uri);
-    if (uri2 != null) {
-      Source partSource = _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri2);
+    String uri = getStringValue(node.uri);
+    if (uri != null) {
+      Source partSource = _enclosingUnit.context.sourceFactory.resolveUri(_enclosingUnit.source, uri);
       node.element = find(_enclosingUnit.library.parts, partSource);
     }
     return super.visitPartDirective(node);
@@ -1362,8 +1362,8 @@
     if (element == null && _enclosingUnit != null) {
       element = find3(_enclosingUnit.topLevelVariables, variableName);
     }
-    Expression initializer2 = node.initializer;
-    if (initializer2 != null) {
+    Expression initializer = node.initializer;
+    if (initializer != null) {
       ExecutableElement outerExecutable = _enclosingExecutable;
       try {
         if (element == null) {
@@ -1567,9 +1567,9 @@
    * @return {@code true} if the given identifier is the return type of a constructor declaration.
    */
   static bool isConstructorReturnType(SimpleIdentifier node) {
-    ASTNode parent2 = node.parent;
-    if (parent2 is ConstructorDeclaration) {
-      ConstructorDeclaration constructor = parent2 as ConstructorDeclaration;
+    ASTNode parent = node.parent;
+    if (parent is ConstructorDeclaration) {
+      ConstructorDeclaration constructor = parent as ConstructorDeclaration;
       return identical(constructor.returnType, node);
     }
     return false;
@@ -1580,9 +1580,9 @@
    * declaration.
    */
   static bool isFactoryConstructorReturnType(SimpleIdentifier node) {
-    ASTNode parent2 = node.parent;
-    if (parent2 is ConstructorDeclaration) {
-      ConstructorDeclaration constructor = parent2 as ConstructorDeclaration;
+    ASTNode parent = node.parent;
+    if (parent is ConstructorDeclaration) {
+      ConstructorDeclaration constructor = parent as ConstructorDeclaration;
       return identical(constructor.returnType, node) && constructor.factoryKeyword != null;
     }
     return false;
@@ -1645,40 +1645,40 @@
     _strictMode = resolver.definingLibrary.context.analysisOptions.strictMode;
   }
   Object visitAssignmentExpression(AssignmentExpression node) {
-    sc.Token operator2 = node.operator;
-    sc.TokenType operatorType = operator2.type;
+    sc.Token operator = node.operator;
+    sc.TokenType operatorType = operator.type;
     if (operatorType != sc.TokenType.EQ) {
       operatorType = operatorFromCompoundAssignment(operatorType);
-      Expression leftHandSide2 = node.leftHandSide;
-      if (leftHandSide2 != null) {
+      Expression leftHandSide = node.leftHandSide;
+      if (leftHandSide != null) {
         String methodName = operatorType.lexeme;
-        Type2 staticType = getStaticType(leftHandSide2);
-        MethodElement staticMethod = lookUpMethod(leftHandSide2, staticType, methodName);
+        Type2 staticType = getStaticType(leftHandSide);
+        MethodElement staticMethod = lookUpMethod(leftHandSide, staticType, methodName);
         node.staticElement = staticMethod;
-        Type2 propagatedType = getPropagatedType(leftHandSide2);
-        MethodElement propagatedMethod = lookUpMethod(leftHandSide2, propagatedType, methodName);
+        Type2 propagatedType = getPropagatedType(leftHandSide);
+        MethodElement propagatedMethod = lookUpMethod(leftHandSide, propagatedType, methodName);
         node.element = select3(staticMethod, propagatedMethod);
         if (shouldReportMissingMember(staticType, staticMethod) && (_strictMode || propagatedType == null || shouldReportMissingMember(propagatedType, propagatedMethod))) {
-          _resolver.reportError6(StaticTypeWarningCode.UNDEFINED_METHOD, operator2, [methodName, staticType.displayName]);
+          _resolver.reportError6(StaticTypeWarningCode.UNDEFINED_METHOD, operator, [methodName, staticType.displayName]);
         }
       }
     }
     return null;
   }
   Object visitBinaryExpression(BinaryExpression node) {
-    sc.Token operator2 = node.operator;
-    if (operator2.isUserDefinableOperator()) {
-      Expression leftOperand2 = node.leftOperand;
-      if (leftOperand2 != null) {
-        String methodName = operator2.lexeme;
-        Type2 staticType = getStaticType(leftOperand2);
-        MethodElement staticMethod = lookUpMethod(leftOperand2, staticType, methodName);
+    sc.Token operator = node.operator;
+    if (operator.isUserDefinableOperator()) {
+      Expression leftOperand = node.leftOperand;
+      if (leftOperand != null) {
+        String methodName = operator.lexeme;
+        Type2 staticType = getStaticType(leftOperand);
+        MethodElement staticMethod = lookUpMethod(leftOperand, staticType, methodName);
         node.staticElement = staticMethod;
-        Type2 propagatedType = getPropagatedType(leftOperand2);
-        MethodElement propagatedMethod = lookUpMethod(leftOperand2, propagatedType, methodName);
+        Type2 propagatedType = getPropagatedType(leftOperand);
+        MethodElement propagatedMethod = lookUpMethod(leftOperand, propagatedType, methodName);
         node.element = select3(staticMethod, propagatedMethod);
         if (shouldReportMissingMember(staticType, staticMethod) && (_strictMode || propagatedType == null || shouldReportMissingMember(propagatedType, propagatedMethod))) {
-          _resolver.reportError6(StaticTypeWarningCode.UNDEFINED_OPERATOR, operator2, [methodName, staticType.displayName]);
+          _resolver.reportError6(StaticTypeWarningCode.UNDEFINED_OPERATOR, operator, [methodName, staticType.displayName]);
         }
       }
     }
@@ -1701,9 +1701,9 @@
     return null;
   }
   Object visitCommentReference(CommentReference node) {
-    Identifier identifier2 = node.identifier;
-    if (identifier2 is SimpleIdentifier) {
-      SimpleIdentifier simpleIdentifier = identifier2 as SimpleIdentifier;
+    Identifier identifier = node.identifier;
+    if (identifier is SimpleIdentifier) {
+      SimpleIdentifier simpleIdentifier = identifier as SimpleIdentifier;
       Element element = resolveSimpleIdentifier(simpleIdentifier);
       if (element == null) {
         element = findImportWithoutPrefix(simpleIdentifier);
@@ -1727,23 +1727,23 @@
           }
         }
       }
-    } else if (identifier2 is PrefixedIdentifier) {
-      PrefixedIdentifier prefixedIdentifier = identifier2 as PrefixedIdentifier;
-      SimpleIdentifier prefix2 = prefixedIdentifier.prefix;
+    } else if (identifier is PrefixedIdentifier) {
+      PrefixedIdentifier prefixedIdentifier = identifier as PrefixedIdentifier;
+      SimpleIdentifier prefix = prefixedIdentifier.prefix;
       SimpleIdentifier name = prefixedIdentifier.identifier;
-      Element element = resolveSimpleIdentifier(prefix2);
+      Element element = resolveSimpleIdentifier(prefix);
       if (element == null) {
       } else {
         if (element is PrefixElement) {
-          recordResolution(prefix2, element);
-          element = _resolver.nameScope.lookup(identifier2, _resolver.definingLibrary);
+          recordResolution(prefix, element);
+          element = _resolver.nameScope.lookup(identifier, _resolver.definingLibrary);
           recordResolution(name, element);
           return null;
         }
-        LibraryElement library2 = element.library;
-        if (library2 == null) {
+        LibraryElement library = element.library;
+        if (library == null) {
           AnalysisEngine.instance.logger.logError("Found element with null library: ${element.name}");
-        } else if (library2 != _resolver.definingLibrary) {
+        } else if (library != _resolver.definingLibrary) {
         }
         recordResolution(name, element);
         if (node.newKeyword == null) {
@@ -1752,7 +1752,7 @@
             if (memberElement == null) {
               memberElement = ((element as ClassElement)).getNamedConstructor(name.name);
               if (memberElement == null) {
-                memberElement = lookUpSetter(prefix2, ((element as ClassElement)).type, name.name);
+                memberElement = lookUpSetter(prefix, ((element as ClassElement)).type, name.name);
               }
             }
             if (memberElement == null) {
@@ -1777,9 +1777,9 @@
   }
   Object visitConstructorDeclaration(ConstructorDeclaration node) {
     super.visitConstructorDeclaration(node);
-    ConstructorElement element2 = node.element;
-    if (element2 is ConstructorElementImpl) {
-      ConstructorElementImpl constructorElement = element2 as ConstructorElementImpl;
+    ConstructorElement element = node.element;
+    if (element is ConstructorElementImpl) {
+      ConstructorElementImpl constructorElement = element as ConstructorElementImpl;
       ConstructorName redirectedNode = node.redirectedConstructor;
       if (redirectedNode != null) {
         ConstructorElement redirectedElement = redirectedNode.element;
@@ -1796,25 +1796,25 @@
     return null;
   }
   Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
-    SimpleIdentifier fieldName2 = node.fieldName;
-    ClassElement enclosingClass2 = _resolver.enclosingClass;
-    FieldElement fieldElement = ((enclosingClass2 as ClassElementImpl)).getField(fieldName2.name);
-    recordResolution(fieldName2, fieldElement);
+    SimpleIdentifier fieldName = node.fieldName;
+    ClassElement enclosingClass = _resolver.enclosingClass;
+    FieldElement fieldElement = ((enclosingClass as ClassElementImpl)).getField(fieldName.name);
+    recordResolution(fieldName, fieldElement);
     if (fieldElement == null || fieldElement.isSynthetic()) {
-      _resolver.reportError(CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTANT_FIELD, node, [fieldName2]);
+      _resolver.reportError(CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTANT_FIELD, node, [fieldName]);
     } else if (fieldElement.isStatic()) {
-      _resolver.reportError(CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD, node, [fieldName2]);
+      _resolver.reportError(CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD, node, [fieldName]);
     }
     return null;
   }
   Object visitConstructorName(ConstructorName node) {
-    Type2 type2 = node.type.type;
-    if (type2 != null && type2.isDynamic()) {
+    Type2 type = node.type.type;
+    if (type != null && type.isDynamic()) {
       return null;
-    } else if (type2 is! InterfaceType) {
-      ASTNode parent2 = node.parent;
-      if (parent2 is InstanceCreationExpression) {
-        if (((parent2 as InstanceCreationExpression)).isConst()) {
+    } else if (type is! InterfaceType) {
+      ASTNode parent = node.parent;
+      if (parent is InstanceCreationExpression) {
+        if (((parent as InstanceCreationExpression)).isConst()) {
         } else {
         }
       } else {
@@ -1822,15 +1822,15 @@
       return null;
     }
     ConstructorElement constructor;
-    SimpleIdentifier name2 = node.name;
-    InterfaceType interfaceType = type2 as InterfaceType;
-    LibraryElement definingLibrary2 = _resolver.definingLibrary;
-    if (name2 == null) {
-      constructor = interfaceType.lookUpConstructor(null, definingLibrary2);
+    SimpleIdentifier name = node.name;
+    InterfaceType interfaceType = type as InterfaceType;
+    LibraryElement definingLibrary = _resolver.definingLibrary;
+    if (name == null) {
+      constructor = interfaceType.lookUpConstructor(null, definingLibrary);
     } else {
-      constructor = interfaceType.lookUpConstructor(name2.name, definingLibrary2);
-      name2.staticElement = constructor;
-      name2.element = constructor;
+      constructor = interfaceType.lookUpConstructor(name.name, definingLibrary);
+      name.staticElement = constructor;
+      name.element = constructor;
     }
     node.staticElement = constructor;
     node.element = constructor;
@@ -1849,10 +1849,10 @@
     return null;
   }
   Object visitExportDirective(ExportDirective node) {
-    Element element2 = node.element;
-    if (element2 is ExportElement) {
-      resolveCombinators(((element2 as ExportElement)).exportedLibrary, node.combinators);
-      setMetadata(element2, node);
+    Element element = node.element;
+    if (element is ExportElement) {
+      resolveCombinators(((element as ExportElement)).exportedLibrary, node.combinators);
+      setMetadata(element, node);
     }
     return null;
   }
@@ -1911,14 +1911,14 @@
         }
       }
     }
-    Element element2 = node.element;
-    if (element2 is ImportElement) {
-      ImportElement importElement = element2 as ImportElement;
+    Element element = node.element;
+    if (element is ImportElement) {
+      ImportElement importElement = element as ImportElement;
       LibraryElement library = importElement.importedLibrary;
       if (library != null) {
         resolveCombinators(library, node.combinators);
       }
-      setMetadata(element2, node);
+      setMetadata(element, node);
     }
     return null;
   }
@@ -1943,10 +1943,10 @@
     ConstructorElement invokedConstructor = node.constructorName.element;
     node.staticElement = invokedConstructor;
     node.element = invokedConstructor;
-    ArgumentList argumentList2 = node.argumentList;
-    List<ParameterElement> parameters = resolveArgumentsToParameters(node.isConst(), argumentList2, invokedConstructor);
+    ArgumentList argumentList = node.argumentList;
+    List<ParameterElement> parameters = resolveArgumentsToParameters(node.isConst(), argumentList, invokedConstructor);
     if (parameters != null) {
-      argumentList2.correspondingStaticParameters = parameters;
+      argumentList.correspondingStaticParameters = parameters;
     }
     return null;
   }
@@ -1959,7 +1959,7 @@
     return null;
   }
   Object visitMethodInvocation(MethodInvocation node) {
-    SimpleIdentifier methodName2 = node.methodName;
+    SimpleIdentifier methodName = node.methodName;
     Expression target = node.realTarget;
     Element staticElement;
     Element propagatedElement;
@@ -1967,27 +1967,27 @@
       return null;
     }
     if (target == null) {
-      staticElement = resolveInvokedElement2(methodName2);
+      staticElement = resolveInvokedElement2(methodName);
       propagatedElement = null;
     } else {
       Type2 targetType = getStaticType(target);
-      staticElement = resolveInvokedElement(target, targetType, methodName2);
-      propagatedElement = resolveInvokedElement(target, getPropagatedType(target), methodName2);
+      staticElement = resolveInvokedElement(target, targetType, methodName);
+      propagatedElement = resolveInvokedElement(target, getPropagatedType(target), methodName);
     }
     staticElement = convertSetterToGetter(staticElement);
     propagatedElement = convertSetterToGetter(propagatedElement);
-    recordResolution2(methodName2, staticElement, propagatedElement);
-    ArgumentList argumentList2 = node.argumentList;
+    recordResolution2(methodName, staticElement, propagatedElement);
+    ArgumentList argumentList = node.argumentList;
     if (staticElement != null) {
-      List<ParameterElement> parameters = computePropagatedParameters(argumentList2, staticElement);
+      List<ParameterElement> parameters = computePropagatedParameters(argumentList, staticElement);
       if (parameters != null) {
-        argumentList2.correspondingStaticParameters = parameters;
+        argumentList.correspondingStaticParameters = parameters;
       }
     }
     if (propagatedElement != null) {
-      List<ParameterElement> parameters = computePropagatedParameters(argumentList2, propagatedElement);
+      List<ParameterElement> parameters = computePropagatedParameters(argumentList, propagatedElement);
       if (parameters != null) {
-        argumentList2.correspondingParameters = parameters;
+        argumentList.correspondingParameters = parameters;
       }
     }
     ErrorCode errorCode;
@@ -2005,14 +2005,14 @@
       }
     }
     if (identical(errorCode, StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION)) {
-      _resolver.reportError(StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION, methodName2, [methodName2.name]);
+      _resolver.reportError(StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION, methodName, [methodName.name]);
     } else if (identical(errorCode, StaticTypeWarningCode.UNDEFINED_FUNCTION)) {
-      _resolver.reportError(StaticTypeWarningCode.UNDEFINED_FUNCTION, methodName2, [methodName2.name]);
+      _resolver.reportError(StaticTypeWarningCode.UNDEFINED_FUNCTION, methodName, [methodName.name]);
     } else if (identical(errorCode, StaticTypeWarningCode.UNDEFINED_METHOD)) {
       String targetTypeName;
       if (target == null) {
-        ClassElement enclosingClass2 = _resolver.enclosingClass;
-        targetTypeName = enclosingClass2.displayName;
+        ClassElement enclosingClass = _resolver.enclosingClass;
+        targetTypeName = enclosingClass.displayName;
       } else {
         Type2 targetType = getPropagatedType(target);
         if (targetType == null) {
@@ -2020,14 +2020,14 @@
         }
         targetTypeName = targetType == null ? null : targetType.displayName;
       }
-      _resolver.reportError(StaticTypeWarningCode.UNDEFINED_METHOD, methodName2, [methodName2.name, targetTypeName]);
+      _resolver.reportError(StaticTypeWarningCode.UNDEFINED_METHOD, methodName, [methodName.name, targetTypeName]);
     } else if (identical(errorCode, StaticTypeWarningCode.UNDEFINED_SUPER_METHOD)) {
       Type2 targetType = getPropagatedType(target);
       if (targetType == null) {
         targetType = getStaticType(target);
       }
       String targetTypeName = targetType == null ? null : targetType.name;
-      _resolver.reportError(StaticTypeWarningCode.UNDEFINED_SUPER_METHOD, methodName2, [methodName2.name, targetTypeName]);
+      _resolver.reportError(StaticTypeWarningCode.UNDEFINED_SUPER_METHOD, methodName, [methodName.name, targetTypeName]);
     }
     return null;
   }
@@ -2040,13 +2040,13 @@
     return null;
   }
   Object visitPostfixExpression(PostfixExpression node) {
-    Expression operand2 = node.operand;
+    Expression operand = node.operand;
     String methodName = getPostfixOperator(node);
-    Type2 staticType = getStaticType(operand2);
-    MethodElement staticMethod = lookUpMethod(operand2, staticType, methodName);
+    Type2 staticType = getStaticType(operand);
+    MethodElement staticMethod = lookUpMethod(operand, staticType, methodName);
     node.staticElement = staticMethod;
-    Type2 propagatedType = getPropagatedType(operand2);
-    MethodElement propagatedMethod = lookUpMethod(operand2, propagatedType, methodName);
+    Type2 propagatedType = getPropagatedType(operand);
+    MethodElement propagatedMethod = lookUpMethod(operand, propagatedType, methodName);
     node.element = select3(staticMethod, propagatedMethod);
     if (shouldReportMissingMember(staticType, staticMethod) && (_strictMode || propagatedType == null || shouldReportMissingMember(propagatedType, propagatedMethod))) {
       _resolver.reportError6(StaticTypeWarningCode.UNDEFINED_OPERATOR, node.operator, [methodName, staticType.displayName]);
@@ -2054,43 +2054,43 @@
     return null;
   }
   Object visitPrefixedIdentifier(PrefixedIdentifier node) {
-    SimpleIdentifier prefix2 = node.prefix;
-    SimpleIdentifier identifier2 = node.identifier;
-    Element prefixElement = prefix2.element;
+    SimpleIdentifier prefix = node.prefix;
+    SimpleIdentifier identifier = node.identifier;
+    Element prefixElement = prefix.element;
     if (prefixElement is PrefixElement) {
       Element element = _resolver.nameScope.lookup(node, _resolver.definingLibrary);
       if (element == null) {
         return null;
       }
-      if (element is PropertyAccessorElement && identifier2.inSetterContext()) {
-        PropertyInducingElement variable2 = ((element as PropertyAccessorElement)).variable;
-        if (variable2 != null) {
-          PropertyAccessorElement setter2 = variable2.setter;
-          if (setter2 != null) {
-            element = setter2;
+      if (element is PropertyAccessorElement && identifier.inSetterContext()) {
+        PropertyInducingElement variable = ((element as PropertyAccessorElement)).variable;
+        if (variable != null) {
+          PropertyAccessorElement setter = variable.setter;
+          if (setter != null) {
+            element = setter;
           }
         }
       }
-      recordResolution(identifier2, element);
+      recordResolution(identifier, element);
       return null;
     }
-    resolvePropertyAccess(prefix2, identifier2);
+    resolvePropertyAccess(prefix, identifier);
     return null;
   }
   Object visitPrefixExpression(PrefixExpression node) {
-    sc.Token operator2 = node.operator;
-    sc.TokenType operatorType = operator2.type;
+    sc.Token operator = node.operator;
+    sc.TokenType operatorType = operator.type;
     if (operatorType.isUserDefinableOperator() || identical(operatorType, sc.TokenType.PLUS_PLUS) || identical(operatorType, sc.TokenType.MINUS_MINUS)) {
-      Expression operand2 = node.operand;
+      Expression operand = node.operand;
       String methodName = getPrefixOperator(node);
-      Type2 staticType = getStaticType(operand2);
-      MethodElement staticMethod = lookUpMethod(operand2, staticType, methodName);
+      Type2 staticType = getStaticType(operand);
+      MethodElement staticMethod = lookUpMethod(operand, staticType, methodName);
       node.staticElement = staticMethod;
-      Type2 propagatedType = getPropagatedType(operand2);
-      MethodElement propagatedMethod = lookUpMethod(operand2, propagatedType, methodName);
+      Type2 propagatedType = getPropagatedType(operand);
+      MethodElement propagatedMethod = lookUpMethod(operand, propagatedType, methodName);
       node.element = select3(staticMethod, propagatedMethod);
       if (shouldReportMissingMember(staticType, staticMethod) && (_strictMode || propagatedType == null || shouldReportMissingMember(propagatedType, propagatedMethod))) {
-        _resolver.reportError6(StaticTypeWarningCode.UNDEFINED_OPERATOR, operator2, [methodName, staticType.displayName]);
+        _resolver.reportError6(StaticTypeWarningCode.UNDEFINED_OPERATOR, operator, [methodName, staticType.displayName]);
       }
     }
     return null;
@@ -2100,21 +2100,21 @@
     if (target is SuperExpression && !isSuperInValidContext((target as SuperExpression))) {
       return null;
     }
-    SimpleIdentifier propertyName2 = node.propertyName;
-    resolvePropertyAccess(target, propertyName2);
+    SimpleIdentifier propertyName = node.propertyName;
+    resolvePropertyAccess(target, propertyName);
     return null;
   }
   Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
-    ClassElement enclosingClass2 = _resolver.enclosingClass;
-    if (enclosingClass2 == null) {
+    ClassElement enclosingClass = _resolver.enclosingClass;
+    if (enclosingClass == null) {
       return null;
     }
     SimpleIdentifier name = node.constructorName;
     ConstructorElement element;
     if (name == null) {
-      element = enclosingClass2.unnamedConstructor;
+      element = enclosingClass.unnamedConstructor;
     } else {
-      element = enclosingClass2.getNamedConstructor(name.name);
+      element = enclosingClass.getNamedConstructor(name.name);
     }
     if (element == null) {
       return null;
@@ -2124,10 +2124,10 @@
     }
     node.staticElement = element;
     node.element = element;
-    ArgumentList argumentList2 = node.argumentList;
-    List<ParameterElement> parameters = resolveArgumentsToParameters(false, argumentList2, element);
+    ArgumentList argumentList = node.argumentList;
+    List<ParameterElement> parameters = resolveArgumentsToParameters(false, argumentList, element);
     if (parameters != null) {
-      argumentList2.correspondingStaticParameters = parameters;
+      argumentList.correspondingStaticParameters = parameters;
     }
     return null;
   }
@@ -2149,11 +2149,11 @@
     return null;
   }
   Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
-    ClassElement enclosingClass2 = _resolver.enclosingClass;
-    if (enclosingClass2 == null) {
+    ClassElement enclosingClass = _resolver.enclosingClass;
+    if (enclosingClass == null) {
       return null;
     }
-    ClassElement superclass = getSuperclass(enclosingClass2);
+    ClassElement superclass = getSuperclass(enclosingClass);
     if (superclass == null) {
       return null;
     }
@@ -2181,10 +2181,10 @@
     }
     node.staticElement = element;
     node.element = element;
-    ArgumentList argumentList2 = node.argumentList;
-    List<ParameterElement> parameters = resolveArgumentsToParameters(false, argumentList2, element);
+    ArgumentList argumentList = node.argumentList;
+    List<ParameterElement> parameters = resolveArgumentsToParameters(false, argumentList, element);
     if (parameters != null) {
-      argumentList2.correspondingStaticParameters = parameters;
+      argumentList.correspondingStaticParameters = parameters;
     }
     return null;
   }
@@ -2195,11 +2195,11 @@
     return super.visitSuperExpression(node);
   }
   Object visitTypeParameter(TypeParameter node) {
-    TypeName bound2 = node.bound;
-    if (bound2 != null) {
+    TypeName bound = node.bound;
+    if (bound != null) {
       TypeVariableElementImpl variable = node.name.element as TypeVariableElementImpl;
       if (variable != null) {
-        variable.bound = bound2.type;
+        variable.bound = bound.type;
       }
     }
     setMetadata(node.element, node);
@@ -2236,8 +2236,8 @@
     if (element2 is PropertyAccessorElement) {
       FunctionType getterType = ((element2 as PropertyAccessorElement)).type;
       if (getterType != null) {
-        Type2 returnType2 = getterType.returnType;
-        if (!isExecutableType(returnType2)) {
+        Type2 returnType = getterType.returnType;
+        if (!isExecutableType(returnType)) {
           return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
         }
       }
@@ -2247,11 +2247,11 @@
       return StaticTypeWarningCode.UNDEFINED_SUPER_METHOD;
     } else {
       if (element2 is PropertyInducingElement) {
-        PropertyAccessorElement getter2 = ((element2 as PropertyInducingElement)).getter;
-        FunctionType getterType = getter2.type;
+        PropertyAccessorElement getter = ((element2 as PropertyInducingElement)).getter;
+        FunctionType getterType = getter.type;
         if (getterType != null) {
-          Type2 returnType3 = getterType.returnType;
-          if (!isExecutableType(returnType3)) {
+          Type2 returnType = getterType.returnType;
+          if (!isExecutableType(returnType)) {
             return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
           }
         }
@@ -2265,11 +2265,11 @@
         }
       } else {
         if (target == null) {
-          ClassElement enclosingClass2 = _resolver.enclosingClass;
-          if (enclosingClass2 == null) {
+          ClassElement enclosingClass = _resolver.enclosingClass;
+          if (enclosingClass == null) {
             return StaticTypeWarningCode.UNDEFINED_FUNCTION;
           } else if (element2 == null) {
-            if (!classDeclaresNoSuchMethod(enclosingClass2)) {
+            if (!classDeclaresNoSuchMethod(enclosingClass)) {
               return StaticTypeWarningCode.UNDEFINED_METHOD;
             }
           } else {
@@ -2345,16 +2345,16 @@
       return resolveArgumentsToParameters(false, argumentList, (element2 as ExecutableElement));
     } else if (element2 is VariableElement) {
       VariableElement variable = element2 as VariableElement;
-      Type2 type2 = variable.type;
-      if (type2 is FunctionType) {
-        FunctionType functionType = type2 as FunctionType;
-        List<ParameterElement> parameters2 = functionType.parameters;
-        return resolveArgumentsToParameters2(false, argumentList, parameters2);
-      } else if (type2 is InterfaceType) {
-        MethodElement callMethod = ((type2 as InterfaceType)).lookUpMethod(CALL_METHOD_NAME, _resolver.definingLibrary);
+      Type2 type = variable.type;
+      if (type is FunctionType) {
+        FunctionType functionType = type as FunctionType;
+        List<ParameterElement> parameters = functionType.parameters;
+        return resolveArgumentsToParameters2(false, argumentList, parameters);
+      } else if (type is InterfaceType) {
+        MethodElement callMethod = ((type as InterfaceType)).lookUpMethod(CALL_METHOD_NAME, _resolver.definingLibrary);
         if (callMethod != null) {
-          List<ParameterElement> parameters3 = callMethod.parameters;
-          return resolveArgumentsToParameters2(false, argumentList, parameters3);
+          List<ParameterElement> parameters = callMethod.parameters;
+          return resolveArgumentsToParameters2(false, argumentList, parameters);
         }
       }
     }
@@ -2382,18 +2382,18 @@
    */
   Element findImportWithoutPrefix(SimpleIdentifier identifier) {
     Element element = null;
-    Scope nameScope2 = _resolver.nameScope;
-    LibraryElement definingLibrary2 = _resolver.definingLibrary;
-    for (ImportElement importElement in definingLibrary2.imports) {
+    Scope nameScope = _resolver.nameScope;
+    LibraryElement definingLibrary = _resolver.definingLibrary;
+    for (ImportElement importElement in definingLibrary.imports) {
       PrefixElement prefixElement = importElement.prefix;
       if (prefixElement != null) {
         Identifier prefixedIdentifier = new ElementResolver_SyntheticIdentifier("${prefixElement.name}.${identifier.name}");
-        Element importedElement = nameScope2.lookup(prefixedIdentifier, definingLibrary2);
+        Element importedElement = nameScope.lookup(prefixedIdentifier, definingLibrary);
         if (importedElement != null) {
           if (element == null) {
             element = importedElement;
           } else {
-            element = new MultiplyDefinedElementImpl(definingLibrary2.context, element, importedElement);
+            element = new MultiplyDefinedElementImpl(definingLibrary.context, element, importedElement);
           }
         }
       }
@@ -2414,8 +2414,8 @@
    * @return the name of the method invoked by the expression
    */
   String getPrefixOperator(PrefixExpression node) {
-    sc.Token operator2 = node.operator;
-    sc.TokenType operatorType = operator2.type;
+    sc.Token operator = node.operator;
+    sc.TokenType operatorType = operator.type;
     if (identical(operatorType, sc.TokenType.PLUS_PLUS)) {
       return sc.TokenType.PLUS.lexeme;
     } else if (identical(operatorType, sc.TokenType.MINUS_MINUS)) {
@@ -2423,7 +2423,7 @@
     } else if (identical(operatorType, sc.TokenType.MINUS)) {
       return "unary-";
     } else {
-      return operator2.lexeme;
+      return operator.lexeme;
     }
   }
 
@@ -2433,11 +2433,11 @@
    * @return the type of the given expression
    */
   Type2 getPropagatedType(Expression expression) {
-    Type2 propagatedType2 = resolveTypeVariable(expression.propagatedType);
-    if (propagatedType2 is FunctionType) {
-      propagatedType2 = _resolver.typeProvider.functionType;
+    Type2 propagatedType = resolveTypeVariable(expression.propagatedType);
+    if (propagatedType is FunctionType) {
+      propagatedType = _resolver.typeProvider.functionType;
     }
-    return propagatedType2;
+    return propagatedType;
   }
 
   /**
@@ -2449,11 +2449,11 @@
     if (expression is NullLiteral) {
       return _resolver.typeProvider.objectType;
     }
-    Type2 staticType2 = resolveTypeVariable(expression.staticType);
-    if (staticType2 is FunctionType) {
-      staticType2 = _resolver.typeProvider.functionType;
+    Type2 staticType = resolveTypeVariable(expression.staticType);
+    if (staticType is FunctionType) {
+      staticType = _resolver.typeProvider.functionType;
     }
-    return staticType2;
+    return staticType;
   }
 
   /**
@@ -2514,15 +2514,15 @@
     node.staticElement = staticMethod;
     node.element = select3(staticMethod, propagatedMethod);
     if (shouldReportMissingMember(staticType, staticMethod) && (_strictMode || propagatedType == null || shouldReportMissingMember(propagatedType, propagatedMethod))) {
-      sc.Token leftBracket2 = node.leftBracket;
-      sc.Token rightBracket2 = node.rightBracket;
-      if (leftBracket2 == null || rightBracket2 == null) {
+      sc.Token leftBracket = node.leftBracket;
+      sc.Token rightBracket = node.rightBracket;
+      if (leftBracket == null || rightBracket == null) {
         _resolver.reportError(StaticTypeWarningCode.UNDEFINED_OPERATOR, node, [methodName, staticType.displayName]);
         return true;
       } else {
-        int offset2 = leftBracket2.offset;
-        int length = rightBracket2.offset - offset2 + 1;
-        _resolver.reportError5(StaticTypeWarningCode.UNDEFINED_OPERATOR, offset2, length, [methodName, staticType.displayName]);
+        int offset = leftBracket.offset;
+        int length = rightBracket.offset - offset + 1;
+        _resolver.reportError5(StaticTypeWarningCode.UNDEFINED_OPERATOR, offset, length, [methodName, staticType.displayName]);
         return true;
       }
     }
@@ -2589,11 +2589,11 @@
         return getter;
       }
     }
-    InterfaceType superclass2 = targetType.superclass;
-    if (superclass2 == null) {
+    InterfaceType superclass = targetType.superclass;
+    if (superclass == null) {
       return null;
     }
-    return lookUpGetterInInterfaces(superclass2, true, getterName, visitedInterfaces);
+    return lookUpGetterInInterfaces(superclass, true, getterName, visitedInterfaces);
   }
 
   /**
@@ -2660,11 +2660,11 @@
         return member;
       }
     }
-    InterfaceType superclass2 = targetType.superclass;
-    if (superclass2 == null) {
+    InterfaceType superclass = targetType.superclass;
+    if (superclass == null) {
       return null;
     }
-    return lookUpGetterOrMethodInInterfaces(superclass2, true, memberName, visitedInterfaces);
+    return lookUpGetterOrMethodInInterfaces(superclass, true, memberName, visitedInterfaces);
   }
 
   /**
@@ -2674,21 +2674,21 @@
    * @return the element corresponding to the given label node in the current scope
    */
   LabelElementImpl lookupLabel(ASTNode parentNode, SimpleIdentifier labelNode) {
-    LabelScope labelScope2 = _resolver.labelScope;
+    LabelScope labelScope = _resolver.labelScope;
     LabelElementImpl labelElement = null;
     if (labelNode == null) {
-      if (labelScope2 == null) {
+      if (labelScope == null) {
       } else {
-        labelElement = labelScope2.lookup2(LabelScope.EMPTY_LABEL) as LabelElementImpl;
+        labelElement = labelScope.lookup2(LabelScope.EMPTY_LABEL) as LabelElementImpl;
         if (labelElement == null) {
         }
         labelElement = null;
       }
     } else {
-      if (labelScope2 == null) {
+      if (labelScope == null) {
         _resolver.reportError(CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
       } else {
-        labelElement = labelScope2.lookup(labelNode) as LabelElementImpl;
+        labelElement = labelScope.lookup(labelNode) as LabelElementImpl;
         if (labelElement == null) {
           _resolver.reportError(CompileTimeErrorCode.LABEL_UNDEFINED, labelNode, [labelNode.name]);
         } else {
@@ -2766,11 +2766,11 @@
         return method;
       }
     }
-    InterfaceType superclass2 = targetType.superclass;
-    if (superclass2 == null) {
+    InterfaceType superclass = targetType.superclass;
+    if (superclass == null) {
       return null;
     }
-    return lookUpMethodInInterfaces(superclass2, true, methodName, visitedInterfaces);
+    return lookUpMethodInInterfaces(superclass, true, methodName, visitedInterfaces);
   }
 
   /**
@@ -2833,11 +2833,11 @@
         return setter;
       }
     }
-    InterfaceType superclass2 = targetType.superclass;
-    if (superclass2 == null) {
+    InterfaceType superclass = targetType.superclass;
+    if (superclass == null) {
       return null;
     }
-    return lookUpSetterInInterfaces(superclass2, true, setterName, visitedInterfaces);
+    return lookUpSetterInInterfaces(superclass, true, setterName, visitedInterfaces);
   }
 
   /**
@@ -2913,8 +2913,8 @@
     if (executableElement == null) {
       return null;
     }
-    List<ParameterElement> parameters2 = executableElement.parameters;
-    return resolveArgumentsToParameters2(reportError, argumentList, parameters2);
+    List<ParameterElement> parameters = executableElement.parameters;
+    return resolveArgumentsToParameters2(reportError, argumentList, parameters);
   }
 
   /**
@@ -2944,26 +2944,26 @@
     unnamedParameters.addAll(positionalParameters);
     int unnamedParameterCount = unnamedParameters.length;
     int unnamedIndex = 0;
-    NodeList<Expression> arguments2 = argumentList.arguments;
-    int argumentCount = arguments2.length;
+    NodeList<Expression> arguments = argumentList.arguments;
+    int argumentCount = arguments.length;
     List<ParameterElement> resolvedParameters = new List<ParameterElement>(argumentCount);
     int positionalArgumentCount = 0;
     Set<String> usedNames = new Set<String>();
     for (int i = 0; i < argumentCount; i++) {
-      Expression argument = arguments2[i];
+      Expression argument = arguments[i];
       if (argument is NamedExpression) {
         SimpleIdentifier nameNode = ((argument as NamedExpression)).name.label;
-        String name2 = nameNode.name;
-        ParameterElement element = namedParameters[name2];
+        String name = nameNode.name;
+        ParameterElement element = namedParameters[name];
         if (element == null) {
           ErrorCode errorCode = reportError2 ? CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER : StaticWarningCode.UNDEFINED_NAMED_PARAMETER;
-          _resolver.reportError(errorCode, nameNode, [name2]);
+          _resolver.reportError(errorCode, nameNode, [name]);
         } else {
           resolvedParameters[i] = element;
           recordResolution(nameNode, element);
         }
-        if (!javaSetAdd(usedNames, name2)) {
-          _resolver.reportError(CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT, nameNode, [name2]);
+        if (!javaSetAdd(usedNames, name)) {
+          _resolver.reportError(CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT, nameNode, [name]);
         }
       } else {
         positionalArgumentCount++;
@@ -3029,8 +3029,8 @@
     } else if (target is SimpleIdentifier) {
       Element targetElement = ((target as SimpleIdentifier)).element;
       if (targetElement is PrefixElement) {
-        String name2 = "${((target as SimpleIdentifier)).name}.${methodName}";
-        Identifier functionName = new ElementResolver_SyntheticIdentifier(name2);
+        String name = "${((target as SimpleIdentifier)).name}.${methodName}";
+        Identifier functionName = new ElementResolver_SyntheticIdentifier(name);
         Element element = _resolver.nameScope.lookup(functionName, _resolver.definingLibrary);
         if (element != null) {
           return element;
@@ -3051,9 +3051,9 @@
   Element resolveInvokedElement2(SimpleIdentifier methodName) {
     Element element = _resolver.nameScope.lookup(methodName, _resolver.definingLibrary);
     if (element == null) {
-      ClassElement enclosingClass2 = _resolver.enclosingClass;
-      if (enclosingClass2 != null) {
-        InterfaceType enclosingType = enclosingClass2.type;
+      ClassElement enclosingClass = _resolver.enclosingClass;
+      if (enclosingClass != null) {
+        InterfaceType enclosingType = enclosingClass.type;
         element = lookUpMethod(null, enclosingType, methodName.name);
         if (element == null) {
           element = lookUpGetter(null, enclosingType, methodName.name);
@@ -3126,25 +3126,25 @@
   Element resolveSimpleIdentifier(SimpleIdentifier node) {
     Element element = _resolver.nameScope.lookup(node, _resolver.definingLibrary);
     if (element is PropertyAccessorElement && node.inSetterContext()) {
-      PropertyInducingElement variable2 = ((element as PropertyAccessorElement)).variable;
-      if (variable2 != null) {
-        PropertyAccessorElement setter2 = variable2.setter;
-        if (setter2 == null) {
-          ClassElement enclosingClass2 = _resolver.enclosingClass;
-          if (enclosingClass2 != null) {
-            setter2 = lookUpSetter(null, enclosingClass2.type, node.name);
+      PropertyInducingElement variable = ((element as PropertyAccessorElement)).variable;
+      if (variable != null) {
+        PropertyAccessorElement setter = variable.setter;
+        if (setter == null) {
+          ClassElement enclosingClass = _resolver.enclosingClass;
+          if (enclosingClass != null) {
+            setter = lookUpSetter(null, enclosingClass.type, node.name);
           }
         }
-        if (setter2 != null) {
-          element = setter2;
+        if (setter != null) {
+          element = setter;
         }
       }
     } else if (element == null && node.inSetterContext()) {
       element = _resolver.nameScope.lookup(new ElementResolver_SyntheticIdentifier("${node.name}="), _resolver.definingLibrary);
     }
-    ClassElement enclosingClass3 = _resolver.enclosingClass;
-    if (element == null && enclosingClass3 != null) {
-      InterfaceType enclosingType = enclosingClass3.type;
+    ClassElement enclosingClass = _resolver.enclosingClass;
+    if (element == null && enclosingClass != null) {
+      InterfaceType enclosingType = enclosingClass.type;
       if (element == null && node.inSetterContext()) {
         element = lookUpSetter(null, enclosingType, node.name);
       }
@@ -3167,11 +3167,11 @@
    */
   Type2 resolveTypeVariable(Type2 type) {
     if (type is TypeVariableType) {
-      Type2 bound2 = ((type as TypeVariableType)).element.bound;
-      if (bound2 == null) {
+      Type2 bound = ((type as TypeVariableType)).element.bound;
+      if (bound == null) {
         return _resolver.typeProvider.objectType;
       }
-      return bound2;
+      return bound;
     }
     return type;
   }
@@ -3434,9 +3434,9 @@
       resultMap = new Map<String, ExecutableElement>();
     }
     ClassElement superclassElt = null;
-    InterfaceType supertype2 = classElt.supertype;
-    if (supertype2 != null) {
-      superclassElt = supertype2.element;
+    InterfaceType supertype = classElt.supertype;
+    if (supertype != null) {
+      superclassElt = supertype.element;
     } else {
       _classLookup[classElt] = resultMap;
       return resultMap;
@@ -3451,9 +3451,9 @@
       }
       recordMapWithClassMembers(resultMap, superclassElt);
     }
-    List<InterfaceType> mixins2 = classElt.mixins;
-    for (int i = mixins2.length - 1; i >= 0; i--) {
-      ClassElement mixinElement = mixins2[i].element;
+    List<InterfaceType> mixins = classElt.mixins;
+    for (int i = mixins.length - 1; i >= 0; i--) {
+      ClassElement mixinElement = mixins[i].element;
       if (mixinElement != null) {
         recordMapWithClassMembers(resultMap, mixinElement);
       }
@@ -3473,8 +3473,8 @@
   void computeInheritancePath(Queue<InterfaceType> chain, InterfaceType currentType, String memberName) {
     chain.add(currentType);
     ClassElement classElt = currentType.element;
-    InterfaceType supertype2 = classElt.supertype;
-    if (supertype2 == null) {
+    InterfaceType supertype = classElt.supertype;
+    if (supertype == null) {
       return;
     }
     if (chain.length != 1) {
@@ -3482,24 +3482,24 @@
         return;
       }
     }
-    List<InterfaceType> mixins2 = classElt.mixins;
-    for (int i = mixins2.length - 1; i >= 0; i--) {
-      ClassElement mixinElement = mixins2[i].element;
+    List<InterfaceType> mixins = classElt.mixins;
+    for (int i = mixins.length - 1; i >= 0; i--) {
+      ClassElement mixinElement = mixins[i].element;
       if (mixinElement != null) {
         ExecutableElement elt = lookupMemberInClass(mixinElement, memberName);
         if (elt != null) {
-          chain.add(mixins2[i]);
+          chain.add(mixins[i]);
           return;
         }
       }
     }
-    ClassElement superclassElt = supertype2.element;
+    ClassElement superclassElt = supertype.element;
     if (lookupMember(superclassElt, memberName) != null) {
-      computeInheritancePath(chain, supertype2, memberName);
+      computeInheritancePath(chain, supertype, memberName);
       return;
     }
-    List<InterfaceType> interfaces2 = classElt.interfaces;
-    for (InterfaceType interfaceType in interfaces2) {
+    List<InterfaceType> interfaces = classElt.interfaces;
+    for (InterfaceType interfaceType in interfaces) {
       ClassElement interfaceElement = interfaceType.element;
       if (interfaceElement != null && lookupMember(interfaceElement, memberName) != null) {
         computeInheritancePath(chain, interfaceType, memberName);
@@ -3523,10 +3523,10 @@
     } else {
       resultMap = new Map<String, ExecutableElement>();
     }
-    InterfaceType supertype2 = classElt.supertype;
-    ClassElement superclassElement = supertype2 != null ? supertype2.element : null;
-    List<InterfaceType> interfaces2 = classElt.interfaces;
-    if (superclassElement == null || interfaces2.length == 0) {
+    InterfaceType supertype = classElt.supertype;
+    ClassElement superclassElement = supertype != null ? supertype.element : null;
+    List<InterfaceType> interfaces = classElt.interfaces;
+    if (superclassElement == null || interfaces.length == 0) {
       _interfaceLookup[classElt] = resultMap;
       return resultMap;
     }
@@ -3549,7 +3549,7 @@
         }
       }
     }
-    for (InterfaceType interfaceType in interfaces2) {
+    for (InterfaceType interfaceType in interfaces) {
       ClassElement interfaceElement = interfaceType.element;
       if (interfaceElement != null) {
         if (!visitedInterfaces.contains(interfaceElement)) {
@@ -3588,8 +3588,8 @@
       }
     }
     if (superclassElement != null) {
-      List<MethodElement> methods2 = superclassElement.methods;
-      for (MethodElement method in methods2) {
+      List<MethodElement> methods = superclassElement.methods;
+      for (MethodElement method in methods) {
         if (method.isAccessibleIn(_library) && !method.isStatic()) {
           String key = method.name;
           if (!unionMap.containsKey(key)) {
@@ -3601,8 +3601,8 @@
           }
         }
       }
-      List<PropertyAccessorElement> accessors2 = superclassElement.accessors;
-      for (PropertyAccessorElement accessor in accessors2) {
+      List<PropertyAccessorElement> accessors = superclassElement.accessors;
+      for (PropertyAccessorElement accessor in accessors) {
         if (accessor.isAccessibleIn(_library) && !accessor.isStatic()) {
           String key = accessor.name;
           if (!unionMap.containsKey(key)) {
@@ -3615,11 +3615,11 @@
         }
       }
     }
-    for (InterfaceType interfaceType in interfaces2) {
+    for (InterfaceType interfaceType in interfaces) {
       ClassElement interfaceElement = interfaceType.element;
       if (interfaceElement != null) {
-        List<MethodElement> methods3 = interfaceElement.methods;
-        for (MethodElement method in methods3) {
+        List<MethodElement> methods = interfaceElement.methods;
+        for (MethodElement method in methods) {
           if (method.isAccessibleIn(_library) && !method.isStatic()) {
             String key = method.name;
             if (!unionMap.containsKey(key)) {
@@ -3631,8 +3631,8 @@
             }
           }
         }
-        List<PropertyAccessorElement> accessors3 = interfaceElement.accessors;
-        for (PropertyAccessorElement accessor in accessors3) {
+        List<PropertyAccessorElement> accessors = interfaceElement.accessors;
+        for (PropertyAccessorElement accessor in accessors) {
           if (accessor.isAccessibleIn(_library) && !accessor.isStatic()) {
             String key = accessor.name;
             if (!unionMap.containsKey(key)) {
@@ -3720,14 +3720,14 @@
    * @return the found {@link ExecutableElement}, or {@code null} if no such member was found
    */
   ExecutableElement lookupMemberInClass(ClassElement classElt, String memberName) {
-    List<MethodElement> methods2 = classElt.methods;
-    for (MethodElement method in methods2) {
+    List<MethodElement> methods = classElt.methods;
+    for (MethodElement method in methods) {
       if (memberName == method.name && method.isAccessibleIn(_library) && !method.isStatic()) {
         return method;
       }
     }
-    List<PropertyAccessorElement> accessors2 = classElt.accessors;
-    for (PropertyAccessorElement accessor in accessors2) {
+    List<PropertyAccessorElement> accessors = classElt.accessors;
+    for (PropertyAccessorElement accessor in accessors) {
       if (memberName == accessor.name && accessor.isAccessibleIn(_library) && !accessor.isStatic()) {
         return accessor;
       }
@@ -3742,14 +3742,14 @@
    * @param classElt the class element that will be recorded into the passed map
    */
   void recordMapWithClassMembers(Map<String, ExecutableElement> map, ClassElement classElt) {
-    List<MethodElement> methods2 = classElt.methods;
-    for (MethodElement method in methods2) {
+    List<MethodElement> methods = classElt.methods;
+    for (MethodElement method in methods) {
       if (method.isAccessibleIn(_library) && !method.isStatic()) {
         map[method.name] = method;
       }
     }
-    List<PropertyAccessorElement> accessors2 = classElt.accessors;
-    for (PropertyAccessorElement accessor in accessors2) {
+    List<PropertyAccessorElement> accessors = classElt.accessors;
+    for (PropertyAccessorElement accessor in accessors) {
       if (accessor.isAccessibleIn(_library) && !accessor.isStatic()) {
         map[accessor.name] = accessor;
       }
@@ -4105,16 +4105,16 @@
    */
   LibraryElementImpl buildLibrary(Library library) {
     CompilationUnitBuilder builder = new CompilationUnitBuilder();
-    Source librarySource2 = library.librarySource;
-    CompilationUnit definingCompilationUnit2 = library.definingCompilationUnit;
-    CompilationUnitElementImpl definingCompilationUnitElement = builder.buildCompilationUnit(librarySource2, definingCompilationUnit2);
-    NodeList<Directive> directives2 = definingCompilationUnit2.directives;
+    Source librarySource = library.librarySource;
+    CompilationUnit definingCompilationUnit = library.definingCompilationUnit;
+    CompilationUnitElementImpl definingCompilationUnitElement = builder.buildCompilationUnit(librarySource, definingCompilationUnit);
+    NodeList<Directive> directives = definingCompilationUnit.directives;
     LibraryIdentifier libraryNameNode = null;
     bool hasPartDirective = false;
     FunctionElement entryPoint = findEntryPoint(definingCompilationUnitElement);
     List<Directive> directivesToResolve = new List<Directive>();
     List<CompilationUnitElementImpl> sourcedCompilationUnits = new List<CompilationUnitElementImpl>();
-    for (Directive directive in directives2) {
+    for (Directive directive in directives) {
       if (directive is LibraryDirective) {
         if (libraryNameNode == null) {
           libraryNameNode = ((directive as LibraryDirective)).name;
@@ -4130,10 +4130,10 @@
           part.uri = library.getUri(partDirective);
           String partLibraryName = getPartLibraryName(library, partSource, directivesToResolve);
           if (partLibraryName == null) {
-            _errorListener.onError(new AnalysisError.con2(librarySource2, partUri.offset, partUri.length, CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()]));
+            _errorListener.onError(new AnalysisError.con2(librarySource, partUri.offset, partUri.length, CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()]));
           } else if (libraryNameNode == null) {
           } else if (libraryNameNode.name != partLibraryName) {
-            _errorListener.onError(new AnalysisError.con2(librarySource2, partUri.offset, partUri.length, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [libraryNameNode.name, partLibraryName]));
+            _errorListener.onError(new AnalysisError.con2(librarySource, partUri.offset, partUri.length, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [libraryNameNode.name, partLibraryName]));
           }
           if (entryPoint == null) {
             entryPoint = findEntryPoint(part);
@@ -4144,7 +4144,7 @@
       }
     }
     if (hasPartDirective && libraryNameNode == null) {
-      _errorListener.onError(new AnalysisError.con1(librarySource2, ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART, []));
+      _errorListener.onError(new AnalysisError.con1(librarySource, ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART, []));
     }
     LibraryElementImpl libraryElement = new LibraryElementImpl(_analysisContext, libraryNameNode);
     libraryElement.definingCompilationUnit = definingCompilationUnitElement;
@@ -4213,9 +4213,9 @@
       for (Directive directive in partUnit.directives) {
         if (directive is PartOfDirective) {
           directivesToResolve.add(directive);
-          LibraryIdentifier libraryName2 = ((directive as PartOfDirective)).libraryName;
-          if (libraryName2 != null) {
-            return libraryName2.name;
+          LibraryIdentifier libraryName = ((directive as PartOfDirective)).libraryName;
+          if (libraryName != null) {
+            return libraryName.name;
           }
         }
       }
@@ -4240,9 +4240,9 @@
     for (PropertyAccessorElement setter in setters) {
       PropertyAccessorElement getter = getters[setter.displayName];
       if (getter != null) {
-        PropertyInducingElementImpl variable2 = getter.variable as PropertyInducingElementImpl;
-        variable2.setter = setter;
-        ((setter as PropertyAccessorElementImpl)).variable = variable2;
+        PropertyInducingElementImpl variable = getter.variable as PropertyInducingElementImpl;
+        variable.setter = setter;
+        ((setter as PropertyAccessorElementImpl)).variable = variable;
       }
     }
   }
@@ -4548,16 +4548,16 @@
           }
         }
       }
-      Source librarySource2 = library.librarySource;
-      if (!library.explicitlyImportsCore && _coreLibrarySource != librarySource2) {
+      Source librarySource = library.librarySource;
+      if (!library.explicitlyImportsCore && _coreLibrarySource != librarySource) {
         ImportElementImpl importElement = new ImportElementImpl();
         importElement.importedLibrary = _coreLibrary.libraryElement;
         importElement.synthetic = true;
         imports.add(importElement);
       }
-      LibraryElementImpl libraryElement2 = library.libraryElement;
-      libraryElement2.imports = new List.from(imports);
-      libraryElement2.exports = new List.from(exports);
+      LibraryElementImpl libraryElement = library.libraryElement;
+      libraryElement.imports = new List.from(imports);
+      libraryElement.exports = new List.from(exports);
     }
   }
 
@@ -4737,8 +4737,8 @@
    * @return {@code true} if and only if the passed {@link CompilationUnit} has a part-of directive
    */
   bool doesCompilationUnitHavePartOfDirective(CompilationUnit node) {
-    NodeList<Directive> directives2 = node.directives;
-    for (Directive directive in directives2) {
+    NodeList<Directive> directives = node.directives;
+    for (Directive directive in directives) {
       if (directive is PartOfDirective) {
         return true;
       }
@@ -4918,33 +4918,33 @@
   }
   Object visitBinaryExpression(BinaryExpression node) {
     sc.TokenType operatorType = node.operator.type;
-    Expression leftOperand2 = node.leftOperand;
-    Expression rightOperand2 = node.rightOperand;
+    Expression leftOperand = node.leftOperand;
+    Expression rightOperand = node.rightOperand;
     if (identical(operatorType, sc.TokenType.AMPERSAND_AMPERSAND)) {
-      safelyVisit(leftOperand2);
-      if (rightOperand2 != null) {
+      safelyVisit(leftOperand);
+      if (rightOperand != null) {
         try {
           _overrideManager.enterScope();
-          propagateTrueState(leftOperand2);
-          rightOperand2.accept(this);
+          propagateTrueState(leftOperand);
+          rightOperand.accept(this);
         } finally {
           _overrideManager.exitScope();
         }
       }
     } else if (identical(operatorType, sc.TokenType.BAR_BAR)) {
-      safelyVisit(leftOperand2);
-      if (rightOperand2 != null) {
+      safelyVisit(leftOperand);
+      if (rightOperand != null) {
         try {
           _overrideManager.enterScope();
-          propagateFalseState(leftOperand2);
-          rightOperand2.accept(this);
+          propagateFalseState(leftOperand);
+          rightOperand.accept(this);
         } finally {
           _overrideManager.exitScope();
         }
       }
     } else {
-      safelyVisit(leftOperand2);
-      safelyVisit(rightOperand2);
+      safelyVisit(leftOperand);
+      safelyVisit(rightOperand);
     }
     node.accept(_elementResolver);
     node.accept(_typeAnalyzer);
@@ -4997,38 +4997,38 @@
     return null;
   }
   Object visitConditionalExpression(ConditionalExpression node) {
-    Expression condition2 = node.condition;
-    safelyVisit(condition2);
-    Expression thenExpression2 = node.thenExpression;
-    if (thenExpression2 != null) {
+    Expression condition = node.condition;
+    safelyVisit(condition);
+    Expression thenExpression = node.thenExpression;
+    if (thenExpression != null) {
       try {
         _overrideManager.enterScope();
-        propagateTrueState(condition2);
-        thenExpression2.accept(this);
+        propagateTrueState(condition);
+        thenExpression.accept(this);
       } finally {
         _overrideManager.exitScope();
       }
     }
-    Expression elseExpression2 = node.elseExpression;
-    if (elseExpression2 != null) {
+    Expression elseExpression = node.elseExpression;
+    if (elseExpression != null) {
       try {
         _overrideManager.enterScope();
-        propagateFalseState(condition2);
-        elseExpression2.accept(this);
+        propagateFalseState(condition);
+        elseExpression.accept(this);
       } finally {
         _overrideManager.exitScope();
       }
     }
     node.accept(_elementResolver);
     node.accept(_typeAnalyzer);
-    bool thenIsAbrupt = isAbruptTermination(thenExpression2);
-    bool elseIsAbrupt = isAbruptTermination(elseExpression2);
+    bool thenIsAbrupt = isAbruptTermination(thenExpression);
+    bool elseIsAbrupt = isAbruptTermination(elseExpression);
     if (elseIsAbrupt && !thenIsAbrupt) {
-      propagateTrueState(condition2);
-      propagateState(thenExpression2);
+      propagateTrueState(condition);
+      propagateState(thenExpression);
     } else if (thenIsAbrupt && !elseIsAbrupt) {
-      propagateFalseState(condition2);
-      propagateState(elseExpression2);
+      propagateFalseState(condition);
+      propagateState(elseExpression);
     }
     return null;
   }
@@ -5130,27 +5130,27 @@
   }
   Object visitHideCombinator(HideCombinator node) => null;
   Object visitIfStatement(IfStatement node) {
-    Expression condition2 = node.condition;
-    safelyVisit(condition2);
+    Expression condition = node.condition;
+    safelyVisit(condition);
     Map<Element, Type2> thenOverrides = null;
-    Statement thenStatement2 = node.thenStatement;
-    if (thenStatement2 != null) {
+    Statement thenStatement = node.thenStatement;
+    if (thenStatement != null) {
       try {
         _overrideManager.enterScope();
-        propagateTrueState(condition2);
-        thenStatement2.accept(this);
+        propagateTrueState(condition);
+        thenStatement.accept(this);
       } finally {
         thenOverrides = _overrideManager.captureLocalOverrides();
         _overrideManager.exitScope();
       }
     }
     Map<Element, Type2> elseOverrides = null;
-    Statement elseStatement2 = node.elseStatement;
-    if (elseStatement2 != null) {
+    Statement elseStatement = node.elseStatement;
+    if (elseStatement != null) {
       try {
         _overrideManager.enterScope();
-        propagateFalseState(condition2);
-        elseStatement2.accept(this);
+        propagateFalseState(condition);
+        elseStatement.accept(this);
       } finally {
         elseOverrides = _overrideManager.captureLocalOverrides();
         _overrideManager.exitScope();
@@ -5158,15 +5158,15 @@
     }
     node.accept(_elementResolver);
     node.accept(_typeAnalyzer);
-    bool thenIsAbrupt = isAbruptTermination2(thenStatement2);
-    bool elseIsAbrupt = isAbruptTermination2(elseStatement2);
+    bool thenIsAbrupt = isAbruptTermination2(thenStatement);
+    bool elseIsAbrupt = isAbruptTermination2(elseStatement);
     if (elseIsAbrupt && !thenIsAbrupt) {
-      propagateTrueState(condition2);
+      propagateTrueState(condition);
       if (thenOverrides != null) {
         _overrideManager.applyOverrides(thenOverrides);
       }
     } else if (thenIsAbrupt && !elseIsAbrupt) {
-      propagateFalseState(condition2);
+      propagateFalseState(condition);
       if (elseOverrides != null) {
         _overrideManager.applyOverrides(elseOverrides);
       }
@@ -5254,14 +5254,14 @@
   }
   Object visitTypeName(TypeName node) => null;
   Object visitWhileStatement(WhileStatement node) {
-    Expression condition2 = node.condition;
-    safelyVisit(condition2);
-    Statement body2 = node.body;
-    if (body2 != null) {
+    Expression condition = node.condition;
+    safelyVisit(condition);
+    Statement body = node.body;
+    if (body != null) {
       try {
         _overrideManager.enterScope();
-        propagateTrueState(condition2);
-        body2.accept(this);
+        propagateTrueState(condition);
+        body.accept(this);
       } finally {
         _overrideManager.exitScope();
       }
@@ -5328,21 +5328,21 @@
     }
   }
   void visitForEachStatementInScope(ForEachStatement node) {
-    Expression iterator2 = node.iterator;
-    safelyVisit(iterator2);
-    DeclaredIdentifier loopVariable2 = node.loopVariable;
-    safelyVisit(loopVariable2);
-    Statement body2 = node.body;
-    if (body2 != null) {
+    Expression iterator = node.iterator;
+    safelyVisit(iterator);
+    DeclaredIdentifier loopVariable = node.loopVariable;
+    safelyVisit(loopVariable);
+    Statement body = node.body;
+    if (body != null) {
       try {
         _overrideManager.enterScope();
-        if (loopVariable2 != null && iterator2 != null) {
-          LocalVariableElement loopElement = loopVariable2.element;
+        if (loopVariable != null && iterator != null) {
+          LocalVariableElement loopElement = loopVariable.element;
           if (loopElement != null) {
-            override(loopElement, getIteratorElementType(iterator2));
+            override(loopElement, getIteratorElementType(iterator));
           }
         }
-        body2.accept(this);
+        body.accept(this);
       } finally {
         _overrideManager.exitScope();
       }
@@ -5433,12 +5433,12 @@
     } else if (statement is ExpressionStatement) {
       return isAbruptTermination(((statement as ExpressionStatement)).expression);
     } else if (statement is Block) {
-      NodeList<Statement> statements2 = ((statement as Block)).statements;
-      int size2 = statements2.length;
-      if (size2 == 0) {
+      NodeList<Statement> statements = ((statement as Block)).statements;
+      int size = statements.length;
+      if (size == 0) {
         return false;
       }
-      return isAbruptTermination2(statements2[size2 - 1]);
+      return isAbruptTermination2(statements[size - 1]);
     }
     return false;
   }
@@ -5570,9 +5570,9 @@
   _jtd_constructor_275_impl(Library library, Source source2, TypeProvider typeProvider2) {
     this._definingLibrary = library.libraryElement;
     this._source = source2;
-    LibraryScope libraryScope2 = library.libraryScope;
-    this._errorListener = libraryScope2.errorListener;
-    this._nameScope = libraryScope2;
+    LibraryScope libraryScope = library.libraryScope;
+    this._errorListener = libraryScope.errorListener;
+    this._nameScope = libraryScope;
     this._typeProvider = typeProvider2;
   }
 
@@ -5666,9 +5666,9 @@
     return null;
   }
   Object visitDeclaredIdentifier(DeclaredIdentifier node) {
-    VariableElement element2 = node.element;
-    if (element2 != null) {
-      _nameScope.define(element2);
+    VariableElement element = node.element;
+    if (element != null) {
+      _nameScope.define(element);
     }
     super.visitDeclaredIdentifier(node);
     return null;
@@ -5810,9 +5810,9 @@
   }
   Object visitVariableDeclaration(VariableDeclaration node) {
     if (node.parent.parent is! TopLevelVariableDeclaration && node.parent.parent is! FieldDeclaration) {
-      VariableElement element2 = node.element;
-      if (element2 != null) {
-        _nameScope.define(element2);
+      VariableElement element = node.element;
+      if (element != null) {
+        _nameScope.define(element);
       }
     }
     super.visitVariableDeclaration(node);
@@ -6121,13 +6121,13 @@
    * <i>e<sub>3</sub></i>.</blockquote>
    */
   Object visitAssignmentExpression(AssignmentExpression node) {
-    sc.TokenType operator2 = node.operator.type;
-    if (identical(operator2, sc.TokenType.EQ)) {
-      Expression rightHandSide2 = node.rightHandSide;
-      Type2 staticType = getStaticType(rightHandSide2);
+    sc.TokenType operator = node.operator.type;
+    if (identical(operator, sc.TokenType.EQ)) {
+      Expression rightHandSide = node.rightHandSide;
+      Type2 staticType = getStaticType(rightHandSide);
       recordStaticType(node, staticType);
       Type2 overrideType = staticType;
-      Type2 propagatedType = getPropagatedType(rightHandSide2);
+      Type2 propagatedType = getPropagatedType(rightHandSide);
       if (propagatedType != null) {
         if (propagatedType.isMoreSpecificThan(staticType)) {
           recordPropagatedType(node, propagatedType);
@@ -6390,11 +6390,11 @@
    */
   Object visitInstanceCreationExpression(InstanceCreationExpression node) {
     recordStaticType(node, node.constructorName.type.type);
-    ConstructorElement element2 = node.element;
-    if (element2 != null && "Element" == element2.enclosingElement.name && "tag" == element2.name) {
-      LibraryElement library2 = element2.library;
-      if (isHtmlLibrary(library2)) {
-        Type2 returnType = getFirstArgumentAsType2(library2, node.argumentList, _HTML_ELEMENT_TO_CLASS_MAP);
+    ConstructorElement element = node.element;
+    if (element != null && "Element" == element.enclosingElement.name && "tag" == element.name) {
+      LibraryElement library = element.library;
+      if (isHtmlLibrary(library)) {
+        Type2 returnType = getFirstArgumentAsType2(library, node.argumentList, _HTML_ELEMENT_TO_CLASS_MAP);
         if (returnType != null) {
           recordPropagatedType(node, returnType);
         }
@@ -6431,11 +6431,11 @@
    */
   Object visitListLiteral(ListLiteral node) {
     Type2 staticType = _dynamicType;
-    TypeArgumentList typeArguments2 = node.typeArguments;
-    if (typeArguments2 != null) {
-      NodeList<TypeName> arguments2 = typeArguments2.arguments;
-      if (arguments2 != null && arguments2.length == 1) {
-        TypeName argumentTypeName = arguments2[0];
+    TypeArgumentList typeArguments = node.typeArguments;
+    if (typeArguments != null) {
+      NodeList<TypeName> arguments = typeArguments.arguments;
+      if (arguments != null && arguments.length == 1) {
+        TypeName argumentTypeName = arguments[0];
         Type2 argumentType = getType2(argumentTypeName);
         if (argumentType != null) {
           staticType = argumentType;
@@ -6443,12 +6443,12 @@
       }
     }
     recordStaticType(node, _typeProvider.listType.substitute5(<Type2> [staticType]));
-    NodeList<Expression> elements2 = node.elements;
-    int count = elements2.length;
+    NodeList<Expression> elements = node.elements;
+    int count = elements.length;
     if (count > 0) {
-      Type2 propagatedType = getBestType(elements2[0]);
+      Type2 propagatedType = getBestType(elements[0]);
       for (int i = 1; i < count; i++) {
-        Type2 elementType = getBestType(elements2[i]);
+        Type2 elementType = getBestType(elements[i]);
         if (propagatedType != elementType) {
           propagatedType = _dynamicType;
         } else {
@@ -6480,16 +6480,16 @@
   Object visitMapLiteral(MapLiteral node) {
     Type2 staticKeyType = _dynamicType;
     Type2 staticValueType = _dynamicType;
-    TypeArgumentList typeArguments2 = node.typeArguments;
-    if (typeArguments2 != null) {
-      NodeList<TypeName> arguments2 = typeArguments2.arguments;
-      if (arguments2 != null && arguments2.length == 2) {
-        TypeName entryKeyTypeName = arguments2[0];
+    TypeArgumentList typeArguments = node.typeArguments;
+    if (typeArguments != null) {
+      NodeList<TypeName> arguments = typeArguments.arguments;
+      if (arguments != null && arguments.length == 2) {
+        TypeName entryKeyTypeName = arguments[0];
         Type2 entryKeyType = getType2(entryKeyTypeName);
         if (entryKeyType != null) {
           staticKeyType = entryKeyType;
         }
-        TypeName entryValueTypeName = arguments2[1];
+        TypeName entryValueTypeName = arguments[1];
         Type2 entryValueType = getType2(entryValueTypeName);
         if (entryValueType != null) {
           staticValueType = entryValueType;
@@ -6497,14 +6497,14 @@
       }
     }
     recordStaticType(node, _typeProvider.mapType.substitute5(<Type2> [staticKeyType, staticValueType]));
-    NodeList<MapLiteralEntry> entries2 = node.entries;
-    int count = entries2.length;
+    NodeList<MapLiteralEntry> entries = node.entries;
+    int count = entries.length;
     if (count > 0) {
-      MapLiteralEntry entry = entries2[0];
+      MapLiteralEntry entry = entries[0];
       Type2 propagatedKeyType = getBestType(entry.key);
       Type2 propagatedValueType = getBestType(entry.value);
       for (int i = 1; i < count; i++) {
-        entry = entries2[i];
+        entry = entries[i];
         Type2 elementKeyType = getBestType(entry.key);
         if (propagatedKeyType != elementKeyType) {
           propagatedKeyType = _dynamicType;
@@ -6589,9 +6589,9 @@
       if (target != null) {
         Type2 targetType = getBestType(target);
         if (targetType is InterfaceType && (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
-          LibraryElement library2 = targetType.element.library;
-          if (isHtmlLibrary(library2)) {
-            Type2 returnType = getFirstArgumentAsType(library2, node.argumentList);
+          LibraryElement library = targetType.element.library;
+          if (isHtmlLibrary(library)) {
+            Type2 returnType = getFirstArgumentAsType(library, node.argumentList);
             if (returnType != null) {
               recordPropagatedType(node, returnType);
             }
@@ -6603,9 +6603,9 @@
       if (target == null) {
         Element methodElement = methodNameNode.element;
         if (methodElement != null) {
-          LibraryElement library3 = methodElement.library;
-          if (isHtmlLibrary(library3)) {
-            Type2 returnType = getFirstArgumentAsQuery(library3, node.argumentList);
+          LibraryElement library = methodElement.library;
+          if (isHtmlLibrary(library)) {
+            Type2 returnType = getFirstArgumentAsQuery(library, node.argumentList);
             if (returnType != null) {
               recordPropagatedType(node, returnType);
             }
@@ -6614,9 +6614,9 @@
       } else {
         Type2 targetType = getBestType(target);
         if (targetType is InterfaceType && (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
-          LibraryElement library4 = targetType.element.library;
-          if (isHtmlLibrary(library4)) {
-            Type2 returnType = getFirstArgumentAsQuery(library4, node.argumentList);
+          LibraryElement library = targetType.element.library;
+          if (isHtmlLibrary(library)) {
+            Type2 returnType = getFirstArgumentAsQuery(library, node.argumentList);
             if (returnType != null) {
               recordPropagatedType(node, returnType);
             }
@@ -6627,9 +6627,9 @@
       Expression target = node.realTarget;
       Type2 targetType = getBestType(target);
       if (targetType is InterfaceType && (targetType.name == "HtmlDocument" || targetType.name == "Document")) {
-        LibraryElement library5 = targetType.element.library;
-        if (isHtmlLibrary(library5)) {
-          Type2 returnType = getFirstArgumentAsQuery(library5, node.argumentList);
+        LibraryElement library = targetType.element.library;
+        if (isHtmlLibrary(library)) {
+          Type2 returnType = getFirstArgumentAsQuery(library, node.argumentList);
           if (returnType != null) {
             recordPropagatedType(node, returnType);
           }
@@ -6652,9 +6652,9 @@
     return null;
   }
   Object visitNamedExpression(NamedExpression node) {
-    Expression expression2 = node.expression;
-    recordStaticType(node, getStaticType(expression2));
-    recordPropagatedType(node, getPropagatedType(expression2));
+    Expression expression = node.expression;
+    recordStaticType(node, getStaticType(expression));
+    recordPropagatedType(node, getPropagatedType(expression));
     return null;
   }
 
@@ -6667,9 +6667,9 @@
     return null;
   }
   Object visitParenthesizedExpression(ParenthesizedExpression node) {
-    Expression expression2 = node.expression;
-    recordStaticType(node, getStaticType(expression2));
-    recordPropagatedType(node, getPropagatedType(expression2));
+    Expression expression = node.expression;
+    recordStaticType(node, getStaticType(expression));
+    recordPropagatedType(node, getPropagatedType(expression));
     return null;
   }
 
@@ -6700,17 +6700,17 @@
    * = r - 1; return r}(e1, e2)</i></blockquote>
    */
   Object visitPostfixExpression(PostfixExpression node) {
-    Expression operand2 = node.operand;
-    Type2 staticType = getStaticType(operand2);
-    sc.TokenType operator2 = node.operator.type;
-    if (identical(operator2, sc.TokenType.MINUS_MINUS) || identical(operator2, sc.TokenType.PLUS_PLUS)) {
-      Type2 intType2 = _typeProvider.intType;
-      if (identical(getStaticType(node.operand), intType2)) {
-        staticType = intType2;
+    Expression operand = node.operand;
+    Type2 staticType = getStaticType(operand);
+    sc.TokenType operator = node.operator.type;
+    if (identical(operator, sc.TokenType.MINUS_MINUS) || identical(operator, sc.TokenType.PLUS_PLUS)) {
+      Type2 intType = _typeProvider.intType;
+      if (identical(getStaticType(node.operand), intType)) {
+        staticType = intType;
       }
     }
     recordStaticType(node, staticType);
-    recordPropagatedType(node, getPropagatedType(operand2));
+    recordPropagatedType(node, getPropagatedType(operand));
     return null;
   }
 
@@ -6719,30 +6719,30 @@
    */
   Object visitPrefixedIdentifier(PrefixedIdentifier node) {
     SimpleIdentifier prefixedIdentifier = node.identifier;
-    Element element2 = prefixedIdentifier.element;
+    Element element = prefixedIdentifier.element;
     Type2 staticType = _dynamicType;
-    if (element2 is ClassElement) {
+    if (element is ClassElement) {
       if (isNotTypeLiteral(node)) {
-        staticType = ((element2 as ClassElement)).type;
+        staticType = ((element as ClassElement)).type;
       } else {
         staticType = _typeProvider.typeType;
       }
-    } else if (element2 is FunctionTypeAliasElement) {
-      staticType = ((element2 as FunctionTypeAliasElement)).type;
-    } else if (element2 is MethodElement) {
-      staticType = ((element2 as MethodElement)).type;
-    } else if (element2 is PropertyAccessorElement) {
-      staticType = getType((element2 as PropertyAccessorElement), node.prefix.staticType);
-    } else if (element2 is ExecutableElement) {
-      staticType = ((element2 as ExecutableElement)).type;
-    } else if (element2 is TypeVariableElement) {
-      staticType = ((element2 as TypeVariableElement)).type;
-    } else if (element2 is VariableElement) {
-      staticType = ((element2 as VariableElement)).type;
+    } else if (element is FunctionTypeAliasElement) {
+      staticType = ((element as FunctionTypeAliasElement)).type;
+    } else if (element is MethodElement) {
+      staticType = ((element as MethodElement)).type;
+    } else if (element is PropertyAccessorElement) {
+      staticType = getType((element as PropertyAccessorElement), node.prefix.staticType);
+    } else if (element is ExecutableElement) {
+      staticType = ((element as ExecutableElement)).type;
+    } else if (element is TypeVariableElement) {
+      staticType = ((element as TypeVariableElement)).type;
+    } else if (element is VariableElement) {
+      staticType = ((element as VariableElement)).type;
     }
     recordStaticType(prefixedIdentifier, staticType);
     recordStaticType(node, staticType);
-    Type2 propagatedType = _overrideManager.getType(element2);
+    Type2 propagatedType = _overrideManager.getType(element);
     if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
       recordPropagatedType(prefixedIdentifier, propagatedType);
       recordPropagatedType(node, propagatedType);
@@ -6756,16 +6756,16 @@
    * form <i>op super</i> is equivalent to the method invocation <i>super.op()<i>.</blockquote>
    */
   Object visitPrefixExpression(PrefixExpression node) {
-    sc.TokenType operator2 = node.operator.type;
-    if (identical(operator2, sc.TokenType.BANG)) {
+    sc.TokenType operator = node.operator.type;
+    if (identical(operator, sc.TokenType.BANG)) {
       recordStaticType(node, _typeProvider.boolType);
     } else {
       ExecutableElement staticMethodElement = node.staticElement;
       Type2 staticType = computeReturnType(staticMethodElement);
-      if (identical(operator2, sc.TokenType.MINUS_MINUS) || identical(operator2, sc.TokenType.PLUS_PLUS)) {
-        Type2 intType2 = _typeProvider.intType;
-        if (identical(getStaticType(node.operand), intType2)) {
-          staticType = intType2;
+      if (identical(operator, sc.TokenType.MINUS_MINUS) || identical(operator, sc.TokenType.PLUS_PLUS)) {
+        Type2 intType = _typeProvider.intType;
+        if (identical(getStaticType(node.operand), intType)) {
+          staticType = intType;
         }
       }
       recordStaticType(node, staticType);
@@ -6824,18 +6824,18 @@
    * The static type of <i>i</i> is the declared return type of <i>m</i>.</blockquote>
    */
   Object visitPropertyAccess(PropertyAccess node) {
-    SimpleIdentifier propertyName2 = node.propertyName;
-    Element element2 = propertyName2.element;
+    SimpleIdentifier propertyName = node.propertyName;
+    Element element = propertyName.element;
     Type2 staticType = _dynamicType;
-    if (element2 is MethodElement) {
-      staticType = ((element2 as MethodElement)).type;
-    } else if (element2 is PropertyAccessorElement) {
-      staticType = getType((element2 as PropertyAccessorElement), node.target != null ? getStaticType(node.target) : null);
+    if (element is MethodElement) {
+      staticType = ((element as MethodElement)).type;
+    } else if (element is PropertyAccessorElement) {
+      staticType = getType((element as PropertyAccessorElement), node.target != null ? getStaticType(node.target) : null);
     } else {
     }
-    recordStaticType(propertyName2, staticType);
+    recordStaticType(propertyName, staticType);
     recordStaticType(node, staticType);
-    Type2 propagatedType = _overrideManager.getType(element2);
+    Type2 propagatedType = _overrideManager.getType(element);
     if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
       recordPropagatedType(node, propagatedType);
     }
@@ -6894,33 +6894,33 @@
    * </blockquote>
    */
   Object visitSimpleIdentifier(SimpleIdentifier node) {
-    Element element2 = node.element;
+    Element element = node.element;
     Type2 staticType = _dynamicType;
-    if (element2 is ClassElement) {
+    if (element is ClassElement) {
       if (isNotTypeLiteral(node)) {
-        staticType = ((element2 as ClassElement)).type;
+        staticType = ((element as ClassElement)).type;
       } else {
         staticType = _typeProvider.typeType;
       }
-    } else if (element2 is FunctionTypeAliasElement) {
-      staticType = ((element2 as FunctionTypeAliasElement)).type;
-    } else if (element2 is MethodElement) {
-      staticType = ((element2 as MethodElement)).type;
-    } else if (element2 is PropertyAccessorElement) {
-      staticType = getType((element2 as PropertyAccessorElement), null);
-    } else if (element2 is ExecutableElement) {
-      staticType = ((element2 as ExecutableElement)).type;
-    } else if (element2 is TypeVariableElement) {
-      staticType = ((element2 as TypeVariableElement)).type;
-    } else if (element2 is VariableElement) {
-      staticType = ((element2 as VariableElement)).type;
-    } else if (element2 is PrefixElement) {
+    } else if (element is FunctionTypeAliasElement) {
+      staticType = ((element as FunctionTypeAliasElement)).type;
+    } else if (element is MethodElement) {
+      staticType = ((element as MethodElement)).type;
+    } else if (element is PropertyAccessorElement) {
+      staticType = getType((element as PropertyAccessorElement), null);
+    } else if (element is ExecutableElement) {
+      staticType = ((element as ExecutableElement)).type;
+    } else if (element is TypeVariableElement) {
+      staticType = ((element as TypeVariableElement)).type;
+    } else if (element is VariableElement) {
+      staticType = ((element as VariableElement)).type;
+    } else if (element is PrefixElement) {
       return null;
     } else {
       staticType = _dynamicType;
     }
     recordStaticType(node, staticType);
-    Type2 propagatedType = _overrideManager.getType(element2);
+    Type2 propagatedType = _overrideManager.getType(element);
     if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
       recordPropagatedType(node, propagatedType);
     }
@@ -6973,12 +6973,12 @@
     return null;
   }
   Object visitVariableDeclaration(VariableDeclaration node) {
-    Expression initializer2 = node.initializer;
-    if (initializer2 != null) {
-      Type2 rightType = getBestType(initializer2);
-      VariableElement element2 = node.name.element as VariableElement;
-      if (element2 != null) {
-        _resolver.override(element2, rightType);
+    Expression initializer = node.initializer;
+    if (initializer != null) {
+      Type2 rightType = getBestType(initializer);
+      VariableElement element = node.name.element as VariableElement;
+      if (element != null) {
+        _resolver.override(element, rightType);
       }
     }
     return null;
@@ -6991,9 +6991,9 @@
    */
   Type2 computeArgumentType(ExecutableElement element) {
     if (element != null) {
-      List<ParameterElement> parameters2 = element.parameters;
-      if (parameters2 != null && parameters2.length == 2) {
-        return parameters2[1].type;
+      List<ParameterElement> parameters = element.parameters;
+      if (parameters != null && parameters.length == 2) {
+        return parameters[1].type;
       }
     }
     return _dynamicType;
@@ -7008,31 +7008,31 @@
     if (element is PropertyAccessorElement) {
       FunctionType propertyType = ((element as PropertyAccessorElement)).type;
       if (propertyType != null) {
-        Type2 returnType2 = propertyType.returnType;
-        if (returnType2 is InterfaceType) {
-          if (identical(returnType2, _typeProvider.functionType)) {
+        Type2 returnType = propertyType.returnType;
+        if (returnType is InterfaceType) {
+          if (identical(returnType, _typeProvider.functionType)) {
             return _dynamicType;
           }
-          MethodElement callMethod = ((returnType2 as InterfaceType)).lookUpMethod(ElementResolver.CALL_METHOD_NAME, _resolver.definingLibrary);
+          MethodElement callMethod = ((returnType as InterfaceType)).lookUpMethod(ElementResolver.CALL_METHOD_NAME, _resolver.definingLibrary);
           if (callMethod != null) {
             return callMethod.type.returnType;
           }
-        } else if (returnType2 is FunctionType) {
-          Type2 innerReturnType = ((returnType2 as FunctionType)).returnType;
+        } else if (returnType is FunctionType) {
+          Type2 innerReturnType = ((returnType as FunctionType)).returnType;
           if (innerReturnType != null) {
             return innerReturnType;
           }
-        } else if (returnType2.isDartCoreFunction()) {
+        } else if (returnType.isDartCoreFunction()) {
           return _dynamicType;
         }
-        if (returnType2 != null) {
-          return returnType2;
+        if (returnType != null) {
+          return returnType;
         }
       }
     } else if (element is ExecutableElement) {
-      FunctionType type2 = ((element as ExecutableElement)).type;
-      if (type2 != null) {
-        return type2.returnType;
+      FunctionType type = ((element as ExecutableElement)).type;
+      if (type != null) {
+        return type.returnType;
       }
     } else if (element is VariableElement) {
       Type2 variableType = ((element as VariableElement)).type;
@@ -7051,11 +7051,11 @@
    * @return the return type that was computed
    */
   Type2 computeReturnType2(FunctionDeclaration node) {
-    TypeName returnType2 = node.returnType;
-    if (returnType2 == null) {
+    TypeName returnType = node.returnType;
+    if (returnType == null) {
       return _dynamicType;
     }
-    return returnType2.type;
+    return returnType.type;
   }
 
   /**
@@ -7066,9 +7066,9 @@
    * @return the return type that was computed
    */
   Type2 computeReturnType3(FunctionExpression node) {
-    FunctionBody body2 = node.body;
-    if (body2 is ExpressionFunctionBody) {
-      return getStaticType(((body2 as ExpressionFunctionBody)).expression);
+    FunctionBody body = node.body;
+    if (body is ExpressionFunctionBody) {
+      return getStaticType(((body as ExpressionFunctionBody)).expression);
     }
     return _dynamicType;
   }
@@ -7125,9 +7125,9 @@
    * @return the string specified by the first argument in the argument list
    */
   String getFirstArgumentAsString(ArgumentList argumentList) {
-    NodeList<Expression> arguments2 = argumentList.arguments;
-    if (arguments2.length > 0) {
-      Expression argument = arguments2[0];
+    NodeList<Expression> arguments = argumentList.arguments;
+    if (arguments.length > 0) {
+      Expression argument = arguments[0];
       if (argument is SimpleStringLiteral) {
         return ((argument as SimpleStringLiteral)).value;
       }
@@ -7208,29 +7208,29 @@
       if (parameterTypes != null && parameterTypes.length > 0) {
         return parameterTypes[0];
       }
-      PropertyAccessorElement getter2 = accessor.variable.getter;
-      if (getter2 != null) {
-        functionType = getter2.type;
+      PropertyAccessorElement getter = accessor.variable.getter;
+      if (getter != null) {
+        functionType = getter.type;
         if (functionType != null) {
           return functionType.returnType;
         }
       }
       return _dynamicType;
     }
-    Type2 returnType2 = functionType.returnType;
-    if (returnType2 is TypeVariableType && context is InterfaceType) {
+    Type2 returnType = functionType.returnType;
+    if (returnType is TypeVariableType && context is InterfaceType) {
       InterfaceType interfaceTypeContext = (context as InterfaceType);
       List<TypeVariableElement> parameterElements = interfaceTypeContext.element != null ? interfaceTypeContext.element.typeVariables : null;
       if (parameterElements != null) {
         for (int i = 0; i < parameterElements.length; i++) {
           TypeVariableElement varElt = parameterElements[i];
-          if (returnType2.name == varElt.name) {
+          if (returnType.name == varElt.name) {
             return interfaceTypeContext.typeArguments[i];
           }
         }
       }
     }
-    return returnType2;
+    return returnType;
   }
 
   /**
@@ -7239,11 +7239,11 @@
    * @return the type represented by the type name
    */
   Type2 getType2(TypeName typeName) {
-    Type2 type2 = typeName.type;
-    if (type2 == null) {
+    Type2 type = typeName.type;
+    if (type == null) {
       return _dynamicType;
     }
-    return type2;
+    return type;
   }
 
   /**
@@ -7259,8 +7259,8 @@
    * @return {@code true} if the given node is not a type literal
    */
   bool isNotTypeLiteral(Identifier node) {
-    ASTNode parent2 = node.parent;
-    return parent2 is TypeName || (parent2 is PrefixedIdentifier && (parent2.parent is TypeName || identical(((parent2 as PrefixedIdentifier)).prefix, node))) || (parent2 is PropertyAccess && identical(((parent2 as PropertyAccess)).target, node)) || (parent2 is MethodInvocation && identical(node, ((parent2 as MethodInvocation)).target));
+    ASTNode parent = node.parent;
+    return parent is TypeName || (parent is PrefixedIdentifier && (parent.parent is TypeName || identical(((parent as PrefixedIdentifier)).prefix, node))) || (parent is PropertyAccess && identical(((parent as PropertyAccess)).target, node)) || (parent is MethodInvocation && identical(node, ((parent as MethodInvocation)).target));
   }
 
   /**
@@ -7294,20 +7294,20 @@
    * @return the better type guess, or the same static type as given
    */
   Type2 refineBinaryExpressionType(BinaryExpression node, Type2 staticType) {
-    sc.TokenType operator2 = node.operator.type;
-    if (identical(operator2, sc.TokenType.AMPERSAND_AMPERSAND) || identical(operator2, sc.TokenType.BAR_BAR) || identical(operator2, sc.TokenType.EQ_EQ) || identical(operator2, sc.TokenType.BANG_EQ)) {
+    sc.TokenType operator = node.operator.type;
+    if (identical(operator, sc.TokenType.AMPERSAND_AMPERSAND) || identical(operator, sc.TokenType.BAR_BAR) || identical(operator, sc.TokenType.EQ_EQ) || identical(operator, sc.TokenType.BANG_EQ)) {
       return _typeProvider.boolType;
     }
-    if (identical(operator2, sc.TokenType.MINUS) || identical(operator2, sc.TokenType.PERCENT) || identical(operator2, sc.TokenType.PLUS) || identical(operator2, sc.TokenType.STAR)) {
-      Type2 doubleType2 = _typeProvider.doubleType;
-      if (identical(getStaticType(node.leftOperand), doubleType2) || identical(getStaticType(node.rightOperand), doubleType2)) {
-        return doubleType2;
+    if (identical(operator, sc.TokenType.MINUS) || identical(operator, sc.TokenType.PERCENT) || identical(operator, sc.TokenType.PLUS) || identical(operator, sc.TokenType.STAR)) {
+      Type2 doubleType = _typeProvider.doubleType;
+      if (identical(getStaticType(node.leftOperand), doubleType) || identical(getStaticType(node.rightOperand), doubleType)) {
+        return doubleType;
       }
     }
-    if (identical(operator2, sc.TokenType.MINUS) || identical(operator2, sc.TokenType.PERCENT) || identical(operator2, sc.TokenType.PLUS) || identical(operator2, sc.TokenType.STAR) || identical(operator2, sc.TokenType.TILDE_SLASH)) {
-      Type2 intType2 = _typeProvider.intType;
-      if (identical(getStaticType(node.leftOperand), intType2) && identical(getStaticType(node.rightOperand), intType2)) {
-        staticType = intType2;
+    if (identical(operator, sc.TokenType.MINUS) || identical(operator, sc.TokenType.PERCENT) || identical(operator, sc.TokenType.PLUS) || identical(operator, sc.TokenType.STAR) || identical(operator, sc.TokenType.TILDE_SLASH)) {
+      Type2 intType = _typeProvider.intType;
+      if (identical(getStaticType(node.leftOperand), intType) && identical(getStaticType(node.rightOperand), intType)) {
+        staticType = intType;
       }
     }
     return staticType;
@@ -7486,11 +7486,11 @@
     Map<Element, Type2> overrides = new Map<Element, Type2>();
     if (variableList.isConst() || variableList.isFinal()) {
       for (VariableDeclaration variable in variableList.variables) {
-        Element element2 = variable.element;
-        if (element2 != null) {
-          Type2 type = _overridenTypes[element2];
+        Element element = variable.element;
+        if (element != null) {
+          Type2 type = _overridenTypes[element];
           if (type != null) {
-            overrides[element2] = type;
+            overrides[element] = type;
           }
         }
       }
@@ -7800,9 +7800,9 @@
         exceptionType = getType3(exceptionTypeName);
       }
       recordType(exception, exceptionType);
-      Element element2 = exception.element;
-      if (element2 is VariableElementImpl) {
-        ((element2 as VariableElementImpl)).type = exceptionType;
+      Element element = exception.element;
+      if (element is VariableElementImpl) {
+        ((element as VariableElementImpl)).type = exceptionType;
       } else {
       }
     }
@@ -7817,19 +7817,19 @@
     super.visitClassDeclaration(node);
     ClassElementImpl classElement = getClassElement(node.name);
     InterfaceType superclassType = null;
-    ExtendsClause extendsClause2 = node.extendsClause;
-    if (extendsClause2 != null) {
+    ExtendsClause extendsClause = node.extendsClause;
+    if (extendsClause != null) {
       ErrorCode errorCode = node.withClause == null ? CompileTimeErrorCode.EXTENDS_NON_CLASS : CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS;
-      superclassType = resolveType(extendsClause2.superclass, errorCode);
+      superclassType = resolveType(extendsClause.superclass, errorCode);
       if (superclassType != typeProvider.objectType) {
         classElement.validMixin = false;
       }
     }
     if (classElement != null) {
       if (superclassType == null) {
-        InterfaceType objectType2 = typeProvider.objectType;
-        if (classElement.type != objectType2) {
-          superclassType = objectType2;
+        InterfaceType objectType = typeProvider.objectType;
+        if (classElement.type != objectType) {
+          superclassType = objectType;
         }
       }
       classElement.supertype = superclassType;
@@ -7853,11 +7853,11 @@
   }
   Object visitConstructorDeclaration(ConstructorDeclaration node) {
     super.visitConstructorDeclaration(node);
-    ExecutableElementImpl element2 = node.element as ExecutableElementImpl;
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(element2);
-    setTypeInformation(type, null, element2.parameters);
-    type.returnType = ((element2.enclosingElement as ClassElement)).type;
-    element2.type = type;
+    ExecutableElementImpl element = node.element as ExecutableElementImpl;
+    FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
+    setTypeInformation(type, null, element.parameters);
+    type.returnType = ((element.enclosingElement as ClassElement)).type;
+    element.type = type;
     return null;
   }
   Object visitDeclaredIdentifier(DeclaredIdentifier node) {
@@ -7869,8 +7869,8 @@
     } else {
       declaredType = getType3(typeName);
     }
-    LocalVariableElementImpl element2 = node.element as LocalVariableElementImpl;
-    element2.type = declaredType;
+    LocalVariableElementImpl element = node.element as LocalVariableElementImpl;
+    element.type = declaredType;
     return null;
   }
   Object visitDefaultFormalParameter(DefaultFormalParameter node) {
@@ -7879,9 +7879,9 @@
   }
   Object visitFieldFormalParameter(FieldFormalParameter node) {
     super.visitFieldFormalParameter(node);
-    Element element2 = node.identifier.element;
-    if (element2 is ParameterElementImpl) {
-      ParameterElementImpl parameter = element2 as ParameterElementImpl;
+    Element element = node.identifier.element;
+    if (element is ParameterElementImpl) {
+      ParameterElementImpl parameter = element as ParameterElementImpl;
       Type2 type;
       TypeName typeName = node.type;
       if (typeName == null) {
@@ -7896,44 +7896,44 @@
   }
   Object visitFunctionDeclaration(FunctionDeclaration node) {
     super.visitFunctionDeclaration(node);
-    ExecutableElementImpl element2 = node.element as ExecutableElementImpl;
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(element2);
-    setTypeInformation(type, node.returnType, element2.parameters);
-    element2.type = type;
+    ExecutableElementImpl element = node.element as ExecutableElementImpl;
+    FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
+    setTypeInformation(type, node.returnType, element.parameters);
+    element.type = type;
     return null;
   }
   Object visitFunctionTypeAlias(FunctionTypeAlias node) {
     super.visitFunctionTypeAlias(node);
-    FunctionTypeAliasElementImpl element2 = node.element as FunctionTypeAliasElementImpl;
-    FunctionTypeImpl type2 = element2.type as FunctionTypeImpl;
-    setTypeInformation(type2, node.returnType, element2.parameters);
+    FunctionTypeAliasElementImpl element = node.element as FunctionTypeAliasElementImpl;
+    FunctionTypeImpl type = element.type as FunctionTypeImpl;
+    setTypeInformation(type, node.returnType, element.parameters);
     return null;
   }
   Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
     super.visitFunctionTypedFormalParameter(node);
-    ParameterElementImpl element2 = node.identifier.element as ParameterElementImpl;
+    ParameterElementImpl element = node.identifier.element as ParameterElementImpl;
     AnonymousFunctionTypeImpl type = new AnonymousFunctionTypeImpl();
-    List<ParameterElement> parameters2 = getElements(node.parameters);
-    setTypeInformation(type, node.returnType, parameters2);
-    type.baseParameters = parameters2;
-    element2.type = type;
+    List<ParameterElement> parameters = getElements(node.parameters);
+    setTypeInformation(type, node.returnType, parameters);
+    type.baseParameters = parameters;
+    element.type = type;
     return null;
   }
   Object visitMethodDeclaration(MethodDeclaration node) {
     super.visitMethodDeclaration(node);
-    ExecutableElementImpl element2 = node.element as ExecutableElementImpl;
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(element2);
-    setTypeInformation(type, node.returnType, element2.parameters);
-    element2.type = type;
-    if (element2 is PropertyAccessorElement) {
-      PropertyAccessorElement accessor = element2 as PropertyAccessorElement;
-      PropertyInducingElementImpl variable2 = accessor.variable as PropertyInducingElementImpl;
+    ExecutableElementImpl element = node.element as ExecutableElementImpl;
+    FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
+    setTypeInformation(type, node.returnType, element.parameters);
+    element.type = type;
+    if (element is PropertyAccessorElement) {
+      PropertyAccessorElement accessor = element as PropertyAccessorElement;
+      PropertyInducingElementImpl variable = accessor.variable as PropertyInducingElementImpl;
       if (accessor.isGetter()) {
-        variable2.type = type.returnType;
-      } else if (variable2.type == null) {
+        variable.type = type.returnType;
+      } else if (variable.type == null) {
         List<Type2> parameterTypes = type.normalParameterTypes;
         if (parameterTypes != null && parameterTypes.length > 0) {
-          variable2.type = parameterTypes[0];
+          variable.type = parameterTypes[0];
         }
       }
     }
@@ -7948,9 +7948,9 @@
     } else {
       declaredType = getType3(typeName);
     }
-    Element element2 = node.identifier.element;
-    if (element2 is ParameterElement) {
-      ((element2 as ParameterElementImpl)).type = declaredType;
+    Element element = node.identifier.element;
+    if (element is ParameterElement) {
+      ((element as ParameterElementImpl)).type = declaredType;
     } else {
     }
     return null;
@@ -7981,19 +7981,19 @@
         node.type = voidType;
         return null;
       }
-      ASTNode parent2 = node.parent;
-      if (typeName is PrefixedIdentifier && parent2 is ConstructorName && argumentList == null) {
-        ConstructorName name = parent2 as ConstructorName;
+      ASTNode parent = node.parent;
+      if (typeName is PrefixedIdentifier && parent is ConstructorName && argumentList == null) {
+        ConstructorName name = parent as ConstructorName;
         if (name.name == null) {
-          SimpleIdentifier prefix2 = ((typeName as PrefixedIdentifier)).prefix;
-          element = nameScope.lookup(prefix2, definingLibrary);
+          SimpleIdentifier prefix = ((typeName as PrefixedIdentifier)).prefix;
+          element = nameScope.lookup(prefix, definingLibrary);
           if (element is PrefixElement) {
             return null;
           } else if (element != null) {
             name.name = ((typeName as PrefixedIdentifier)).identifier;
             name.period = ((typeName as PrefixedIdentifier)).period;
-            node.name = prefix2;
-            typeName = prefix2;
+            node.name = prefix;
+            typeName = prefix;
           }
         }
       }
@@ -8064,6 +8064,15 @@
         reportError(StaticWarningCode.CAST_TO_NON_TYPE, typeName, [typeName.name]);
       } else if (isTypeNameInIsExpression(node)) {
         reportError(StaticWarningCode.TYPE_TEST_NON_TYPE, typeName, [typeName.name]);
+      } else {
+        ASTNode parent = typeName.parent;
+        while (parent is TypeName) {
+          parent = parent.parent;
+        }
+        if (parent is ExtendsClause || parent is ImplementsClause || parent is WithClause || parent is ClassTypeAlias) {
+        } else {
+          reportError(StaticWarningCode.NOT_A_TYPE, typeName, [typeName.name]);
+        }
       }
       setElement(typeName, _dynamicType.element);
       typeName.staticType = _dynamicType;
@@ -8071,14 +8080,14 @@
       return null;
     }
     if (argumentList != null) {
-      NodeList<TypeName> arguments2 = argumentList.arguments;
-      int argumentCount = arguments2.length;
+      NodeList<TypeName> arguments = argumentList.arguments;
+      int argumentCount = arguments.length;
       List<Type2> parameters = getTypeArguments(type);
       int parameterCount = parameters.length;
       int count = Math.min(argumentCount, parameterCount);
       List<Type2> typeArguments = new List<Type2>();
       for (int i = 0; i < count; i++) {
-        Type2 argumentType = getType3(arguments2[i]);
+        Type2 argumentType = getType3(arguments[i]);
         if (argumentType != null) {
           typeArguments.add(argumentType);
         }
@@ -8125,21 +8134,21 @@
     } else {
       declaredType = getType3(typeName);
     }
-    Element element2 = node.name.element;
-    if (element2 is VariableElement) {
-      ((element2 as VariableElementImpl)).type = declaredType;
-      if (element2 is PropertyInducingElement) {
-        PropertyInducingElement variableElement = element2 as PropertyInducingElement;
-        PropertyAccessorElementImpl getter2 = variableElement.getter as PropertyAccessorElementImpl;
-        FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter2);
+    Element element = node.name.element;
+    if (element is VariableElement) {
+      ((element as VariableElementImpl)).type = declaredType;
+      if (element is PropertyInducingElement) {
+        PropertyInducingElement variableElement = element as PropertyInducingElement;
+        PropertyAccessorElementImpl getter = variableElement.getter as PropertyAccessorElementImpl;
+        FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter);
         getterType.returnType = declaredType;
-        getter2.type = getterType;
-        PropertyAccessorElementImpl setter2 = variableElement.setter as PropertyAccessorElementImpl;
-        if (setter2 != null) {
-          FunctionTypeImpl setterType = new FunctionTypeImpl.con1(setter2);
+        getter.type = getterType;
+        PropertyAccessorElementImpl setter = variableElement.setter as PropertyAccessorElementImpl;
+        if (setter != null) {
+          FunctionTypeImpl setterType = new FunctionTypeImpl.con1(setter);
           setterType.returnType = VoidTypeImpl.instance;
           setterType.normalParameterTypes = <Type2> [declaredType];
-          setter2.type = setterType;
+          setter.type = setterType;
         }
       }
     } else {
@@ -8156,11 +8165,11 @@
     if (identifier == null) {
       return null;
     }
-    Element element2 = identifier.element;
-    if (element2 is! ClassElementImpl) {
+    Element element = identifier.element;
+    if (element is! ClassElementImpl) {
       return null;
     }
-    return element2 as ClassElementImpl;
+    return element as ClassElementImpl;
   }
 
   /**
@@ -8172,9 +8181,9 @@
   List<ParameterElement> getElements(FormalParameterList parameterList) {
     List<ParameterElement> elements = new List<ParameterElement>();
     for (FormalParameter parameter in parameterList.parameters) {
-      ParameterElement element2 = parameter.identifier.element as ParameterElement;
-      if (element2 != null) {
-        elements.add(element2);
+      ParameterElement element = parameter.identifier.element as ParameterElement;
+      if (element != null) {
+        elements.add(element);
       }
     }
     return new List.from(elements);
@@ -8189,11 +8198,11 @@
    * were provided
    */
   ErrorCode getInvalidTypeParametersErrorCode(TypeName node) {
-    ASTNode parent2 = node.parent;
-    if (parent2 is ConstructorName) {
-      parent2 = parent2.parent;
-      if (parent2 is InstanceCreationExpression) {
-        if (((parent2 as InstanceCreationExpression)).isConst()) {
+    ASTNode parent = node.parent;
+    if (parent is ConstructorName) {
+      parent = parent.parent;
+      if (parent is InstanceCreationExpression) {
+        if (((parent as InstanceCreationExpression)).isConst()) {
           return CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS;
         } else {
           return CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS;
@@ -8228,11 +8237,11 @@
    * @return the type represented by the type name
    */
   Type2 getType3(TypeName typeName) {
-    Type2 type2 = typeName.type;
-    if (type2 == null) {
+    Type2 type = typeName.type;
+    if (type == null) {
       return _dynamicType;
     }
-    return type2;
+    return type;
   }
 
   /**
@@ -8268,9 +8277,9 @@
    * @return {@code true} if the given type name is used as the type in an as expression
    */
   bool isTypeNameInAsExpression(TypeName typeName) {
-    ASTNode parent2 = typeName.parent;
-    if (parent2 is AsExpression) {
-      AsExpression asExpression = parent2 as AsExpression;
+    ASTNode parent = typeName.parent;
+    if (parent is AsExpression) {
+      AsExpression asExpression = parent as AsExpression;
       return identical(asExpression.type, typeName);
     }
     return false;
@@ -8282,9 +8291,9 @@
    * @return {@code true} if the given type name is used as the exception type in a catch clause
    */
   bool isTypeNameInCatchClause(TypeName typeName) {
-    ASTNode parent2 = typeName.parent;
-    if (parent2 is CatchClause) {
-      CatchClause catchClause = parent2 as CatchClause;
+    ASTNode parent = typeName.parent;
+    if (parent is CatchClause) {
+      CatchClause catchClause = parent as CatchClause;
       return identical(catchClause.exceptionType, typeName);
     }
     return false;
@@ -8297,9 +8306,9 @@
    * expression
    */
   bool isTypeNameInInstanceCreationExpression(TypeName typeName) {
-    ASTNode parent2 = typeName.parent;
-    if (parent2 is ConstructorName && parent2.parent is InstanceCreationExpression) {
-      ConstructorName constructorName = parent2 as ConstructorName;
+    ASTNode parent = typeName.parent;
+    if (parent is ConstructorName && parent.parent is InstanceCreationExpression) {
+      ConstructorName constructorName = parent as ConstructorName;
       return constructorName != null && identical(constructorName.type, typeName);
     }
     return false;
@@ -8311,9 +8320,9 @@
    * @return {@code true} if the given type name is used as the type in an is expression
    */
   bool isTypeNameInIsExpression(TypeName typeName) {
-    ASTNode parent2 = typeName.parent;
-    if (parent2 is IsExpression) {
-      IsExpression isExpression = parent2 as IsExpression;
+    ASTNode parent = typeName.parent;
+    if (parent is IsExpression) {
+      IsExpression isExpression = parent as IsExpression;
       return identical(isExpression.type, typeName);
     }
     return false;
@@ -8325,12 +8334,12 @@
    * @return {@code true} if the given type name is used as the type in a redirected constructor
    */
   bool isTypeNameTargetInRedirectedConstructor(TypeName typeName) {
-    ASTNode parent2 = typeName.parent;
-    if (parent2 is ConstructorName) {
-      ConstructorName constructorName = parent2 as ConstructorName;
-      parent2 = constructorName.parent;
-      if (parent2 is ConstructorDeclaration) {
-        ConstructorDeclaration constructorDeclaration = parent2 as ConstructorDeclaration;
+    ASTNode parent = typeName.parent;
+    if (parent is ConstructorName) {
+      ConstructorName constructorName = parent as ConstructorName;
+      parent = constructorName.parent;
+      if (parent is ConstructorDeclaration) {
+        ConstructorDeclaration constructorDeclaration = parent as ConstructorDeclaration;
         return constructorName == constructorDeclaration.redirectedConstructor;
       }
     }
@@ -8361,15 +8370,15 @@
    */
   void resolve(ClassElementImpl classElement, WithClause withClause, ImplementsClause implementsClause) {
     if (withClause != null) {
-      List<InterfaceType> mixinTypes2 = resolveTypes(withClause.mixinTypes, CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
+      List<InterfaceType> mixinTypes = resolveTypes(withClause.mixinTypes, CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
       if (classElement != null) {
-        classElement.mixins = mixinTypes2;
+        classElement.mixins = mixinTypes;
       }
     }
     if (implementsClause != null) {
-      NodeList<TypeName> interfaces2 = implementsClause.interfaces;
-      List<InterfaceType> interfaceTypes = resolveTypes(interfaces2, CompileTimeErrorCode.IMPLEMENTS_NON_CLASS);
-      List<TypeName> typeNames = new List.from(interfaces2);
+      NodeList<TypeName> interfaces = implementsClause.interfaces;
+      List<InterfaceType> interfaceTypes = resolveTypes(interfaces, CompileTimeErrorCode.IMPLEMENTS_NON_CLASS);
+      List<TypeName> typeNames = new List.from(interfaces);
       String dynamicKeyword = sc.Keyword.DYNAMIC.syntax;
       List<bool> detectedRepeatOnIndex = new List<bool>.filled(typeNames.length, false);
       for (int i = 0; i < detectedRepeatOnIndex.length; i++) {
@@ -8377,18 +8386,18 @@
       }
       for (int i = 0; i < typeNames.length; i++) {
         TypeName typeName = typeNames[i];
-        String name3 = typeName.name.name;
-        if (name3 == dynamicKeyword) {
+        String name = typeName.name.name;
+        if (name == dynamicKeyword) {
           reportError(CompileTimeErrorCode.IMPLEMENTS_DYNAMIC, typeName, []);
         }
         if (!detectedRepeatOnIndex[i]) {
           for (int j = i + 1; j < typeNames.length; j++) {
-            Element element3 = typeName.name.element;
+            Element element = typeName.name.element;
             TypeName typeName2 = typeNames[j];
             Identifier identifier2 = typeName2.name;
             String name2 = identifier2.name;
             Element element2 = identifier2.element;
-            if (element3 != null && element3 == element2) {
+            if (element != null && element == element2) {
               detectedRepeatOnIndex[j] = true;
               reportError(CompileTimeErrorCode.IMPLEMENTS_REPEATED, typeName2, [name2]);
             }
@@ -8409,13 +8418,13 @@
    * @return the type specified by the type name
    */
   InterfaceType resolveType(TypeName typeName, ErrorCode nonTypeError) {
-    Type2 type2 = typeName.type;
-    if (type2 is InterfaceType) {
-      return type2 as InterfaceType;
+    Type2 type = typeName.type;
+    if (type is InterfaceType) {
+      return type as InterfaceType;
     }
-    Identifier name2 = typeName.name;
-    if (name2.name != sc.Keyword.DYNAMIC.syntax) {
-      reportError(nonTypeError, name2, [name2.name]);
+    Identifier name = typeName.name;
+    if (name.name != sc.Keyword.DYNAMIC.syntax) {
+      reportError(nonTypeError, name, [name.name]);
     }
     return null;
   }
@@ -8440,14 +8449,17 @@
   void setElement(Identifier typeName, Element element2) {
     if (element2 != null) {
       if (typeName is SimpleIdentifier) {
+        ((typeName as SimpleIdentifier)).staticElement = element2;
         ((typeName as SimpleIdentifier)).element = element2;
       } else if (typeName is PrefixedIdentifier) {
         PrefixedIdentifier identifier = typeName as PrefixedIdentifier;
+        identifier.identifier.staticElement = element2;
         identifier.identifier.element = element2;
-        SimpleIdentifier prefix2 = identifier.prefix;
-        Element prefixElement = nameScope.lookup(prefix2, definingLibrary);
+        SimpleIdentifier prefix = identifier.prefix;
+        Element prefixElement = nameScope.lookup(prefix, definingLibrary);
         if (prefixElement != null) {
-          prefix2.element = prefixElement;
+          prefix.staticElement = prefixElement;
+          prefix.element = prefixElement;
         }
       }
     }
@@ -8599,8 +8611,8 @@
   void defineParameters(ExecutableElement functionElement) {
     Scope parameterScope = enclosingScope;
     if (functionElement.enclosingElement is ExecutableElement) {
-      String name2 = functionElement.name;
-      if (name2 != null && !name2.isEmpty) {
+      String name = functionElement.name;
+      if (name != null && !name.isEmpty) {
         parameterScope.define(functionElement);
       }
     }
@@ -8743,32 +8755,32 @@
    * @return {@code true} if the given {@link Identifier} is the part of type annotation.
    */
   static bool isTypeAnnotation(Identifier identifier) {
-    ASTNode parent4 = identifier.parent;
-    if (parent4 is TypeName) {
-      ASTNode parent2 = parent4.parent;
+    ASTNode parent = identifier.parent;
+    if (parent is TypeName) {
+      ASTNode parent2 = parent.parent;
       if (parent2 is FunctionDeclaration) {
         FunctionDeclaration decl = parent2 as FunctionDeclaration;
-        return identical(decl.returnType, parent4);
+        return identical(decl.returnType, parent);
       }
       if (parent2 is FunctionTypeAlias) {
         FunctionTypeAlias decl = parent2 as FunctionTypeAlias;
-        return identical(decl.returnType, parent4);
+        return identical(decl.returnType, parent);
       }
       if (parent2 is MethodDeclaration) {
         MethodDeclaration decl = parent2 as MethodDeclaration;
-        return identical(decl.returnType, parent4);
+        return identical(decl.returnType, parent);
       }
       if (parent2 is VariableDeclarationList) {
         VariableDeclarationList decl = parent2 as VariableDeclarationList;
-        return identical(decl.type, parent4);
+        return identical(decl.type, parent);
       }
       if (parent2 is SimpleFormalParameter) {
         SimpleFormalParameter decl = parent2 as SimpleFormalParameter;
-        return identical(decl.type, parent4);
+        return identical(decl.type, parent);
       }
       if (parent2 is TypeParameter) {
         TypeParameter decl = parent2 as TypeParameter;
-        return identical(decl.bound, parent4);
+        return identical(decl.bound, parent);
       }
       if (parent2 is TypeArgumentList) {
         ASTNode parent3 = parent2.parent;
@@ -8987,11 +8999,11 @@
    * @return the export namespace that was created
    */
   Namespace createExportNamespace(ExportElement element) {
-    LibraryElement exportedLibrary2 = element.exportedLibrary;
-    if (exportedLibrary2 == null) {
+    LibraryElement exportedLibrary = element.exportedLibrary;
+    if (exportedLibrary == null) {
       return Namespace.EMPTY;
     }
-    Map<String, Element> definedNames = createExportMapping(exportedLibrary2, new Set<LibraryElement>());
+    Map<String, Element> definedNames = createExportMapping(exportedLibrary, new Set<LibraryElement>());
     definedNames = apply(definedNames, element.combinators);
     return new Namespace(definedNames);
   }
@@ -9009,11 +9021,11 @@
    * @return the import namespace that was created
    */
   Namespace createImportNamespace(ImportElement element) {
-    LibraryElement importedLibrary2 = element.importedLibrary;
-    if (importedLibrary2 == null) {
+    LibraryElement importedLibrary = element.importedLibrary;
+    if (importedLibrary == null) {
       return Namespace.EMPTY;
     }
-    Map<String, Element> definedNames = createExportMapping(importedLibrary2, new Set<LibraryElement>());
+    Map<String, Element> definedNames = createExportMapping(importedLibrary, new Set<LibraryElement>());
     definedNames = apply(definedNames, element.combinators);
     definedNames = apply2(definedNames, element.prefix);
     return new Namespace(definedNames);
@@ -9061,9 +9073,9 @@
    * @param element the element to be added
    */
   void addIfPublic(Map<String, Element> definedNames, Element element) {
-    String name2 = element.name;
-    if (name2 != null && !Scope.isPrivateName(name2)) {
-      definedNames[name2] = element;
+    String name = element.name;
+    if (name != null && !Scope.isPrivateName(name)) {
+      definedNames[name] = element;
     }
   }
 
@@ -9138,9 +9150,9 @@
     try {
       Map<String, Element> definedNames = new Map<String, Element>();
       for (ExportElement element in library.exports) {
-        LibraryElement exportedLibrary2 = element.exportedLibrary;
-        if (exportedLibrary2 != null && !visitedElements.contains(exportedLibrary2)) {
-          Map<String, Element> exportedNames = createExportMapping(exportedLibrary2, visitedElements);
+        LibraryElement exportedLibrary = element.exportedLibrary;
+        if (exportedLibrary != null && !visitedElements.contains(exportedLibrary)) {
+          Map<String, Element> exportedNames = createExportMapping(exportedLibrary, visitedElements);
           exportedNames = apply(exportedNames, element.combinators);
           addAll(definedNames, exportedNames);
         }
@@ -9282,11 +9294,11 @@
    * @return the error code used to report duplicate names within a scope
    */
   AnalysisError getErrorForDuplicate(Element existing, Element duplicate) {
-    Source source2 = duplicate.source;
-    if (source2 == null) {
-      source2 = source;
+    Source source = duplicate.source;
+    if (source == null) {
+      source = source;
     }
-    return new AnalysisError.con2(source2, duplicate.nameOffset, duplicate.displayName.length, CompileTimeErrorCode.DUPLICATE_DEFINITION, [existing.displayName]);
+    return new AnalysisError.con2(source, duplicate.nameOffset, duplicate.displayName.length, CompileTimeErrorCode.DUPLICATE_DEFINITION, [existing.displayName]);
   }
 
   /**
@@ -9415,26 +9427,26 @@
     Set<Object> keys = new Set<Object>();
     List<Expression> invalidKeys = new List<Expression>();
     for (MapLiteralEntry entry in node.entries) {
-      Expression key2 = entry.key;
+      Expression key = entry.key;
       if (isConst) {
-        EvaluationResultImpl result = validate(key2, CompileTimeErrorCode.NON_CONSTANT_MAP_KEY);
+        EvaluationResultImpl result = validate(key, CompileTimeErrorCode.NON_CONSTANT_MAP_KEY);
         validate(entry.value, CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE);
         if (result is ValidResult) {
-          Object value2 = ((result as ValidResult)).value;
-          if (keys.contains(value2)) {
-            invalidKeys.add(key2);
+          Object value = ((result as ValidResult)).value;
+          if (keys.contains(value)) {
+            invalidKeys.add(key);
           } else {
-            javaSetAdd(keys, value2);
+            javaSetAdd(keys, value);
           }
         }
       } else {
-        EvaluationResultImpl result = key2.accept(new ConstantVisitor());
+        EvaluationResultImpl result = key.accept(new ConstantVisitor());
         if (result is ValidResult) {
-          Object value3 = ((result as ValidResult)).value;
-          if (keys.contains(value3)) {
-            invalidKeys.add(key2);
+          Object value = ((result as ValidResult)).value;
+          if (keys.contains(value)) {
+            invalidKeys.add(key);
           } else {
-            javaSetAdd(keys, value3);
+            javaSetAdd(keys, value);
           }
         } else {
           reportEqualKeys = false;
@@ -9460,13 +9472,13 @@
   }
   Object visitVariableDeclaration(VariableDeclaration node) {
     super.visitVariableDeclaration(node);
-    Expression initializer2 = node.initializer;
-    if (initializer2 != null && node.isConst()) {
-      VariableElementImpl element2 = node.element as VariableElementImpl;
-      EvaluationResultImpl result = element2.evaluationResult;
+    Expression initializer = node.initializer;
+    if (initializer != null && node.isConst()) {
+      VariableElementImpl element = node.element as VariableElementImpl;
+      EvaluationResultImpl result = element.evaluationResult;
       if (result == null) {
-        result = validate(initializer2, CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
-        element2.evaluationResult = result;
+        result = validate(initializer, CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
+        element.evaluationResult = result;
       } else if (result is ErrorResult) {
         reportErrors(result, CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE);
       }
@@ -9524,11 +9536,11 @@
     if (!node.isConst()) {
       return;
     }
-    ArgumentList argumentList2 = node.argumentList;
-    if (argumentList2 == null) {
+    ArgumentList argumentList = node.argumentList;
+    if (argumentList == null) {
       return;
     }
-    for (Expression argument in argumentList2.arguments) {
+    for (Expression argument in argumentList.arguments) {
       if (argument is NamedExpression) {
         argument = ((argument as NamedExpression)).expression;
       }
@@ -9548,12 +9560,12 @@
     for (FormalParameter parameter in parameters2.parameters) {
       if (parameter is DefaultFormalParameter) {
         DefaultFormalParameter defaultParameter = parameter as DefaultFormalParameter;
-        Expression defaultValue2 = defaultParameter.defaultValue;
-        if (defaultValue2 != null) {
-          EvaluationResultImpl result = validate(defaultValue2, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE);
+        Expression defaultValue = defaultParameter.defaultValue;
+        if (defaultValue != null) {
+          EvaluationResultImpl result = validate(defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE);
           if (defaultParameter.isConst()) {
-            VariableElementImpl element2 = parameter.element as VariableElementImpl;
-            element2.evaluationResult = result;
+            VariableElementImpl element = parameter.element as VariableElementImpl;
+            element.evaluationResult = result;
           }
         }
       }
@@ -9593,8 +9605,8 @@
    */
   void validateInitializers(ConstructorDeclaration constructor) {
     List<ParameterElement> parameterElements = constructor.parameters.elements;
-    NodeList<ConstructorInitializer> initializers2 = constructor.initializers;
-    for (ConstructorInitializer initializer in initializers2) {
+    NodeList<ConstructorInitializer> initializers = constructor.initializers;
+    for (ConstructorInitializer initializer in initializers) {
       if (initializer is ConstructorFieldInitializer) {
         ConstructorFieldInitializer fieldInitializer = initializer as ConstructorFieldInitializer;
         validateInitializerExpression(parameterElements, fieldInitializer.expression);
@@ -9615,24 +9627,24 @@
   List<ParameterElement> parameterElements;
   ConstantVisitor_10(this.ConstantVerifier_this, this.parameterElements) : super();
   EvaluationResultImpl visitSimpleIdentifier(SimpleIdentifier node) {
-    Element element2 = node.element;
+    Element element = node.element;
     for (ParameterElement parameterElement in parameterElements) {
-      if (identical(parameterElement, element2) && parameterElement != null) {
-        Type2 type2 = parameterElement.type;
-        if (type2 != null) {
-          if (type2.isDynamic()) {
+      if (identical(parameterElement, element) && parameterElement != null) {
+        Type2 type = parameterElement.type;
+        if (type != null) {
+          if (type.isDynamic()) {
             return ValidResult.RESULT_DYNAMIC;
           }
-          if (type2.isSubtypeOf(ConstantVerifier_this._boolType)) {
+          if (type.isSubtypeOf(ConstantVerifier_this._boolType)) {
             return ValidResult.RESULT_BOOL;
           }
-          if (type2.isSubtypeOf(ConstantVerifier_this._intType)) {
+          if (type.isSubtypeOf(ConstantVerifier_this._intType)) {
             return ValidResult.RESULT_INT;
           }
-          if (type2.isSubtypeOf(ConstantVerifier_this._numType)) {
+          if (type.isSubtypeOf(ConstantVerifier_this._numType)) {
             return ValidResult.RESULT_NUM;
           }
-          if (type2.isSubtypeOf(ConstantVerifier_this._stringType)) {
+          if (type.isSubtypeOf(ConstantVerifier_this._stringType)) {
             return ValidResult.RESULT_STRING;
           }
         }
@@ -9789,8 +9801,8 @@
     return super.visitAssertStatement(node);
   }
   Object visitAssignmentExpression(AssignmentExpression node) {
-    sc.Token operator2 = node.operator;
-    sc.TokenType operatorType = operator2.type;
+    sc.Token operator = node.operator;
+    sc.TokenType operatorType = operator.type;
     if (identical(operatorType, sc.TokenType.EQ)) {
       checkForInvalidAssignment2(node.leftHandSide, node.rightHandSide);
     } else {
@@ -9816,14 +9828,14 @@
     ClassElement outerClass = _enclosingClass;
     try {
       _enclosingClass = node.element;
-      WithClause withClause2 = node.withClause;
-      ImplementsClause implementsClause2 = node.implementsClause;
-      ExtendsClause extendsClause2 = node.extendsClause;
+      WithClause withClause = node.withClause;
+      ImplementsClause implementsClause = node.implementsClause;
+      ExtendsClause extendsClause = node.extendsClause;
       checkForBuiltInIdentifierAsName(node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
       checkForMemberWithClassName();
-      checkForAllMixinErrorCodes(withClause2);
-      if (implementsClause2 != null || extendsClause2 != null) {
-        if (!checkForImplementsDisallowedClass(implementsClause2) && !checkForExtendsDisallowedClass(extendsClause2)) {
+      checkForAllMixinErrorCodes(withClause);
+      if (implementsClause != null || extendsClause != null) {
+        if (!checkForImplementsDisallowedClass(implementsClause) && !checkForExtendsDisallowedClass(extendsClause)) {
           checkForNonAbstractClassInheritsAbstractMember(node);
           checkForInconsistentMethodInheritance();
           checkForRecursiveInterfaceInheritance(_enclosingClass, new List<ClassElement>());
@@ -9932,12 +9944,12 @@
       if (node.isSetter() || node.isGetter()) {
         checkForMismatchedAccessorTypes(node, methoName);
         if (node.isSetter()) {
-          FunctionExpression functionExpression2 = node.functionExpression;
-          if (functionExpression2 != null) {
-            checkForWrongNumberOfParametersForSetter(node.name, functionExpression2.parameters);
+          FunctionExpression functionExpression = node.functionExpression;
+          if (functionExpression != null) {
+            checkForWrongNumberOfParametersForSetter(node.name, functionExpression.parameters);
           }
-          TypeName returnType2 = node.returnType;
-          checkForNonVoidReturnTypeForSetter(returnType2);
+          TypeName returnType = node.returnType;
+          checkForNonVoidReturnTypeForSetter(returnType);
         }
       }
       return super.visitFunctionDeclaration(node);
@@ -9973,11 +9985,11 @@
     return super.visitIndexExpression(node);
   }
   Object visitInstanceCreationExpression(InstanceCreationExpression node) {
-    ConstructorName constructorName2 = node.constructorName;
-    TypeName typeName = constructorName2.type;
-    Type2 type2 = typeName.type;
-    if (type2 is InterfaceType) {
-      InterfaceType interfaceType = type2 as InterfaceType;
+    ConstructorName constructorName = node.constructorName;
+    TypeName typeName = constructorName.type;
+    Type2 type = typeName.type;
+    if (type is InterfaceType) {
+      InterfaceType interfaceType = type as InterfaceType;
       checkForConstOrNewWithAbstractClass(node, typeName, interfaceType);
       if (node.isConst()) {
         checkForConstWithNonConst(node);
@@ -9986,30 +9998,30 @@
       } else {
         checkForNewWithUndefinedConstructor(node);
       }
-      checkForTypeArgumentNotMatchingBounds(node, constructorName2.element, typeName);
+      checkForTypeArgumentNotMatchingBounds(node, constructorName.element, typeName);
     }
     return super.visitInstanceCreationExpression(node);
   }
   Object visitListLiteral(ListLiteral node) {
     if (node.modifier != null) {
-      TypeArgumentList typeArguments2 = node.typeArguments;
-      if (typeArguments2 != null) {
-        NodeList<TypeName> arguments2 = typeArguments2.arguments;
-        if (arguments2.length != 0) {
-          checkForInvalidTypeArgumentInConstTypedLiteral(arguments2, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST);
+      TypeArgumentList typeArguments = node.typeArguments;
+      if (typeArguments != null) {
+        NodeList<TypeName> arguments = typeArguments.arguments;
+        if (arguments.length != 0) {
+          checkForInvalidTypeArgumentInConstTypedLiteral(arguments, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST);
         }
       }
     }
     return super.visitListLiteral(node);
   }
   Object visitMapLiteral(MapLiteral node) {
-    TypeArgumentList typeArguments2 = node.typeArguments;
-    if (typeArguments2 != null) {
-      NodeList<TypeName> arguments2 = typeArguments2.arguments;
-      if (arguments2.length != 0) {
-        checkForInvalidTypeArgumentForKey(arguments2);
+    TypeArgumentList typeArguments = node.typeArguments;
+    if (typeArguments != null) {
+      NodeList<TypeName> arguments = typeArguments.arguments;
+      if (arguments.length != 0) {
+        checkForInvalidTypeArgumentForKey(arguments);
         if (node.modifier != null) {
-          checkForInvalidTypeArgumentInConstTypedLiteral(arguments2, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP);
+          checkForInvalidTypeArgumentInConstTypedLiteral(arguments, CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP);
         }
       }
     }
@@ -10134,14 +10146,14 @@
     Expression initializerNode = node.initializer;
     checkForInvalidAssignment2(nameNode, initializerNode);
     nameNode.accept(this);
-    String name2 = nameNode.name;
-    javaSetAdd(_namesForReferenceToDeclaredVariableInInitializer, name2);
+    String name = nameNode.name;
+    javaSetAdd(_namesForReferenceToDeclaredVariableInInitializer, name);
     try {
       if (initializerNode != null) {
         initializerNode.accept(this);
       }
     } finally {
-      _namesForReferenceToDeclaredVariableInInitializer.remove(name2);
+      _namesForReferenceToDeclaredVariableInInitializer.remove(name);
     }
     return null;
   }
@@ -10197,27 +10209,27 @@
         }
       }
     }
-    NodeList<ConstructorInitializer> initializers2 = node.initializers;
-    for (ConstructorInitializer constructorInitializer in initializers2) {
+    NodeList<ConstructorInitializer> initializers = node.initializers;
+    for (ConstructorInitializer constructorInitializer in initializers) {
       if (constructorInitializer is ConstructorFieldInitializer) {
         ConstructorFieldInitializer constructorFieldInitializer = constructorInitializer as ConstructorFieldInitializer;
-        SimpleIdentifier fieldName2 = constructorFieldInitializer.fieldName;
-        Element element2 = fieldName2.element;
-        if (element2 is FieldElement) {
-          FieldElement fieldElement = element2 as FieldElement;
+        SimpleIdentifier fieldName = constructorFieldInitializer.fieldName;
+        Element element = fieldName.element;
+        if (element is FieldElement) {
+          FieldElement fieldElement = element as FieldElement;
           INIT_STATE state = fieldElementsMap[fieldElement];
           if (identical(state, INIT_STATE.NOT_INIT)) {
             fieldElementsMap[fieldElement] = INIT_STATE.INIT_IN_INITIALIZERS;
           } else if (identical(state, INIT_STATE.INIT_IN_DECLARATION)) {
             if (fieldElement.isFinal() || fieldElement.isConst()) {
-              _errorReporter.reportError2(CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION, fieldName2, []);
+              _errorReporter.reportError2(CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION, fieldName, []);
               foundError = true;
             }
           } else if (identical(state, INIT_STATE.INIT_IN_FIELD_FORMAL)) {
-            _errorReporter.reportError2(CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER, fieldName2, []);
+            _errorReporter.reportError2(CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER, fieldName, []);
             foundError = true;
           } else if (identical(state, INIT_STATE.INIT_IN_INITIALIZERS)) {
-            _errorReporter.reportError2(CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS, fieldName2, [fieldElement.displayName]);
+            _errorReporter.reportError2(CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS, fieldName, [fieldElement.displayName]);
             foundError = true;
           }
         }
@@ -10514,8 +10526,8 @@
       return false;
     }
     ExportElement exportElement = node.element as ExportElement;
-    LibraryElement exportedLibrary2 = exportElement.exportedLibrary;
-    if (exportedLibrary2 == null) {
+    LibraryElement exportedLibrary = exportElement.exportedLibrary;
+    if (exportedLibrary == null) {
       return false;
     }
     Namespace namespace = new NamespaceBuilder().createExportNamespace(exportElement);
@@ -10523,7 +10535,7 @@
     for (String name in newNames) {
       ExportElement prevElement = _exportedNames[name];
       if (prevElement != null && prevElement != exportElement) {
-        _errorReporter.reportError2(CompileTimeErrorCode.AMBIGUOUS_EXPORT, node, [name, prevElement.exportedLibrary.definingCompilationUnit.displayName, exportedLibrary2.definingCompilationUnit.displayName]);
+        _errorReporter.reportError2(CompileTimeErrorCode.AMBIGUOUS_EXPORT, node, [name, prevElement.exportedLibrary.definingCompilationUnit.displayName, exportedLibrary.definingCompilationUnit.displayName]);
         return true;
       } else {
         _exportedNames[name] = exportElement;
@@ -10539,10 +10551,10 @@
    * @see CompileTimeErrorCode#ARGUMENT_DEFINITION_TEST_NON_PARAMETER
    */
   bool checkForArgumentDefinitionTestNonParameter(ArgumentDefinitionTest node) {
-    SimpleIdentifier identifier2 = node.identifier;
-    Element element2 = identifier2.element;
-    if (element2 != null && element2 is! ParameterElement) {
-      _errorReporter.reportError2(CompileTimeErrorCode.ARGUMENT_DEFINITION_TEST_NON_PARAMETER, identifier2, [identifier2.name]);
+    SimpleIdentifier identifier = node.identifier;
+    Element element = identifier.element;
+    if (element != null && element is! ParameterElement) {
+      _errorReporter.reportError2(CompileTimeErrorCode.ARGUMENT_DEFINITION_TEST_NON_PARAMETER, identifier, [identifier.name]);
       return true;
     }
     return false;
@@ -10575,8 +10587,8 @@
     if (argument == null) {
       return false;
     }
-    ParameterElement staticParameterElement2 = argument.staticParameterElement;
-    Type2 staticParameterType = staticParameterElement2 == null ? null : staticParameterElement2.type;
+    ParameterElement staticParameterElement = argument.staticParameterElement;
+    Type2 staticParameterType = staticParameterElement == null ? null : staticParameterElement.type;
     Type2 staticArgumentType = getStaticType(argument);
     if (staticArgumentType == null || staticParameterType == null) {
       return false;
@@ -10661,8 +10673,8 @@
    * @see CompileTimeErrorCode#BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME
    */
   bool checkForBuiltInIdentifierAsName(SimpleIdentifier identifier, ErrorCode errorCode) {
-    sc.Token token2 = identifier.token;
-    if (identical(token2.type, sc.TokenType.KEYWORD)) {
+    sc.Token token = identifier.token;
+    if (identical(token.type, sc.TokenType.KEYWORD)) {
       _errorReporter.reportError2(errorCode, identifier, [identifier.name]);
       return true;
     }
@@ -10681,9 +10693,9 @@
       Identifier identifier = typeName.name;
       if (identifier is SimpleIdentifier) {
         SimpleIdentifier simpleIdentifier = identifier as SimpleIdentifier;
-        sc.Token token2 = simpleIdentifier.token;
-        if (identical(token2.type, sc.TokenType.KEYWORD)) {
-          if (((token2 as sc.KeywordToken)).keyword != sc.Keyword.DYNAMIC) {
+        sc.Token token = simpleIdentifier.token;
+        if (identical(token.type, sc.TokenType.KEYWORD)) {
+          if (((token as sc.KeywordToken)).keyword != sc.Keyword.DYNAMIC) {
             _errorReporter.reportError2(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, identifier, [identifier.name]);
             return true;
           }
@@ -10701,25 +10713,25 @@
    * @see StaticWarningCode#CASE_BLOCK_NOT_TERMINATED
    */
   bool checkForCaseBlockNotTerminated(SwitchCase node) {
-    NodeList<Statement> statements2 = node.statements;
-    if (statements2.isEmpty) {
-      ASTNode parent2 = node.parent;
-      if (parent2 is SwitchStatement) {
-        SwitchStatement switchStatement = parent2 as SwitchStatement;
-        NodeList<SwitchMember> members2 = switchStatement.members;
-        int index = members2.indexOf(node);
-        if (index != -1 && index < members2.length - 1) {
+    NodeList<Statement> statements = node.statements;
+    if (statements.isEmpty) {
+      ASTNode parent = node.parent;
+      if (parent is SwitchStatement) {
+        SwitchStatement switchStatement = parent as SwitchStatement;
+        NodeList<SwitchMember> members = switchStatement.members;
+        int index = members.indexOf(node);
+        if (index != -1 && index < members.length - 1) {
           return false;
         }
       }
     } else {
-      Statement statement = statements2[statements2.length - 1];
+      Statement statement = statements[statements.length - 1];
       if (statement is BreakStatement || statement is ContinueStatement || statement is ReturnStatement) {
         return false;
       }
       if (statement is ExpressionStatement) {
-        Expression expression2 = ((statement as ExpressionStatement)).expression;
-        if (expression2 is ThrowExpression) {
+        Expression expression = ((statement as ExpressionStatement)).expression;
+        if (expression is ThrowExpression) {
           return false;
         }
       }
@@ -10737,10 +10749,10 @@
    */
   bool checkForCaseBlocksNotTerminated(SwitchStatement node) {
     bool foundError = false;
-    NodeList<SwitchMember> members2 = node.members;
-    int lastMember = members2.length - 1;
+    NodeList<SwitchMember> members = node.members;
+    int lastMember = members.length - 1;
     for (int i = 0; i < lastMember; i++) {
-      SwitchMember member = members2[i];
+      SwitchMember member = members[i];
       if (member is SwitchCase) {
         foundError = javaBooleanOr(foundError, checkForCaseBlockNotTerminated((member as SwitchCase)));
       }
@@ -10756,15 +10768,15 @@
    * @see CompileTimeErrorCode#CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
    */
   bool checkForCaseExpressionTypeImplementsEquals(SwitchStatement node) {
-    Expression expression2 = node.expression;
-    Type2 type = getStaticType(expression2);
+    Expression expression = node.expression;
+    Type2 type = getStaticType(expression);
     if (type != null && type != _typeProvider.intType && type != _typeProvider.stringType) {
-      Element element2 = type.element;
-      if (element2 is ClassElement) {
-        ClassElement classElement = element2 as ClassElement;
+      Element element = type.element;
+      if (element is ClassElement) {
+        ClassElement classElement = element as ClassElement;
         MethodElement method = classElement.lookUpMethod("==", _currentLibrary);
         if (method != null && method.enclosingElement.type != _typeProvider.objectType) {
-          _errorReporter.reportError2(CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS, expression2, [element2.displayName]);
+          _errorReporter.reportError2(CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS, expression, [element.displayName]);
           return true;
         }
       }
@@ -10801,34 +10813,34 @@
   bool checkForConflictingConstructorNameAndMember(ConstructorDeclaration node) {
     ConstructorElement constructorElement = node.element;
     SimpleIdentifier constructorName = node.name;
-    String name2 = constructorElement.name;
+    String name = constructorElement.name;
     ClassElement classElement = constructorElement.enclosingElement;
-    List<ConstructorElement> constructors2 = classElement.constructors;
-    for (ConstructorElement otherConstructor in constructors2) {
+    List<ConstructorElement> constructors = classElement.constructors;
+    for (ConstructorElement otherConstructor in constructors) {
       if (identical(otherConstructor, constructorElement)) {
         continue;
       }
-      if (name2 == otherConstructor.name) {
-        if (name2 == null || name2.length == 0) {
+      if (name == otherConstructor.name) {
+        if (name == null || name.length == 0) {
           _errorReporter.reportError2(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, node, []);
         } else {
-          _errorReporter.reportError2(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, node, [name2]);
+          _errorReporter.reportError2(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, node, [name]);
         }
         return true;
       }
     }
     if (constructorName != null && constructorElement != null && !constructorName.isSynthetic()) {
-      List<FieldElement> fields2 = classElement.fields;
-      for (FieldElement field in fields2) {
-        if (field.name == name2) {
-          _errorReporter.reportError2(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD, node, [name2]);
+      List<FieldElement> fields = classElement.fields;
+      for (FieldElement field in fields) {
+        if (field.name == name) {
+          _errorReporter.reportError2(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD, node, [name]);
           return true;
         }
       }
-      List<MethodElement> methods2 = classElement.methods;
-      for (MethodElement method in methods2) {
-        if (method.name == name2) {
-          _errorReporter.reportError2(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD, node, [name2]);
+      List<MethodElement> methods = classElement.methods;
+      for (MethodElement method in methods) {
+        if (method.name == name) {
+          _errorReporter.reportError2(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD, node, [name]);
           return true;
         }
       }
@@ -10852,18 +10864,18 @@
     if (nameNode == null) {
       return false;
     }
-    String name2 = nameNode.name;
+    String name = nameNode.name;
     if (_enclosingClass == null) {
       return false;
     }
     InterfaceType enclosingType = _enclosingClass.type;
     ExecutableElement superElement;
-    superElement = enclosingType.lookUpGetterInSuperclass(name2, _currentLibrary);
+    superElement = enclosingType.lookUpGetterInSuperclass(name, _currentLibrary);
     if (superElement == null) {
-      superElement = enclosingType.lookUpSetterInSuperclass(name2, _currentLibrary);
+      superElement = enclosingType.lookUpSetterInSuperclass(name, _currentLibrary);
     }
     if (superElement == null) {
-      superElement = enclosingType.lookUpMethodInSuperclass(name2, _currentLibrary);
+      superElement = enclosingType.lookUpMethodInSuperclass(name, _currentLibrary);
     }
     if (superElement == null) {
       return false;
@@ -10896,12 +10908,12 @@
     if (nameNode == null) {
       return false;
     }
-    String name2 = nameNode.name;
+    String name = nameNode.name;
     if (_enclosingClass == null) {
       return false;
     }
     InterfaceType enclosingType = _enclosingClass.type;
-    ExecutableElement setter = enclosingType.lookUpSetter(name2, _currentLibrary);
+    ExecutableElement setter = enclosingType.lookUpSetter(name, _currentLibrary);
     if (setter == null) {
       return false;
     }
@@ -10929,18 +10941,18 @@
     if (nameNode == null) {
       return false;
     }
-    String name2 = nameNode.name;
+    String name = nameNode.name;
     if (_enclosingClass == null) {
       return false;
     }
     InterfaceType enclosingType = _enclosingClass.type;
     ExecutableElement member;
-    member = enclosingType.lookUpMethod(name2, _currentLibrary);
+    member = enclosingType.lookUpMethod(name, _currentLibrary);
     if (member == null) {
-      member = enclosingType.lookUpGetter(name2, _currentLibrary);
+      member = enclosingType.lookUpGetter(name, _currentLibrary);
     }
     if (member == null) {
-      member = enclosingType.lookUpSetter(name2, _currentLibrary);
+      member = enclosingType.lookUpSetter(name, _currentLibrary);
     }
     if (member == null) {
       return false;
@@ -11015,8 +11027,8 @@
    */
   bool checkForConstOrNewWithAbstractClass(InstanceCreationExpression node, TypeName typeName, InterfaceType type) {
     if (type.element.isAbstract()) {
-      ConstructorElement element2 = node.element;
-      if (element2 != null && !element2.isFactory()) {
+      ConstructorElement element = node.element;
+      if (element != null && !element.isFactory()) {
         if (identical(((node.keyword as sc.KeywordToken)).keyword, sc.Keyword.CONST)) {
           _errorReporter.reportError2(StaticWarningCode.CONST_WITH_ABSTRACT_CLASS, typeName, []);
         } else {
@@ -11056,11 +11068,11 @@
    * @see CompileTimeErrorCode#CONST_WITH_TYPE_PARAMETERS
    */
   bool checkForConstWithTypeParameters(InstanceCreationExpression node) {
-    ConstructorName constructorName2 = node.constructorName;
-    if (constructorName2 == null) {
+    ConstructorName constructorName = node.constructorName;
+    if (constructorName == null) {
       return false;
     }
-    TypeName typeName = constructorName2.type;
+    TypeName typeName = constructorName.type;
     return checkForConstWithTypeParameters2(typeName);
   }
 
@@ -11074,17 +11086,17 @@
     if (typeName == null) {
       return false;
     }
-    Identifier name2 = typeName.name;
-    if (name2 == null) {
+    Identifier name = typeName.name;
+    if (name == null) {
       return false;
     }
-    if (name2.element is TypeVariableElement) {
-      _errorReporter.reportError2(CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, name2, []);
+    if (name.element is TypeVariableElement) {
+      _errorReporter.reportError2(CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, name, []);
     }
-    TypeArgumentList typeArguments2 = typeName.typeArguments;
-    if (typeArguments2 != null) {
+    TypeArgumentList typeArguments = typeName.typeArguments;
+    if (typeArguments != null) {
       bool hasError = false;
-      for (TypeName argument in typeArguments2.arguments) {
+      for (TypeName argument in typeArguments.arguments) {
         hasError = javaBooleanOr(hasError, checkForConstWithTypeParameters2(argument));
       }
       return hasError;
@@ -11106,20 +11118,20 @@
     if (node.element != null) {
       return false;
     }
-    ConstructorName constructorName2 = node.constructorName;
-    if (constructorName2 == null) {
+    ConstructorName constructorName = node.constructorName;
+    if (constructorName == null) {
       return false;
     }
-    TypeName type2 = constructorName2.type;
-    if (type2 == null) {
+    TypeName type = constructorName.type;
+    if (type == null) {
       return false;
     }
-    Identifier className = type2.name;
-    SimpleIdentifier name2 = constructorName2.name;
-    if (name2 != null) {
-      _errorReporter.reportError2(CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR, name2, [className, name2]);
+    Identifier className = type.name;
+    SimpleIdentifier name = constructorName.name;
+    if (name != null) {
+      _errorReporter.reportError2(CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR, name, [className, name]);
     } else {
-      _errorReporter.reportError2(CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, constructorName2, [className]);
+      _errorReporter.reportError2(CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, constructorName, [className]);
     }
     return true;
   }
@@ -11133,8 +11145,8 @@
   bool checkForDefaultValueInFunctionTypeAlias(FunctionTypeAlias node) {
     bool result = false;
     FormalParameterList formalParameterList = node.parameters;
-    NodeList<FormalParameter> parameters2 = formalParameterList.parameters;
-    for (FormalParameter formalParameter in parameters2) {
+    NodeList<FormalParameter> parameters = formalParameterList.parameters;
+    for (FormalParameter formalParameter in parameters) {
       if (formalParameter is DefaultFormalParameter) {
         DefaultFormalParameter defaultFormalParameter = formalParameter as DefaultFormalParameter;
         if (defaultFormalParameter.defaultValue != null) {
@@ -11162,15 +11174,15 @@
     if (nodeLibrary == null) {
       return false;
     }
-    String name2 = nodeLibrary.name;
-    LibraryElement prevLibrary = _nameToExportElement[name2];
+    String name = nodeLibrary.name;
+    LibraryElement prevLibrary = _nameToExportElement[name];
     if (prevLibrary != null) {
       if (prevLibrary != nodeLibrary) {
-        _errorReporter.reportError2(StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAME, node, [prevLibrary.definingCompilationUnit.displayName, nodeLibrary.definingCompilationUnit.displayName, name2]);
+        _errorReporter.reportError2(StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAME, node, [prevLibrary.definingCompilationUnit.displayName, nodeLibrary.definingCompilationUnit.displayName, name]);
         return true;
       }
     } else {
-      _nameToExportElement[name2] = nodeLibrary;
+      _nameToExportElement[name] = nodeLibrary;
     }
     return false;
   }
@@ -11186,14 +11198,14 @@
     if (_isInSystemLibrary) {
       return false;
     }
-    Element element2 = node.element;
-    if (element2 is! ExportElement) {
+    Element element = node.element;
+    if (element is! ExportElement) {
       return false;
     }
-    ExportElement exportElement = element2 as ExportElement;
+    ExportElement exportElement = element as ExportElement;
     DartSdk sdk = _currentLibrary.context.sourceFactory.dartSdk;
-    String uri2 = exportElement.uri;
-    SdkLibrary sdkLibrary = sdk.getSdkLibrary(uri2);
+    String uri = exportElement.uri;
+    SdkLibrary sdkLibrary = sdk.getSdkLibrary(uri);
     if (sdkLibrary == null) {
       return false;
     }
@@ -11266,11 +11278,11 @@
     }
     FieldElement fieldElement = fieldNameElement as FieldElement;
     Type2 fieldType = fieldElement.type;
-    Expression expression2 = node.expression;
-    if (expression2 == null) {
+    Expression expression = node.expression;
+    if (expression == null) {
       return false;
     }
-    Type2 staticType = getStaticType(expression2);
+    Type2 staticType = getStaticType(expression);
     if (staticType == null) {
       return false;
     }
@@ -11278,20 +11290,20 @@
       return false;
     } else if (_strictMode) {
       if (_isEnclosingConstructorConst) {
-        _errorReporter.reportError2(CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE, expression2, [staticType.displayName, fieldType.displayName]);
+        _errorReporter.reportError2(CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE, expression, [staticType.displayName, fieldType.displayName]);
       } else {
-        _errorReporter.reportError2(StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, expression2, [staticType.displayName, fieldType.displayName]);
+        _errorReporter.reportError2(StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, expression, [staticType.displayName, fieldType.displayName]);
       }
       return true;
     }
-    Type2 propagatedType = getPropagatedType(expression2);
+    Type2 propagatedType = getPropagatedType(expression);
     if (propagatedType != null && propagatedType.isAssignableTo(fieldType)) {
       return false;
     }
     if (_isEnclosingConstructorConst) {
-      _errorReporter.reportError2(CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE, expression2, [(propagatedType == null ? staticType : propagatedType).displayName, fieldType.displayName]);
+      _errorReporter.reportError2(CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE, expression, [(propagatedType == null ? staticType : propagatedType).displayName, fieldType.displayName]);
     } else {
-      _errorReporter.reportError2(StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, expression2, [(propagatedType == null ? staticType : propagatedType).displayName, fieldType.displayName]);
+      _errorReporter.reportError2(StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, expression, [(propagatedType == null ? staticType : propagatedType).displayName, fieldType.displayName]);
     }
     return true;
   }
@@ -11356,8 +11368,8 @@
   bool checkForFinalNotInitialized2(VariableDeclarationList node) {
     bool foundError = false;
     if (!node.isSynthetic() && (node.isConst() || node.isFinal())) {
-      NodeList<VariableDeclaration> variables2 = node.variables;
-      for (VariableDeclaration variable in variables2) {
+      NodeList<VariableDeclaration> variables = node.variables;
+      for (VariableDeclaration variable in variables) {
         if (variable.initializer == null) {
           _errorReporter.reportError2(StaticWarningCode.FINAL_NOT_INITIALIZED, variable, [variable.name.name]);
           foundError = true;
@@ -11396,34 +11408,34 @@
     if (!_isInConstructorInitializer) {
       return false;
     }
-    Element element2 = node.element;
-    if (!(element2 is MethodElement || element2 is PropertyAccessorElement)) {
+    Element element = node.element;
+    if (!(element is MethodElement || element is PropertyAccessorElement)) {
       return false;
     }
-    ExecutableElement executableElement = element2 as ExecutableElement;
+    ExecutableElement executableElement = element as ExecutableElement;
     if (executableElement.isStatic()) {
       return false;
     }
-    Element enclosingElement2 = element2.enclosingElement;
-    if (enclosingElement2 is! ClassElement) {
+    Element enclosingElement = element.enclosingElement;
+    if (enclosingElement is! ClassElement) {
       return false;
     }
-    ASTNode parent2 = node.parent;
-    if (parent2 is MethodInvocation) {
-      MethodInvocation invocation = parent2 as MethodInvocation;
+    ASTNode parent = node.parent;
+    if (parent is MethodInvocation) {
+      MethodInvocation invocation = parent as MethodInvocation;
       if (identical(invocation.methodName, node) && invocation.realTarget != null) {
         return false;
       }
     }
     {
-      if (parent2 is PropertyAccess) {
-        PropertyAccess access = parent2 as PropertyAccess;
+      if (parent is PropertyAccess) {
+        PropertyAccess access = parent as PropertyAccess;
         if (identical(access.propertyName, node) && access.realTarget != null) {
           return false;
         }
       }
-      if (parent2 is PrefixedIdentifier) {
-        PrefixedIdentifier prefixed = parent2 as PrefixedIdentifier;
+      if (parent is PrefixedIdentifier) {
+        PrefixedIdentifier prefixed = parent as PrefixedIdentifier;
         if (identical(prefixed.identifier, node)) {
           return false;
         }
@@ -11449,15 +11461,15 @@
     if (nodeLibrary == null) {
       return false;
     }
-    String name2 = nodeLibrary.name;
-    LibraryElement prevLibrary = _nameToImportElement[name2];
+    String name = nodeLibrary.name;
+    LibraryElement prevLibrary = _nameToImportElement[name];
     if (prevLibrary != null) {
       if (prevLibrary != nodeLibrary) {
-        _errorReporter.reportError2(StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAME, node, [prevLibrary.definingCompilationUnit.displayName, nodeLibrary.definingCompilationUnit.displayName, name2]);
+        _errorReporter.reportError2(StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAME, node, [prevLibrary.definingCompilationUnit.displayName, nodeLibrary.definingCompilationUnit.displayName, name]);
         return true;
       }
     } else {
-      _nameToImportElement[name2] = nodeLibrary;
+      _nameToImportElement[name] = nodeLibrary;
     }
     return false;
   }
@@ -11473,14 +11485,14 @@
     if (_isInSystemLibrary) {
       return false;
     }
-    Element element2 = node.element;
-    if (element2 is! ImportElement) {
+    Element element = node.element;
+    if (element is! ImportElement) {
       return false;
     }
-    ImportElement importElement = element2 as ImportElement;
+    ImportElement importElement = element as ImportElement;
     DartSdk sdk = _currentLibrary.context.sourceFactory.dartSdk;
-    String uri2 = importElement.uri;
-    SdkLibrary sdkLibrary = sdk.getSdkLibrary(uri2);
+    String uri = importElement.uri;
+    SdkLibrary sdkLibrary = sdk.getSdkLibrary(uri);
     if (sdkLibrary == null) {
       return false;
     }
@@ -11504,13 +11516,13 @@
     for (SwitchMember switchMember in switchMembers) {
       if (switchMember is SwitchCase) {
         SwitchCase switchCase = switchMember as SwitchCase;
-        Expression expression2 = switchCase.expression;
+        Expression expression = switchCase.expression;
         if (firstType == null) {
-          firstType = getBestType(expression2);
+          firstType = getBestType(expression);
         } else {
-          Type2 nType = getBestType(expression2);
+          Type2 nType = getBestType(expression);
           if (firstType != nType) {
-            _errorReporter.reportError2(CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES, expression2, [expression2.toSource(), firstType.displayName]);
+            _errorReporter.reportError2(CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES, expression, [expression.toSource(), firstType.displayName]);
             foundError = true;
           }
         }
@@ -11794,20 +11806,20 @@
     if (node.element != null) {
       return false;
     }
-    ConstructorName constructorName2 = node.constructorName;
-    if (constructorName2 == null) {
+    ConstructorName constructorName = node.constructorName;
+    if (constructorName == null) {
       return false;
     }
-    TypeName type2 = constructorName2.type;
-    if (type2 == null) {
+    TypeName type = constructorName.type;
+    if (type == null) {
       return false;
     }
-    Identifier className = type2.name;
-    SimpleIdentifier name2 = constructorName2.name;
-    if (name2 != null) {
-      _errorReporter.reportError2(StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR, name2, [className, name2]);
+    Identifier className = type.name;
+    SimpleIdentifier name = constructorName.name;
+    if (name != null) {
+      _errorReporter.reportError2(StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR, name, [className, name]);
     } else {
-      _errorReporter.reportError2(StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, constructorName2, [className]);
+      _errorReporter.reportError2(StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, constructorName, [className]);
     }
     return true;
   }
@@ -11830,12 +11842,12 @@
     Set<ExecutableElement> missingOverrides = new Set<ExecutableElement>();
     Set<String> methodsInEnclosingClass = new Set<String>();
     Set<String> accessorsInEnclosingClass = new Set<String>();
-    List<MethodElement> methods2 = _enclosingClass.methods;
-    for (MethodElement method in methods2) {
+    List<MethodElement> methods = _enclosingClass.methods;
+    for (MethodElement method in methods) {
       javaSetAdd(methodsInEnclosingClass, method.name);
     }
-    List<PropertyAccessorElement> accessors2 = _enclosingClass.accessors;
-    for (PropertyAccessorElement accessor in accessors2) {
+    List<PropertyAccessorElement> accessors = _enclosingClass.accessors;
+    for (PropertyAccessorElement accessor in accessors) {
       javaSetAdd(accessorsInEnclosingClass, accessor.name);
     }
     Map<String, ExecutableElement> membersInheritedFromSuperclasses = _inheritanceManager.getMapOfMembersInheritedFromClasses(_enclosingClass);
@@ -11987,14 +11999,14 @@
    * @see StaticWarningCode#NON_VOID_RETURN_FOR_OPERATOR
    */
   bool checkForNonVoidReturnTypeForOperator(MethodDeclaration node) {
-    SimpleIdentifier name2 = node.name;
-    if (name2.name != "[]=") {
+    SimpleIdentifier name = node.name;
+    if (name.name != "[]=") {
       return false;
     }
     TypeName typeName = node.returnType;
     if (typeName != null) {
-      Type2 type2 = typeName.type;
-      if (type2 != null && !type2.isVoid()) {
+      Type2 type = typeName.type;
+      if (type != null && !type.isVoid()) {
         _errorReporter.reportError2(StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR, typeName, []);
       }
     }
@@ -12009,8 +12021,8 @@
    */
   bool checkForNonVoidReturnTypeForSetter(TypeName typeName) {
     if (typeName != null) {
-      Type2 type2 = typeName.type;
-      if (type2 != null && !type2.isVoid()) {
+      Type2 type = typeName.type;
+      if (type != null && !type.isVoid()) {
         _errorReporter.reportError2(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, typeName, []);
       }
     }
@@ -12049,10 +12061,10 @@
    * @see CompileTimeErrorCode#PRIVATE_OPTIONAL_PARAMETER
    */
   bool checkForPrivateOptionalParameter(DefaultFormalParameter node) {
-    sc.Token separator2 = node.separator;
-    if (separator2 != null && separator2.lexeme == ":") {
-      NormalFormalParameter parameter2 = node.parameter;
-      SimpleIdentifier name = parameter2.identifier;
+    sc.Token separator = node.separator;
+    if (separator != null && separator.lexeme == ":") {
+      NormalFormalParameter parameter = node.parameter;
+      SimpleIdentifier name = parameter.identifier;
       if (!name.isSynthetic() && name.name.startsWith("_")) {
         _errorReporter.reportError2(CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER, node, []);
         return true;
@@ -12074,8 +12086,8 @@
     }
     for (ConstructorInitializer initializer in node.initializers) {
       if (initializer is RedirectingConstructorInvocation) {
-        ConstructorElement element2 = node.element;
-        if (!hasRedirectingFactoryConstructorCycle(element2)) {
+        ConstructorElement element = node.element;
+        if (!hasRedirectingFactoryConstructorCycle(element)) {
           return false;
         }
         _errorReporter.reportError2(CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT, initializer, []);
@@ -12097,8 +12109,8 @@
     if (redirectedConstructorNode == null) {
       return false;
     }
-    ConstructorElement element2 = node.element;
-    if (!hasRedirectingFactoryConstructorCycle(element2)) {
+    ConstructorElement element = node.element;
+    if (!hasRedirectingFactoryConstructorCycle(element)) {
       return false;
     }
     _errorReporter.reportError2(CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT, redirectedConstructorNode, []);
@@ -12118,7 +12130,7 @@
     if (classElt == null) {
       return false;
     }
-    InterfaceType supertype2 = classElt.supertype;
+    InterfaceType supertype = classElt.supertype;
     list.add(classElt);
     if (list.length != 1 && _enclosingClass == classElt) {
       String enclosingClassName = _enclosingClass.displayName;
@@ -12135,7 +12147,7 @@
         _errorReporter.reportError3(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, _enclosingClass.nameOffset, enclosingClassName.length, [enclosingClassName, builder.toString()]);
         return true;
       } else if (list.length == 2) {
-        ErrorCode errorCode = supertype2 != null && _enclosingClass == supertype2.element ? CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS : CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS;
+        ErrorCode errorCode = supertype != null && _enclosingClass == supertype.element ? CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS : CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS;
         _errorReporter.reportError3(errorCode, _enclosingClass.nameOffset, enclosingClassName.length, [enclosingClassName]);
         return true;
       }
@@ -12148,9 +12160,9 @@
     }
     List<ClassElement> interfaceElements;
     List<InterfaceType> interfaceTypes = classElt.interfaces;
-    if (supertype2 != null && !supertype2.isObject()) {
+    if (supertype != null && !supertype.isObject()) {
       interfaceElements = new List<ClassElement>(interfaceTypes.length + 1);
-      interfaceElements[0] = supertype2.element;
+      interfaceElements[0] = supertype.element;
       for (int i = 0; i < interfaceTypes.length; i++) {
         interfaceElements[i + 1] = interfaceTypes[i].element;
       }
@@ -12217,18 +12229,18 @@
     if (redirectedConstructorNode == null) {
       return false;
     }
-    ConstructorElement element2 = node.element;
-    if (element2 == null) {
+    ConstructorElement element = node.element;
+    if (element == null) {
       return false;
     }
-    if (!element2.isConst()) {
+    if (!element.isConst()) {
       return false;
     }
-    ConstructorElement redirectedConstructor2 = element2.redirectedConstructor;
-    if (redirectedConstructor2 == null) {
+    ConstructorElement redirectedConstructor = element.redirectedConstructor;
+    if (redirectedConstructor == null) {
       return false;
     }
-    if (redirectedConstructor2.isConst()) {
+    if (redirectedConstructor.isConst()) {
       return false;
     }
     _errorReporter.reportError2(CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR, redirectedConstructorNode, []);
@@ -12243,42 +12255,42 @@
    * @see CompileTimeErrorCode#REFERENCE_TO_DECLARED_VARIABLE_IN_INITIALIZER
    */
   bool checkForReferenceToDeclaredVariableInInitializer(SimpleIdentifier node) {
-    ASTNode parent2 = node.parent;
-    if (parent2 is PrefixedIdentifier) {
-      PrefixedIdentifier prefixedIdentifier = parent2 as PrefixedIdentifier;
+    ASTNode parent = node.parent;
+    if (parent is PrefixedIdentifier) {
+      PrefixedIdentifier prefixedIdentifier = parent as PrefixedIdentifier;
       if (identical(prefixedIdentifier.identifier, node)) {
         return false;
       }
     }
-    if (parent2 is PropertyAccess) {
-      PropertyAccess propertyAccess = parent2 as PropertyAccess;
+    if (parent is PropertyAccess) {
+      PropertyAccess propertyAccess = parent as PropertyAccess;
       if (identical(propertyAccess.propertyName, node)) {
         return false;
       }
     }
-    if (parent2 is MethodInvocation) {
-      MethodInvocation methodInvocation = parent2 as MethodInvocation;
+    if (parent is MethodInvocation) {
+      MethodInvocation methodInvocation = parent as MethodInvocation;
       if (methodInvocation.target != null && identical(methodInvocation.methodName, node)) {
         return false;
       }
     }
-    if (parent2 is ConstructorName) {
-      ConstructorName constructorName = parent2 as ConstructorName;
+    if (parent is ConstructorName) {
+      ConstructorName constructorName = parent as ConstructorName;
       if (identical(constructorName.name, node)) {
         return false;
       }
     }
-    if (parent2 is Label) {
-      Label label = parent2 as Label;
+    if (parent is Label) {
+      Label label = parent as Label;
       if (identical(label.label, node)) {
         return false;
       }
     }
-    String name2 = node.name;
-    if (!_namesForReferenceToDeclaredVariableInInitializer.contains(name2)) {
+    String name = node.name;
+    if (!_namesForReferenceToDeclaredVariableInInitializer.contains(name)) {
       return false;
     }
-    _errorReporter.reportError2(CompileTimeErrorCode.REFERENCE_TO_DECLARED_VARIABLE_IN_INITIALIZER, node, [name2]);
+    _errorReporter.reportError2(CompileTimeErrorCode.REFERENCE_TO_DECLARED_VARIABLE_IN_INITIALIZER, node, [name]);
     return true;
   }
 
@@ -12305,11 +12317,11 @@
    * @see StaticWarningCode#STATIC_ACCESS_TO_INSTANCE_MEMBER
    */
   bool checkForStaticAccessToInstanceMember(Expression target, SimpleIdentifier name2) {
-    Element element2 = name2.element;
-    if (element2 is! ExecutableElement) {
+    Element element = name2.element;
+    if (element is! ExecutableElement) {
       return false;
     }
-    ExecutableElement memberElement = element2 as ExecutableElement;
+    ExecutableElement memberElement = element as ExecutableElement;
     if (memberElement.isStatic()) {
       return false;
     }
@@ -12328,13 +12340,13 @@
    * @see StaticWarningCode#SWITCH_EXPRESSION_NOT_ASSIGNABLE
    */
   bool checkForSwitchExpressionNotAssignable(SwitchStatement node) {
-    Expression expression2 = node.expression;
-    Type2 expressionType = getStaticType(expression2);
+    Expression expression = node.expression;
+    Type2 expressionType = getStaticType(expression);
     if (expressionType == null) {
       return false;
     }
-    NodeList<SwitchMember> members2 = node.members;
-    for (SwitchMember switchMember in members2) {
+    NodeList<SwitchMember> members = node.members;
+    for (SwitchMember switchMember in members) {
       if (switchMember is! SwitchCase) {
         continue;
       }
@@ -12344,7 +12356,7 @@
       if (expressionType.isAssignableTo(caseType)) {
         return false;
       }
-      _errorReporter.reportError2(StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE, expression2, [expressionType, caseType]);
+      _errorReporter.reportError2(StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE, expression, [expressionType, caseType]);
       return true;
     }
     return false;
@@ -12437,20 +12449,20 @@
     if (nameNode == null) {
       return false;
     }
-    String name2 = nameNode.name;
+    String name = nameNode.name;
     int expected = -1;
-    if ("[]=" == name2) {
+    if ("[]=" == name) {
       expected = 2;
-    } else if ("<" == name2 || ">" == name2 || "<=" == name2 || ">=" == name2 || "==" == name2 || "+" == name2 || "/" == name2 || "~/" == name2 || "*" == name2 || "%" == name2 || "|" == name2 || "^" == name2 || "&" == name2 || "<<" == name2 || ">>" == name2 || "[]" == name2) {
+    } else if ("<" == name || ">" == name || "<=" == name || ">=" == name || "==" == name || "+" == name || "/" == name || "~/" == name || "*" == name || "%" == name || "|" == name || "^" == name || "&" == name || "<<" == name || ">>" == name || "[]" == name) {
       expected = 1;
-    } else if ("~" == name2) {
+    } else if ("~" == name) {
       expected = 0;
     }
     if (expected != -1 && numParameters != expected) {
-      _errorReporter.reportError2(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR, nameNode, [name2, expected, numParameters]);
+      _errorReporter.reportError2(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR, nameNode, [name, expected, numParameters]);
       return true;
     }
-    if ("-" == name2 && numParameters > 1) {
+    if ("-" == name && numParameters > 1) {
       _errorReporter.reportError2(CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS, nameNode, [numParameters]);
       return true;
     }
@@ -12550,9 +12562,9 @@
    */
   VariableElement getVariableElement(Expression expression) {
     if (expression is Identifier) {
-      Element element2 = ((expression as Identifier)).element;
-      if (element2 is VariableElement) {
-        return element2 as VariableElement;
+      Element element = ((expression as Identifier)).element;
+      if (element is VariableElement) {
+        return element as VariableElement;
       }
     }
     return null;
@@ -12703,13 +12715,13 @@
   String getSourceFullName(ASTNode node) {
     CompilationUnit unit = node.getAncestor(CompilationUnit);
     if (unit != null) {
-      CompilationUnitElement element2 = unit.element;
-      if (element2 != null) {
-        Source librarySource = element2.source;
+      CompilationUnitElement element = unit.element;
+      if (element != null) {
+        Source librarySource = element.source;
         if (librarySource != null) {
-          String fullName2 = librarySource.fullName;
-          if (fullName2 != null) {
-            return fullName2.replaceAll(r'\', '/');
+          String fullName = librarySource.fullName;
+          if (fullName != null) {
+            return fullName.replaceAll(r'\', '/');
           }
         }
       }
diff --git a/pkg/analyzer_experimental/lib/src/generated/scanner.dart b/pkg/analyzer_experimental/lib/src/generated/scanner.dart
index 091e88c..7c3c523 100644
--- a/pkg/analyzer_experimental/lib/src/generated/scanner.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/scanner.dart
@@ -76,10 +76,10 @@
    * @return the state that was created
    */
   static KeywordState createKeywordStateTable() {
-    List<Keyword> values2 = Keyword.values;
-    List<String> strings = new List<String>(values2.length);
-    for (int i = 0; i < values2.length; i++) {
-      strings[i] = values2[i].syntax;
+    List<Keyword> values = Keyword.values;
+    List<String> strings = new List<String>(values.length);
+    for (int i = 0; i < values.length; i++) {
+      strings[i] = values[i].syntax;
     }
     strings.sort();
     return computeKeywordStateTable(0, strings, 0, strings.length);
diff --git a/pkg/analyzer_experimental/lib/src/generated/sdk_io.dart b/pkg/analyzer_experimental/lib/src/generated/sdk_io.dart
index e289af5..2348b7f 100644
--- a/pkg/analyzer_experimental/lib/src/generated/sdk_io.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/sdk_io.dart
@@ -173,9 +173,9 @@
     initializeLibraryMap();
     _analysisContext = new AnalysisContextImpl();
     _analysisContext.sourceFactory = new SourceFactory.con2([new DartUriResolver(this)]);
-    List<String> uris2 = uris;
+    List<String> uris = this.uris;
     ChangeSet changeSet = new ChangeSet();
-    for (String uri in uris2) {
+    for (String uri in uris) {
       changeSet.added(_analysisContext.sourceFactory.forUri(uri));
     }
     _analysisContext.applyChanges(changeSet);
@@ -457,29 +457,29 @@
   LibraryMap get librariesMap => _librariesMap;
   Object visitMapLiteralEntry(MapLiteralEntry node) {
     String libraryName = null;
-    Expression key2 = node.key;
-    if (key2 is SimpleStringLiteral) {
-      libraryName = "${_LIBRARY_PREFIX}${((key2 as SimpleStringLiteral)).value}";
+    Expression key = node.key;
+    if (key is SimpleStringLiteral) {
+      libraryName = "${_LIBRARY_PREFIX}${((key as SimpleStringLiteral)).value}";
     }
-    Expression value2 = node.value;
-    if (value2 is InstanceCreationExpression) {
+    Expression value = node.value;
+    if (value is InstanceCreationExpression) {
       SdkLibraryImpl library = new SdkLibraryImpl(libraryName);
-      List<Expression> arguments2 = ((value2 as InstanceCreationExpression)).argumentList.arguments;
-      for (Expression argument in arguments2) {
+      List<Expression> arguments = ((value as InstanceCreationExpression)).argumentList.arguments;
+      for (Expression argument in arguments) {
         if (argument is SimpleStringLiteral) {
           library.path = ((argument as SimpleStringLiteral)).value;
         } else if (argument is NamedExpression) {
-          String name2 = ((argument as NamedExpression)).name.label.name;
-          Expression expression2 = ((argument as NamedExpression)).expression;
-          if (name2 == _CATEGORY) {
-            library.category = ((expression2 as SimpleStringLiteral)).value;
-          } else if (name2 == _IMPLEMENTATION) {
-            library.implementation = ((expression2 as BooleanLiteral)).value;
-          } else if (name2 == _DOCUMENTED) {
-            library.documented = ((expression2 as BooleanLiteral)).value;
-          } else if (name2 == _PLATFORMS) {
-            if (expression2 is SimpleIdentifier) {
-              String identifier = ((expression2 as SimpleIdentifier)).name;
+          String name = ((argument as NamedExpression)).name.label.name;
+          Expression expression = ((argument as NamedExpression)).expression;
+          if (name == _CATEGORY) {
+            library.category = ((expression as SimpleStringLiteral)).value;
+          } else if (name == _IMPLEMENTATION) {
+            library.implementation = ((expression as BooleanLiteral)).value;
+          } else if (name == _DOCUMENTED) {
+            library.documented = ((expression as BooleanLiteral)).value;
+          } else if (name == _PLATFORMS) {
+            if (expression is SimpleIdentifier) {
+              String identifier = ((expression as SimpleIdentifier)).name;
               if (identifier == _VM_PLATFORM) {
                 library.setVmLibrary();
               } else {
diff --git a/pkg/analyzer_experimental/lib/src/generated/source_io.dart b/pkg/analyzer_experimental/lib/src/generated/source_io.dart
index e473fc9..98d8fc0 100644
--- a/pkg/analyzer_experimental/lib/src/generated/source_io.dart
+++ b/pkg/analyzer_experimental/lib/src/generated/source_io.dart
@@ -165,27 +165,27 @@
     if (!isPackageUri(uri)) {
       return null;
     }
-    String path2 = uri.path;
-    if (path2 == null) {
-      path2 = uri.path;
-      if (path2 == null) {
+    String path = uri.path;
+    if (path == null) {
+      path = uri.path;
+      if (path == null) {
         return null;
       }
     }
     String pkgName;
     String relPath;
-    int index = path2.indexOf('/');
+    int index = path.indexOf('/');
     if (index == -1) {
-      pkgName = path2;
+      pkgName = path;
       relPath = "";
     } else if (index == 0) {
       return null;
     } else {
-      pkgName = path2.substring(0, index);
-      relPath = path2.substring(index + 1);
+      pkgName = path.substring(0, index);
+      relPath = path.substring(index + 1);
     }
     for (JavaFile packagesDirectory in _packagesDirectories) {
-      JavaFile resolvedFile = new JavaFile.relative(packagesDirectory, path2);
+      JavaFile resolvedFile = new JavaFile.relative(packagesDirectory, path);
       if (resolvedFile.exists()) {
         return new FileBasedSource.con2(contentCache, getCanonicalFile(packagesDirectory, pkgName, relPath), UriKind.PACKAGE_URI);
       }
diff --git a/pkg/analyzer_experimental/lib/src/services/formatter.dart b/pkg/analyzer_experimental/lib/src/services/formatter.dart
new file mode 100644
index 0000000..51141dd
--- /dev/null
+++ b/pkg/analyzer_experimental/lib/src/services/formatter.dart
@@ -0,0 +1,10 @@
+// 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.
+
+library formatter;
+
+import 'package:analyzer_experimental/src/services/formatter_impl.dart';
+
+//export 'package:analyzer_experimental/src/services/formatter_impl.dart'
+//  show CodeFormatter;
\ No newline at end of file
diff --git a/pkg/analyzer_experimental/lib/src/services/formatter_impl.dart b/pkg/analyzer_experimental/lib/src/services/formatter_impl.dart
new file mode 100644
index 0000000..72288144
--- /dev/null
+++ b/pkg/analyzer_experimental/lib/src/services/formatter_impl.dart
@@ -0,0 +1,274 @@
+// 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.
+
+library formatter_impl;
+
+
+import 'dart:io';
+
+import 'package:analyzer_experimental/analyzer.dart';
+import 'package:analyzer_experimental/src/generated/parser.dart';
+import 'package:analyzer_experimental/src/generated/scanner.dart';
+import 'package:analyzer_experimental/src/generated/source.dart';
+
+
+/// OS line separator. --- TODO(pquitslund): may not be necessary
+const NEW_LINE = '\n' ; //Platform.pathSeparator;
+
+/// Formatter options.
+class FormatterOptions {
+
+  /// Create formatter options with defaults derived (where defined) from
+  /// the style guide: <http://www.dartlang.org/articles/style-guide/>.
+  const FormatterOptions({this.initialIndentationLevel: 0,
+                 this.indentPerLevel: 2,
+                 this.lineSeparator: NEW_LINE,
+                 this.pageWidth: 80,
+                 this.tabSize: 2});
+
+  final String lineSeparator;
+  final int initialIndentationLevel;
+  final int indentPerLevel;
+  final int tabSize;
+  final int pageWidth;
+}
+
+
+/// Thrown when an error occurs in formatting.
+class FormatterException implements Exception {
+
+  /// A message describing the error.
+  final message;
+
+  /// Creates a new FormatterException with an optional error [message].
+  const FormatterException([this.message = '']);
+
+  FormatterException.forError(List<AnalysisError> errors) :
+    // TODO(pquitslund): add descriptive message based on errors
+    message = 'an analysis error occured during format';
+
+  String toString() => 'FormatterException: $message';
+
+}
+
+/// Specifies the kind of code snippet to format.
+class CodeKind {
+
+  final index;
+
+  const CodeKind(this.index);
+
+  /// A compilation unit snippet.
+  static const COMPILATION_UNIT = const CodeKind(0);
+
+  /// A statement snippet.
+  static const STATEMENT = const CodeKind(1);
+
+}
+
+/// Dart source code formatter.
+abstract class CodeFormatter {
+
+  factory CodeFormatter([FormatterOptions options = const FormatterOptions()])
+                        => new CodeFormatterImpl(options);
+
+  /// Format the specified portion (from [offset] with [length]) of the given
+  /// [source] string, optionally providing an [indentationLevel].
+  String format(CodeKind kind, String source, {int offset, int end,
+    int indentationLevel:0});
+
+}
+
+class CodeFormatterImpl implements CodeFormatter, AnalysisErrorListener {
+
+  final FormatterOptions options;
+  final List<AnalysisError> errors = <AnalysisError>[];
+
+  CodeFormatterImpl(this.options);
+
+  String format(CodeKind kind, String source, {int offset, int end,
+      int indentationLevel:0}) {
+
+    var start = tokenize(source);
+    _checkForErrors();
+
+    var node = parse(kind, start);
+    _checkForErrors();
+
+    // To be continued...
+
+    return source;
+  }
+
+  ASTNode parse(CodeKind kind, Token start) {
+
+    var parser = new Parser(null, this);
+
+    switch (kind) {
+      case CodeKind.COMPILATION_UNIT:
+        return parser.parseCompilationUnit(start);
+      case CodeKind.STATEMENT:
+        return parser.parseStatement(start);
+    }
+
+    throw new FormatterException('Unsupported format kind: $kind');
+  }
+
+  _checkForErrors() {
+    if (errors.length > 0) {
+      throw new FormatterException.forError(errors);
+    }
+  }
+
+  void onError(AnalysisError error) {
+    errors.add(error);
+  }
+
+  Token tokenize(String source) {
+    var scanner = new StringScanner(null, source, this);
+    return scanner.tokenize();
+  }
+
+}
+
+/// Placeholder class to hold a reference to the Class object representing
+/// the Dart keyword void.
+class Void extends Object {
+
+}
+
+
+/// Records a sequence of edits to a source string that will cause the string
+/// to be formatted when applied.
+class EditRecorder {
+
+  final FormatterOptions options;
+
+  int column = 0;
+
+  int sourceIndex = 0;
+  String source = '';
+
+  Token currentToken;
+
+  int indentationLevel = 0;
+  int numberOfIndentations = 0;
+
+  bool isIndentNeeded = false;
+
+  EditRecorder(this.options);
+
+  /// Count the number of whitespace chars beginning at the current
+  /// [sourceIndex].
+  int countWhitespace() {
+    var count = 0;
+    for (var i = sourceIndex; i < source.length; ++i) {
+      if (isIndentChar(source[i])) {
+        ++count;
+      } else {
+        break;
+      }
+    }
+    return count;
+  }
+
+  /// Indent.
+  void indent() {
+    indentationLevel += options.indentPerLevel;
+    numberOfIndentations++;
+  }
+
+  /// Test if there is a newline at the given source [index].
+  bool isNewlineAt(int index) {
+    if (index < 0 || index + NEW_LINE.length > source.length) {
+      return false;
+    }
+    for (var i = 0; i < NEW_LINE.length; i++) {
+      if (source[index] != NEW_LINE[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+}
+
+const SPACE = ' ';
+
+bool isIndentChar(String ch) => ch == SPACE; // TODO(pquitslund) also check tab
+
+
+/// Manages stored [Edit]s.
+class EditStore {
+
+  /// The underlying sequence of [Edit]s.
+  final edits = <Edit>[];
+
+  /// Add the given [Edit] to the end of the edit sequence.
+  void add(Edit edit) {
+    edits.add(edit);
+  }
+
+  /// Add an [Edit] that describes a textual [replacement] of a text interval
+  /// starting at the given [offset] spanning the given [length].
+  void addEdit(int offset, int length, String replacement) {
+    add(new Edit(offset, length, replacement));
+  }
+
+  /// Get the index of the current edit (for use in caching location
+  /// information).
+  int getCurrentEditIndex() =>  edits.length - 1;
+
+  /// Get the last edit.
+  Edit getLastEdit() => edits.isEmpty ? null : edits.last;
+
+  /// Add an [Edit] that describes an insertion of text starting at the given
+  /// [offset].
+  void insert(int offset, String insertedString) {
+    addEdit(offset, 0, insertedString);
+  }
+
+  /// Reset cached state.
+  void reset() {
+    edits.clear();
+  }
+
+  String toString() => 'EditStore( ${edits.toString()} )';
+
+}
+
+
+
+/// Describes a text edit.
+class Edit {
+
+  /// The offset at which to apply the edit.
+  final int offset;
+
+  /// The length of the text interval to replace.
+  final int length;
+
+  /// The replacement text.
+  final String replacement;
+
+  /// Create an edit.
+  const Edit(this.offset, this.length, this.replacement);
+
+  /// Create an edit for the given [range].
+  Edit.forRange(SourceRange range, String replacement):
+    this(range.offset, range.length, replacement);
+
+  String toString() => '${offset < 0 ? '(' : 'X('} offset: ${offset} , '
+                         'length ${length}, replacement :> ${replacement} <:)';
+
+}
+
+/// An AST visitor that drives formatting heuristics.
+class FormattingEngine extends RecursiveASTVisitor<Void> {
+
+  final FormatterOptions options;
+
+  FormattingEngine(this.options);
+
+}
diff --git a/pkg/analyzer_experimental/test/generated/ast_test.dart b/pkg/analyzer_experimental/test/generated/ast_test.dart
index a458f11..a6903cd 100644
--- a/pkg/analyzer_experimental/test/generated/ast_test.dart
+++ b/pkg/analyzer_experimental/test/generated/ast_test.dart
@@ -408,9 +408,9 @@
    * @return the type name that was created
    */
   static TypeName typeName(ClassElement element2, List<TypeName> arguments) {
-    SimpleIdentifier name2 = identifier3(element2.name);
-    name2.element = element2;
-    TypeName typeName = typeName3(name2, arguments);
+    SimpleIdentifier name = identifier3(element2.name);
+    name.element = element2;
+    TypeName typeName = typeName3(name, arguments);
     typeName.type = element2.type;
     return typeName;
   }
@@ -446,8 +446,8 @@
 }
 class SimpleIdentifierTest extends ParserTestCase {
   void test_inDeclarationContext_argumentDefinition() {
-    SimpleIdentifier identifier2 = ASTFactory.argumentDefinitionTest("p").identifier;
-    JUnitTestCase.assertFalse(identifier2.inDeclarationContext());
+    SimpleIdentifier identifier = ASTFactory.argumentDefinitionTest("p").identifier;
+    JUnitTestCase.assertFalse(identifier.inDeclarationContext());
   }
   void test_inDeclarationContext_catch_exception() {
     SimpleIdentifier identifier = ASTFactory.catchClause("e", []).exceptionParameter;
@@ -470,8 +470,8 @@
     JUnitTestCase.assertTrue(identifier.inDeclarationContext());
   }
   void test_inDeclarationContext_fieldFormalParameter() {
-    SimpleIdentifier identifier2 = ASTFactory.fieldFormalParameter2("p").identifier;
-    JUnitTestCase.assertFalse(identifier2.inDeclarationContext());
+    SimpleIdentifier identifier = ASTFactory.fieldFormalParameter2("p").identifier;
+    JUnitTestCase.assertFalse(identifier.inDeclarationContext());
   }
   void test_inDeclarationContext_functionDeclaration() {
     SimpleIdentifier identifier = ASTFactory.functionDeclaration(null, null, "f", null).name;
@@ -497,8 +497,8 @@
     JUnitTestCase.assertTrue(identifier.inDeclarationContext());
   }
   void test_inDeclarationContext_simpleFormalParameter() {
-    SimpleIdentifier identifier2 = ASTFactory.simpleFormalParameter3("p").identifier;
-    JUnitTestCase.assertTrue(identifier2.inDeclarationContext());
+    SimpleIdentifier identifier = ASTFactory.simpleFormalParameter3("p").identifier;
+    JUnitTestCase.assertTrue(identifier.inDeclarationContext());
   }
   void test_inDeclarationContext_typeParameter_bound() {
     TypeName bound = ASTFactory.typeName4("A", []);
@@ -599,10 +599,10 @@
    */
   ASTNode topMostNode(SimpleIdentifier identifier) {
     ASTNode child = identifier;
-    ASTNode parent2 = identifier.parent;
-    while (parent2 != null) {
-      child = parent2;
-      parent2 = parent2.parent;
+    ASTNode parent = identifier.parent;
+    while (parent != null) {
+      child = parent;
+      parent = parent.parent;
     }
     return child;
   }
diff --git a/pkg/analyzer_experimental/test/generated/element_test.dart b/pkg/analyzer_experimental/test/generated/element_test.dart
index 4b440f0..ca36ed7 100644
--- a/pkg/analyzer_experimental/test/generated/element_test.dart
+++ b/pkg/analyzer_experimental/test/generated/element_test.dart
@@ -48,11 +48,11 @@
   void test_getComponents() {
     String encoding = "a;b;c";
     ElementLocationImpl location = new ElementLocationImpl.con2(encoding);
-    List<String> components2 = location.components;
-    EngineTestCase.assertLength(3, components2);
-    JUnitTestCase.assertEquals("a", components2[0]);
-    JUnitTestCase.assertEquals("b", components2[1]);
-    JUnitTestCase.assertEquals("c", components2[2]);
+    List<String> components = location.components;
+    EngineTestCase.assertLength(3, components);
+    JUnitTestCase.assertEquals("a", components[0]);
+    JUnitTestCase.assertEquals("b", components[1]);
+    JUnitTestCase.assertEquals("c", components[2]);
   }
   void test_getEncoding() {
     String encoding = "a;b;c;;d";
@@ -111,27 +111,27 @@
   }
   void test_getPrefixes() {
     AnalysisContext context = createAnalysisContext();
-    LibraryElementImpl library2 = ElementFactory.library(context, "l1");
+    LibraryElementImpl library = ElementFactory.library(context, "l1");
     PrefixElement prefixA = new PrefixElementImpl(ASTFactory.identifier3("a"));
     PrefixElement prefixB = new PrefixElementImpl(ASTFactory.identifier3("b"));
     List<ImportElementImpl> imports = [ElementFactory.importFor(ElementFactory.library(context, "l2"), null, []), ElementFactory.importFor(ElementFactory.library(context, "l3"), null, []), ElementFactory.importFor(ElementFactory.library(context, "l4"), prefixA, []), ElementFactory.importFor(ElementFactory.library(context, "l5"), prefixA, []), ElementFactory.importFor(ElementFactory.library(context, "l6"), prefixB, [])];
-    library2.imports = imports;
-    List<PrefixElement> prefixes2 = library2.prefixes;
-    EngineTestCase.assertLength(2, prefixes2);
-    if (identical(prefixA, prefixes2[0])) {
-      JUnitTestCase.assertSame(prefixB, prefixes2[1]);
+    library.imports = imports;
+    List<PrefixElement> prefixes = library.prefixes;
+    EngineTestCase.assertLength(2, prefixes);
+    if (identical(prefixA, prefixes[0])) {
+      JUnitTestCase.assertSame(prefixB, prefixes[1]);
     } else {
-      JUnitTestCase.assertSame(prefixB, prefixes2[0]);
-      JUnitTestCase.assertSame(prefixA, prefixes2[1]);
+      JUnitTestCase.assertSame(prefixB, prefixes[0]);
+      JUnitTestCase.assertSame(prefixA, prefixes[1]);
     }
   }
   void test_isUpToDate() {
     AnalysisContext context = createAnalysisContext();
     context.sourceFactory = new SourceFactory.con2([]);
-    LibraryElement library2 = ElementFactory.library(context, "foo");
-    context.sourceFactory.setContents(library2.definingCompilationUnit.source, "sdfsdff");
-    JUnitTestCase.assertFalse(library2.isUpToDate2(0));
-    JUnitTestCase.assertTrue(library2.isUpToDate2(JavaSystem.currentTimeMillis() + 1000));
+    LibraryElement library = ElementFactory.library(context, "foo");
+    context.sourceFactory.setContents(library.definingCompilationUnit.source, "sdfsdff");
+    JUnitTestCase.assertFalse(library.isUpToDate2(0));
+    JUnitTestCase.assertTrue(library.isUpToDate2(JavaSystem.currentTimeMillis() + 1000));
   }
   void test_setImports() {
     AnalysisContext context = createAnalysisContext();
@@ -358,13 +358,13 @@
     InterfaceType typeB = classB.type;
     ClassElementImpl classC = ElementFactory.classElement2("C", []);
     classC.interfaces = <InterfaceType> [typeA, typeB];
-    List<InterfaceType> interfaces2 = classC.type.interfaces;
-    EngineTestCase.assertLength(2, interfaces2);
-    if (identical(interfaces2[0], typeA)) {
-      JUnitTestCase.assertSame(typeB, interfaces2[1]);
+    List<InterfaceType> interfaces = classC.type.interfaces;
+    EngineTestCase.assertLength(2, interfaces);
+    if (identical(interfaces[0], typeA)) {
+      JUnitTestCase.assertSame(typeB, interfaces[1]);
     } else {
-      JUnitTestCase.assertSame(typeB, interfaces2[0]);
-      JUnitTestCase.assertSame(typeA, interfaces2[1]);
+      JUnitTestCase.assertSame(typeB, interfaces[0]);
+      JUnitTestCase.assertSame(typeA, interfaces[1]);
     }
   }
   void test_getInterfaces_parameterized() {
@@ -377,9 +377,9 @@
     InterfaceType typeI = ElementFactory.classElement2("I", []).type;
     InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
     typeBI.typeArguments = <Type2> [typeI];
-    List<InterfaceType> interfaces2 = typeBI.interfaces;
-    EngineTestCase.assertLength(1, interfaces2);
-    InterfaceType result = interfaces2[0];
+    List<InterfaceType> interfaces = typeBI.interfaces;
+    EngineTestCase.assertLength(1, interfaces);
+    InterfaceType result = interfaces[0];
     JUnitTestCase.assertSame(classA, result.element);
     JUnitTestCase.assertSame(typeI, result.typeArguments[0]);
   }
@@ -552,17 +552,17 @@
     JUnitTestCase.assertEquals(_typeProvider.objectType, string.getLeastUpperBound(num));
   }
   void test_getLeastUpperBound_typeParameters_different() {
-    InterfaceType listType2 = _typeProvider.listType;
-    InterfaceType intType2 = _typeProvider.intType;
-    InterfaceType doubleType2 = _typeProvider.doubleType;
-    InterfaceType listOfIntType = listType2.substitute5(<Type2> [intType2]);
-    InterfaceType listOfDoubleType = listType2.substitute5(<Type2> [doubleType2]);
-    JUnitTestCase.assertEquals(listType2.substitute5(<Type2> [_typeProvider.dynamicType]), listOfIntType.getLeastUpperBound(listOfDoubleType));
+    InterfaceType listType = _typeProvider.listType;
+    InterfaceType intType = _typeProvider.intType;
+    InterfaceType doubleType = _typeProvider.doubleType;
+    InterfaceType listOfIntType = listType.substitute5(<Type2> [intType]);
+    InterfaceType listOfDoubleType = listType.substitute5(<Type2> [doubleType]);
+    JUnitTestCase.assertEquals(listType.substitute5(<Type2> [_typeProvider.dynamicType]), listOfIntType.getLeastUpperBound(listOfDoubleType));
   }
   void test_getLeastUpperBound_typeParameters_same() {
-    InterfaceType listType2 = _typeProvider.listType;
-    InterfaceType intType2 = _typeProvider.intType;
-    InterfaceType listOfIntType = listType2.substitute5(<Type2> [intType2]);
+    InterfaceType listType = _typeProvider.listType;
+    InterfaceType intType = _typeProvider.intType;
+    InterfaceType listOfIntType = listType.substitute5(<Type2> [intType]);
     JUnitTestCase.assertEquals(listOfIntType, listOfIntType.getLeastUpperBound(listOfIntType));
   }
   void test_getMethod_implemented() {
@@ -673,13 +673,13 @@
     InterfaceType typeI = ElementFactory.classElement2("I", []).type;
     InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
     typeBI.typeArguments = <Type2> [typeI];
-    InterfaceType superclass2 = typeBI.superclass;
-    JUnitTestCase.assertSame(classA, superclass2.element);
-    JUnitTestCase.assertSame(typeI, superclass2.typeArguments[0]);
+    InterfaceType superclass = typeBI.superclass;
+    JUnitTestCase.assertSame(classA, superclass.element);
+    JUnitTestCase.assertSame(typeI, superclass.typeArguments[0]);
   }
   void test_getTypeArguments_empty() {
-    InterfaceType type2 = ElementFactory.classElement2("A", []).type;
-    EngineTestCase.assertLength(0, type2.typeArguments);
+    InterfaceType type = ElementFactory.classElement2("A", []).type;
+    EngineTestCase.assertLength(0, type.typeArguments);
   }
   void test_isDirectSupertypeOf_extends() {
     ClassElement classA = ElementFactory.classElement2("A", []);
@@ -713,8 +713,8 @@
     JUnitTestCase.assertTrue(typeA.isDirectSupertypeOf(typeB));
   }
   void test_isMoreSpecificThan_bottom() {
-    Type2 type2 = ElementFactory.classElement2("A", []).type;
-    JUnitTestCase.assertTrue(BottomTypeImpl.instance.isMoreSpecificThan(type2));
+    Type2 type = ElementFactory.classElement2("A", []).type;
+    JUnitTestCase.assertTrue(BottomTypeImpl.instance.isMoreSpecificThan(type));
   }
   void test_isMoreSpecificThan_covariance() {
     ClassElement classA = ElementFactory.classElement2("A", ["E"]);
@@ -736,12 +736,12 @@
     JUnitTestCase.assertFalse(typeA.isMoreSpecificThan(typeB));
   }
   void test_isMoreSpecificThan_dynamic() {
-    InterfaceType type2 = ElementFactory.classElement2("A", []).type;
-    JUnitTestCase.assertTrue(type2.isMoreSpecificThan(DynamicTypeImpl.instance));
+    InterfaceType type = ElementFactory.classElement2("A", []).type;
+    JUnitTestCase.assertTrue(type.isMoreSpecificThan(DynamicTypeImpl.instance));
   }
   void test_isMoreSpecificThan_self() {
-    InterfaceType type2 = ElementFactory.classElement2("A", []).type;
-    JUnitTestCase.assertTrue(type2.isMoreSpecificThan(type2));
+    InterfaceType type = ElementFactory.classElement2("A", []).type;
+    JUnitTestCase.assertTrue(type.isMoreSpecificThan(type));
   }
   void test_isMoreSpecificThan_transitive_interface() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -943,10 +943,10 @@
     PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, false, null);
     classA.accessors = <PropertyAccessorElement> [getterG];
     InterfaceType typeA = classA.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertSame(getterG, typeA.lookUpGetter(getterName, library2));
+    JUnitTestCase.assertSame(getterG, typeA.lookUpGetter(getterName, library));
   }
   void test_lookUpGetter_inherited() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -955,28 +955,28 @@
     classA.accessors = <PropertyAccessorElement> [getterG];
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
     InterfaceType typeB = classB.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertSame(getterG, typeB.lookUpGetter(getterName, library2));
+    JUnitTestCase.assertSame(getterG, typeB.lookUpGetter(getterName, library));
   }
   void test_lookUpGetter_recursive() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     InterfaceType typeA = classA.type;
     ClassElementImpl classB = ElementFactory.classElement("B", typeA, []);
     classA.supertype = classB.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertNull(typeA.lookUpGetter("g", library2));
+    JUnitTestCase.assertNull(typeA.lookUpGetter("g", library));
   }
   void test_lookUpGetter_unimplemented() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     InterfaceType typeA = classA.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertNull(typeA.lookUpGetter("g", library2));
+    JUnitTestCase.assertNull(typeA.lookUpGetter("g", library));
   }
   void test_lookUpMethod_implemented() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -984,10 +984,10 @@
     MethodElementImpl methodM = ElementFactory.methodElement(methodName, null, []);
     classA.methods = <MethodElement> [methodM];
     InterfaceType typeA = classA.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertSame(methodM, typeA.lookUpMethod(methodName, library2));
+    JUnitTestCase.assertSame(methodM, typeA.lookUpMethod(methodName, library));
   }
   void test_lookUpMethod_inherited() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -996,10 +996,10 @@
     classA.methods = <MethodElement> [methodM];
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
     InterfaceType typeB = classB.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertSame(methodM, typeB.lookUpMethod(methodName, library2));
+    JUnitTestCase.assertSame(methodM, typeB.lookUpMethod(methodName, library));
   }
   void test_lookUpMethod_parameterized() {
     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
@@ -1012,13 +1012,13 @@
     InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
     typeAF.typeArguments = <Type2> [typeB.typeArguments[0]];
     classB.supertype = typeAF;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
     InterfaceType typeI = ElementFactory.classElement2("I", []).type;
     InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
     typeBI.typeArguments = <Type2> [typeI];
-    MethodElement method = typeBI.lookUpMethod(methodName, library2);
+    MethodElement method = typeBI.lookUpMethod(methodName, library);
     JUnitTestCase.assertNotNull(method);
     FunctionType methodType = method.type;
     JUnitTestCase.assertSame(typeI, methodType.returnType);
@@ -1031,18 +1031,18 @@
     InterfaceType typeA = classA.type;
     ClassElementImpl classB = ElementFactory.classElement("B", typeA, []);
     classA.supertype = classB.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertNull(typeA.lookUpMethod("m", library2));
+    JUnitTestCase.assertNull(typeA.lookUpMethod("m", library));
   }
   void test_lookUpMethod_unimplemented() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     InterfaceType typeA = classA.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertNull(typeA.lookUpMethod("m", library2));
+    JUnitTestCase.assertNull(typeA.lookUpMethod("m", library));
   }
   void test_lookUpSetter_implemented() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -1050,10 +1050,10 @@
     PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, false, null);
     classA.accessors = <PropertyAccessorElement> [setterS];
     InterfaceType typeA = classA.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertSame(setterS, typeA.lookUpSetter(setterName, library2));
+    JUnitTestCase.assertSame(setterS, typeA.lookUpSetter(setterName, library));
   }
   void test_lookUpSetter_inherited() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -1062,34 +1062,34 @@
     classA.accessors = <PropertyAccessorElement> [setterS];
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
     InterfaceType typeB = classB.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertSame(setterS, typeB.lookUpSetter(setterName, library2));
+    JUnitTestCase.assertSame(setterS, typeB.lookUpSetter(setterName, library));
   }
   void test_lookUpSetter_recursive() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     InterfaceType typeA = classA.type;
     ClassElementImpl classB = ElementFactory.classElement("B", typeA, []);
     classA.supertype = classB.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertNull(typeA.lookUpSetter("s", library2));
+    JUnitTestCase.assertNull(typeA.lookUpSetter("s", library));
   }
   void test_lookUpSetter_unimplemented() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     InterfaceType typeA = classA.type;
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
-    CompilationUnitElement unit = library2.definingCompilationUnit;
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
+    CompilationUnitElement unit = library.definingCompilationUnit;
     ((unit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertNull(typeA.lookUpSetter("s", library2));
+    JUnitTestCase.assertNull(typeA.lookUpSetter("s", library));
   }
   void test_setTypeArguments() {
-    InterfaceTypeImpl type2 = ElementFactory.classElement2("A", []).type as InterfaceTypeImpl;
+    InterfaceTypeImpl type = ElementFactory.classElement2("A", []).type as InterfaceTypeImpl;
     List<Type2> typeArguments = <Type2> [ElementFactory.classElement2("B", []).type, ElementFactory.classElement2("C", []).type];
-    type2.typeArguments = typeArguments;
-    JUnitTestCase.assertEquals(typeArguments, type2.typeArguments);
+    type.typeArguments = typeArguments;
+    JUnitTestCase.assertEquals(typeArguments, type.typeArguments);
   }
   void test_substitute_equal() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
@@ -1567,11 +1567,11 @@
   }
   static ClassElementImpl classElement2(String typeName, List<String> parameterNames) => classElement(typeName, object.type, parameterNames);
   static ConstructorElementImpl constructorElement(ClassElement clazz, String name) {
-    Type2 type2 = clazz.type;
+    Type2 type = clazz.type;
     ConstructorElementImpl constructor = new ConstructorElementImpl(name == null ? null : ASTFactory.identifier3(name));
     FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor);
-    constructorType.normalParameterTypes = <Type2> [type2];
-    constructorType.returnType = type2;
+    constructorType.normalParameterTypes = <Type2> [type];
+    constructorType.returnType = type;
     constructor.type = constructorType;
     return constructor;
   }
@@ -1911,103 +1911,103 @@
     JUnitTestCase.assertTrue(classB.hasNonFinalField());
   }
   void test_lookUpGetter_declared() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     String getterName = "g";
     PropertyAccessorElement getter = ElementFactory.getterElement(getterName, false, null);
     classA.accessors = <PropertyAccessorElement> [getter];
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertSame(getter, classA.lookUpGetter(getterName, library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
+    JUnitTestCase.assertSame(getter, classA.lookUpGetter(getterName, library));
   }
   void test_lookUpGetter_inherited() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     String getterName = "g";
     PropertyAccessorElement getter = ElementFactory.getterElement(getterName, false, null);
     classA.accessors = <PropertyAccessorElement> [getter];
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertSame(getter, classB.lookUpGetter(getterName, library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
+    JUnitTestCase.assertSame(getter, classB.lookUpGetter(getterName, library));
   }
   void test_lookUpGetter_undeclared() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertNull(classA.lookUpGetter("g", library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
+    JUnitTestCase.assertNull(classA.lookUpGetter("g", library));
   }
   void test_lookUpGetter_undeclared_recursive() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
     classA.supertype = classB.type;
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertNull(classA.lookUpGetter("g", library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
+    JUnitTestCase.assertNull(classA.lookUpGetter("g", library));
   }
   void test_lookUpMethod_declared() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     String methodName = "m";
     MethodElement method = ElementFactory.methodElement(methodName, null, []);
     classA.methods = <MethodElement> [method];
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertSame(method, classA.lookUpMethod(methodName, library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
+    JUnitTestCase.assertSame(method, classA.lookUpMethod(methodName, library));
   }
   void test_lookUpMethod_inherited() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     String methodName = "m";
     MethodElement method = ElementFactory.methodElement(methodName, null, []);
     classA.methods = <MethodElement> [method];
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertSame(method, classB.lookUpMethod(methodName, library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
+    JUnitTestCase.assertSame(method, classB.lookUpMethod(methodName, library));
   }
   void test_lookUpMethod_undeclared() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertNull(classA.lookUpMethod("m", library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
+    JUnitTestCase.assertNull(classA.lookUpMethod("m", library));
   }
   void test_lookUpMethod_undeclared_recursive() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
     classA.supertype = classB.type;
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertNull(classA.lookUpMethod("m", library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
+    JUnitTestCase.assertNull(classA.lookUpMethod("m", library));
   }
   void test_lookUpSetter_declared() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     String setterName = "s";
     PropertyAccessorElement setter = ElementFactory.setterElement(setterName, false, null);
     classA.accessors = <PropertyAccessorElement> [setter];
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertSame(setter, classA.lookUpSetter(setterName, library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
+    JUnitTestCase.assertSame(setter, classA.lookUpSetter(setterName, library));
   }
   void test_lookUpSetter_inherited() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     String setterName = "s";
     PropertyAccessorElement setter = ElementFactory.setterElement(setterName, false, null);
     classA.accessors = <PropertyAccessorElement> [setter];
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertSame(setter, classB.lookUpSetter(setterName, library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
+    JUnitTestCase.assertSame(setter, classB.lookUpSetter(setterName, library));
   }
   void test_lookUpSetter_undeclared() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
-    JUnitTestCase.assertNull(classA.lookUpSetter("s", library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA];
+    JUnitTestCase.assertNull(classA.lookUpSetter("s", library));
   }
   void test_lookUpSetter_undeclared_recursive() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []);
     classA.supertype = classB.type;
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
-    JUnitTestCase.assertNull(classA.lookUpSetter("s", library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classA, classB];
+    JUnitTestCase.assertNull(classA.lookUpSetter("s", library));
   }
   static dartSuite() {
     _ut.group('ClassElementImplTest', () {
@@ -2104,9 +2104,9 @@
 }
 class ElementImplTest extends EngineTestCase {
   void test_equals() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElementImpl classElement = ElementFactory.classElement2("C", []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classElement];
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classElement];
     FieldElement field = ElementFactory.fieldElement("next", false, false, false, classElement.type);
     classElement.fields = <FieldElement> [field];
     JUnitTestCase.assertTrue(field == field);
@@ -2123,10 +2123,10 @@
     JUnitTestCase.assertFalse(classElement.isAccessibleIn(library2));
   }
   void test_isAccessibleIn_private_sameLibrary() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElement classElement = ElementFactory.classElement2("_C", []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classElement];
-    JUnitTestCase.assertTrue(classElement.isAccessibleIn(library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classElement];
+    JUnitTestCase.assertTrue(classElement.isAccessibleIn(library));
   }
   void test_isAccessibleIn_public_differentLibrary() {
     AnalysisContextImpl context = createAnalysisContext();
@@ -2137,10 +2137,10 @@
     JUnitTestCase.assertTrue(classElement.isAccessibleIn(library2));
   }
   void test_isAccessibleIn_public_sameLibrary() {
-    LibraryElementImpl library2 = ElementFactory.library(createAnalysisContext(), "lib");
+    LibraryElementImpl library = ElementFactory.library(createAnalysisContext(), "lib");
     ClassElement classElement = ElementFactory.classElement2("C", []);
-    ((library2.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classElement];
-    JUnitTestCase.assertTrue(classElement.isAccessibleIn(library2));
+    ((library.definingCompilationUnit as CompilationUnitElementImpl)).types = <ClassElement> [classElement];
+    JUnitTestCase.assertTrue(classElement.isAccessibleIn(library));
   }
   static dartSuite() {
     _ut.group('ElementImplTest', () {
@@ -2188,8 +2188,8 @@
   }
   void test_getReturnType() {
     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(ASTFactory.identifier3("f")));
-    Type2 returnType2 = type.returnType;
-    JUnitTestCase.assertEquals(VoidTypeImpl.instance, returnType2);
+    Type2 returnType = type.returnType;
+    JUnitTestCase.assertEquals(VoidTypeImpl.instance, returnType);
   }
   void test_getTypeArguments() {
     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(ASTFactory.identifier3("f")));
@@ -2422,8 +2422,8 @@
     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(ASTFactory.identifier3("f")));
     Type2 expectedType = new InterfaceTypeImpl.con1(new ClassElementImpl(ASTFactory.identifier3("C")));
     type.returnType = expectedType;
-    Type2 returnType2 = type.returnType;
-    JUnitTestCase.assertEquals(expectedType, returnType2);
+    Type2 returnType = type.returnType;
+    JUnitTestCase.assertEquals(expectedType, returnType);
   }
   void test_setTypeArguments() {
     FunctionTypeImpl type = new FunctionTypeImpl.con1(new FunctionElementImpl.con1(ASTFactory.identifier3("f")));
diff --git a/pkg/analyzer_experimental/test/generated/parser_test.dart b/pkg/analyzer_experimental/test/generated/parser_test.dart
index 616a497..b420160 100644
--- a/pkg/analyzer_experimental/test/generated/parser_test.dart
+++ b/pkg/analyzer_experimental/test/generated/parser_test.dart
@@ -25,10 +25,10 @@
 class SimpleParserTest extends ParserTestCase {
   void fail_parseCommentReference_this() {
     CommentReference reference = ParserTestCase.parse("parseCommentReference", <Object> ["this", 5], "");
-    SimpleIdentifier identifier2 = EngineTestCase.assertInstanceOf(SimpleIdentifier, reference.identifier);
-    JUnitTestCase.assertNotNull(identifier2.token);
-    JUnitTestCase.assertEquals("a", identifier2.name);
-    JUnitTestCase.assertEquals(5, identifier2.offset);
+    SimpleIdentifier identifier = EngineTestCase.assertInstanceOf(SimpleIdentifier, reference.identifier);
+    JUnitTestCase.assertNotNull(identifier.token);
+    JUnitTestCase.assertEquals("a", identifier.name);
+    JUnitTestCase.assertEquals(5, identifier.offset);
   }
   void test_computeStringValue_emptyInterpolationPrefix() {
     JUnitTestCase.assertEquals("", computeStringValue("'''"));
@@ -264,10 +264,10 @@
   }
   void test_parseArgument_named() {
     NamedExpression expression = ParserTestCase.parse5("parseArgument", "n: x", []);
-    Label name2 = expression.name;
-    JUnitTestCase.assertNotNull(name2);
-    JUnitTestCase.assertNotNull(name2.label);
-    JUnitTestCase.assertNotNull(name2.colon);
+    Label name = expression.name;
+    JUnitTestCase.assertNotNull(name);
+    JUnitTestCase.assertNotNull(name.label);
+    JUnitTestCase.assertNotNull(name.colon);
     JUnitTestCase.assertNotNull(expression.expression);
   }
   void test_parseArgument_unnamed() {
@@ -282,23 +282,23 @@
   }
   void test_parseArgumentList_empty() {
     ArgumentList argumentList = ParserTestCase.parse5("parseArgumentList", "()", []);
-    NodeList<Expression> arguments2 = argumentList.arguments;
-    EngineTestCase.assertSize(0, arguments2);
+    NodeList<Expression> arguments = argumentList.arguments;
+    EngineTestCase.assertSize(0, arguments);
   }
   void test_parseArgumentList_mixed() {
     ArgumentList argumentList = ParserTestCase.parse5("parseArgumentList", "(w, x, y: y, z: z)", []);
-    NodeList<Expression> arguments2 = argumentList.arguments;
-    EngineTestCase.assertSize(4, arguments2);
+    NodeList<Expression> arguments = argumentList.arguments;
+    EngineTestCase.assertSize(4, arguments);
   }
   void test_parseArgumentList_noNamed() {
     ArgumentList argumentList = ParserTestCase.parse5("parseArgumentList", "(x, y, z)", []);
-    NodeList<Expression> arguments2 = argumentList.arguments;
-    EngineTestCase.assertSize(3, arguments2);
+    NodeList<Expression> arguments = argumentList.arguments;
+    EngineTestCase.assertSize(3, arguments);
   }
   void test_parseArgumentList_onlyNamed() {
     ArgumentList argumentList = ParserTestCase.parse5("parseArgumentList", "(x: x, y: y)", []);
-    NodeList<Expression> arguments2 = argumentList.arguments;
-    EngineTestCase.assertSize(2, arguments2);
+    NodeList<Expression> arguments = argumentList.arguments;
+    EngineTestCase.assertSize(2, arguments);
   }
   void test_parseAssertStatement() {
     AssertStatement statement = ParserTestCase.parse5("parseAssertStatement", "assert (x);", []);
@@ -312,9 +312,9 @@
     PropertyAccess propertyAccess = ParserTestCase.parse("parseAssignableExpression", <Object> [false], "(x)(y).z");
     FunctionExpressionInvocation invocation = propertyAccess.target as FunctionExpressionInvocation;
     JUnitTestCase.assertNotNull(invocation.function);
-    ArgumentList argumentList2 = invocation.argumentList;
-    JUnitTestCase.assertNotNull(argumentList2);
-    EngineTestCase.assertSize(1, argumentList2.arguments);
+    ArgumentList argumentList = invocation.argumentList;
+    JUnitTestCase.assertNotNull(argumentList);
+    EngineTestCase.assertSize(1, argumentList.arguments);
     JUnitTestCase.assertNotNull(propertyAccess.operator);
     JUnitTestCase.assertNotNull(propertyAccess.propertyName);
   }
@@ -339,9 +339,9 @@
     PropertyAccess propertyAccess = ParserTestCase.parse("parseAssignableExpression", <Object> [false], "x(y).z");
     MethodInvocation invocation = propertyAccess.target as MethodInvocation;
     JUnitTestCase.assertEquals("x", invocation.methodName.name);
-    ArgumentList argumentList2 = invocation.argumentList;
-    JUnitTestCase.assertNotNull(argumentList2);
-    EngineTestCase.assertSize(1, argumentList2.arguments);
+    ArgumentList argumentList = invocation.argumentList;
+    JUnitTestCase.assertNotNull(argumentList);
+    EngineTestCase.assertSize(1, argumentList.arguments);
     JUnitTestCase.assertNotNull(propertyAccess.operator);
     JUnitTestCase.assertNotNull(propertyAccess.propertyName);
   }
@@ -656,9 +656,9 @@
     JUnitTestCase.assertNull(field.keyword);
     VariableDeclarationList list = field.fields;
     JUnitTestCase.assertNotNull(list);
-    NodeList<VariableDeclaration> variables2 = list.variables;
-    EngineTestCase.assertSize(1, variables2);
-    VariableDeclaration variable = variables2[0];
+    NodeList<VariableDeclaration> variables = list.variables;
+    EngineTestCase.assertSize(1, variables);
+    VariableDeclaration variable = variables[0];
     JUnitTestCase.assertNotNull(variable.name);
   }
   void test_parseClassMember_field_namedGet() {
@@ -668,9 +668,9 @@
     JUnitTestCase.assertNull(field.keyword);
     VariableDeclarationList list = field.fields;
     JUnitTestCase.assertNotNull(list);
-    NodeList<VariableDeclaration> variables2 = list.variables;
-    EngineTestCase.assertSize(1, variables2);
-    VariableDeclaration variable = variables2[0];
+    NodeList<VariableDeclaration> variables = list.variables;
+    EngineTestCase.assertSize(1, variables);
+    VariableDeclaration variable = variables[0];
     JUnitTestCase.assertNotNull(variable.name);
   }
   void test_parseClassMember_field_namedOperator() {
@@ -680,9 +680,9 @@
     JUnitTestCase.assertNull(field.keyword);
     VariableDeclarationList list = field.fields;
     JUnitTestCase.assertNotNull(list);
-    NodeList<VariableDeclaration> variables2 = list.variables;
-    EngineTestCase.assertSize(1, variables2);
-    VariableDeclaration variable = variables2[0];
+    NodeList<VariableDeclaration> variables = list.variables;
+    EngineTestCase.assertSize(1, variables);
+    VariableDeclaration variable = variables[0];
     JUnitTestCase.assertNotNull(variable.name);
   }
   void test_parseClassMember_field_namedSet() {
@@ -692,9 +692,9 @@
     JUnitTestCase.assertNull(field.keyword);
     VariableDeclarationList list = field.fields;
     JUnitTestCase.assertNotNull(list);
-    NodeList<VariableDeclaration> variables2 = list.variables;
-    EngineTestCase.assertSize(1, variables2);
-    VariableDeclaration variable = variables2[0];
+    NodeList<VariableDeclaration> variables = list.variables;
+    EngineTestCase.assertSize(1, variables);
+    VariableDeclaration variable = variables[0];
     JUnitTestCase.assertNotNull(variable.name);
   }
   void test_parseClassMember_getter_void() {
@@ -905,8 +905,8 @@
     JUnitTestCase.assertNotNull(constructor.body);
   }
   void test_parseClassTypeAlias() {
-    Token token2 = TokenFactory.token(Keyword.TYPEDEF);
-    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token2], "A = B;");
+    Token token = TokenFactory.token(Keyword.TYPEDEF);
+    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token], "A = B;");
     JUnitTestCase.assertNotNull(classTypeAlias.keyword);
     JUnitTestCase.assertEquals("A", classTypeAlias.name.name);
     JUnitTestCase.assertNotNull(classTypeAlias.equals);
@@ -917,8 +917,8 @@
     JUnitTestCase.assertNotNull(classTypeAlias.semicolon);
   }
   void test_parseClassTypeAlias_abstract() {
-    Token token2 = TokenFactory.token(Keyword.TYPEDEF);
-    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token2], "A = abstract B;");
+    Token token = TokenFactory.token(Keyword.TYPEDEF);
+    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token], "A = abstract B;");
     JUnitTestCase.assertNotNull(classTypeAlias.keyword);
     JUnitTestCase.assertEquals("A", classTypeAlias.name.name);
     JUnitTestCase.assertNotNull(classTypeAlias.equals);
@@ -929,8 +929,8 @@
     JUnitTestCase.assertNotNull(classTypeAlias.semicolon);
   }
   void test_parseClassTypeAlias_implements() {
-    Token token2 = TokenFactory.token(Keyword.TYPEDEF);
-    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token2], "A = B implements C;");
+    Token token = TokenFactory.token(Keyword.TYPEDEF);
+    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token], "A = B implements C;");
     JUnitTestCase.assertNotNull(classTypeAlias.keyword);
     JUnitTestCase.assertEquals("A", classTypeAlias.name.name);
     JUnitTestCase.assertNotNull(classTypeAlias.equals);
@@ -941,8 +941,8 @@
     JUnitTestCase.assertNotNull(classTypeAlias.semicolon);
   }
   void test_parseClassTypeAlias_with() {
-    Token token2 = TokenFactory.token(Keyword.TYPEDEF);
-    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token2], "A = B with C;");
+    Token token = TokenFactory.token(Keyword.TYPEDEF);
+    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token], "A = B with C;");
     JUnitTestCase.assertNotNull(classTypeAlias.keyword);
     JUnitTestCase.assertEquals("A", classTypeAlias.name.name);
     JUnitTestCase.assertNotNull(classTypeAlias.equals);
@@ -953,8 +953,8 @@
     JUnitTestCase.assertNotNull(classTypeAlias.semicolon);
   }
   void test_parseClassTypeAlias_with_implements() {
-    Token token2 = TokenFactory.token(Keyword.TYPEDEF);
-    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token2], "A = B with C implements D;");
+    Token token = TokenFactory.token(Keyword.TYPEDEF);
+    ClassTypeAlias classTypeAlias = ParserTestCase.parse("parseClassTypeAlias", <Object> [emptyCommentAndMetadata(), token], "A = B with C implements D;");
     JUnitTestCase.assertNotNull(classTypeAlias.keyword);
     JUnitTestCase.assertEquals("A", classTypeAlias.name.name);
     JUnitTestCase.assertNotNull(classTypeAlias.equals);
@@ -1049,42 +1049,42 @@
   void test_parseCommentReference_new_prefixed() {
     CommentReference reference = ParserTestCase.parse("parseCommentReference", <Object> ["new a.b", 7], "");
     PrefixedIdentifier prefixedIdentifier = EngineTestCase.assertInstanceOf(PrefixedIdentifier, reference.identifier);
-    SimpleIdentifier prefix2 = prefixedIdentifier.prefix;
-    JUnitTestCase.assertNotNull(prefix2.token);
-    JUnitTestCase.assertEquals("a", prefix2.name);
-    JUnitTestCase.assertEquals(11, prefix2.offset);
+    SimpleIdentifier prefix = prefixedIdentifier.prefix;
+    JUnitTestCase.assertNotNull(prefix.token);
+    JUnitTestCase.assertEquals("a", prefix.name);
+    JUnitTestCase.assertEquals(11, prefix.offset);
     JUnitTestCase.assertNotNull(prefixedIdentifier.period);
-    SimpleIdentifier identifier2 = prefixedIdentifier.identifier;
-    JUnitTestCase.assertNotNull(identifier2.token);
-    JUnitTestCase.assertEquals("b", identifier2.name);
-    JUnitTestCase.assertEquals(13, identifier2.offset);
+    SimpleIdentifier identifier = prefixedIdentifier.identifier;
+    JUnitTestCase.assertNotNull(identifier.token);
+    JUnitTestCase.assertEquals("b", identifier.name);
+    JUnitTestCase.assertEquals(13, identifier.offset);
   }
   void test_parseCommentReference_new_simple() {
     CommentReference reference = ParserTestCase.parse("parseCommentReference", <Object> ["new a", 5], "");
-    SimpleIdentifier identifier2 = EngineTestCase.assertInstanceOf(SimpleIdentifier, reference.identifier);
-    JUnitTestCase.assertNotNull(identifier2.token);
-    JUnitTestCase.assertEquals("a", identifier2.name);
-    JUnitTestCase.assertEquals(9, identifier2.offset);
+    SimpleIdentifier identifier = EngineTestCase.assertInstanceOf(SimpleIdentifier, reference.identifier);
+    JUnitTestCase.assertNotNull(identifier.token);
+    JUnitTestCase.assertEquals("a", identifier.name);
+    JUnitTestCase.assertEquals(9, identifier.offset);
   }
   void test_parseCommentReference_prefixed() {
     CommentReference reference = ParserTestCase.parse("parseCommentReference", <Object> ["a.b", 7], "");
     PrefixedIdentifier prefixedIdentifier = EngineTestCase.assertInstanceOf(PrefixedIdentifier, reference.identifier);
-    SimpleIdentifier prefix2 = prefixedIdentifier.prefix;
-    JUnitTestCase.assertNotNull(prefix2.token);
-    JUnitTestCase.assertEquals("a", prefix2.name);
-    JUnitTestCase.assertEquals(7, prefix2.offset);
+    SimpleIdentifier prefix = prefixedIdentifier.prefix;
+    JUnitTestCase.assertNotNull(prefix.token);
+    JUnitTestCase.assertEquals("a", prefix.name);
+    JUnitTestCase.assertEquals(7, prefix.offset);
     JUnitTestCase.assertNotNull(prefixedIdentifier.period);
-    SimpleIdentifier identifier2 = prefixedIdentifier.identifier;
-    JUnitTestCase.assertNotNull(identifier2.token);
-    JUnitTestCase.assertEquals("b", identifier2.name);
-    JUnitTestCase.assertEquals(9, identifier2.offset);
+    SimpleIdentifier identifier = prefixedIdentifier.identifier;
+    JUnitTestCase.assertNotNull(identifier.token);
+    JUnitTestCase.assertEquals("b", identifier.name);
+    JUnitTestCase.assertEquals(9, identifier.offset);
   }
   void test_parseCommentReference_simple() {
     CommentReference reference = ParserTestCase.parse("parseCommentReference", <Object> ["a", 5], "");
-    SimpleIdentifier identifier2 = EngineTestCase.assertInstanceOf(SimpleIdentifier, reference.identifier);
-    JUnitTestCase.assertNotNull(identifier2.token);
-    JUnitTestCase.assertEquals("a", identifier2.name);
-    JUnitTestCase.assertEquals(5, identifier2.offset);
+    SimpleIdentifier identifier = EngineTestCase.assertInstanceOf(SimpleIdentifier, reference.identifier);
+    JUnitTestCase.assertNotNull(identifier.token);
+    JUnitTestCase.assertEquals("a", identifier.name);
+    JUnitTestCase.assertEquals(5, identifier.offset);
   }
   void test_parseCommentReferences_multiLine() {
     List<Token> tokens = <Token> [new StringToken(TokenType.MULTI_LINE_COMMENT, "/** xxx [a] yyy [b] zzz */", 3)];
@@ -1517,9 +1517,9 @@
     JUnitTestCase.assertFalse(comment.isBlock());
     JUnitTestCase.assertTrue(comment.isDocumentation());
     JUnitTestCase.assertFalse(comment.isEndOfLine());
-    NodeList<CommentReference> references2 = comment.references;
-    EngineTestCase.assertSize(1, references2);
-    CommentReference reference = references2[0];
+    NodeList<CommentReference> references = comment.references;
+    EngineTestCase.assertSize(1, references);
+    CommentReference reference = references[0];
     JUnitTestCase.assertNotNull(reference);
     JUnitTestCase.assertEquals(5, reference.offset);
   }
@@ -1658,42 +1658,42 @@
   }
   void test_parseFinalConstVarOrType_const_noType() {
     FinalConstVarOrType result = ParserTestCase.parse("parseFinalConstVarOrType", <Object> [false], "const");
-    Token keyword2 = result.keyword;
-    JUnitTestCase.assertNotNull(keyword2);
-    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword2.type);
-    JUnitTestCase.assertEquals(Keyword.CONST, ((keyword2 as KeywordToken)).keyword);
+    Token keyword = result.keyword;
+    JUnitTestCase.assertNotNull(keyword);
+    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword.type);
+    JUnitTestCase.assertEquals(Keyword.CONST, ((keyword as KeywordToken)).keyword);
     JUnitTestCase.assertNull(result.type);
   }
   void test_parseFinalConstVarOrType_const_type() {
     FinalConstVarOrType result = ParserTestCase.parse("parseFinalConstVarOrType", <Object> [false], "const A a");
-    Token keyword2 = result.keyword;
-    JUnitTestCase.assertNotNull(keyword2);
-    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword2.type);
-    JUnitTestCase.assertEquals(Keyword.CONST, ((keyword2 as KeywordToken)).keyword);
+    Token keyword = result.keyword;
+    JUnitTestCase.assertNotNull(keyword);
+    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword.type);
+    JUnitTestCase.assertEquals(Keyword.CONST, ((keyword as KeywordToken)).keyword);
     JUnitTestCase.assertNotNull(result.type);
   }
   void test_parseFinalConstVarOrType_final_noType() {
     FinalConstVarOrType result = ParserTestCase.parse("parseFinalConstVarOrType", <Object> [false], "final");
-    Token keyword2 = result.keyword;
-    JUnitTestCase.assertNotNull(keyword2);
-    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword2.type);
-    JUnitTestCase.assertEquals(Keyword.FINAL, ((keyword2 as KeywordToken)).keyword);
+    Token keyword = result.keyword;
+    JUnitTestCase.assertNotNull(keyword);
+    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword.type);
+    JUnitTestCase.assertEquals(Keyword.FINAL, ((keyword as KeywordToken)).keyword);
     JUnitTestCase.assertNull(result.type);
   }
   void test_parseFinalConstVarOrType_final_prefixedType() {
     FinalConstVarOrType result = ParserTestCase.parse("parseFinalConstVarOrType", <Object> [false], "final p.A a");
-    Token keyword2 = result.keyword;
-    JUnitTestCase.assertNotNull(keyword2);
-    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword2.type);
-    JUnitTestCase.assertEquals(Keyword.FINAL, ((keyword2 as KeywordToken)).keyword);
+    Token keyword = result.keyword;
+    JUnitTestCase.assertNotNull(keyword);
+    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword.type);
+    JUnitTestCase.assertEquals(Keyword.FINAL, ((keyword as KeywordToken)).keyword);
     JUnitTestCase.assertNotNull(result.type);
   }
   void test_parseFinalConstVarOrType_final_type() {
     FinalConstVarOrType result = ParserTestCase.parse("parseFinalConstVarOrType", <Object> [false], "final A a");
-    Token keyword2 = result.keyword;
-    JUnitTestCase.assertNotNull(keyword2);
-    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword2.type);
-    JUnitTestCase.assertEquals(Keyword.FINAL, ((keyword2 as KeywordToken)).keyword);
+    Token keyword = result.keyword;
+    JUnitTestCase.assertNotNull(keyword);
+    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword.type);
+    JUnitTestCase.assertEquals(Keyword.FINAL, ((keyword as KeywordToken)).keyword);
     JUnitTestCase.assertNotNull(result.type);
   }
   void test_parseFinalConstVarOrType_type_parameterized() {
@@ -1718,10 +1718,10 @@
   }
   void test_parseFinalConstVarOrType_var() {
     FinalConstVarOrType result = ParserTestCase.parse("parseFinalConstVarOrType", <Object> [false], "var");
-    Token keyword2 = result.keyword;
-    JUnitTestCase.assertNotNull(keyword2);
-    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword2.type);
-    JUnitTestCase.assertEquals(Keyword.VAR, ((keyword2 as KeywordToken)).keyword);
+    Token keyword = result.keyword;
+    JUnitTestCase.assertNotNull(keyword);
+    JUnitTestCase.assertEquals(TokenType.KEYWORD, keyword.type);
+    JUnitTestCase.assertEquals(Keyword.VAR, ((keyword as KeywordToken)).keyword);
     JUnitTestCase.assertNull(result.type);
   }
   void test_parseFormalParameter_final_withType_named() {
@@ -1976,10 +1976,10 @@
     ForStatement statement = ParserTestCase.parse5("parseForStatement", "for (var i = 0;;) {}", []);
     JUnitTestCase.assertNotNull(statement.forKeyword);
     JUnitTestCase.assertNotNull(statement.leftParenthesis);
-    VariableDeclarationList variables2 = statement.variables;
-    JUnitTestCase.assertNotNull(variables2);
-    EngineTestCase.assertSize(0, variables2.metadata);
-    EngineTestCase.assertSize(1, variables2.variables);
+    VariableDeclarationList variables = statement.variables;
+    JUnitTestCase.assertNotNull(variables);
+    EngineTestCase.assertSize(0, variables.metadata);
+    EngineTestCase.assertSize(1, variables.variables);
     JUnitTestCase.assertNull(statement.initialization);
     JUnitTestCase.assertNotNull(statement.leftSeparator);
     JUnitTestCase.assertNull(statement.condition);
@@ -1992,10 +1992,10 @@
     ForStatement statement = ParserTestCase.parse5("parseForStatement", "for (@A var i = 0;;) {}", []);
     JUnitTestCase.assertNotNull(statement.forKeyword);
     JUnitTestCase.assertNotNull(statement.leftParenthesis);
-    VariableDeclarationList variables2 = statement.variables;
-    JUnitTestCase.assertNotNull(variables2);
-    EngineTestCase.assertSize(1, variables2.metadata);
-    EngineTestCase.assertSize(1, variables2.variables);
+    VariableDeclarationList variables = statement.variables;
+    JUnitTestCase.assertNotNull(variables);
+    EngineTestCase.assertSize(1, variables.metadata);
+    EngineTestCase.assertSize(1, variables.variables);
     JUnitTestCase.assertNull(statement.initialization);
     JUnitTestCase.assertNotNull(statement.leftSeparator);
     JUnitTestCase.assertNull(statement.condition);
@@ -2008,9 +2008,9 @@
     ForStatement statement = ParserTestCase.parse5("parseForStatement", "for (var i = 0; i < count;) {}", []);
     JUnitTestCase.assertNotNull(statement.forKeyword);
     JUnitTestCase.assertNotNull(statement.leftParenthesis);
-    VariableDeclarationList variables2 = statement.variables;
-    JUnitTestCase.assertNotNull(variables2);
-    EngineTestCase.assertSize(1, variables2.variables);
+    VariableDeclarationList variables = statement.variables;
+    JUnitTestCase.assertNotNull(variables);
+    EngineTestCase.assertSize(1, variables.variables);
     JUnitTestCase.assertNull(statement.initialization);
     JUnitTestCase.assertNotNull(statement.leftSeparator);
     JUnitTestCase.assertNotNull(statement.condition);
@@ -2023,9 +2023,9 @@
     ForStatement statement = ParserTestCase.parse5("parseForStatement", "for (var i = 0; i < count; i++) {}", []);
     JUnitTestCase.assertNotNull(statement.forKeyword);
     JUnitTestCase.assertNotNull(statement.leftParenthesis);
-    VariableDeclarationList variables2 = statement.variables;
-    JUnitTestCase.assertNotNull(variables2);
-    EngineTestCase.assertSize(1, variables2.variables);
+    VariableDeclarationList variables = statement.variables;
+    JUnitTestCase.assertNotNull(variables);
+    EngineTestCase.assertSize(1, variables.variables);
     JUnitTestCase.assertNull(statement.initialization);
     JUnitTestCase.assertNotNull(statement.leftSeparator);
     JUnitTestCase.assertNotNull(statement.condition);
@@ -2038,9 +2038,9 @@
     ForStatement statement = ParserTestCase.parse5("parseForStatement", "for (int i = 0, j = count; i < j; i++, j--) {}", []);
     JUnitTestCase.assertNotNull(statement.forKeyword);
     JUnitTestCase.assertNotNull(statement.leftParenthesis);
-    VariableDeclarationList variables2 = statement.variables;
-    JUnitTestCase.assertNotNull(variables2);
-    EngineTestCase.assertSize(2, variables2.variables);
+    VariableDeclarationList variables = statement.variables;
+    JUnitTestCase.assertNotNull(variables);
+    EngineTestCase.assertSize(2, variables.variables);
     JUnitTestCase.assertNull(statement.initialization);
     JUnitTestCase.assertNotNull(statement.leftSeparator);
     JUnitTestCase.assertNotNull(statement.condition);
@@ -2053,9 +2053,9 @@
     ForStatement statement = ParserTestCase.parse5("parseForStatement", "for (var i = 0;; i++) {}", []);
     JUnitTestCase.assertNotNull(statement.forKeyword);
     JUnitTestCase.assertNotNull(statement.leftParenthesis);
-    VariableDeclarationList variables2 = statement.variables;
-    JUnitTestCase.assertNotNull(variables2);
-    EngineTestCase.assertSize(1, variables2.variables);
+    VariableDeclarationList variables = statement.variables;
+    JUnitTestCase.assertNotNull(variables);
+    EngineTestCase.assertSize(1, variables.variables);
     JUnitTestCase.assertNull(statement.initialization);
     JUnitTestCase.assertNotNull(statement.leftSeparator);
     JUnitTestCase.assertNull(statement.condition);
@@ -2298,11 +2298,11 @@
     TypeName type = new TypeName.full(new SimpleIdentifier.full(null), null);
     FieldDeclaration declaration = ParserTestCase.parse("parseInitializedIdentifierList", <Object> [commentAndMetadata(comment, []), staticKeyword, null, type], "a = 1, b, c = 3;");
     JUnitTestCase.assertEquals(comment, declaration.documentationComment);
-    VariableDeclarationList fields2 = declaration.fields;
-    JUnitTestCase.assertNotNull(fields2);
-    JUnitTestCase.assertNull(fields2.keyword);
-    JUnitTestCase.assertEquals(type, fields2.type);
-    EngineTestCase.assertSize(3, fields2.variables);
+    VariableDeclarationList fields = declaration.fields;
+    JUnitTestCase.assertNotNull(fields);
+    JUnitTestCase.assertNull(fields.keyword);
+    JUnitTestCase.assertEquals(type, fields.type);
+    EngineTestCase.assertSize(3, fields.variables);
     JUnitTestCase.assertEquals(staticKeyword, declaration.keyword);
     JUnitTestCase.assertNotNull(declaration.semicolon);
   }
@@ -2312,18 +2312,18 @@
     Token varKeyword = TokenFactory.token(Keyword.VAR);
     FieldDeclaration declaration = ParserTestCase.parse("parseInitializedIdentifierList", <Object> [commentAndMetadata(comment, []), staticKeyword, varKeyword, null], "a = 1, b, c = 3;");
     JUnitTestCase.assertEquals(comment, declaration.documentationComment);
-    VariableDeclarationList fields2 = declaration.fields;
-    JUnitTestCase.assertNotNull(fields2);
-    JUnitTestCase.assertEquals(varKeyword, fields2.keyword);
-    JUnitTestCase.assertNull(fields2.type);
-    EngineTestCase.assertSize(3, fields2.variables);
+    VariableDeclarationList fields = declaration.fields;
+    JUnitTestCase.assertNotNull(fields);
+    JUnitTestCase.assertEquals(varKeyword, fields.keyword);
+    JUnitTestCase.assertNull(fields.type);
+    EngineTestCase.assertSize(3, fields.variables);
     JUnitTestCase.assertEquals(staticKeyword, declaration.keyword);
     JUnitTestCase.assertNotNull(declaration.semicolon);
   }
   void test_parseInstanceCreationExpression_qualifiedType() {
-    Token token2 = TokenFactory.token(Keyword.NEW);
-    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token2], "A.B()");
-    JUnitTestCase.assertEquals(token2, expression.keyword);
+    Token token = TokenFactory.token(Keyword.NEW);
+    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token], "A.B()");
+    JUnitTestCase.assertEquals(token, expression.keyword);
     ConstructorName name = expression.constructorName;
     JUnitTestCase.assertNotNull(name);
     JUnitTestCase.assertNotNull(name.type);
@@ -2332,9 +2332,9 @@
     JUnitTestCase.assertNotNull(expression.argumentList);
   }
   void test_parseInstanceCreationExpression_qualifiedType_named() {
-    Token token2 = TokenFactory.token(Keyword.NEW);
-    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token2], "A.B.c()");
-    JUnitTestCase.assertEquals(token2, expression.keyword);
+    Token token = TokenFactory.token(Keyword.NEW);
+    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token], "A.B.c()");
+    JUnitTestCase.assertEquals(token, expression.keyword);
     ConstructorName name = expression.constructorName;
     JUnitTestCase.assertNotNull(name);
     JUnitTestCase.assertNotNull(name.type);
@@ -2343,9 +2343,9 @@
     JUnitTestCase.assertNotNull(expression.argumentList);
   }
   void test_parseInstanceCreationExpression_type() {
-    Token token2 = TokenFactory.token(Keyword.NEW);
-    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token2], "A()");
-    JUnitTestCase.assertEquals(token2, expression.keyword);
+    Token token = TokenFactory.token(Keyword.NEW);
+    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token], "A()");
+    JUnitTestCase.assertEquals(token, expression.keyword);
     ConstructorName name = expression.constructorName;
     JUnitTestCase.assertNotNull(name);
     JUnitTestCase.assertNotNull(name.type);
@@ -2354,9 +2354,9 @@
     JUnitTestCase.assertNotNull(expression.argumentList);
   }
   void test_parseInstanceCreationExpression_type_named() {
-    Token token2 = TokenFactory.token(Keyword.NEW);
-    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token2], "A<B>.c()");
-    JUnitTestCase.assertEquals(token2, expression.keyword);
+    Token token = TokenFactory.token(Keyword.NEW);
+    InstanceCreationExpression expression = ParserTestCase.parse("parseInstanceCreationExpression", <Object> [token], "A<B>.c()");
+    JUnitTestCase.assertEquals(token, expression.keyword);
     ConstructorName name = expression.constructorName;
     JUnitTestCase.assertNotNull(name);
     JUnitTestCase.assertNotNull(name.type);
@@ -2381,20 +2381,20 @@
     JUnitTestCase.assertEquals(name, identifier.name);
   }
   void test_parseListLiteral_empty_oneToken() {
-    Token token2 = TokenFactory.token(Keyword.CONST);
+    Token token = TokenFactory.token(Keyword.CONST);
     TypeArgumentList typeArguments = new TypeArgumentList.full(null, null, null);
-    ListLiteral literal = ParserTestCase.parse("parseListLiteral", <Object> [token2, typeArguments], "[]");
-    JUnitTestCase.assertEquals(token2, literal.modifier);
+    ListLiteral literal = ParserTestCase.parse("parseListLiteral", <Object> [token, typeArguments], "[]");
+    JUnitTestCase.assertEquals(token, literal.modifier);
     JUnitTestCase.assertEquals(typeArguments, literal.typeArguments);
     JUnitTestCase.assertNotNull(literal.leftBracket);
     EngineTestCase.assertSize(0, literal.elements);
     JUnitTestCase.assertNotNull(literal.rightBracket);
   }
   void test_parseListLiteral_empty_twoTokens() {
-    Token token2 = TokenFactory.token(Keyword.CONST);
+    Token token = TokenFactory.token(Keyword.CONST);
     TypeArgumentList typeArguments = new TypeArgumentList.full(null, null, null);
-    ListLiteral literal = ParserTestCase.parse("parseListLiteral", <Object> [token2, typeArguments], "[ ]");
-    JUnitTestCase.assertEquals(token2, literal.modifier);
+    ListLiteral literal = ParserTestCase.parse("parseListLiteral", <Object> [token, typeArguments], "[ ]");
+    JUnitTestCase.assertEquals(token, literal.modifier);
     JUnitTestCase.assertEquals(typeArguments, literal.typeArguments);
     JUnitTestCase.assertNotNull(literal.leftBracket);
     EngineTestCase.assertSize(0, literal.elements);
@@ -2463,10 +2463,10 @@
     JUnitTestCase.assertNotNull(expression.rightOperand);
   }
   void test_parseMapLiteral_empty() {
-    Token token2 = TokenFactory.token(Keyword.CONST);
+    Token token = TokenFactory.token(Keyword.CONST);
     TypeArgumentList typeArguments = ASTFactory.typeArgumentList([ASTFactory.typeName4("String", []), ASTFactory.typeName4("int", [])]);
-    MapLiteral literal = ParserTestCase.parse("parseMapLiteral", <Object> [token2, typeArguments], "{}");
-    JUnitTestCase.assertEquals(token2, literal.modifier);
+    MapLiteral literal = ParserTestCase.parse("parseMapLiteral", <Object> [token, typeArguments], "{}");
+    JUnitTestCase.assertEquals(token, literal.modifier);
     JUnitTestCase.assertEquals(typeArguments, literal.typeArguments);
     JUnitTestCase.assertNotNull(literal.leftBracket);
     EngineTestCase.assertSize(0, literal.entries);
@@ -3050,22 +3050,22 @@
   }
   void test_parseStringLiteral_adjacent() {
     AdjacentStrings literal = ParserTestCase.parse5("parseStringLiteral", "'a' 'b'", []);
-    NodeList<StringLiteral> strings2 = literal.strings;
-    EngineTestCase.assertSize(2, strings2);
-    StringLiteral firstString = strings2[0];
-    StringLiteral secondString = strings2[1];
+    NodeList<StringLiteral> strings = literal.strings;
+    EngineTestCase.assertSize(2, strings);
+    StringLiteral firstString = strings[0];
+    StringLiteral secondString = strings[1];
     JUnitTestCase.assertEquals("a", ((firstString as SimpleStringLiteral)).value);
     JUnitTestCase.assertEquals("b", ((secondString as SimpleStringLiteral)).value);
   }
   void test_parseStringLiteral_interpolated() {
     StringInterpolation literal = ParserTestCase.parse5("parseStringLiteral", "'a \${b} c \$this d'", []);
-    NodeList<InterpolationElement> elements2 = literal.elements;
-    EngineTestCase.assertSize(5, elements2);
-    JUnitTestCase.assertTrue(elements2[0] is InterpolationString);
-    JUnitTestCase.assertTrue(elements2[1] is InterpolationExpression);
-    JUnitTestCase.assertTrue(elements2[2] is InterpolationString);
-    JUnitTestCase.assertTrue(elements2[3] is InterpolationExpression);
-    JUnitTestCase.assertTrue(elements2[4] is InterpolationString);
+    NodeList<InterpolationElement> elements = literal.elements;
+    EngineTestCase.assertSize(5, elements);
+    JUnitTestCase.assertTrue(elements[0] is InterpolationString);
+    JUnitTestCase.assertTrue(elements[1] is InterpolationExpression);
+    JUnitTestCase.assertTrue(elements[2] is InterpolationString);
+    JUnitTestCase.assertTrue(elements[3] is InterpolationExpression);
+    JUnitTestCase.assertTrue(elements[4] is InterpolationString);
   }
   void test_parseStringLiteral_single() {
     SimpleStringLiteral literal = ParserTestCase.parse5("parseStringLiteral", "'a'", []);
@@ -3142,9 +3142,9 @@
     TryStatement statement = ParserTestCase.parse5("parseTryStatement", "try {} catch (e) {}", []);
     JUnitTestCase.assertNotNull(statement.tryKeyword);
     JUnitTestCase.assertNotNull(statement.body);
-    NodeList<CatchClause> catchClauses2 = statement.catchClauses;
-    EngineTestCase.assertSize(1, catchClauses2);
-    CatchClause clause = catchClauses2[0];
+    NodeList<CatchClause> catchClauses = statement.catchClauses;
+    EngineTestCase.assertSize(1, catchClauses);
+    CatchClause clause = catchClauses[0];
     JUnitTestCase.assertNull(clause.onKeyword);
     JUnitTestCase.assertNull(clause.exceptionType);
     JUnitTestCase.assertNotNull(clause.catchKeyword);
@@ -3159,9 +3159,9 @@
     TryStatement statement = ParserTestCase.parse5("parseTryStatement", "try {} catch (e, s) {} finally {}", []);
     JUnitTestCase.assertNotNull(statement.tryKeyword);
     JUnitTestCase.assertNotNull(statement.body);
-    NodeList<CatchClause> catchClauses2 = statement.catchClauses;
-    EngineTestCase.assertSize(1, catchClauses2);
-    CatchClause clause = catchClauses2[0];
+    NodeList<CatchClause> catchClauses = statement.catchClauses;
+    EngineTestCase.assertSize(1, catchClauses);
+    CatchClause clause = catchClauses[0];
     JUnitTestCase.assertNull(clause.onKeyword);
     JUnitTestCase.assertNull(clause.exceptionType);
     JUnitTestCase.assertNotNull(clause.catchKeyword);
@@ -3192,9 +3192,9 @@
     TryStatement statement = ParserTestCase.parse5("parseTryStatement", "try {} on Error {}", []);
     JUnitTestCase.assertNotNull(statement.tryKeyword);
     JUnitTestCase.assertNotNull(statement.body);
-    NodeList<CatchClause> catchClauses2 = statement.catchClauses;
-    EngineTestCase.assertSize(1, catchClauses2);
-    CatchClause clause = catchClauses2[0];
+    NodeList<CatchClause> catchClauses = statement.catchClauses;
+    EngineTestCase.assertSize(1, catchClauses);
+    CatchClause clause = catchClauses[0];
     JUnitTestCase.assertNotNull(clause.onKeyword);
     JUnitTestCase.assertNotNull(clause.exceptionType);
     JUnitTestCase.assertNull(clause.catchKeyword);
@@ -3209,9 +3209,9 @@
     TryStatement statement = ParserTestCase.parse5("parseTryStatement", "try {} on Error catch (e, s) {}", []);
     JUnitTestCase.assertNotNull(statement.tryKeyword);
     JUnitTestCase.assertNotNull(statement.body);
-    NodeList<CatchClause> catchClauses2 = statement.catchClauses;
-    EngineTestCase.assertSize(1, catchClauses2);
-    CatchClause clause = catchClauses2[0];
+    NodeList<CatchClause> catchClauses = statement.catchClauses;
+    EngineTestCase.assertSize(1, catchClauses);
+    CatchClause clause = catchClauses[0];
     JUnitTestCase.assertNotNull(clause.onKeyword);
     JUnitTestCase.assertNotNull(clause.exceptionType);
     JUnitTestCase.assertNotNull(clause.catchKeyword);
@@ -3226,9 +3226,9 @@
     TryStatement statement = ParserTestCase.parse5("parseTryStatement", "try {} on Error catch (e, s) {} finally {}", []);
     JUnitTestCase.assertNotNull(statement.tryKeyword);
     JUnitTestCase.assertNotNull(statement.body);
-    NodeList<CatchClause> catchClauses2 = statement.catchClauses;
-    EngineTestCase.assertSize(1, catchClauses2);
-    CatchClause clause = catchClauses2[0];
+    NodeList<CatchClause> catchClauses = statement.catchClauses;
+    EngineTestCase.assertSize(1, catchClauses);
+    CatchClause clause = catchClauses[0];
     JUnitTestCase.assertNotNull(clause.onKeyword);
     JUnitTestCase.assertNotNull(clause.exceptionType);
     JUnitTestCase.assertNotNull(clause.catchKeyword);
@@ -3407,9 +3407,9 @@
     JUnitTestCase.assertNotNull(expression.operator);
     JUnitTestCase.assertEquals(TokenType.MINUS_MINUS, expression.operator.type);
     JUnitTestCase.assertNotNull(expression.operand);
-    PropertyAccess operand2 = expression.operand as PropertyAccess;
-    JUnitTestCase.assertTrue(operand2.target is SuperExpression);
-    JUnitTestCase.assertEquals("x", operand2.propertyName.name);
+    PropertyAccess operand = expression.operand as PropertyAccess;
+    JUnitTestCase.assertTrue(operand.target is SuperExpression);
+    JUnitTestCase.assertEquals("x", operand.propertyName.name);
   }
   void test_parseUnaryExpression_increment_normal() {
     PrefixExpression expression = ParserTestCase.parse5("parseUnaryExpression", "++x", []);
@@ -3422,18 +3422,18 @@
     JUnitTestCase.assertNotNull(expression.operator);
     JUnitTestCase.assertEquals(TokenType.PLUS_PLUS, expression.operator.type);
     JUnitTestCase.assertNotNull(expression.operand);
-    IndexExpression operand2 = expression.operand as IndexExpression;
-    JUnitTestCase.assertTrue(operand2.realTarget is SuperExpression);
-    JUnitTestCase.assertTrue(operand2.index is IntegerLiteral);
+    IndexExpression operand = expression.operand as IndexExpression;
+    JUnitTestCase.assertTrue(operand.realTarget is SuperExpression);
+    JUnitTestCase.assertTrue(operand.index is IntegerLiteral);
   }
   void test_parseUnaryExpression_increment_super_propertyAccess() {
     PrefixExpression expression = ParserTestCase.parse5("parseUnaryExpression", "++super.x", []);
     JUnitTestCase.assertNotNull(expression.operator);
     JUnitTestCase.assertEquals(TokenType.PLUS_PLUS, expression.operator.type);
     JUnitTestCase.assertNotNull(expression.operand);
-    PropertyAccess operand2 = expression.operand as PropertyAccess;
-    JUnitTestCase.assertTrue(operand2.target is SuperExpression);
-    JUnitTestCase.assertEquals("x", operand2.propertyName.name);
+    PropertyAccess operand = expression.operand as PropertyAccess;
+    JUnitTestCase.assertTrue(operand.target is SuperExpression);
+    JUnitTestCase.assertEquals("x", operand.propertyName.name);
   }
   void test_parseUnaryExpression_minus_normal() {
     PrefixExpression expression = ParserTestCase.parse5("parseUnaryExpression", "-x", []);
@@ -5973,14 +5973,14 @@
   }
   void test_cascade_withAssignment() {
     CascadeExpression cascade = ParserTestCase.parseExpression("new Map()..[3] = 4 ..[0] = 11;", []);
-    Expression target2 = cascade.target;
+    Expression target = cascade.target;
     for (Expression section in cascade.cascadeSections) {
       EngineTestCase.assertInstanceOf(AssignmentExpression, section);
       Expression lhs = ((section as AssignmentExpression)).leftHandSide;
       EngineTestCase.assertInstanceOf(IndexExpression, lhs);
       IndexExpression index = lhs as IndexExpression;
       JUnitTestCase.assertTrue(index.isCascaded());
-      JUnitTestCase.assertSame(target2, index.realTarget);
+      JUnitTestCase.assertSame(target, index.realTarget);
     }
   }
   void test_conditionalExpression_precedence_logicalOrExpression() {
@@ -5989,8 +5989,8 @@
   }
   void test_constructor_initializer_withParenthesizedExpression() {
     CompilationUnit unit = ParserTestCase.parseCompilationUnit(EngineTestCase.createSource(["class C {", "  C() :", "    this.a = (b == null ? c : d) {", "  }", "}"]), []);
-    NodeList<CompilationUnitMember> declarations2 = unit.declarations;
-    EngineTestCase.assertSize(1, declarations2);
+    NodeList<CompilationUnitMember> declarations = unit.declarations;
+    EngineTestCase.assertSize(1, declarations);
   }
   void test_equalityExpression_normal() {
     BinaryExpression expression = ParserTestCase.parseExpression("x == y != z", []);
@@ -6298,13 +6298,13 @@
    * @param node the AST node being validated
    */
   void validate(ASTNode node) {
-    ASTNode parent2 = node.parent;
+    ASTNode parent = node.parent;
     if (node is CompilationUnit) {
-      if (parent2 != null) {
+      if (parent != null) {
         _errors.add("Compilation units should not have a parent");
       }
     } else {
-      if (parent2 == null) {
+      if (parent == null) {
         _errors.add("No parent for ${node.runtimeType.toString()}");
       }
     }
@@ -6319,15 +6319,15 @@
     if (nodeStart < 0 || nodeLength < 0) {
       _errors.add("No source info for ${node.runtimeType.toString()}");
     }
-    if (parent2 != null) {
+    if (parent != null) {
       int nodeEnd = nodeStart + nodeLength;
-      int parentStart = parent2.offset;
-      int parentEnd = parentStart + parent2.length;
+      int parentStart = parent.offset;
+      int parentEnd = parentStart + parent.length;
       if (nodeStart < parentStart) {
-        _errors.add("Invalid source start (${nodeStart}) for ${node.runtimeType.toString()} inside ${parent2.runtimeType.toString()} (${parentStart})");
+        _errors.add("Invalid source start (${nodeStart}) for ${node.runtimeType.toString()} inside ${parent.runtimeType.toString()} (${parentStart})");
       }
       if (nodeEnd > parentEnd) {
-        _errors.add("Invalid source end (${nodeEnd}) for ${node.runtimeType.toString()} inside ${parent2.runtimeType.toString()} (${parentStart})");
+        _errors.add("Invalid source end (${nodeEnd}) for ${node.runtimeType.toString()} inside ${parent.runtimeType.toString()} (${parentStart})");
       }
     }
   }
@@ -6805,15 +6805,15 @@
     CompilationUnit unit = ParserTestCase.parseCompilationUnit("class Bar<T extends Foo> {m(x){if (x is ) return;if (x is !)}}", [ParserErrorCode.EXPECTED_TYPE_NAME, ParserErrorCode.EXPECTED_TYPE_NAME, ParserErrorCode.MISSING_STATEMENT]);
     ClassDeclaration declaration = unit.declarations[0] as ClassDeclaration;
     MethodDeclaration method = declaration.members[0] as MethodDeclaration;
-    BlockFunctionBody body2 = method.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[1] as IfStatement;
+    BlockFunctionBody body = method.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[1] as IfStatement;
     IsExpression expression = ifStatement.condition as IsExpression;
     JUnitTestCase.assertNotNull(expression.expression);
     JUnitTestCase.assertNotNull(expression.isOperator);
     JUnitTestCase.assertNotNull(expression.notOperator);
-    TypeName type2 = expression.type;
-    JUnitTestCase.assertNotNull(type2);
-    JUnitTestCase.assertTrue(type2.name.isSynthetic());
+    TypeName type = expression.type;
+    JUnitTestCase.assertNotNull(type);
+    JUnitTestCase.assertTrue(type.name.isSynthetic());
     EngineTestCase.assertInstanceOf(EmptyStatement, ifStatement.thenStatement);
   }
   void test_logicalAndExpression_missing_LHS() {
@@ -6963,9 +6963,9 @@
   }
   void test_typedef_eof() {
     CompilationUnit unit = ParserTestCase.parseCompilationUnit("typedef n", [ParserErrorCode.EXPECTED_TOKEN, ParserErrorCode.MISSING_TYPEDEF_PARAMETERS]);
-    NodeList<CompilationUnitMember> declarations2 = unit.declarations;
-    EngineTestCase.assertSize(1, declarations2);
-    CompilationUnitMember member = declarations2[0];
+    NodeList<CompilationUnitMember> declarations = unit.declarations;
+    EngineTestCase.assertSize(1, declarations);
+    CompilationUnitMember member = declarations[0];
     EngineTestCase.assertInstanceOf(FunctionTypeAlias, member);
   }
   static dartSuite() {
diff --git a/pkg/analyzer_experimental/test/generated/resolver_test.dart b/pkg/analyzer_experimental/test/generated/resolver_test.dart
index 77231c2..a4a9b6b 100644
--- a/pkg/analyzer_experimental/test/generated/resolver_test.dart
+++ b/pkg/analyzer_experimental/test/generated/resolver_test.dart
@@ -30,8 +30,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[0] as IfStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[0] as IfStatement;
     ReturnStatement statement = ((ifStatement.thenStatement as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -45,8 +45,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
   }
@@ -57,8 +57,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[2] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[2] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeProvider.intType, variableName.propagatedType);
   }
@@ -69,8 +69,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[2] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[2] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeProvider.doubleType, variableName.propagatedType);
   }
@@ -83,8 +83,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ForEachStatement forStatement = body2.block.statements[0] as ForEachStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ForEachStatement forStatement = body.block.statements[0] as ForEachStatement;
     ReturnStatement statement = ((forStatement.body as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -96,8 +96,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeProvider.intType, variableName.propagatedType);
   }
@@ -106,8 +106,8 @@
     LibraryElement library = resolve(source);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ExpressionStatement statement = body2.block.statements[1] as ExpressionStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ExpressionStatement statement = body.block.statements[1] as ExpressionStatement;
     PrefixedIdentifier invocation = statement.expression as PrefixedIdentifier;
     SimpleIdentifier variableName = invocation.prefix;
     JUnitTestCase.assertSame(typeProvider.stringType, variableName.propagatedType);
@@ -121,8 +121,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[0] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[0] as ReturnStatement;
     ConditionalExpression conditional = statement.expression as ConditionalExpression;
     SimpleIdentifier variableName = conditional.thenExpression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -136,8 +136,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[0] as IfStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[0] as IfStatement;
     ReturnStatement statement = ((ifStatement.thenStatement as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -149,8 +149,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[0] as IfStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[0] as IfStatement;
     ReturnStatement statement = ((ifStatement.thenStatement as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(null, variableName.propagatedType);
@@ -164,8 +164,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[0] as IfStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[0] as IfStatement;
     ReturnStatement statement = ((ifStatement.thenStatement as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -179,8 +179,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
   }
@@ -193,8 +193,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
   }
@@ -205,8 +205,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[2] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[0] as IfStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[0] as IfStatement;
     ReturnStatement statement = ((ifStatement.thenStatement as Block)).statements[0] as ReturnStatement;
     MethodInvocation invocation = statement.expression as MethodInvocation;
     JUnitTestCase.assertNotNull(invocation.methodName.element);
@@ -220,8 +220,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    WhileStatement whileStatement = body2.block.statements[0] as WhileStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    WhileStatement whileStatement = body.block.statements[0] as WhileStatement;
     ReturnStatement statement = ((whileStatement.body as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -235,8 +235,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[0] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[0] as ReturnStatement;
     ConditionalExpression conditional = statement.expression as ConditionalExpression;
     SimpleIdentifier variableName = conditional.elseExpression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -250,8 +250,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[0] as IfStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[0] as IfStatement;
     ReturnStatement statement = ((ifStatement.elseStatement as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -265,8 +265,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    IfStatement ifStatement = body2.block.statements[0] as IfStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    IfStatement ifStatement = body.block.statements[0] as IfStatement;
     ReturnStatement statement = ((ifStatement.elseStatement as Block)).statements[0] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
@@ -280,8 +280,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
   }
@@ -294,8 +294,8 @@
     ClassDeclaration classA = unit.declarations[0] as ClassDeclaration;
     InterfaceType typeA = classA.element.type;
     FunctionDeclaration function = unit.declarations[1] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier variableName = statement.expression as SimpleIdentifier;
     JUnitTestCase.assertSame(typeA, variableName.propagatedType);
   }
@@ -306,8 +306,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     IndexExpression indexExpression = statement.expression as IndexExpression;
     JUnitTestCase.assertNull(indexExpression.propagatedType);
   }
@@ -318,8 +318,8 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     IndexExpression indexExpression = statement.expression as IndexExpression;
     JUnitTestCase.assertSame(typeProvider.intType, indexExpression.propagatedType);
   }
@@ -330,15 +330,15 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier identifier = statement.expression as SimpleIdentifier;
-    InterfaceType propagatedType2 = identifier.propagatedType as InterfaceType;
-    JUnitTestCase.assertSame(typeProvider.mapType.element, propagatedType2.element);
-    List<Type2> typeArguments2 = propagatedType2.typeArguments;
-    EngineTestCase.assertLength(2, typeArguments2);
-    JUnitTestCase.assertSame(typeProvider.dynamicType, typeArguments2[0]);
-    JUnitTestCase.assertSame(typeProvider.dynamicType, typeArguments2[1]);
+    InterfaceType propagatedType = identifier.propagatedType as InterfaceType;
+    JUnitTestCase.assertSame(typeProvider.mapType.element, propagatedType.element);
+    List<Type2> typeArguments = propagatedType.typeArguments;
+    EngineTestCase.assertLength(2, typeArguments);
+    JUnitTestCase.assertSame(typeProvider.dynamicType, typeArguments[0]);
+    JUnitTestCase.assertSame(typeProvider.dynamicType, typeArguments[1]);
   }
   void test_mapLiteral_same() {
     Source source = addSource(EngineTestCase.createSource(["f() {", "  var v = {'a' : 0, 'b' : 1, 'c' : 2};", "  return v;", "}"]));
@@ -347,15 +347,15 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration function = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = function.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[1] as ReturnStatement;
+    BlockFunctionBody body = function.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[1] as ReturnStatement;
     SimpleIdentifier identifier = statement.expression as SimpleIdentifier;
-    InterfaceType propagatedType2 = identifier.propagatedType as InterfaceType;
-    JUnitTestCase.assertSame(typeProvider.mapType.element, propagatedType2.element);
-    List<Type2> typeArguments2 = propagatedType2.typeArguments;
-    EngineTestCase.assertLength(2, typeArguments2);
-    JUnitTestCase.assertSame(typeProvider.stringType, typeArguments2[0]);
-    JUnitTestCase.assertSame(typeProvider.intType, typeArguments2[1]);
+    InterfaceType propagatedType = identifier.propagatedType as InterfaceType;
+    JUnitTestCase.assertSame(typeProvider.mapType.element, propagatedType.element);
+    List<Type2> typeArguments = propagatedType.typeArguments;
+    EngineTestCase.assertLength(2, typeArguments);
+    JUnitTestCase.assertSame(typeProvider.stringType, typeArguments[0]);
+    JUnitTestCase.assertSame(typeProvider.intType, typeArguments[1]);
   }
   void test_query() {
     Source source = addSource(EngineTestCase.createSource(["import 'dart:html';", "", "main() {", "  var v1 = query('a');", "  var v2 = query('A');", "  var v3 = query('body:active');", "  var v4 = query('button[foo=\"bar\"]');", "  var v5 = query('div.class');", "  var v6 = query('input#id');", "  var v7 = query('select#id');", "  // invocation of method", "  var m1 = document.query('div');", " // unsupported currently", "  var b1 = query('noSuchTag');", "  var b2 = query('DART_EDITOR_NO_SUCH_TYPE');", "  var b3 = query('body div');", "  return [v1, v2, v3, v4, v5, v6, v7, m1, b1, b2, b3];", "}"]));
@@ -364,20 +364,20 @@
     verify([source]);
     CompilationUnit unit = resolveCompilationUnit(source, library);
     FunctionDeclaration main = unit.declarations[0] as FunctionDeclaration;
-    BlockFunctionBody body2 = main.functionExpression.body as BlockFunctionBody;
-    ReturnStatement statement = body2.block.statements[11] as ReturnStatement;
-    NodeList<Expression> elements2 = ((statement.expression as ListLiteral)).elements;
-    JUnitTestCase.assertEquals("AnchorElement", elements2[0].propagatedType.name);
-    JUnitTestCase.assertEquals("AnchorElement", elements2[1].propagatedType.name);
-    JUnitTestCase.assertEquals("BodyElement", elements2[2].propagatedType.name);
-    JUnitTestCase.assertEquals("ButtonElement", elements2[3].propagatedType.name);
-    JUnitTestCase.assertEquals("DivElement", elements2[4].propagatedType.name);
-    JUnitTestCase.assertEquals("InputElement", elements2[5].propagatedType.name);
-    JUnitTestCase.assertEquals("SelectElement", elements2[6].propagatedType.name);
-    JUnitTestCase.assertEquals("DivElement", elements2[7].propagatedType.name);
-    JUnitTestCase.assertEquals("Element", elements2[8].propagatedType.name);
-    JUnitTestCase.assertEquals("Element", elements2[9].propagatedType.name);
-    JUnitTestCase.assertEquals("Element", elements2[10].propagatedType.name);
+    BlockFunctionBody body = main.functionExpression.body as BlockFunctionBody;
+    ReturnStatement statement = body.block.statements[11] as ReturnStatement;
+    NodeList<Expression> elements = ((statement.expression as ListLiteral)).elements;
+    JUnitTestCase.assertEquals("AnchorElement", elements[0].propagatedType.name);
+    JUnitTestCase.assertEquals("AnchorElement", elements[1].propagatedType.name);
+    JUnitTestCase.assertEquals("BodyElement", elements[2].propagatedType.name);
+    JUnitTestCase.assertEquals("ButtonElement", elements[3].propagatedType.name);
+    JUnitTestCase.assertEquals("DivElement", elements[4].propagatedType.name);
+    JUnitTestCase.assertEquals("InputElement", elements[5].propagatedType.name);
+    JUnitTestCase.assertEquals("SelectElement", elements[6].propagatedType.name);
+    JUnitTestCase.assertEquals("DivElement", elements[7].propagatedType.name);
+    JUnitTestCase.assertEquals("Element", elements[8].propagatedType.name);
+    JUnitTestCase.assertEquals("Element", elements[9].propagatedType.name);
+    JUnitTestCase.assertEquals("Element", elements[10].propagatedType.name);
   }
   static dartSuite() {
     _ut.group('TypePropagationTest', () {
@@ -2299,17 +2299,17 @@
   void test_addExport() {
     Library exportLibrary = library("/exported.dart");
     _library5.addExport(ASTFactory.exportDirective2("exported.dart", []), exportLibrary);
-    List<Library> exports2 = _library5.exports;
-    EngineTestCase.assertLength(1, exports2);
-    JUnitTestCase.assertSame(exportLibrary, exports2[0]);
+    List<Library> exports = _library5.exports;
+    EngineTestCase.assertLength(1, exports);
+    JUnitTestCase.assertSame(exportLibrary, exports[0]);
     _errorListener.assertNoErrors();
   }
   void test_addImport() {
     Library importLibrary = library("/imported.dart");
     _library5.addImport(ASTFactory.importDirective2("imported.dart", null, []), importLibrary);
-    List<Library> imports2 = _library5.imports;
-    EngineTestCase.assertLength(1, imports2);
-    JUnitTestCase.assertSame(importLibrary, imports2[0]);
+    List<Library> imports = _library5.imports;
+    EngineTestCase.assertLength(1, imports);
+    JUnitTestCase.assertSame(importLibrary, imports[0]);
     _errorListener.assertNoErrors();
   }
   void test_getExplicitlyImportsCore() {
@@ -2879,17 +2879,17 @@
   }
   void test_visitCatchClause_exception() {
     CatchClause clause = ASTFactory.catchClause("e", []);
-    SimpleIdentifier exceptionParameter2 = clause.exceptionParameter;
-    exceptionParameter2.element = new LocalVariableElementImpl(exceptionParameter2);
+    SimpleIdentifier exceptionParameter = clause.exceptionParameter;
+    exceptionParameter.element = new LocalVariableElementImpl(exceptionParameter);
     resolve(clause, _typeProvider.objectType, null, []);
     _listener.assertNoErrors();
   }
   void test_visitCatchClause_exception_stackTrace() {
     CatchClause clause = ASTFactory.catchClause2("e", "s", []);
-    SimpleIdentifier exceptionParameter2 = clause.exceptionParameter;
-    exceptionParameter2.element = new LocalVariableElementImpl(exceptionParameter2);
-    SimpleIdentifier stackTraceParameter2 = clause.stackTraceParameter;
-    stackTraceParameter2.element = new LocalVariableElementImpl(stackTraceParameter2);
+    SimpleIdentifier exceptionParameter = clause.exceptionParameter;
+    exceptionParameter.element = new LocalVariableElementImpl(exceptionParameter);
+    SimpleIdentifier stackTraceParameter = clause.stackTraceParameter;
+    stackTraceParameter.element = new LocalVariableElementImpl(stackTraceParameter);
     resolve(clause, _typeProvider.objectType, _typeProvider.stackTraceType, []);
     _listener.assertNoErrors();
   }
@@ -2897,8 +2897,8 @@
     ClassElement exceptionElement = ElementFactory.classElement2("E", []);
     TypeName exceptionType = ASTFactory.typeName(exceptionElement, []);
     CatchClause clause = ASTFactory.catchClause4(exceptionType, "e", []);
-    SimpleIdentifier exceptionParameter2 = clause.exceptionParameter;
-    exceptionParameter2.element = new LocalVariableElementImpl(exceptionParameter2);
+    SimpleIdentifier exceptionParameter = clause.exceptionParameter;
+    exceptionParameter.element = new LocalVariableElementImpl(exceptionParameter);
     resolve(clause, exceptionElement.type, null, [exceptionElement]);
     _listener.assertNoErrors();
   }
@@ -2907,10 +2907,10 @@
     TypeName exceptionType = ASTFactory.typeName(exceptionElement, []);
     ((exceptionType.name as SimpleIdentifier)).element = exceptionElement;
     CatchClause clause = ASTFactory.catchClause5(exceptionType, "e", "s", []);
-    SimpleIdentifier exceptionParameter2 = clause.exceptionParameter;
-    exceptionParameter2.element = new LocalVariableElementImpl(exceptionParameter2);
-    SimpleIdentifier stackTraceParameter2 = clause.stackTraceParameter;
-    stackTraceParameter2.element = new LocalVariableElementImpl(stackTraceParameter2);
+    SimpleIdentifier exceptionParameter = clause.exceptionParameter;
+    exceptionParameter.element = new LocalVariableElementImpl(exceptionParameter);
+    SimpleIdentifier stackTraceParameter = clause.stackTraceParameter;
+    stackTraceParameter.element = new LocalVariableElementImpl(stackTraceParameter);
     resolve(clause, exceptionElement.type, _typeProvider.stackTraceType, [exceptionElement]);
     _listener.assertNoErrors();
   }
@@ -2919,19 +2919,19 @@
     ClassElement elementB = ElementFactory.classElement2("B", []);
     ClassElement elementC = ElementFactory.classElement2("C", []);
     ClassElement elementD = ElementFactory.classElement2("D", []);
-    ExtendsClause extendsClause2 = ASTFactory.extendsClause(ASTFactory.typeName(elementB, []));
-    WithClause withClause2 = ASTFactory.withClause([ASTFactory.typeName(elementC, [])]);
-    ImplementsClause implementsClause2 = ASTFactory.implementsClause([ASTFactory.typeName(elementD, [])]);
-    ClassDeclaration declaration = ASTFactory.classDeclaration(null, "A", null, extendsClause2, withClause2, implementsClause2, []);
+    ExtendsClause extendsClause = ASTFactory.extendsClause(ASTFactory.typeName(elementB, []));
+    WithClause withClause = ASTFactory.withClause([ASTFactory.typeName(elementC, [])]);
+    ImplementsClause implementsClause = ASTFactory.implementsClause([ASTFactory.typeName(elementD, [])]);
+    ClassDeclaration declaration = ASTFactory.classDeclaration(null, "A", null, extendsClause, withClause, implementsClause, []);
     declaration.name.element = elementA;
     resolveNode(declaration, [elementA, elementB, elementC, elementD]);
     JUnitTestCase.assertSame(elementB.type, elementA.supertype);
-    List<InterfaceType> mixins2 = elementA.mixins;
-    EngineTestCase.assertLength(1, mixins2);
-    JUnitTestCase.assertSame(elementC.type, mixins2[0]);
-    List<InterfaceType> interfaces2 = elementA.interfaces;
-    EngineTestCase.assertLength(1, interfaces2);
-    JUnitTestCase.assertSame(elementD.type, interfaces2[0]);
+    List<InterfaceType> mixins = elementA.mixins;
+    EngineTestCase.assertLength(1, mixins);
+    JUnitTestCase.assertSame(elementC.type, mixins[0]);
+    List<InterfaceType> interfaces = elementA.interfaces;
+    EngineTestCase.assertLength(1, interfaces);
+    JUnitTestCase.assertSame(elementD.type, interfaces[0]);
     _listener.assertNoErrors();
   }
   void test_visitClassTypeAlias() {
@@ -2939,18 +2939,18 @@
     ClassElement elementB = ElementFactory.classElement2("B", []);
     ClassElement elementC = ElementFactory.classElement2("C", []);
     ClassElement elementD = ElementFactory.classElement2("D", []);
-    WithClause withClause2 = ASTFactory.withClause([ASTFactory.typeName(elementC, [])]);
-    ImplementsClause implementsClause2 = ASTFactory.implementsClause([ASTFactory.typeName(elementD, [])]);
-    ClassTypeAlias alias = ASTFactory.classTypeAlias("A", null, null, ASTFactory.typeName(elementB, []), withClause2, implementsClause2);
+    WithClause withClause = ASTFactory.withClause([ASTFactory.typeName(elementC, [])]);
+    ImplementsClause implementsClause = ASTFactory.implementsClause([ASTFactory.typeName(elementD, [])]);
+    ClassTypeAlias alias = ASTFactory.classTypeAlias("A", null, null, ASTFactory.typeName(elementB, []), withClause, implementsClause);
     alias.name.element = elementA;
     resolveNode(alias, [elementA, elementB, elementC, elementD]);
     JUnitTestCase.assertSame(elementB.type, elementA.supertype);
-    List<InterfaceType> mixins2 = elementA.mixins;
-    EngineTestCase.assertLength(1, mixins2);
-    JUnitTestCase.assertSame(elementC.type, mixins2[0]);
-    List<InterfaceType> interfaces2 = elementA.interfaces;
-    EngineTestCase.assertLength(1, interfaces2);
-    JUnitTestCase.assertSame(elementD.type, interfaces2[0]);
+    List<InterfaceType> mixins = elementA.mixins;
+    EngineTestCase.assertLength(1, mixins);
+    JUnitTestCase.assertSame(elementC.type, mixins[0]);
+    List<InterfaceType> interfaces = elementA.interfaces;
+    EngineTestCase.assertLength(1, interfaces);
+    JUnitTestCase.assertSame(elementD.type, interfaces[0]);
     _listener.assertNoErrors();
   }
   void test_visitSimpleFormalParameter_noType() {
@@ -2960,30 +2960,30 @@
     _listener.assertNoErrors();
   }
   void test_visitSimpleFormalParameter_type() {
-    InterfaceType intType2 = _typeProvider.intType;
-    ClassElement intElement = intType2.element;
+    InterfaceType intType = _typeProvider.intType;
+    ClassElement intElement = intType.element;
     FormalParameter node = ASTFactory.simpleFormalParameter4(ASTFactory.typeName(intElement, []), "p");
-    SimpleIdentifier identifier2 = node.identifier;
-    ParameterElementImpl element = new ParameterElementImpl(identifier2);
-    identifier2.element = element;
-    JUnitTestCase.assertSame(intType2, resolve6(node, [intElement]));
+    SimpleIdentifier identifier = node.identifier;
+    ParameterElementImpl element = new ParameterElementImpl(identifier);
+    identifier.element = element;
+    JUnitTestCase.assertSame(intType, resolve6(node, [intElement]));
     _listener.assertNoErrors();
   }
   void test_visitTypeName_noParameters_noArguments() {
     ClassElement classA = ElementFactory.classElement2("A", []);
-    TypeName typeName2 = ASTFactory.typeName(classA, []);
-    typeName2.type = null;
-    resolveNode(typeName2, [classA]);
-    JUnitTestCase.assertSame(classA.type, typeName2.type);
+    TypeName typeName = ASTFactory.typeName(classA, []);
+    typeName.type = null;
+    resolveNode(typeName, [classA]);
+    JUnitTestCase.assertSame(classA.type, typeName.type);
     _listener.assertNoErrors();
   }
   void test_visitTypeName_parameters_arguments() {
     ClassElement classA = ElementFactory.classElement2("A", ["E"]);
     ClassElement classB = ElementFactory.classElement2("B", []);
-    TypeName typeName2 = ASTFactory.typeName(classA, [ASTFactory.typeName(classB, [])]);
-    typeName2.type = null;
-    resolveNode(typeName2, [classA, classB]);
-    InterfaceType resultType = typeName2.type as InterfaceType;
+    TypeName typeName = ASTFactory.typeName(classA, [ASTFactory.typeName(classB, [])]);
+    typeName.type = null;
+    resolveNode(typeName, [classA, classB]);
+    InterfaceType resultType = typeName.type as InterfaceType;
     JUnitTestCase.assertSame(classA, resultType.element);
     List<Type2> resultArguments = resultType.typeArguments;
     EngineTestCase.assertLength(1, resultArguments);
@@ -2992,10 +2992,10 @@
   }
   void test_visitTypeName_parameters_noArguments() {
     ClassElement classA = ElementFactory.classElement2("A", ["E"]);
-    TypeName typeName2 = ASTFactory.typeName(classA, []);
-    typeName2.type = null;
-    resolveNode(typeName2, [classA]);
-    InterfaceType resultType = typeName2.type as InterfaceType;
+    TypeName typeName = ASTFactory.typeName(classA, []);
+    typeName.type = null;
+    resolveNode(typeName, [classA]);
+    InterfaceType resultType = typeName.type as InterfaceType;
     JUnitTestCase.assertSame(classA, resultType.element);
     List<Type2> resultArguments = resultType.typeArguments;
     EngineTestCase.assertLength(1, resultArguments);
@@ -3022,13 +3022,13 @@
    */
   void resolve(CatchClause node, InterfaceType exceptionType, InterfaceType stackTraceType, List<Element> definedElements) {
     resolveNode(node, definedElements);
-    SimpleIdentifier exceptionParameter2 = node.exceptionParameter;
-    if (exceptionParameter2 != null) {
-      JUnitTestCase.assertSame(exceptionType, exceptionParameter2.staticType);
+    SimpleIdentifier exceptionParameter = node.exceptionParameter;
+    if (exceptionParameter != null) {
+      JUnitTestCase.assertSame(exceptionType, exceptionParameter.staticType);
     }
-    SimpleIdentifier stackTraceParameter2 = node.stackTraceParameter;
-    if (stackTraceParameter2 != null) {
-      JUnitTestCase.assertSame(stackTraceType, stackTraceParameter2.staticType);
+    SimpleIdentifier stackTraceParameter = node.stackTraceParameter;
+    if (stackTraceParameter != null) {
+      JUnitTestCase.assertSame(stackTraceType, stackTraceParameter.staticType);
     }
   }
 
@@ -6404,16 +6404,16 @@
     return super.visitPrefixedIdentifier(node);
   }
   Object visitSimpleIdentifier(SimpleIdentifier node) {
-    ASTNode parent2 = node.parent;
-    if (parent2 is MethodInvocation && identical(node, ((parent2 as MethodInvocation)).methodName)) {
+    ASTNode parent = node.parent;
+    if (parent is MethodInvocation && identical(node, ((parent as MethodInvocation)).methodName)) {
       return null;
-    } else if (parent2 is RedirectingConstructorInvocation && identical(node, ((parent2 as RedirectingConstructorInvocation)).constructorName)) {
+    } else if (parent is RedirectingConstructorInvocation && identical(node, ((parent as RedirectingConstructorInvocation)).constructorName)) {
       return null;
-    } else if (parent2 is SuperConstructorInvocation && identical(node, ((parent2 as SuperConstructorInvocation)).constructorName)) {
+    } else if (parent is SuperConstructorInvocation && identical(node, ((parent as SuperConstructorInvocation)).constructorName)) {
       return null;
-    } else if (parent2 is ConstructorName && identical(node, ((parent2 as ConstructorName)).name)) {
+    } else if (parent is ConstructorName && identical(node, ((parent as ConstructorName)).name)) {
       return null;
-    } else if (parent2 is ConstructorFieldInitializer && identical(node, ((parent2 as ConstructorFieldInitializer)).fieldName)) {
+    } else if (parent is ConstructorFieldInitializer && identical(node, ((parent as ConstructorFieldInitializer)).fieldName)) {
       return null;
     } else if (node.element is PrefixElement) {
       return null;
@@ -6430,9 +6430,9 @@
   }
   String getFileName(ASTNode node) {
     if (node != null) {
-      ASTNode root2 = node.root;
-      if (root2 is CompilationUnit) {
-        CompilationUnit rootCU = (root2 as CompilationUnit);
+      ASTNode root = node.root;
+      if (root is CompilationUnit) {
+        CompilationUnit rootCU = (root as CompilationUnit);
         if (rootCU.element != null) {
           return rootCU.element.source.fullName;
         } else {
@@ -6634,9 +6634,9 @@
     _resolver = createResolver();
   }
   void test_lookUpMethodInInterfaces() {
-    InterfaceType intType2 = _typeProvider.intType;
+    InterfaceType intType = _typeProvider.intType;
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
-    MethodElement operator = ElementFactory.methodElement("[]", intType2, [intType2]);
+    MethodElement operator = ElementFactory.methodElement("[]", intType, [intType]);
     classA.methods = <MethodElement> [operator];
     ClassElementImpl classB = ElementFactory.classElement2("B", []);
     classB.interfaces = <InterfaceType> [classA.type];
@@ -6650,9 +6650,9 @@
     _listener.assertNoErrors();
   }
   void test_visitAssignmentExpression_compound() {
-    InterfaceType intType2 = _typeProvider.intType;
+    InterfaceType intType = _typeProvider.intType;
     SimpleIdentifier leftHandSide = ASTFactory.identifier3("a");
-    leftHandSide.staticType = intType2;
+    leftHandSide.staticType = intType;
     AssignmentExpression assignment = ASTFactory.assignmentExpression(leftHandSide, TokenType.PLUS_EQ, ASTFactory.integer(1));
     resolveNode(assignment, []);
     JUnitTestCase.assertSame(getMethod(_typeProvider.numType, "+"), assignment.element);
@@ -6665,12 +6665,12 @@
     _listener.assertNoErrors();
   }
   void test_visitBinaryExpression() {
-    InterfaceType numType2 = _typeProvider.numType;
+    InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier left = ASTFactory.identifier3("i");
-    left.staticType = numType2;
+    left.staticType = numType;
     BinaryExpression expression = ASTFactory.binaryExpression(left, TokenType.PLUS, ASTFactory.identifier3("j"));
     resolveNode(expression, []);
-    JUnitTestCase.assertEquals(getMethod(numType2, "+"), expression.element);
+    JUnitTestCase.assertEquals(getMethod(numType, "+"), expression.element);
     _listener.assertNoErrors();
   }
   void test_visitBreakStatement_withLabel() {
@@ -6724,14 +6724,14 @@
     _listener.assertNoErrors();
   }
   void test_visitFieldFormalParameter() {
-    InterfaceType intType2 = _typeProvider.intType;
+    InterfaceType intType = _typeProvider.intType;
     String fieldName = "f";
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
-    classA.fields = <FieldElement> [ElementFactory.fieldElement(fieldName, false, false, false, intType2)];
+    classA.fields = <FieldElement> [ElementFactory.fieldElement(fieldName, false, false, false, intType)];
     FieldFormalParameter parameter = ASTFactory.fieldFormalParameter2(fieldName);
     parameter.identifier.element = ElementFactory.fieldFormalParameter(parameter.identifier);
     resolveInClass(parameter, classA);
-    JUnitTestCase.assertSame(intType2, parameter.element.type);
+    JUnitTestCase.assertSame(intType, parameter.element.type);
   }
   void test_visitImportDirective_noCombinators_noPrefix() {
     ImportDirective directive = ASTFactory.importDirective2(null, null, []);
@@ -6750,8 +6750,8 @@
   }
   void test_visitIndexExpression_get() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
-    InterfaceType intType2 = _typeProvider.intType;
-    MethodElement getter = ElementFactory.methodElement("[]", intType2, [intType2]);
+    InterfaceType intType = _typeProvider.intType;
+    MethodElement getter = ElementFactory.methodElement("[]", intType, [intType]);
     classA.methods = <MethodElement> [getter];
     SimpleIdentifier array = ASTFactory.identifier3("a");
     array.staticType = classA.type;
@@ -6761,8 +6761,8 @@
   }
   void test_visitIndexExpression_set() {
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
-    InterfaceType intType2 = _typeProvider.intType;
-    MethodElement setter = ElementFactory.methodElement("[]=", intType2, [intType2]);
+    InterfaceType intType = _typeProvider.intType;
+    MethodElement setter = ElementFactory.methodElement("[]=", intType, [intType]);
     classA.methods = <MethodElement> [setter];
     SimpleIdentifier array = ASTFactory.identifier3("a");
     array.staticType = classA.type;
@@ -6812,13 +6812,13 @@
     _listener.assertNoErrors();
   }
   void test_visitMethodInvocation() {
-    InterfaceType numType2 = _typeProvider.numType;
+    InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier left = ASTFactory.identifier3("i");
-    left.staticType = numType2;
+    left.staticType = numType;
     String methodName = "abs";
     MethodInvocation invocation = ASTFactory.methodInvocation(left, methodName, []);
     resolveNode(invocation, []);
-    JUnitTestCase.assertSame(getMethod(numType2, methodName), invocation.methodName.element);
+    JUnitTestCase.assertSame(getMethod(numType, methodName), invocation.methodName.element);
     _listener.assertNoErrors();
   }
   void test_visitMethodInvocation_namedParameter() {
@@ -6838,25 +6838,25 @@
     _listener.assertNoErrors();
   }
   void test_visitPostfixExpression() {
-    InterfaceType numType2 = _typeProvider.numType;
+    InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier operand = ASTFactory.identifier3("i");
-    operand.staticType = numType2;
+    operand.staticType = numType;
     PostfixExpression expression = ASTFactory.postfixExpression(operand, TokenType.PLUS_PLUS);
     resolveNode(expression, []);
-    JUnitTestCase.assertEquals(getMethod(numType2, "+"), expression.element);
+    JUnitTestCase.assertEquals(getMethod(numType, "+"), expression.element);
     _listener.assertNoErrors();
   }
   void test_visitPrefixedIdentifier_dynamic() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     SimpleIdentifier target = ASTFactory.identifier3("a");
     VariableElementImpl variable = ElementFactory.localVariableElement(target);
-    variable.type = dynamicType2;
+    variable.type = dynamicType;
     target.element = variable;
-    target.staticType = dynamicType2;
-    PrefixedIdentifier identifier2 = ASTFactory.identifier(target, ASTFactory.identifier3("b"));
-    resolveNode(identifier2, []);
-    JUnitTestCase.assertNull(identifier2.element);
-    JUnitTestCase.assertNull(identifier2.identifier.element);
+    target.staticType = dynamicType;
+    PrefixedIdentifier identifier = ASTFactory.identifier(target, ASTFactory.identifier3("b"));
+    resolveNode(identifier, []);
+    JUnitTestCase.assertNull(identifier.element);
+    JUnitTestCase.assertNull(identifier.identifier.element);
     _listener.assertNoErrors();
   }
   void test_visitPrefixedIdentifier_nonDynamic() {
@@ -6869,19 +6869,19 @@
     variable.type = classA.type;
     target.element = variable;
     target.staticType = classA.type;
-    PrefixedIdentifier identifier2 = ASTFactory.identifier(target, ASTFactory.identifier3(getterName));
-    resolveNode(identifier2, []);
-    JUnitTestCase.assertSame(getter, identifier2.element);
-    JUnitTestCase.assertSame(getter, identifier2.identifier.element);
+    PrefixedIdentifier identifier = ASTFactory.identifier(target, ASTFactory.identifier3(getterName));
+    resolveNode(identifier, []);
+    JUnitTestCase.assertSame(getter, identifier.element);
+    JUnitTestCase.assertSame(getter, identifier.identifier.element);
     _listener.assertNoErrors();
   }
   void test_visitPrefixExpression() {
-    InterfaceType numType2 = _typeProvider.numType;
+    InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier operand = ASTFactory.identifier3("i");
-    operand.staticType = numType2;
+    operand.staticType = numType;
     PrefixExpression expression = ASTFactory.prefixExpression(TokenType.PLUS_PLUS, operand);
     resolveNode(expression, []);
-    JUnitTestCase.assertEquals(getMethod(numType2, "+"), expression.element);
+    JUnitTestCase.assertEquals(getMethod(numType, "+"), expression.element);
     _listener.assertNoErrors();
   }
   void test_visitPropertyAccess_getter_identifier() {
@@ -6923,11 +6923,11 @@
     _listener.assertNoErrors();
   }
   void test_visitSimpleIdentifier_classScope() {
-    InterfaceType doubleType2 = _typeProvider.doubleType;
+    InterfaceType doubleType = _typeProvider.doubleType;
     String fieldName = "NAN";
     SimpleIdentifier node = ASTFactory.identifier3(fieldName);
-    resolveInClass(node, doubleType2.element);
-    JUnitTestCase.assertEquals(getGetter(doubleType2, fieldName), node.element);
+    resolveInClass(node, doubleType.element);
+    JUnitTestCase.assertEquals(getGetter(doubleType, fieldName), node.element);
     _listener.assertNoErrors();
   }
   void test_visitSimpleIdentifier_lexicalScope() {
@@ -6937,18 +6937,18 @@
     _listener.assertNoErrors();
   }
   void test_visitSimpleIdentifier_lexicalScope_field_setter() {
-    InterfaceType intType2 = _typeProvider.intType;
+    InterfaceType intType = _typeProvider.intType;
     ClassElementImpl classA = ElementFactory.classElement2("A", []);
     String fieldName = "a";
-    FieldElement field = ElementFactory.fieldElement(fieldName, false, false, false, intType2);
+    FieldElement field = ElementFactory.fieldElement(fieldName, false, false, false, intType);
     classA.fields = <FieldElement> [field];
     classA.accessors = <PropertyAccessorElement> [field.getter, field.setter];
     SimpleIdentifier node = ASTFactory.identifier3(fieldName);
     ASTFactory.assignmentExpression(node, TokenType.EQ, ASTFactory.integer(0));
     resolveInClass(node, classA);
-    Element element2 = node.element;
-    EngineTestCase.assertInstanceOf(PropertyAccessorElement, element2);
-    JUnitTestCase.assertTrue(((element2 as PropertyAccessorElement)).isSetter());
+    Element element = node.element;
+    EngineTestCase.assertInstanceOf(PropertyAccessorElement, element);
+    JUnitTestCase.assertTrue(((element as PropertyAccessorElement)).isSetter());
     _listener.assertNoErrors();
   }
   void test_visitSuperConstructorInvocation() {
@@ -7301,19 +7301,19 @@
   void test_getType_enclosedOverride() {
     TypeOverrideManager manager = new TypeOverrideManager();
     LocalVariableElementImpl element = ElementFactory.localVariableElement2("v");
-    InterfaceType type2 = ElementFactory.classElement2("C", []).type;
+    InterfaceType type = ElementFactory.classElement2("C", []).type;
     manager.enterScope();
-    manager.setType(element, type2);
+    manager.setType(element, type);
     manager.enterScope();
-    JUnitTestCase.assertSame(type2, manager.getType(element));
+    JUnitTestCase.assertSame(type, manager.getType(element));
   }
   void test_getType_immediateOverride() {
     TypeOverrideManager manager = new TypeOverrideManager();
     LocalVariableElementImpl element = ElementFactory.localVariableElement2("v");
-    InterfaceType type2 = ElementFactory.classElement2("C", []).type;
+    InterfaceType type = ElementFactory.classElement2("C", []).type;
     manager.enterScope();
-    manager.setType(element, type2);
-    JUnitTestCase.assertSame(type2, manager.getType(element));
+    manager.setType(element, type);
+    JUnitTestCase.assertSame(type, manager.getType(element));
   }
   void test_getType_noOverride() {
     TypeOverrideManager manager = new TypeOverrideManager();
@@ -7997,7 +7997,7 @@
     verify([source]);
   }
   void test_newWithNonType() {
-    Source source = addSource(EngineTestCase.createSource(["var A = 0;", "void f() {", "  A a = new A();", "}"]));
+    Source source = addSource(EngineTestCase.createSource(["var A = 0;", "void f() {", "  var a = new A();", "}"]));
     resolve(source);
     assertErrors([StaticWarningCode.NEW_WITH_NON_TYPE]);
     verify([source]);
@@ -8109,6 +8109,12 @@
     assertErrors([StaticWarningCode.NON_VOID_RETURN_FOR_SETTER]);
     verify([source]);
   }
+  void test_notAType() {
+    Source source = addSource(EngineTestCase.createSource(["f() {}", "main() {", "  f v = null;", "}"]));
+    resolve(source);
+    assertErrors([StaticWarningCode.NOT_A_TYPE]);
+    verify([source]);
+  }
   void test_notEnoughRequiredArguments() {
     Source source = addSource(EngineTestCase.createSource(["f(int a, String b) {}", "main() {", "  f();", "}"]));
     resolve(source);
@@ -8619,6 +8625,10 @@
         final __test = new StaticWarningCodeTest();
         runJUnitTest(__test, __test.test_nonVoidReturnForSetter_method);
       });
+      _ut.test('test_notAType', () {
+        final __test = new StaticWarningCodeTest();
+        runJUnitTest(__test, __test.test_notAType);
+      });
       _ut.test('test_notEnoughRequiredArguments', () {
         final __test = new StaticWarningCodeTest();
         runJUnitTest(__test, __test.test_notEnoughRequiredArguments);
@@ -8969,17 +8979,17 @@
    */
   static AnalysisContextImpl contextWithCore() {
     AnalysisContextImpl sdkContext = DirectoryBasedDartSdk.defaultSdk.context as AnalysisContextImpl;
-    SourceFactory sourceFactory2 = sdkContext.sourceFactory;
+    SourceFactory sourceFactory = sdkContext.sourceFactory;
     TestTypeProvider provider = new TestTypeProvider();
     CompilationUnitElementImpl coreUnit = new CompilationUnitElementImpl("core.dart");
-    Source coreSource = sourceFactory2.forUri(DartSdk.DART_CORE);
+    Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE);
     sdkContext.setContents(coreSource, "");
     coreUnit.source = coreSource;
     coreUnit.types = <ClassElement> [provider.boolType.element, provider.doubleType.element, provider.functionType.element, provider.intType.element, provider.listType.element, provider.mapType.element, provider.numType.element, provider.objectType.element, provider.stackTraceType.element, provider.stringType.element, provider.typeType.element];
     LibraryElementImpl coreLibrary = new LibraryElementImpl(sdkContext, ASTFactory.libraryIdentifier2(["dart", "core"]));
     coreLibrary.definingCompilationUnit = coreUnit;
     CompilationUnitElementImpl htmlUnit = new CompilationUnitElementImpl("html_dartium.dart");
-    Source htmlSource = sourceFactory2.forUri(DartSdk.DART_HTML);
+    Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML);
     sdkContext.setContents(htmlSource, "");
     htmlUnit.source = htmlSource;
     ClassElementImpl elementElement = ElementFactory.classElement2("Element", []);
@@ -8999,8 +9009,8 @@
     elementMap[htmlSource] = htmlLibrary;
     sdkContext.recordLibraryElements(elementMap);
     AnalysisContextImpl context = new DelegatingAnalysisContextImpl();
-    sourceFactory2 = new SourceFactory.con2([new DartUriResolver(sdkContext.sourceFactory.dartSdk), new FileUriResolver()]);
-    context.sourceFactory = sourceFactory2;
+    sourceFactory = new SourceFactory.con2([new DartUriResolver(sdkContext.sourceFactory.dartSdk), new FileUriResolver()]);
+    context.sourceFactory = sourceFactory;
     return context;
   }
 }
@@ -9032,10 +9042,10 @@
       Element element = scope.lookup(ASTFactory.identifier3(typeNameB), importingLibrary);
       errorListener.assertErrors2([CompileTimeErrorCode.AMBIGUOUS_IMPORT]);
       EngineTestCase.assertInstanceOf(MultiplyDefinedElement, element);
-      List<Element> conflictingElements2 = ((element as MultiplyDefinedElement)).conflictingElements;
-      JUnitTestCase.assertEquals(typeB1, conflictingElements2[0]);
-      JUnitTestCase.assertEquals(typeB2, conflictingElements2[1]);
-      JUnitTestCase.assertEquals(2, conflictingElements2.length);
+      List<Element> conflictingElements = ((element as MultiplyDefinedElement)).conflictingElements;
+      JUnitTestCase.assertEquals(typeB1, conflictingElements[0]);
+      JUnitTestCase.assertEquals(typeB2, conflictingElements[1]);
+      JUnitTestCase.assertEquals(2, conflictingElements.length);
     }
     {
       GatheringErrorListener errorListener = new GatheringErrorListener();
@@ -9224,11 +9234,11 @@
   }
   Object visitImportDirective(ImportDirective node) {
     checkResolved2(node, node.element, ImportElement);
-    SimpleIdentifier prefix2 = node.prefix;
-    if (prefix2 == null) {
+    SimpleIdentifier prefix = node.prefix;
+    if (prefix == null) {
       return null;
     }
-    return checkResolved2(prefix2, prefix2.element, PrefixElement);
+    return checkResolved2(prefix, prefix.element, PrefixElement);
   }
   Object visitIndexExpression(IndexExpression node) {
     node.visitChildren(this);
@@ -9275,9 +9285,9 @@
   }
   String getFileName(ASTNode node) {
     if (node != null) {
-      ASTNode root2 = node.root;
-      if (root2 is CompilationUnit) {
-        CompilationUnit rootCU = (root2 as CompilationUnit);
+      ASTNode root = node.root;
+      if (root is CompilationUnit) {
+        CompilationUnit rootCU = (root as CompilationUnit);
         if (rootCU.element != null) {
           return rootCU.element.source.fullName;
         } else {
@@ -9411,19 +9421,19 @@
     _listener.assertNoErrors();
   }
   void test_visitAssignmentExpression_compound() {
-    InterfaceType numType2 = _typeProvider.numType;
+    InterfaceType numType = _typeProvider.numType;
     SimpleIdentifier identifier = resolvedVariable(_typeProvider.intType, "i");
     AssignmentExpression node = ASTFactory.assignmentExpression(identifier, TokenType.PLUS_EQ, resolvedInteger(1));
-    MethodElement plusMethod = getMethod(numType2, "+");
+    MethodElement plusMethod = getMethod(numType, "+");
     node.staticElement = plusMethod;
     node.element = plusMethod;
-    JUnitTestCase.assertSame(numType2, analyze(node));
+    JUnitTestCase.assertSame(numType, analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitAssignmentExpression_simple() {
-    InterfaceType intType2 = _typeProvider.intType;
-    Expression node = ASTFactory.assignmentExpression(resolvedVariable(intType2, "i"), TokenType.EQ, resolvedInteger(0));
-    JUnitTestCase.assertSame(intType2, analyze(node));
+    InterfaceType intType = _typeProvider.intType;
+    Expression node = ASTFactory.assignmentExpression(resolvedVariable(intType, "i"), TokenType.EQ, resolvedInteger(0));
+    JUnitTestCase.assertSame(intType, analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitBinaryExpression_equals() {
@@ -9501,181 +9511,181 @@
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_named_block() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p1 = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p1"), resolvedInteger(0));
-    setType(p1, dynamicType2);
+    setType(p1, dynamicType);
     FormalParameter p2 = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
-    setType(p2, dynamicType2);
+    setType(p2, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody([]));
     analyze3(p1);
     analyze3(p2);
     Type2 resultType = analyze(node);
     Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
-    expectedNamedTypes["p1"] = dynamicType2;
-    expectedNamedTypes["p2"] = dynamicType2;
-    assertFunctionType(dynamicType2, null, null, expectedNamedTypes, resultType);
+    expectedNamedTypes["p1"] = dynamicType;
+    expectedNamedTypes["p2"] = dynamicType;
+    assertFunctionType(dynamicType, null, null, expectedNamedTypes, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_named_expression() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p"), resolvedInteger(0));
-    setType(p, dynamicType2);
+    setType(p, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
     analyze3(p);
     Type2 resultType = analyze(node);
     Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
-    expectedNamedTypes["p"] = dynamicType2;
+    expectedNamedTypes["p"] = dynamicType;
     assertFunctionType(_typeProvider.intType, null, null, expectedNamedTypes, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_normal_block() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p1 = ASTFactory.simpleFormalParameter3("p1");
-    setType(p1, dynamicType2);
+    setType(p1, dynamicType);
     FormalParameter p2 = ASTFactory.simpleFormalParameter3("p2");
-    setType(p2, dynamicType2);
+    setType(p2, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody([]));
     analyze3(p1);
     analyze3(p2);
     Type2 resultType = analyze(node);
-    assertFunctionType(dynamicType2, <Type2> [dynamicType2, dynamicType2], null, null, resultType);
+    assertFunctionType(dynamicType, <Type2> [dynamicType, dynamicType], null, null, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_normal_expression() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p = ASTFactory.simpleFormalParameter3("p");
-    setType(p, dynamicType2);
+    setType(p, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
     analyze3(p);
     Type2 resultType = analyze(node);
-    assertFunctionType(_typeProvider.intType, <Type2> [dynamicType2], null, null, resultType);
+    assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], null, null, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_normalAndNamed_block() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p1 = ASTFactory.simpleFormalParameter3("p1");
-    setType(p1, dynamicType2);
+    setType(p1, dynamicType);
     FormalParameter p2 = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
-    setType(p2, dynamicType2);
+    setType(p2, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody([]));
     analyze3(p2);
     Type2 resultType = analyze(node);
     Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
-    expectedNamedTypes["p2"] = dynamicType2;
-    assertFunctionType(dynamicType2, <Type2> [dynamicType2], null, expectedNamedTypes, resultType);
+    expectedNamedTypes["p2"] = dynamicType;
+    assertFunctionType(dynamicType, <Type2> [dynamicType], null, expectedNamedTypes, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_normalAndNamed_expression() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p1 = ASTFactory.simpleFormalParameter3("p1");
-    setType(p1, dynamicType2);
+    setType(p1, dynamicType);
     FormalParameter p2 = ASTFactory.namedFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
-    setType(p2, dynamicType2);
+    setType(p2, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
     analyze3(p2);
     Type2 resultType = analyze(node);
     Map<String, Type2> expectedNamedTypes = new Map<String, Type2>();
-    expectedNamedTypes["p2"] = dynamicType2;
-    assertFunctionType(_typeProvider.intType, <Type2> [dynamicType2], null, expectedNamedTypes, resultType);
+    expectedNamedTypes["p2"] = dynamicType;
+    assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], null, expectedNamedTypes, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_normalAndPositional_block() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p1 = ASTFactory.simpleFormalParameter3("p1");
-    setType(p1, dynamicType2);
+    setType(p1, dynamicType);
     FormalParameter p2 = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
-    setType(p2, dynamicType2);
+    setType(p2, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody([]));
     analyze3(p1);
     analyze3(p2);
     Type2 resultType = analyze(node);
-    assertFunctionType(dynamicType2, <Type2> [dynamicType2], <Type2> [dynamicType2], null, resultType);
+    assertFunctionType(dynamicType, <Type2> [dynamicType], <Type2> [dynamicType], null, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_normalAndPositional_expression() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p1 = ASTFactory.simpleFormalParameter3("p1");
-    setType(p1, dynamicType2);
+    setType(p1, dynamicType);
     FormalParameter p2 = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
-    setType(p2, dynamicType2);
+    setType(p2, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
     analyze3(p1);
     analyze3(p2);
     Type2 resultType = analyze(node);
-    assertFunctionType(_typeProvider.intType, <Type2> [dynamicType2], <Type2> [dynamicType2], null, resultType);
+    assertFunctionType(_typeProvider.intType, <Type2> [dynamicType], <Type2> [dynamicType], null, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_positional_block() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p1 = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p1"), resolvedInteger(0));
-    setType(p1, dynamicType2);
+    setType(p1, dynamicType);
     FormalParameter p2 = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p2"), resolvedInteger(0));
-    setType(p2, dynamicType2);
+    setType(p2, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p1, p2]), ASTFactory.blockFunctionBody([]));
     analyze3(p1);
     analyze3(p2);
     Type2 resultType = analyze(node);
-    assertFunctionType(dynamicType2, null, <Type2> [dynamicType2, dynamicType2], null, resultType);
+    assertFunctionType(dynamicType, null, <Type2> [dynamicType, dynamicType], null, resultType);
     _listener.assertNoErrors();
   }
   void test_visitFunctionExpression_positional_expression() {
-    Type2 dynamicType2 = _typeProvider.dynamicType;
+    Type2 dynamicType = _typeProvider.dynamicType;
     FormalParameter p = ASTFactory.positionalFormalParameter(ASTFactory.simpleFormalParameter3("p"), resolvedInteger(0));
-    setType(p, dynamicType2);
+    setType(p, dynamicType);
     FunctionExpression node = resolvedFunctionExpression(ASTFactory.formalParameterList([p]), ASTFactory.expressionFunctionBody(resolvedInteger(0)));
     analyze3(p);
     Type2 resultType = analyze(node);
-    assertFunctionType(_typeProvider.intType, null, <Type2> [dynamicType2], null, resultType);
+    assertFunctionType(_typeProvider.intType, null, <Type2> [dynamicType], null, resultType);
     _listener.assertNoErrors();
   }
   void test_visitIndexExpression_getter() {
-    InterfaceType listType2 = _typeProvider.listType;
-    SimpleIdentifier identifier = resolvedVariable(listType2, "a");
+    InterfaceType listType = _typeProvider.listType;
+    SimpleIdentifier identifier = resolvedVariable(listType, "a");
     IndexExpression node = ASTFactory.indexExpression(identifier, resolvedInteger(2));
-    MethodElement indexMethod = listType2.element.methods[0];
+    MethodElement indexMethod = listType.element.methods[0];
     node.staticElement = indexMethod;
     node.element = indexMethod;
-    JUnitTestCase.assertSame(listType2.typeArguments[0], analyze(node));
+    JUnitTestCase.assertSame(listType.typeArguments[0], analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitIndexExpression_setter() {
-    InterfaceType listType2 = _typeProvider.listType;
-    SimpleIdentifier identifier = resolvedVariable(listType2, "a");
+    InterfaceType listType = _typeProvider.listType;
+    SimpleIdentifier identifier = resolvedVariable(listType, "a");
     IndexExpression node = ASTFactory.indexExpression(identifier, resolvedInteger(2));
-    MethodElement indexMethod = listType2.element.methods[1];
+    MethodElement indexMethod = listType.element.methods[1];
     node.staticElement = indexMethod;
     node.element = indexMethod;
     ASTFactory.assignmentExpression(node, TokenType.EQ, ASTFactory.integer(0));
-    JUnitTestCase.assertSame(listType2.typeArguments[0], analyze(node));
+    JUnitTestCase.assertSame(listType.typeArguments[0], analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitIndexExpression_typeParameters() {
-    InterfaceType intType2 = _typeProvider.intType;
-    InterfaceType listType2 = _typeProvider.listType;
-    MethodElement methodElement = getMethod(listType2, "[]");
+    InterfaceType intType = _typeProvider.intType;
+    InterfaceType listType = _typeProvider.listType;
+    MethodElement methodElement = getMethod(listType, "[]");
     SimpleIdentifier identifier = ASTFactory.identifier3("list");
-    InterfaceType listOfIntType = listType2.substitute5(<Type2> [intType2]);
+    InterfaceType listOfIntType = listType.substitute5(<Type2> [intType]);
     identifier.staticType = listOfIntType;
-    IndexExpression indexExpression2 = ASTFactory.indexExpression(identifier, ASTFactory.integer(0));
+    IndexExpression indexExpression = ASTFactory.indexExpression(identifier, ASTFactory.integer(0));
     MethodElement indexMethod = MethodMember.from(methodElement, listOfIntType);
-    indexExpression2.staticElement = indexMethod;
-    indexExpression2.element = indexMethod;
-    JUnitTestCase.assertSame(intType2, analyze(indexExpression2));
+    indexExpression.staticElement = indexMethod;
+    indexExpression.element = indexMethod;
+    JUnitTestCase.assertSame(intType, analyze(indexExpression));
     _listener.assertNoErrors();
   }
   void test_visitIndexExpression_typeParameters_inSetterContext() {
-    InterfaceType intType2 = _typeProvider.intType;
-    InterfaceType listType2 = _typeProvider.listType;
-    MethodElement methodElement = getMethod(listType2, "[]=");
+    InterfaceType intType = _typeProvider.intType;
+    InterfaceType listType = _typeProvider.listType;
+    MethodElement methodElement = getMethod(listType, "[]=");
     SimpleIdentifier identifier = ASTFactory.identifier3("list");
-    InterfaceType listOfIntType = listType2.substitute5(<Type2> [intType2]);
+    InterfaceType listOfIntType = listType.substitute5(<Type2> [intType]);
     identifier.staticType = listOfIntType;
-    IndexExpression indexExpression2 = ASTFactory.indexExpression(identifier, ASTFactory.integer(0));
+    IndexExpression indexExpression = ASTFactory.indexExpression(identifier, ASTFactory.integer(0));
     MethodElement indexMethod = MethodMember.from(methodElement, listOfIntType);
-    indexExpression2.staticElement = indexMethod;
-    indexExpression2.element = indexMethod;
-    ASTFactory.assignmentExpression(indexExpression2, TokenType.EQ, ASTFactory.integer(0));
-    JUnitTestCase.assertSame(intType2, analyze(indexExpression2));
+    indexExpression.staticElement = indexMethod;
+    indexExpression.element = indexMethod;
+    ASTFactory.assignmentExpression(indexExpression, TokenType.EQ, ASTFactory.integer(0));
+    JUnitTestCase.assertSame(intType, analyze(indexExpression));
     _listener.assertNoErrors();
   }
   void test_visitInstanceCreationExpression_named() {
@@ -9699,9 +9709,9 @@
     FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor);
     constructorType.returnType = elementC.type;
     constructor.type = constructorType;
-    TypeName typeName2 = ASTFactory.typeName(elementC, [ASTFactory.typeName(elementI, [])]);
-    typeName2.type = elementC.type.substitute5(<Type2> [elementI.type]);
-    InstanceCreationExpression node = ASTFactory.instanceCreationExpression2(null, typeName2, []);
+    TypeName typeName = ASTFactory.typeName(elementC, [ASTFactory.typeName(elementI, [])]);
+    typeName.type = elementC.type.substitute5(<Type2> [elementI.type]);
+    InstanceCreationExpression node = ASTFactory.instanceCreationExpression2(null, typeName, []);
     node.element = constructor;
     InterfaceType interfaceType = analyze(node) as InterfaceType;
     List<Type2> typeArgs = interfaceType.typeArguments;
@@ -9786,20 +9796,20 @@
     _listener.assertNoErrors();
   }
   void test_visitPrefixedIdentifier_getter() {
-    Type2 boolType2 = _typeProvider.boolType;
-    PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType2);
+    Type2 boolType = _typeProvider.boolType;
+    PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType);
     PrefixedIdentifier node = ASTFactory.identifier5("a", "b");
     node.identifier.element = getter;
-    JUnitTestCase.assertSame(boolType2, analyze(node));
+    JUnitTestCase.assertSame(boolType, analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitPrefixedIdentifier_setter() {
-    Type2 boolType2 = _typeProvider.boolType;
-    FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType2);
-    PropertyAccessorElement setter2 = field.setter;
+    Type2 boolType = _typeProvider.boolType;
+    FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType);
+    PropertyAccessorElement setter = field.setter;
     PrefixedIdentifier node = ASTFactory.identifier5("a", "b");
-    node.identifier.element = setter2;
-    JUnitTestCase.assertSame(boolType2, analyze(node));
+    node.identifier.element = setter;
+    JUnitTestCase.assertSame(boolType, analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitPrefixedIdentifier_variable() {
@@ -9853,20 +9863,20 @@
     _listener.assertNoErrors();
   }
   void test_visitPropertyAccess_getter() {
-    Type2 boolType2 = _typeProvider.boolType;
-    PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType2);
+    Type2 boolType = _typeProvider.boolType;
+    PropertyAccessorElementImpl getter = ElementFactory.getterElement("b", false, boolType);
     PropertyAccess node = ASTFactory.propertyAccess2(ASTFactory.identifier3("a"), "b");
     node.propertyName.element = getter;
-    JUnitTestCase.assertSame(boolType2, analyze(node));
+    JUnitTestCase.assertSame(boolType, analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitPropertyAccess_setter() {
-    Type2 boolType2 = _typeProvider.boolType;
-    FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType2);
-    PropertyAccessorElement setter2 = field.setter;
+    Type2 boolType = _typeProvider.boolType;
+    FieldElementImpl field = ElementFactory.fieldElement("b", false, false, false, boolType);
+    PropertyAccessorElement setter = field.setter;
     PropertyAccess node = ASTFactory.propertyAccess2(ASTFactory.identifier3("a"), "b");
-    node.propertyName.element = setter2;
-    JUnitTestCase.assertSame(boolType2, analyze(node));
+    node.propertyName.element = setter;
+    JUnitTestCase.assertSame(boolType, analyze(node));
     _listener.assertNoErrors();
   }
   void test_visitSimpleStringLiteral() {
@@ -9985,10 +9995,10 @@
     JUnitTestCase.assertEquals(expectedType.displayName, actualType.displayName);
     JUnitTestCase.assertEquals(expectedType.element, actualType.element);
     List<Type2> expectedArguments = expectedType.typeArguments;
-    int length2 = expectedArguments.length;
+    int length = expectedArguments.length;
     List<Type2> actualArguments = actualType.typeArguments;
-    EngineTestCase.assertLength(length2, actualArguments);
-    for (int i = 0; i < length2; i++) {
+    EngineTestCase.assertLength(length, actualArguments);
+    for (int i = 0; i < length; i++) {
       assertType2(expectedArguments[i], actualArguments[i]);
     }
   }
@@ -10107,13 +10117,13 @@
    * @param type the new type of the given parameter
    */
   void setType(FormalParameter parameter, Type2 type2) {
-    SimpleIdentifier identifier2 = parameter.identifier;
-    Element element2 = identifier2.element;
-    if (element2 is! ParameterElement) {
-      element2 = new ParameterElementImpl(identifier2);
-      identifier2.element = element2;
+    SimpleIdentifier identifier = parameter.identifier;
+    Element element = identifier.element;
+    if (element is! ParameterElement) {
+      element = new ParameterElementImpl(identifier);
+      identifier.element = element;
     }
-    ((element2 as ParameterElementImpl)).type = type2;
+    ((element as ParameterElementImpl)).type = type2;
   }
   static dartSuite() {
     _ut.group('StaticTypeAnalyzerTest', () {
@@ -10537,9 +10547,9 @@
    */
   void assertTypes(CompilationUnitElement unit, List<String> typeNames) {
     JUnitTestCase.assertNotNull(unit);
-    List<ClassElement> types2 = unit.types;
-    EngineTestCase.assertLength(typeNames.length, types2);
-    for (ClassElement type in types2) {
+    List<ClassElement> types = unit.types;
+    EngineTestCase.assertLength(typeNames.length, types);
+    for (ClassElement type in types) {
       JUnitTestCase.assertNotNull(type);
       String actualTypeName = type.displayName;
       bool wasExpected = false;
@@ -11035,25 +11045,25 @@
     LibraryElement library = resolve(source);
     JUnitTestCase.assertNotNull(library);
     ClassElement classElement = library.definingCompilationUnit.types[0];
-    List<ParameterElement> parameters2 = classElement.methods[1].parameters;
+    List<ParameterElement> parameters = classElement.methods[1].parameters;
     CompilationUnit unit = resolveCompilationUnit(source, library);
     JUnitTestCase.assertNotNull(unit);
     ClassDeclaration classDeclaration = unit.declarations[0] as ClassDeclaration;
     MethodDeclaration methodDeclaration = (classDeclaration.members[0] as MethodDeclaration);
-    Block block2 = ((methodDeclaration.body as BlockFunctionBody)).block;
-    ExpressionStatement statement = block2.statements[0] as ExpressionStatement;
+    Block block = ((methodDeclaration.body as BlockFunctionBody)).block;
+    ExpressionStatement statement = block.statements[0] as ExpressionStatement;
     MethodInvocation invocation = statement.expression as MethodInvocation;
-    NodeList<Expression> arguments2 = invocation.argumentList.arguments;
-    int argumentCount = arguments2.length;
+    NodeList<Expression> arguments = invocation.argumentList.arguments;
+    int argumentCount = arguments.length;
     JUnitTestCase.assertEquals(indices.length, argumentCount);
     for (int i = 0; i < argumentCount; i++) {
-      Expression argument = arguments2[i];
+      Expression argument = arguments[i];
       ParameterElement element = argument.staticParameterElement;
       int index = indices[i];
       if (index < 0) {
         JUnitTestCase.assertNull(element);
       } else {
-        JUnitTestCase.assertSame(parameters2[index], element);
+        JUnitTestCase.assertSame(parameters[index], element);
       }
     }
   }
diff --git a/pkg/analyzer_experimental/test/generated/scanner_test.dart b/pkg/analyzer_experimental/test/generated/scanner_test.dart
index 0484f0d..e9ff970 100644
--- a/pkg/analyzer_experimental/test/generated/scanner_test.dart
+++ b/pkg/analyzer_experimental/test/generated/scanner_test.dart
@@ -16,18 +16,18 @@
     int keywordCount = keywords.length;
     List<String> textToTest = new List<String>(keywordCount * 3);
     for (int i = 0; i < keywordCount; i++) {
-      String syntax2 = keywords[i].syntax;
-      textToTest[i] = syntax2;
-      textToTest[i + keywordCount] = "${syntax2}x";
-      textToTest[i + keywordCount * 2] = syntax2.substring(0, syntax2.length - 1);
+      String syntax = keywords[i].syntax;
+      textToTest[i] = syntax;
+      textToTest[i + keywordCount] = "${syntax}x";
+      textToTest[i + keywordCount * 2] = syntax.substring(0, syntax.length - 1);
     }
     KeywordState firstState = KeywordState.KEYWORD_STATE;
     for (int i = 0; i < textToTest.length; i++) {
       String text = textToTest[i];
       int index = 0;
-      int length2 = text.length;
+      int length = text.length;
       KeywordState state = firstState;
-      while (index < length2 && state != null) {
+      while (index < length && state != null) {
         state = state.next(text.codeUnitAt(index));
         index++;
       }
@@ -805,10 +805,10 @@
     StringScanner scanner = new StringScanner(null, "a", listener);
     scanner.setSourceStart(3, 9, offsetDelta);
     scanner.tokenize();
-    List<int> lineStarts2 = scanner.lineStarts;
-    JUnitTestCase.assertNotNull(lineStarts2);
-    JUnitTestCase.assertEquals(3, lineStarts2.length);
-    JUnitTestCase.assertEquals(33, lineStarts2[2]);
+    List<int> lineStarts = scanner.lineStarts;
+    JUnitTestCase.assertNotNull(lineStarts);
+    JUnitTestCase.assertEquals(3, lineStarts.length);
+    JUnitTestCase.assertEquals(33, lineStarts[2]);
   }
   Token scan(String source, GatheringErrorListener listener) {
     StringScanner scanner = new StringScanner(null, source, listener);
@@ -1499,8 +1499,8 @@
     Token currentToken = token;
     while (currentToken != null && currentToken.type != TokenType.EOF) {
       validateStream(builder, currentToken.precedingComments);
-      TokenType type2 = currentToken.type;
-      if (identical(type2, TokenType.OPEN_CURLY_BRACKET) || identical(type2, TokenType.OPEN_PAREN) || identical(type2, TokenType.OPEN_SQUARE_BRACKET) || identical(type2, TokenType.STRING_INTERPOLATION_EXPRESSION)) {
+      TokenType type = currentToken.type;
+      if (identical(type, TokenType.OPEN_CURLY_BRACKET) || identical(type, TokenType.OPEN_PAREN) || identical(type, TokenType.OPEN_SQUARE_BRACKET) || identical(type, TokenType.STRING_INTERPOLATION_EXPRESSION)) {
         if (currentToken is! BeginToken) {
           builder.append("\r\nExpected BeginToken, found ");
           builder.append(currentToken.runtimeType.toString());
@@ -1939,12 +1939,12 @@
   }
   void test_startAndEnd() {
     Token token = scan2("a");
-    Token previous2 = token.previous;
-    JUnitTestCase.assertEquals(token, previous2.next);
-    JUnitTestCase.assertEquals(previous2, previous2.previous);
-    Token next2 = token.next;
-    JUnitTestCase.assertEquals(next2, next2.next);
-    JUnitTestCase.assertEquals(token, next2.previous);
+    Token previous = token.previous;
+    JUnitTestCase.assertEquals(token, previous.next);
+    JUnitTestCase.assertEquals(previous, previous.previous);
+    Token next = token.next;
+    JUnitTestCase.assertEquals(next, next.next);
+    JUnitTestCase.assertEquals(token, next.previous);
   }
   void test_string_multi_double() {
     assertToken(TokenType.STRING, "\"\"\"multi-line\nstring\"\"\"");
@@ -2068,18 +2068,18 @@
     JUnitTestCase.assertEquals(0, token.offset);
     JUnitTestCase.assertEquals(source.length, token.length);
     JUnitTestCase.assertEquals(source, token.lexeme);
-    Object value2 = token.value();
-    JUnitTestCase.assertTrue(value2 is Keyword);
-    JUnitTestCase.assertEquals(source, ((value2 as Keyword)).syntax);
+    Object value = token.value();
+    JUnitTestCase.assertTrue(value is Keyword);
+    JUnitTestCase.assertEquals(source, ((value as Keyword)).syntax);
     token = scan2(" ${source} ");
     JUnitTestCase.assertNotNull(token);
     JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type);
     JUnitTestCase.assertEquals(1, token.offset);
     JUnitTestCase.assertEquals(source.length, token.length);
     JUnitTestCase.assertEquals(source, token.lexeme);
-    value2 = token.value();
-    JUnitTestCase.assertTrue(value2 is Keyword);
-    JUnitTestCase.assertEquals(source, ((value2 as Keyword)).syntax);
+    value = token.value();
+    JUnitTestCase.assertTrue(value is Keyword);
+    JUnitTestCase.assertEquals(source, ((value as Keyword)).syntax);
     JUnitTestCase.assertEquals(TokenType.EOF, token.next.type);
   }
   void assertLineInfo(String source, List<AbstractScannerTest_ExpectedLocation> expectedLocations) {
diff --git a/pkg/analyzer_experimental/test/generated/test_support.dart b/pkg/analyzer_experimental/test/generated/test_support.dart
index e156318..ea44668 100644
--- a/pkg/analyzer_experimental/test/generated/test_support.dart
+++ b/pkg/analyzer_experimental/test/generated/test_support.dart
@@ -316,15 +316,15 @@
     writer.print(expectedErrors.length);
     writer.print(" errors:");
     for (AnalysisError error in expectedErrors) {
-      Source source2 = error.source;
-      LineInfo lineInfo = _lineInfoMap[source2];
+      Source source = error.source;
+      LineInfo lineInfo = _lineInfoMap[source];
       writer.newLine();
       if (lineInfo == null) {
-        int offset2 = error.offset;
-        writer.printf("  %s %s (%d..%d)", [source2 == null ? "" : source2.shortName, error.errorCode, offset2, offset2 + error.length]);
+        int offset = error.offset;
+        writer.printf("  %s %s (%d..%d)", [source == null ? "" : source.shortName, error.errorCode, offset, offset + error.length]);
       } else {
         LineInfo_Location location = lineInfo.getLocation(error.offset);
-        writer.printf("  %s %s (%d, %d/%d)", [source2 == null ? "" : source2.shortName, error.errorCode, location.lineNumber, location.columnNumber, error.length]);
+        writer.printf("  %s %s (%d, %d/%d)", [source == null ? "" : source.shortName, error.errorCode, location.lineNumber, location.columnNumber, error.length]);
       }
     }
     writer.newLine();
@@ -332,15 +332,15 @@
     writer.print(_errors.length);
     writer.print(" errors:");
     for (AnalysisError error in _errors) {
-      Source source3 = error.source;
-      LineInfo lineInfo = _lineInfoMap[source3];
+      Source source = error.source;
+      LineInfo lineInfo = _lineInfoMap[source];
       writer.newLine();
       if (lineInfo == null) {
-        int offset3 = error.offset;
-        writer.printf("  %s %s (%d..%d): %s", [source3 == null ? "" : source3.shortName, error.errorCode, offset3, offset3 + error.length, error.message]);
+        int offset = error.offset;
+        writer.printf("  %s %s (%d..%d): %s", [source == null ? "" : source.shortName, error.errorCode, offset, offset + error.length, error.message]);
       } else {
         LineInfo_Location location = lineInfo.getLocation(error.offset);
-        writer.printf("  %s %s (%d, %d/%d): %s", [source3 == null ? "" : source3.shortName, error.errorCode, location.lineNumber, location.columnNumber, error.length, error.message]);
+        writer.printf("  %s %s (%d, %d/%d): %s", [source == null ? "" : source.shortName, error.errorCode, location.lineNumber, location.columnNumber, error.length, error.message]);
       }
     }
     JUnitTestCase.fail(writer.toString());
@@ -388,6 +388,28 @@
   }
 
   /**
+   * Assert that the given array is non-{@code null} and contains the expected elements. The
+   * elements can appear in any order.
+   * @param array the array being tested
+   * @param expectedElements the expected elements
+   * @throws AssertionFailedError if the array is {@code null} or does not contain the expected
+   * elements
+   */
+  static void assertContains(List<Object> array, List<Object> expectedElements) {
+    int expectedSize = expectedElements.length;
+    if (array == null) {
+      JUnitTestCase.fail("Expected array of length ${expectedSize}; found null");
+    }
+    if (array.length != expectedSize) {
+      JUnitTestCase.fail("Expected array of length ${expectedSize}; contained ${array.length} elements");
+    }
+    List<bool> found = new List<bool>.filled(expectedSize, false);
+    for (int i = 0; i < expectedSize; i++) {
+      assertContains2(array, found, expectedElements[i]);
+    }
+  }
+
+  /**
    * Assert that the array of actual values contain exactly the same values as those in the array of
    * expected value, with the exception that the order of the elements is not required to be the
    * same.
@@ -457,7 +479,7 @@
     if (list.length != expectedSize) {
       JUnitTestCase.fail("Expected list of size ${expectedSize}; contained ${list.length} elements");
     }
-    for (int i = 0; i < expectedElements.length; i++) {
+    for (int i = 0; i < expectedSize; i++) {
       Object element = list[i];
       Object expectedElement = expectedElements[i];
       if (!element == expectedElement) {
@@ -481,7 +503,7 @@
     if (array.length != expectedSize) {
       JUnitTestCase.fail("Expected array of size ${expectedSize}; contained ${array.length} elements");
     }
-    for (int i = 0; i < expectedElements.length; i++) {
+    for (int i = 0; i < expectedSize; i++) {
       Object element = array[i];
       Object expectedElement = expectedElements[i];
       if (!element == expectedElement) {
@@ -504,7 +526,7 @@
     if (set.length != expectedSize) {
       JUnitTestCase.fail("Expected list of size ${expectedSize}; contained ${set.length} elements");
     }
-    for (int i = 0; i < expectedElements.length; i++) {
+    for (int i = 0; i < expectedSize; i++) {
       Object expectedElement = expectedElements[i];
       if (!set.contains(expectedElement)) {
         JUnitTestCase.fail("Expected ${expectedElement} in set${set}");
@@ -616,6 +638,29 @@
     }
     return writer.toString();
   }
+  static void assertContains2(List<Object> array, List<bool> found, Object element) {
+    if (element == null) {
+      for (int i = 0; i < array.length; i++) {
+        if (!found[i]) {
+          if (array[i] == null) {
+            found[i] = true;
+            return;
+          }
+        }
+      }
+      JUnitTestCase.fail("Does not contain null");
+    } else {
+      for (int i = 0; i < array.length; i++) {
+        if (!found[i]) {
+          if (element == array[i]) {
+            found[i] = true;
+            return;
+          }
+        }
+      }
+      JUnitTestCase.fail("Does not contain ${element}");
+    }
+  }
 
   /**
    * Calculate the offset where the given strings differ.
diff --git a/pkg/analyzer_experimental/test/services/formatter_test.dart b/pkg/analyzer_experimental/test/services/formatter_test.dart
new file mode 100644
index 0000000..d88d2d9
--- /dev/null
+++ b/pkg/analyzer_experimental/test/services/formatter_test.dart
@@ -0,0 +1,62 @@
+// 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.
+
+import 'package:analyzer_experimental/src/generated/ast.dart';
+import 'package:analyzer_experimental/src/services/formatter.dart';
+import 'package:analyzer_experimental/src/services/formatter_impl.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+
+  /// Edit recorder tests
+  group('edit recorder', () {
+
+    test('countWhitespace', (){
+      expect(newRecorder('   ').countWhitespace(), equals(3));
+      expect(newRecorder('').countWhitespace(), equals(0));
+      expect(newRecorder('  foo').countWhitespace(), equals(2));
+    });
+
+    test('indent', (){
+      var recorder = newRecorder('');
+      expect(recorder.indentationLevel, equals(0));
+      expect(recorder.options.indentPerLevel, equals(2));
+      recorder.indent();
+      expect(recorder.indentationLevel, equals(2));
+      expect(recorder.numberOfIndentations, equals(1));
+    });
+
+    test('isNewlineAt', (){
+      expect(newRecorder('012\n').isNewlineAt(3), isTrue);
+      expect(newRecorder('012\n3456').isNewlineAt(3), isTrue);
+      expect(newRecorder('\n').isNewlineAt(0), isTrue);
+    });
+
+  });
+
+
+  /// Formatter tests
+  group('formatter', () {
+
+    test('failedParse', () {
+      var formatter = new CodeFormatter();
+      expect(() => formatter.format(CodeKind.COMPILATION_UNIT, "~"),
+                   throwsA(new isInstanceOf<FormatterException>('FE')));
+    });
+
+//    test('initialIndent', () {
+//      var formatter = new CodeFormatter(new Options(initialIndentationLevel:2));
+//      var formattedSource = formatter.format(CodeKind.STATEMENT, 'var x;');
+//      expect(formattedSource, startsWith('  '));
+//    });
+
+  });
+
+}
+
+EditRecorder newRecorder(String source) {
+  var recorder = new EditRecorder(new FormatterOptions());
+  recorder.source = source;
+  return recorder;
+}
diff --git a/pkg/analyzer_experimental/test/services/test_utils.dart b/pkg/analyzer_experimental/test/services/test_utils.dart
new file mode 100644
index 0000000..2128aaa
--- /dev/null
+++ b/pkg/analyzer_experimental/test/services/test_utils.dart
@@ -0,0 +1,215 @@
+// 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.
+
+library test_utils;
+
+import 'dart:collection';
+
+import 'package:unittest/unittest.dart';
+
+import 'package:analyzer_experimental/src/generated/engine.dart' show AnalysisContext, AnalysisContextImpl;
+import 'package:analyzer_experimental/src/generated/source.dart';
+import 'package:analyzer_experimental/src/generated/error.dart';
+import 'package:analyzer_experimental/src/generated/scanner.dart';
+import 'package:analyzer_experimental/src/generated/ast.dart';
+import 'package:analyzer_experimental/src/generated/parser.dart';
+
+
+/// Instances of the class [_GatheringErrorListener] implement an error listener
+/// that collects all of the errors passed to it for later examination.
+class _GatheringErrorListener implements AnalysisErrorListener {
+
+  /// The source being parsed.
+  String _rawSource;
+
+  /// The source being parsed after inserting a marker at the beginning and end
+  /// of the range of the most recent error.
+  String _markedSource;
+
+  /// A list containing the errors that were collected.
+  final List<AnalysisError> _errors = new List<AnalysisError>();
+
+  /// A table mapping sources to the line information for the source.
+  final Map<Source, LineInfo> _lineInfoMap = new Map<Source, LineInfo>();
+
+  void onError(AnalysisError error) {
+    if (_rawSource != null) {
+      var left = error.offset;
+      var right = left + error.length - 1;
+      _markedSource = '${_rawSource.substring(0, left)}^${_rawSource.substring(left, right)}^${_rawSource.substring(right)}';
+    }
+    _errors.add(error);
+  }
+
+
+  /// Sets the line information associated with the given source to the given
+  /// information.
+  void setLineInfo(Source source, List<int> lineStarts) {
+    _lineInfoMap[source] = new LineInfo(lineStarts);
+  }
+
+
+  /// Asserts that the number of errors that have been gathered matches the
+  /// number of errors that are given and that they have the expected error
+  /// codes. The order in which the errors were gathered is ignored.
+  void expectErrors(List<ErrorCode> expectedErrorCodes) {
+    var builder = new StringBuffer();
+    var expectedCounts = new Map<ErrorCode, int>();
+
+    for (code in expectedErrorCodes) {
+      var count = expectedCounts[code];
+      if (count == null) {
+        count = 1;
+      } else {
+        count = count + 1;
+      }
+      expectedCounts[code] = count;
+    }
+
+    var errorsByCode = new Map<ErrorCode, List<AnalysisError>>();
+    for (error in _errors) {
+      var code = error.errorCode;
+      var list = errorsByCode[code];
+      if (list == null) {
+        list = new List<AnalysisError>();
+        errorsByCode[code] = list;
+      }
+      list.add(error);
+    }
+
+    for (entry in _getMapEntrySet(expectedCounts)) {
+      var code = entry.getKey();
+      var expectedCount = entry.getValue();
+      var actualCount;
+
+      var list = errorsByCode.remove(code);
+      if (list == null) {
+        actualCount = 0;
+      } else {
+        actualCount = list.length;
+      }
+
+      if (actualCount != expectedCount) {
+        if (builder.length == 0) {
+          builder.write('Expected ');
+        } else {
+          builder.write('; ');
+        }
+        builder.write(expectedCount);
+        builder.write(' errors of type ');
+        builder.write(code);
+        builder.write(', found ');
+        builder.write(actualCount);
+      }
+    }
+
+    for (entry in _getMapEntrySet(errorsByCode)) {
+      var code = entry.getKey();
+      var actualErrors = entry.getValue();
+      var actualCount = actualErrors.length;
+
+      if (builder.length == 0) {
+        builder.write('Expected ');
+      } else {
+        builder.write('; ');
+      }
+
+      builder.write('0 errors of type ');
+      builder.write(code);
+      builder.write(', found ');
+      builder.write(actualCount);
+      builder.write(' (');
+
+      for (int i = 0; i < actualErrors.length; i++) {
+        var error = actualErrors[i];
+        if (i > 0) {
+          builder.write(', ');
+        }
+        builder.write(error.offset);
+      }
+
+      builder.write(')');
+    }
+
+    if (builder.length > 0) {
+      fail(builder.toString());
+    }
+  }
+
+}
+
+
+Set<_MapEntry> _getMapEntrySet(Map m) {
+  var result = new Set();
+  m.forEach((k, v) {
+    result.add(new _MapEntry(k, v));
+  });
+  return result;
+}
+
+
+class _MapEntry<K, V> {
+  K _key;
+  V _value;
+  _MapEntry(this._key, this._value);
+  K getKey() => _key;
+  V getValue() => _value;
+}
+
+
+class _TestSource implements Source {
+
+  bool operator == (Object object) => object is _TestSource;
+
+  AnalysisContext get context => _unsupported();
+
+  void getContents(Source_ContentReceiver receiver) => _unsupported();
+
+  String get fullName => _unsupported();
+
+  String get shortName => _unsupported();
+
+  String get encoding => _unsupported();
+
+  int get modificationStamp =>_unsupported();
+
+  UriKind get uriKind => _unsupported();
+
+  bool exists() => true;
+
+  bool isInSystemLibrary() => _unsupported();
+
+  Source resolve(String uri) => _unsupported();
+
+  Source resolveRelative(Uri uri) => _unsupported();
+
+}
+
+
+_unsupported() => throw new _UnsupportedOperationException();
+
+class _UnsupportedOperationException implements Exception {
+  String toString() => 'UnsupportedOperationException';
+}
+
+
+/// Parse the given [source] as a statement and assert, if provided, that
+/// exactly a given set of [expectedErrorCodes] are encountered.
+Statement parseStatement(String source, [List<ErrorCode> expectedErrorCodes]) {
+
+  var listener = new _GatheringErrorListener();
+  var scanner = new StringScanner(null, source, listener);
+  listener.setLineInfo(new _TestSource(), scanner.lineStarts);
+
+  var token = scanner.tokenize();
+  var parser = new Parser(null, listener);
+  var statement = parser.parseStatement(token);
+  expect(statement, isNotNull);
+
+  if (?expectedErrorCodes) {
+    listener.expectErrors(expectedErrorCodes);
+  }
+
+  return statement;
+}
diff --git a/pkg/pathos/lib/path.dart b/pkg/pathos/lib/path.dart
index 80ffe72..6e7c8c2 100644
--- a/pkg/pathos/lib/path.dart
+++ b/pkg/pathos/lib/path.dart
@@ -31,13 +31,8 @@
  * Inserts [length] elements in front of the [list] and fills them with the
  * [fillValue].
  */
-void _growListFront(List list, int length, fillValue) {
-  list.length += length;
-  list.setRange(length, list.length, list);
-  for (var i = 0; i < length; i++) {
-    list[i] = fillValue;
-  }
-}
+void _growListFront(List list, int length, fillValue) =>
+  list.insertAll(0, new List.filled(length, fillValue));
 
 /// Gets the path to the current working directory.
 String get current => io.Directory.current.path;
@@ -112,9 +107,17 @@
 String rootPrefix(String path) => _builder.rootPrefix(path);
 
 /// Returns `true` if [path] is an absolute path and `false` if it is a
-/// relative path. On POSIX systems, absolute paths start with a `/` (forward
-/// slash). On Windows, an absolute path starts with `\\`, or a drive letter
-/// followed by `:/` or `:\`.
+/// relative path.
+///
+/// On POSIX systems, absolute paths start with a `/` (forward slash). On
+/// Windows, an absolute path starts with `\\`, or a drive letter followed by
+/// `:/` or `:\`. For URLs, absolute paths either start with a protocol and
+/// optional hostname (e.g. `http://dartlang.org`, `file://`) or with a `/`.
+///
+/// URLs that start with `/` are known as "root-relative", since they're
+/// relative to the root of the current URL. Since root-relative paths are still
+/// absolute in every other sense, [isAbsolute] will return true for them. They
+/// can be detected using [isRootRelative].
 bool isAbsolute(String path) => _builder.isAbsolute(path);
 
 /// Returns `true` if [path] is a relative path and `false` if it is absolute.
@@ -123,6 +126,16 @@
 /// `:/` or `:\`.
 bool isRelative(String path) => _builder.isRelative(path);
 
+/// Returns `true` if [path] is a root-relative path and `false` if it's not.
+///
+/// URLs that start with `/` are known as "root-relative", since they're
+/// relative to the root of the current URL. Since root-relative paths are still
+/// absolute in every other sense, [isAbsolute] will return true for them. They
+/// can be detected using [isRootRelative].
+///
+/// No POSIX and Windows paths are root-relative.
+bool isRootRelative(String path) => _builder.isRootRelative(path);
+
 /// Joins the given path parts into a single path using the current platform's
 /// [separator]. Example:
 ///
@@ -340,9 +353,17 @@
   }
 
   /// Returns `true` if [path] is an absolute path and `false` if it is a
-  /// relative path. On POSIX systems, absolute paths start with a `/` (forward
-  /// slash). On Windows, an absolute path starts with `\\`, or a drive letter
-  /// followed by `:/` or `:\`.
+  /// relative path.
+  ///
+  /// On POSIX systems, absolute paths start with a `/` (forward slash). On
+  /// Windows, an absolute path starts with `\\`, or a drive letter followed by
+  /// `:/` or `:\`. For URLs, absolute paths either start with a protocol and
+  /// optional hostname (e.g. `http://dartlang.org`, `file://`) or with a `/`.
+  ///
+  /// URLs that start with `/` are known as "root-relative", since they're
+  /// relative to the root of the current URL. Since root-relative paths are
+  /// still absolute in every other sense, [isAbsolute] will return true for
+  /// them. They can be detected using [isRootRelative].
   bool isAbsolute(String path) => _parse(path).isAbsolute;
 
   /// Returns `true` if [path] is a relative path and `false` if it is absolute.
@@ -351,6 +372,16 @@
   /// `:/` or `:\`.
   bool isRelative(String path) => !isAbsolute(path);
 
+  /// Returns `true` if [path] is a root-relative path and `false` if it's not.
+  ///
+  /// URLs that start with `/` are known as "root-relative", since they're
+  /// relative to the root of the current URL. Since root-relative paths are
+  /// still absolute in every other sense, [isAbsolute] will return true for
+  /// them. They can be detected using [isRootRelative].
+  ///
+  /// No POSIX and Windows paths are root-relative.
+  bool isRootRelative(String path) => _parse(path).isRootRelative;
+
   /// Joins the given path parts into a single path. Example:
   ///
   ///     builder.join('path', 'to', 'foo'); // -> 'path/to/foo'
@@ -388,11 +419,20 @@
   String joinAll(Iterable<String> parts) {
     var buffer = new StringBuffer();
     var needsSeparator = false;
+    var isAbsoluteAndNotRootRelative = false;
 
     for (var part in parts) {
-      if (this.isAbsolute(part)) {
+      if (this.isRootRelative(part) && isAbsoluteAndNotRootRelative) {
+        // If the new part is root-relative, it preserves the previous root but
+        // replaces the path after it.
+        var oldRoot = this.rootPrefix(buffer.toString());
+        buffer.clear();
+        buffer.write(oldRoot);
+        buffer.write(part);
+      } else if (this.isAbsolute(part)) {
+        isAbsoluteAndNotRootRelative = !this.isRootRelative(part);
         // An absolute path discards everything before it.
-        buffer = new StringBuffer();
+        buffer.clear();
         buffer.write(part);
       } else {
         if (part.length > 0 && part[0].contains(style.separatorPattern)) {
@@ -406,8 +446,7 @@
 
       // Unless this part ends with a separator, we'll need to add one before
       // the next part.
-      needsSeparator = part.length > 0 &&
-          !part[part.length - 1].contains(style.separatorPattern);
+      needsSeparator = part.contains(style.needsSeparatorPattern);
     }
 
     return buffer.toString();
@@ -498,7 +537,9 @@
 
     // If the given path is relative, resolve it relative to the root of the
     // builder.
-    if (this.isRelative(path)) path = this.resolve(path);
+    if (this.isRelative(path) || this.isRootRelative(path)) {
+      path = this.resolve(path);
+    }
 
     // If the path is still relative and `from` is absolute, we're unable to
     // find a path from `from` to `path`.
@@ -524,16 +565,17 @@
     while (fromParsed.parts.length > 0 && pathParsed.parts.length > 0 &&
            fromParsed.parts[0] == pathParsed.parts[0]) {
       fromParsed.parts.removeAt(0);
-      fromParsed.separators.removeAt(0);
+      fromParsed.separators.removeAt(1);
       pathParsed.parts.removeAt(0);
-      pathParsed.separators.removeAt(0);
+      pathParsed.separators.removeAt(1);
     }
 
     // If there are any directories left in the root path, we need to walk up
     // out of them.
     _growListFront(pathParsed.parts, fromParsed.parts.length, '..');
-    _growListFront(
-        pathParsed.separators, fromParsed.parts.length, style.separator);
+    pathParsed.separators[0] = '';
+    pathParsed.separators.insertAll(1,
+        new List.filled(fromParsed.parts.length, style.separator));
 
     // Corner case: the paths completely collapsed.
     if (pathParsed.parts.length == 0) return '.';
@@ -566,11 +608,21 @@
 
     // Remove the root prefix, if any.
     var root = style.getRoot(path);
+    var isRootRelative = style.getRelativeRoot(path) != null;
     if (root != null) path = path.substring(root.length);
 
     // Split the parts on path separators.
     var parts = [];
     var separators = [];
+
+    var firstSeparator = style.separatorPattern.firstMatch(path);
+    if (firstSeparator != null && firstSeparator.start == 0) {
+      separators.add(firstSeparator[0]);
+      path = path.substring(firstSeparator[0].length);
+    } else {
+      separators.add('');
+    }
+
     var start = 0;
     for (var match in style.separatorPattern.allMatches(path)) {
       parts.add(path.substring(start, match.start));
@@ -584,7 +636,7 @@
       separators.add('');
     }
 
-    return new _ParsedPath(style, root, parts, separators);
+    return new _ParsedPath(style, root, isRootRelative, parts, separators);
   }
 }
 
@@ -592,20 +644,34 @@
 class Style {
   /// POSIX-style paths use "/" (forward slash) as separators. Absolute paths
   /// start with "/". Used by UNIX, Linux, Mac OS X, and others.
-  static final posix = new Style._('posix', '/', '/', '/');
+  static final posix = new Style._('posix', '/', '/', r'[^/]$', '/');
 
   /// Windows paths use "\" (backslash) as separators. Absolute paths start with
   /// a drive letter followed by a colon (example, "C:") or two backslashes
   /// ("\\") for UNC paths.
   // TODO(rnystrom): The UNC root prefix should include the drive name too, not
   // just the "\\".
-  static final windows = new Style._('windows', '\\', r'[/\\]',
+  static final windows = new Style._('windows', '\\', r'[/\\]', r'[^/\\]$',
       r'\\\\|[a-zA-Z]:[/\\]');
 
+  /// URLs aren't filesystem paths, but they're supported by Pathos to make it
+  /// easier to manipulate URL paths in the browser.
+  ///
+  /// URLs use "/" (forward slash) as separators. Absolute paths either start
+  /// with a protocol and optional hostname (e.g. `http://dartlang.org`,
+  /// `file://`) or with "/".
+  static final url = new Style._('url', '/', '/',
+      r"(^[a-zA-Z][-+.a-zA-Z\d]*://|[^/])$",
+      r"[a-zA-Z][-+.a-zA-Z\d]*://[^/]*", r"/");
+
   Style._(this.name, this.separator, String separatorPattern,
-      String rootPattern)
+      String needsSeparatorPattern, String rootPattern,
+      [String relativeRootPattern])
     : separatorPattern = new RegExp(separatorPattern),
-      _rootPattern = new RegExp('^$rootPattern');
+      needsSeparatorPattern = new RegExp(needsSeparatorPattern),
+      _rootPattern = new RegExp('^$rootPattern'),
+      _relativeRootPattern = relativeRootPattern == null ? null :
+          new RegExp('^$relativeRootPattern');
 
   /// The name of this path style. Will be "posix" or "windows".
   final String name;
@@ -619,15 +685,42 @@
   /// "\" is the canonical one.
   final Pattern separatorPattern;
 
+  /// The [Pattern] that matches path components that need a separator after
+  /// them.
+  ///
+  /// Windows and POSIX styles just need separators when the previous component
+  /// doesn't already end in a separator, but the URL always needs to place a
+  /// separator between the root and the first component, even if the root
+  /// already ends in a separator character. For example, to join "file://" and
+  /// "usr", an additional "/" is needed (making "file:///usr").
+  final Pattern needsSeparatorPattern;
+
   // TODO(nweiz): make this a Pattern when issue 7080 is fixed.
   /// The [RegExp] that can be used to match the root prefix of an absolute
   /// path in this style.
   final RegExp _rootPattern;
 
+  /// The [RegExp] that can be used to match the root prefix of a root-relative
+  /// path in this style.
+  ///
+  /// This can be null to indicate that this style doesn't support root-relative
+  /// paths.
+  final RegExp _relativeRootPattern;
+
   /// Gets the root prefix of [path] if path is absolute. If [path] is relative,
   /// returns `null`.
   String getRoot(String path) {
     var match = _rootPattern.firstMatch(path);
+    if (match != null) return match[0];
+    return getRelativeRoot(path);
+  }
+
+  /// Gets the root prefix of [path] if it's root-relative.
+  ///
+  /// If [path] is relative or absolute and not root-relative, returns `null`.
+  String getRelativeRoot(String path) {
+    if (_relativeRootPattern == null) return null;
+    var match = _relativeRootPattern.firstMatch(path);
     if (match == null) return null;
     return match[0];
   }
@@ -646,12 +739,20 @@
   /// letters.
   String root;
 
+  /// Whether this path is root-relative.
+  ///
+  /// See [Builder.isRootRelative].
+  bool isRootRelative;
+
   /// The path-separated parts of the path. All but the last will be
   /// directories.
   List<String> parts;
 
-  /// The path separators following each part. The last one will be an empty
-  /// string unless the path ends with a trailing separator.
+  /// The path separators preceding each part.
+  ///
+  /// The first one will be an empty string unless the root requires a separator
+  /// between it and the path. The last one will be an empty string unless the
+  /// path ends with a trailing separator.
   List<String> separators;
 
   /// The file extension of the last part, or "" if it doesn't have one.
@@ -660,7 +761,8 @@
   /// `true` if this is an absolute path.
   bool get isAbsolute => root != null;
 
-  _ParsedPath(this.style, this.root, this.parts, this.separators);
+  _ParsedPath(this.style, this.root, this.isRootRelative, this.parts,
+      this.separators);
 
   String get basename {
     var copy = this.clone();
@@ -715,8 +817,12 @@
     }
 
     // Canonicalize separators.
-    var newSeparators = [];
-    _growListFront(newSeparators, newParts.length, style.separator);
+    var newSeparators = new List.generate(
+        newParts.length, (_) => style.separator, growable: true);
+    newSeparators.insert(0,
+        isAbsolute && newParts.length > 0 &&
+                root.contains(style.needsSeparatorPattern) ?
+            style.separator : '');
 
     parts = newParts;
     separators = newSeparators;
@@ -732,9 +838,10 @@
     var builder = new StringBuffer();
     if (root != null) builder.write(root);
     for (var i = 0; i < parts.length; i++) {
-      builder.write(parts[i]);
       builder.write(separators[i]);
+      builder.write(parts[i]);
     }
+    builder.write(separators.last);
 
     return builder.toString();
   }
@@ -758,5 +865,6 @@
   }
 
   _ParsedPath clone() => new _ParsedPath(
-      style, root, new List.from(parts), new List.from(separators));
+      style, root, isRootRelative,
+      new List.from(parts), new List.from(separators));
 }
diff --git a/pkg/pathos/test/pathos_url_test.dart b/pkg/pathos/test/pathos_url_test.dart
new file mode 100644
index 0000000..f419af4
--- /dev/null
+++ b/pkg/pathos/test/pathos_url_test.dart
@@ -0,0 +1,611 @@
+// 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.
+
+import 'dart:io' as io;
+
+import 'package:unittest/unittest.dart';
+import 'package:pathos/path.dart' as path;
+
+main() {
+  var builder = new path.Builder(style: path.Style.url,
+      root: 'http://dartlang.org/root/path');
+
+  test('separator', () {
+    expect(builder.separator, '/');
+  });
+
+  test('extension', () {
+    expect(builder.extension(''), '');
+    expect(builder.extension('foo.dart'), '.dart');
+    expect(builder.extension('foo.dart.js'), '.js');
+    expect(builder.extension('a.b/c'), '');
+    expect(builder.extension('a.b/c.d'), '.d');
+    expect(builder.extension(r'a.b\c'), r'.b\c');
+  });
+
+  test('rootPrefix', () {
+    expect(builder.rootPrefix(''), '');
+    expect(builder.rootPrefix('a'), '');
+    expect(builder.rootPrefix('a/b'), '');
+    expect(builder.rootPrefix('http://dartlang.org/a/c'),
+        'http://dartlang.org');
+    expect(builder.rootPrefix('file:///a/c'), 'file://');
+    expect(builder.rootPrefix('/a/c'), '/');
+    expect(builder.rootPrefix('http://dartlang.org/'), 'http://dartlang.org');
+    expect(builder.rootPrefix('file:///'), 'file://');
+    expect(builder.rootPrefix('http://dartlang.org'), 'http://dartlang.org');
+    expect(builder.rootPrefix('file://'), 'file://');
+    expect(builder.rootPrefix('/'), '/');
+  });
+
+  test('dirname', () {
+    expect(builder.dirname(''), '.');
+    expect(builder.dirname('a'), '.');
+    expect(builder.dirname('a/b'), 'a');
+    expect(builder.dirname('a/b/c'), 'a/b');
+    expect(builder.dirname('a/b.c'), 'a');
+    expect(builder.dirname('a/'), '.');
+    expect(builder.dirname('a/.'), 'a');
+    expect(builder.dirname(r'a\b/c'), r'a\b');
+    expect(builder.dirname('http://dartlang.org/a'), 'http://dartlang.org');
+    expect(builder.dirname('file:///a'), 'file://');
+    expect(builder.dirname('/a'), '/');
+    expect(builder.dirname('http://dartlang.org///a'), 'http://dartlang.org');
+    expect(builder.dirname('file://///a'), 'file://');
+    expect(builder.dirname('///a'), '/');
+    expect(builder.dirname('http://dartlang.org/'), 'http://dartlang.org');
+    expect(builder.dirname('http://dartlang.org'), 'http://dartlang.org');
+    expect(builder.dirname('file:///'), 'file://');
+    expect(builder.dirname('file://'), 'file://');
+    expect(builder.dirname('/'), '/');
+    expect(builder.dirname('http://dartlang.org///'), 'http://dartlang.org');
+    expect(builder.dirname('file://///'), 'file://');
+    expect(builder.dirname('///'), '/');
+    expect(builder.dirname('a/b/'), 'a');
+    expect(builder.dirname(r'a/b\c'), 'a');
+    expect(builder.dirname('a//'), '.');
+    expect(builder.dirname('a/b//'), 'a');
+    expect(builder.dirname('a//b'), 'a');
+  });
+
+  test('basename', () {
+    expect(builder.basename(''), '');
+    expect(builder.basename('a'), 'a');
+    expect(builder.basename('a/b'), 'b');
+    expect(builder.basename('a/b/c'), 'c');
+    expect(builder.basename('a/b.c'), 'b.c');
+    expect(builder.basename('a/'), 'a');
+    expect(builder.basename('a/.'), '.');
+    expect(builder.basename(r'a\b/c'), 'c');
+    expect(builder.basename('http://dartlang.org/a'), 'a');
+    expect(builder.basename('file:///a'), 'a');
+    expect(builder.basename('/a'), 'a');
+    expect(builder.basename('http://dartlang.org/'), 'http://dartlang.org');
+    expect(builder.basename('http://dartlang.org'), 'http://dartlang.org');
+    expect(builder.basename('file:///'), 'file://');
+    expect(builder.basename('file://'), 'file://');
+    expect(builder.basename('/'), '/');
+    expect(builder.basename('a/b/'), 'b');
+    expect(builder.basename(r'a/b\c'), r'b\c');
+    expect(builder.basename('a//'), 'a');
+    expect(builder.basename('a/b//'), 'b');
+    expect(builder.basename('a//b'), 'b');
+  });
+
+  test('basenameWithoutExtension', () {
+    expect(builder.basenameWithoutExtension(''), '');
+    expect(builder.basenameWithoutExtension('a'), 'a');
+    expect(builder.basenameWithoutExtension('a/b'), 'b');
+    expect(builder.basenameWithoutExtension('a/b/c'), 'c');
+    expect(builder.basenameWithoutExtension('a/b.c'), 'b');
+    expect(builder.basenameWithoutExtension('a/'), 'a');
+    expect(builder.basenameWithoutExtension('a/.'), '.');
+    expect(builder.basenameWithoutExtension(r'a/b\c'), r'b\c');
+    expect(builder.basenameWithoutExtension('a/.bashrc'), '.bashrc');
+    expect(builder.basenameWithoutExtension('a/b/c.d.e'), 'c.d');
+    expect(builder.basenameWithoutExtension('a//'), 'a');
+    expect(builder.basenameWithoutExtension('a/b//'), 'b');
+    expect(builder.basenameWithoutExtension('a//b'), 'b');
+    expect(builder.basenameWithoutExtension('a/b.c/'), 'b');
+    expect(builder.basenameWithoutExtension('a/b.c//'), 'b');
+  });
+
+  test('isAbsolute', () {
+    expect(builder.isAbsolute(''), false);
+    expect(builder.isAbsolute('a'), false);
+    expect(builder.isAbsolute('a/b'), false);
+    expect(builder.isAbsolute('http://dartlang.org/a'), true);
+    expect(builder.isAbsolute('file:///a'), true);
+    expect(builder.isAbsolute('/a'), true);
+    expect(builder.isAbsolute('http://dartlang.org/a/b'), true);
+    expect(builder.isAbsolute('file:///a/b'), true);
+    expect(builder.isAbsolute('/a/b'), true);
+    expect(builder.isAbsolute('http://dartlang.org/'), true);
+    expect(builder.isAbsolute('file:///'), true);
+    expect(builder.isAbsolute('http://dartlang.org'), true);
+    expect(builder.isAbsolute('file://'), true);
+    expect(builder.isAbsolute('/'), true);
+    expect(builder.isAbsolute('~'), false);
+    expect(builder.isAbsolute('.'), false);
+    expect(builder.isAbsolute('../a'), false);
+    expect(builder.isAbsolute('C:/a'), false);
+    expect(builder.isAbsolute(r'C:\a'), false);
+    expect(builder.isAbsolute(r'\\a'), false);
+  });
+
+  test('isRelative', () {
+    expect(builder.isRelative(''), true);
+    expect(builder.isRelative('a'), true);
+    expect(builder.isRelative('a/b'), true);
+    expect(builder.isRelative('http://dartlang.org/a'), false);
+    expect(builder.isRelative('file:///a'), false);
+    expect(builder.isRelative('/a'), false);
+    expect(builder.isRelative('http://dartlang.org/a/b'), false);
+    expect(builder.isRelative('file:///a/b'), false);
+    expect(builder.isRelative('/a/b'), false);
+    expect(builder.isRelative('http://dartlang.org/'), false);
+    expect(builder.isRelative('file:///'), false);
+    expect(builder.isRelative('http://dartlang.org'), false);
+    expect(builder.isRelative('file://'), false);
+    expect(builder.isRelative('/'), false);
+    expect(builder.isRelative('~'), true);
+    expect(builder.isRelative('.'), true);
+    expect(builder.isRelative('../a'), true);
+    expect(builder.isRelative('C:/a'), true);
+    expect(builder.isRelative(r'C:\a'), true);
+    expect(builder.isRelative(r'\\a'), true);
+  });
+
+  test('isRootRelative', () {
+    expect(builder.isRootRelative(''), false);
+    expect(builder.isRootRelative('a'), false);
+    expect(builder.isRootRelative('a/b'), false);
+    expect(builder.isRootRelative('http://dartlang.org/a'), false);
+    expect(builder.isRootRelative('file:///a'), false);
+    expect(builder.isRootRelative('/a'), true);
+    expect(builder.isRootRelative('http://dartlang.org/a/b'), false);
+    expect(builder.isRootRelative('file:///a/b'), false);
+    expect(builder.isRootRelative('/a/b'), true);
+    expect(builder.isRootRelative('http://dartlang.org/'), false);
+    expect(builder.isRootRelative('file:///'), false);
+    expect(builder.isRootRelative('http://dartlang.org'), false);
+    expect(builder.isRootRelative('file://'), false);
+    expect(builder.isRootRelative('/'), true);
+    expect(builder.isRootRelative('~'), false);
+    expect(builder.isRootRelative('.'), false);
+    expect(builder.isRootRelative('../a'), false);
+    expect(builder.isRootRelative('C:/a'), false);
+    expect(builder.isRootRelative(r'C:\a'), false);
+    expect(builder.isRootRelative(r'\\a'), false);
+  });
+
+  group('join', () {
+    test('allows up to eight parts', () {
+      expect(builder.join('a'), 'a');
+      expect(builder.join('a', 'b'), 'a/b');
+      expect(builder.join('a', 'b', 'c'), 'a/b/c');
+      expect(builder.join('a', 'b', 'c', 'd'), 'a/b/c/d');
+      expect(builder.join('a', 'b', 'c', 'd', 'e'), 'a/b/c/d/e');
+      expect(builder.join('a', 'b', 'c', 'd', 'e', 'f'), 'a/b/c/d/e/f');
+      expect(builder.join('a', 'b', 'c', 'd', 'e', 'f', 'g'), 'a/b/c/d/e/f/g');
+      expect(builder.join('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
+          'a/b/c/d/e/f/g/h');
+    });
+
+    test('does not add separator if a part ends in one', () {
+      expect(builder.join('a/', 'b', 'c/', 'd'), 'a/b/c/d');
+      expect(builder.join('a\\', 'b'), r'a\/b');
+    });
+
+    test('ignores parts before an absolute path', () {
+      expect(builder.join('a', 'http://dartlang.org', 'b', 'c'),
+          'http://dartlang.org/b/c');
+      expect(builder.join('a', 'file://', 'b', 'c'), 'file:///b/c');
+      expect(builder.join('a', '/', 'b', 'c'), '/b/c');
+      expect(builder.join('a', '/b', 'http://dartlang.org/c', 'd'),
+          'http://dartlang.org/c/d');
+      expect(builder.join(
+              'a', 'http://google.com/b', 'http://dartlang.org/c', 'd'),
+          'http://dartlang.org/c/d');
+      expect(builder.join('a', '/b', '/c', 'd'), '/c/d');
+      expect(builder.join('a', r'c:\b', 'c', 'd'), r'a/c:\b/c/d');
+      expect(builder.join('a', r'\\b', 'c', 'd'), r'a/\\b/c/d');
+    });
+
+    test('preserves roots before a root-relative path', () {
+      expect(builder.join('http://dartlang.org', 'a', '/b', 'c'),
+          'http://dartlang.org/b/c');
+      expect(builder.join('file://', 'a', '/b', 'c'), 'file:///b/c');
+      expect(builder.join('file://', 'a', '/b', 'c', '/d'), 'file:///d');
+    });
+
+    test('ignores trailing nulls', () {
+      expect(builder.join('a', null), equals('a'));
+      expect(builder.join('a', 'b', 'c', null, null), equals('a/b/c'));
+    });
+
+    test('disallows intermediate nulls', () {
+      expect(() => builder.join('a', null, 'b'), throwsArgumentError);
+      expect(() => builder.join(null, 'a'), throwsArgumentError);
+    });
+  });
+
+  group('joinAll', () {
+    test('allows more than eight parts', () {
+      expect(builder.joinAll(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']),
+          'a/b/c/d/e/f/g/h/i');
+    });
+
+    test('ignores parts before an absolute path', () {
+      expect(builder.joinAll(['a', 'http://dartlang.org', 'b', 'c']),
+          'http://dartlang.org/b/c');
+      expect(builder.joinAll(['a', 'file://', 'b', 'c']), 'file:///b/c');
+      expect(builder.joinAll(['a', '/', 'b', 'c']), '/b/c');
+      expect(builder.joinAll(['a', '/b', 'http://dartlang.org/c', 'd']),
+          'http://dartlang.org/c/d');
+      expect(builder.joinAll(
+              ['a', 'http://google.com/b', 'http://dartlang.org/c', 'd']),
+          'http://dartlang.org/c/d');
+      expect(builder.joinAll(['a', '/b', '/c', 'd']), '/c/d');
+      expect(builder.joinAll(['a', r'c:\b', 'c', 'd']), r'a/c:\b/c/d');
+      expect(builder.joinAll(['a', r'\\b', 'c', 'd']), r'a/\\b/c/d');
+    });
+
+    test('preserves roots before a root-relative path', () {
+      expect(builder.joinAll(['http://dartlang.org', 'a', '/b', 'c']),
+          'http://dartlang.org/b/c');
+      expect(builder.joinAll(['file://', 'a', '/b', 'c']), 'file:///b/c');
+      expect(builder.joinAll(['file://', 'a', '/b', 'c', '/d']), 'file:///d');
+    });
+  });
+
+  group('split', () {
+    test('simple cases', () {
+      expect(builder.split(''), []);
+      expect(builder.split('.'), ['.']);
+      expect(builder.split('..'), ['..']);
+      expect(builder.split('foo'), equals(['foo']));
+      expect(builder.split('foo/bar.txt'), equals(['foo', 'bar.txt']));
+      expect(builder.split('foo/bar/baz'), equals(['foo', 'bar', 'baz']));
+      expect(builder.split('foo/../bar/./baz'),
+          equals(['foo', '..', 'bar', '.', 'baz']));
+      expect(builder.split('foo//bar///baz'), equals(['foo', 'bar', 'baz']));
+      expect(builder.split('foo/\\/baz'), equals(['foo', '\\', 'baz']));
+      expect(builder.split('.'), equals(['.']));
+      expect(builder.split(''), equals([]));
+      expect(builder.split('foo/'), equals(['foo']));
+      expect(builder.split('http://dartlang.org//'),
+          equals(['http://dartlang.org']));
+      expect(builder.split('file:////'), equals(['file://']));
+      expect(builder.split('//'), equals(['/']));
+    });
+
+    test('includes the root for absolute paths', () {
+      expect(builder.split('http://dartlang.org/foo/bar/baz'),
+          equals(['http://dartlang.org', 'foo', 'bar', 'baz']));
+      expect(builder.split('file:///foo/bar/baz'),
+          equals(['file://', 'foo', 'bar', 'baz']));
+      expect(builder.split('/foo/bar/baz'), equals(['/', 'foo', 'bar', 'baz']));
+      expect(builder.split('http://dartlang.org/'),
+          equals(['http://dartlang.org']));
+      expect(builder.split('http://dartlang.org'),
+          equals(['http://dartlang.org']));
+      expect(builder.split('file:///'), equals(['file://']));
+      expect(builder.split('file://'), equals(['file://']));
+      expect(builder.split('/'), equals(['/']));
+    });
+  });
+
+  group('normalize', () {
+    test('simple cases', () {
+      expect(builder.normalize(''), '');
+      expect(builder.normalize('.'), '.');
+      expect(builder.normalize('..'), '..');
+      expect(builder.normalize('a'), 'a');
+      expect(builder.normalize('http://dartlang.org/'), 'http://dartlang.org');
+      expect(builder.normalize('http://dartlang.org'), 'http://dartlang.org');
+      expect(builder.normalize('file://'), 'file://');
+      expect(builder.normalize('file:///'), 'file://');
+      expect(builder.normalize('/'), '/');
+      expect(builder.normalize(r'\'), r'\');
+    });
+
+    test('collapses redundant separators', () {
+      expect(builder.normalize(r'a/b/c'), r'a/b/c');
+      expect(builder.normalize(r'a//b///c////d'), r'a/b/c/d');
+    });
+
+    test('does not collapse separators for other platform', () {
+      expect(builder.normalize(r'a\\b\\\c'), r'a\\b\\\c');
+    });
+
+    test('eliminates "." parts', () {
+      expect(builder.normalize('./'), '.');
+      expect(builder.normalize('http://dartlang.org/.'), 'http://dartlang.org');
+      expect(builder.normalize('file:///.'), 'file://');
+      expect(builder.normalize('/.'), '/');
+      expect(builder.normalize('http://dartlang.org/./'),
+          'http://dartlang.org');
+      expect(builder.normalize('file:///./'), 'file://');
+      expect(builder.normalize('/./'), '/');
+      expect(builder.normalize('./.'), '.');
+      expect(builder.normalize('a/./b'), 'a/b');
+      expect(builder.normalize('a/.b/c'), 'a/.b/c');
+      expect(builder.normalize('a/././b/./c'), 'a/b/c');
+      expect(builder.normalize('././a'), 'a');
+      expect(builder.normalize('a/./.'), 'a');
+    });
+
+    test('eliminates ".." parts', () {
+      expect(builder.normalize('..'), '..');
+      expect(builder.normalize('../'), '..');
+      expect(builder.normalize('../../..'), '../../..');
+      expect(builder.normalize('../../../'), '../../..');
+      expect(builder.normalize('http://dartlang.org/..'),
+          'http://dartlang.org');
+      expect(builder.normalize('file:///..'), 'file://');
+      expect(builder.normalize('/..'), '/');
+      expect(builder.normalize('http://dartlang.org/../../..'),
+          'http://dartlang.org');
+      expect(builder.normalize('file:///../../..'), 'file://');
+      expect(builder.normalize('/../../..'), '/');
+      expect(builder.normalize('http://dartlang.org/../../../a'),
+          'http://dartlang.org/a');
+      expect(builder.normalize('file:///../../../a'), 'file:///a');
+      expect(builder.normalize('/../../../a'), '/a');
+      expect(builder.normalize('a/..'), '.');
+      expect(builder.normalize('a/b/..'), 'a');
+      expect(builder.normalize('a/../b'), 'b');
+      expect(builder.normalize('a/./../b'), 'b');
+      expect(builder.normalize('a/b/c/../../d/e/..'), 'a/d');
+      expect(builder.normalize('a/b/../../../../c'), '../../c');
+    });
+
+    test('does not walk before root on absolute paths', () {
+      expect(builder.normalize('..'), '..');
+      expect(builder.normalize('../'), '..');
+      expect(builder.normalize('http://dartlang.org/..'),
+          'http://dartlang.org');
+      expect(builder.normalize('file:///..'), 'file://');
+      expect(builder.normalize('/..'), '/');
+      expect(builder.normalize('a/..'), '.');
+      expect(builder.normalize('a/b/..'), 'a');
+      expect(builder.normalize('a/../b'), 'b');
+      expect(builder.normalize('a/./../b'), 'b');
+      expect(builder.normalize('a/b/c/../../d/e/..'), 'a/d');
+      expect(builder.normalize('a/b/../../../../c'), '../../c');
+    });
+
+    test('removes trailing separators', () {
+      expect(builder.normalize('./'), '.');
+      expect(builder.normalize('.//'), '.');
+      expect(builder.normalize('a/'), 'a');
+      expect(builder.normalize('a/b/'), 'a/b');
+      expect(builder.normalize('a/b///'), 'a/b');
+    });
+  });
+
+  group('relative', () {
+    group('from absolute root', () {
+      test('given absolute path in root', () {
+        expect(builder.relative('http://dartlang.org'), '../..');
+        expect(builder.relative('http://dartlang.org/'), '../..');
+        expect(builder.relative('/'), '../..');
+        expect(builder.relative('http://dartlang.org/root'), '..');
+        expect(builder.relative('/root'), '..');
+        expect(builder.relative('http://dartlang.org/root/path'), '.');
+        expect(builder.relative('/root/path'), '.');
+        expect(builder.relative('http://dartlang.org/root/path/a'), 'a');
+        expect(builder.relative('/root/path/a'), 'a');
+        expect(builder.relative('http://dartlang.org/root/path/a/b.txt'),
+            'a/b.txt');
+        expect(builder.relative('/root/path/a/b.txt'), 'a/b.txt');
+        expect(builder.relative('http://dartlang.org/root/a/b.txt'),
+            '../a/b.txt');
+        expect(builder.relative('/root/a/b.txt'), '../a/b.txt');
+      });
+
+      test('given absolute path outside of root', () {
+        expect(builder.relative('http://dartlang.org/a/b'), '../../a/b');
+        expect(builder.relative('/a/b'), '../../a/b');
+        expect(builder.relative('http://dartlang.org/root/path/a'), 'a');
+        expect(builder.relative('/root/path/a'), 'a');
+        expect(builder.relative('http://dartlang.org/root/path/a/b.txt'),
+            'a/b.txt');
+        expect(builder.relative('http://dartlang.org/root/path/a/b.txt'),
+            'a/b.txt');
+        expect(builder.relative('http://dartlang.org/root/a/b.txt'),
+            '../a/b.txt');
+      });
+
+      test('given absolute path with different hostname/protocol', () {
+        expect(builder.relative(r'http://google.com/a/b'),
+            r'http://google.com/a/b');
+        expect(builder.relative(r'file:///a/b'),
+            r'file:///a/b');
+      });
+
+      test('given relative path', () {
+        // The path is considered relative to the root, so it basically just
+        // normalizes.
+        expect(builder.relative(''), '.');
+        expect(builder.relative('.'), '.');
+        expect(builder.relative('a'), 'a');
+        expect(builder.relative('a/b.txt'), 'a/b.txt');
+        expect(builder.relative('../a/b.txt'), '../a/b.txt');
+        expect(builder.relative('a/./b/../c.txt'), 'a/c.txt');
+      });
+    });
+
+    group('from relative root', () {
+      var r = new path.Builder(style: path.Style.url, root: 'foo/bar');
+
+      test('given absolute path', () {
+        expect(r.relative('http://google.com/'), equals('http://google.com'));
+        expect(r.relative('http://google.com'), equals('http://google.com'));
+        expect(r.relative('file:///'), equals('file://'));
+        expect(r.relative('file://'), equals('file://'));
+        expect(r.relative('/'), equals('/'));
+        expect(r.relative('/a/b'), equals('/a/b'));
+      });
+
+      test('given relative path', () {
+        // The path is considered relative to the root, so it basically just
+        // normalizes.
+        expect(r.relative(''), '.');
+        expect(r.relative('.'), '.');
+        expect(r.relative('..'), '..');
+        expect(r.relative('a'), 'a');
+        expect(r.relative('a/b.txt'), 'a/b.txt');
+        expect(r.relative('../a/b.txt'), '../a/b.txt');
+        expect(r.relative('a/./b/../c.txt'), 'a/c.txt');
+      });
+    });
+
+    group('from root-relative root', () {
+      var r = new path.Builder(style: path.Style.url, root: '/foo/bar');
+
+      test('given absolute path', () {
+        expect(r.relative('http://google.com/'), equals('http://google.com'));
+        expect(r.relative('http://google.com'), equals('http://google.com'));
+        expect(r.relative('file:///'), equals('file://'));
+        expect(r.relative('file://'), equals('file://'));
+        expect(r.relative('/'), equals('../..'));
+        expect(r.relative('/a/b'), equals('../../a/b'));
+      });
+
+      test('given relative path', () {
+        // The path is considered relative to the root, so it basically just
+        // normalizes.
+        expect(r.relative(''), '.');
+        expect(r.relative('.'), '.');
+        expect(r.relative('..'), '..');
+        expect(r.relative('a'), 'a');
+        expect(r.relative('a/b.txt'), 'a/b.txt');
+        expect(r.relative('../a/b.txt'), '../a/b.txt');
+        expect(r.relative('a/./b/../c.txt'), 'a/c.txt');
+      });
+    });
+
+    test('from a root with extension', () {
+      var r = new path.Builder(style: path.Style.url, root: '/dir.ext');
+      expect(r.relative('/dir.ext/file'), 'file');
+    });
+
+    test('with a root parameter', () {
+      expect(builder.relative('/foo/bar/baz', from: '/foo/bar'), equals('baz'));
+      expect(
+          builder.relative('/foo/bar/baz', from: 'http://dartlang.org/foo/bar'),
+          equals('baz'));
+      expect(
+          builder.relative('http://dartlang.org/foo/bar/baz', from: '/foo/bar'),
+          equals('baz'));
+      expect(builder.relative('http://dartlang.org/foo/bar/baz',
+              from: 'file:///foo/bar'),
+          equals('http://dartlang.org/foo/bar/baz'));
+      expect(builder.relative('http://dartlang.org/foo/bar/baz',
+          from: 'http://dartlang.org/foo/bar'), equals('baz'));
+      expect(
+          builder.relative('/foo/bar/baz', from: 'file:///foo/bar'),
+          equals('http://dartlang.org/foo/bar/baz'));
+      expect(
+          builder.relative('file:///foo/bar/baz', from: '/foo/bar'),
+          equals('file:///foo/bar/baz'));
+
+      expect(builder.relative('..', from: '/foo/bar'), equals('../../root'));
+      expect(builder.relative('..', from: 'http://dartlang.org/foo/bar'),
+          equals('../../root'));
+      expect(builder.relative('..', from: 'file:///foo/bar'),
+          equals('http://dartlang.org/root'));
+      expect(builder.relative('..', from: '/foo/bar'), equals('../../root'));
+
+      expect(builder.relative('http://dartlang.org/foo/bar/baz',
+              from: 'foo/bar'),
+          equals('../../../../foo/bar/baz'));
+      expect(builder.relative('file:///foo/bar/baz', from: 'foo/bar'),
+          equals('file:///foo/bar/baz'));
+      expect(builder.relative('/foo/bar/baz', from: 'foo/bar'),
+          equals('../../../../foo/bar/baz'));
+
+      expect(builder.relative('..', from: 'foo/bar'), equals('../../..'));
+    });
+
+    test('with a root parameter and a relative root', () {
+      var r = new path.Builder(style: path.Style.url, root: 'relative/root');
+      expect(r.relative('/foo/bar/baz', from: '/foo/bar'), equals('baz'));
+      expect(
+          r.relative('/foo/bar/baz', from: 'http://dartlang.org/foo/bar'),
+          equals('/foo/bar/baz'));
+      expect(
+          r.relative('http://dartlang.org/foo/bar/baz', from: '/foo/bar'),
+          equals('http://dartlang.org/foo/bar/baz'));
+      expect(r.relative('http://dartlang.org/foo/bar/baz',
+              from: 'file:///foo/bar'),
+          equals('http://dartlang.org/foo/bar/baz'));
+      expect(r.relative('http://dartlang.org/foo/bar/baz',
+          from: 'http://dartlang.org/foo/bar'), equals('baz'));
+
+      expect(r.relative('http://dartlang.org/foo/bar/baz', from: 'foo/bar'),
+          equals('http://dartlang.org/foo/bar/baz'));
+      expect(r.relative('file:///foo/bar/baz', from: 'foo/bar'),
+          equals('file:///foo/bar/baz'));
+      expect(r.relative('/foo/bar/baz', from: 'foo/bar'),
+          equals('/foo/bar/baz'));
+
+      expect(r.relative('..', from: 'foo/bar'), equals('../../..'));
+    });
+  });
+
+  group('resolve', () {
+    test('allows up to seven parts', () {
+      expect(builder.resolve('a'), 'http://dartlang.org/root/path/a');
+      expect(builder.resolve('a', 'b'), 'http://dartlang.org/root/path/a/b');
+      expect(builder.resolve('a', 'b', 'c'),
+          'http://dartlang.org/root/path/a/b/c');
+      expect(builder.resolve('a', 'b', 'c', 'd'),
+          'http://dartlang.org/root/path/a/b/c/d');
+      expect(builder.resolve('a', 'b', 'c', 'd', 'e'),
+          'http://dartlang.org/root/path/a/b/c/d/e');
+      expect(builder.resolve('a', 'b', 'c', 'd', 'e', 'f'),
+          'http://dartlang.org/root/path/a/b/c/d/e/f');
+      expect(builder.resolve('a', 'b', 'c', 'd', 'e', 'f', 'g'),
+          'http://dartlang.org/root/path/a/b/c/d/e/f/g');
+    });
+
+    test('does not add separator if a part ends in one', () {
+      expect(builder.resolve('a/', 'b', 'c/', 'd'),
+          'http://dartlang.org/root/path/a/b/c/d');
+      expect(builder.resolve(r'a\', 'b'),
+          r'http://dartlang.org/root/path/a\/b');
+    });
+
+    test('ignores parts before an absolute path', () {
+      expect(builder.resolve('a', '/b', '/c', 'd'), 'http://dartlang.org/c/d');
+      expect(builder.resolve('a', '/b', 'file:///c', 'd'), 'file:///c/d');
+      expect(builder.resolve('a', r'c:\b', 'c', 'd'),
+          r'http://dartlang.org/root/path/a/c:\b/c/d');
+      expect(builder.resolve('a', r'\\b', 'c', 'd'),
+          r'http://dartlang.org/root/path/a/\\b/c/d');
+    });
+  });
+
+  test('withoutExtension', () {
+    expect(builder.withoutExtension(''), '');
+    expect(builder.withoutExtension('a'), 'a');
+    expect(builder.withoutExtension('.a'), '.a');
+    expect(builder.withoutExtension('a.b'), 'a');
+    expect(builder.withoutExtension('a/b.c'), 'a/b');
+    expect(builder.withoutExtension('a/b.c.d'), 'a/b.c');
+    expect(builder.withoutExtension('a/'), 'a/');
+    expect(builder.withoutExtension('a/b/'), 'a/b/');
+    expect(builder.withoutExtension('a/.'), 'a/.');
+    expect(builder.withoutExtension('a/.b'), 'a/.b');
+    expect(builder.withoutExtension('a.b/c'), 'a.b/c');
+    expect(builder.withoutExtension(r'a.b\c'), r'a');
+    expect(builder.withoutExtension(r'a/b\c'), r'a/b\c');
+    expect(builder.withoutExtension(r'a/b\c.d'), r'a/b\c');
+    expect(builder.withoutExtension('a/b.c/'), 'a/b/');
+    expect(builder.withoutExtension('a/b.c//'), 'a/b//');
+  });
+}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 0f21f41..311fce9 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -68,6 +68,7 @@
 analyzer_experimental/test/generated/resolver_test: Skip # Imports dart:io.
 analyzer_experimental/test/generated/scanner_test: Skip # Imports dart:io.
 analyzer_experimental/test/error_test: Skip # Imports dart:io.
+analyzer_experimental/test/services/formatter_test: Skip #Imports dart:io
 
 # Issue 8440 forces us to use pathos in the scheduled_test tests, which would
 # otherwise be dart2js-compatible.
@@ -107,6 +108,7 @@
 analyzer_experimental/test/generated/resolver_test: Skip
 analyzer_experimental/test/generated/scanner_test: Skip
 analyzer_experimental/test/error_test: Skip # Imports dart:io.
+analyzer_experimental/test/services/formatter_test.dart: Skip #Imports dart:io
 
 [ $compiler == dartc ]
 unittest/test/mock_regexp_negative_test: Fail
diff --git a/runtime/lib/expando_patch.dart b/runtime/lib/expando_patch.dart
index 75369a2..d614535 100644
--- a/runtime/lib/expando_patch.dart
+++ b/runtime/lib/expando_patch.dart
@@ -40,10 +40,10 @@
         _data[i] = null;
       }
     }
-    if (i !== _data.length && value == null) {
+    if (i != _data.length && value == null) {
       doCompact = true;
       _data[i] = null;
-    } else if (i !== _data.length) {
+    } else if (i != _data.length) {
       _data[i].value = value;
     } else {
       _data.add(new _WeakProperty(object, value));
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 05a16e8..9fff0d7 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -377,7 +377,7 @@
   // Update redirection data with resolved target.
   factory.SetRedirectionTarget(target);
   // Not needed anymore.
-  factory.SetRedirectionIdentifier(String::null_object());
+  factory.SetRedirectionIdentifier(Object::null_string());
   if (!target.IsRedirectingFactory()) {
     return;
   }
@@ -885,7 +885,7 @@
                                   parameterized_type_name.ToCString()));
     return BoundedType::New(parameterized_type,
                             malformed_bound,
-                            TypeParameter::null_object());
+                            TypeParameter::Handle());
   }
 
   if (finalization >= kCanonicalize) {
@@ -1917,7 +1917,7 @@
   if (FLAG_enable_type_checks || !type.HasResolvedTypeClass()) {
     type.set_malformed_error(error);
   }
-  type.set_arguments(AbstractTypeArguments::null_object());
+  type.set_arguments(Object::null_abstract_type_arguments());
   if (!type.IsFinalized()) {
     type.SetIsFinalized();
     // Do not canonicalize malformed types, since they may not be resolved.
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index 9cc15fd..b155564 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -14,6 +14,19 @@
 #include "vm/stub_code.h"
 #include "vm/symbols.h"
 
+// Allow the use of ASan (AddressSanitizer). This is needed as ASan needs to be
+// told about areas where the VM does the equivalent of a long-jump.
+#if defined(__has_feature)
+#if __has_feature(address_sanitizer)
+extern "C" void __asan_unpoison_memory_region(void *, size_t);
+#else  // __has_feature(address_sanitizer)
+void __asan_unpoison_memory_region(void* ignore1, size_t ignore2) {}
+#endif  // __has_feature(address_sanitizer)
+#else  // defined(__has_feature)
+void __asan_unpoison_memory_region(void* ignore1, size_t ignore2) {}
+#endif  // defined(__has_feature)
+
+
 namespace dart {
 
 DEFINE_FLAG(bool, print_stacktrace_at_throw, false,
@@ -243,6 +256,11 @@
   typedef void (*ExcpHandler)(uword, uword, uword, RawObject*, RawObject*);
   ExcpHandler func = reinterpret_cast<ExcpHandler>(
       StubCode::JumpToExceptionHandlerEntryPoint());
+
+  // Unpoison the stack before we tear it down in the generated stub code.
+  uword current_sp = reinterpret_cast<uword>(&program_counter) - 1024;
+  __asan_unpoison_memory_region(reinterpret_cast<void*>(current_sp),
+                                stack_pointer - current_sp);
   func(program_counter, stack_pointer, frame_pointer,
        raw_exception, raw_stacktrace);
 #endif
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 26bcf90..f84bb4c 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -3697,6 +3697,7 @@
                                             kDeoptUnaryOp);
       __ negq(value);
       __ j(OVERFLOW, deopt);
+      Emit53BitOverflowCheck(compiler, deopt, value);
       break;
     }
     case Token::kBIT_NOT:
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index b2a77b9..cf218c8 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -73,6 +73,10 @@
 #endif
 #define RAW_NULL kHeapObjectTag
 Object* Object::null_object_ = NULL;
+Array* Object::null_array_ = NULL;
+String* Object::null_string_ = NULL;
+Instance* Object::null_instance_ = NULL;
+AbstractTypeArguments* Object::null_abstract_type_arguments_ = NULL;
 Array* Object::empty_array_ = NULL;
 Instance* Object::sentinel_ = NULL;
 Instance* Object::transition_sentinel_ = NULL;
@@ -326,7 +330,11 @@
   Heap* heap = isolate->heap();
 
   // Allocate the read only object handles here.
-  null_object_ = Array::ReadOnlyHandle();
+  null_object_ = Object::ReadOnlyHandle();
+  null_array_ = Array::ReadOnlyHandle();
+  null_string_ = String::ReadOnlyHandle();
+  null_instance_ = Instance::ReadOnlyHandle();
+  null_abstract_type_arguments_ = AbstractTypeArguments::ReadOnlyHandle();
   empty_array_ = Array::ReadOnlyHandle();
   sentinel_ = Instance::ReadOnlyHandle();
   transition_sentinel_ = Instance::ReadOnlyHandle();
@@ -347,7 +355,11 @@
     InitializeObject(address, kNullCid, Instance::InstanceSize());
   }
 
-  *null_object_ = null_;
+  *null_object_ = Object::null();
+  *null_array_ = Array::null();
+  *null_string_ = String::null();
+  *null_instance_ = Instance::null();
+  *null_abstract_type_arguments_ = AbstractTypeArguments::null();
 
   // Initialize the empty array handle to null_ in order to be able to check
   // if the empty array was allocated (RAW_NULL is not available).
@@ -547,6 +559,14 @@
       LanguageError::New(String::Handle(String::New("SnapshotWriter Error")));
 
   ASSERT(!null_object_->IsSmi());
+  ASSERT(!null_array_->IsSmi());
+  ASSERT(null_array_->IsArray());
+  ASSERT(!null_string_->IsSmi());
+  ASSERT(null_string_->IsString());
+  ASSERT(!null_instance_->IsSmi());
+  ASSERT(null_instance_->IsInstance());
+  ASSERT(!null_abstract_type_arguments_->IsSmi());
+  ASSERT(null_abstract_type_arguments_->IsAbstractTypeArguments());
   ASSERT(!empty_array_->IsSmi());
   ASSERT(empty_array_->IsArray());
   ASSERT(!sentinel_->IsSmi());
@@ -1066,7 +1086,7 @@
   // Remove the Object superclass cycle by setting the super type to null (not
   // to the type of null).
   cls = object_store->object_class();
-  cls.set_super_type(Type::null_object());
+  cls.set_super_type(AbstractType::Handle());
 
   ClassFinalizer::VerifyBootstrapClasses();
   MarkInvisibleFunctions();
@@ -1604,7 +1624,7 @@
     }
     num_type_args += cls.NumTypeParameters();
     // Object is its own super class during bootstrap.
-    if (cls.super_type() == Type::null() ||
+    if (cls.super_type() == AbstractType::null() ||
         cls.super_type() == isolate->object_store()->object_type()) {
       break;
     }
@@ -1626,7 +1646,7 @@
 
 
 RawClass* Class::SuperClass() const {
-  if (super_type() == Type::null()) {
+  if (super_type() == AbstractType::null()) {
     return Class::null();
   }
   const AbstractType& sup_type = AbstractType::Handle(super_type());
@@ -4882,7 +4902,7 @@
   result.set_name(name);
   result.set_is_static(is_static);
   if (is_static) {
-    result.set_value(Instance::null_object());
+    result.set_value(Object::null_instance());
   } else {
     result.SetOffset(0);
   }
@@ -4893,7 +4913,7 @@
   result.set_has_initializer(false);
   result.set_guarded_cid(kIllegalCid);
   result.set_is_nullable(false);
-  result.set_dependent_code(Array::null_object());
+  result.set_dependent_code(Object::null_array());
   return result.raw();
 }
 
@@ -4906,7 +4926,7 @@
   const PatchClass& clone_owner =
       PatchClass::Handle(PatchClass::New(new_owner, owner));
   clone.set_owner(clone_owner);
-  clone.set_dependent_code(Array::null_object());
+  clone.set_dependent_code(Object::null_array());
   if (!clone.is_static()) {
     clone.SetOffset(0);
   }
@@ -5000,7 +5020,7 @@
   if (code_objects.IsNull()) {
     return;
   }
-  set_dependent_code(Array::null_object());
+  set_dependent_code(Object::null_array());
 
   // Deoptimize all dependent code on the stack.
   Code& code = Code::Handle();
@@ -5645,7 +5665,7 @@
       const Array& symbols = Array::Handle(isolate,
                                            object_store->keyword_symbols());
       ASSERT(!symbols.IsNull());
-      ASSERT(symbols.At(kind - Token::kFirstKeyword) != String::null());
+      ASSERT(symbols.At(kind - Token::kFirstKeyword) != Object::null());
       return String::RawCast(symbols.At(kind - Token::kFirstKeyword));
     }
     return Symbols::New(Token::Str(kind));
@@ -6530,7 +6550,7 @@
     const Library& core_lib = Library::Handle(Library::CoreLibrary());
     ASSERT(!core_lib.IsNull());
     const Namespace& ns = Namespace::Handle(
-        Namespace::New(core_lib, Array::null_object(), Array::null_object()));
+        Namespace::New(core_lib, Object::null_array(), Object::null_array()));
     result.AddImport(ns);
   }
   return result.raw();
@@ -6548,7 +6568,7 @@
       Library::Handle(Library::NewLibraryHelper(core_lib_url, false));
   core_lib.Register();
   isolate->object_store()->set_bootstrap_library(ObjectStore::kCore, core_lib);
-  isolate->object_store()->set_root_library(Library::null_object());
+  isolate->object_store()->set_root_library(Library::Handle());
 
   // Hook up predefined classes without setting their library pointers. These
   // classes are coming from the VM isolate, and are shared between multiple
@@ -10412,6 +10432,14 @@
 }
 
 
+// Throw FiftyThreeBitOverflow exception.
+static void ThrowFiftyThreeBitOverflow(const Integer& i) {
+  const Array& exc_args = Array::Handle(Array::New(1));
+  exc_args.SetAt(0, i);
+  Exceptions::ThrowByType(Exceptions::kFiftyThreeBitOverflowError, exc_args);
+}
+
+
 RawInteger* Integer::New(const String& str, Heap::Space space) {
   // We are not supposed to have integers represented as two byte strings.
   ASSERT(str.IsOneByteString());
@@ -10420,12 +10448,19 @@
     const Bigint& big = Bigint::Handle(Bigint::New(str, space));
     ASSERT(!BigintOperations::FitsIntoSmi(big));
     ASSERT(!BigintOperations::FitsIntoInt64(big));
+    if (FLAG_throw_on_javascript_int_overflow) {
+      ThrowFiftyThreeBitOverflow(big);
+    }
     return big.raw();
   }
   return Integer::New(value, space);
 }
 
 
+// This is called from LiteralToken::New() in the parser, so we can't
+// raise an exception for 53-bit overflow here. Instead we do it in
+// Parser::CurrentIntegerLiteral(), which is the point in the parser where
+// integer literals escape, so we can call Parser::ErrorMsg().
 RawInteger* Integer::NewCanonical(const String& str) {
   // We are not supposed to have integers represented as two byte strings.
   ASSERT(str.IsOneByteString());
@@ -10443,14 +10478,6 @@
 }
 
 
-// Throw FiftyThreeBitOverflow exception.
-static void ThrowFiftyThreeBitOverflow(const Integer& i) {
-  const Array& exc_args = Array::Handle(Array::New(1));
-  exc_args.SetAt(0, i);
-  Exceptions::ThrowByType(Exceptions::kFiftyThreeBitOverflowError, exc_args);
-}
-
-
 RawInteger* Integer::New(int64_t value, Heap::Space space) {
   if ((value <= Smi::kMaxValue) && (value >= Smi::kMinValue)) {
     return Smi::New(value);
@@ -10495,31 +10522,32 @@
 }
 
 
-static void CheckFiftyThreeBitOverflow(const Integer &i) {
+// Returns true if the signed Integer requires more than 53 bits.
+bool Integer::CheckFiftyThreeBitOverflow() const {
   // Always overflow if the value doesn't fit into an int64_t.
   int64_t value = 1ULL << 63;
-  if (i.IsSmi()) {
-    value = i.AsInt64Value();
-  } else if (i.IsMint()) {
+  if (IsSmi()) {
+    value = AsInt64Value();
+  } else if (IsMint()) {
     Mint& mint = Mint::Handle();
-    mint ^= i.raw();
+    mint ^= raw();
     value = mint.value();
   } else {
-    ASSERT(i.IsBigint());
+    ASSERT(IsBigint());
     Bigint& big_value = Bigint::Handle();
-    big_value ^= i.raw();
+    big_value ^= raw();
     if (BigintOperations::FitsIntoInt64(big_value)) {
       value = BigintOperations::ToInt64(big_value);
     }
   }
-  if (Utils::IsInt(53, value)) return;
-  ThrowFiftyThreeBitOverflow(i);
+  return !Utils::IsInt(53, value);
 }
 
 
 RawInteger* Integer::AsValidInteger() const {
-  if (FLAG_throw_on_javascript_int_overflow) {
-    CheckFiftyThreeBitOverflow(*this);
+  if (FLAG_throw_on_javascript_int_overflow &&
+      CheckFiftyThreeBitOverflow()) {
+    ThrowFiftyThreeBitOverflow(*this);
   }
   if (IsSmi()) return raw();
   if (IsMint()) {
@@ -12639,7 +12667,7 @@
   intptr_t index = Length() - 1;
   const Array& contents = Array::Handle(data());
   const Object& obj = Object::Handle(contents.At(index));
-  contents.SetAt(index, null_object());
+  contents.SetAt(index, Object::null_object());
   SetLength(index);
   return obj.raw();
 }
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 482f696..149b390 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -117,9 +117,6 @@
   static Raw##object* null() {                                                 \
     return reinterpret_cast<Raw##object*>(Object::null());                     \
   }                                                                            \
-  static const object& null_object() {                                         \
-    return reinterpret_cast<const object&>(Object::null_object());             \
-  }                                                                            \
   virtual const char* ToCString() const;                                       \
   static const ClassId kClassId = k##object##Cid;                              \
  private:  /* NOLINT */                                                        \
@@ -283,6 +280,12 @@
     initializeHandle(obj, raw_ptr);
     return *obj;
   }
+  static Object* ReadOnlyHandle() {
+    Object* obj = reinterpret_cast<Object*>(
+        Dart::AllocateReadOnlyHandle());
+    initializeHandle(obj, Object::null());
+    return obj;
+  }
 
   static Object& Handle() {
     return Handle(Isolate::Current(), null_);
@@ -316,6 +319,22 @@
     ASSERT(null_object_ != NULL);
     return *null_object_;
   }
+  static const Array& null_array() {
+    ASSERT(null_array_ != NULL);
+    return *null_array_;
+  }
+  static const String& null_string() {
+    ASSERT(null_string_ != NULL);
+    return *null_string_;
+  }
+  static const Instance& null_instance() {
+    ASSERT(null_instance_ != NULL);
+    return *null_instance_;
+  }
+  static const AbstractTypeArguments& null_abstract_type_arguments() {
+    ASSERT(null_abstract_type_arguments_ != NULL);
+    return *null_abstract_type_arguments_;
+  }
   static const Array& empty_array() {
     ASSERT(empty_array_ != NULL);
     return *empty_array_;
@@ -550,6 +569,10 @@
   // The static values below are read-only handle pointers for singleton
   // objects that are shared between the different isolates.
   static Object* null_object_;
+  static Array* null_array_;
+  static String* null_string_;
+  static Instance* null_instance_;
+  static AbstractTypeArguments* null_abstract_type_arguments_;
   static Array* empty_array_;
   static Instance* sentinel_;
   static Instance* transition_sentinel_;
@@ -4012,6 +4035,9 @@
   RawInteger* ArithmeticOp(Token::Kind operation, const Integer& other) const;
   RawInteger* BitOp(Token::Kind operation, const Integer& other) const;
 
+  // Returns true if the Integer does not fit in 53 bits.
+  bool CheckFiftyThreeBitOverflow() const;
+
  private:
   // Return an integer in the form of a RawBigint.
   RawBigint* AsBigint() const;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index bcc02b0..aff2cb1 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -29,6 +29,7 @@
 DEFINE_FLAG(bool, trace_parser, false, "Trace parser operations.");
 DEFINE_FLAG(bool, warning_as_error, false, "Treat warnings as errors.");
 DEFINE_FLAG(bool, silent_warnings, false, "Silence warnings.");
+DECLARE_FLAG(bool, throw_on_javascript_int_overflow);
 
 static void CheckedModeHandler(bool value) {
   FLAG_enable_asserts = value;
@@ -402,7 +403,15 @@
 RawInteger* Parser::CurrentIntegerLiteral() const {
   literal_token_ ^= tokens_iterator_.CurrentToken();
   ASSERT(literal_token_.kind() == Token::kINTEGER);
-  return Integer::RawCast(literal_token_.value());
+  RawInteger* ri = Integer::RawCast(literal_token_.value());
+  if (FLAG_throw_on_javascript_int_overflow) {
+    const Integer& i = Integer::Handle(ri);
+    if (i.CheckFiftyThreeBitOverflow()) {
+      ErrorMsg(TokenPos(), "Integer literal does not fit in 53 bits: %s.",
+               i.ToCString());
+    }
+  }
+  return ri;
 }
 
 
@@ -4460,7 +4469,7 @@
     Library& core_lib = Library::Handle(Library::CoreLibrary());
     ASSERT(!core_lib.IsNull());
     const Namespace& core_ns = Namespace::Handle(
-        Namespace::New(core_lib, Array::null_object(), Array::null_object()));
+        Namespace::New(core_lib, Object::null_array(), Object::null_array()));
     library_.AddImport(core_ns);
   }
   while (CurrentToken() == Token::kPART) {
@@ -4514,8 +4523,9 @@
     ParsePartHeader();
   }
 
+  const Class& cls = Class::Handle(isolate());
   while (true) {
-    set_current_class(Class::null_object());  // No current class.
+    set_current_class(cls);  // No current class.
     SkipMetadata();
     if (CurrentToken() == Token::kCLASS) {
       ParseClassDeclaration(pending_classes);
@@ -6571,7 +6581,7 @@
 }
 
 
-void Parser::ErrorMsg(intptr_t token_pos, const char* format, ...) {
+void Parser::ErrorMsg(intptr_t token_pos, const char* format, ...) const {
   va_list args;
   va_start(args, format);
   const Error& error = Error::Handle(
@@ -8093,7 +8103,7 @@
           // generated AST is not deterministic. Therefore mark the function as
           // not optimizable.
           current_function().set_is_optimizable(false);
-          field.set_value(Instance::null_object());
+          field.set_value(Object::null_instance());
           // It is a compile-time error if evaluation of a compile-time constant
           // would raise an exception.
           AppendErrorMsg(error, TokenPos(),
@@ -8687,8 +8697,7 @@
     parameterized_type ^= type.raw();
     parameterized_type.set_type_class(
         Class::Handle(isolate(), Object::dynamic_class()));
-    parameterized_type.set_arguments(
-        AbstractTypeArguments::null_object());
+    parameterized_type.set_arguments(Object::null_abstract_type_arguments());
     parameterized_type.set_malformed_error(malformed_error);
   }
   if (finalization >= ClassFinalizer::kTryResolve) {
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index f78b9f2..42e1074 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -301,7 +301,7 @@
   void Unimplemented(const char* msg);
 
   // Reports error message at given location.
-  void ErrorMsg(intptr_t token_pos, const char* msg, ...)
+  void ErrorMsg(intptr_t token_pos, const char* msg, ...) const
       PRINTF_ATTRIBUTE(3, 4);
   void Warning(intptr_t token_pos, const char* msg, ...)
       PRINTF_ATTRIBUTE(3, 4);
diff --git a/runtime/vm/scanner.cc b/runtime/vm/scanner.cc
index 4600760..6162d1a 100644
--- a/runtime/vm/scanner.cc
+++ b/runtime/vm/scanner.cc
@@ -751,13 +751,10 @@
         }
         break;
 
-      case '!':  // !  !=  !==
+      case '!':  // !  !=
         Recognize(Token::kNOT);
         if (c0_ == '=') {
           Recognize(Token::kNE);
-          if (c0_ == '=') {
-            Recognize(Token::kNE_STRICT);
-          }
         }
         break;
 
@@ -771,13 +768,10 @@
         }
         break;
 
-      case '=':  // =  ==  ===  =>
+      case '=':  // =  ==  =>
         Recognize(Token::kASSIGN);
         if (c0_ == '=') {
           Recognize(Token::kEQ);
-          if (c0_ == '=') {
-            Recognize(Token::kEQ_STRICT);
-          }
         } else if (c0_ == '>') {
           Recognize(Token::kARROW);
         }
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index d0d3365..c092a32 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -1061,7 +1061,7 @@
       "  static Fields testMain() {"
       "    Fields obj = new Fields(10, 20);"
       "    Fields.fld3 = 100;"
-      "    if (obj === null) {"
+      "    if (obj == null) {"
       "      throw new Exception('Allocation failure');"
       "    }"
       "    if (obj.fld1 != 10) {"
diff --git a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
index f470414..ed1e8a6 100644
--- a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
+++ b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
@@ -140,9 +140,7 @@
       new Path(dartPath), libPath,
       options: const <String>['--categories=Client,Server', '--minify'])
   .then((jsCode) {
-    if (jsCode != null) {
-      writeString(new File(jsPath), jsCode);
-    }
+    if (jsCode != null) writeString(new File(jsPath), jsCode);
   });
 }
 
@@ -792,16 +790,21 @@
     String jsonString = json.stringify(createNavigationInfo());
     String dartString = jsonString.replaceAll(r"$", r"\$");
     var filePath = pathos.join(tmpPath, 'client.dart');
-    var clientDir = pathos.relative(
-        pathos.join(normalizedDartdocPath, 'lib', 'src', 'client'),
-        from: tmpPath);
+
+    var fileBuilder = new pathos.Builder(style: pathos.Style.url);
+
+    var clientDir = fileBuilder.join(
+        'file:///',
+        fileBuilder.relative(
+          fileBuilder.join(normalizedDartdocPath, 'lib', 'src', 'client'),
+          from: tmpPath));
 
     writeString(new File(filePath),
         '''library client;
         import 'dart:html';
         import 'dart:json';
-        import '${pathos.join(clientDir, 'client-shared.dart')}';
-        import '${pathos.join(clientDir, 'dropdown.dart')}';
+        import '${fileBuilder.join(clientDir, 'client-shared.dart')}';
+        import '${fileBuilder.join(clientDir, 'dropdown.dart')}';
 
         main() {
           setup();
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index a3f0363..703977e 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -1928,11 +1928,12 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://www.w3.org/TR/filter-effects/
+@Experimental // untriaged
 class CssFilterRule extends CssRule native "WebKitCSSFilterRule" {
 
   @DomName('WebKitCSSFilterRule.style')
   @DocsEditable
+  @Experimental // untriaged
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1941,6 +1942,89 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSFilterValue')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssFilterValue extends _CssValueList native "WebKitCSSFilterValue" {
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_BLUR')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_BLUR = 10;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_BRIGHTNESS = 8;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_CONTRAST')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_CONTRAST = 9;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_CUSTOM')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_CUSTOM = 12;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_DROP_SHADOW = 11;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_GRAYSCALE = 2;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_HUE_ROTATE = 5;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_INVERT')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_INVERT = 6;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_OPACITY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_OPACITY = 7;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_REFERENCE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_REFERENCE = 1;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_SATURATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_SATURATE = 4;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_SEPIA')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_SEPIA = 3;
+
+  @DomName('WebKitCSSFilterValue.operationType')
+  @DocsEditable
+  @Experimental // untriaged
+  final int operationType;
+
+  @DomName('WebKitCSSFilterValue.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  _CSSValue __getter__(int index) 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
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable
 @DomName('CSSFontFaceLoadEvent')
 // http://www.w3.org/TR/css3-fonts/
 @Experimental
@@ -2024,15 +2108,17 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://www.w3.org/TR/css3-animations/#CSSKeyframeRule-interface
+@Experimental // untriaged
 class CssKeyframeRule extends CssRule native "WebKitCSSKeyframeRule" {
 
   @DomName('WebKitCSSKeyframeRule.keyText')
   @DocsEditable
+  @Experimental // untriaged
   String keyText;
 
   @DomName('WebKitCSSKeyframeRule.style')
   @DocsEditable
+  @Experimental // untriaged
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2045,17 +2131,19 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://www.w3.org/TR/css3-animations/#csskeyframesrule
+@Experimental // untriaged
 class CssKeyframesRule extends CssRule native "WebKitCSSKeyframesRule" {
 
   @DomName('WebKitCSSKeyframesRule.cssRules')
   @DocsEditable
+  @Experimental // untriaged
   @Returns('_CssRuleList')
   @Creates('_CssRuleList')
   final List<CssRule> cssRules;
 
   @DomName('WebKitCSSKeyframesRule.name')
   @DocsEditable
+  @Experimental // untriaged
   String name;
 
   @DomName('WebKitCSSKeyframesRule.__getter__')
@@ -2065,14 +2153,17 @@
 
   @DomName('WebKitCSSKeyframesRule.deleteRule')
   @DocsEditable
+  @Experimental // untriaged
   void deleteRule(String key) native;
 
   @DomName('WebKitCSSKeyframesRule.findRule')
   @DocsEditable
+  @Experimental // untriaged
   CssKeyframeRule findRule(String key) native;
 
   @DomName('WebKitCSSKeyframesRule.insertRule')
   @DocsEditable
+  @Experimental // untriaged
   void insertRule(String rule) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2081,6 +2172,193 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSMatrix')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssMatrix native "WebKitCSSMatrix" {
+
+  @DomName('WebKitCSSMatrix.CSSMatrix')
+  @DocsEditable
+  factory CssMatrix([String cssValue]) {
+    if (cssValue != null) {
+      return CssMatrix._create_1(cssValue);
+    }
+    return CssMatrix._create_2();
+  }
+  static CssMatrix _create_1(cssValue) => JS('CssMatrix', 'new WebKitCSSMatrix(#)', cssValue);
+  static CssMatrix _create_2() => JS('CssMatrix', 'new WebKitCSSMatrix()');
+
+  @DomName('WebKitCSSMatrix.a')
+  @DocsEditable
+  @Experimental // untriaged
+  num a;
+
+  @DomName('WebKitCSSMatrix.b')
+  @DocsEditable
+  @Experimental // untriaged
+  num b;
+
+  @DomName('WebKitCSSMatrix.c')
+  @DocsEditable
+  @Experimental // untriaged
+  num c;
+
+  @DomName('WebKitCSSMatrix.d')
+  @DocsEditable
+  @Experimental // untriaged
+  num d;
+
+  @DomName('WebKitCSSMatrix.e')
+  @DocsEditable
+  @Experimental // untriaged
+  num e;
+
+  @DomName('WebKitCSSMatrix.f')
+  @DocsEditable
+  @Experimental // untriaged
+  num f;
+
+  @DomName('WebKitCSSMatrix.m11')
+  @DocsEditable
+  @Experimental // untriaged
+  num m11;
+
+  @DomName('WebKitCSSMatrix.m12')
+  @DocsEditable
+  @Experimental // untriaged
+  num m12;
+
+  @DomName('WebKitCSSMatrix.m13')
+  @DocsEditable
+  @Experimental // untriaged
+  num m13;
+
+  @DomName('WebKitCSSMatrix.m14')
+  @DocsEditable
+  @Experimental // untriaged
+  num m14;
+
+  @DomName('WebKitCSSMatrix.m21')
+  @DocsEditable
+  @Experimental // untriaged
+  num m21;
+
+  @DomName('WebKitCSSMatrix.m22')
+  @DocsEditable
+  @Experimental // untriaged
+  num m22;
+
+  @DomName('WebKitCSSMatrix.m23')
+  @DocsEditable
+  @Experimental // untriaged
+  num m23;
+
+  @DomName('WebKitCSSMatrix.m24')
+  @DocsEditable
+  @Experimental // untriaged
+  num m24;
+
+  @DomName('WebKitCSSMatrix.m31')
+  @DocsEditable
+  @Experimental // untriaged
+  num m31;
+
+  @DomName('WebKitCSSMatrix.m32')
+  @DocsEditable
+  @Experimental // untriaged
+  num m32;
+
+  @DomName('WebKitCSSMatrix.m33')
+  @DocsEditable
+  @Experimental // untriaged
+  num m33;
+
+  @DomName('WebKitCSSMatrix.m34')
+  @DocsEditable
+  @Experimental // untriaged
+  num m34;
+
+  @DomName('WebKitCSSMatrix.m41')
+  @DocsEditable
+  @Experimental // untriaged
+  num m41;
+
+  @DomName('WebKitCSSMatrix.m42')
+  @DocsEditable
+  @Experimental // untriaged
+  num m42;
+
+  @DomName('WebKitCSSMatrix.m43')
+  @DocsEditable
+  @Experimental // untriaged
+  num m43;
+
+  @DomName('WebKitCSSMatrix.m44')
+  @DocsEditable
+  @Experimental // untriaged
+  num m44;
+
+  @DomName('WebKitCSSMatrix.inverse')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix inverse() native;
+
+  @DomName('WebKitCSSMatrix.multiply')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix multiply(CssMatrix secondMatrix) native;
+
+  @DomName('WebKitCSSMatrix.rotate')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix rotate(num rotX, num rotY, num rotZ) native;
+
+  @DomName('WebKitCSSMatrix.rotateAxisAngle')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix rotateAxisAngle(num x, num y, num z, num angle) native;
+
+  @DomName('WebKitCSSMatrix.scale')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix scale(num scaleX, num scaleY, num scaleZ) native;
+
+  @DomName('WebKitCSSMatrix.setMatrixValue')
+  @DocsEditable
+  @Experimental // untriaged
+  void setMatrixValue(String string) native;
+
+  @DomName('WebKitCSSMatrix.skewX')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix skewX(num angle) native;
+
+  @DomName('WebKitCSSMatrix.skewY')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix skewY(num angle) native;
+
+  @DomName('WebKitCSSMatrix.toString')
+  @DocsEditable
+  @Experimental // untriaged
+  String toString() native;
+
+  @DomName('WebKitCSSMatrix.translate')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix translate(num x, num y, num z) 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
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable
 @DomName('CSSMediaRule')
 class CssMediaRule extends CssRule native "CSSMediaRule" {
 
@@ -2108,6 +2386,19 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSMixFunctionValue')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssMixFunctionValue extends _CssValueList native "WebKitCSSMixFunctionValue" {
+}
+// 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('CSSPageRule')
 class CssPageRule extends CssRule native "CSSPageRule" {
 
@@ -2129,11 +2420,12 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://dev.w3.org/csswg/css-regions/#region-style-rule-interface
+@Experimental // untriaged
 class CssRegionRule extends CssRule native "WebKitCSSRegionRule" {
 
   @DomName('WebKitCSSRegionRule.cssRules')
   @DocsEditable
+  @Experimental // untriaged
   @Returns('_CssRuleList')
   @Creates('_CssRuleList')
   final List<CssRule> cssRules;
@@ -2255,6 +2547,11 @@
   @DocsEditable
   final CssRule parentRule;
 
+  @DomName('CSSStyleDeclaration.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(String propertyName, String propertyValue) native;
+
   @DomName('CSSStyleDeclaration.getPropertyPriority')
   @DocsEditable
   String getPropertyPriority(String propertyName) native;
@@ -5557,6 +5854,134 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSTransformValue')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssTransformValue extends _CssValueList native "WebKitCSSTransformValue" {
+
+  @DomName('WebKitCSSTransformValue.CSS_MATRIX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_MATRIX = 11;
+
+  @DomName('WebKitCSSTransformValue.CSS_MATRIX3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_MATRIX3D = 21;
+
+  @DomName('WebKitCSSTransformValue.CSS_PERSPECTIVE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_PERSPECTIVE = 20;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATE = 4;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATE3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATE3D = 17;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATEX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATEX = 14;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATEY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATEY = 15;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATEZ')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATEZ = 16;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALE = 5;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALE3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALE3D = 19;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALEX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALEX = 6;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALEY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALEY = 7;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALEZ')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALEZ = 18;
+
+  @DomName('WebKitCSSTransformValue.CSS_SKEW')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SKEW = 8;
+
+  @DomName('WebKitCSSTransformValue.CSS_SKEWX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SKEWX = 9;
+
+  @DomName('WebKitCSSTransformValue.CSS_SKEWY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SKEWY = 10;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATE = 1;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATE3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATE3D = 13;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATEX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATEX = 2;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATEY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATEY = 3;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATEZ')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATEZ = 12;
+
+  @DomName('WebKitCSSTransformValue.operationType')
+  @DocsEditable
+  @Experimental // untriaged
+  final int operationType;
+
+  @DomName('WebKitCSSTransformValue.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  _CSSValue __getter__(int index) 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
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable
 @DomName('CSSUnknownRule')
 // http://dev.w3.org/csswg/cssom/#the-cssstylesheet-interface
 @deprecated // deprecated
@@ -7204,7 +7629,11 @@
 @DomName('DOMStringMap')
 abstract class DomStringMap {
 
+  bool __delete__(String name);
+
   String __getter__(String name);
+
+  void __setter__(String name, String value);
 }
 // 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
@@ -8533,15 +8962,6 @@
   @DocsEditable
   final String tagName;
 
-  @JSName('webkitInsertionParent')
-  @DomName('Element.webkitInsertionParent')
-  @DocsEditable
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental
-  // https://www.w3.org/Bugs/Public/show_bug.cgi?id=21067
-  final Node insertionParent;
-
   @JSName('webkitPseudo')
   @DomName('Element.webkitPseudo')
   @DocsEditable
@@ -9173,6 +9593,16 @@
   @DomName('HTMLEmbedElement.width')
   @DocsEditable
   String width;
+
+  @DomName('HTMLEmbedElement.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  bool __getter__(index_OR_name) native;
+
+  @DomName('HTMLEmbedElement.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(index_OR_name, Node value) 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
@@ -9534,6 +9964,14 @@
   @DocsEditable
   final int eventPhase;
 
+  @DomName('Event.path')
+  @DocsEditable
+  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
+  @Experimental
+  @Returns('NodeList')
+  @Creates('NodeList')
+  final List<Node> path;
+
   EventTarget get target => _convertNativeToDart_EventTarget(this._get_target);
   @JSName('target')
   @DomName('Event.target')
@@ -9555,14 +9993,6 @@
   @DocsEditable
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native;
 
-  @DomName('Event.path')
-  @DocsEditable
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
-  @Experimental
-  @Returns('NodeList')
-  @Creates('NodeList')
-  List<Node> path() native;
-
   @DomName('Event.preventDefault')
   @DocsEditable
   void preventDefault() native;
@@ -10995,7 +11425,7 @@
     if (JS("bool", "# >>> 0 !== # || # >= #", index,
         index, index, length))
       throw new RangeError.range(index, 0, length);
-    return JS("Node", "#[#]", this, index);
+    return this.item(index);
   }
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -11035,6 +11465,11 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
+  @DomName('HTMLAllCollection.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Node __getter__(int index) native;
+
   @DomName('HTMLAllCollection.item')
   @DocsEditable
   Node item(int index) native;
@@ -11106,6 +11541,11 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
+  @DomName('HTMLCollection.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Node __getter__(String name) native;
+
   @DomName('HTMLCollection.item')
   @DocsEditable
   Node item(int index) native;
@@ -13308,6 +13748,11 @@
   @DocsEditable
   String hreflang;
 
+  @DomName('HTMLLinkElement.import')
+  @DocsEditable
+  @Experimental // untriaged
+  final DocumentFragment import;
+
   @DomName('HTMLLinkElement.media')
   @DocsEditable
   String media;
@@ -14900,6 +15345,43 @@
 
 
 @DocsEditable
+@DomName('MIDIAccess')
+@Experimental // untriaged
+class MidiAccess extends EventTarget native "MIDIAccess" {
+
+  @JSName('addEventListener')
+  @DomName('MIDIAccess.addEventListener')
+  @DocsEditable
+  @Experimental // untriaged
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
+
+  @DomName('MIDIAccess.dispatchEvent')
+  @DocsEditable
+  @Experimental // untriaged
+  bool dispatchEvent(Event event) native;
+
+  @DomName('MIDIAccess.inputs')
+  @DocsEditable
+  @Experimental // untriaged
+  List<MidiInput> inputs() native;
+
+  @DomName('MIDIAccess.outputs')
+  @DocsEditable
+  @Experimental // untriaged
+  List<MidiOutput> outputs() native;
+
+  @JSName('removeEventListener')
+  @DomName('MIDIAccess.removeEventListener')
+  @DocsEditable
+  @Experimental // untriaged
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) 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
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable
 @DomName('MIDIConnectionEvent')
 // http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface
 @Experimental
@@ -15091,6 +15573,11 @@
   MimeType elementAt(int index) => this[index];
   // -- end List<MimeType> mixins.
 
+  @DomName('MimeTypeArray.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  MimeType __getter__(String name) native;
+
   @DomName('MimeTypeArray.item')
   @DocsEditable
   MimeType item(int index) native;
@@ -15578,6 +16065,11 @@
   @DocsEditable
   final int length;
 
+  @DomName('WebKitNamedFlowCollection.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  NamedFlow __getter__(String name) native;
+
   @DomName('WebKitNamedFlowCollection.item')
   @DocsEditable
   NamedFlow item(int index) native;
@@ -15795,15 +16287,20 @@
 @Experimental
 class NavigatorUserMediaError native "NavigatorUserMediaError" {
 
-  @DomName('NavigatorUserMediaError.PERMISSION_DENIED')
+  @DomName('NavigatorUserMediaError.constraintName')
   @DocsEditable
-  @Experimental // nonstandard
-  static const int PERMISSION_DENIED = 1;
+  @Experimental // untriaged
+  final String constraintName;
 
-  @DomName('NavigatorUserMediaError.code')
+  @DomName('NavigatorUserMediaError.message')
   @DocsEditable
-  @Experimental // nonstandard
-  final int code;
+  @Experimental // untriaged
+  final String message;
+
+  @DomName('NavigatorUserMediaError.name')
+  @DocsEditable
+  @Experimental // untriaged
+  final String name;
 }
 // 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
@@ -16749,6 +17246,16 @@
   @DocsEditable
   final bool willValidate;
 
+  @DomName('HTMLObjectElement.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  bool __getter__(index_OR_name) native;
+
+  @DomName('HTMLObjectElement.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(index_OR_name, Node value) native;
+
   @DomName('HTMLObjectElement.checkValidity')
   @DocsEditable
   bool checkValidity() native;
@@ -17424,6 +17931,11 @@
   @DocsEditable
   final String name;
 
+  @DomName('Plugin.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  MimeType __getter__(String name) native;
+
   @DomName('Plugin.item')
   @DocsEditable
   MimeType item(int index) native;
@@ -17490,6 +18002,11 @@
   Plugin elementAt(int index) => this[index];
   // -- end List<Plugin> mixins.
 
+  @DomName('PluginArray.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Plugin __getter__(String name) native;
+
   @DomName('PluginArray.item')
   @DocsEditable
   Plugin item(int index) native;
@@ -17924,6 +18441,21 @@
 
 
 @DocsEditable
+@DomName('ResourceProgressEvent')
+@Experimental // untriaged
+class ResourceProgressEvent extends ProgressEvent native "ResourceProgressEvent" {
+
+  @DomName('ResourceProgressEvent.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('RTCDataChannel')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannel
 @Experimental
@@ -18543,6 +19075,11 @@
 @Experimental
 class RtcStatsResponse native "RTCStatsResponse" {
 
+  @DomName('RTCStatsResponse.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  RtcStatsReport __getter__(String name) native;
+
   @DomName('RTCStatsResponse.namedItem')
   @DocsEditable
   RtcStatsReport namedItem(String name) native;
@@ -18859,6 +19396,11 @@
   @DocsEditable
   final bool willValidate;
 
+  @DomName('HTMLSelectElement.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(int index, OptionElement value) native;
+
   @DomName('HTMLSelectElement.checkValidity')
   @DocsEditable
   bool checkValidity() native;
@@ -19926,11 +20468,21 @@
   @DocsEditable
   final int $dom_length;
 
+  @DomName('Storage.__delete__')
+  @DocsEditable
+  @Experimental // untriaged
+  bool __delete__(index_OR_name) native;
+
   @DomName('Storage.__getter__')
   @DocsEditable
   @Experimental // untriaged
   String __getter__(index_OR_name) native;
 
+  @DomName('Storage.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(index_OR_name, String value) native;
+
   @JSName('clear')
   @DomName('Storage.clear')
   @DocsEditable
@@ -20623,15 +21175,6 @@
 class Text extends CharacterData native "Text" {
   factory Text(String data) => document.$dom_createTextNode(data);
 
-  @JSName('webkitInsertionParent')
-  @DomName('Text.webkitInsertionParent')
-  @DocsEditable
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental
-  // https://www.w3.org/Bugs/Public/show_bug.cgi?id=21067
-  final Node insertionParent;
-
   @DomName('Text.wholeText')
   @DocsEditable
   final String wholeText;
@@ -22926,8 +23469,14 @@
   @Experimental // untriaged
   @Creates('Window|=Object')
   @Returns('Window|=Object')
-  WindowBase __getter__(int index) {
-    return _convertNativeToDart_Window(___getter___1(index));
+  WindowBase __getter__(index_OR_name) {
+    if ((index_OR_name is int || index_OR_name == null)) {
+      return _convertNativeToDart_Window(___getter___1(index_OR_name));
+    }
+    if ((index_OR_name is String || index_OR_name == null)) {
+      return _convertNativeToDart_Window(___getter___2(index_OR_name));
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('__getter__')
   @DomName('Window.__getter__')
@@ -22935,7 +23484,14 @@
   @Experimental // untriaged
   @Creates('Window|=Object')
   @Returns('Window|=Object')
-  ___getter___1(index) native;
+  ___getter___1(int index) native;
+  @JSName('__getter__')
+  @DomName('Window.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  @Creates('Window|=Object')
+  @Returns('Window|=Object')
+  ___getter___2(String name) native;
 
   @JSName('addEventListener')
   @DomName('Window.addEventListener')
@@ -24614,6 +25170,11 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
+  @DomName('NamedNodeMap.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Node __getter__(String name) native;
+
   @DomName('NamedNodeMap.getNamedItem')
   @DocsEditable
   Node getNamedItem(String name) native;
@@ -24899,6 +25460,11 @@
   StyleSheet elementAt(int index) => this[index];
   // -- end List<StyleSheet> mixins.
 
+  @DomName('StyleSheetList.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  CssStyleSheet __getter__(String name) native;
+
   @DomName('StyleSheetList.item')
   @DocsEditable
   StyleSheet item(int index) native;
@@ -24921,9 +25487,6 @@
 
 @DocsEditable
 @DomName('WebKitCSSMatrix')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
 abstract class _WebKitCSSMatrix native "WebKitCSSMatrix" {
@@ -24967,6 +25530,95 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSFilterRule')
+// http://www.w3.org/TR/filter-effects/
+@Experimental
+class _WebKitCssFilterRule extends CssRule native "WebKitCSSFilterRule" {
+
+  @DomName('WebKitCSSFilterRule.style')
+  @DocsEditable
+  final CssStyleDeclaration style;
+}
+// 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('WebKitCSSKeyframeRule')
+// http://www.w3.org/TR/css3-animations/#CSSKeyframeRule-interface
+@Experimental
+class _WebKitCssKeyframeRule extends CssRule native "WebKitCSSKeyframeRule" {
+
+  @DomName('WebKitCSSKeyframeRule.keyText')
+  @DocsEditable
+  String keyText;
+
+  @DomName('WebKitCSSKeyframeRule.style')
+  @DocsEditable
+  final CssStyleDeclaration style;
+}
+// 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('WebKitCSSKeyframesRule')
+// http://www.w3.org/TR/css3-animations/#csskeyframesrule
+@Experimental
+class _WebKitCssKeyframesRule extends CssRule native "WebKitCSSKeyframesRule" {
+
+  @DomName('WebKitCSSKeyframesRule.cssRules')
+  @DocsEditable
+  @Returns('_CssRuleList')
+  @Creates('_CssRuleList')
+  final List<CssRule> cssRules;
+
+  @DomName('WebKitCSSKeyframesRule.name')
+  @DocsEditable
+  String name;
+
+  @DomName('WebKitCSSKeyframesRule.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  _WebKitCssKeyframeRule __getter__(int index) native;
+
+  @DomName('WebKitCSSKeyframesRule.deleteRule')
+  @DocsEditable
+  void deleteRule(String key) native;
+
+  @DomName('WebKitCSSKeyframesRule.findRule')
+  @DocsEditable
+  _WebKitCssKeyframeRule findRule(String key) native;
+
+  @DomName('WebKitCSSKeyframesRule.insertRule')
+  @DocsEditable
+  void insertRule(String rule) 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
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable
+@DomName('WebKitCSSRegionRule')
+// http://dev.w3.org/csswg/css-regions/#region-style-rule-interface
+@Experimental
+class _WebKitCssRegionRule extends CssRule native "WebKitCSSRegionRule" {
+
+  @DomName('WebKitCSSRegionRule.cssRules')
+  @DocsEditable
+  @Returns('_CssRuleList')
+  @Creates('_CssRuleList')
+  final List<CssRule> cssRules;
+}
+// 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('WorkerContext')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#WorkerGlobalScope-partial
 @Experimental // stable
@@ -25231,7 +25883,7 @@
 /**
  * An object that can be drawn to a [CanvasRenderingContext2D] object with
  * [CanvasRenderingContext2D.drawImage],
- * [CanvasRenderingContext2D.drawImageRect],
+ * [CanvasRenderingContext2D.drawImageToRect],
  * [CanvasRenderingContext2D.drawImageScaled], or
  * [CanvasRenderingContext2D.drawImageScaledFromSource].
  *
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index e8df740..420dd93 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -2332,13 +2332,101 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://www.w3.org/TR/filter-effects/
+@Experimental // untriaged
 class CssFilterRule extends CssRule {
   CssFilterRule.internal() : super.internal();
 
   @DomName('WebKitCSSFilterRule.style')
   @DocsEditable
-  CssStyleDeclaration get style native "WebKitCSSFilterRule_style_Getter";
+  @Experimental // untriaged
+  CssStyleDeclaration get style native "CSSFilterRule_style_Getter";
+
+}
+// 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('WebKitCSSFilterValue')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssFilterValue extends _CssValueList {
+  CssFilterValue.internal() : super.internal();
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_BLUR')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_BLUR = 10;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_BRIGHTNESS = 8;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_CONTRAST')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_CONTRAST = 9;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_CUSTOM')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_CUSTOM = 12;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_DROP_SHADOW = 11;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_GRAYSCALE = 2;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_HUE_ROTATE = 5;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_INVERT')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_INVERT = 6;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_OPACITY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_OPACITY = 7;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_REFERENCE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_REFERENCE = 1;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_SATURATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_SATURATE = 4;
+
+  @DomName('WebKitCSSFilterValue.CSS_FILTER_SEPIA')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_FILTER_SEPIA = 3;
+
+  @DomName('WebKitCSSFilterValue.operationType')
+  @DocsEditable
+  @Experimental // untriaged
+  int get operationType native "CSSFilterValue_operationType_Getter";
+
+  @DomName('WebKitCSSFilterValue.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  _CSSValue __getter__(int index) native "CSSFilterValue___getter___Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2446,21 +2534,24 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://www.w3.org/TR/css3-animations/#CSSKeyframeRule-interface
+@Experimental // untriaged
 class CssKeyframeRule extends CssRule {
   CssKeyframeRule.internal() : super.internal();
 
   @DomName('WebKitCSSKeyframeRule.keyText')
   @DocsEditable
-  String get keyText native "WebKitCSSKeyframeRule_keyText_Getter";
+  @Experimental // untriaged
+  String get keyText native "CSSKeyframeRule_keyText_Getter";
 
   @DomName('WebKitCSSKeyframeRule.keyText')
   @DocsEditable
-  void set keyText(String value) native "WebKitCSSKeyframeRule_keyText_Setter";
+  @Experimental // untriaged
+  void set keyText(String value) native "CSSKeyframeRule_keyText_Setter";
 
   @DomName('WebKitCSSKeyframeRule.style')
   @DocsEditable
-  CssStyleDeclaration get style native "WebKitCSSKeyframeRule_style_Getter";
+  @Experimental // untriaged
+  CssStyleDeclaration get style native "CSSKeyframeRule_style_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2475,38 +2566,343 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://www.w3.org/TR/css3-animations/#csskeyframesrule
+@Experimental // untriaged
 class CssKeyframesRule extends CssRule {
   CssKeyframesRule.internal() : super.internal();
 
   @DomName('WebKitCSSKeyframesRule.cssRules')
   @DocsEditable
-  List<CssRule> get cssRules native "WebKitCSSKeyframesRule_cssRules_Getter";
+  @Experimental // untriaged
+  List<CssRule> get cssRules native "CSSKeyframesRule_cssRules_Getter";
 
   @DomName('WebKitCSSKeyframesRule.name')
   @DocsEditable
-  String get name native "WebKitCSSKeyframesRule_name_Getter";
+  @Experimental // untriaged
+  String get name native "CSSKeyframesRule_name_Getter";
 
   @DomName('WebKitCSSKeyframesRule.name')
   @DocsEditable
-  void set name(String value) native "WebKitCSSKeyframesRule_name_Setter";
+  @Experimental // untriaged
+  void set name(String value) native "CSSKeyframesRule_name_Setter";
 
   @DomName('WebKitCSSKeyframesRule.__getter__')
   @DocsEditable
   @Experimental // untriaged
-  CssKeyframeRule __getter__(int index) native "WebKitCSSKeyframesRule___getter___Callback";
+  CssKeyframeRule __getter__(int index) native "CSSKeyframesRule___getter___Callback";
 
   @DomName('WebKitCSSKeyframesRule.deleteRule')
   @DocsEditable
-  void deleteRule(String key) native "WebKitCSSKeyframesRule_deleteRule_Callback";
+  @Experimental // untriaged
+  void deleteRule(String key) native "CSSKeyframesRule_deleteRule_Callback";
 
   @DomName('WebKitCSSKeyframesRule.findRule')
   @DocsEditable
-  CssKeyframeRule findRule(String key) native "WebKitCSSKeyframesRule_findRule_Callback";
+  @Experimental // untriaged
+  CssKeyframeRule findRule(String key) native "CSSKeyframesRule_findRule_Callback";
 
   @DomName('WebKitCSSKeyframesRule.insertRule')
   @DocsEditable
-  void insertRule(String rule) native "WebKitCSSKeyframesRule_insertRule_Callback";
+  @Experimental // untriaged
+  void insertRule(String rule) native "CSSKeyframesRule_insertRule_Callback";
+
+}
+// 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('WebKitCSSMatrix')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssMatrix extends NativeFieldWrapperClass1 {
+  CssMatrix.internal();
+
+  @DomName('WebKitCSSMatrix.CSSMatrix')
+  @DocsEditable
+  factory CssMatrix([String cssValue]) {
+    return CssMatrix._create_1(cssValue);
+  }
+
+  @DocsEditable
+  static CssMatrix _create_1(cssValue) native "CSSMatrix__create_1constructorCallback";
+
+  @DomName('WebKitCSSMatrix.a')
+  @DocsEditable
+  @Experimental // untriaged
+  num get a native "CSSMatrix_a_Getter";
+
+  @DomName('WebKitCSSMatrix.a')
+  @DocsEditable
+  @Experimental // untriaged
+  void set a(num value) native "CSSMatrix_a_Setter";
+
+  @DomName('WebKitCSSMatrix.b')
+  @DocsEditable
+  @Experimental // untriaged
+  num get b native "CSSMatrix_b_Getter";
+
+  @DomName('WebKitCSSMatrix.b')
+  @DocsEditable
+  @Experimental // untriaged
+  void set b(num value) native "CSSMatrix_b_Setter";
+
+  @DomName('WebKitCSSMatrix.c')
+  @DocsEditable
+  @Experimental // untriaged
+  num get c native "CSSMatrix_c_Getter";
+
+  @DomName('WebKitCSSMatrix.c')
+  @DocsEditable
+  @Experimental // untriaged
+  void set c(num value) native "CSSMatrix_c_Setter";
+
+  @DomName('WebKitCSSMatrix.d')
+  @DocsEditable
+  @Experimental // untriaged
+  num get d native "CSSMatrix_d_Getter";
+
+  @DomName('WebKitCSSMatrix.d')
+  @DocsEditable
+  @Experimental // untriaged
+  void set d(num value) native "CSSMatrix_d_Setter";
+
+  @DomName('WebKitCSSMatrix.e')
+  @DocsEditable
+  @Experimental // untriaged
+  num get e native "CSSMatrix_e_Getter";
+
+  @DomName('WebKitCSSMatrix.e')
+  @DocsEditable
+  @Experimental // untriaged
+  void set e(num value) native "CSSMatrix_e_Setter";
+
+  @DomName('WebKitCSSMatrix.f')
+  @DocsEditable
+  @Experimental // untriaged
+  num get f native "CSSMatrix_f_Getter";
+
+  @DomName('WebKitCSSMatrix.f')
+  @DocsEditable
+  @Experimental // untriaged
+  void set f(num value) native "CSSMatrix_f_Setter";
+
+  @DomName('WebKitCSSMatrix.m11')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m11 native "CSSMatrix_m11_Getter";
+
+  @DomName('WebKitCSSMatrix.m11')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m11(num value) native "CSSMatrix_m11_Setter";
+
+  @DomName('WebKitCSSMatrix.m12')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m12 native "CSSMatrix_m12_Getter";
+
+  @DomName('WebKitCSSMatrix.m12')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m12(num value) native "CSSMatrix_m12_Setter";
+
+  @DomName('WebKitCSSMatrix.m13')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m13 native "CSSMatrix_m13_Getter";
+
+  @DomName('WebKitCSSMatrix.m13')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m13(num value) native "CSSMatrix_m13_Setter";
+
+  @DomName('WebKitCSSMatrix.m14')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m14 native "CSSMatrix_m14_Getter";
+
+  @DomName('WebKitCSSMatrix.m14')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m14(num value) native "CSSMatrix_m14_Setter";
+
+  @DomName('WebKitCSSMatrix.m21')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m21 native "CSSMatrix_m21_Getter";
+
+  @DomName('WebKitCSSMatrix.m21')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m21(num value) native "CSSMatrix_m21_Setter";
+
+  @DomName('WebKitCSSMatrix.m22')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m22 native "CSSMatrix_m22_Getter";
+
+  @DomName('WebKitCSSMatrix.m22')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m22(num value) native "CSSMatrix_m22_Setter";
+
+  @DomName('WebKitCSSMatrix.m23')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m23 native "CSSMatrix_m23_Getter";
+
+  @DomName('WebKitCSSMatrix.m23')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m23(num value) native "CSSMatrix_m23_Setter";
+
+  @DomName('WebKitCSSMatrix.m24')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m24 native "CSSMatrix_m24_Getter";
+
+  @DomName('WebKitCSSMatrix.m24')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m24(num value) native "CSSMatrix_m24_Setter";
+
+  @DomName('WebKitCSSMatrix.m31')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m31 native "CSSMatrix_m31_Getter";
+
+  @DomName('WebKitCSSMatrix.m31')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m31(num value) native "CSSMatrix_m31_Setter";
+
+  @DomName('WebKitCSSMatrix.m32')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m32 native "CSSMatrix_m32_Getter";
+
+  @DomName('WebKitCSSMatrix.m32')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m32(num value) native "CSSMatrix_m32_Setter";
+
+  @DomName('WebKitCSSMatrix.m33')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m33 native "CSSMatrix_m33_Getter";
+
+  @DomName('WebKitCSSMatrix.m33')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m33(num value) native "CSSMatrix_m33_Setter";
+
+  @DomName('WebKitCSSMatrix.m34')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m34 native "CSSMatrix_m34_Getter";
+
+  @DomName('WebKitCSSMatrix.m34')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m34(num value) native "CSSMatrix_m34_Setter";
+
+  @DomName('WebKitCSSMatrix.m41')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m41 native "CSSMatrix_m41_Getter";
+
+  @DomName('WebKitCSSMatrix.m41')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m41(num value) native "CSSMatrix_m41_Setter";
+
+  @DomName('WebKitCSSMatrix.m42')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m42 native "CSSMatrix_m42_Getter";
+
+  @DomName('WebKitCSSMatrix.m42')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m42(num value) native "CSSMatrix_m42_Setter";
+
+  @DomName('WebKitCSSMatrix.m43')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m43 native "CSSMatrix_m43_Getter";
+
+  @DomName('WebKitCSSMatrix.m43')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m43(num value) native "CSSMatrix_m43_Setter";
+
+  @DomName('WebKitCSSMatrix.m44')
+  @DocsEditable
+  @Experimental // untriaged
+  num get m44 native "CSSMatrix_m44_Getter";
+
+  @DomName('WebKitCSSMatrix.m44')
+  @DocsEditable
+  @Experimental // untriaged
+  void set m44(num value) native "CSSMatrix_m44_Setter";
+
+  @DomName('WebKitCSSMatrix.inverse')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix inverse() native "CSSMatrix_inverse_Callback";
+
+  @DomName('WebKitCSSMatrix.multiply')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix multiply(CssMatrix secondMatrix) native "CSSMatrix_multiply_Callback";
+
+  @DomName('WebKitCSSMatrix.rotate')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix rotate(num rotX, num rotY, num rotZ) native "CSSMatrix_rotate_Callback";
+
+  @DomName('WebKitCSSMatrix.rotateAxisAngle')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix rotateAxisAngle(num x, num y, num z, num angle) native "CSSMatrix_rotateAxisAngle_Callback";
+
+  @DomName('WebKitCSSMatrix.scale')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix scale(num scaleX, num scaleY, num scaleZ) native "CSSMatrix_scale_Callback";
+
+  @DomName('WebKitCSSMatrix.setMatrixValue')
+  @DocsEditable
+  @Experimental // untriaged
+  void setMatrixValue(String string) native "CSSMatrix_setMatrixValue_Callback";
+
+  @DomName('WebKitCSSMatrix.skewX')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix skewX(num angle) native "CSSMatrix_skewX_Callback";
+
+  @DomName('WebKitCSSMatrix.skewY')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix skewY(num angle) native "CSSMatrix_skewY_Callback";
+
+  @DomName('WebKitCSSMatrix.toString')
+  @DocsEditable
+  @Experimental // untriaged
+  String toString() native "CSSMatrix_toString_Callback";
+
+  @DomName('WebKitCSSMatrix.translate')
+  @DocsEditable
+  @Experimental // untriaged
+  CssMatrix translate(num x, num y, num z) native "CSSMatrix_translate_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2546,6 +2942,23 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSMixFunctionValue')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssMixFunctionValue extends _CssValueList {
+  CssMixFunctionValue.internal() : super.internal();
+
+}
+// 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('CSSPageRule')
 class CssPageRule extends CssRule {
   CssPageRule.internal() : super.internal();
@@ -2575,13 +2988,14 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental
-// http://dev.w3.org/csswg/css-regions/#region-style-rule-interface
+@Experimental // untriaged
 class CssRegionRule extends CssRule {
   CssRegionRule.internal() : super.internal();
 
   @DomName('WebKitCSSRegionRule.cssRules')
   @DocsEditable
-  List<CssRule> get cssRules native "WebKitCSSRegionRule_cssRules_Getter";
+  @Experimental // untriaged
+  List<CssRule> get cssRules native "CSSRegionRule_cssRules_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2714,6 +3128,11 @@
   @DocsEditable
   CssRule get parentRule native "CSSStyleDeclaration_parentRule_Getter";
 
+  @DomName('CSSStyleDeclaration.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(String propertyName, String propertyValue) native "CSSStyleDeclaration___setter___Callback";
+
   @DomName('CSSStyleDeclaration.getPropertyPriority')
   @DocsEditable
   String getPropertyPriority(String propertyName) native "CSSStyleDeclaration_getPropertyPriority_Callback";
@@ -6024,6 +6443,138 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSTransformValue')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental
+@Experimental // untriaged
+class CssTransformValue extends _CssValueList {
+  CssTransformValue.internal() : super.internal();
+
+  @DomName('WebKitCSSTransformValue.CSS_MATRIX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_MATRIX = 11;
+
+  @DomName('WebKitCSSTransformValue.CSS_MATRIX3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_MATRIX3D = 21;
+
+  @DomName('WebKitCSSTransformValue.CSS_PERSPECTIVE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_PERSPECTIVE = 20;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATE = 4;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATE3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATE3D = 17;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATEX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATEX = 14;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATEY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATEY = 15;
+
+  @DomName('WebKitCSSTransformValue.CSS_ROTATEZ')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_ROTATEZ = 16;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALE = 5;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALE3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALE3D = 19;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALEX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALEX = 6;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALEY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALEY = 7;
+
+  @DomName('WebKitCSSTransformValue.CSS_SCALEZ')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SCALEZ = 18;
+
+  @DomName('WebKitCSSTransformValue.CSS_SKEW')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SKEW = 8;
+
+  @DomName('WebKitCSSTransformValue.CSS_SKEWX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SKEWX = 9;
+
+  @DomName('WebKitCSSTransformValue.CSS_SKEWY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_SKEWY = 10;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATE')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATE = 1;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATE3D')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATE3D = 13;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATEX')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATEX = 2;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATEY')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATEY = 3;
+
+  @DomName('WebKitCSSTransformValue.CSS_TRANSLATEZ')
+  @DocsEditable
+  @Experimental // untriaged
+  static const int CSS_TRANSLATEZ = 12;
+
+  @DomName('WebKitCSSTransformValue.operationType')
+  @DocsEditable
+  @Experimental // untriaged
+  int get operationType native "CSSTransformValue_operationType_Getter";
+
+  @DomName('WebKitCSSTransformValue.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  _CSSValue __getter__(int index) native "CSSTransformValue___getter___Callback";
+
+}
+// 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('CSSUnknownRule')
 // http://dev.w3.org/csswg/cssom/#the-cssstylesheet-interface
 @deprecated // deprecated
@@ -7650,11 +8201,21 @@
 class DomStringMap extends NativeFieldWrapperClass1 {
   DomStringMap.internal();
 
+  @DomName('DOMStringMap.__delete__')
+  @DocsEditable
+  @Experimental // untriaged
+  bool __delete__(String name) native "DOMStringMap___delete___Callback";
+
   @DomName('DOMStringMap.__getter__')
   @DocsEditable
   @Experimental // untriaged
   String __getter__(String name) native "DOMStringMap___getter___Callback";
 
+  @DomName('DOMStringMap.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(String name, String value) native "DOMStringMap___setter___Callback";
+
 }
 // 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
@@ -8820,14 +9381,6 @@
   @DocsEditable
   String get tagName native "Element_tagName_Getter";
 
-  @DomName('Element.webkitInsertionParent')
-  @DocsEditable
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental
-  // https://www.w3.org/Bugs/Public/show_bug.cgi?id=21067
-  Node get insertionParent native "Element_webkitInsertionParent_Getter";
-
   @DomName('Element.webkitPseudo')
   @DocsEditable
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -9520,6 +10073,16 @@
   @DocsEditable
   void set width(String value) native "HTMLEmbedElement_width_Setter";
 
+  @DomName('HTMLEmbedElement.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  bool __getter__(index_OR_name) native "HTMLEmbedElement___getter___Callback";
+
+  @DomName('HTMLEmbedElement.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(index_OR_name, Node value) native "HTMLEmbedElement___setter___Callback";
+
 }
 // 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
@@ -9889,6 +10452,12 @@
   @DocsEditable
   int get eventPhase native "Event_eventPhase_Getter";
 
+  @DomName('Event.path')
+  @DocsEditable
+  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
+  @Experimental
+  List<Node> get path native "Event_path_Getter";
+
   @DomName('Event.target')
   @DocsEditable
   EventTarget get target native "Event_target_Getter";
@@ -9905,12 +10474,6 @@
   @DocsEditable
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native "Event_initEvent_Callback";
 
-  @DomName('Event.path')
-  @DocsEditable
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
-  @Experimental
-  List<Node> path() native "Event_path_Callback";
-
   @DomName('Event.preventDefault')
   @DocsEditable
   void preventDefault() native "Event_preventDefault_Callback";
@@ -11459,6 +12022,11 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
+  @DomName('HTMLAllCollection.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Node __getter__(int index) native "HTMLAllCollection___getter___Callback";
+
   @DomName('HTMLAllCollection.item')
   @DocsEditable
   Node item(int index) native "HTMLAllCollection_item_Callback";
@@ -11533,6 +12101,11 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
+  @DomName('HTMLCollection.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Node __getter__(String name) native "HTMLCollection___getter___Callback";
+
   @DomName('HTMLCollection.item')
   @DocsEditable
   Node item(int index) native "HTMLCollection_item_Callback";
@@ -11760,10 +12333,6 @@
 class HtmlOptionsCollection extends HtmlCollection {
   HtmlOptionsCollection.internal() : super.internal();
 
-  @DomName('HTMLOptionsCollection.numericIndexSetter')
-  @DocsEditable
-  void operator[]=(int index, Node value) native "HTMLOptionsCollection_numericIndexSetter_Callback";
-
 }
 // 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
@@ -14111,6 +14680,11 @@
   @DocsEditable
   void set hreflang(String value) native "HTMLLinkElement_hreflang_Setter";
 
+  @DomName('HTMLLinkElement.import')
+  @DocsEditable
+  @Experimental // untriaged
+  DocumentFragment get import native "HTMLLinkElement_import_Getter";
+
   @DomName('HTMLLinkElement.media')
   @DocsEditable
   String get media native "HTMLLinkElement_media_Getter";
@@ -15972,6 +16546,45 @@
 
 
 @DocsEditable
+@DomName('MIDIAccess')
+@Experimental // untriaged
+class MidiAccess extends EventTarget {
+  MidiAccess.internal() : super.internal();
+
+  @DomName('MIDIAccess.addEventListener')
+  @DocsEditable
+  @Experimental // untriaged
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MIDIAccess_addEventListener_Callback";
+
+  @DomName('MIDIAccess.dispatchEvent')
+  @DocsEditable
+  @Experimental // untriaged
+  bool dispatchEvent(Event event) native "MIDIAccess_dispatchEvent_Callback";
+
+  @DomName('MIDIAccess.inputs')
+  @DocsEditable
+  @Experimental // untriaged
+  List<MidiInput> inputs() native "MIDIAccess_inputs_Callback";
+
+  @DomName('MIDIAccess.outputs')
+  @DocsEditable
+  @Experimental // untriaged
+  List<MidiOutput> outputs() native "MIDIAccess_outputs_Callback";
+
+  @DomName('MIDIAccess.removeEventListener')
+  @DocsEditable
+  @Experimental // untriaged
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MIDIAccess_removeEventListener_Callback";
+
+}
+// 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('MIDIConnectionEvent')
 // http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface
 @Experimental
@@ -16196,6 +16809,11 @@
   MimeType elementAt(int index) => this[index];
   // -- end List<MimeType> mixins.
 
+  @DomName('MimeTypeArray.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  MimeType __getter__(String name) native "MimeTypeArray___getter___Callback";
+
   @DomName('MimeTypeArray.item')
   @DocsEditable
   MimeType item(int index) native "MimeTypeArray_item_Callback";
@@ -16665,6 +17283,11 @@
   @DocsEditable
   int get length native "DOMNamedFlowCollection_length_Getter";
 
+  @DomName('WebKitNamedFlowCollection.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  NamedFlow __getter__(String name) native "DOMNamedFlowCollection___getter___Callback";
+
   @DomName('WebKitNamedFlowCollection.item')
   @DocsEditable
   NamedFlow item(int index) native "DOMNamedFlowCollection_item_Callback";
@@ -16877,15 +17500,20 @@
 class NavigatorUserMediaError extends NativeFieldWrapperClass1 {
   NavigatorUserMediaError.internal();
 
-  @DomName('NavigatorUserMediaError.PERMISSION_DENIED')
+  @DomName('NavigatorUserMediaError.constraintName')
   @DocsEditable
-  @Experimental // nonstandard
-  static const int PERMISSION_DENIED = 1;
+  @Experimental // untriaged
+  String get constraintName native "NavigatorUserMediaError_constraintName_Getter";
 
-  @DomName('NavigatorUserMediaError.code')
+  @DomName('NavigatorUserMediaError.message')
   @DocsEditable
-  @Experimental // nonstandard
-  int get code native "NavigatorUserMediaError_code_Getter";
+  @Experimental // untriaged
+  String get message native "NavigatorUserMediaError_message_Getter";
+
+  @DomName('NavigatorUserMediaError.name')
+  @DocsEditable
+  @Experimental // untriaged
+  String get name native "NavigatorUserMediaError_name_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17888,6 +18516,16 @@
   @DocsEditable
   bool get willValidate native "HTMLObjectElement_willValidate_Getter";
 
+  @DomName('HTMLObjectElement.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  bool __getter__(index_OR_name) native "HTMLObjectElement___getter___Callback";
+
+  @DomName('HTMLObjectElement.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(index_OR_name, Node value) native "HTMLObjectElement___setter___Callback";
+
   @DomName('HTMLObjectElement.checkValidity')
   @DocsEditable
   bool checkValidity() native "HTMLObjectElement_checkValidity_Callback";
@@ -18663,6 +19301,11 @@
   @DocsEditable
   String get name native "Plugin_name_Getter";
 
+  @DomName('Plugin.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  MimeType __getter__(String name) native "Plugin___getter___Callback";
+
   @DomName('Plugin.item')
   @DocsEditable
   MimeType item(int index) native "Plugin_item_Callback";
@@ -18734,6 +19377,11 @@
   Plugin elementAt(int index) => this[index];
   // -- end List<Plugin> mixins.
 
+  @DomName('PluginArray.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Plugin __getter__(String name) native "PluginArray___getter___Callback";
+
   @DomName('PluginArray.item')
   @DocsEditable
   Plugin item(int index) native "PluginArray_item_Callback";
@@ -19213,6 +19861,25 @@
 
 
 @DocsEditable
+@DomName('ResourceProgressEvent')
+@Experimental // untriaged
+class ResourceProgressEvent extends ProgressEvent {
+  ResourceProgressEvent.internal() : super.internal();
+
+  @DomName('ResourceProgressEvent.url')
+  @DocsEditable
+  @Experimental // untriaged
+  String get url native "ResourceProgressEvent_url_Getter";
+
+}
+// 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('RTCDataChannel')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannel
 @Experimental
@@ -19793,6 +20460,11 @@
 class RtcStatsResponse extends NativeFieldWrapperClass1 {
   RtcStatsResponse.internal();
 
+  @DomName('RTCStatsResponse.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  RtcStatsReport __getter__(String name) native "RTCStatsResponse___getter___Callback";
+
   @DomName('RTCStatsResponse.namedItem')
   @DocsEditable
   RtcStatsReport namedItem(String name) native "RTCStatsResponse_namedItem_Callback";
@@ -20194,6 +20866,11 @@
   @DocsEditable
   bool get willValidate native "HTMLSelectElement_willValidate_Getter";
 
+  @DomName('HTMLSelectElement.__setter__')
+  @DocsEditable
+  @Experimental // untriaged
+  void __setter__(int index, OptionElement value) native "HTMLSelectElement___setter___Callback";
+
   @DomName('HTMLSelectElement.checkValidity')
   @DocsEditable
   bool checkValidity() native "HTMLSelectElement_checkValidity_Callback";
@@ -21432,6 +22109,20 @@
   @DocsEditable
   int get $dom_length native "Storage_length_Getter";
 
+  bool __delete__(index_OR_name) {
+    if ((index_OR_name is int || index_OR_name == null)) {
+      return ___delete___1(index_OR_name);
+    }
+    if ((index_OR_name is String || index_OR_name == null)) {
+      return ___delete___2(index_OR_name);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  bool ___delete___1(index_OR_name) native "Storage____delete___1_Callback";
+
+  bool ___delete___2(index_OR_name) native "Storage____delete___2_Callback";
+
   String __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
       return ___getter___1(index_OR_name);
@@ -21446,6 +22137,22 @@
 
   String ___getter___2(index_OR_name) native "Storage____getter___2_Callback";
 
+  void __setter__(index_OR_name, String value) {
+    if ((value is String || value == null) && (index_OR_name is int || index_OR_name == null)) {
+      ___setter___1(index_OR_name, value);
+      return;
+    }
+    if ((value is String || value == null) && (index_OR_name is String || index_OR_name == null)) {
+      ___setter___2(index_OR_name, value);
+      return;
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  void ___setter___1(index_OR_name, value) native "Storage____setter___1_Callback";
+
+  void ___setter___2(index_OR_name, value) native "Storage____setter___2_Callback";
+
   @DomName('Storage.clear')
   @DocsEditable
   void $dom_clear() native "Storage_clear_Callback";
@@ -22198,14 +22905,6 @@
   factory Text(String data) => document.$dom_createTextNode(data);
   Text.internal() : super.internal();
 
-  @DomName('Text.webkitInsertionParent')
-  @DocsEditable
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental
-  // https://www.w3.org/Bugs/Public/show_bug.cgi?id=21067
-  Node get insertionParent native "Text_webkitInsertionParent_Getter";
-
   @DomName('Text.wholeText')
   @DocsEditable
   String get wholeText native "Text_wholeText_Getter";
@@ -24473,10 +25172,19 @@
   @DocsEditable
   WindowBase get window native "DOMWindow_window_Getter";
 
-  @DomName('Window.__getter__')
-  @DocsEditable
-  @Experimental // untriaged
-  WindowBase __getter__(int index) native "DOMWindow___getter___Callback";
+  WindowBase __getter__(index_OR_name) {
+    if ((index_OR_name is int || index_OR_name == null)) {
+      return ___getter___1(index_OR_name);
+    }
+    if ((index_OR_name is String || index_OR_name == null)) {
+      return ___getter___2(index_OR_name);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  WindowBase ___getter___1(index_OR_name) native "DOMWindow____getter___1_Callback";
+
+  WindowBase ___getter___2(index_OR_name) native "DOMWindow____getter___2_Callback";
 
   @DomName('Window.addEventListener')
   @DocsEditable
@@ -26447,6 +27155,11 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
+  @DomName('NamedNodeMap.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  Node __getter__(String name) native "NamedNodeMap___getter___Callback";
+
   @DomName('NamedNodeMap.getNamedItem')
   @DocsEditable
   Node getNamedItem(String name) native "NamedNodeMap_getNamedItem_Callback";
@@ -26766,6 +27479,11 @@
   StyleSheet elementAt(int index) => this[index];
   // -- end List<StyleSheet> mixins.
 
+  @DomName('StyleSheetList.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  CssStyleSheet __getter__(String name) native "StyleSheetList___getter___Callback";
+
   @DomName('StyleSheetList.item')
   @DocsEditable
   StyleSheet item(int index) native "StyleSheetList_item_Callback";
@@ -26795,9 +27513,6 @@
 
 @DocsEditable
 @DomName('WebKitCSSMatrix')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
 abstract class _WebKitCSSMatrix extends NativeFieldWrapperClass1 {
@@ -26851,6 +27566,115 @@
 
 
 @DocsEditable
+@DomName('WebKitCSSFilterRule')
+// http://www.w3.org/TR/filter-effects/
+@Experimental
+class _WebKitCssFilterRule extends CssRule {
+  _WebKitCssFilterRule.internal() : super.internal();
+
+  @DomName('WebKitCSSFilterRule.style')
+  @DocsEditable
+  CssStyleDeclaration get style native "WebKitCSSFilterRule_style_Getter";
+
+}
+// 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('WebKitCSSKeyframeRule')
+// http://www.w3.org/TR/css3-animations/#CSSKeyframeRule-interface
+@Experimental
+class _WebKitCssKeyframeRule extends CssRule {
+  _WebKitCssKeyframeRule.internal() : super.internal();
+
+  @DomName('WebKitCSSKeyframeRule.keyText')
+  @DocsEditable
+  String get keyText native "WebKitCSSKeyframeRule_keyText_Getter";
+
+  @DomName('WebKitCSSKeyframeRule.keyText')
+  @DocsEditable
+  void set keyText(String value) native "WebKitCSSKeyframeRule_keyText_Setter";
+
+  @DomName('WebKitCSSKeyframeRule.style')
+  @DocsEditable
+  CssStyleDeclaration get style native "WebKitCSSKeyframeRule_style_Getter";
+
+}
+// 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('WebKitCSSKeyframesRule')
+// http://www.w3.org/TR/css3-animations/#csskeyframesrule
+@Experimental
+class _WebKitCssKeyframesRule extends CssRule {
+  _WebKitCssKeyframesRule.internal() : super.internal();
+
+  @DomName('WebKitCSSKeyframesRule.cssRules')
+  @DocsEditable
+  List<CssRule> get cssRules native "WebKitCSSKeyframesRule_cssRules_Getter";
+
+  @DomName('WebKitCSSKeyframesRule.name')
+  @DocsEditable
+  String get name native "WebKitCSSKeyframesRule_name_Getter";
+
+  @DomName('WebKitCSSKeyframesRule.name')
+  @DocsEditable
+  void set name(String value) native "WebKitCSSKeyframesRule_name_Setter";
+
+  @DomName('WebKitCSSKeyframesRule.__getter__')
+  @DocsEditable
+  @Experimental // untriaged
+  _WebKitCssKeyframeRule __getter__(int index) native "WebKitCSSKeyframesRule___getter___Callback";
+
+  @DomName('WebKitCSSKeyframesRule.deleteRule')
+  @DocsEditable
+  void deleteRule(String key) native "WebKitCSSKeyframesRule_deleteRule_Callback";
+
+  @DomName('WebKitCSSKeyframesRule.findRule')
+  @DocsEditable
+  _WebKitCssKeyframeRule findRule(String key) native "WebKitCSSKeyframesRule_findRule_Callback";
+
+  @DomName('WebKitCSSKeyframesRule.insertRule')
+  @DocsEditable
+  void insertRule(String rule) native "WebKitCSSKeyframesRule_insertRule_Callback";
+
+}
+// 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('WebKitCSSRegionRule')
+// http://dev.w3.org/csswg/css-regions/#region-style-rule-interface
+@Experimental
+class _WebKitCssRegionRule extends CssRule {
+  _WebKitCssRegionRule.internal() : super.internal();
+
+  @DomName('WebKitCSSRegionRule.cssRules')
+  @DocsEditable
+  List<CssRule> get cssRules native "WebKitCSSRegionRule_cssRules_Getter";
+
+}
+// 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('WorkerContext')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#WorkerGlobalScope-partial
 @Experimental // stable
@@ -27125,7 +27949,7 @@
 /**
  * An object that can be drawn to a [CanvasRenderingContext2D] object with
  * [CanvasRenderingContext2D.drawImage],
- * [CanvasRenderingContext2D.drawImageRect],
+ * [CanvasRenderingContext2D.drawImageToRect],
  * [CanvasRenderingContext2D.drawImageScaled], or
  * [CanvasRenderingContext2D.drawImageScaledFromSource].
  *
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index 87ff63b..5269d55 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -1047,6 +1047,11 @@
   @DomName('WaveShaperNode.curve')
   @DocsEditable
   Float32List curve;
+
+  @DomName('WaveShaperNode.oversample')
+  @DocsEditable
+  @Experimental // untriaged
+  String oversample;
 }
 // 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
diff --git a/sdk/lib/web_audio/dartium/web_audio_dartium.dart b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
index d2cddf3..2f3e649 100644
--- a/sdk/lib/web_audio/dartium/web_audio_dartium.dart
+++ b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
@@ -1314,6 +1314,16 @@
   @DocsEditable
   void set curve(Float32List value) native "WaveShaperNode_curve_Setter";
 
+  @DomName('WaveShaperNode.oversample')
+  @DocsEditable
+  @Experimental // untriaged
+  String get oversample native "WaveShaperNode_oversample_Getter";
+
+  @DomName('WaveShaperNode.oversample')
+  @DocsEditable
+  @Experimental // untriaged
+  void set oversample(String value) native "WaveShaperNode_oversample_Setter";
+
 }
 // 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
diff --git a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
index 91c3949..efa45f5 100644
--- a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
+++ b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
@@ -676,6 +676,16 @@
 
 
 @DocsEditable
+@DomName('EXTFragDepth')
+@Experimental // untriaged
+class ExtFragDepth native "EXTFragDepth" {
+}
+// 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('EXTTextureFilterAnisotropic')
 // http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/
 @Experimental
diff --git a/sdk/lib/web_gl/dartium/web_gl_dartium.dart b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
index c010831..d3e5ddc 100644
--- a/sdk/lib/web_gl/dartium/web_gl_dartium.dart
+++ b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
@@ -744,6 +744,20 @@
 
 
 @DocsEditable
+@DomName('EXTFragDepth')
+@Experimental // untriaged
+class ExtFragDepth extends NativeFieldWrapperClass1 {
+  ExtFragDepth.internal();
+
+}
+// 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('EXTTextureFilterAnisotropic')
 // http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/
 @Experimental
diff --git a/tests/html/html.status b/tests/html/html.status
index 3e1588d..3d6077d 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -362,9 +362,6 @@
 [ $compiler == dart2js && ($runtime == drt || $runtime == chrome || $runtime == ff || $runtime == safari) ]
 isolates_test: Skip   # Timeout because leg does not support web workers.
 
-[ $compiler == dart2js && $runtime == drt ]
-speechrecognition_test/types: Fail # Issue 11035
-
 [ $compiler == dart2js && $csp && ($runtime == drt || $runtime == safari || $runtime == ff || $runtime == chrome || $runtime == chromeOnAndroid) ]
 js_interop_1_test: Skip            # Test cannot run under CSP restrictions (times out).
 js_interop_2_test: Fail, OK        # Test cannot run under CSP restrictions.
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 1600565..02886a3 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -42,8 +42,8 @@
 unresolved_ports_negative_test: fail
 
 # test issue 10888
-global_error_handler_stream_test: fail, OK
-global_error_handler_test: fail, OK
+global_error_handler_stream_test: fail
+global_error_handler_test: fail
 
 [ $compiler == dart2analyzer ]
 isolate2_negative_test: fail
@@ -55,8 +55,8 @@
 unresolved_ports_negative_test: fail
 
 # test issue 10888
-global_error_handler_stream_test: fail, OK
-global_error_handler_test: fail, OK
+global_error_handler_stream_test: fail
+global_error_handler_test: fail
 
 [ $compiler == dart2js && ($runtime == d8 || $jscl) ]
 illegal_msg_stream_test: Fail # Issue 6750
diff --git a/tests/language/canonical_const_test.dart b/tests/language/canonical_const_test.dart
index 8a04a3f..b18e59a 100644
--- a/tests/language/canonical_const_test.dart
+++ b/tests/language/canonical_const_test.dart
@@ -23,7 +23,7 @@
     Expect.isFalse(identical(const C1(), const C2()));
     Expect.identical(B, const C2());
     // TODO(johnlenz): these two values don't currently have the same type
-    // Expect.isTrue(const [1,2] === const List[1,2]);
+    // Expect.identical(const [1,2], const List[1,2]);
     Expect.isFalse(identical(const [2,1], const[1,2]));
     Expect.identical(const <int>[1,2], const <int>[1,2]);
     Expect.identical(const <Object>[1,2], const <Object>[1,2]);
diff --git a/tests/language/compile_time_constant8_test.dart b/tests/language/compile_time_constant8_test.dart
index e39d7f2..a291f82 100644
--- a/tests/language/compile_time_constant8_test.dart
+++ b/tests/language/compile_time_constant8_test.dart
@@ -15,6 +15,6 @@
 const list1 = const<int> [1, 2];
 const list2 = const [1, 2];
 main() {
-  Expect.isFalse(a === b);
-  Expect.isFalse(list1 === list2);
+  Expect.isFalse(identical(a, b));
+  Expect.isFalse(identical(list1, list2));
 }
diff --git a/tests/language/compile_time_constant_b_test.dart b/tests/language/compile_time_constant_b_test.dart
index 212dd2f..d93ad09 100644
--- a/tests/language/compile_time_constant_b_test.dart
+++ b/tests/language/compile_time_constant_b_test.dart
@@ -73,5 +73,5 @@
                 isUnsupportedError);
   Expect.throws(() => m2['a'] = 499, isUnsupportedError);
 
-  Expect.isTrue(m1 === m3);
+  Expect.isTrue(identical(m1, m3));
 }
diff --git a/tests/language/compile_time_constant_d_test.dart b/tests/language/compile_time_constant_d_test.dart
index e56415f..df797e1 100644
--- a/tests/language/compile_time_constant_d_test.dart
+++ b/tests/language/compile_time_constant_d_test.dart
@@ -28,7 +28,7 @@
   Expect.equals(100, a1.t);
   Expect.equals("A 3 499 99 100", a1.toString());
 
-  Expect.isTrue(a1 === a2);
+  Expect.isTrue(identical(a1, a2));
 
   Expect.equals(1, a3.x);
   Expect.equals(2, a3.y);
diff --git a/tests/language/compile_time_constant_e_test.dart b/tests/language/compile_time_constant_e_test.dart
index 9a91f3c..7ab0ea2 100644
--- a/tests/language/compile_time_constant_e_test.dart
+++ b/tests/language/compile_time_constant_e_test.dart
@@ -38,9 +38,9 @@
   Expect.equals(99, a1.z);
   Expect.equals(100, a1.t);
   Expect.equals("A 3 499 99 100", a1.toString());
-  Expect.isTrue(a1 === a2);
-  Expect.isTrue(a1 === a4);
-  Expect.isTrue(a1 === a5);
+  Expect.isTrue(identical(a1, a2));
+  Expect.isTrue(identical(a1, a4));
+  Expect.isTrue(identical(a1, a5));
 
   Expect.equals(1, a3.x);
   Expect.equals(2, a3.y);
@@ -66,7 +66,7 @@
   Expect.equals(null, a8.t);
   Expect.equals("A null null null null", a8.toString());
 
-  Expect.isTrue(a3 === a9);
+  Expect.isTrue(identical(a3, a9));
 
   Expect.equals(4, a10.x);
   Expect.equals(3, a10.y);
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index ee8acc1..48bf4fc 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -32,8 +32,6 @@
 class_cycle_test/03: fail
 closure_call_wrong_argument_count_negative_test: fail
 compile_time_constant10_test/none: fail
-compile_time_constant8_test: fail
-compile_time_constant_b_test: fail
 compile_time_constant_c_test/01: fail
 compile_time_constant_c_test/02: fail
 compile_time_constant_checked2_test/02: fail
@@ -44,7 +42,6 @@
 compile_time_constant_checked3_test/03: fail
 compile_time_constant_checked3_test/04: fail
 compile_time_constant_checked3_test/06: fail
-compile_time_constant_d_test: fail
 compile_time_constant_e_test: fail
 const_syntax_test/06: fail
 constructor2_negative_test: fail
@@ -102,7 +99,6 @@
 interface_test/00: fail
 is_not_class2_negative_test: fail
 library_juxtaposition_test: fail
-licm_test: fail
 list_literal1_negative_test: fail
 list_literal_syntax_test/01: fail
 list_literal_syntax_test/02: fail
@@ -202,7 +198,6 @@
 type_variable_bounds_test/09: fail
 type_variable_identifier_expression_negative_test: fail
 type_variable_static_context_negative_test: fail
-typed_equality_test: fail
 unary2_test: fail
 unary_test: fail
 unresolved_in_factory_negative_test: fail
@@ -210,59 +205,59 @@
 unresolved_top_level_var_negative_test: fail
 
 # test issue 10683, It is a compile-time error if e refers to the name v or the name v=.
-block_scope_test: fail, OK
-lazy_static3_test: fail, OK
+block_scope_test: fail
+lazy_static3_test: fail
 
 # test issue 10752, there are 'implicit' scopes for 'if', 'while' and 'do-while'
-implicit_scope_test: fail, OK
+implicit_scope_test: fail
 
 # test issue 10889, "throw" requires expression, "rethrow" should be used instead
-execute_finally10_test: fail, OK
-execute_finally11_test: fail, OK
-final_used_in_try_test: fail, OK
-full_stacktrace2_test: fail, OK
-stack_trace_test: fail, OK
-throw3_test: fail, OK
-try_catch3_test: fail, OK
+execute_finally10_test: fail
+execute_finally11_test: fail
+final_used_in_try_test: fail
+full_stacktrace2_test: fail
+stack_trace_test: fail
+throw3_test: fail
+try_catch3_test: fail
 
 # test issue 10890; on-catch UnknownType is a static warning, not error
-try_catch_on_syntax_test/01: fail, OK
-try_catch_on_syntax_test/07: fail, OK
-try_catch_syntax_test/08: fail, OK
+try_catch_on_syntax_test/01: fail
+try_catch_on_syntax_test/07: fail
+try_catch_syntax_test/08: fail
 
 # test issue 10899; it is static warning, not error, to call methods of class literal
-class_literal_test/02: fail, OK
-class_literal_test/05: fail, OK
-class_literal_test/07: fail, OK
-class_literal_test/10: fail, OK
-class_literal_test/11: fail, OK
-class_literal_test/12: fail, OK
-class_literal_test/14: fail, OK
-class_literal_test/17: fail, OK
-class_literal_test/18: fail, OK
-class_literal_test/19: fail, OK
-class_literal_test/22: fail, OK
-class_literal_test/23: fail, OK
-class_literal_test/24: fail, OK
-class_literal_test/27: fail, OK
-class_literal_test/28: fail, OK
-class_literal_test/29: fail, OK
-class_literal_test/none: fail, OK
+class_literal_test/02: fail
+class_literal_test/05: fail
+class_literal_test/07: fail
+class_literal_test/10: fail
+class_literal_test/11: fail
+class_literal_test/12: fail
+class_literal_test/14: fail
+class_literal_test/17: fail
+class_literal_test/18: fail
+class_literal_test/19: fail
+class_literal_test/22: fail
+class_literal_test/23: fail
+class_literal_test/24: fail
+class_literal_test/27: fail
+class_literal_test/28: fail
+class_literal_test/29: fail
+class_literal_test/none: fail
 
 # Test issue 11124, Uninitialized finals are warnings not errors
-field3a_negative_test: fail, OK
-const_syntax_test/01: fail, OK
-const_syntax_test/04: fail, OK
-const_syntax_test/02: fail, OK
-const_syntax_test/03: fail, OK
-final_syntax_test/01: fail, OK
-final_syntax_test/04: fail, OK
-final_syntax_test/02: fail, OK
-final_syntax_test/03: fail, OK
+field3a_negative_test: fail
+const_syntax_test/01: fail
+const_syntax_test/04: fail
+const_syntax_test/02: fail
+const_syntax_test/03: fail
+final_syntax_test/01: fail
+final_syntax_test/04: fail
+final_syntax_test/02: fail
+final_syntax_test/03: fail
 
 # Test issue 11123, Only static fields can be declared as 'const'
-const_escape_frog_test: fail, OK
-compile_time_constant_test/none: fail, OK
+const_escape_frog_test: fail
+compile_time_constant_test/none: fail
 
 [ $compiler == dartanalyzer && $checked ]
 factory1_test/00: fail
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 926d8e9..e9b7cf7 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -32,8 +32,6 @@
 class_cycle_test/03: fail
 closure_call_wrong_argument_count_negative_test: fail
 compile_time_constant10_test/none: fail
-compile_time_constant8_test: fail
-compile_time_constant_b_test: fail
 compile_time_constant_c_test/01: fail
 compile_time_constant_c_test/02: fail
 compile_time_constant_checked2_test/02: fail
@@ -44,7 +42,6 @@
 compile_time_constant_checked3_test/03: fail
 compile_time_constant_checked3_test/04: fail
 compile_time_constant_checked3_test/06: fail
-compile_time_constant_d_test: fail
 compile_time_constant_e_test: fail
 const_syntax_test/06: fail
 constructor2_negative_test: fail
@@ -102,7 +99,6 @@
 interface_test/00: fail
 is_not_class2_negative_test: fail
 library_juxtaposition_test: fail
-licm_test: fail
 list_literal1_negative_test: fail
 list_literal_syntax_test/01: fail
 list_literal_syntax_test/02: fail
@@ -202,7 +198,6 @@
 type_variable_bounds_test/09: fail
 type_variable_identifier_expression_negative_test: fail
 type_variable_static_context_negative_test: fail
-typed_equality_test: fail
 unary2_test: fail
 unary_test: fail
 unresolved_in_factory_negative_test: fail
@@ -210,59 +205,59 @@
 unresolved_top_level_var_negative_test: fail
 
 # test issue 10683, It is a compile-time error if e refers to the name v or the name v=.
-block_scope_test: fail, OK
-lazy_static3_test: fail, OK
+block_scope_test: fail
+lazy_static3_test: fail
 
 # test issue 10752, there are 'implicit' scopes for 'if', 'while' and 'do-while'
-implicit_scope_test: fail, OK
+implicit_scope_test: fail
 
 # test issue 10889, "throw" requires expression, "rethrow" should be used instead
-execute_finally10_test: fail, OK
-execute_finally11_test: fail, OK
-final_used_in_try_test: fail, OK
-full_stacktrace2_test: fail, OK
-stack_trace_test: fail, OK
-throw3_test: fail, OK
-try_catch3_test: fail, OK
+execute_finally10_test: fail
+execute_finally11_test: fail
+final_used_in_try_test: fail
+full_stacktrace2_test: fail
+stack_trace_test: fail
+throw3_test: fail
+try_catch3_test: fail
 
 # test issue 10890; on-catch UnknownType is a static warning, not error
-try_catch_on_syntax_test/01: fail, OK
-try_catch_on_syntax_test/07: fail, OK
-try_catch_syntax_test/08: fail, OK
+try_catch_on_syntax_test/01: fail
+try_catch_on_syntax_test/07: fail
+try_catch_syntax_test/08: fail
 
 # test issue 10899; it is static warning, not error, to call methods of class literal
-class_literal_test/02: fail, OK
-class_literal_test/05: fail, OK
-class_literal_test/07: fail, OK
-class_literal_test/10: fail, OK
-class_literal_test/11: fail, OK
-class_literal_test/12: fail, OK
-class_literal_test/14: fail, OK
-class_literal_test/17: fail, OK
-class_literal_test/18: fail, OK
-class_literal_test/19: fail, OK
-class_literal_test/22: fail, OK
-class_literal_test/23: fail, OK
-class_literal_test/24: fail, OK
-class_literal_test/27: fail, OK
-class_literal_test/28: fail, OK
-class_literal_test/29: fail, OK
-class_literal_test/none: fail, OK
+class_literal_test/02: fail
+class_literal_test/05: fail
+class_literal_test/07: fail
+class_literal_test/10: fail
+class_literal_test/11: fail
+class_literal_test/12: fail
+class_literal_test/14: fail
+class_literal_test/17: fail
+class_literal_test/18: fail
+class_literal_test/19: fail
+class_literal_test/22: fail
+class_literal_test/23: fail
+class_literal_test/24: fail
+class_literal_test/27: fail
+class_literal_test/28: fail
+class_literal_test/29: fail
+class_literal_test/none: fail
 
 # Test issue 11124, Uninitialized finals are warnings not errors
-field3a_negative_test: fail, OK
-const_syntax_test/01: fail, OK
-const_syntax_test/04: fail, OK
-const_syntax_test/02: fail, OK
-const_syntax_test/03: fail, OK
-final_syntax_test/01: fail, OK
-final_syntax_test/04: fail, OK
-final_syntax_test/02: fail, OK
-final_syntax_test/03: fail, OK
+field3a_negative_test: fail
+const_syntax_test/01: fail
+const_syntax_test/04: fail
+const_syntax_test/02: fail
+const_syntax_test/03: fail
+final_syntax_test/01: fail
+final_syntax_test/04: fail
+final_syntax_test/02: fail
+final_syntax_test/03: fail
 
 # Test issue 11123, Only static fields can be declared as 'const'
-const_escape_frog_test: fail, OK
-compile_time_constant_test/none: fail, OK
+const_escape_frog_test: fail
+compile_time_constant_test/none: fail
 
 [ $compiler == dart2analyzer && $checked ]
 factory1_test/00: fail
diff --git a/tests/language/licm_test.dart b/tests/language/licm_test.dart
index e058e8e..002c5d9 100644
--- a/tests/language/licm_test.dart
+++ b/tests/language/licm_test.dart
@@ -10,9 +10,9 @@
 
 test() {
   while (true) {
-    if (0 === foo) {
+    if (0 == foo) {
       sum += 2;
-      if (1 === bar) {
+      if (1 == bar) {
         sum += 3;
         break;
       }
diff --git a/tests/language/typed_equality_test.dart b/tests/language/typed_equality_test.dart
index c849df0..9f48e79 100644
--- a/tests/language/typed_equality_test.dart
+++ b/tests/language/typed_equality_test.dart
@@ -7,7 +7,7 @@
 // type C is conflicting.
 
 foo(a, b) {
-  if (a === b) return;
+  if (identical(a, b)) return;
   throw 'broken';
 }
 
diff --git a/tests/lib/analyzer/analyze_tests.status b/tests/lib/analyzer/analyze_tests.status
index 25abec6..3406d43 100644
--- a/tests/lib/analyzer/analyze_tests.status
+++ b/tests/lib/analyzer/analyze_tests.status
@@ -39,7 +39,9 @@
 
 [ $compiler == dartanalyzer ]
 standalone/io/process_exit_negative_test: fail
+53bit_overflow_literal_test/01: fail, ok
 
 
 [ $compiler == dart2analyzer ]
 standalone/io/process_exit_negative_test: fail
+53bit_overflow_literal_test/01: fail, ok
diff --git a/tests/standalone/53bit_overflow_literal_test.dart b/tests/standalone/53bit_overflow_literal_test.dart
new file mode 100644
index 0000000..1062af0
--- /dev/null
+++ b/tests/standalone/53bit_overflow_literal_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+// VMOptions=--throw_on_javascript_int_overflow
+
+
+import "package:expect/expect.dart";
+
+int literals() {
+  var okay_literal = 0xFFFFFFFFFFFFF;
+  var too_big_literal = 0x1FFFFFFFFFFFFF;  /// 01: compile-time error
+  return okay_literal;
+}
+
+main() {
+  Expect.equals(0xFFFFFFFFFFFFF, literals());
+}
diff --git a/tests/standalone/53bit_overflow_test.dart b/tests/standalone/53bit_overflow_test.dart
index 1475cfd..256e66a 100644
--- a/tests/standalone/53bit_overflow_test.dart
+++ b/tests/standalone/53bit_overflow_test.dart
@@ -2,46 +2,114 @@
 // 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=--throw_on_javascript_int_overflow
+// VMOptions=--throw_on_javascript_int_overflow --optimization_counter_threshold=10
 
 
 import "package:expect/expect.dart";
 import 'dart:typed_data';
 
 
-int double_to_int_throws() {
-  double d = 1.9e16;
-  return d.toInt();
-}
-
-
-int integer_add_throws() {
-  return (1 << 52) + (1 << 52);
-}
-
-
-int i64list_throws() {
-  var i64l = new Int64List(16);
-  i64l[0] = (1 << 54);
-  return i64l[0];
-}
-
-
+double dti_arg;
 int double_to_int() {
-  double d = 1.9e14;
-  return d.toInt();
+  return dti_arg.toInt();
 }
 
 
+int ia_arg1;
+int ia_arg2;
 int integer_add() {
-  return (1 << 50) + (1 << 50);
+  return ia_arg1 + ia_arg2;
+}
+
+
+int is_arg;
+int integer_shift() {
+  return is_arg << 1;
+}
+
+
+int max_add_throws() {
+  return 0xFFFFFFFFFFFFF + 1;
+}
+
+
+int min_sub_throws() {
+  return -0xFFFFFFFFFFFFF - 2;
+}
+
+
+int n_arg;
+int negate() {
+  return -n_arg;
+}
+
+
+int max_literal() {
+  return 0xFFFFFFFFFFFFF;
+}
+
+
+int min_literal() {
+  var min_literal = -0xFFFFFFFFFFFFF - 1;
+  return min_literal;
 }
 
 
 main() {
-  Expect.throws(double_to_int_throws, (e) => e is FiftyThreeBitOverflowError);
-  Expect.throws(integer_add_throws, (e) => e is FiftyThreeBitOverflowError);
-  Expect.throws(i64list_throws, (e) => e is FiftyThreeBitOverflowError);
-  Expect.equals(190000000000000, double_to_int());
-  Expect.equals(1 << 51, integer_add());
+  Expect.equals(0xFFFFFFFFFFFFF, max_literal());
+  Expect.equals(-0xFFFFFFFFFFFFF - 1, min_literal());
+
+  // Run the tests once before optimizations.
+  dti_arg = 1.9e16;
+  Expect.throws(double_to_int, (e) => e is FiftyThreeBitOverflowError);
+
+  ia_arg1 = (1 << 51);
+  ia_arg2 = (1 << 51);
+  Expect.throws(integer_add, (e) => e is FiftyThreeBitOverflowError);
+
+  n_arg = -0xFFFFFFFFFFFFF - 1;
+  Expect.throws(negate, (e) => e is FiftyThreeBitOverflowError);
+
+  is_arg = (1 << 51);
+  Expect.throws(integer_shift, (e) => e is FiftyThreeBitOverflowError);
+
+  Expect.throws(max_add_throws, (e) => e is FiftyThreeBitOverflowError);
+  Expect.throws(min_sub_throws, (e) => e is FiftyThreeBitOverflowError);
+
+  for (int i = 0; i < 20; i++) {
+    dti_arg = i.toDouble();
+    // Expect.throws calls through the closure, so we have to here, too.
+    var f = double_to_int;
+    Expect.equals(i, f());
+
+    ia_arg1 = i;
+    ia_arg2 = i;
+    f = integer_add;
+    Expect.equals(i + i, f());
+
+    n_arg = i;
+    f = negate;
+    Expect.equals(-i, f());
+
+    is_arg = i;
+    f = integer_shift;
+    Expect.equals(i << 1, f());
+  }
+
+  // The optimized functions should now deoptimize and throw the error.
+  dti_arg = 1.9e16;
+  Expect.throws(double_to_int, (e) => e is FiftyThreeBitOverflowError);
+
+  ia_arg1 = (1 << 51);
+  ia_arg2 = (1 << 51);
+  Expect.throws(integer_add, (e) => e is FiftyThreeBitOverflowError);
+
+  n_arg = -0xFFFFFFFFFFFFF - 1;
+  Expect.throws(negate, (e) => e is FiftyThreeBitOverflowError);
+
+  is_arg = (1 << 51);
+  Expect.throws(integer_shift, (e) => e is FiftyThreeBitOverflowError);
+
+  Expect.throws(max_add_throws, (e) => e is FiftyThreeBitOverflowError);
+  Expect.throws(min_sub_throws, (e) => e is FiftyThreeBitOverflowError);
 }
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 7d552d6..5a03bd8 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -2,6 +2,11 @@
 # 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:
+# Tests using the multitest feature where failure is expected should *also* be
+# listed in tests/lib/analyzer/analyze_tests.status without the "standalone"
+# prefix.
+
 package/invalid_uri_test: Fail, OK # Fails intentionally
 
 [ $runtime == vm ]
@@ -90,10 +95,11 @@
 io/process_exit_negative_test: fail
 io/url_encoding_test: fail
 io/web_socket_protocol_processor_test: fail
+53bit_overflow_literal_test/01: fail, ok
 
 # Fails because checked-in dart executable is not up to date.
-io/test_runner_test: fail, OK
-io/skipping_dart2js_compilations_test: fail, OK
+io/test_runner_test: fail
+io/skipping_dart2js_compilations_test: fail
 
 
 [ $compiler == dart2analyzer ]
@@ -104,10 +110,11 @@
 io/process_exit_negative_test: fail
 io/url_encoding_test: fail
 io/web_socket_protocol_processor_test: fail
+53bit_overflow_literal_test/01: fail, ok
 
 # Fails because checked-in dart executable is not up to date.
-io/test_runner_test: fail, OK
-io/skipping_dart2js_compilations_test: fail, OK
+io/test_runner_test: fail
+io/skipping_dart2js_compilations_test: fail
 
 
 [ $compiler == dart2js ]
@@ -133,6 +140,7 @@
 io/skipping_dart2js_compilations_test: Skip # Library dart:uri removed.
 http_launch_test: Skip
 53bit_overflow_test: Skip
+53bit_overflow_literal_test: Skip
 
 [ $compiler == dart2js && $jscl ]
 assert_test: Fail, OK # Assumes unspecified fields on the AssertionError.
diff --git a/tools/VERSION b/tools/VERSION
index 080e489..708e4dc 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 5
-BUILD 15
+BUILD 16
 PATCH 0
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index e9292c2..224f22e 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -298,6 +298,61 @@
     },
     "support_level": "experimental"
   },
+  "CSSFilterRule": {
+    "members": {
+      "style": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSFilterValue": {
+    "members": {
+      "CSS_FILTER_BLUR": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_BRIGHTNESS": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_CONTRAST": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_CUSTOM": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_DROP_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_GRAYSCALE": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_HUE_ROTATE": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_INVERT": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_OPACITY": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_REFERENCE": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_SATURATE": {
+        "support_level": "untriaged"
+      },
+      "CSS_FILTER_SEPIA": {
+        "support_level": "untriaged"
+      },
+      "__getter__": {
+        "support_level": "untriaged"
+      },
+      "operationType": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSFontFaceLoadEvent": {
     "comment": "http://www.w3.org/TR/css3-fonts/",
     "members": {
@@ -331,6 +386,142 @@
     },
     "support_level": "stable"
   },
+  "CSSKeyframeRule": {
+    "members": {
+      "keyText": {
+        "support_level": "untriaged"
+      },
+      "style": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSKeyframesRule": {
+    "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
+      "cssRules": {
+        "support_level": "untriaged"
+      },
+      "deleteRule": {
+        "support_level": "untriaged"
+      },
+      "findRule": {
+        "support_level": "untriaged"
+      },
+      "insertRule": {
+        "support_level": "untriaged"
+      },
+      "name": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSMatrix": {
+    "members": {
+      "CSSMatrix": {},
+      "a": {
+        "support_level": "untriaged"
+      },
+      "b": {
+        "support_level": "untriaged"
+      },
+      "c": {
+        "support_level": "untriaged"
+      },
+      "d": {
+        "support_level": "untriaged"
+      },
+      "e": {
+        "support_level": "untriaged"
+      },
+      "f": {
+        "support_level": "untriaged"
+      },
+      "inverse": {
+        "support_level": "untriaged"
+      },
+      "m11": {
+        "support_level": "untriaged"
+      },
+      "m12": {
+        "support_level": "untriaged"
+      },
+      "m13": {
+        "support_level": "untriaged"
+      },
+      "m14": {
+        "support_level": "untriaged"
+      },
+      "m21": {
+        "support_level": "untriaged"
+      },
+      "m22": {
+        "support_level": "untriaged"
+      },
+      "m23": {
+        "support_level": "untriaged"
+      },
+      "m24": {
+        "support_level": "untriaged"
+      },
+      "m31": {
+        "support_level": "untriaged"
+      },
+      "m32": {
+        "support_level": "untriaged"
+      },
+      "m33": {
+        "support_level": "untriaged"
+      },
+      "m34": {
+        "support_level": "untriaged"
+      },
+      "m41": {
+        "support_level": "untriaged"
+      },
+      "m42": {
+        "support_level": "untriaged"
+      },
+      "m43": {
+        "support_level": "untriaged"
+      },
+      "m44": {
+        "support_level": "untriaged"
+      },
+      "multiply": {
+        "support_level": "untriaged"
+      },
+      "rotate": {
+        "support_level": "untriaged"
+      },
+      "rotateAxisAngle": {
+        "support_level": "untriaged"
+      },
+      "scale": {
+        "support_level": "untriaged"
+      },
+      "setMatrixValue": {
+        "support_level": "untriaged"
+      },
+      "skewX": {
+        "support_level": "untriaged"
+      },
+      "skewY": {
+        "support_level": "untriaged"
+      },
+      "toString": {
+        "support_level": "untriaged"
+      },
+      "translate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSMediaRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule",
     "members": {
@@ -341,6 +532,10 @@
     },
     "support_level": "stable"
   },
+  "CSSMixFunctionValue": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "CSSPageRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule",
     "members": {
@@ -394,6 +589,14 @@
     },
     "support_level": "deprecated"
   },
+  "CSSRegionRule": {
+    "members": {
+      "cssRules": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule",
     "members": {
@@ -447,6 +650,9 @@
   "CSSStyleDeclaration": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface",
     "members": {
+      "__setter__": {
+        "support_level": "untriaged"
+      },
       "cssText": {},
       "getPropertyCSSValue": {
         "comment": "http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface",
@@ -500,6 +706,80 @@
     },
     "support_level": "standard"
   },
+  "CSSTransformValue": {
+    "members": {
+      "CSS_MATRIX": {
+        "support_level": "untriaged"
+      },
+      "CSS_MATRIX3D": {
+        "support_level": "untriaged"
+      },
+      "CSS_PERSPECTIVE": {
+        "support_level": "untriaged"
+      },
+      "CSS_ROTATE": {
+        "support_level": "untriaged"
+      },
+      "CSS_ROTATE3D": {
+        "support_level": "untriaged"
+      },
+      "CSS_ROTATEX": {
+        "support_level": "untriaged"
+      },
+      "CSS_ROTATEY": {
+        "support_level": "untriaged"
+      },
+      "CSS_ROTATEZ": {
+        "support_level": "untriaged"
+      },
+      "CSS_SCALE": {
+        "support_level": "untriaged"
+      },
+      "CSS_SCALE3D": {
+        "support_level": "untriaged"
+      },
+      "CSS_SCALEX": {
+        "support_level": "untriaged"
+      },
+      "CSS_SCALEY": {
+        "support_level": "untriaged"
+      },
+      "CSS_SCALEZ": {
+        "support_level": "untriaged"
+      },
+      "CSS_SKEW": {
+        "support_level": "untriaged"
+      },
+      "CSS_SKEWX": {
+        "support_level": "untriaged"
+      },
+      "CSS_SKEWY": {
+        "support_level": "untriaged"
+      },
+      "CSS_TRANSLATE": {
+        "support_level": "untriaged"
+      },
+      "CSS_TRANSLATE3D": {
+        "support_level": "untriaged"
+      },
+      "CSS_TRANSLATEX": {
+        "support_level": "untriaged"
+      },
+      "CSS_TRANSLATEY": {
+        "support_level": "untriaged"
+      },
+      "CSS_TRANSLATEZ": {
+        "support_level": "untriaged"
+      },
+      "__getter__": {
+        "support_level": "untriaged"
+      },
+      "operationType": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSUnknownRule": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-cssstylesheet-interface",
     "dart_action": "suppress",
@@ -1060,6 +1340,9 @@
   "DOMNamedFlowCollection": {
     "comment": "http://dev.w3.org/csswg/css-regions/#dom-named-flow-collection",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "item": {},
       "length": {},
       "namedItem": {}
@@ -1105,8 +1388,14 @@
   "DOMStringMap": {
     "comment": "http://dev.w3.org/html5/spec-LC/common-dom-interfaces.html#domstringmap-0",
     "members": {
+      "__delete__": {
+        "support_level": "untriaged"
+      },
       "__getter__": {
         "support_level": "untriaged"
+      },
+      "__setter__": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "stable"
@@ -2030,6 +2319,10 @@
     },
     "support_level": "stable"
   },
+  "EXTFragDepth": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "EXTTextureFilterAnisotropic": {
     "comment": "http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/",
     "members": {
@@ -2913,6 +3206,9 @@
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#dom-document-all",
     "dart_action": "suppress",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "item": {},
       "length": {},
       "namedItem": {},
@@ -3155,6 +3451,9 @@
   "HTMLCollection": {
     "comment": "http://www.w3.org/TR/domcore/#interface-htmlcollection",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "item": {},
       "length": {},
       "namedItem": {}
@@ -3363,6 +3662,12 @@
     "dart_action": "unstable",
     "members": {
       "HTMLEmbedElement": {},
+      "__getter__": {
+        "support_level": "untriaged"
+      },
+      "__setter__": {
+        "support_level": "untriaged"
+      },
       "align": {
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#HTMLEmbedElement-partial",
         "dart_action": "suppress",
@@ -3844,6 +4149,9 @@
       "disabled": {},
       "href": {},
       "hreflang": {},
+      "import": {
+        "support_level": "untriaged"
+      },
       "media": {},
       "rel": {},
       "rev": {
@@ -4125,6 +4433,12 @@
     "dart_action": "unstable",
     "members": {
       "HTMLObjectElement": {},
+      "__getter__": {
+        "support_level": "untriaged"
+      },
+      "__setter__": {
+        "support_level": "untriaged"
+      },
       "align": {
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#HTMLObjectElement-partial",
         "dart_action": "suppress",
@@ -4357,6 +4671,9 @@
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-select-element",
     "members": {
       "HTMLSelectElement": {},
+      "__setter__": {
+        "support_level": "untriaged"
+      },
       "autofocus": {},
       "checkValidity": {},
       "disabled": {},
@@ -5150,6 +5467,26 @@
     },
     "support_level": "stable"
   },
+  "MIDIAccess": {
+    "members": {
+      "addEventListener": {
+        "support_level": "untriaged"
+      },
+      "dispatchEvent": {
+        "support_level": "untriaged"
+      },
+      "inputs": {
+        "support_level": "untriaged"
+      },
+      "outputs": {
+        "support_level": "untriaged"
+      },
+      "removeEventListener": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "MIDIConnectionEvent": {
     "comment": "http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface",
     "members": {
@@ -5492,6 +5829,9 @@
   },
   "MimeTypeArray": {
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "item": {},
       "length": {},
       "namedItem": {}
@@ -5616,6 +5956,9 @@
     "comment": "http://dom.spec.whatwg.org/#namednodemap",
     "dart_action": "suppress",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "getNamedItem": {},
       "getNamedItemNS": {},
       "item": {},
@@ -5737,6 +6080,15 @@
       "code": {
         "dart_action": "experimental",
         "support_level": "nonstandard"
+      },
+      "constraintName": {
+        "support_level": "untriaged"
+      },
+      "message": {
+        "support_level": "untriaged"
+      },
+      "name": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "experimental"
@@ -6324,6 +6676,9 @@
   },
   "Plugin": {
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "description": {},
       "filename": {},
       "item": {},
@@ -6335,6 +6690,9 @@
   },
   "PluginArray": {
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "item": {},
       "length": {},
       "namedItem": {},
@@ -6560,6 +6918,9 @@
   "RTCStatsResponse": {
     "comment": "http://dev.w3.org/2011/webrtc/editor/webrtc.html#widl-RTCStatsReport-RTCStats-getter-DOMString-id",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "namedItem": {},
       "result": {}
     },
@@ -6676,6 +7037,14 @@
     },
     "support_level": "stable"
   },
+  "ResourceProgressEvent": {
+    "members": {
+      "url": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "SQLError": {
     "comment": "http://www.w3.org/TR/webdatabase/#sqlerror",
     "dart_action": "experimental",
@@ -10124,9 +10493,15 @@
     "comment": "http://www.w3.org/TR/webstorage/#the-storage-interface",
     "dart_action": "unstable",
     "members": {
+      "__delete__": {
+        "support_level": "untriaged"
+      },
       "__getter__": {
         "support_level": "untriaged"
       },
+      "__setter__": {
+        "support_level": "untriaged"
+      },
       "clear": {},
       "getItem": {},
       "key": {},
@@ -10220,6 +10595,9 @@
   "StyleSheetList": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-stylesheetlist-sequence",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "item": {},
       "length": {}
     },
@@ -10569,7 +10947,10 @@
   "WaveShaperNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-WaveShaperNode",
     "members": {
-      "curve": {}
+      "curve": {},
+      "oversample": {
+        "support_level": "untriaged"
+      }
     },
     "support_level": "experimental"
   },
diff --git a/tools/dom/scripts/dartmetadata.py b/tools/dom/scripts/dartmetadata.py
index 042ef89..e54caf0 100644
--- a/tools/dom/scripts/dartmetadata.py
+++ b/tools/dom/scripts/dartmetadata.py
@@ -258,6 +258,7 @@
 #   INTERFACE.MEMBER: annotation to be added to the member declaration
 _annotations = monitored.Dict('dartmetadata._annotations', {
   'CSSHostRule': _shadow_dom_annotations,
+  'CSSMatrix': _webkit_experimental_annotations,
   'Crypto': _webkit_experimental_annotations,
   'Database': _web_sql_annotations,
   'DatabaseSync': _web_sql_annotations,
@@ -377,7 +378,6 @@
   'SQLTransaction': _web_sql_annotations,
   'SQLTransactionSync': _web_sql_annotations,
   'WebGLRenderingContext': _webgl_annotations,
-  'WebKitCSSMatrix': _webkit_experimental_annotations,
   'WebSocket': _all_but_ie9_annotations,
   'Worker': _all_but_ie9_annotations,
   'XMLHttpRequest.onloadend': _all_but_ie9_annotations,
diff --git a/tools/dom/scripts/fremontcutbuilder.py b/tools/dom/scripts/fremontcutbuilder.py
index 503619a..f95e6bc 100755
--- a/tools/dom/scripts/fremontcutbuilder.py
+++ b/tools/dom/scripts/fremontcutbuilder.py
@@ -33,10 +33,8 @@
     'ENABLE_LEGACY_NOTIFICATIONS', # Not on Android
     'ENABLE_NAVIGATOR_CONTENT_UTILS', # Not on Android
     'ENABLE_NOTIFICATIONS', # Not on Android
-    'ENABLE_SVG',
     'ENABLE_SVG_FONTS',
     'ENABLE_WEB_AUDIO', # Not on Android
-    'ENABLE_WEBGL',
 ]
 
 def build_database(idl_files, database_dir, feature_defines=None, parallel=False):
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 18e5949..d9a9d48 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -50,13 +50,17 @@
     'RTCDTMFToneChangeEvent': 'RtcDtmfToneChangeEvent',
     'RTCErrorCallback': '_RtcErrorCallback',
     'RTCSessionDescriptionCallback': '_RtcSessionDescriptionCallback',
-    'StringCallback': '_StringCallback',
     'SVGDocument': 'SvgDocument', # Manual to avoid name conflicts.
     'SVGElement': 'SvgElement', # Manual to avoid name conflicts.
     'SVGException': 'SvgException', # Manual of avoid conflict with Exception.
     'SVGGradientElement': '_GradientElement',
     'SVGSVGElement': 'SvgSvgElement', # Manual to avoid name conflicts.
+    'StringCallback': '_StringCallback',
     'WebGLVertexArrayObjectOES': 'VertexArrayObject',
+    'WebKitCSSFilterRule': '_WebKitCssFilterRule',
+    'WebKitCSSKeyframeRule': '_WebKitCssKeyframeRule',
+    'WebKitCSSKeyframesRule': '_WebKitCssKeyframesRule',
+    'WebKitCSSRegionRule': '_WebKitCssRegionRule',
     'XMLHttpRequest': 'HttpRequest',
     'XMLHttpRequestProgressEvent': 'HttpRequestProgressEvent',
     'XMLHttpRequestUpload': 'HttpRequestUpload',
@@ -653,7 +657,8 @@
       if any(interface.id in ['Element', 'Document']
              for interface in self._database.Hierarchy(interface)):
         return interface.id[len('HTML'):]
-    return self.DartifyTypeName(interface.javascript_binding_name)
+    return self._DartifyName(interface.javascript_binding_name)
+
 
 
   def RenameMember(self, interface_name, member_node, member, member_prefix='',
@@ -752,8 +757,11 @@
     if type_name in html_interface_renames:
       return html_interface_renames[type_name]
 
+    return self._DartifyName(type_name)
+
+  def _DartifyName(self, dart_name):
     # Strip off any standard prefixes.
-    name = re.sub(r'^SVG', '', type_name)
+    name = re.sub(r'^SVG', '', dart_name)
     name = re.sub(r'^IDB', '', name)
     name = re.sub(r'^WebGL', '', name)
     name = re.sub(r'^WebKit', '', name)
diff --git a/tools/dom/src/CanvasImageSource.dart b/tools/dom/src/CanvasImageSource.dart
index 9d35871..69165cf 100644
--- a/tools/dom/src/CanvasImageSource.dart
+++ b/tools/dom/src/CanvasImageSource.dart
@@ -7,7 +7,7 @@
 /**
  * An object that can be drawn to a [CanvasRenderingContext2D] object with
  * [CanvasRenderingContext2D.drawImage],
- * [CanvasRenderingContext2D.drawImageRect],
+ * [CanvasRenderingContext2D.drawImageToRect],
  * [CanvasRenderingContext2D.drawImageScaled], or
  * [CanvasRenderingContext2D.drawImageScaledFromSource].
  *