Chromium Code Reviews| 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) { |
|
Johnni Winther
2013/12/04 12:09:14
Add TODO that we need to handle setter vs. getter
ahe
2013/12/04 16:13:44
I'd argue that this code would just work correctly
|
| + 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) { |