Index: sdk/lib/_internal/compiler/implementation/resolution/members.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart |
index a221d65a15818f2784ce8b89ddb3d531a09446db..1ebc7109cef5b0c72cf723b88ccd8b9772ae05cf 100644 |
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart |
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart |
@@ -1199,8 +1199,19 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
Element lookup(Node node, SourceString name) { |
Element result = scope.lookup(name); |
- if (!inInstanceContext && result != null && result.isInstanceMember()) { |
- error(node, MessageKind.NO_INSTANCE_AVAILABLE, [node]); |
+ if (!Elements.isUnresolved(result)) { |
+ if (!inInstanceContext && result.isInstanceMember()) { |
+ error(node, MessageKind.NO_INSTANCE_AVAILABLE, [node]); |
+ // TODO(johnniwinther): Create an ErroneousElement. |
+ } else if (result.isAmbiguous()) { |
+ AmbiguousElement ambiguous = result; |
+ compiler.reportMessage(compiler.spanFromNode(node), |
+ ambiguous.messageKind.error(ambiguous.messageArguments), |
+ Diagnostic.ERROR); |
+ return new ErroneousElement(ambiguous.messageKind, |
+ ambiguous.messageArguments, |
+ name, enclosingElement); |
+ } |
} |
return result; |
} |
@@ -1266,11 +1277,8 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
MessageKind.CANNOT_RESOLVE, |
[node]); |
} |
- } else if (element.isAmbiguous()) { |
- AmbiguousElement ambiguous = element; |
- element = warnAndCreateErroneousElement(node, node.source, |
- ambiguous.messageKind, |
- ambiguous.messageArguments); |
+ } else if (element.isErroneous()) { |
+ // Use the erroneous element. |
} else { |
if ((element.kind.category & allowedCategory) == 0) { |
// TODO(ahe): Improve error message. Need UX input. |
@@ -2931,8 +2939,7 @@ class ConstructorResolver extends CommonResolverVisitor<Element> { |
} else { |
ResolutionWarning warning = new ResolutionWarning(kind, arguments); |
compiler.reportWarning(diagnosticNode, warning); |
- return new ErroneousFunctionElement(kind, arguments, targetName, |
- enclosing); |
+ return new ErroneousElement(kind, arguments, targetName, enclosing); |
} |
} |
@@ -3050,6 +3057,8 @@ class ConstructorResolver extends CommonResolverVisitor<Element> { |
if (e == null) { |
return failOrReturnErroneousElement(resolver.enclosingElement, node, name, |
MessageKind.CANNOT_RESOLVE, [name]); |
+ } else if (e.isErroneous()) { |
+ return e; |
} else if (identical(e.kind, ElementKind.TYPEDEF)) { |
error(node, MessageKind.CANNOT_INSTANTIATE_TYPEDEF, [name]); |
} else if (identical(e.kind, ElementKind.TYPE_VARIABLE)) { |