From 04e2ada09b31fa2fc95e0dce3f8775640dddaa42 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Sun, 26 Aug 2018 03:42:31 +0000 Subject: [PATCH] Report StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS for dynamic and type parmaeters. R=brianwilkerson@google.com, paulberry@google.com Bug: https://github.com/dart-lang/sdk/issues/28813 Change-Id: Iae43c0bb913bfd06fa09ddeacd6fdb8f81eccf9a Reviewed-on: https://dart-review.googlesource.com/71423 Reviewed-by: Paul Berry Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- pkg/analyzer/lib/src/generated/resolver.dart | 37 ++----------------- .../static_type_warning_code_kernel_test.dart | 6 +++ .../static_type_warning_code_test.dart | 26 ++++++++++--- tests/language_2/language_2_analyzer.status | 5 --- tests/language_2/language_2_dartdevc.status | 5 --- 5 files changed, 29 insertions(+), 50 deletions(-) diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart index ef983c1855c..124183cacdd 100644 --- a/pkg/analyzer/lib/src/generated/resolver.dart +++ b/pkg/analyzer/lib/src/generated/resolver.dart @@ -8179,51 +8179,20 @@ class TypeNameResolver { } DartType type = null; if (element is ClassElement) { + _setElement(typeName, element); type = element.type; - // In non-strong mode `FutureOr` is treated as `dynamic` - if (!typeSystem.isStrong && type.isDartAsyncFutureOr) { - type = dynamicType; - _setElement(typeName, type.element); - typeName.staticType = type; - node.type = type; - if (argumentList != null) { - NodeList arguments = argumentList.arguments; - if (arguments.length != 1) { - reportErrorForNode(_getInvalidTypeParametersErrorCode(node), node, - [typeName.name, 1, arguments.length]); - } - } - return; - } + } else if (element == DynamicElementImpl.instance) { _setElement(typeName, element); - } else if (element is TypeDefiningElement && - element.kind == ElementKind.DYNAMIC) { -// if (argumentList != null) { -// // Type parameters cannot have type arguments. -// // TODO(mfairhurst) Report this error. -// resolver.reportError(ResolverErrorCode.?, keyType); -// } - _setElement(typeName, element); - typeName.staticType = element.type; - node.type = element.type; - return; + type = DynamicTypeImpl.instance; } else if (element is FunctionTypeAliasElement) { _setElement(typeName, element); type = element.type; } else if (element is TypeParameterElement) { _setElement(typeName, element); type = element.type; -// if (argumentList != null) { -// // Type parameters cannot have type arguments. -// // TODO(brianwilkerson) Report this error. -// // resolver.reportError(ResolverErrorCode.?, keyType); -// } } else if (element is MultiplyDefinedElement) { List elements = element.conflictingElements; type = _getTypeWhenMultiplyDefined(elements); - if (type != null) { - node.type = type; - } } else { // The name does not represent a type. RedirectingConstructorKind redirectingConstructorKind; 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 143454417fa..95b70198a66 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 @@ -292,6 +292,12 @@ class StaticTypeWarningCodeTest_Kernel await super.test_undefinedSuperMethod(); } + @override + @failingTest + test_wrongNumberOfTypeArguments_typeParameter() async { + await super.test_wrongNumberOfTypeArguments_typeParameter(); + } + @override @failingTest test_yield_async_to_basic_type() async { diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart index af2af48c715..21a69feb5cb 100644 --- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart +++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart @@ -2170,6 +2170,18 @@ class B extends A { ]); } + test_wrongNumberOfTypeArguments_class_tooFew() async { + await assertErrorsInCode(r''' +class A {} +A a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]); + } + + test_wrongNumberOfTypeArguments_class_tooMany() async { + await assertErrorsInCode(r''' +class A {} +A a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]); + } + test_wrongNumberOfTypeArguments_classAlias() async { await assertErrorsInCode(r''' class A {} @@ -2178,16 +2190,18 @@ class B = A with M;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]); } - test_wrongNumberOfTypeArguments_tooFew() async { + test_wrongNumberOfTypeArguments_dynamic() async { await assertErrorsInCode(r''' -class A {} -A a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]); +dynamic v; +''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]); } - test_wrongNumberOfTypeArguments_tooMany() async { + test_wrongNumberOfTypeArguments_typeParameter() async { await assertErrorsInCode(r''' -class A {} -A a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]); +class C { + T f; +} +''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]); } test_wrongNumberOfTypeArguments_typeTest_tooFew() async { diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status index e1eb205c586..a8426c01cbf 100644 --- a/tests/language_2/language_2_analyzer.status +++ b/tests/language_2/language_2_analyzer.status @@ -404,7 +404,6 @@ accessor_conflict_import_prefixed_test: CompileTimeError # Issue 25626 accessor_conflict_import_test: CompileTimeError # Issue 25626 additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568 built_in_identifier_prefix_test: CompileTimeError -built_in_identifier_type_annotation_test/dynamic-gen: MissingCompileTimeError # Issue 28813 cascaded_forwarding_stubs_test: CompileTimeError check_member_static_test/01: CompileTimeError config_import_corelib_test: CompileTimeError @@ -444,10 +443,6 @@ index_assign_operator_infer_return_type_test: StaticWarning initializing_formal_final_test: MissingCompileTimeError interceptor6_test: CompileTimeError interface_test/00: MissingCompileTimeError -invalid_type_argument_count_test/01: MissingCompileTimeError -invalid_type_argument_count_test/02: MissingCompileTimeError -invalid_type_argument_count_test/03: MissingCompileTimeError -invalid_type_argument_count_test/04: MissingCompileTimeError issue13673_test: StaticWarning # Issue 31925 issue31596_implement_covariant_test: CompileTimeError issue31596_override_test/01: CompileTimeError diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status index d8454b6865b..ab809ecfe45 100644 --- a/tests/language_2/language_2_dartdevc.status +++ b/tests/language_2/language_2_dartdevc.status @@ -26,7 +26,6 @@ bug32372_test: RuntimeError built_in_identifier_prefix_test: CompileTimeError built_in_identifier_type_annotation_test/dynamic-funarg: RuntimeError # Issue 28816 built_in_identifier_type_annotation_test/dynamic-funret: RuntimeError # Issue 28816 -built_in_identifier_type_annotation_test/dynamic-gen: MissingCompileTimeError # Issue 28816 built_in_identifier_type_annotation_test/dynamic-list: RuntimeError # Issue 28816 cascaded_forwarding_stubs_generic_test: RuntimeError cascaded_forwarding_stubs_test: CompileTimeError @@ -84,10 +83,6 @@ instantiate_tearoff_after_contravariance_check_test: RuntimeError instantiate_tearoff_of_call_test: RuntimeError interface_test/00: MissingCompileTimeError internal_library_test/01: MissingCompileTimeError # Issue 29920 -invalid_type_argument_count_test/01: MissingCompileTimeError -invalid_type_argument_count_test/02: MissingCompileTimeError -invalid_type_argument_count_test/03: MissingCompileTimeError -invalid_type_argument_count_test/04: MissingCompileTimeError issue31596_implement_covariant_test: CompileTimeError issue31596_override_test/01: CompileTimeError issue31596_override_test/02: CompileTimeError