Chromium Code Reviews| Index: pkg/analyzer/test/generated/resolver_test.dart |
| diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart |
| index 647f8f49b7fcc6d9e7603c90e662ac65aa7d7254..45d4b08dd931a4694ecbbee3dd26e4070f2082f0 100644 |
| --- a/pkg/analyzer/test/generated/resolver_test.dart |
| +++ b/pkg/analyzer/test/generated/resolver_test.dart |
| @@ -12972,6 +12972,77 @@ class C<T> { |
| expect(f.staticType.toString(), '<S>(S) → dynamic'); |
| } |
| + void test_genericMethod_override() { |
| + _resolveTestUnit(r''' |
| +class C { |
| + /*=T*/ f/*<T>*/(/*=T*/ x) => null; |
| +} |
| +class D extends C { |
| + /*=T*/ f/*<T>*/(/*=T*/ x) => null; // from D |
| +} |
| +'''); |
| + SimpleIdentifier f = |
| + _findIdentifier('f/*<T>*/(/*=T*/ x) => null; // from D'); |
| + MethodElementImpl e = f.staticElement; |
| + expect(e.typeParameters.toString(), '[T]'); |
| + expect(e.type.boundTypeParameters.toString(), '[T]'); |
| + expect(e.type.toString(), '<T>(T) → T'); |
| + |
| + FunctionType ft = e.type.instantiate([typeProvider.stringType]); |
| + expect(ft.toString(), '(String) → String'); |
| + } |
| + |
| + void test_genericMethod_override_bounds() { |
| + _resolveTestUnit(r''' |
| +class A {} |
| +class B extends A {} |
| +class C { |
| + /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; |
| +} |
| +class D extends C { |
| + /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; |
| +} |
| +'''); |
| + } |
| + |
| + void test_genericMethod_override_invalidIypeParamBounds() { |
|
Leaf
2015/12/09 22:02:29
InvalidIype -> InvalidType
Jennifer Messerly
2015/12/09 22:37:41
Done.
|
| + Source source = addSource(r''' |
| +class A {} |
| +class B extends A {} |
| +class C { |
| + /*=T*/ f/*<T extends A>*/(/*=T*/ x) => null; |
| +} |
| +class D extends C { |
| + /*=T*/ f/*<T extends B>*/(/*=T*/ x) => null; |
| +}'''); |
| + // TODO(jmesserly): this is modified code from assertErrors, which we can't |
| + // use directly because STRONG_MODE_* errors don't have working equality. |
| + List<AnalysisError> errors = analysisContext2.computeErrors(source); |
| + expect(errors.map((e) => e.errorCode.name), [ |
| + 'STRONG_MODE_INVALID_METHOD_OVERRIDE', |
| + 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETER_BOUND' |
| + ]); |
| + verify([source]); |
| + } |
| + |
| + void test_genericMethod_override_invalidTypeParamCount() { |
| + Source source = addSource(r''' |
| +class C { |
| + /*=T*/ f/*<T>*/(/*=T*/ x) => null; |
| +} |
| +class D extends C { |
| + /*=S*/ f/*<T, S>*/(/*=T*/ x) => null; |
| +}'''); |
| + // TODO(jmesserly): we can't use assertErrors because STRONG_MODE_* errors |
| + // from CodeChecker don't have working equality. |
| + List<AnalysisError> errors = analysisContext2.computeErrors(source); |
| + expect(errors.map((e) => e.errorCode.name), [ |
| + 'STRONG_MODE_INVALID_METHOD_OVERRIDE', |
| + 'INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS' |
| + ]); |
| + verify([source]); |
| + } |
| + |
| void test_pseudoGeneric_max_doubleDouble() { |
| String code = r''' |
| import 'dart:math'; |