Use new type labeler API in message generation.
For now, it uses a dummy implementation that retains the old behavior.
Change-Id: Iab358b73af470b99d5bd0ed59028d96d26bae47f
Reviewed-on: https://dart-review.googlesource.com/c/84603
Reviewed-by: Peter von der Ahé <ahe@google.com>
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes.dart b/pkg/front_end/lib/src/fasta/fasta_codes.dart
index a3dcb56..f57488f 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes.dart
@@ -7,12 +7,12 @@
import 'package:kernel/ast.dart'
show Constant, DartType, demangleMixinApplicationName;
-import 'package:kernel/text/ast_to_text.dart' show NameSystem, Printer;
-
import '../api_prototype/diagnostic_message.dart' show DiagnosticMessage;
import '../scanner/token.dart' show Token;
+import 'kernel/dummy_type_labeler.dart';
+
import 'severity.dart' show Severity;
import 'util/relativize.dart' as util show relativizeUri;
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index efef374..316cd2f 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -122,18 +122,14 @@
String name, DartType _type, DartType _type2) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeAmbiguousSupertypes,
- message: """'${name}' can't implement both '${type}' and '${type2}'""",
+ message: """'${name}' can't implement both '${type}' and '${type2}'""" +
+ labeler.originMessages,
arguments: {'name': name, 'type': _type, 'type2': _type2});
}
@@ -181,19 +177,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsArgumentTypeNotAssignable(
DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeArgumentTypeNotAssignable,
message:
- """The argument type '${type}' can't be assigned to the parameter type '${type2}'.""",
+ """The argument type '${type}' can't be assigned to the parameter type '${type2}'.""" +
+ labeler.originMessages,
tip: """Try changing the type of the parameter, or casting the argument to '${type2}'.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -1051,15 +1043,13 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalDuplicateKey(Constant _constant) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
- String constant = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> constantParts = labeler.labelConstant(_constant);
+ String constant = constantParts.join();
return new Message(codeConstEvalDuplicateKey,
message:
- """The key '${constant}' conflicts with another existing key in the map.""",
+ """The key '${constant}' conflicts with another existing key in the map.""" +
+ labeler.originMessages,
arguments: {'constant': _constant});
}
@@ -1114,15 +1104,13 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalFreeTypeParameter(DartType _type) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ String type = typeParts.join();
return new Message(codeConstEvalFreeTypeParameter,
message:
- """The type '${type}' is not a constant because it depends on a type parameter, only instantiated types are allowed.""",
+ """The type '${type}' is not a constant because it depends on a type parameter, only instantiated types are allowed.""" +
+ labeler.originMessages,
arguments: {'type': _type});
}
@@ -1154,23 +1142,17 @@
Message _withArgumentsConstEvalInvalidBinaryOperandType(
String string, Constant _constant, DartType _type, DartType _type2) {
if (string.isEmpty) throw 'No string provided';
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
- String constant = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> constantParts = labeler.labelConstant(_constant);
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String constant = constantParts.join();
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeConstEvalInvalidBinaryOperandType,
message:
- """Binary operator '${string}' on '${constant}' requires operand of type '${type}', but was of type '${type2}'.""",
+ """Binary operator '${string}' on '${constant}' requires operand of type '${type}', but was of type '${type2}'.""" +
+ labeler.originMessages,
arguments: {
'string': string,
'constant': _constant,
@@ -1202,15 +1184,13 @@
Message _withArgumentsConstEvalInvalidMethodInvocation(
String string, Constant _constant) {
if (string.isEmpty) throw 'No string provided';
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
- String constant = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> constantParts = labeler.labelConstant(_constant);
+ String constant = constantParts.join();
return new Message(codeConstEvalInvalidMethodInvocation,
message:
- """The method '${string}' can't be invoked on '${constant}' within a const context.""",
+ """The method '${string}' can't be invoked on '${constant}' within a const context.""" +
+ labeler.originMessages,
arguments: {'string': string, 'constant': _constant});
}
@@ -1261,15 +1241,13 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalInvalidStringInterpolationOperand(
Constant _constant) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
- String constant = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> constantParts = labeler.labelConstant(_constant);
+ String constant = constantParts.join();
return new Message(codeConstEvalInvalidStringInterpolationOperand,
message:
- """The '${constant}' can't be used as part of a string interpolation within a const context, only values of type 'null', 'bool', 'int', 'double', or 'String' can be used.""",
+ """The '${constant}' can't be used as part of a string interpolation within a const context, only values of type 'null', 'bool', 'int', 'double', or 'String' can be used.""" +
+ labeler.originMessages,
arguments: {'constant': _constant});
}
@@ -1292,15 +1270,13 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalInvalidSymbolName(Constant _constant) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
- String constant = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> constantParts = labeler.labelConstant(_constant);
+ String constant = constantParts.join();
return new Message(codeConstEvalInvalidSymbolName,
message:
- """The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '${constant}'.""",
+ """The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '${constant}'.""" +
+ labeler.originMessages,
arguments: {'constant': _constant});
}
@@ -1328,23 +1304,17 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsConstEvalInvalidType(
Constant _constant, DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
- String constant = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> constantParts = labeler.labelConstant(_constant);
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String constant = constantParts.join();
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeConstEvalInvalidType,
message:
- """Expected constant '${constant}' to be of type '${type}', but was of type '${type2}'.""",
+ """Expected constant '${constant}' to be of type '${type}', but was of type '${type2}'.""" +
+ labeler.originMessages,
arguments: {'constant': _constant, 'type': _type, 'type2': _type2});
}
@@ -1997,17 +1967,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsDeferredTypeAnnotation(DartType _type, String name) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ String type = typeParts.join();
return new Message(codeDeferredTypeAnnotation,
message:
- """The type '${type}' is deferred loaded via prefix '${name}' and can't be used as a type annotation.""",
+ """The type '${type}' is deferred loaded via prefix '${name}' and can't be used as a type annotation.""" +
+ labeler.originMessages,
tip: """Try removing 'deferred' from the import of '${name}' or use a supertype of '${type}' that isn't deferred.""",
arguments: {'type': _type, 'name': name});
}
@@ -3333,21 +3301,17 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsFactoryRedirecteeInvalidReturnType(
DartType _type, String name, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeFactoryRedirecteeInvalidReturnType,
message:
- """The return type '${type}' of the constructor '${name}' isn't a subtype of '${type2}'.""",
+ """The return type '${type}' of the constructor '${name}' isn't a subtype of '${type2}'.""" +
+ labeler.originMessages,
tip: """Try redirecting to a different constructor.""",
arguments: {'type': _type, 'name': name, 'type2': _type2});
}
@@ -3667,19 +3631,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsForInLoopElementTypeNotAssignable(
DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeForInLoopElementTypeNotAssignable,
message:
- """A value of type '${type}' can't be assigned to a variable of type '${type2}'.""",
+ """A value of type '${type}' can't be assigned to a variable of type '${type2}'.""" +
+ labeler.originMessages,
tip: """Try changing the type of the variable.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -3723,19 +3683,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsForInLoopTypeNotIterable(
DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeForInLoopTypeNotIterable,
message:
- """The type '${type}' used in the 'for' loop must implement '${type2}'.""",
+ """The type '${type}' used in the 'for' loop must implement '${type2}'.""" +
+ labeler.originMessages,
arguments: {'type': _type, 'type2': _type2});
}
@@ -3813,15 +3769,13 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsGenericFunctionTypeInferredAsActualTypeArgument(
DartType _type) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ String type = typeParts.join();
return new Message(codeGenericFunctionTypeInferredAsActualTypeArgument,
message:
- """Unexpected generic function type '${type}' inferred as a type argument.""",
+ """Unexpected generic function type '${type}' inferred as a type argument.""" +
+ labeler.originMessages,
tip: """Try providing a non-generic function type explicitly.""",
arguments: {'type': _type});
}
@@ -4111,15 +4065,13 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsImplicitCallOfNonMethod(DartType _type) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ String type = typeParts.join();
return new Message(codeImplicitCallOfNonMethod,
message:
- """Cannot invoke an instance of '${type}' because it declares 'call' to be something other than a method.""",
+ """Cannot invoke an instance of '${type}' because it declares 'call' to be something other than a method.""" +
+ labeler.originMessages,
tip: """Try changing 'call' to a method or explicitly invoke 'call'.""",
arguments: {'type': _type});
}
@@ -4212,17 +4164,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIncorrectTypeArgument(DartType _type, String name) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ String type = typeParts.join();
return new Message(codeIncorrectTypeArgument,
message:
- """Type argument '${type}' violates the corresponding type variable bound of '${name}'.""",
+ """Type argument '${type}' violates the corresponding type variable bound of '${name}'.""" +
+ labeler.originMessages,
tip: """Try changing type arguments so that they conform to the bounds.""",
arguments: {'type': _type, 'name': name});
}
@@ -4251,17 +4201,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIncorrectTypeArgumentInReturnType(
DartType _type, String name) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ String type = typeParts.join();
return new Message(codeIncorrectTypeArgumentInReturnType,
message:
- """Type argument '${type}' violates the corresponding type variable bound of '${name}' in the return type.""",
+ """Type argument '${type}' violates the corresponding type variable bound of '${name}' in the return type.""" +
+ labeler.originMessages,
tip: """Try changing type arguments so that they conform to the bounds.""",
arguments: {'type': _type, 'name': name});
}
@@ -4296,21 +4244,19 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIncorrectTypeArgumentInSupertype(
DartType _type, String name, String name2, String name3) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
if (name2.isEmpty) throw 'No name provided';
name2 = demangleMixinApplicationName(name2);
if (name3.isEmpty) throw 'No name provided';
name3 = demangleMixinApplicationName(name3);
+ String type = typeParts.join();
return new Message(codeIncorrectTypeArgumentInSupertype,
message:
- """Type argument '${type}' violates the corresponding type variable bound of '${name}' in the supertype '${name2}' of class '${name3}'.""",
+ """Type argument '${type}' violates the corresponding type variable bound of '${name}' in the supertype '${name2}' of class '${name3}'.""" +
+ labeler.originMessages,
tip: """Try changing type arguments so that they conform to the bounds.""",
arguments: {'type': _type, 'name': name, 'name2': name2, 'name3': name3});
}
@@ -4345,21 +4291,19 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIncorrectTypeArgumentInSupertypeInferred(
DartType _type, String name, String name2, String name3) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
if (name2.isEmpty) throw 'No name provided';
name2 = demangleMixinApplicationName(name2);
if (name3.isEmpty) throw 'No name provided';
name3 = demangleMixinApplicationName(name3);
+ String type = typeParts.join();
return new Message(codeIncorrectTypeArgumentInSupertypeInferred,
message:
- """Inferred type argument '${type}' violates the corresponding type variable bound of '${name}' in the supertype '${name2}' of class '${name3}'.""",
+ """Inferred type argument '${type}' violates the corresponding type variable bound of '${name}' in the supertype '${name2}' of class '${name3}'.""" +
+ labeler.originMessages,
tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
arguments: {'type': _type, 'name': name, 'name2': name2, 'name3': name3});
}
@@ -4388,17 +4332,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIncorrectTypeArgumentInferred(
DartType _type, String name) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ String type = typeParts.join();
return new Message(codeIncorrectTypeArgumentInferred,
message:
- """Inferred type argument '${type}' violates the corresponding type variable bound of '${name}'.""",
+ """Inferred type argument '${type}' violates the corresponding type variable bound of '${name}'.""" +
+ labeler.originMessages,
tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
arguments: {'type': _type, 'name': name});
}
@@ -4608,19 +4550,15 @@
String name, DartType _type, DartType _type2) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInitializingFormalTypeMismatch,
message:
- """The type of parameter '${name}', '${type}' is not a subtype of the corresponding field's type, '${type2}'.""",
+ """The type of parameter '${name}', '${type}' is not a subtype of the corresponding field's type, '${type2}'.""" +
+ labeler.originMessages,
tip: """Try changing the type of parameter '${name}' to a subtype of '${type2}'.""",
arguments: {'name': name, 'type': _type, 'type2': _type2});
}
@@ -4994,17 +4932,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInternalProblemStoringMultipleInferredTypes(
DartType _type, String name) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ String type = typeParts.join();
return new Message(codeInternalProblemStoringMultipleInferredTypes,
message:
- """There's already an inferred type, '${type}', for '${name}'.""",
+ """There's already an inferred type, '${type}', for '${name}'.""" +
+ labeler.originMessages,
arguments: {'type': _type, 'name': name});
}
@@ -5170,19 +5106,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidAssignment(DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidAssignment,
message:
- """A value of type '${type}' can't be assigned to a variable of type '${type2}'.""",
+ """A value of type '${type}' can't be assigned to a variable of type '${type2}'.""" +
+ labeler.originMessages,
tip: """Try changing the type of the left hand side, or casting the right hand side to '${type2}'.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -5240,19 +5172,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidCastFunctionExpr(DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidCastFunctionExpr,
message:
- """The function expression type '${type}' isn't of expected type '${type2}'.""",
+ """The function expression type '${type}' isn't of expected type '${type2}'.""" +
+ labeler.originMessages,
tip: """Change the type of the function expression or the context in which it is used.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -5279,19 +5207,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidCastLiteralList(DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidCastLiteralList,
message:
- """The list literal type '${type}' isn't of expected type '${type2}'.""",
+ """The list literal type '${type}' isn't of expected type '${type2}'.""" +
+ labeler.originMessages,
tip: """Change the type of the list literal or the context in which it is used.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -5318,19 +5242,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidCastLiteralMap(DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidCastLiteralMap,
message:
- """The map literal type '${type}' isn't of expected type '${type2}'.""",
+ """The map literal type '${type}' isn't of expected type '${type2}'.""" +
+ labeler.originMessages,
tip: """Change the type of the map literal or the context in which it is used.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -5358,19 +5278,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidCastLocalFunction(
DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidCastLocalFunction,
message:
- """The local function has type '${type}' that isn't of expected type '${type2}'.""",
+ """The local function has type '${type}' that isn't of expected type '${type2}'.""" +
+ labeler.originMessages,
tip: """Change the type of the function or the context in which it is used.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -5397,19 +5313,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidCastNewExpr(DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidCastNewExpr,
message:
- """The constructor returns type '${type}' that isn't of expected type '${type2}'.""",
+ """The constructor returns type '${type}' that isn't of expected type '${type2}'.""" +
+ labeler.originMessages,
tip: """Change the type of the object being constructed or the context in which it is used.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -5436,19 +5348,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidCastStaticMethod(DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidCastStaticMethod,
message:
- """The static method has type '${type}' that isn't of expected type '${type2}'.""",
+ """The static method has type '${type}' that isn't of expected type '${type2}'.""" +
+ labeler.originMessages,
tip: """Change the type of the method or the context in which it is used.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -5476,19 +5384,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsInvalidCastTopLevelFunction(
DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeInvalidCastTopLevelFunction,
message:
- """The top level function has type '${type}' that isn't of expected type '${type2}'.""",
+ """The top level function has type '${type}' that isn't of expected type '${type2}'.""" +
+ labeler.originMessages,
tip: """Change the type of the function or the context in which it is used.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -6124,23 +6028,17 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsMixinApplicationIncompatibleSupertype(
DartType _type, DartType _type2, DartType _type3) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type3);
- String type3 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ List<Object> type3Parts = labeler.labelType(_type3);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
+ String type3 = type3Parts.join();
return new Message(codeMixinApplicationIncompatibleSupertype,
message:
- """'${type}' doesn't implement '${type2}' so it can't be used with '${type3}'.""",
+ """'${type}' doesn't implement '${type2}' so it can't be used with '${type3}'.""" +
+ labeler.originMessages,
arguments: {'type': _type, 'type2': _type2, 'type3': _type3});
}
@@ -6170,15 +6068,13 @@
name = demangleMixinApplicationName(name);
if (name2.isEmpty) throw 'No name provided';
name2 = demangleMixinApplicationName(name2);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ String type = typeParts.join();
return new Message(codeMixinInferenceNoMatchingClass,
message:
- """Type parameters could not be inferred for the mixin '${name}' because '${name2}' does not implement the mixin's supertype constraint '${type}'.""",
+ """Type parameters could not be inferred for the mixin '${name}' because '${name2}' does not implement the mixin's supertype constraint '${type}'.""" +
+ labeler.originMessages,
arguments: {'name': name, 'name2': name2, 'type': _type});
}
@@ -6893,19 +6789,15 @@
name = demangleMixinApplicationName(name);
if (name2.isEmpty) throw 'No name provided';
name2 = demangleMixinApplicationName(name2);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeOverrideTypeMismatchParameter,
message:
- """The parameter '${name}' of the method '${name2}' has type '${type}', which does not match the corresponding type in the overridden method, '${type2}'.""",
+ """The parameter '${name}' of the method '${name2}' has type '${type}', which does not match the corresponding type in the overridden method, '${type2}'.""" +
+ labeler.originMessages,
tip: """Change to a supertype of '${type2}', or, for a covariant parameter, a subtype.""",
arguments: {
'name': name,
@@ -6941,19 +6833,15 @@
String name, DartType _type, DartType _type2) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeOverrideTypeMismatchReturnType,
message:
- """The return type of the method '${name}' is '${type}', which does not match the return type of the overridden method, '${type2}'.""",
+ """The return type of the method '${name}' is '${type}', which does not match the return type of the overridden method, '${type2}'.""" +
+ labeler.originMessages,
tip: """Change to a subtype of '${type2}'.""",
arguments: {'name': name, 'type': _type, 'type2': _type2});
}
@@ -7421,18 +7309,14 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsRedirectingFactoryIncompatibleTypeArgument(
DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeRedirectingFactoryIncompatibleTypeArgument,
- message: """The type '${type}' doesn't extend '${type2}'.""",
+ message: """The type '${type}' doesn't extend '${type2}'.""" +
+ labeler.originMessages,
tip: """Try using a different type as argument.""",
arguments: {'type': _type, 'type2': _type2});
}
@@ -7461,19 +7345,15 @@
String name, DartType _type, DartType _type2) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeRedirectingFactoryInvalidNamedParameterType,
message:
- """The type of the named parameter '${name}', '${type}' is not a subtype of the redirection target's corresponding named parameter type, '${type2}'.""",
+ """The type of the named parameter '${name}', '${type}' is not a subtype of the redirection target's corresponding named parameter type, '${type2}'.""" +
+ labeler.originMessages,
tip: """Try changing either the type of the parameter or the redirection target.""",
arguments: {'name': name, 'type': _type, 'type2': _type2});
}
@@ -7502,19 +7382,15 @@
String name, DartType _type, DartType _type2) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeRedirectingFactoryInvalidPositionalParameterType,
message:
- """The type of parameter '${name}', '${type}' is not a subtype of the redirection target's corresponding parameter type, '${type2}'.""",
+ """The type of parameter '${name}', '${type}' is not a subtype of the redirection target's corresponding parameter type, '${type2}'.""" +
+ labeler.originMessages,
tip: """Try changing either the type of the parameter or the redirection target.""",
arguments: {'name': name, 'type': _type, 'type2': _type2});
}
@@ -8209,19 +8085,15 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsSwitchExpressionNotAssignable(
DartType _type, DartType _type2) {
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
- String type2 = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
+ String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeSwitchExpressionNotAssignable,
message:
- """Type '${type}' of the switch expression isn't assignable to the type '${type2}' of this case expression.""",
+ """Type '${type}' of the switch expression isn't assignable to the type '${type2}' of this case expression.""" +
+ labeler.originMessages,
arguments: {'type': _type, 'type2': _type2});
}
@@ -8629,15 +8501,13 @@
Message _withArgumentsUndefinedGetter(String name, DartType _type) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ String type = typeParts.join();
return new Message(codeUndefinedGetter,
message:
- """The getter '${name}' isn't defined for the class '${type}'.""",
+ """The getter '${name}' isn't defined for the class '${type}'.""" +
+ labeler.originMessages,
tip:
"""Try correcting the name to the name of an existing getter, or defining a getter or field named '${name}'.""",
arguments: {'name': name, 'type': _type});
@@ -8666,15 +8536,13 @@
Message _withArgumentsUndefinedMethod(String name, DartType _type) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ String type = typeParts.join();
return new Message(codeUndefinedMethod,
message:
- """The method '${name}' isn't defined for the class '${type}'.""",
+ """The method '${name}' isn't defined for the class '${type}'.""" +
+ labeler.originMessages,
tip:
"""Try correcting the name to the name of an existing method, or defining a method named '${name}'.""",
arguments: {'name': name, 'type': _type});
@@ -8703,15 +8571,13 @@
Message _withArgumentsUndefinedSetter(String name, DartType _type) {
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
- NameSystem nameSystem = new NameSystem();
- StringBuffer buffer;
- buffer = new StringBuffer();
- new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
- String type = '$buffer';
-
+ DummyTypeLabeler labeler = new DummyTypeLabeler();
+ List<Object> typeParts = labeler.labelType(_type);
+ String type = typeParts.join();
return new Message(codeUndefinedSetter,
message:
- """The setter '${name}' isn't defined for the class '${type}'.""",
+ """The setter '${name}' isn't defined for the class '${type}'.""" +
+ labeler.originMessages,
tip:
"""Try correcting the name to the name of an existing setter, or defining a setter or field named '${name}'.""",
arguments: {'name': name, 'type': _type});
diff --git a/pkg/front_end/lib/src/fasta/kernel/dummy_type_labeler.dart b/pkg/front_end/lib/src/fasta/kernel/dummy_type_labeler.dart
new file mode 100644
index 0000000..d5685f3
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/dummy_type_labeler.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/ast.dart' show Constant, DartType;
+
+import 'package:kernel/text/ast_to_text.dart' show NameSystem, Printer;
+
+class DummyTypeLabeler {
+ NameSystem nameSystem = new NameSystem();
+
+ List<Object> labelType(DartType type) {
+ StringBuffer buffer = new StringBuffer();
+ new Printer(buffer, syntheticNames: nameSystem).writeNode(type);
+ return [buffer];
+ }
+
+ List<Object> labelConstant(Constant constant) {
+ StringBuffer buffer = new StringBuffer();
+ new Printer(buffer, syntheticNames: nameSystem).writeNode(constant);
+ return [buffer];
+ }
+
+ String get originMessages => "";
+}
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 3512791..4e3ae62a 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -125,14 +125,13 @@
template = template.trimRight();
var parameters = new Set<String>();
var conversions = new Set<String>();
+ var conversions2 = new Set<String>();
var arguments = new Set<String>();
- bool hasNameSystem = false;
- void ensureNameSystem() {
- if (hasNameSystem) return;
- conversions.add(r"""
-NameSystem nameSystem = new NameSystem();
-StringBuffer buffer;""");
- hasNameSystem = true;
+ bool hasLabeler = false;
+ void ensureLabeler() {
+ if (hasLabeler) return;
+ conversions.add("DummyTypeLabeler labeler = new DummyTypeLabeler();");
+ hasLabeler = true;
}
for (Match match in placeholderPattern.allMatches("$template${tip ?? ''}")) {
@@ -230,12 +229,10 @@
case "type2":
case "type3":
parameters.add("DartType _${name}");
- ensureNameSystem();
- conversions.add("""
-buffer = new StringBuffer();
-new Printer(buffer, syntheticNames: nameSystem).writeNode(_${name});
-String ${name} = '\$buffer';
-""");
+ ensureLabeler();
+ conversions
+ .add("List<Object> ${name}Parts = labeler.labelType(_${name});");
+ conversions2.add("String ${name} = ${name}Parts.join();");
arguments.add("'${name}': _${name}");
break;
@@ -271,15 +268,11 @@
case "constant":
parameters.add("Constant _constant");
- ensureNameSystem();
- conversions.add(r"""
-buffer = new StringBuffer();
-new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
-String constant = '$buffer';
-""");
-
+ ensureLabeler();
+ conversions.add(
+ "List<Object> ${name}Parts = labeler.labelConstant(_${name});");
+ conversions2.add("String ${name} = ${name}Parts.join();");
arguments.add("'constant': _constant");
-
break;
case "num1":
@@ -308,11 +301,13 @@
}
}
- String interpolate(String name, String text) {
+ conversions.addAll(conversions2);
+
+ String interpolate(String text) {
text = text
.replaceAll(r"$", r"\$")
.replaceAllMapped(placeholderPattern, (Match m) => "\${${m[1]}}");
- return "$name: \"\"\"$text\"\"\"";
+ return "\"\"\"$text\"\"\"";
}
List<String> codeArguments = <String>[];
@@ -364,9 +359,13 @@
templateArguments.add("withArguments: _withArguments$name");
List<String> messageArguments = <String>[];
- messageArguments.add(interpolate("message", template));
+ String message = interpolate(template);
+ if (hasLabeler) {
+ message += " + labeler.originMessages";
+ }
+ messageArguments.add("message: ${message}");
if (tip != null) {
- messageArguments.add(interpolate("tip", tip));
+ messageArguments.add("tip: ${interpolate(tip)}");
}
messageArguments.add("arguments: { ${arguments.join(', ')} }");