Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1742)

Unified Diff: pkg/analyzer/test/generated/resolver_test.dart

Issue 1568643002: clean up generic methods in resolution (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/task/strong/checker.dart ('k') | pkg/analyzer/test/src/task/strong/checker_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 4a5c75754f3c061f3bf5fb1b58a9a458e5a069de..d7efebb59de1e0de3cdf4f943f309a2405fc215a 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -13021,20 +13021,6 @@ class StrongModeDownwardsInferenceTest extends ResolverTestCase {
*/
@reflectiveTest
class StrongModeStaticTypeAnalyzer2Test extends _StaticTypeAnalyzer2TestShared {
- void test_genericFunction_parameter() {
- _resolveTestUnit(r'''
-void g(/*=T*/ f/*<T>*/(/*=T*/ x)) {}
-''');
- SimpleIdentifier f = _findIdentifier('f');
- ParameterElementImpl e = f.staticElement;
- FunctionType type = e.type;
- expect(e.typeParameters.toString(), '[T]');
- expect(type.boundTypeParameters.toString(), '[T]');
- expect(type.toString(), '<T>(T) → T');
- FunctionType ft = type.instantiate([typeProvider.stringType]);
- expect(ft.toString(), '(String) → String');
- }
-
void fail_genericMethod_functionExpressionInvocation_explicit() {
_resolveTestUnit(r'''
class C<E> {
@@ -13097,37 +13083,6 @@ void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
expect(_findIdentifier('paramCall').staticType.toString(), "int");
}
- void fail_genericMethod_functionInvocation_explicit() {
- _resolveTestUnit(r'''
-class C<E> {
- /*=T*/ f/*<T>*/(/*=T*/ e) => null;
- static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
- static final h = g;
-}
-
-/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
-var topG = topF;
-void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
- var c = new C<int>();
- /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
- var methodCall = c.f/*<int>*/(3);
- var staticCall = C.g/*<int>*/(3);
- var staticFieldCall = C.h/*<int>*/(3);
- var topFunCall = topF/*<int>*/(3);
- var topFieldCall = topG/*<int>*/(3);
- var localCall = lf/*<int>*/(3);
- var paramCall = pf/*<int>*/(3);
-}
-''');
- expect(_findIdentifier('methodCall').staticType.toString(), "int");
- expect(_findIdentifier('staticCall').staticType.toString(), "int");
- expect(_findIdentifier('staticFieldCall').staticType.toString(), "int");
- expect(_findIdentifier('topFunCall').staticType.toString(), "int");
- expect(_findIdentifier('topFieldCall').staticType.toString(), "int");
- expect(_findIdentifier('localCall').staticType.toString(), "int");
- expect(_findIdentifier('paramCall').staticType.toString(), "int");
- }
-
void fail_genericMethod_functionInvocation_inferred() {
_resolveTestUnit(r'''
class C<E> {
@@ -13159,42 +13114,6 @@ void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
expect(_findIdentifier('paramCall').staticType.toString(), "int");
}
- void test_genericMethod_tearoff() {
- _resolveTestUnit(r'''
-class C<E> {
- /*=T*/ f/*<T>*/(E e) => null;
- static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
- static final h = g;
-}
-
-/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
-var topG = topF;
-void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
- var c = new C<int>();
- /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
- var methodTearOff = c.f;
- var staticTearOff = C.g;
- var staticFieldTearOff = C.h;
- var topFunTearOff = topF;
- var topFieldTearOff = topG;
- var localTearOff = lf;
- var paramTearOff = pf;
-}
-''');
- expect(
- _findIdentifier('methodTearOff').staticType.toString(), "<T>(int) → T");
- expect(
- _findIdentifier('staticTearOff').staticType.toString(), "<T>(T) → T");
- expect(_findIdentifier('staticFieldTearOff').staticType.toString(),
- "<T>(T) → T");
- expect(
- _findIdentifier('topFunTearOff').staticType.toString(), "<T>(T) → T");
- expect(
- _findIdentifier('topFieldTearOff').staticType.toString(), "<T>(T) → T");
- expect(_findIdentifier('localTearOff').staticType.toString(), "<T>(T) → T");
- expect(_findIdentifier('paramTearOff').staticType.toString(), "<T>(T) → T");
- }
-
void fail_genericMethod_tearoff_instantiated() {
_resolveTestUnit(r'''
class C<E> {
@@ -13277,7 +13196,7 @@ main() {
SimpleIdentifier f = _findIdentifier('f');
FunctionElementImpl e = f.staticElement;
expect(e.typeParameters.toString(), '[T]');
- expect(e.type.boundTypeParameters.toString(), '[T]');
+ expect(e.type.typeFormals.toString(), '[T]');
expect(e.type.typeParameters.toString(), '[]');
expect(e.type.toString(), '<T>(T) → T');
@@ -13290,11 +13209,25 @@ main() {
SimpleIdentifier f = _findIdentifier('f');
FunctionElementImpl e = f.staticElement;
expect(e.typeParameters.toString(), '[T extends num]');
- expect(e.type.boundTypeParameters.toString(), '[T extends num]');
+ expect(e.type.typeFormals.toString(), '[T extends num]');
expect(e.type.typeParameters.toString(), '[]');
expect(e.type.toString(), '<T extends num>(T) → T');
}
+ void test_genericFunction_parameter() {
+ _resolveTestUnit(r'''
+void g(/*=T*/ f/*<T>*/(/*=T*/ x)) {}
+''');
+ SimpleIdentifier f = _findIdentifier('f');
+ ParameterElementImpl e = f.staticElement;
+ FunctionType type = e.type;
+ expect(e.typeParameters.toString(), '[T]');
+ expect(type.boundTypeParameters.toString(), '[T]');
+ expect(type.toString(), '<T>(T) → T');
+ FunctionType ft = type.instantiate([typeProvider.stringType]);
+ expect(ft.toString(), '(String) → String');
+ }
+
void test_genericFunction_static() {
_resolveTestUnit(r'''
class C<E> {
@@ -13304,7 +13237,7 @@ class C<E> {
SimpleIdentifier f = _findIdentifier('f');
MethodElementImpl e = f.staticElement;
expect(e.typeParameters.toString(), '[T]');
- expect(e.type.boundTypeParameters.toString(), '[T]');
+ expect(e.type.typeFormals.toString(), '[T]');
// TODO(jmesserly): we could get rid of this {E/E} substitution, but it's
// probably harmless, as E won't be used in the function (error verifier
// checks this), and {E/E} is a no-op anyway.
@@ -13403,7 +13336,7 @@ main() {
SimpleIdentifier f = _findIdentifier('f');
MethodElementImpl e = f.staticElement;
expect(e.typeParameters.toString(), '[T]');
- expect(e.type.boundTypeParameters.toString(), '[T]');
+ expect(e.type.typeFormals.toString(), '[T]');
expect(e.type.typeParameters.toString(), '[E]');
expect(e.type.typeArguments.toString(), '[E]');
expect(e.type.toString(), '<T>(E) → List<T>');
@@ -13426,8 +13359,8 @@ main() {
var x = cOfString.f/*<int>*/('hi');
}
''');
- SimpleIdentifier f = _findIdentifier('f/*<int>*/');
- FunctionType ft = f.staticType;
+ MethodInvocation f = _findIdentifier('f/*<int>*/').parent;
+ FunctionType ft = f.staticInvokeType;
expect(ft.toString(), '(String) → List<int>');
expect('${ft.typeArguments}/${ft.typeParameters}', '[String, int]/[E, T]');
@@ -13436,6 +13369,37 @@ main() {
typeProvider.listType.substitute4([typeProvider.intType]));
}
+ void test_genericMethod_functionInvocation_explicit() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(/*=T*/ e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodCall = c.f/*<int>*/(3);
+ var staticCall = C.g/*<int>*/(3);
+ var staticFieldCall = C.h/*<int>*/(3);
+ var topFunCall = topF/*<int>*/(3);
+ var topFieldCall = topG/*<int>*/(3);
+ var localCall = lf/*<int>*/(3);
+ var paramCall = pf/*<int>*/(3);
+}
+''');
+ expect(_findIdentifier('methodCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticCall').staticType.toString(), "int");
+ expect(_findIdentifier('staticFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFunCall').staticType.toString(), "int");
+ expect(_findIdentifier('topFieldCall').staticType.toString(), "int");
+ expect(_findIdentifier('localCall').staticType.toString(), "int");
+ expect(_findIdentifier('paramCall').staticType.toString(), "int");
+ }
+
void test_genericMethod_functionTypedParameter() {
_resolveTestUnit(r'''
class C<E> {
@@ -13448,7 +13412,7 @@ main() {
SimpleIdentifier f = _findIdentifier('f');
MethodElementImpl e = f.staticElement;
expect(e.typeParameters.toString(), '[T]');
- expect(e.type.boundTypeParameters.toString(), '[T]');
+ expect(e.type.typeFormals.toString(), '[T]');
expect(e.type.typeParameters.toString(), '[E]');
expect(e.type.typeArguments.toString(), '[E]');
expect(e.type.toString(), '<T>((E) → T) → List<T>');
@@ -13475,10 +13439,14 @@ void foo() {
}''');
SimpleIdentifier map1 = _findIdentifier('map((e) => e);');
- expect(map1.staticType.toString(), '((dynamic) → dynamic) → dynamic');
+ MethodInvocation m1 = map1.parent;
+ expect(m1.staticInvokeType.toString(), '((dynamic) → dynamic) → dynamic');
+ expect(map1.staticType, isNull);
expect(map1.propagatedType, isNull);
SimpleIdentifier map2 = _findIdentifier('map((e) => 3);');
- expect(map2.staticType.toString(), '((dynamic) → int) → int');
+ MethodInvocation m2 = map2.parent;
+ expect(m2.staticInvokeType.toString(), '((dynamic) → int) → int');
+ expect(map2.staticType, isNull);
expect(map2.propagatedType, isNull);
}
@@ -13492,13 +13460,13 @@ class C<T> {
}
}
''');
- SimpleIdentifier f = _findIdentifier('f/*<int>*/(3);');
- expect(f.staticType.toString(), '(int) → S');
- FunctionType ft = f.staticType;
+ MethodInvocation f = _findIdentifier('f/*<int>*/(3);').parent;
+ expect(f.staticInvokeType.toString(), '(int) → S');
+ FunctionType ft = f.staticInvokeType;
expect('${ft.typeArguments}/${ft.typeParameters}', '[S, int]/[T, S]');
- f = _findIdentifier('f;');
- expect(f.staticType.toString(), '<S₀>(S₀) → S');
+ SimpleIdentifier f2 = _findIdentifier('f;');
+ expect(f2.staticType.toString(), '<S₀>(S₀) → S');
}
void test_genericMethod_nestedFunctions() {
@@ -13527,7 +13495,7 @@ class D extends C {
_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.typeFormals.toString(), '[T]');
expect(e.type.toString(), '<T>(T) → T');
FunctionType ft = e.type.instantiate([typeProvider.stringType]);
@@ -13606,6 +13574,42 @@ class D extends C {
verify([source]);
}
+ void test_genericMethod_tearoff() {
+ _resolveTestUnit(r'''
+class C<E> {
+ /*=T*/ f/*<T>*/(E e) => null;
+ static /*=T*/ g/*<T>*/(/*=T*/ e) => null;
+ static final h = g;
+}
+
+/*=T*/ topF/*<T>*/(/*=T*/ e) => null;
+var topG = topF;
+void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) {
+ var c = new C<int>();
+ /*=T*/ lf/*<T>*/(/*=T*/ e) => null;
+ var methodTearOff = c.f;
+ var staticTearOff = C.g;
+ var staticFieldTearOff = C.h;
+ var topFunTearOff = topF;
+ var topFieldTearOff = topG;
+ var localTearOff = lf;
+ var paramTearOff = pf;
+}
+''');
+ expect(
+ _findIdentifier('methodTearOff').staticType.toString(), "<T>(int) → T");
+ expect(
+ _findIdentifier('staticTearOff').staticType.toString(), "<T>(T) → T");
+ expect(_findIdentifier('staticFieldTearOff').staticType.toString(),
+ "<T>(T) → T");
+ expect(
+ _findIdentifier('topFunTearOff').staticType.toString(), "<T>(T) → T");
+ expect(
+ _findIdentifier('topFieldTearOff').staticType.toString(), "<T>(T) → T");
+ expect(_findIdentifier('localTearOff').staticType.toString(), "<T>(T) → T");
+ expect(_findIdentifier('paramTearOff').staticType.toString(), "<T>(T) → T");
+ }
+
void test_pseudoGeneric_max_doubleDouble() {
String code = r'''
import 'dart:math';
« no previous file with comments | « pkg/analyzer/lib/src/task/strong/checker.dart ('k') | pkg/analyzer/test/src/task/strong/checker_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698