Tests for invalid Map literal type arguments resolution.
R=brianwilkerson@google.com, paulberry@google.com
Change-Id: I4e1e78b9c5497b1399a8a5ca3f600cdbbe86cf23
Reviewed-on: https://dart-review.googlesource.com/65029
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index 367a85e..408d787 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -43,20 +43,6 @@
@override
@failingTest
- test_expectedTwoMapTypeArguments_one() async {
- // Bad state: Found 2 argument types for 1 type arguments
- await super.test_expectedTwoMapTypeArguments_one();
- }
-
- @override
- @failingTest
- test_expectedTwoMapTypeArguments_three() async {
- // Bad state: Found 2 argument types for 3 type arguments
- await super.test_expectedTwoMapTypeArguments_three();
- }
-
- @override
- @failingTest
test_illegalAsyncGeneratorReturnType_function_nonStream() async {
// Expected 1 errors of type StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE, found 0
await super.test_illegalAsyncGeneratorReturnType_function_nonStream();
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 8e06650..fdfdd7c 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -44,6 +44,8 @@
FindNode findNode;
FindElement findElement;
+ ClassElement get boolElement => typeProvider.boolType.element;
+
ClassElement get doubleElement => typeProvider.doubleType.element;
InterfaceType get doubleType => typeProvider.doubleType;
@@ -4724,6 +4726,48 @@
}
}
+ test_mapLiteral_1() async {
+ addTestFile(r'''
+main() {
+ var v = <int>{};
+}
+''');
+ await resolveTestFile();
+ expect(result.errors, isNotEmpty);
+
+ var literal = findNode.mapLiteral('<int>{}');
+ assertType(literal, 'Map<dynamic, dynamic>');
+
+ var intRef = findNode.simple('int>{}');
+ assertElement(intRef, intElement);
+ assertType(intRef, 'int');
+ }
+
+ test_mapLiteral_3() async {
+ addTestFile(r'''
+main() {
+ var v = <bool, int, double>{};
+}
+''');
+ await resolveTestFile();
+ expect(result.errors, isNotEmpty);
+
+ var literal = findNode.mapLiteral('<bool, int, double>{}');
+ assertType(literal, 'Map<dynamic, dynamic>');
+
+ var boolRef = findNode.simple('bool, ');
+ assertElement(boolRef, boolElement);
+ assertType(boolRef, 'bool');
+
+ var intRef = findNode.simple('int, ');
+ assertElement(intRef, intElement);
+ assertType(intRef, 'int');
+
+ var doubleRef = findNode.simple('double>');
+ assertElement(doubleRef, doubleElement);
+ assertType(doubleRef, 'double');
+ }
+
test_method_namedParameters() async {
addTestFile(r'''
class C {
@@ -8558,6 +8602,10 @@
return _node(search).getAncestor((n) => n is ListLiteral);
}
+ MapLiteral mapLiteral(String search) {
+ return _node(search).getAncestor((n) => n is MapLiteral);
+ }
+
MethodInvocation methodInvocation(String search) {
return _node(search).getAncestor((n) => n is MethodInvocation);
}
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 ebef208..7f3e404 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -4297,16 +4297,6 @@
message: r"""List literal requires exactly one type argument.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeListLiteralTypeArgumentMismatch =
- messageListLiteralTypeArgumentMismatch;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageListLiteralTypeArgumentMismatch = const MessageCode(
- "ListLiteralTypeArgumentMismatch",
- severity: Severity.errorLegacyWarning,
- message: r"""Map literal requires two type arguments.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(Uri uri_)> templateLoadLibraryHidesMember = const Template<
Message Function(Uri uri_)>(
@@ -4390,6 +4380,18 @@
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeMapLiteralTypeArgumentMismatch =
+ messageMapLiteralTypeArgumentMismatch;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageMapLiteralTypeArgumentMismatch = const MessageCode(
+ "MapLiteralTypeArgumentMismatch",
+ analyzerCode: "EXPECTED_TWO_MAP_TYPE_ARGUMENTS",
+ dart2jsCode: "*fatal*",
+ severity: Severity.errorLegacyWarning,
+ message: r"""Map literal requires exactly two type arguments.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codeMemberWithSameNameAsClass =
messageMemberWithSameNameAsClass;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 67ea0c0..74a8d46 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -2128,7 +2128,7 @@
if (typeArguments != null) {
if (forest.getTypeCount(typeArguments) != 2) {
addProblem(
- fasta.messageListLiteralTypeArgumentMismatch,
+ fasta.messageMapLiteralTypeArgumentMismatch,
offsetForToken(leftBrace),
lengthOfSpan(leftBrace, leftBrace.endGroup));
} else {
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 43e7f0b..5d23994 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -215,9 +215,8 @@
LibraryDirectiveNotFirst/script2: Fail
LibraryDirectiveNotFirst/script3: Fail
ListLiteralTooManyTypeArguments/example: Fail
-ListLiteralTypeArgumentMismatch/analyzerCode: Fail
-ListLiteralTypeArgumentMismatch/example: Fail
LoadLibraryTakesNoArguments/example: Fail
+MapLiteralTypeArgumentMismatch/example: Fail
MemberWithSameNameAsClass/analyzerCode: Fail
MemberWithSameNameAsClass/example: Fail
MetadataTypeArguments/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 60f4061..ccacf893 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1223,9 +1223,11 @@
analyzerCode: EXPECTED_ONE_LIST_TYPE_ARGUMENTS
dart2jsCode: "*fatal*"
-ListLiteralTypeArgumentMismatch:
- template: "Map literal requires two type arguments."
+MapLiteralTypeArgumentMismatch:
+ template: "Map literal requires exactly two type arguments."
severity: ERROR_LEGACY_WARNING
+ analyzerCode: EXPECTED_TWO_MAP_TYPE_ARGUMENTS
+ dart2jsCode: "*fatal*"
LoadLibraryTakesNoArguments:
template: "'loadLibrary' takes no arguments."