diff --git a/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart b/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart
index 9913a63..0dc7319 100644
--- a/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/invocation_computer.dart
@@ -63,6 +63,11 @@
     } else if (node is PropertyAccess) {
       node = (node as PropertyAccess).realTarget;
     }
+    if (node is Identifier && node.bestElement is ClassElement) {
+      node.bestElement.accept(
+          new _PrefixedIdentifierSuggestionBuilder(request));
+      return new Future.value(true);
+    }
     if (node is Expression) {
       InterfaceTypeSuggestionBuilder.suggestionsFor(request, node.bestType);
       return new Future.value(true);
diff --git a/pkg/analysis_server/lib/src/services/completion/optype.dart b/pkg/analysis_server/lib/src/services/completion/optype.dart
index 3a6d6ef..efaa8fd 100644
--- a/pkg/analysis_server/lib/src/services/completion/optype.dart
+++ b/pkg/analysis_server/lib/src/services/completion/optype.dart
@@ -378,6 +378,12 @@
   }
 
   @override
+  void visitListLiteral(ListLiteral node) {
+    optype.includeReturnValueSuggestions = true;
+    optype.includeTypeNameSuggestions = true;
+  }
+
+  @override
   void visitMethodDeclaration(MethodDeclaration node) {
   }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
index ba6c396..f951371 100644
--- a/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
@@ -321,16 +321,21 @@
     // exceptions to handle getter/setter pairs).
     for (InterfaceType targetType in _getTypeOrdering(type)) {
       for (MethodElement method in targetType.methods) {
-        addSuggestion(method);
+        // Exclude static methods when completion on an instance
+        if (!method.isStatic) {
+          addSuggestion(method);
+        }
       }
       for (PropertyAccessorElement propertyAccessor in targetType.accessors) {
-        if (propertyAccessor.isSynthetic) {
-          // Avoid visiting a field twice
-          if (propertyAccessor.isGetter) {
-            addSuggestion(propertyAccessor.variable);
+        if (!propertyAccessor.isStatic) {
+          if (propertyAccessor.isSynthetic) {
+            // Avoid visiting a field twice
+            if (propertyAccessor.isGetter) {
+              addSuggestion(propertyAccessor.variable);
+            }
+          } else {
+            addSuggestion(propertyAccessor);
           }
-        } else {
-          addSuggestion(propertyAccessor);
         }
       }
     }
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index aef1641..aa47d3e 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -229,8 +229,7 @@
 
     buildTests('testCommentSnippets042', '''
 class DateTime{static const int WED=3;int get day;}fd(){DateTime d=new DateTime.now();d.!1WED!2;}''',
-        <String>["1+day", "2-WED"],
-        failingTests: '2');
+        <String>["1+day", "2-WED"]);
 
     buildTests('testCommentSnippets043', '''
 class L{var k;void.!1}''', <String>["1-k"]);
@@ -642,8 +641,7 @@
 
     buildTests('testCommentSnippets079', '''
 class Map{static from()=>null;clear(){}}void main() { Map s; s.!1 }''',
-        <String>["1-from", "1+clear"],
-        failingTests: '1'); // static method, instance method
+        <String>["1-from", "1+clear"]); // static method, instance method
 
     buildTests('testCommentSnippets080', '''
 class RuntimeError{var message;}void main() { RuntimeError.!1 }''',
@@ -1427,8 +1425,7 @@
   b.a.!1;
   c.!2;
 }''',
-        <String>["1-FIELD", "1+fieldA", "2+fieldC", "2+fieldA"],
-        failingTests: '1');
+        <String>["1-FIELD", "1+fieldA", "2+fieldC", "2+fieldA"]);
 
     buildTests('testCompletion_return_withIdentifierPrefix', '''
 f() { var vvv = 42; return v!1 }''', <String>["1+vvv"]);
@@ -2160,8 +2157,7 @@
             "C+g",
             "D+_m",
             "E+m",
-            "F+g"],
-        failingTests: '789');
+            "F+g"]);
 
     buildTests('test026', '''var aBcD; var x=ab!1''', <String>["1+aBcD"]);
 
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 2764b587..67a7a06 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -2328,6 +2328,26 @@
     });
   }
 
+  test_Literal_list() {
+    // ']'  ListLiteral  ArgumentList  MethodInvocation
+    addTestSource('main() {var Some; print([^]);}');
+    computeFast();
+    return computeFull((bool result) {
+      assertSuggestLocalVariable('Some', null);
+      assertSuggestImportedClass('String');
+    });
+  }
+
+  test_Literal_list2() {
+    // SimpleIdentifier ListLiteral  ArgumentList  MethodInvocation
+    addTestSource('main() {var Some; print([S^]);}');
+    computeFast();
+    return computeFull((bool result) {
+      assertSuggestLocalVariable('Some', null);
+      assertSuggestImportedClass('String');
+    });
+  }
+
   test_Literal_string() {
     // SimpleStringLiteral  ExpressionStatement  Block
     addTestSource('class A {a() {"hel^lo"}}');
@@ -2608,7 +2628,7 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 0);
-      assertSuggestInvocationField('sc', 'int');
+      assertNotSuggested('sc');
       assertSuggestInvocationField('b', null, isDeprecated: true);
       assertNotSuggested('_c');
       assertSuggestInvocationGetter('d', 'X');
@@ -2643,7 +2663,7 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 0);
-      assertSuggestInvocationField('sc', 'int');
+      assertNotSuggested('sc');
       assertSuggestInvocationField('b', null);
       assertSuggestInvocationField('_c', 'X');
       assertSuggestInvocationGetter('d', 'X');
diff --git a/pkg/analysis_server/test/services/completion/invocation_computer_test.dart b/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
index 6b9886b..4025bdb 100644
--- a/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
@@ -153,20 +153,6 @@
     });
   }
 
-  test_param() {
-    addTestSource('foo(String x) {x.^}');
-    return computeFull((bool result) {
-      assertSuggestGetter('length', 'int');
-    });
-  }
-
-  test_param_is() {
-    addTestSource('foo(x) {if (x is String) x.^}');
-    return computeFull((bool result) {
-      assertSuggestGetter('length', 'int');
-    });
-  }
-
   test_method_parameters_mixed_required_and_named() {
     addTestSource('''
 class C {
@@ -309,6 +295,92 @@
     });
   }
 
+  test_only_instance() {
+    // SimpleIdentifier  PropertyAccess  ExpressionStatement
+    addTestSource('''
+class C {
+  int f1;
+  static int f2;
+  m1() {}
+  static m2() {}
+}
+void main() {new C().^}''');
+    return computeFull((bool result) {
+      assertSuggestInvocationField('f1', 'int');
+      assertNotSuggested('f2');
+      assertSuggestMethod('m1', 'C', null);
+      assertNotSuggested('m2');
+    });
+  }
+
+  test_only_instance2() {
+    // SimpleIdentifier  MethodInvocation  ExpressionStatement
+    addTestSource('''
+class C {
+  int f1;
+  static int f2;
+  m1() {}
+  static m2() {}
+}
+void main() {new C().^ print("something");}''');
+    return computeFull((bool result) {
+      assertSuggestInvocationField('f1', 'int');
+      assertNotSuggested('f2');
+      assertSuggestMethod('m1', 'C', null);
+      assertNotSuggested('m2');
+    });
+  }
+
+  test_only_static() {
+    // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
+    addTestSource('''
+class C {
+  int f1;
+  static int f2;
+  m1() {}
+  static m2() {}
+}
+void main() {C.^}''');
+    return computeFull((bool result) {
+      assertNotSuggested('f1');
+      assertSuggestInvocationField('f2', 'int');
+      assertNotSuggested('m1');
+      assertSuggestMethod('m2', 'C', null);
+    });
+  }
+
+  test_only_static2() {
+    // SimpleIdentifier  MethodInvocation  ExpressionStatement
+    addTestSource('''
+class C {
+  int f1;
+  static int f2;
+  m1() {}
+  static m2() {}
+}
+void main() {C.^ print("something");}''');
+    return computeFull((bool result) {
+      assertNotSuggested('f1');
+      assertSuggestInvocationField('f2', 'int');
+      assertNotSuggested('m1');
+      assertSuggestMethod('m2', 'C', null);
+    });
+  }
+
+  test_param() {
+    addTestSource('foo(String x) {x.^}');
+    return computeFull((bool result) {
+      assertSuggestGetter('length', 'int');
+    });
+  }
+
+  test_param_is() {
+    addTestSource('foo(x) {if (x is String) x.^}');
+    return computeFull((bool result) {
+      assertSuggestGetter('length', 'int');
+    });
+  }
+
   test_shadowing_field_over_field() =>
       check_shadowing('int x;', 'int x;', true);
 
diff --git a/pkg/analysis_server/test/services/completion/optype_test.dart b/pkg/analysis_server/test/services/completion/optype_test.dart
index ce7a5ba..a5367a7 100644
--- a/pkg/analysis_server/test/services/completion/optype_test.dart
+++ b/pkg/analysis_server/test/services/completion/optype_test.dart
@@ -627,6 +627,18 @@
     assertOpType(typeNames: true);
   }
 
+  test_Literal_list() {
+    // ']'  ListLiteral  ArgumentList  MethodInvocation
+    addTestSource('main() {var Some; print([^]);}');
+    assertOpType(returnValue: true, typeNames: true);
+  }
+
+  test_Literal_list2() {
+    // SimpleIdentifier ListLiteral  ArgumentList  MethodInvocation
+    addTestSource('main() {var Some; print([S^]);}');
+    assertOpType(returnValue: true, typeNames: true);
+  }
+
   test_Literal_string() {
     // SimpleStringLiteral  ExpressionStatement  Block
     addTestSource('class A {a() {"hel^lo"}}');
diff --git a/tools/VERSION b/tools/VERSION
index dacd602..501caa3 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 9
 PATCH 0
 PRERELEASE 7
-PRERELEASE_PATCH 0
+PRERELEASE_PATCH 1
