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 367a85e29fb..408d78722ca 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 @@ -41,20 +41,6 @@ class StaticTypeWarningCodeTest_Kernel await super.test_assert_message_suppresses_type_promotion(); } - @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 { 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 8e0665007fd..fdfdd7cd3e3 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 @@ class AnalysisDriverResolutionTest extends BaseAnalysisDriverTest { 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 @@ void main() { } } + test_mapLiteral_1() async { + addTestFile(r''' +main() { + var v = {}; +} +'''); + await resolveTestFile(); + expect(result.errors, isNotEmpty); + + var literal = findNode.mapLiteral('{}'); + assertType(literal, 'Map'); + + var intRef = findNode.simple('int>{}'); + assertElement(intRef, intElement); + assertType(intRef, 'int'); + } + + test_mapLiteral_3() async { + addTestFile(r''' +main() { + var v = {}; +} +'''); + await resolveTestFile(); + expect(result.errors, isNotEmpty); + + var literal = findNode.mapLiteral('{}'); + assertType(literal, 'Map'); + + 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 @@ class FindNode { 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 ebef208a354..7f3e4048c67 100644 --- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart +++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart @@ -4296,16 +4296,6 @@ const MessageCode messageListLiteralTooManyTypeArguments = const MessageCode( severity: Severity.errorLegacyWarning, message: r"""List literal requires exactly one type argument."""); -// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. -const Code 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< @@ -4389,6 +4379,18 @@ Message _withArgumentsLocalDefinitionHidesImport(String name, Uri uri_) { arguments: {'name': name, 'uri': uri_}); } +// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. +const Code 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 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 67ea0c0f9aa..74a8d46ad55 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 @@ abstract class BodyBuilder extends ScopeListener 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 43e7f0b43c4..5d23994c050 100644 --- a/pkg/front_end/messages.status +++ b/pkg/front_end/messages.status @@ -215,9 +215,8 @@ InvalidVoid/script2: Fail 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 60f4061d352..ccacf893bec 100644 --- a/pkg/front_end/messages.yaml +++ b/pkg/front_end/messages.yaml @@ -1223,9 +1223,11 @@ ListLiteralTooManyTypeArguments: 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."