Index: dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart |
diff --git a/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart |
index 3e04dc9fb3c24d8f3853847fbddfd11ebb96ef65..21a3d5cfd8c56f5acf8cc17ace03a72865e4ff84 100644 |
--- a/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart |
+++ b/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart |
@@ -916,6 +916,25 @@ class ResolverTask extends CompilerTask { |
MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD); |
} |
} |
+ |
+ if (!cls.isAbstract) { |
+ for (DartType supertype in cls.allSupertypes) { |
+ // This must have been reported elsewhere. |
+ if (!supertype.element.isClass()) continue; |
+ ClassElement superclass = supertype.element; |
+ superclass.forEachMember((ClassElement holder, Element member) { |
+ if (member.isAbstract) { |
+ Element mine = cls.lookupMember(member.name); |
+ if (mine == null || mine.isAbstract) { |
+ compiler.reportWarningCode( |
+ cls, MessageKind.UNIMPLEMENTED_METHOD, |
+ {'class_name': cls.name, 'member_name': member.name}); |
+ compiler.reportHint(member, MessageKind.THIS_IS_THE_METHOD, {}); |
+ } |
+ } |
+ }); |
+ } |
+ } |
} |
void checkAbstractField(Element member) { |