Re-formulation of type bound violation error messages
Change-Id: I7f0b99c184b02f6910da054b877b5b5bee86f6bc
Reviewed-on: https://dart-review.googlesource.com/c/85346
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
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 a37f7a2..517aeae 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -4146,203 +4146,282 @@
const Template<
Message Function(
DartType _type,
+ DartType _type2,
+ String name,
String
- name)> templateIncorrectTypeArgument = const Template<
- Message Function(DartType _type, String name)>(
+ name2)> templateIncorrectTypeArgument = const Template<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>(
messageTemplate:
- r"""Type argument '#type' violates the corresponding type variable bound of '#name'.""",
+ r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'.""",
tipTemplate:
r"""Try changing type arguments so that they conform to the bounds.""",
withArguments: _withArgumentsIncorrectTypeArgument);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(DartType _type, String name)>
- codeIncorrectTypeArgument =
- const Code<Message Function(DartType _type, String name)>(
+const Code<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>
+ codeIncorrectTypeArgument = const Code<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>(
"IncorrectTypeArgument", templateIncorrectTypeArgument,
analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgument(DartType _type, String name) {
+Message _withArgumentsIncorrectTypeArgument(
+ DartType _type, DartType _type2, String name, String name2) {
TypeLabeler labeler = new TypeLabeler();
List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ if (name2.isEmpty) throw 'No name provided';
+ name2 = demangleMixinApplicationName(name2);
String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeIncorrectTypeArgument,
message:
- """Type argument '${type}' violates the corresponding type variable bound of '${name}'.""" +
+ """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}'.""" +
labeler.originMessages,
tip: """Try changing type arguments so that they conform to the bounds.""",
- arguments: {'type': _type, 'name': name});
+ arguments: {
+ 'type': _type,
+ 'type2': _type2,
+ 'name': name,
+ 'name2': name2
+ });
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
DartType _type,
+ DartType _type2,
+ String name,
String
- name)> templateIncorrectTypeArgumentInReturnType = const Template<
- Message Function(DartType _type, String name)>(
+ name2)> templateIncorrectTypeArgumentInReturnType = const Template<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>(
messageTemplate:
- r"""Type argument '#type' violates the corresponding type variable bound of '#name' in the return type.""",
+ r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type.""",
tipTemplate:
r"""Try changing type arguments so that they conform to the bounds.""",
withArguments: _withArgumentsIncorrectTypeArgumentInReturnType);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(DartType _type, String name)>
- codeIncorrectTypeArgumentInReturnType =
- const Code<Message Function(DartType _type, String name)>(
+const Code<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>
+ codeIncorrectTypeArgumentInReturnType = const Code<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>(
"IncorrectTypeArgumentInReturnType",
templateIncorrectTypeArgumentInReturnType,
analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIncorrectTypeArgumentInReturnType(
- DartType _type, String name) {
+ DartType _type, DartType _type2, String name, String name2) {
TypeLabeler labeler = new TypeLabeler();
List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ if (name2.isEmpty) throw 'No name provided';
+ name2 = demangleMixinApplicationName(name2);
String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeIncorrectTypeArgumentInReturnType,
message:
- """Type argument '${type}' violates the corresponding type variable bound of '${name}' in the return type.""" +
+ """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the return type.""" +
labeler.originMessages,
tip: """Try changing type arguments so that they conform to the bounds.""",
- arguments: {'type': _type, 'name': name});
+ arguments: {
+ 'type': _type,
+ 'type2': _type2,
+ 'name': name,
+ 'name2': name2
+ });
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
DartType _type,
+ DartType _type2,
String name,
String name2,
+ String name3,
String
- name3)> templateIncorrectTypeArgumentInSupertype = const Template<
- Message Function(
- DartType _type, String name, String name2, String name3)>(
+ name4)> templateIncorrectTypeArgumentInSupertype = const Template<
+ Message Function(DartType _type, DartType _type2, String name,
+ String name2, String name3, String name4)>(
messageTemplate:
- r"""Type argument '#type' violates the corresponding type variable bound of '#name' in the supertype '#name2' of class '#name3'.""",
+ r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
tipTemplate:
r"""Try changing type arguments so that they conform to the bounds.""",
withArguments: _withArgumentsIncorrectTypeArgumentInSupertype);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<
- Message Function(
- DartType _type, String name, String name2, String name3)>
+ Message Function(DartType _type, DartType _type2, String name,
+ String name2, String name3, String name4)>
codeIncorrectTypeArgumentInSupertype = const Code<
- Message Function(
- DartType _type, String name, String name2, String name3)>(
+ Message Function(DartType _type, DartType _type2, String name,
+ String name2, String name3, String name4)>(
"IncorrectTypeArgumentInSupertype",
templateIncorrectTypeArgumentInSupertype,
analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInSupertype(
- DartType _type, String name, String name2, String name3) {
+Message _withArgumentsIncorrectTypeArgumentInSupertype(DartType _type,
+ DartType _type2, String name, String name2, String name3, String name4) {
TypeLabeler labeler = new TypeLabeler();
List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
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);
+ if (name4.isEmpty) throw 'No name provided';
+ name4 = demangleMixinApplicationName(name4);
String type = typeParts.join();
+ String type2 = type2Parts.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}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
labeler.originMessages,
- tip: """Try changing type arguments so that they conform to the bounds.""",
- arguments: {'type': _type, 'name': name, 'name2': name2, 'name3': name3});
+ tip:
+ """Try changing type arguments so that they conform to the bounds.""",
+ arguments: {
+ 'type': _type,
+ 'type2': _type2,
+ 'name': name,
+ 'name2': name2,
+ 'name3': name3,
+ 'name4': name4
+ });
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
DartType _type,
+ DartType _type2,
String name,
String name2,
+ String name3,
String
- name3)> templateIncorrectTypeArgumentInSupertypeInferred = const Template<
- Message Function(DartType _type, String name, String name2,
- String name3)>(
+ name4)> templateIncorrectTypeArgumentInSupertypeInferred = const Template<
+ Message Function(
+ DartType _type,
+ DartType _type2,
+ String name,
+ String name2,
+ String name3,
+ String
+ name4)>(
messageTemplate:
- r"""Inferred type argument '#type' violates the corresponding type variable bound of '#name' in the supertype '#name2' of class '#name3'.""",
+ r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
tipTemplate:
r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
withArguments: _withArgumentsIncorrectTypeArgumentInSupertypeInferred);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<
- Message Function(
- DartType _type, String name, String name2, String name3)>
+ Message Function(DartType _type, DartType _type2, String name,
+ String name2, String name3, String name4)>
codeIncorrectTypeArgumentInSupertypeInferred = const Code<
- Message Function(
- DartType _type, String name, String name2, String name3)>(
+ Message Function(DartType _type, DartType _type2, String name,
+ String name2, String name3, String name4)>(
"IncorrectTypeArgumentInSupertypeInferred",
templateIncorrectTypeArgumentInSupertypeInferred,
analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInSupertypeInferred(
- DartType _type, String name, String name2, String name3) {
+Message _withArgumentsIncorrectTypeArgumentInSupertypeInferred(DartType _type,
+ DartType _type2, String name, String name2, String name3, String name4) {
TypeLabeler labeler = new TypeLabeler();
List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
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);
+ if (name4.isEmpty) throw 'No name provided';
+ name4 = demangleMixinApplicationName(name4);
String type = typeParts.join();
+ String type2 = type2Parts.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}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
labeler.originMessages,
- tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
- arguments: {'type': _type, 'name': name, 'name2': name2, 'name3': name3});
+ tip:
+ """Try specifying type arguments explicitly so that they conform to the bounds.""",
+ arguments: {
+ 'type': _type,
+ 'type2': _type2,
+ 'name': name,
+ 'name2': name2,
+ 'name3': name3,
+ 'name4': name4
+ });
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
DartType _type,
+ DartType _type2,
+ String name,
String
- name)> templateIncorrectTypeArgumentInferred = const Template<
- Message Function(DartType _type,
- String name)>(
+ name2)> templateIncorrectTypeArgumentInferred = const Template<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>(
messageTemplate:
- r"""Inferred type argument '#type' violates the corresponding type variable bound of '#name'.""",
+ r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'.""",
tipTemplate:
r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
withArguments: _withArgumentsIncorrectTypeArgumentInferred);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(DartType _type, String name)>
- codeIncorrectTypeArgumentInferred =
- const Code<Message Function(DartType _type, String name)>(
+const Code<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>
+ codeIncorrectTypeArgumentInferred = const Code<
+ Message Function(
+ DartType _type, DartType _type2, String name, String name2)>(
"IncorrectTypeArgumentInferred", templateIncorrectTypeArgumentInferred,
analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"]);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIncorrectTypeArgumentInferred(
- DartType _type, String name) {
+ DartType _type, DartType _type2, String name, String name2) {
TypeLabeler labeler = new TypeLabeler();
List<Object> typeParts = labeler.labelType(_type);
+ List<Object> type2Parts = labeler.labelType(_type2);
if (name.isEmpty) throw 'No name provided';
name = demangleMixinApplicationName(name);
+ if (name2.isEmpty) throw 'No name provided';
+ name2 = demangleMixinApplicationName(name2);
String type = typeParts.join();
+ String type2 = type2Parts.join();
return new Message(codeIncorrectTypeArgumentInferred,
message:
- """Inferred type argument '${type}' violates the corresponding type variable bound of '${name}'.""" +
+ """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}'.""" +
labeler.originMessages,
tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
- arguments: {'type': _type, 'name': name});
+ arguments: {
+ 'type': _type,
+ 'type2': _type2,
+ 'name': name,
+ 'name2': name2
+ });
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4353,7 +4432,7 @@
const MessageCode messageIncorrectTypeArgumentVariable = const MessageCode(
"IncorrectTypeArgumentVariable",
severity: Severity.context,
- message: r"""Bound of this variable is violated.""");
+ message: r"""This is the type variable whose bound isn't conformed to.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<Message Function(Uri uri_)> templateInferredPackageUri =
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index f59a18c..96511e2a4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -314,12 +314,16 @@
message =
templateIncorrectTypeArgumentInSupertypeInferred.withArguments(
argument,
+ typeParameter.bound,
+ typeParameter.name,
getGenericTypeName(issue.enclosingType),
supertype.classNode.name,
name);
} else {
message = templateIncorrectTypeArgumentInSupertype.withArguments(
argument,
+ typeParameter.bound,
+ typeParameter.name,
getGenericTypeName(issue.enclosingType),
supertype.classNode.name,
name);
@@ -358,7 +362,10 @@
typeParameter = null;
} else {
message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
+ argument,
+ typeParameter.bound,
+ typeParameter.name,
+ getGenericTypeName(issue.enclosingType));
}
library.reportTypeArgumentIssue(
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index d322972..15368bc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -1395,10 +1395,10 @@
assert(enclosingName != null);
if (issueInferred) {
message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, enclosingName);
+ argument, typeParameter.bound, typeParameter.name, enclosingName);
} else {
message = templateIncorrectTypeArgument.withArguments(
- argument, enclosingName);
+ argument, typeParameter.bound, typeParameter.name, enclosingName);
}
}
@@ -1471,7 +1471,10 @@
typeParameter = null;
} else {
message = templateIncorrectTypeArgumentInReturnType.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
+ argument,
+ typeParameter.bound,
+ typeParameter.name,
+ getGenericTypeName(issue.enclosingType));
}
reportTypeArgumentIssue(message, offset, typeParameter);
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 8efaefb..121cbcb 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -55,7 +55,7 @@
# `#unicode` a Unicode short identifier (U+xxxx). We use this to represent code
# units or code points.
#
-# `#name`, `#name2`, `#name3`: names (as strings).
+# `#name`, `#name2`, `#name3`, `#name4`: names (as strings).
#
# `#lexeme` a token. The token's `lexeme` property is used.
#
@@ -3223,7 +3223,7 @@
frontendInternal: true
IncorrectTypeArgument:
- template: "Type argument '#type' violates the corresponding type variable bound of '#name'."
+ template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'."
tip: "Try changing type arguments so that they conform to the bounds."
analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
script: >
@@ -3231,7 +3231,7 @@
main() { new C<String>(); }
IncorrectTypeArgumentInSupertype:
- template: "Type argument '#type' violates the corresponding type variable bound of '#name' in the supertype '#name2' of class '#name3'."
+ template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
tip: "Try changing type arguments so that they conform to the bounds."
analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
script: >
@@ -3239,7 +3239,7 @@
class B extends A<String> {}
IncorrectTypeArgumentInReturnType:
- template: "Type argument '#type' violates the corresponding type variable bound of '#name' in the return type."
+ template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type."
tip: "Try changing type arguments so that they conform to the bounds."
analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
script: >
@@ -3247,7 +3247,7 @@
A<String> foo() => null;
IncorrectTypeArgumentInferred:
- template: "Inferred type argument '#type' violates the corresponding type variable bound of '#name'."
+ template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'."
tip: "Try specifying type arguments explicitly so that they conform to the bounds."
analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
script: >
@@ -3255,7 +3255,7 @@
main() { foo("bar"); }
IncorrectTypeArgumentInSupertypeInferred:
- template: "Inferred type argument '#type' violates the corresponding type variable bound of '#name' in the supertype '#name2' of class '#name3'."
+ template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
tip: "Try specifying type arguments explicitly so that they conform to the bounds."
analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
script: >
@@ -3263,7 +3263,7 @@
class B extends A {}
IncorrectTypeArgumentVariable:
- template: "Bound of this variable is violated."
+ template: "This is the type variable whose bound isn't conformed to."
severity: CONTEXT
InferredPackageUri:
diff --git a/pkg/front_end/testcases/clone_function_type.dart.strong.expect b/pkg/front_end/testcases/clone_function_type.dart.strong.expect
index 8be93c0..ae0741e 100644
--- a/pkg/front_end/testcases/clone_function_type.dart.strong.expect
+++ b/pkg/front_end/testcases/clone_function_type.dart.strong.expect
@@ -24,71 +24,71 @@
// class Ef1<X extends Function({int})> {
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:86:7: Error: Type argument 'Function' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Jm2<Z> extends Object with Am2<Function, Z> {}
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// pkg/front_end/testcases/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
// Try changing type arguments so that they conform to the bounds.
// class Mm2<Z> = Object with Am2<Function(int), Z>;
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// pkg/front_end/testcases/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
// Try changing type arguments so that they conform to the bounds.
// class Nm2<Z> = Object with Am2<Function(int x), Z>;
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:114:7: Error: Type argument 'Function' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Um2'.
+// pkg/front_end/testcases/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Um2<Z> = Object with Am2<Function, Z>;
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// pkg/front_end/testcases/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
// ^
-// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
// ^
@@ -118,45 +118,45 @@
// class Ef1<X extends Function({int})> {
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:86:7: Error: Type argument 'Function' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Jm2<Z> extends Object with Am2<Function, Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// pkg/front_end/testcases/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
// Try changing type arguments so that they conform to the bounds.
// class Mm2<Z> = Object with Am2<Function(int), Z>;
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// pkg/front_end/testcases/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
// Try changing type arguments so that they conform to the bounds.
// class Nm2<Z> = Object with Am2<Function(int x), Z>;
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:114:7: Error: Type argument 'Function' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Um2'.
+// pkg/front_end/testcases/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Um2<Z> = Object with Am2<Function, Z>;
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// pkg/front_end/testcases/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
diff --git a/pkg/front_end/testcases/clone_function_type.dart.strong.transformed.expect b/pkg/front_end/testcases/clone_function_type.dart.strong.transformed.expect
index 960e80d..22d08e5 100644
--- a/pkg/front_end/testcases/clone_function_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/clone_function_type.dart.strong.transformed.expect
@@ -24,45 +24,45 @@
// class Ef1<X extends Function({int})> {
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:86:7: Error: Type argument 'Function' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Jm2<Z> extends Object with Am2<Function, Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// pkg/front_end/testcases/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// pkg/front_end/testcases/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
// Try changing type arguments so that they conform to the bounds.
// class Mm2<Z> = Object with Am2<Function(int), Z>;
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// pkg/front_end/testcases/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
// Try changing type arguments so that they conform to the bounds.
// class Nm2<Z> = Object with Am2<Function(int x), Z>;
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:114:7: Error: Type argument 'Function' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Um2'.
+// pkg/front_end/testcases/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Um2<Z> = Object with Am2<Function, Z>;
// ^
//
-// pkg/front_end/testcases/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' violates the corresponding type variable bound of 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// pkg/front_end/testcases/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
// - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
index 5bc9aed..b75af9f 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
@@ -1,9 +1,10 @@
Errors: {
- org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' violates the corresponding type variable bound of 'hasBound'.
+ org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' doesn't conform to the bound 'Bound' of the type variable 'T' on 'hasBound'.
+ - 'Bound' is from 'pkg/front_end/testcases/expression/main.dart'.
Try changing type arguments so that they conform to the bounds.
hasBound<T>()
^
- pkg/front_end/testcases/expression/main.dart:36:15: Context: Bound of this variable is violated.
+ pkg/front_end/testcases/expression/main.dart:36:15: Context: This is the type variable whose bound isn't conformed to.
void hasBound<T extends Bound>() {}
^
}
diff --git a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
index e2e460d..bb5b00a 100644
--- a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
@@ -1,9 +1,10 @@
Errors: {
- org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' violates the corresponding type variable bound of 'hasBound'.
+ org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' doesn't conform to the bound 'Bound' of the type variable 'T' on 'hasBound'.
+ - 'Bound' is from 'pkg/front_end/testcases/expression/main.dart'.
Try changing type arguments so that they conform to the bounds.
hasBound<T>()
^
- pkg/front_end/testcases/expression/main.dart:36:15: Context: Bound of this variable is violated.
+ pkg/front_end/testcases/expression/main.dart:36:15: Context: This is the type variable whose bound isn't conformed to.
void hasBound<T extends Bound>() {}
^
}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
index e17397c..be82a2e 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
@@ -1,33 +1,37 @@
// Formatted problems:
//
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:56: Error: Inferred type argument 'NotA' violates the corresponding type variable bound of 'C'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:56: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
// - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+// - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER*/ /*@typeArgs=NotA*/ C(myF);
// ^
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
// class C<T extends A> {
// ^
//
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:21:25: Error: Inferred type argument 'NotA' violates the corresponding type variable bound of 'C'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:21:25: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
// - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+// - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var /*@type=C<NotA>*/ x =
// ^
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
// class C<T extends A> {
// ^
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:56: Error: Inferred type argument 'NotA' violates the corresponding type variable bound of 'C'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:56: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
// - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+// - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER*/ /*@typeArgs=NotA*/ C(myF);
// ^
//
-// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:21:25: Error: Inferred type argument 'NotA' violates the corresponding type variable bound of 'C'.
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:21:25: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
// - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+// - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var /*@type=C<NotA>*/ x =
// ^
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
index 8655066..ae1f9cc 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
@@ -1,32 +1,32 @@
// Formatted problems:
//
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' violates the corresponding type variable bound of 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' doesn't conform to the bound 'Clonable<T>' of the type variable 'T' on 'Pair'.
// - 'Clonable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
// ^
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:12: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:12: Context: This is the type variable whose bound isn't conformed to.
// class Pair<T extends Clonable<T>, U extends Clonable<U>> {
// ^
//
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' violates the corresponding type variable bound of 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' doesn't conform to the bound 'Clonable<U>' of the type variable 'U' on 'Pair'.
// - 'Clonable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
// ^
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:35: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:35: Context: This is the type variable whose bound isn't conformed to.
// class Pair<T extends Clonable<T>, U extends Clonable<U>> {
// ^
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' violates the corresponding type variable bound of 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' doesn't conform to the bound 'Clonable<T>' of the type variable 'T' on 'Pair'.
// - 'Clonable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
// ^
//
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' violates the corresponding type variable bound of 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' doesn't conform to the bound 'Clonable<U>' of the type variable 'U' on 'Pair'.
// - 'Clonable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
index 7474adb..b56a3a6 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.transformed.expect
@@ -1,12 +1,12 @@
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' violates the corresponding type variable bound of 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' doesn't conform to the bound 'Clonable<T>' of the type variable 'T' on 'Pair'.
// - 'Clonable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
// ^
//
-// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' violates the corresponding type variable bound of 'Pair'.
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Inferred type argument 'Clonable<dynamic>' doesn't conform to the bound 'Clonable<U>' of the type variable 'U' on 'Pair'.
// - 'Clonable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
index 089353f..1a9cd62 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
@@ -1,23 +1,23 @@
// Formatted problems:
//
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:63: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:63: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// dynamic c = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(x, y);
// ^
//
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:77: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:77: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var /*@type=dynamic*/ d = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(
// ^
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:63: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:63: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// dynamic c = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(x, y);
// ^
//
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:77: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:77: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var /*@type=dynamic*/ d = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(
// ^
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
index b259dbf..77c4e5f 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
@@ -1,11 +1,11 @@
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:63: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:63: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// dynamic c = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(x, y);
// ^
//
-// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:77: Error: Inferred type argument 'dynamic' violates the corresponding type variable bound of 'max'.
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:77: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var /*@type=dynamic*/ d = /*error:COULD_NOT_INFER*/ /*@typeArgs=dynamic*/ max(
// ^
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
index 89b7165..63d06e7 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
@@ -1,13 +1,13 @@
// Formatted problems:
//
-// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:77: Error: Inferred type argument 'int' violates the corresponding type variable bound of 'Foo<dart.core::String>.method'.
+// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:77: Error: Inferred type argument 'int' doesn't conform to the bound 'String' of the type variable 'U' on 'Foo<dart.core::String>.method'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// . /*error:COULD_NOT_INFER*/ /*@typeArgs=int*/ /*@target=Foo::method*/ method(
// ^
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:77: Error: Inferred type argument 'int' violates the corresponding type variable bound of 'Foo<dart.core::String>.method'.
+// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:77: Error: Inferred type argument 'int' doesn't conform to the bound 'String' of the type variable 'U' on 'Foo<dart.core::String>.method'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// . /*error:COULD_NOT_INFER*/ /*@typeArgs=int*/ /*@target=Foo::method*/ method(
// ^
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
index bf6e571..fb8fecd 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.expect
@@ -1,17 +1,17 @@
// Formatted problems:
//
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' violates the corresponding type variable bound of 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
// - 'Comparable' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class A extends M1 with M0 {}
// ^
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
// class M0<X, Y extends Comparable<Y>> extends I<X> {}
// ^
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' violates the corresponding type variable bound of 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
// - 'Comparable' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class A extends M1 with M0 {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect
index 2a70803..70df06b 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.strong.transformed.expect
@@ -1,6 +1,6 @@
// Unhandled errors:
//
-// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' violates the corresponding type variable bound of 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
// - 'Comparable' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class A extends M1 with M0 {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
index 59b9974..e284a0c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
@@ -1,17 +1,17 @@
// Formatted problems:
//
-// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' violates the corresponding type variable bound of 'B'.
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
// - 'Comparable' is from 'dart:core'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var y = new B();
// ^
-// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:9:9: Context: Bound of this variable is violated.
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:9:9: Context: This is the type variable whose bound isn't conformed to.
// class B<T extends Comparable<T>> {}
// ^
// Unhandled errors:
//
-// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' violates the corresponding type variable bound of 'B'.
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
// - 'Comparable' is from 'dart:core'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var y = new B();
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
index 5ab78ad..59eda90 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.transformed.expect
@@ -1,6 +1,6 @@
// Unhandled errors:
//
-// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' violates the corresponding type variable bound of 'B'.
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
// - 'Comparable' is from 'dart:core'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// var y = new B();
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
index 50d1978..4dbf4e5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.expect
@@ -5,7 +5,7 @@
// class Hest<X extends LinkedListEntry> {}
// ^
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Type argument 'LinkedListEntry<dynamic>' violates the corresponding type variable bound of 'LinkedListEntry'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Type argument 'LinkedListEntry<dynamic>' doesn't conform to the bound 'LinkedListEntry<E>' of the type variable 'E' on 'LinkedListEntry'.
// - 'LinkedListEntry' is from 'dart:collection'.
// Try changing type arguments so that they conform to the bounds.
// class Hest<X extends LinkedListEntry> {}
@@ -18,7 +18,7 @@
// class Hest<X extends LinkedListEntry> {}
// ^
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Type argument 'LinkedListEntry<dynamic>' violates the corresponding type variable bound of 'LinkedListEntry'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Type argument 'LinkedListEntry<dynamic>' doesn't conform to the bound 'LinkedListEntry<E>' of the type variable 'E' on 'LinkedListEntry'.
// - 'LinkedListEntry' is from 'dart:collection'.
// Try changing type arguments so that they conform to the bounds.
// class Hest<X extends LinkedListEntry> {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
index b4ca83e..5e791e7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
// class Hest<X extends LinkedListEntry> {}
// ^
//
-// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Type argument 'LinkedListEntry<dynamic>' violates the corresponding type variable bound of 'LinkedListEntry'.
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Type argument 'LinkedListEntry<dynamic>' doesn't conform to the bound 'LinkedListEntry<E>' of the type variable 'E' on 'LinkedListEntry'.
// - 'LinkedListEntry' is from 'dart:collection'.
// Try changing type arguments so that they conform to the bounds.
// class Hest<X extends LinkedListEntry> {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index bc2d651..d06543e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -5,14 +5,14 @@
// this.f<U>(1.5);
// ^
//
-// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'num' violates the corresponding type variable bound of 'C<dart.core::int>.g1'.
+// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'U' on 'C<dart.core::int>.g1'.
// Try changing type arguments so that they conform to the bounds.
// new C<int>().g1<num>();
// ^
// Unhandled errors:
//
-// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'num' violates the corresponding type variable bound of 'C<dart.core::int>.g1'.
+// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'U' on 'C<dart.core::int>.g1'.
// Try changing type arguments so that they conform to the bounds.
// new C<int>().g1<num>();
// ^
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
index a2d72d2..1b238c2 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
@@ -1,6 +1,6 @@
// Unhandled errors:
//
-// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'num' violates the corresponding type variable bound of 'C<dart.core::int>.g1'.
+// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'U' on 'C<dart.core::int>.g1'.
// Try changing type arguments so that they conform to the bounds.
// new C<int>().g1<num>();
// ^
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 64580b3..ccbae0a 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -195,6 +195,13 @@
conversions.add("name3 = demangleMixinApplicationName(name3);");
break;
+ case "name4":
+ parameters.add("String name4");
+ conversions.add("if (name4.isEmpty) throw 'No name provided';");
+ arguments.add("'name4': name4");
+ conversions.add("name4 = demangleMixinApplicationName(name4);");
+ break;
+
case "lexeme":
parameters.add("Token token");
conversions.add("String lexeme = token.lexeme;");