| Index: pkg/compiler/lib/src/resolution/members.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
|
| index bd92e976ddc5466c14b06c6eea25ce8e9d4bd71f..c1d7ff4b5f14c8ea72f09ed0378400029f7b81a5 100644
|
| --- a/pkg/compiler/lib/src/resolution/members.dart
|
| +++ b/pkg/compiler/lib/src/resolution/members.dart
|
| @@ -530,22 +530,31 @@ class ResolverTask extends CompilerTask {
|
| }
|
| }
|
|
|
| + bool _isNativeClassOrExtendsNativeClass(ClassElement classElement) {
|
| + assert(classElement != null);
|
| + while (classElement != null) {
|
| + if (classElement.isNative) return true;
|
| + classElement = classElement.superclass;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| TreeElements resolveMethodElementImplementation(
|
| FunctionElement element, FunctionExpression tree) {
|
| return compiler.withCurrentElement(element, () {
|
| if (element.isExternal && tree.hasBody()) {
|
| - compiler.reportError(element,
|
| + error(element,
|
| MessageKind.EXTERNAL_WITH_BODY,
|
| {'functionName': element.name});
|
| }
|
| if (element.isConstructor) {
|
| if (tree.returnType != null) {
|
| - compiler.reportError(tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE);
|
| + error(tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE);
|
| }
|
| if (element.isConst &&
|
| tree.hasBody() &&
|
| !tree.isRedirectingFactory) {
|
| - compiler.reportError(tree, MessageKind.CONST_CONSTRUCTOR_HAS_BODY);
|
| + error(tree, MessageKind.CONST_CONSTRUCTOR_HAS_BODY);
|
| }
|
| }
|
|
|
| @@ -590,6 +599,14 @@ class ResolverTask extends CompilerTask {
|
| checkMixinSuperUses(resolutionTree, mixinApplication, mixin);
|
| }
|
| }
|
| +
|
| + // TODO(9631): support noSuchMethod on native classes.
|
| + if (Elements.isInstanceMethod(element) &&
|
| + element.name == Compiler.NO_SUCH_METHOD &&
|
| + _isNativeClassOrExtendsNativeClass(enclosingClass)) {
|
| + error(tree, MessageKind.NO_SUCH_METHOD_IN_NATIVE);
|
| + }
|
| +
|
| return resolutionTree;
|
| });
|
|
|
|
|