Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Unified Diff: pkg/compiler/lib/src/typechecker.dart

Issue 1383483006: Extract DiagnosticReporter implementation from Compiler. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fixes after rebase. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/string_validator.dart ('k') | pkg/compiler/lib/src/types/constants.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/typechecker.dart
diff --git a/pkg/compiler/lib/src/typechecker.dart b/pkg/compiler/lib/src/typechecker.dart
index 9161102df06aa1d65ca41afbce730446967dd936..fe017effa61383c5b570091cac3de6260f1d02fd 100644
--- a/pkg/compiler/lib/src/typechecker.dart
+++ b/pkg/compiler/lib/src/typechecker.dart
@@ -17,7 +17,8 @@ import 'constants/values.dart';
import 'core_types.dart';
import 'dart_types.dart';
import 'diagnostics/diagnostic_listener.dart' show
- DiagnosticMessage;
+ DiagnosticMessage,
+ DiagnosticReporter;
import 'diagnostics/invariant.dart' show
invariant;
import 'diagnostics/messages.dart';
@@ -68,7 +69,7 @@ class TypeCheckerTask extends CompilerTask {
if (element.isClass) return;
if (element.isTypedef) return;
ResolvedAst resolvedAst = element.resolvedAst;
- compiler.withCurrentElement(element.implementation, () {
+ reporter.withCurrentElement(element.implementation, () {
measure(() {
TypeCheckerVisitor visitor = new TypeCheckerVisitor(
compiler, resolvedAst.elements, compiler.types);
@@ -306,6 +307,9 @@ class TypeCheckerVisitor extends Visitor<DartType> {
ExecutableElement executableContext;
CoreTypes get coreTypes => compiler.coreTypes;
+
+ DiagnosticReporter get reporter => compiler.reporter;
+
Resolution get resolution => compiler.resolution;
InterfaceType get intType => coreTypes.intType;
@@ -397,16 +401,16 @@ class TypeCheckerVisitor extends Visitor<DartType> {
reportTypeWarning(Spannable spannable, MessageKind kind,
[Map arguments = const {}]) {
- compiler.reportWarningMessage(spannable, kind, arguments);
+ reporter.reportWarningMessage(spannable, kind, arguments);
}
reportMessage(Spannable spannable, MessageKind kind,
Map arguments,
{bool isHint: false}) {
if (isHint) {
- compiler.reportHintMessage(spannable, kind, arguments);
+ reporter.reportHintMessage(spannable, kind, arguments);
} else {
- compiler.reportWarningMessage(spannable, kind, arguments);
+ reporter.reportWarningMessage(spannable, kind, arguments);
}
}
@@ -414,7 +418,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
if (!reportedTypePromotions.contains(typePromotion)) {
reportedTypePromotions.add(typePromotion);
for (TypePromotionMessage message in typePromotion.messages) {
- compiler.reportHint(message.hint, message.infos);
+ reporter.reportHint(message.hint, message.infos);
}
}
}
@@ -440,9 +444,9 @@ class TypeCheckerVisitor extends Visitor<DartType> {
if (node == null) {
final String error = 'Unexpected node: null';
if (lastSeenNode != null) {
- compiler.internalError(lastSeenNode, error);
+ reporter.internalError(lastSeenNode, error);
} else {
- compiler.internalError(executableContext, error);
+ reporter.internalError(executableContext, error);
}
} else {
lastSeenNode = node;
@@ -452,7 +456,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
DartType result = node.accept(this);
analyzingInitializer = previouslyInitializer;
if (result == null) {
- compiler.internalError(node, 'Type is null.');
+ reporter.internalError(node, 'Type is null.');
}
return _record(node, result);
}
@@ -464,13 +468,13 @@ class TypeCheckerVisitor extends Visitor<DartType> {
List<Node> potentialMutationsIn =
elements.getPotentialMutationsIn(node, variable);
if (!potentialMutationsIn.isEmpty) {
- DiagnosticMessage hint = compiler.createMessage(
+ DiagnosticMessage hint = reporter.createMessage(
typePromotion.node,
MessageKind.POTENTIAL_MUTATION,
{'variableName': variableName, 'shownType': typePromotion.type});
List<DiagnosticMessage> infos = <DiagnosticMessage>[];
for (Node mutation in potentialMutationsIn) {
- infos.add(compiler.createMessage(mutation,
+ infos.add(reporter.createMessage(mutation,
MessageKind.POTENTIAL_MUTATION_HERE,
{'variableName': variableName}));
}
@@ -479,13 +483,13 @@ class TypeCheckerVisitor extends Visitor<DartType> {
List<Node> potentialMutationsInClosures =
elements.getPotentialMutationsInClosure(variable);
if (!potentialMutationsInClosures.isEmpty) {
- DiagnosticMessage hint = compiler.createMessage(
+ DiagnosticMessage hint = reporter.createMessage(
typePromotion.node,
MessageKind.POTENTIAL_MUTATION_IN_CLOSURE,
{'variableName': variableName, 'shownType': typePromotion.type});
List<DiagnosticMessage> infos = <DiagnosticMessage>[];
for (Node mutation in potentialMutationsInClosures) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
mutation,
MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE,
{'variableName': variableName}));
@@ -496,19 +500,19 @@ class TypeCheckerVisitor extends Visitor<DartType> {
List<Node> accesses = elements.getAccessesByClosureIn(node, variable);
List<Node> mutations = elements.getPotentialMutations(variable);
if (!accesses.isEmpty && !mutations.isEmpty) {
- DiagnosticMessage hint = compiler.createMessage(
+ DiagnosticMessage hint = reporter.createMessage(
typePromotion.node,
MessageKind.ACCESSED_IN_CLOSURE,
{'variableName': variableName, 'shownType': typePromotion.type});
List<DiagnosticMessage> infos = <DiagnosticMessage>[];
for (Node access in accesses) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
access,
MessageKind.ACCESSED_IN_CLOSURE_HERE,
{'variableName': variableName}));
}
for (Node mutation in mutations) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
mutation,
MessageKind.POTENTIAL_MUTATION_HERE,
{'variableName': variableName}));
@@ -563,12 +567,12 @@ class TypeCheckerVisitor extends Visitor<DartType> {
{bool isConst: false}) {
if (!types.isAssignable(from, to)) {
if (compiler.enableTypeAssertions && isConst) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
spannable,
MessageKind.NOT_ASSIGNABLE,
{'fromType': from, 'toType': to});
} else {
- compiler.reportWarningMessage(
+ reporter.reportWarningMessage(
spannable,
MessageKind.NOT_ASSIGNABLE,
{'fromType': from, 'toType': to});
@@ -900,17 +904,17 @@ class TypeCheckerVisitor extends Visitor<DartType> {
if (declaration == null) {
declaration = type.element;
} else if (type.isTypedef) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
declaration,
MessageKind.THIS_IS_THE_DECLARATION,
{'name': element.name}));
declaration = type.element;
}
if (declaration != null) {
- infos.add(compiler.createMessage(
+ infos.add(reporter.createMessage(
declaration, MessageKind.THIS_IS_THE_METHOD));
}
- compiler.reportWarning(warning, infos);
+ reporter.reportWarning(warning, infos);
}
/// Report a warning on [node] if [argumentType] is not assignable to
@@ -919,7 +923,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
DartType argumentType,
DartType parameterType) {
if (!types.isAssignable(argumentType, parameterType)) {
- reportWarning(compiler.createMessage(
+ reportWarning(reporter.createMessage(
node,
MessageKind.NOT_ASSIGNABLE,
{'fromType': argumentType, 'toType': parameterType}));
@@ -941,7 +945,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
if (namedParameterType == null) {
// TODO(johnniwinther): Provide better information on the called
// function.
- reportWarning(compiler.createMessage(
+ reportWarning(reporter.createMessage(
argument,
MessageKind.NAMED_ARGUMENT_NOT_FOUND,
{'argumentName': argumentName}));
@@ -959,7 +963,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
// TODO(johnniwinther): Provide better information on the
// called function.
- reportWarning(compiler.createMessage(
+ reportWarning(reporter.createMessage(
argument, MessageKind.ADDITIONAL_ARGUMENT));
DartType argumentType = analyze(argument);
@@ -981,7 +985,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
if (parameterTypes.moveNext()) {
// TODO(johnniwinther): Provide better information on the called
// function.
- reportWarning(compiler.createMessage(
+ reportWarning(reporter.createMessage(
send, MessageKind.MISSING_ARGUMENT,
{'argumentType': parameterTypes.current}));
}
@@ -1089,7 +1093,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
} else if (element.isGetter || element.isSetter) {
return createResolvedAccess(node, name, element);
} else {
- compiler.internalError(element,
+ reporter.internalError(element,
'Unexpected element kind ${element.kind}.');
return null;
}
@@ -1122,7 +1126,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
computeAccess(node, name, element, memberKind,
lookupClassMember: lookupClassMember).computeType(resolution);
if (type == null) {
- compiler.internalError(node, 'Type is null on access of $name on $node.');
+ reporter.internalError(node, 'Type is null on access of $name on $node.');
}
return type;
}
@@ -1241,7 +1245,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
if (!types.isMoreSpecific(shownType, knownType)) {
String variableName = variable.name;
if (!types.isSubtype(shownType, knownType)) {
- typePromotion.addHint(compiler.createMessage(
+ typePromotion.addHint(reporter.createMessage(
node,
MessageKind.NOT_MORE_SPECIFIC_SUBTYPE,
{'variableName': variableName,
@@ -1251,7 +1255,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
DartType shownTypeSuggestion =
computeMoreSpecificType(shownType, knownType);
if (shownTypeSuggestion != null) {
- typePromotion.addHint(compiler.createMessage(
+ typePromotion.addHint(reporter.createMessage(
node,
MessageKind.NOT_MORE_SPECIFIC_SUGGESTION,
{'variableName': variableName,
@@ -1259,7 +1263,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
'shownTypeSuggestion': shownTypeSuggestion,
'knownType': knownType}));
} else {
- typePromotion.addHint(compiler.createMessage(
+ typePromotion.addHint(reporter.createMessage(
node,
MessageKind.NOT_MORE_SPECIFIC,
{'variableName': variableName,
@@ -1548,7 +1552,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
case '<<=': operatorName = '<<'; break;
case '>>=': operatorName = '>>'; break;
default:
- compiler.internalError(node, 'Unexpected assignment operator $name.');
+ reporter.internalError(node, 'Unexpected assignment operator $name.');
}
if (node.isIndex) {
// base[key] o= value for some operator o.
@@ -1967,7 +1971,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
}
unreferencedFields.addAll(enumValues.values);
if (!unreferencedFields.isEmpty) {
- compiler.reportWarningMessage(
+ reporter.reportWarningMessage(
node, MessageKind.MISSING_ENUM_CASES,
{'enumType': expressionType,
'enumValues': unreferencedFields.map(
@@ -2004,7 +2008,7 @@ class TypeCheckerVisitor extends Visitor<DartType> {
}
visitNode(Node node) {
- compiler.internalError(node,
+ reporter.internalError(node,
'Unexpected node ${node.getObjectDescription()} in the type checker.');
}
}
« no previous file with comments | « pkg/compiler/lib/src/string_validator.dart ('k') | pkg/compiler/lib/src/types/constants.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698