Index: pkg/compiler/lib/src/resolution/constructors.dart |
diff --git a/pkg/compiler/lib/src/resolution/constructors.dart b/pkg/compiler/lib/src/resolution/constructors.dart |
index 26e7b48b21e7c040fda020998fcc0a23b922233a..ce4e93c191ccbc31d87e1924d2f867f050560b3e 100644 |
--- a/pkg/compiler/lib/src/resolution/constructors.dart |
+++ b/pkg/compiler/lib/src/resolution/constructors.dart |
@@ -485,18 +485,19 @@ class ConstructorResolver extends CommonResolverVisitor<ConstructorResult> { |
MessageKind kind, |
Map arguments, |
{bool isError: false, |
- bool missingConstructor: false}) { |
+ bool missingConstructor: false, |
+ List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) { |
if (missingConstructor) { |
registry.registerFeature(Feature.THROW_NO_SUCH_METHOD); |
} else { |
registry.registerFeature(Feature.THROW_RUNTIME_ERROR); |
} |
+ DiagnosticMessage message = |
+ reporter.createMessage(diagnosticNode, kind, arguments); |
if (isError || inConstContext) { |
- reporter.reportErrorMessage( |
- diagnosticNode, kind, arguments); |
+ reporter.reportError(message, infos); |
} else { |
- reporter.reportWarningMessage( |
- diagnosticNode, kind, arguments); |
+ reporter.reportWarning(message, infos); |
} |
ErroneousElement error = new ErroneousConstructorElementX( |
kind, arguments, name, enclosing); |
@@ -616,8 +617,7 @@ class ConstructorResolver extends CommonResolverVisitor<ConstructorResult> { |
if (send != null) { |
// The type name is of the form [: prefix . identifier :]. |
String name = send.receiver.asIdentifier().source; |
- Element element = resolver.reportLookupErrorIfAny( |
- lookupInScope(reporter, send, resolver.scope, name), node, name); |
+ Element element = lookupInScope(reporter, send, resolver.scope, name); |
if (element != null && element.isPrefix) { |
prefix = element; |
} |
@@ -666,10 +666,8 @@ class ConstructorResolver extends CommonResolverVisitor<ConstructorResult> { |
ConstructorResult visitIdentifier(Identifier node) { |
String name = node.source; |
- Element element = resolver.reportLookupErrorIfAny( |
- lookupInScope(reporter, node, resolver.scope, name), node, name); |
+ Element element = lookupInScope(reporter, node, resolver.scope, name); |
registry.useElement(node, element); |
- // TODO(johnniwinther): Change errors to warnings, cf. 11.11.1. |
return constructorResultForElement(node, name, element); |
} |
@@ -691,6 +689,15 @@ class ConstructorResolver extends CommonResolverVisitor<ConstructorResult> { |
resolver.enclosingElement, name, |
MessageKind.CANNOT_RESOLVE, |
{'name': name}); |
+ } else if (element.isAmbiguous) { |
+ AmbiguousElement ambiguous = element; |
+ return reportAndCreateErroneousConstructorElement( |
+ node, |
+ ConstructorResultKind.INVALID_TYPE, null, |
+ resolver.enclosingElement, name, |
+ ambiguous.messageKind, |
+ ambiguous.messageArguments, |
+ infos: ambiguous.computeInfos(resolver.enclosingElement, reporter)); |
} else if (element.isMalformed) { |
return constructorResultForErroneous(node, element); |
} else if (element.isClass) { |