Version 1.14.0-dev.3.0

Merge commit 'c49e39f551b5844eef8f2557876ec6d690d8ca74' into dev
diff --git a/DEPS b/DEPS
index 0ca12c9..8f64f6c 100644
--- a/DEPS
+++ b/DEPS
@@ -46,7 +46,7 @@
   "chrome_rev" : "@19997",
   "clang_rev" : "@28450",
   "cli_util_tag" : "@0.0.1+2",
-  "collection_rev": "@1da9a07f32efa2ba0c391b289e2037391e31da0e",
+  "collection_rev": "@f6135e6350c63eb3f4dd12953b8d4363faff16fc",
   "crypto_rev" : "@2df57a1e26dd88e8d0614207d4b062c73209917d",
   "csslib_tag" : "@0.12.0",
   "dart2js_info_rev" : "@0a221eaf16aec3879c45719de656680ccb80d8a1",
diff --git a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart
index 2b73a30..014c270 100644
--- a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart
+++ b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart
@@ -10,6 +10,7 @@
 import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/keyword_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/uri_contributor.dart';
 import 'package:plugin/plugin.dart';
@@ -72,6 +73,8 @@
     registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
         () => new CombinatorContributor());
     registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
+        () => new FieldFormalContributor());
+    registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
         () => new KeywordContributor());
     registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
         () => new UriContributor());
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
new file mode 100644
index 0000000..f708685
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library services.completion.contributor.dart.field_formal;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/protocol_server.dart'
+    hide Element, ElementKind;
+import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
+import 'package:analyzer/src/generated/ast.dart';
+
+/**
+ * A contributor for calculating invocation / access suggestions
+ * `completion.getSuggestions` request results.
+ */
+class FieldFormalContributor extends DartCompletionContributor {
+  @override
+  Future<List<CompletionSuggestion>> computeSuggestions(
+      DartCompletionRequest request) async {
+    if (request.target.containingNode is! FieldFormalParameter) {
+      return EMPTY_LIST;
+    }
+
+    // Partially resolve the compilation unit
+    CompilationUnit unit = await request.resolveDeclarationsInScope();
+    // Gracefully degrade if the compilation unit could not be resolved
+    // e.g. detached part file or source change
+    if (unit == null) {
+      return EMPTY_LIST;
+    }
+
+    // Recompute the target since resolution may have changed it
+    AstNode node = request.target.containingNode;
+    if (node is! FieldFormalParameter) {
+      return EMPTY_LIST;
+    }
+
+    // If this is a constructor declaration
+    // then compute fields already referenced
+    ConstructorDeclaration constructorDecl =
+        node.getAncestor((p) => p is ConstructorDeclaration);
+    if (constructorDecl == null) {
+      return EMPTY_LIST;
+    }
+
+    // Compute the list of fields already referenced in the constructor
+    List<String> referencedFields = new List<String>();
+    for (FormalParameter param in constructorDecl.parameters.parameters) {
+      if (param is FieldFormalParameter) {
+        SimpleIdentifier fieldId = param.identifier;
+        if (fieldId != null && fieldId != request.target.entity) {
+          String fieldName = fieldId.name;
+          if (fieldName != null && fieldName.length > 0) {
+            referencedFields.add(fieldName);
+          }
+        }
+      }
+    }
+
+    // Add suggestions for fields that are not already referenced
+    ClassDeclaration classDecl =
+        constructorDecl.getAncestor((p) => p is ClassDeclaration);
+    List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
+    for (ClassMember member in classDecl.members) {
+      if (member is FieldDeclaration && !member.isStatic) {
+        for (VariableDeclaration varDecl in member.fields.variables) {
+          SimpleIdentifier fieldId = varDecl.name;
+          if (fieldId != null) {
+            String fieldName = fieldId.name;
+            if (fieldName != null && fieldName.length > 0) {
+              if (!referencedFields.contains(fieldName)) {
+                CompletionSuggestion suggestion = createSuggestion(
+                    fieldId.bestElement,
+                    relevance: DART_RELEVANCE_LOCAL_FIELD);
+                if (suggestion != null) {
+                  suggestions.add(suggestion);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    return suggestions;
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
index 5a52da8..b6fe585 100644
--- a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
@@ -96,73 +96,6 @@
 }
 
 /**
- * A suggestion builder for 'this.' constructor arguments.
- */
-class _FieldFormalSuggestionBuilder implements SuggestionBuilder {
-  final DartCompletionRequest request;
-
-  _FieldFormalSuggestionBuilder(this.request);
-
-  @override
-  bool computeFast(AstNode node) {
-    if (node is FieldFormalParameter) {
-      ConstructorDeclaration constructorDecl =
-          node.getAncestor((p) => p is ConstructorDeclaration);
-      if (constructorDecl != null) {
-        // Compute fields already referenced
-        List<String> referencedFields = new List<String>();
-        for (FormalParameter param in constructorDecl.parameters.parameters) {
-          if (param is FieldFormalParameter) {
-            SimpleIdentifier fieldId = param.identifier;
-            if (fieldId != null && fieldId != request.target.entity) {
-              String fieldName = fieldId.name;
-              if (fieldName != null && fieldName.length > 0) {
-                referencedFields.add(fieldName);
-              }
-            }
-          }
-        }
-
-        // Add suggestions for fields that are not already referenced
-        ClassDeclaration classDecl =
-            constructorDecl.getAncestor((p) => p is ClassDeclaration);
-        for (ClassMember member in classDecl.members) {
-          if (member is FieldDeclaration && !member.isStatic) {
-            for (VariableDeclaration varDecl in member.fields.variables) {
-              SimpleIdentifier fieldId = varDecl.name;
-              if (fieldId != null) {
-                String fieldName = fieldId.name;
-                if (fieldName != null && fieldName.length > 0) {
-                  if (!referencedFields.contains(fieldName)) {
-                    CompletionSuggestion suggestion =
-                        createFieldSuggestion(request.source, member, varDecl);
-                    if (suggestion != null) {
-                      request.addSuggestion(suggestion);
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    } else {
-      // This should never be called with a case not handled above.
-      assert(false);
-    }
-    return true;
-  }
-
-  @override
-  Future<bool> computeFull(AstNode node) {
-    // This should never be called; we should always be able to compute
-    // suggestions and return true in computeFast method.
-    assert(false);
-    return null;
-  }
-}
-
-/**
  * An [AstNode] vistor for determining which suggestion builder
  * should be used to build invocation/access suggestions.
  */
@@ -179,11 +112,6 @@
   }
 
   @override
-  SuggestionBuilder visitFieldFormalParameter(FieldFormalParameter node) {
-    return new _FieldFormalSuggestionBuilder(request);
-  }
-
-  @override
   SuggestionBuilder visitMethodInvocation(MethodInvocation node) {
     return new _ExpressionSuggestionBuilder(request);
   }
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index 29108ca..63180b7 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -4418,10 +4418,9 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 0);
-      assertSuggestInvocationField('b', null,
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('b');
+      assertNotSuggested('_c');
       assertNotSuggested('sb');
       assertNotSuggested('d');
       assertNotSuggested('_e');
@@ -4458,10 +4457,9 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset - 1);
       expect(request.replacementLength, 1);
-      assertSuggestInvocationField('b', null,
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('b');
+      assertNotSuggested('_c');
       assertNotSuggested('d');
       assertNotSuggested('_e');
       assertNotSuggested('f');
@@ -4497,10 +4495,9 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 1);
-      assertSuggestInvocationField('b', null,
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('b');
+      assertNotSuggested('_c');
       assertNotSuggested('d');
       assertNotSuggested('_e');
       assertNotSuggested('f');
@@ -4537,8 +4534,8 @@
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 0);
       assertNotSuggested('b');
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('_c');
       assertNotSuggested('d');
       assertNotSuggested('_e');
       assertNotSuggested('f');
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index c08a073..d75024b 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -160,6 +160,62 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestConstructor(String name,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      int elemOffset}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        relevance: relevance, importUri: importUri, elemOffset: elemOffset);
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.CONSTRUCTOR));
+    int index = name.indexOf('.');
+    expect(element.name, index >= 0 ? name.substring(index + 1) : '');
+    return cs;
+  }
+
+  CompletionSuggestion assertSuggestEnum(String completion,
+      {bool isDeprecated: false}) {
+    CompletionSuggestion suggestion =
+        assertSuggest(completion, isDeprecated: isDeprecated);
+    expect(suggestion.isDeprecated, isDeprecated);
+    expect(suggestion.element.kind, protocol.ElementKind.ENUM);
+    return suggestion;
+  }
+
+  CompletionSuggestion assertSuggestEnumConst(String completion,
+      {bool isDeprecated: false}) {
+    CompletionSuggestion suggestion =
+        assertSuggest(completion, isDeprecated: isDeprecated);
+    expect(suggestion.isDeprecated, isDeprecated);
+    expect(suggestion.element.kind, protocol.ElementKind.ENUM_CONSTANT);
+    return suggestion;
+  }
+
+  CompletionSuggestion assertSuggestField(String name, String type,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+      bool isDeprecated: false}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        elemKind: protocol.ElementKind.FIELD,
+        isDeprecated: isDeprecated);
+    // The returnType represents the type of a field
+    expect(cs.returnType, type != null ? type : 'dynamic');
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.FIELD));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    // The returnType represents the type of a field
+    expect(element.returnType, type != null ? type : 'dynamic');
+    assertHasNoParameterInfo(cs);
+    return cs;
+  }
+
   CompletionSuggestion assertSuggestFunction(String name, String returnType,
       {CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
       bool deprecated: false,
@@ -214,6 +270,78 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestGetter(String name, String returnType,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+      bool isDeprecated: false}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        elemKind: protocol.ElementKind.GETTER,
+        isDeprecated: isDeprecated);
+    expect(cs.returnType, returnType != null ? returnType : 'dynamic');
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.GETTER));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    expect(element.returnType,
+        equals(returnType != null ? returnType : 'dynamic'));
+    assertHasNoParameterInfo(cs);
+    return cs;
+  }
+
+  CompletionSuggestion assertSuggestMethod(
+      String name, String declaringType, String returnType,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+      bool isDeprecated: false}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        isDeprecated: isDeprecated);
+    expect(cs.declaringType, equals(declaringType));
+    expect(cs.returnType, returnType != null ? returnType : 'dynamic');
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.METHOD));
+    expect(element.name, equals(name));
+    String param = element.parameters;
+    expect(param, isNotNull);
+    expect(param[0], equals('('));
+    expect(param[param.length - 1], equals(')'));
+    expect(element.returnType, returnType != null ? returnType : 'dynamic');
+    assertHasParameterInfo(cs);
+    return cs;
+  }
+
+  CompletionSuggestion assertSuggestSetter(String name,
+      [int relevance = DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        elemKind: protocol.ElementKind.SETTER);
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.SETTER));
+    expect(element.name, equals(name));
+    // TODO (danrubel) assert setter param
+    //expect(element.parameters, isNull);
+    // TODO (danrubel) it would be better if this was always null
+    if (element.returnType != null) {
+      expect(element.returnType, 'dynamic');
+    }
+    assertHasNoParameterInfo(cs);
+    return cs;
+  }
+
   CompletionSuggestion assertSuggestTopLevelVar(String name, String returnType,
       {int relevance: DART_RELEVANCE_DEFAULT,
       CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
diff --git a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
new file mode 100644
index 0000000..2f39159
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
@@ -0,0 +1,167 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.services.completion.field_formal;
+
+import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../../utils.dart';
+import 'completion_contributor_util.dart';
+
+main() {
+  initializeTestEnvironment();
+  defineReflectiveTests(FieldFormalContributorTest);
+}
+
+@reflectiveTest
+class FieldFormalContributorTest extends DartCompletionContributorTest {
+  @override
+  DartCompletionContributor createContributor() {
+    return new FieldFormalContributor();
+  }
+
+  test_ThisExpression_constructor_param() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.^) {}
+          A.z() {}
+          var b; X _c; static sb;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestField('b', null, relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('sb');
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+
+  test_ThisExpression_constructor_param2() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.b^) {}
+          A.z() {}
+          var b; X _c;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset - 1);
+    expect(replacementLength, 1);
+    assertSuggestField('b', null, relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+
+  test_ThisExpression_constructor_param3() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.^b) {}
+          A.z() {}
+          var b; X _c;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 1);
+    assertSuggestField('b', null, relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+
+  test_ThisExpression_constructor_param4() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.b, this.^) {}
+          A.z() {}
+          var b; X _c;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertNotSuggested('b');
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/test_all.dart b/pkg/analysis_server/test/services/completion/dart/test_all.dart
index 9d8d061..6d5c836 100644
--- a/pkg/analysis_server/test/services/completion/dart/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/test_all.dart
@@ -10,6 +10,7 @@
 import 'combinator_contributor_test.dart' as combinator_test;
 import 'arglist_contributor_test.dart' as arglist_test;
 import 'common_usage_sorter_test.dart' as common_usage_test;
+import 'field_formal_contributor_test.dart' as field_formal_contributor_test;
 import 'inherited_contributor_test.dart' as inherited_contributor_test;
 import 'keyword_contributor_test.dart' as keyword_test;
 import 'uri_contributor_test.dart' as uri_contributor_test;
@@ -21,6 +22,7 @@
     arglist_test.main();
     combinator_test.main();
     common_usage_test.main();
+    field_formal_contributor_test.main();
     inherited_contributor_test.main();
     keyword_test.main();
     uri_contributor_test.main();
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 5891105..241086a 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -164,7 +164,7 @@
 javascript_int_overflow_literal_test/01: Fail # Issue 14651.
 javascript_int_overflow_test: Fail # Issue 14651.
 
-[ $compiler == none && $runtime == drt && $arch == x64 ]
+[ $compiler == none && $runtime == drt ]
 map_literal_oom_test: RuntimeError # Issue 24571
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
diff --git a/tests/try/try.status b/tests/try/try.status
index d6d7ca7..e256bca 100644
--- a/tests/try/try.status
+++ b/tests/try/try.status
@@ -39,6 +39,9 @@
 [ $compiler == dart2js ]
 poi/*: Skip # Issue 20031
 
+[ $compiler == dart2js && $runtime == none ]
+poi/serialize_test: RuntimeError # Issue 25125
+
 [ $compiler == dart2js ]
 # Compilation is slow, test fails at runtime due to time out, but
 # unpredictably.
diff --git a/tools/VERSION b/tools/VERSION
index 1998c0e..7d5050b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 14
 PATCH 0
-PRERELEASE 2
+PRERELEASE 3
 PRERELEASE_PATCH 0
diff --git a/tools/deps/dartium.deps/DEPS b/tools/deps/dartium.deps/DEPS
index fb3f166..e9312f4 100644
--- a/tools/deps/dartium.deps/DEPS
+++ b/tools/deps/dartium.deps/DEPS
@@ -33,7 +33,7 @@
   "args_tag": "@0.13.0",
   "barback_rev" : "@29ee90dbcf77cfd64632fa2797a4c8a4f29a4b51",
   "charcode_tag": "@1.1.0",
-  "collection_rev": "@1da9a07f32efa2ba0c391b289e2037391e31da0e",
+  "collection_rev": "@f6135e6350c63eb3f4dd12953b8d4363faff16fc",
   "crypto_rev" : "@2df57a1e26dd88e8d0614207d4b062c73209917d",
   "csslib_tag" : "@0.12.0",
   "dart2js_info_rev" : "@0a221eaf16aec3879c45719de656680ccb80d8a1",