| Index: pkg/analyzer/test/generated/strong_mode_test.dart
|
| diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
|
| index 89f75d53d953ebbba2cae6afd82c0355bba92fc3..43609863fe76d2ce2fa0e85adf671d24cb01f17e 100644
|
| --- a/pkg/analyzer/test/generated/strong_mode_test.dart
|
| +++ b/pkg/analyzer/test/generated/strong_mode_test.dart
|
| @@ -3144,58 +3144,125 @@ class C<T> {
|
| expectStaticInvokeType('m();', '() → T');
|
| }
|
|
|
| - test_notInstantiatedBound_direct_class_class() async {
|
| + test_notInstantiatedBound_error_class_argument() async {
|
| String code = r'''
|
| -class A<T extends int> {}
|
| +class A<K, V extends List<K>> {}
|
| class C<T extends A> {}
|
| ''';
|
| await resolveTestUnit(code, noErrors: false);
|
| assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| }
|
|
|
| - test_notInstantiatedBound_direct_class_typedef() async {
|
| - // Check that if the bound of a class is an uninstantiated typedef
|
| - // we emit an error
|
| + test_notInstantiatedBound_error_class_argument2() async {
|
| String code = r'''
|
| -typedef void F<T extends int>();
|
| -class C<T extends F> {}
|
| +class A<K, V extends List<List<K>>> {}
|
| +class C<T extends A> {}
|
| ''';
|
| await resolveTestUnit(code, noErrors: false);
|
| assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| }
|
|
|
| - test_notInstantiatedBound_direct_typedef_class() async {
|
| - // Check that if the bound of a typeded is an uninstantiated class
|
| - // we emit an error
|
| + test_notInstantiatedBound_error_class_direct() async {
|
| String code = r'''
|
| -class C<T extends int> {}
|
| -typedef void F<T extends C>();
|
| +class A<K, V extends K> {}
|
| +class C<T extends A> {}
|
| +''';
|
| + await resolveTestUnit(code, noErrors: false);
|
| + assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| + }
|
| +
|
| + test_notInstantiatedBound_error_class_indirect() async {
|
| + String code = r'''
|
| +class A<K, V extends K> {}
|
| +class C<T extends List<A>> {}
|
| ''';
|
| await resolveTestUnit(code, noErrors: false);
|
| assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| }
|
|
|
| - test_notInstantiatedBound_indirect_class_class() async {
|
| + test_notInstantiatedBound_error_typedef_argument() async {
|
| + String code = r'''
|
| +class A<K, V extends List<K>> {}
|
| +typedef void F<T extends A>();
|
| +''';
|
| + await resolveTestUnit(code, noErrors: false);
|
| + assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| + }
|
| +
|
| + test_notInstantiatedBound_error_typedef_argument2() async {
|
| + String code = r'''
|
| +class A<K, V extends List<List<K>>> {}
|
| +typedef void F<T extends A>();
|
| +''';
|
| + await resolveTestUnit(code, noErrors: false);
|
| + assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| + }
|
| +
|
| + test_notInstantiatedBound_error_typedef_direct() async {
|
| + String code = r'''
|
| +class A<K, V extends K> {}
|
| +typedef void F<T extends A>();
|
| +''';
|
| + await resolveTestUnit(code, noErrors: false);
|
| + assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| + }
|
| +
|
| + test_notInstantiatedBound_ok_class() async {
|
| + String code = r'''
|
| +class A<T extends int> {}
|
| +class C1<T extends A> {}
|
| +class C2<T extends List<A>> {}
|
| +''';
|
| + await resolveTestUnit(code);
|
| + assertNoErrors(testSource);
|
| + }
|
| +
|
| + test_notInstantiatedBound_ok_class_class2() async {
|
| + String code = r'''
|
| +class A<T> {}
|
| +class C<T extends A<int>> {}
|
| +class D<T extends C> {}
|
| +''';
|
| + await resolveTestUnit(code);
|
| + assertNoErrors(testSource);
|
| + }
|
| +
|
| + test_notInstantiatedBound_ok_class_class3() async {
|
| String code = r'''
|
| class A<T> {}
|
| class B<T extends int> {}
|
| class C<T extends A<B>> {}
|
| ''';
|
| - await resolveTestUnit(code, noErrors: false);
|
| - assertErrors(testSource, [StrongModeCode.NOT_INSTANTIATED_BOUND]);
|
| + await resolveTestUnit(code);
|
| + assertNoErrors(testSource);
|
| }
|
|
|
| - test_notInstantiatedBound_indirect_class_class2() async {
|
| + test_notInstantiatedBound_ok_class_class4() async {
|
| String code = r'''
|
| class A<K, V> {}
|
| class B<T extends int> {}
|
| class C<T extends A<B, B>> {}
|
| ''';
|
| - await resolveTestUnit(code, noErrors: false);
|
| - assertErrors(testSource, [
|
| - StrongModeCode.NOT_INSTANTIATED_BOUND,
|
| - StrongModeCode.NOT_INSTANTIATED_BOUND
|
| - ]);
|
| + await resolveTestUnit(code);
|
| + assertNoErrors(testSource);
|
| + }
|
| +
|
| + test_notInstantiatedBound_ok_class_typedef() async {
|
| + String code = r'''
|
| +typedef void F<T extends int>();
|
| +class C<T extends F> {}
|
| +''';
|
| + await resolveTestUnit(code);
|
| + assertNoErrors(testSource);
|
| + }
|
| +
|
| + test_notInstantiatedBound_ok_typedef_class() async {
|
| + String code = r'''
|
| +class C<T extends int> {}
|
| +typedef void F<T extends C>();
|
| +''';
|
| + await resolveTestUnit(code);
|
| + assertNoErrors(testSource);
|
| }
|
|
|
| test_objectMethodOnFunctions_Anonymous() async {
|
|
|