| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library analyzer.test.generated.strong_mode_test; | 5 library analyzer.test.generated.strong_mode_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; | 10 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; |
| (...skipping 2188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2199 expect(ft.toString(), '(String) → String'); | 2199 expect(ft.toString(), '(String) → String'); |
| 2200 } | 2200 } |
| 2201 | 2201 |
| 2202 test_genericFunction_bounds() async { | 2202 test_genericFunction_bounds() async { |
| 2203 await resolveTestUnit(r'/*=T*/ f/*<T extends num>*/(/*=T*/ x) => null;'); | 2203 await resolveTestUnit(r'/*=T*/ f/*<T extends num>*/(/*=T*/ x) => null;'); |
| 2204 expectFunctionType('f', '<T extends num>(T) → T', | 2204 expectFunctionType('f', '<T extends num>(T) → T', |
| 2205 elementTypeParams: '[T extends num]', typeFormals: '[T extends num]'); | 2205 elementTypeParams: '[T extends num]', typeFormals: '[T extends num]'); |
| 2206 } | 2206 } |
| 2207 | 2207 |
| 2208 test_genericFunction_parameter() async { | 2208 test_genericFunction_parameter() async { |
| 2209 await resolveTestUnit(r''' | 2209 await resolveTestUnit( |
| 2210 r''' |
| 2210 void g(/*=T*/ f/*<T>*/(/*=T*/ x)) {} | 2211 void g(/*=T*/ f/*<T>*/(/*=T*/ x)) {} |
| 2211 '''); | 2212 ''', |
| 2213 noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed. |
| 2214 ); |
| 2212 expectFunctionType('f', '<T>(T) → T', | 2215 expectFunctionType('f', '<T>(T) → T', |
| 2213 elementTypeParams: '[T]', typeFormals: '[T]'); | 2216 elementTypeParams: '[T]', typeFormals: '[T]'); |
| 2214 SimpleIdentifier f = findIdentifier('f'); | 2217 SimpleIdentifier f = findIdentifier('f'); |
| 2215 ParameterElementImpl e = f.staticElement; | 2218 ParameterElementImpl e = f.staticElement; |
| 2216 FunctionType type = e.type; | 2219 FunctionType type = e.type; |
| 2217 FunctionType ft = type.instantiate([typeProvider.stringType]); | 2220 FunctionType ft = type.instantiate([typeProvider.stringType]); |
| 2218 expect(ft.toString(), '(String) → String'); | 2221 expect(ft.toString(), '(String) → String'); |
| 2219 } | 2222 } |
| 2220 | 2223 |
| 2221 test_genericFunction_static() async { | 2224 test_genericFunction_static() async { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2321 FunctionType ft = f.staticInvokeType; | 2324 FunctionType ft = f.staticInvokeType; |
| 2322 expect(ft.toString(), '(String) → List<int>'); | 2325 expect(ft.toString(), '(String) → List<int>'); |
| 2323 expect('${ft.typeArguments}/${ft.typeParameters}', '[String, int]/[E, T]'); | 2326 expect('${ft.typeArguments}/${ft.typeParameters}', '[String, int]/[E, T]'); |
| 2324 | 2327 |
| 2325 SimpleIdentifier x = findIdentifier('x'); | 2328 SimpleIdentifier x = findIdentifier('x'); |
| 2326 expect(x.staticType, | 2329 expect(x.staticType, |
| 2327 typeProvider.listType.instantiate([typeProvider.intType])); | 2330 typeProvider.listType.instantiate([typeProvider.intType])); |
| 2328 } | 2331 } |
| 2329 | 2332 |
| 2330 test_genericMethod_functionExpressionInvocation_explicit() async { | 2333 test_genericMethod_functionExpressionInvocation_explicit() async { |
| 2331 await resolveTestUnit(r''' | 2334 await resolveTestUnit( |
| 2335 r''' |
| 2332 class C<E> { | 2336 class C<E> { |
| 2333 /*=T*/ f/*<T>*/(/*=T*/ e) => null; | 2337 /*=T*/ f/*<T>*/(/*=T*/ e) => null; |
| 2334 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; | 2338 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; |
| 2335 static final h = g; | 2339 static final h = g; |
| 2336 } | 2340 } |
| 2337 | 2341 |
| 2338 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; | 2342 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; |
| 2339 var topG = topF; | 2343 var topG = topF; |
| 2340 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { | 2344 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { |
| 2341 var c = new C<int>(); | 2345 var c = new C<int>(); |
| 2342 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; | 2346 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; |
| 2343 | 2347 |
| 2344 var lambdaCall = (/*<E>*/(/*=E*/ e) => e)/*<int>*/(3); | 2348 var lambdaCall = (/*<E>*/(/*=E*/ e) => e)/*<int>*/(3); |
| 2345 var methodCall = (c.f)/*<int>*/(3); | 2349 var methodCall = (c.f)/*<int>*/(3); |
| 2346 var staticCall = (C.g)/*<int>*/(3); | 2350 var staticCall = (C.g)/*<int>*/(3); |
| 2347 var staticFieldCall = (C.h)/*<int>*/(3); | 2351 var staticFieldCall = (C.h)/*<int>*/(3); |
| 2348 var topFunCall = (topF)/*<int>*/(3); | 2352 var topFunCall = (topF)/*<int>*/(3); |
| 2349 var topFieldCall = (topG)/*<int>*/(3); | 2353 var topFieldCall = (topG)/*<int>*/(3); |
| 2350 var localCall = (lf)/*<int>*/(3); | 2354 var localCall = (lf)/*<int>*/(3); |
| 2351 var paramCall = (pf)/*<int>*/(3); | 2355 var paramCall = (pf)/*<int>*/(3); |
| 2352 } | 2356 } |
| 2353 '''); | 2357 ''', |
| 2358 noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed. |
| 2359 ); |
| 2354 expectIdentifierType('methodCall', "int"); | 2360 expectIdentifierType('methodCall', "int"); |
| 2355 expectIdentifierType('staticCall', "int"); | 2361 expectIdentifierType('staticCall', "int"); |
| 2356 expectIdentifierType('staticFieldCall', "int"); | 2362 expectIdentifierType('staticFieldCall', "int"); |
| 2357 expectIdentifierType('topFunCall', "int"); | 2363 expectIdentifierType('topFunCall', "int"); |
| 2358 expectIdentifierType('topFieldCall', "int"); | 2364 expectIdentifierType('topFieldCall', "int"); |
| 2359 expectIdentifierType('localCall', "int"); | 2365 expectIdentifierType('localCall', "int"); |
| 2360 expectIdentifierType('paramCall', "int"); | 2366 expectIdentifierType('paramCall', "int"); |
| 2361 expectIdentifierType('lambdaCall', "int"); | 2367 expectIdentifierType('lambdaCall', "int"); |
| 2362 } | 2368 } |
| 2363 | 2369 |
| 2364 test_genericMethod_functionExpressionInvocation_inferred() async { | 2370 test_genericMethod_functionExpressionInvocation_inferred() async { |
| 2365 await resolveTestUnit(r''' | 2371 await resolveTestUnit( |
| 2372 r''' |
| 2366 class C<E> { | 2373 class C<E> { |
| 2367 /*=T*/ f/*<T>*/(/*=T*/ e) => null; | 2374 /*=T*/ f/*<T>*/(/*=T*/ e) => null; |
| 2368 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; | 2375 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; |
| 2369 static final h = g; | 2376 static final h = g; |
| 2370 } | 2377 } |
| 2371 | 2378 |
| 2372 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; | 2379 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; |
| 2373 var topG = topF; | 2380 var topG = topF; |
| 2374 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { | 2381 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { |
| 2375 var c = new C<int>(); | 2382 var c = new C<int>(); |
| 2376 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; | 2383 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; |
| 2377 | 2384 |
| 2378 var lambdaCall = (/*<E>*/(/*=E*/ e) => e)(3); | 2385 var lambdaCall = (/*<E>*/(/*=E*/ e) => e)(3); |
| 2379 var methodCall = (c.f)(3); | 2386 var methodCall = (c.f)(3); |
| 2380 var staticCall = (C.g)(3); | 2387 var staticCall = (C.g)(3); |
| 2381 var staticFieldCall = (C.h)(3); | 2388 var staticFieldCall = (C.h)(3); |
| 2382 var topFunCall = (topF)(3); | 2389 var topFunCall = (topF)(3); |
| 2383 var topFieldCall = (topG)(3); | 2390 var topFieldCall = (topG)(3); |
| 2384 var localCall = (lf)(3); | 2391 var localCall = (lf)(3); |
| 2385 var paramCall = (pf)(3); | 2392 var paramCall = (pf)(3); |
| 2386 } | 2393 } |
| 2387 '''); | 2394 ''', |
| 2395 noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed. |
| 2396 ); |
| 2388 expectIdentifierType('methodCall', "int"); | 2397 expectIdentifierType('methodCall', "int"); |
| 2389 expectIdentifierType('staticCall', "int"); | 2398 expectIdentifierType('staticCall', "int"); |
| 2390 expectIdentifierType('staticFieldCall', "int"); | 2399 expectIdentifierType('staticFieldCall', "int"); |
| 2391 expectIdentifierType('topFunCall', "int"); | 2400 expectIdentifierType('topFunCall', "int"); |
| 2392 expectIdentifierType('topFieldCall', "int"); | 2401 expectIdentifierType('topFieldCall', "int"); |
| 2393 expectIdentifierType('localCall', "int"); | 2402 expectIdentifierType('localCall', "int"); |
| 2394 expectIdentifierType('paramCall', "int"); | 2403 expectIdentifierType('paramCall', "int"); |
| 2395 expectIdentifierType('lambdaCall', "int"); | 2404 expectIdentifierType('lambdaCall', "int"); |
| 2396 } | 2405 } |
| 2397 | 2406 |
| 2398 test_genericMethod_functionInvocation_explicit() async { | 2407 test_genericMethod_functionInvocation_explicit() async { |
| 2399 await resolveTestUnit(r''' | 2408 await resolveTestUnit( |
| 2409 r''' |
| 2400 class C<E> { | 2410 class C<E> { |
| 2401 /*=T*/ f/*<T>*/(/*=T*/ e) => null; | 2411 /*=T*/ f/*<T>*/(/*=T*/ e) => null; |
| 2402 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; | 2412 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; |
| 2403 static final h = g; | 2413 static final h = g; |
| 2404 } | 2414 } |
| 2405 | 2415 |
| 2406 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; | 2416 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; |
| 2407 var topG = topF; | 2417 var topG = topF; |
| 2408 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { | 2418 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { |
| 2409 var c = new C<int>(); | 2419 var c = new C<int>(); |
| 2410 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; | 2420 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; |
| 2411 var methodCall = c.f/*<int>*/(3); | 2421 var methodCall = c.f/*<int>*/(3); |
| 2412 var staticCall = C.g/*<int>*/(3); | 2422 var staticCall = C.g/*<int>*/(3); |
| 2413 var staticFieldCall = C.h/*<int>*/(3); | 2423 var staticFieldCall = C.h/*<int>*/(3); |
| 2414 var topFunCall = topF/*<int>*/(3); | 2424 var topFunCall = topF/*<int>*/(3); |
| 2415 var topFieldCall = topG/*<int>*/(3); | 2425 var topFieldCall = topG/*<int>*/(3); |
| 2416 var localCall = lf/*<int>*/(3); | 2426 var localCall = lf/*<int>*/(3); |
| 2417 var paramCall = pf/*<int>*/(3); | 2427 var paramCall = pf/*<int>*/(3); |
| 2418 } | 2428 } |
| 2419 '''); | 2429 ''', |
| 2430 noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed. |
| 2431 ); |
| 2420 expectIdentifierType('methodCall', "int"); | 2432 expectIdentifierType('methodCall', "int"); |
| 2421 expectIdentifierType('staticCall', "int"); | 2433 expectIdentifierType('staticCall', "int"); |
| 2422 expectIdentifierType('staticFieldCall', "int"); | 2434 expectIdentifierType('staticFieldCall', "int"); |
| 2423 expectIdentifierType('topFunCall', "int"); | 2435 expectIdentifierType('topFunCall', "int"); |
| 2424 expectIdentifierType('topFieldCall', "int"); | 2436 expectIdentifierType('topFieldCall', "int"); |
| 2425 expectIdentifierType('localCall', "int"); | 2437 expectIdentifierType('localCall', "int"); |
| 2426 expectIdentifierType('paramCall', "int"); | 2438 expectIdentifierType('paramCall', "int"); |
| 2427 } | 2439 } |
| 2428 | 2440 |
| 2429 test_genericMethod_functionInvocation_inferred() async { | 2441 test_genericMethod_functionInvocation_inferred() async { |
| 2430 await resolveTestUnit(r''' | 2442 await resolveTestUnit( |
| 2443 r''' |
| 2431 class C<E> { | 2444 class C<E> { |
| 2432 /*=T*/ f/*<T>*/(/*=T*/ e) => null; | 2445 /*=T*/ f/*<T>*/(/*=T*/ e) => null; |
| 2433 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; | 2446 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; |
| 2434 static final h = g; | 2447 static final h = g; |
| 2435 } | 2448 } |
| 2436 | 2449 |
| 2437 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; | 2450 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; |
| 2438 var topG = topF; | 2451 var topG = topF; |
| 2439 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { | 2452 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { |
| 2440 var c = new C<int>(); | 2453 var c = new C<int>(); |
| 2441 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; | 2454 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; |
| 2442 var methodCall = c.f(3); | 2455 var methodCall = c.f(3); |
| 2443 var staticCall = C.g(3); | 2456 var staticCall = C.g(3); |
| 2444 var staticFieldCall = C.h(3); | 2457 var staticFieldCall = C.h(3); |
| 2445 var topFunCall = topF(3); | 2458 var topFunCall = topF(3); |
| 2446 var topFieldCall = topG(3); | 2459 var topFieldCall = topG(3); |
| 2447 var localCall = lf(3); | 2460 var localCall = lf(3); |
| 2448 var paramCall = pf(3); | 2461 var paramCall = pf(3); |
| 2449 } | 2462 } |
| 2450 '''); | 2463 ''', |
| 2464 noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed. |
| 2465 ); |
| 2451 expectIdentifierType('methodCall', "int"); | 2466 expectIdentifierType('methodCall', "int"); |
| 2452 expectIdentifierType('staticCall', "int"); | 2467 expectIdentifierType('staticCall', "int"); |
| 2453 expectIdentifierType('staticFieldCall', "int"); | 2468 expectIdentifierType('staticFieldCall', "int"); |
| 2454 expectIdentifierType('topFunCall', "int"); | 2469 expectIdentifierType('topFunCall', "int"); |
| 2455 expectIdentifierType('topFieldCall', "int"); | 2470 expectIdentifierType('topFieldCall', "int"); |
| 2456 expectIdentifierType('localCall', "int"); | 2471 expectIdentifierType('localCall', "int"); |
| 2457 expectIdentifierType('paramCall', "int"); | 2472 expectIdentifierType('paramCall', "int"); |
| 2458 } | 2473 } |
| 2459 | 2474 |
| 2460 test_genericMethod_functionTypedParameter() async { | 2475 test_genericMethod_functionTypedParameter() async { |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2685 C toSpan(dynamic element) { | 2700 C toSpan(dynamic element) { |
| 2686 if (element is Iter) { | 2701 if (element is Iter) { |
| 2687 var y = element.map(toSpan); | 2702 var y = element.map(toSpan); |
| 2688 } | 2703 } |
| 2689 return null; | 2704 return null; |
| 2690 }'''); | 2705 }'''); |
| 2691 expectIdentifierType('y = ', 'List<C>', isNull); | 2706 expectIdentifierType('y = ', 'List<C>', isNull); |
| 2692 } | 2707 } |
| 2693 | 2708 |
| 2694 test_genericMethod_tearoff() async { | 2709 test_genericMethod_tearoff() async { |
| 2695 await resolveTestUnit(r''' | 2710 await resolveTestUnit( |
| 2711 r''' |
| 2696 class C<E> { | 2712 class C<E> { |
| 2697 /*=T*/ f/*<T>*/(E e) => null; | 2713 /*=T*/ f/*<T>*/(E e) => null; |
| 2698 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; | 2714 static /*=T*/ g/*<T>*/(/*=T*/ e) => null; |
| 2699 static final h = g; | 2715 static final h = g; |
| 2700 } | 2716 } |
| 2701 | 2717 |
| 2702 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; | 2718 /*=T*/ topF/*<T>*/(/*=T*/ e) => null; |
| 2703 var topG = topF; | 2719 var topG = topF; |
| 2704 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { | 2720 void test/*<S>*/(/*=T*/ pf/*<T>*/(/*=T*/ e)) { |
| 2705 var c = new C<int>(); | 2721 var c = new C<int>(); |
| 2706 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; | 2722 /*=T*/ lf/*<T>*/(/*=T*/ e) => null; |
| 2707 var methodTearOff = c.f; | 2723 var methodTearOff = c.f; |
| 2708 var staticTearOff = C.g; | 2724 var staticTearOff = C.g; |
| 2709 var staticFieldTearOff = C.h; | 2725 var staticFieldTearOff = C.h; |
| 2710 var topFunTearOff = topF; | 2726 var topFunTearOff = topF; |
| 2711 var topFieldTearOff = topG; | 2727 var topFieldTearOff = topG; |
| 2712 var localTearOff = lf; | 2728 var localTearOff = lf; |
| 2713 var paramTearOff = pf; | 2729 var paramTearOff = pf; |
| 2714 } | 2730 } |
| 2715 '''); | 2731 ''', |
| 2732 noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed. |
| 2733 ); |
| 2716 expectIdentifierType('methodTearOff', "<T>(int) → T"); | 2734 expectIdentifierType('methodTearOff', "<T>(int) → T"); |
| 2717 expectIdentifierType('staticTearOff', "<T>(T) → T"); | 2735 expectIdentifierType('staticTearOff', "<T>(T) → T"); |
| 2718 expectIdentifierType('staticFieldTearOff', "<T>(T) → T"); | 2736 expectIdentifierType('staticFieldTearOff', "<T>(T) → T"); |
| 2719 expectIdentifierType('topFunTearOff', "<T>(T) → T"); | 2737 expectIdentifierType('topFunTearOff', "<T>(T) → T"); |
| 2720 expectIdentifierType('topFieldTearOff', "<T>(T) → T"); | 2738 expectIdentifierType('topFieldTearOff', "<T>(T) → T"); |
| 2721 expectIdentifierType('localTearOff', "<T>(T) → T"); | 2739 expectIdentifierType('localTearOff', "<T>(T) → T"); |
| 2722 expectIdentifierType('paramTearOff', "<T>(T) → T"); | 2740 expectIdentifierType('paramTearOff', "<T>(T) → T"); |
| 2723 } | 2741 } |
| 2724 | 2742 |
| 2725 test_genericMethod_then() async { | 2743 test_genericMethod_then() async { |
| (...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3414 var v = x; | 3432 var v = x; |
| 3415 v; // marker | 3433 v; // marker |
| 3416 } | 3434 } |
| 3417 int x = 3; | 3435 int x = 3; |
| 3418 '''; | 3436 '''; |
| 3419 CompilationUnit unit = await resolveSource(code); | 3437 CompilationUnit unit = await resolveSource(code); |
| 3420 assertPropagatedAssignedType(code, unit, typeProvider.intType, null); | 3438 assertPropagatedAssignedType(code, unit, typeProvider.intType, null); |
| 3421 assertTypeOfMarkedExpression(code, unit, typeProvider.intType, null); | 3439 assertTypeOfMarkedExpression(code, unit, typeProvider.intType, null); |
| 3422 } | 3440 } |
| 3423 } | 3441 } |
| OLD | NEW |