Index: pkg/compiler/lib/src/resolution/type_resolver.dart |
diff --git a/pkg/compiler/lib/src/resolution/type_resolver.dart b/pkg/compiler/lib/src/resolution/type_resolver.dart |
index 4e9fa48d184c6356996f1bde422f1d160bc2de70..a4335c887e177f258154d93b6945bc9a6d85fc61 100644 |
--- a/pkg/compiler/lib/src/resolution/type_resolver.dart |
+++ b/pkg/compiler/lib/src/resolution/type_resolver.dart |
@@ -8,6 +8,9 @@ import '../compiler.dart' show |
import '../dart_backend/dart_backend.dart' show |
DartBackend; |
import '../dart_types.dart'; |
+import '../diagnostics/diagnostic_listener.dart' show |
+ DiagnosticListener, |
+ DiagnosticMessage; |
import '../diagnostics/messages.dart' show |
MessageKind; |
import '../elements/elements.dart' show |
@@ -39,6 +42,8 @@ class TypeResolver { |
TypeResolver(this.compiler); |
+ DiagnosticListener get listener => compiler; |
+ |
/// Tries to resolve the type name as an element. |
Element resolveTypeName(Identifier prefixName, |
Identifier typeName, |
@@ -119,15 +124,21 @@ class TypeResolver { |
Element element = resolveTypeName(prefixName, typeName, visitor.scope, |
deferredIsMalformed: deferredIsMalformed); |
- DartType reportFailureAndCreateType(MessageKind messageKind, |
- Map messageArguments, |
- {DartType userProvidedBadType, |
- Element erroneousElement}) { |
+ DartType reportFailureAndCreateType( |
+ MessageKind messageKind, |
+ Map messageArguments, |
+ {DartType userProvidedBadType, |
+ Element erroneousElement, |
+ List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) { |
if (malformedIsError) { |
- visitor.error(node, messageKind, messageArguments); |
+ listener.reportError( |
+ listener.createMessage(node, messageKind, messageArguments), |
+ infos); |
} else { |
registry.registerThrowRuntimeError(); |
- visitor.warning(node, messageKind, messageArguments); |
+ listener.reportWarning( |
+ listener.createMessage(node, messageKind, messageArguments), |
+ infos); |
} |
if (erroneousElement == null) { |
registry.registerThrowRuntimeError(); |
@@ -148,8 +159,11 @@ class TypeResolver { |
} else if (element.isAmbiguous) { |
AmbiguousElement ambiguous = element; |
type = reportFailureAndCreateType( |
- ambiguous.messageKind, ambiguous.messageArguments); |
- ambiguous.diagnose(registry.mapping.analyzedElement, compiler); |
+ ambiguous.messageKind, |
+ ambiguous.messageArguments, |
+ infos: ambiguous.computeInfos( |
+ registry.mapping.analyzedElement, compiler)); |
+ ; |
} else if (element.isErroneous) { |
if (element is ErroneousElement) { |
type = reportFailureAndCreateType( |
@@ -241,7 +255,8 @@ class TypeResolver { |
TypeVariableType typeVariable, |
DartType bound) { |
if (!compiler.types.isSubtype(typeArgument, bound)) { |
- compiler.reportWarning(node, |
+ compiler.reportWarningMessage( |
+ node, |
MessageKind.INVALID_TYPE_VARIABLE_BOUND, |
{'typeVariable': typeVariable, |
'bound': bound, |
@@ -273,7 +288,7 @@ class TypeResolver { |
!typeArguments.isEmpty; |
typeArguments = typeArguments.tail, index++) { |
if (index > expectedVariables - 1) { |
- visitor.warning( |
+ compiler.reportWarningMessage( |
typeArguments.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT); |
typeArgumentCountMismatch = true; |
} |
@@ -282,8 +297,8 @@ class TypeResolver { |
arguments.add(argType); |
} |
if (index < expectedVariables) { |
- visitor.warning(node.typeArguments, |
- MessageKind.MISSING_TYPE_ARGUMENT); |
+ compiler.reportWarningMessage( |
+ node.typeArguments, MessageKind.MISSING_TYPE_ARGUMENT); |
typeArgumentCountMismatch = true; |
} |
return typeArgumentCountMismatch; |