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 ');