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 <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index ef983c1..124183c 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -8179,51 +8179,20 @@
}
DartType type = null;
if (element is ClassElement) {
+ _setElement(typeName, element);
type = element.type;
- // In non-strong mode `FutureOr<T>` 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<TypeAnnotation> 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<Element> 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 1434544..95b7019 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
@@ -294,6 +294,12 @@
@override
@failingTest
+ test_wrongNumberOfTypeArguments_typeParameter() async {
+ await super.test_wrongNumberOfTypeArguments_typeParameter();
+ }
+
+ @override
+ @failingTest
test_yield_async_to_basic_type() async {
await super.test_yield_async_to_basic_type();
}
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 af2af48..21a69fe 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 @@
]);
}
+ test_wrongNumberOfTypeArguments_class_tooFew() async {
+ await assertErrorsInCode(r'''
+class A<E, F> {}
+A<A> a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ }
+
+ test_wrongNumberOfTypeArguments_class_tooMany() async {
+ await assertErrorsInCode(r'''
+class A<E> {}
+A<A, A> a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+ }
+
test_wrongNumberOfTypeArguments_classAlias() async {
await assertErrorsInCode(r'''
class A {}
@@ -2178,16 +2190,18 @@
[StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
}
- test_wrongNumberOfTypeArguments_tooFew() async {
+ test_wrongNumberOfTypeArguments_dynamic() async {
await assertErrorsInCode(r'''
-class A<E, F> {}
-A<A> a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+dynamic<int> v;
+''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
}
- test_wrongNumberOfTypeArguments_tooMany() async {
+ test_wrongNumberOfTypeArguments_typeParameter() async {
await assertErrorsInCode(r'''
-class A<E> {}
-A<A, A> a = null;''', [StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS]);
+class C<T> {
+ T<int> 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 e1eb205..a8426c0 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -404,7 +404,6 @@
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 @@
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 d8454b6..ab809ec 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -26,7 +26,6 @@
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_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