Make mixins abstract by default

Change-Id: I8ca672ac9d6acbb29ccea1bd41a617e0a870c74a
Reviewed-on: https://dart-review.googlesource.com/76303
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 5799565..67f5ca5 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -507,7 +507,7 @@
         expect(location.startColumn, 7);
       }
       expect(element.parameters, isNull);
-      expect(element.flags, 0);
+      expect(element.flags, Element.FLAG_ABSTRACT);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 2c409ca..63b3281 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -6581,6 +6581,9 @@
       : super.forSerialized(unlinkedClass, enclosingUnit);
 
   @override
+  bool get isAbstract => true;
+
+  @override
   bool get isMixin => true;
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index f36c118..2f42877 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -2732,7 +2732,7 @@
       InstanceCreationExpression expression,
       TypeName typeName,
       InterfaceType type) {
-    if (type.element.isAbstract) {
+    if (type.element.isAbstract && !type.element.isMixin) {
       ConstructorElement element = expression.staticElement;
       if (element != null && !element.isFactory) {
         bool isImplicit =
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index 0361250..52d0187 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -169,6 +169,10 @@
     expect(element.typeParameters, isEmpty);
 
     expect(element.supertype, isNull);
+    expect(element.isAbstract, isTrue);
+    expect(element.isEnum, isFalse);
+    expect(element.isMixin, isTrue);
+    expect(element.isMixinApplication, isFalse);
     expect(element.type.isObject, isFalse);
 
     assertElementTypes(element.superclassConstraints, [objectType]);
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 09b1a87..d913441 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -169,7 +169,7 @@
     writeDocumentation(e);
     writeMetadata(e, '', '\n');
 
-    writeIf(e.isAbstract, 'abstract ');
+    writeIf(e.isAbstract && !e.isMixin, 'abstract ');
 
     if (e.isEnum) {
       buffer.write('enum ');