| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 members_test; | 5 library members_test; |
| 6 | 6 |
| 7 import 'package:expect/expect.dart'; | 7 import 'package:expect/expect.dart'; |
| 8 import "package:async_helper/async_helper.dart"; | 8 import "package:async_helper/async_helper.dart"; |
| 9 import 'type_test_helper.dart'; | 9 import 'type_test_helper.dart'; |
| 10 import 'package:compiler/src/dart_types.dart'; | 10 import 'package:compiler/src/dart_types.dart'; |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 type: int_, functionType: env.functionType(int_, [])); | 212 type: int_, functionType: env.functionType(int_, [])); |
| 213 checkMember(Object_, 'noSuchMethod', | 213 checkMember(Object_, 'noSuchMethod', |
| 214 functionType: env.functionType(dynamic_, [Invocation_])); | 214 functionType: env.functionType(dynamic_, [Invocation_])); |
| 215 checkMember(Object_, 'runtimeType', | 215 checkMember(Object_, 'runtimeType', |
| 216 isGetter: true, | 216 isGetter: true, |
| 217 type: Type_, functionType: env.functionType(Type_, [])); | 217 type: Type_, functionType: env.functionType(Type_, [])); |
| 218 checkMember(Object_, 'toString', | 218 checkMember(Object_, 'toString', |
| 219 functionType: env.functionType(String_, [])); | 219 functionType: env.functionType(String_, [])); |
| 220 | 220 |
| 221 InterfaceType A = env['A']; | 221 InterfaceType A = env['A']; |
| 222 MembersCreator.computeAllClassMembers(env.compiler, A.element); | 222 MembersCreator.computeAllClassMembers(env.resolution, A.element); |
| 223 | 223 |
| 224 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-static declared*/, | 224 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-static declared*/, |
| 225 interfaceMembers: true); | 225 interfaceMembers: true); |
| 226 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-abstract declared*/ + | 226 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-abstract declared*/ + |
| 227 3 /* abstract declared */, | 227 3 /* abstract declared */, |
| 228 interfaceMembers: false); | 228 interfaceMembers: false); |
| 229 | 229 |
| 230 checkMember(A, '==', inheritedFrom: Object_); | 230 checkMember(A, '==', inheritedFrom: Object_); |
| 231 checkMember(A, 'hashCode', inheritedFrom: Object_); | 231 checkMember(A, 'hashCode', inheritedFrom: Object_); |
| 232 checkMember(A, 'noSuchMethod', inheritedFrom: Object_); | 232 checkMember(A, 'noSuchMethod', inheritedFrom: Object_); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 257 functionType: env.functionType(dynamic_, [dynamic_])); | 257 functionType: env.functionType(dynamic_, [dynamic_])); |
| 258 | 258 |
| 259 checkMember(A, 'method', functionType: env.functionType(dynamic_, [])); | 259 checkMember(A, 'method', functionType: env.functionType(dynamic_, [])); |
| 260 checkMember(A, 'abstractMethod', | 260 checkMember(A, 'abstractMethod', |
| 261 functionType: env.functionType(dynamic_, [])); | 261 functionType: env.functionType(dynamic_, [])); |
| 262 checkMember(A, 'staticMethod', | 262 checkMember(A, 'staticMethod', |
| 263 checkType: CHECK_CLASS, | 263 checkType: CHECK_CLASS, |
| 264 isStatic: true, functionType: env.functionType(dynamic_, [])); | 264 isStatic: true, functionType: env.functionType(dynamic_, [])); |
| 265 | 265 |
| 266 ClassElement B = env.getElement('B'); | 266 ClassElement B = env.getElement('B'); |
| 267 MembersCreator.computeAllClassMembers(env.compiler, B); | 267 MembersCreator.computeAllClassMembers(env.resolution, B); |
| 268 InterfaceType B_this = B.thisType; | 268 InterfaceType B_this = B.thisType; |
| 269 TypeVariableType B_T = B_this.typeArguments.first; | 269 TypeVariableType B_T = B_this.typeArguments.first; |
| 270 checkMemberCount(B_this, 4 /*inherited*/ + 4 /*non-static declared*/, | 270 checkMemberCount(B_this, 4 /*inherited*/ + 4 /*non-static declared*/, |
| 271 interfaceMembers: true); | 271 interfaceMembers: true); |
| 272 checkMemberCount(B_this, 4 /*inherited*/ + 5 /*declared*/, | 272 checkMemberCount(B_this, 4 /*inherited*/ + 5 /*declared*/, |
| 273 interfaceMembers: false); | 273 interfaceMembers: false); |
| 274 | 274 |
| 275 checkMember(B_this, '==', inheritedFrom: Object_); | 275 checkMember(B_this, '==', inheritedFrom: Object_); |
| 276 checkMember(B_this, 'hashCode', inheritedFrom: Object_); | 276 checkMember(B_this, 'hashCode', inheritedFrom: Object_); |
| 277 checkMember(B_this, 'noSuchMethod', inheritedFrom: Object_); | 277 checkMember(B_this, 'noSuchMethod', inheritedFrom: Object_); |
| 278 checkMember(B_this, 'runtimeType', inheritedFrom: Object_); | 278 checkMember(B_this, 'runtimeType', inheritedFrom: Object_); |
| 279 | 279 |
| 280 checkMember(B_this, 'field', isGetter: true, | 280 checkMember(B_this, 'field', isGetter: true, |
| 281 type: B_T, functionType: env.functionType(B_T, [])); | 281 type: B_T, functionType: env.functionType(B_T, [])); |
| 282 checkMember(B_this, 'field', isSetter: true, | 282 checkMember(B_this, 'field', isSetter: true, |
| 283 type: B_T, functionType: env.functionType(void_, [B_T])); | 283 type: B_T, functionType: env.functionType(void_, [B_T])); |
| 284 checkMember(B_this, 'method', functionType: env.functionType(void_, [B_T])); | 284 checkMember(B_this, 'method', functionType: env.functionType(void_, [B_T])); |
| 285 checkMember(B_this, 'staticMethod', | 285 checkMember(B_this, 'staticMethod', |
| 286 checkType: CHECK_CLASS, | 286 checkType: CHECK_CLASS, |
| 287 isStatic: true, functionType: env.functionType(dynamic_, [])); | 287 isStatic: true, functionType: env.functionType(dynamic_, [])); |
| 288 checkMember(B_this, 'toString', | 288 checkMember(B_this, 'toString', |
| 289 functionType: env.functionType(dynamic_, [], | 289 functionType: env.functionType(dynamic_, [], |
| 290 optionalParameters: [B_T])); | 290 optionalParameters: [B_T])); |
| 291 | 291 |
| 292 ClassElement C = env.getElement('C'); | 292 ClassElement C = env.getElement('C'); |
| 293 MembersCreator.computeAllClassMembers(env.compiler, C); | 293 MembersCreator.computeAllClassMembers(env.resolution, C); |
| 294 InterfaceType C_this = C.thisType; | 294 InterfaceType C_this = C.thisType; |
| 295 TypeVariableType C_S = C_this.typeArguments.first; | 295 TypeVariableType C_S = C_this.typeArguments.first; |
| 296 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: true); | 296 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: true); |
| 297 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: false); | 297 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: false); |
| 298 InterfaceType B_S = instantiate(B, [C_S]); | 298 InterfaceType B_S = instantiate(B, [C_S]); |
| 299 | 299 |
| 300 checkMember(C_this, '==', inheritedFrom: Object_); | 300 checkMember(C_this, '==', inheritedFrom: Object_); |
| 301 checkMember(C_this, 'hashCode', inheritedFrom: Object_); | 301 checkMember(C_this, 'hashCode', inheritedFrom: Object_); |
| 302 checkMember(C_this, 'noSuchMethod', inheritedFrom: Object_); | 302 checkMember(C_this, 'noSuchMethod', inheritedFrom: Object_); |
| 303 checkMember(C_this, 'runtimeType', inheritedFrom: Object_); | 303 checkMember(C_this, 'runtimeType', inheritedFrom: Object_); |
| 304 | 304 |
| 305 checkMember(C_this, 'field', isGetter: true, | 305 checkMember(C_this, 'field', isGetter: true, |
| 306 declarer: B_S, | 306 declarer: B_S, |
| 307 type: C_S, functionType: env.functionType(C_S, [])); | 307 type: C_S, functionType: env.functionType(C_S, [])); |
| 308 checkMember(C_this, 'field', isSetter: true, | 308 checkMember(C_this, 'field', isSetter: true, |
| 309 declarer: B_S, | 309 declarer: B_S, |
| 310 type: C_S, functionType: env.functionType(void_, [C_S])); | 310 type: C_S, functionType: env.functionType(void_, [C_S])); |
| 311 checkMember(C_this, 'method', | 311 checkMember(C_this, 'method', |
| 312 declarer: B_S, | 312 declarer: B_S, |
| 313 functionType: env.functionType(void_, [C_S])); | 313 functionType: env.functionType(void_, [C_S])); |
| 314 checkMember(C_this, 'toString', | 314 checkMember(C_this, 'toString', |
| 315 declarer: B_S, | 315 declarer: B_S, |
| 316 functionType: env.functionType(dynamic_, [], | 316 functionType: env.functionType(dynamic_, [], |
| 317 optionalParameters: [C_S])); | 317 optionalParameters: [C_S])); |
| 318 | 318 |
| 319 InterfaceType D = env['D']; | 319 InterfaceType D = env['D']; |
| 320 MembersCreator.computeAllClassMembers(env.compiler, D.element); | 320 MembersCreator.computeAllClassMembers(env.resolution, D.element); |
| 321 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: true); | 321 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: true); |
| 322 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: false); | 322 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: false); |
| 323 InterfaceType B_int = instantiate(B, [int_]); | 323 InterfaceType B_int = instantiate(B, [int_]); |
| 324 | 324 |
| 325 checkMember(D, '==', inheritedFrom: Object_); | 325 checkMember(D, '==', inheritedFrom: Object_); |
| 326 checkMember(D, 'hashCode', inheritedFrom: Object_); | 326 checkMember(D, 'hashCode', inheritedFrom: Object_); |
| 327 checkMember(D, 'noSuchMethod', inheritedFrom: Object_); | 327 checkMember(D, 'noSuchMethod', inheritedFrom: Object_); |
| 328 checkMember(D, 'runtimeType', inheritedFrom: Object_); | 328 checkMember(D, 'runtimeType', inheritedFrom: Object_); |
| 329 | 329 |
| 330 checkMember(D, 'field', isGetter: true, | 330 checkMember(D, 'field', isGetter: true, |
| 331 declarer: B_int, | 331 declarer: B_int, |
| 332 type: int_, functionType: env.functionType(int_, [])); | 332 type: int_, functionType: env.functionType(int_, [])); |
| 333 checkMember(D, 'field', isSetter: true, | 333 checkMember(D, 'field', isSetter: true, |
| 334 declarer: B_int, | 334 declarer: B_int, |
| 335 type: int_, functionType: env.functionType(void_, [int_])); | 335 type: int_, functionType: env.functionType(void_, [int_])); |
| 336 checkMember(D, 'method', | 336 checkMember(D, 'method', |
| 337 declarer: B_int, | 337 declarer: B_int, |
| 338 functionType: env.functionType(void_, [int_])); | 338 functionType: env.functionType(void_, [int_])); |
| 339 checkMember(D, 'toString', | 339 checkMember(D, 'toString', |
| 340 declarer: B_int, | 340 declarer: B_int, |
| 341 functionType: env.functionType(dynamic_, [], | 341 functionType: env.functionType(dynamic_, [], |
| 342 optionalParameters: [int_])); | 342 optionalParameters: [int_])); |
| 343 | 343 |
| 344 InterfaceType E = env['E']; | 344 InterfaceType E = env['E']; |
| 345 MembersCreator.computeAllClassMembers(env.compiler, E.element); | 345 MembersCreator.computeAllClassMembers(env.resolution, E.element); |
| 346 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: true); | 346 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: true); |
| 347 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: false); | 347 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: false); |
| 348 | 348 |
| 349 checkMember(E, '==', inheritedFrom: Object_); | 349 checkMember(E, '==', inheritedFrom: Object_); |
| 350 checkMember(E, 'hashCode', inheritedFrom: Object_); | 350 checkMember(E, 'hashCode', inheritedFrom: Object_); |
| 351 checkMember(E, 'noSuchMethod', inheritedFrom: Object_); | 351 checkMember(E, 'noSuchMethod', inheritedFrom: Object_); |
| 352 checkMember(E, 'runtimeType', inheritedFrom: Object_); | 352 checkMember(E, 'runtimeType', inheritedFrom: Object_); |
| 353 | 353 |
| 354 checkMember(E, 'field', isGetter: true, | 354 checkMember(E, 'field', isGetter: true, |
| 355 declarer: B_int, | 355 declarer: B_int, |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 VoidType void_ = env['void']; | 418 VoidType void_ = env['void']; |
| 419 InterfaceType num_ = env['num']; | 419 InterfaceType num_ = env['num']; |
| 420 InterfaceType int_ = env['int']; | 420 InterfaceType int_ = env['int']; |
| 421 | 421 |
| 422 InterfaceType A = env['A']; | 422 InterfaceType A = env['A']; |
| 423 InterfaceType B = env['B']; | 423 InterfaceType B = env['B']; |
| 424 InterfaceType C = env['C']; | 424 InterfaceType C = env['C']; |
| 425 InterfaceType D = env['D']; | 425 InterfaceType D = env['D']; |
| 426 | 426 |
| 427 // Ensure that members have been computed on all classes. | 427 // Ensure that members have been computed on all classes. |
| 428 MembersCreator.computeAllClassMembers(env.compiler, D.element); | 428 MembersCreator.computeAllClassMembers(env.resolution, D.element); |
| 429 | 429 |
| 430 // A: num method1() | 430 // A: num method1() |
| 431 // B: int method1() | 431 // B: int method1() |
| 432 // D: dynamic method1() -- synthesized from A and B. | 432 // D: dynamic method1() -- synthesized from A and B. |
| 433 checkMember(D, 'method1', | 433 checkMember(D, 'method1', |
| 434 synthesizedFrom: [A, B], | 434 synthesizedFrom: [A, B], |
| 435 functionType: env.functionType(dynamic_ , []), | 435 functionType: env.functionType(dynamic_ , []), |
| 436 checkType: NO_CLASS_MEMBER); | 436 checkType: NO_CLASS_MEMBER); |
| 437 | 437 |
| 438 // A: void method2() | 438 // A: void method2() |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 DynamicType dynamic_ = env['dynamic']; | 586 DynamicType dynamic_ = env['dynamic']; |
| 587 VoidType void_ = env['void']; | 587 VoidType void_ = env['void']; |
| 588 InterfaceType num_ = env['num']; | 588 InterfaceType num_ = env['num']; |
| 589 InterfaceType int_ = env['int']; | 589 InterfaceType int_ = env['int']; |
| 590 | 590 |
| 591 InterfaceType A = env['A']; | 591 InterfaceType A = env['A']; |
| 592 InterfaceType B = env['B']; | 592 InterfaceType B = env['B']; |
| 593 InterfaceType C = env['C']; | 593 InterfaceType C = env['C']; |
| 594 | 594 |
| 595 // Ensure that members have been computed on all classes. | 595 // Ensure that members have been computed on all classes. |
| 596 MembersCreator.computeAllClassMembers(env.compiler, C.element); | 596 MembersCreator.computeAllClassMembers(env.resolution, C.element); |
| 597 | 597 |
| 598 // A: method1() | 598 // A: method1() |
| 599 // B: method1() | 599 // B: method1() |
| 600 // C class: method1() -- inherited from A. | 600 // C class: method1() -- inherited from A. |
| 601 // C interface: dynamic method1() -- synthesized from A and B. | 601 // C interface: dynamic method1() -- synthesized from A and B. |
| 602 MemberSignature interfaceMember = | 602 MemberSignature interfaceMember = |
| 603 checkMember(C, 'method1', checkType: CHECK_INTERFACE, | 603 checkMember(C, 'method1', checkType: CHECK_INTERFACE, |
| 604 synthesizedFrom: [A, B], | 604 synthesizedFrom: [A, B], |
| 605 functionType: env.functionType(dynamic_ , [])); | 605 functionType: env.functionType(dynamic_ , [])); |
| 606 MemberSignature classMember = | 606 MemberSignature classMember = |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 ClassElement A = env.getElement('A'); | 647 ClassElement A = env.getElement('A'); |
| 648 ClassElement B = env.getElement('B'); | 648 ClassElement B = env.getElement('B'); |
| 649 ClassElement C = env.getElement('C'); | 649 ClassElement C = env.getElement('C'); |
| 650 InterfaceType C_this = C.thisType; | 650 InterfaceType C_this = C.thisType; |
| 651 TypeVariableType C_U = C_this.typeArguments[0]; | 651 TypeVariableType C_U = C_this.typeArguments[0]; |
| 652 TypeVariableType C_V = C_this.typeArguments[1]; | 652 TypeVariableType C_V = C_this.typeArguments[1]; |
| 653 InterfaceType A_U = instantiate(A, [C_U]); | 653 InterfaceType A_U = instantiate(A, [C_U]); |
| 654 InterfaceType B_V = instantiate(B, [C_V]); | 654 InterfaceType B_V = instantiate(B, [C_V]); |
| 655 | 655 |
| 656 // Ensure that members have been computed on all classes. | 656 // Ensure that members have been computed on all classes. |
| 657 MembersCreator.computeAllClassMembers(env.compiler, C); | 657 MembersCreator.computeAllClassMembers(env.resolution, C); |
| 658 | 658 |
| 659 // A: method1() | 659 // A: method1() |
| 660 // B: method1() | 660 // B: method1() |
| 661 // C class: method1() -- inherited from A. | 661 // C class: method1() -- inherited from A. |
| 662 // C interface: dynamic method1() -- synthesized from A and B. | 662 // C interface: dynamic method1() -- synthesized from A and B. |
| 663 MemberSignature interfaceMember = | 663 MemberSignature interfaceMember = |
| 664 checkMember(C_this, 'method1', checkType: CHECK_INTERFACE, | 664 checkMember(C_this, 'method1', checkType: CHECK_INTERFACE, |
| 665 synthesizedFrom: [A_U, B_V], | 665 synthesizedFrom: [A_U, B_V], |
| 666 functionType: env.functionType(dynamic_ , [])); | 666 functionType: env.functionType(dynamic_ , [])); |
| 667 MemberSignature classMember = | 667 MemberSignature classMember = |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 DynamicType dynamic_ = env['dynamic']; | 718 DynamicType dynamic_ = env['dynamic']; |
| 719 VoidType void_ = env['void']; | 719 VoidType void_ = env['void']; |
| 720 InterfaceType num_ = env['num']; | 720 InterfaceType num_ = env['num']; |
| 721 InterfaceType int_ = env['int']; | 721 InterfaceType int_ = env['int']; |
| 722 | 722 |
| 723 InterfaceType A = env['A']; | 723 InterfaceType A = env['A']; |
| 724 InterfaceType B = env['B']; | 724 InterfaceType B = env['B']; |
| 725 InterfaceType C = env['C']; | 725 InterfaceType C = env['C']; |
| 726 | 726 |
| 727 // Ensure that members have been computed on all classes. | 727 // Ensure that members have been computed on all classes. |
| 728 MembersCreator.computeAllClassMembers(env.compiler, C.element); | 728 MembersCreator.computeAllClassMembers(env.resolution, C.element); |
| 729 | 729 |
| 730 checkMember(C, 'm', checkType: NO_CLASS_MEMBER, | 730 checkMember(C, 'm', checkType: NO_CLASS_MEMBER, |
| 731 inheritedFrom: A, | 731 inheritedFrom: A, |
| 732 functionType: env.functionType(dynamic_ , [])); | 732 functionType: env.functionType(dynamic_ , [])); |
| 733 })); | 733 })); |
| 734 } | 734 } |
| OLD | NEW |