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

Side by Side Diff: tests/compiler/dart2js/members_test.dart

Issue 2603263002: Prefix resolution_types with Resolution. (Closed)
Patch Set: Rebased Created 3 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 unified diff | Download patch
OLDNEW
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/elements/resolution_types.dart'; 10 import 'package:compiler/src/elements/resolution_types.dart';
11 import "package:compiler/src/elements/elements.dart" 11 import "package:compiler/src/elements/elements.dart"
12 show Element, ClassElement, MemberSignature, Name, PublicName, Member; 12 show Element, ClassElement, MemberSignature, Name, PublicName, Member;
13 import "package:compiler/src/resolution/class_members.dart" 13 import "package:compiler/src/resolution/class_members.dart"
14 show MembersCreator, DeclaredMember, ErroneousMember, SyntheticMember; 14 show MembersCreator, DeclaredMember, ErroneousMember, SyntheticMember;
15 15
16 void main() { 16 void main() {
17 testClassMembers(); 17 testClassMembers();
18 testInterfaceMembers(); 18 testInterfaceMembers();
19 testClassVsInterfaceMembers(); 19 testClassVsInterfaceMembers();
20 testMixinMembers(); 20 testMixinMembers();
21 testMixinMembersWithoutImplements(); 21 testMixinMembersWithoutImplements();
22 } 22 }
23 23
24 MemberSignature getMember(InterfaceType cls, String name, 24 MemberSignature getMember(ResolutionInterfaceType cls, String name,
25 {bool isSetter: false, int checkType: CHECK_INTERFACE}) { 25 {bool isSetter: false, int checkType: CHECK_INTERFACE}) {
26 Name memberName = new Name(name, cls.element.library, isSetter: isSetter); 26 Name memberName = new Name(name, cls.element.library, isSetter: isSetter);
27 MemberSignature member = checkType == CHECK_CLASS 27 MemberSignature member = checkType == CHECK_CLASS
28 ? cls.element.lookupClassMember(memberName) 28 ? cls.element.lookupClassMember(memberName)
29 : cls.element.lookupInterfaceMember(memberName); 29 : cls.element.lookupInterfaceMember(memberName);
30 if (member != null) { 30 if (member != null) {
31 Expect.equals(memberName, member.name); 31 Expect.equals(memberName, member.name);
32 } 32 }
33 return member; 33 return member;
34 } 34 }
(...skipping 24 matching lines...) Expand all
59 * to be synthesized for the corresponding members found on the type is 59 * to be synthesized for the corresponding members found on the type is
60 * [synthesizedFrom] or or [erroneousFrom], respectively. 60 * [synthesizedFrom] or or [erroneousFrom], respectively.
61 * Otherwise, if [declarer] is `null`, the declarer is checked to be [cls], and 61 * Otherwise, if [declarer] is `null`, the declarer is checked to be [cls], and
62 * if [declarer] is not `null`, the declarer is checked to be [declarer]. 62 * if [declarer] is not `null`, the declarer is checked to be [declarer].
63 * If [type] is `null` it is checked that the type of the member is also the 63 * If [type] is `null` it is checked that the type of the member is also the
64 * member type, otherwise the type is checked to be [type]. 64 * member type, otherwise the type is checked to be [type].
65 * 65 *
66 * If [isClassMember] is `true` it is checked that the member is also a class 66 * If [isClassMember] is `true` it is checked that the member is also a class
67 * member. 67 * member.
68 */ 68 */
69 MemberSignature checkMember(InterfaceType cls, String name, 69 MemberSignature checkMember(ResolutionInterfaceType cls, String name,
70 {bool isStatic: false, 70 {bool isStatic: false,
71 bool isSetter: false, 71 bool isSetter: false,
72 bool isGetter: false, 72 bool isGetter: false,
73 InterfaceType declarer, 73 ResolutionInterfaceType declarer,
74 DartType type, 74 ResolutionDartType type,
75 FunctionType functionType, 75 ResolutionFunctionType functionType,
76 InterfaceType inheritedFrom, 76 ResolutionInterfaceType inheritedFrom,
77 List<InterfaceType> synthesizedFrom, 77 List<ResolutionInterfaceType> synthesizedFrom,
78 List<InterfaceType> erroneousFrom, 78 List<ResolutionInterfaceType> erroneousFrom,
79 int checkType: ALSO_CLASS_MEMBER}) { 79 int checkType: ALSO_CLASS_MEMBER}) {
80 String memberKind = checkType == CHECK_CLASS ? 'class' : 'interface'; 80 String memberKind = checkType == CHECK_CLASS ? 'class' : 'interface';
81 MemberSignature member = 81 MemberSignature member =
82 getMember(cls, name, isSetter: isSetter, checkType: checkType); 82 getMember(cls, name, isSetter: isSetter, checkType: checkType);
83 Expect.isNotNull(member, "No $memberKind member '$name' in $cls."); 83 Expect.isNotNull(member, "No $memberKind member '$name' in $cls.");
84 Name memberName = member.name; 84 Name memberName = member.name;
85 if (checkType == ALSO_CLASS_MEMBER) { 85 if (checkType == ALSO_CLASS_MEMBER) {
86 MemberSignature classMember = cls.element.lookupClassMember(memberName); 86 MemberSignature classMember = cls.element.lookupClassMember(memberName);
87 Expect.isNotNull(classMember, "No class member '$memberName' in $cls."); 87 Expect.isNotNull(classMember, "No class member '$memberName' in $cls.");
88 Expect.equals(member, classMember); 88 Expect.equals(member, classMember);
(...skipping 17 matching lines...) Expand all
106 "to interface members."); 106 "to interface members.");
107 if (synthesizedFrom != null) { 107 if (synthesizedFrom != null) {
108 Expect.isTrue( 108 Expect.isTrue(
109 member is SyntheticMember, "Member '$member' is not synthesized."); 109 member is SyntheticMember, "Member '$member' is not synthesized.");
110 } else { 110 } else {
111 Expect.isTrue( 111 Expect.isTrue(
112 member is ErroneousMember, "Member '$member' is not erroneous."); 112 member is ErroneousMember, "Member '$member' is not erroneous.");
113 } 113 }
114 Set<MemberSignature> members = new Set<MemberSignature>(); 114 Set<MemberSignature> members = new Set<MemberSignature>();
115 List from = synthesizedFrom != null ? synthesizedFrom : erroneousFrom; 115 List from = synthesizedFrom != null ? synthesizedFrom : erroneousFrom;
116 for (InterfaceType type in from) { 116 for (ResolutionInterfaceType type in from) {
117 DeclaredMember inheritedMember = 117 DeclaredMember inheritedMember =
118 type.element.lookupInterfaceMember(memberName); 118 type.element.lookupInterfaceMember(memberName);
119 Expect.isNotNull(inheritedMember); 119 Expect.isNotNull(inheritedMember);
120 members.add(inheritedMember.inheritFrom(type)); 120 members.add(inheritedMember.inheritFrom(type));
121 } 121 }
122 Expect.setEquals(members, member.declarations); 122 Expect.setEquals(members, member.declarations);
123 } else if (declarer != null) { 123 } else if (declarer != null) {
124 DeclaredMember declared = member; 124 DeclaredMember declared = member;
125 Expect.equals( 125 Expect.equals(
126 declarer, 126 declarer,
(...skipping 16 matching lines...) Expand all
143 Expect.equals(member.type, member.functionType, 143 Expect.equals(member.type, member.functionType,
144 "Unexpected type of $memberKind member '$member'."); 144 "Unexpected type of $memberKind member '$member'.");
145 } 145 }
146 Expect.equals(functionType, member.functionType, 146 Expect.equals(functionType, member.functionType,
147 "Unexpected member type of $memberKind member '$member'."); 147 "Unexpected member type of $memberKind member '$member'.");
148 } 148 }
149 } 149 }
150 return member; 150 return member;
151 } 151 }
152 152
153 void checkMemberCount(InterfaceType cls, int expectedCount, 153 void checkMemberCount(ResolutionInterfaceType cls, int expectedCount,
154 {bool interfaceMembers: true}) { 154 {bool interfaceMembers: true}) {
155 int count = 0; 155 int count = 0;
156 if (interfaceMembers) { 156 if (interfaceMembers) {
157 cls.element.forEachInterfaceMember((_) => count++); 157 cls.element.forEachInterfaceMember((_) => count++);
158 } else { 158 } else {
159 cls.element.forEachClassMember((_) => count++); 159 cls.element.forEachClassMember((_) => count++);
160 } 160 }
161 Expect.equals(expectedCount, count); 161 Expect.equals(expectedCount, count);
162 } 162 }
163 163
(...skipping 20 matching lines...) Expand all
184 void method(T t) {} 184 void method(T t) {}
185 static staticMethod() {} 185 static staticMethod() {}
186 toString([T t]) {} 186 toString([T t]) {}
187 } 187 }
188 class C<S> extends B<S> {} 188 class C<S> extends B<S> {}
189 class D extends C<int> {} 189 class D extends C<int> {}
190 class E extends D {} 190 class E extends D {}
191 """, 191 """,
192 useMockCompiler: false) 192 useMockCompiler: false)
193 .then((env) { 193 .then((env) {
194 InterfaceType bool_ = env['bool']; 194 ResolutionInterfaceType bool_ = env['bool'];
195 InterfaceType String_ = env['String']; 195 ResolutionInterfaceType String_ = env['String'];
196 InterfaceType num_ = env['num']; 196 ResolutionInterfaceType num_ = env['num'];
197 InterfaceType int_ = env['int']; 197 ResolutionInterfaceType int_ = env['int'];
198 DynamicType dynamic_ = env['dynamic']; 198 ResolutionDynamicType dynamic_ = env['dynamic'];
199 VoidType void_ = env['void']; 199 ResolutionVoidType void_ = env['void'];
200 InterfaceType Type_ = env['Type']; 200 ResolutionInterfaceType Type_ = env['Type'];
201 InterfaceType Invocation_ = env['Invocation']; 201 ResolutionInterfaceType Invocation_ = env['Invocation'];
202 202
203 InterfaceType Object_ = env['Object']; 203 ResolutionInterfaceType Object_ = env['Object'];
204 checkMemberCount(Object_, 5 /*declared*/, interfaceMembers: true); 204 checkMemberCount(Object_, 5 /*declared*/, interfaceMembers: true);
205 checkMemberCount(Object_, 5 /*declared*/, interfaceMembers: false); 205 checkMemberCount(Object_, 5 /*declared*/, interfaceMembers: false);
206 206
207 checkMember(Object_, '==', 207 checkMember(Object_, '==',
208 functionType: env.functionType(bool_, [dynamic_])); 208 functionType: env.functionType(bool_, [dynamic_]));
209 checkMember(Object_, 'hashCode', 209 checkMember(Object_, 'hashCode',
210 isGetter: true, 210 isGetter: true,
211 type: int_, 211 type: int_,
212 functionType: env.functionType(int_, [])); 212 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_, 217 type: Type_,
218 functionType: env.functionType(Type_, [])); 218 functionType: env.functionType(Type_, []));
219 checkMember(Object_, 'toString', 219 checkMember(Object_, 'toString',
220 functionType: env.functionType(String_, [])); 220 functionType: env.functionType(String_, []));
221 221
222 InterfaceType A = env['A']; 222 ResolutionInterfaceType A = env['A'];
223 MembersCreator.computeAllClassMembers(env.resolution, A.element); 223 MembersCreator.computeAllClassMembers(env.resolution, A.element);
224 224
225 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-static declared*/, 225 checkMemberCount(A, 5 /*inherited*/ + 9 /*non-static declared*/,
226 interfaceMembers: true); 226 interfaceMembers: true);
227 checkMemberCount( 227 checkMemberCount(
228 A, 228 A,
229 5 /*inherited*/ + 229 5 /*inherited*/ +
230 9 /*non-abstract declared*/ + 230 9 /*non-abstract declared*/ +
231 3 /* abstract declared */, 231 3 /* abstract declared */,
232 interfaceMembers: false); 232 interfaceMembers: false);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 checkMember(A, 'method', functionType: env.functionType(dynamic_, [])); 282 checkMember(A, 'method', functionType: env.functionType(dynamic_, []));
283 checkMember(A, 'abstractMethod', 283 checkMember(A, 'abstractMethod',
284 functionType: env.functionType(dynamic_, [])); 284 functionType: env.functionType(dynamic_, []));
285 checkMember(A, 'staticMethod', 285 checkMember(A, 'staticMethod',
286 checkType: CHECK_CLASS, 286 checkType: CHECK_CLASS,
287 isStatic: true, 287 isStatic: true,
288 functionType: env.functionType(dynamic_, [])); 288 functionType: env.functionType(dynamic_, []));
289 289
290 ClassElement B = env.getElement('B'); 290 ClassElement B = env.getElement('B');
291 MembersCreator.computeAllClassMembers(env.resolution, B); 291 MembersCreator.computeAllClassMembers(env.resolution, B);
292 InterfaceType B_this = B.thisType; 292 ResolutionInterfaceType B_this = B.thisType;
293 TypeVariableType B_T = B_this.typeArguments.first; 293 ResolutionTypeVariableType B_T = B_this.typeArguments.first;
294 checkMemberCount(B_this, 4 /*inherited*/ + 4 /*non-static declared*/, 294 checkMemberCount(B_this, 4 /*inherited*/ + 4 /*non-static declared*/,
295 interfaceMembers: true); 295 interfaceMembers: true);
296 checkMemberCount(B_this, 4 /*inherited*/ + 5 /*declared*/, 296 checkMemberCount(B_this, 4 /*inherited*/ + 5 /*declared*/,
297 interfaceMembers: false); 297 interfaceMembers: false);
298 298
299 checkMember(B_this, '==', inheritedFrom: Object_); 299 checkMember(B_this, '==', inheritedFrom: Object_);
300 checkMember(B_this, 'hashCode', inheritedFrom: Object_); 300 checkMember(B_this, 'hashCode', inheritedFrom: Object_);
301 checkMember(B_this, 'noSuchMethod', inheritedFrom: Object_); 301 checkMember(B_this, 'noSuchMethod', inheritedFrom: Object_);
302 checkMember(B_this, 'runtimeType', inheritedFrom: Object_); 302 checkMember(B_this, 'runtimeType', inheritedFrom: Object_);
303 303
304 checkMember(B_this, 'field', 304 checkMember(B_this, 'field',
305 isGetter: true, type: B_T, functionType: env.functionType(B_T, [])); 305 isGetter: true, type: B_T, functionType: env.functionType(B_T, []));
306 checkMember(B_this, 'field', 306 checkMember(B_this, 'field',
307 isSetter: true, 307 isSetter: true,
308 type: B_T, 308 type: B_T,
309 functionType: env.functionType(void_, [B_T])); 309 functionType: env.functionType(void_, [B_T]));
310 checkMember(B_this, 'method', 310 checkMember(B_this, 'method',
311 functionType: env.functionType(void_, [B_T])); 311 functionType: env.functionType(void_, [B_T]));
312 checkMember(B_this, 'staticMethod', 312 checkMember(B_this, 'staticMethod',
313 checkType: CHECK_CLASS, 313 checkType: CHECK_CLASS,
314 isStatic: true, 314 isStatic: true,
315 functionType: env.functionType(dynamic_, [])); 315 functionType: env.functionType(dynamic_, []));
316 checkMember(B_this, 'toString', 316 checkMember(B_this, 'toString',
317 functionType: 317 functionType:
318 env.functionType(dynamic_, [], optionalParameters: [B_T])); 318 env.functionType(dynamic_, [], optionalParameters: [B_T]));
319 319
320 ClassElement C = env.getElement('C'); 320 ClassElement C = env.getElement('C');
321 MembersCreator.computeAllClassMembers(env.resolution, C); 321 MembersCreator.computeAllClassMembers(env.resolution, C);
322 InterfaceType C_this = C.thisType; 322 ResolutionInterfaceType C_this = C.thisType;
323 TypeVariableType C_S = C_this.typeArguments.first; 323 ResolutionTypeVariableType C_S = C_this.typeArguments.first;
324 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: true); 324 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: true);
325 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: false); 325 checkMemberCount(C_this, 8 /*inherited*/, interfaceMembers: false);
326 InterfaceType B_S = instantiate(B, [C_S]); 326 ResolutionInterfaceType B_S = instantiate(B, [C_S]);
327 327
328 checkMember(C_this, '==', inheritedFrom: Object_); 328 checkMember(C_this, '==', inheritedFrom: Object_);
329 checkMember(C_this, 'hashCode', inheritedFrom: Object_); 329 checkMember(C_this, 'hashCode', inheritedFrom: Object_);
330 checkMember(C_this, 'noSuchMethod', inheritedFrom: Object_); 330 checkMember(C_this, 'noSuchMethod', inheritedFrom: Object_);
331 checkMember(C_this, 'runtimeType', inheritedFrom: Object_); 331 checkMember(C_this, 'runtimeType', inheritedFrom: Object_);
332 332
333 checkMember(C_this, 'field', 333 checkMember(C_this, 'field',
334 isGetter: true, 334 isGetter: true,
335 declarer: B_S, 335 declarer: B_S,
336 type: C_S, 336 type: C_S,
337 functionType: env.functionType(C_S, [])); 337 functionType: env.functionType(C_S, []));
338 checkMember(C_this, 'field', 338 checkMember(C_this, 'field',
339 isSetter: true, 339 isSetter: true,
340 declarer: B_S, 340 declarer: B_S,
341 type: C_S, 341 type: C_S,
342 functionType: env.functionType(void_, [C_S])); 342 functionType: env.functionType(void_, [C_S]));
343 checkMember(C_this, 'method', 343 checkMember(C_this, 'method',
344 declarer: B_S, functionType: env.functionType(void_, [C_S])); 344 declarer: B_S, functionType: env.functionType(void_, [C_S]));
345 checkMember(C_this, 'toString', 345 checkMember(C_this, 'toString',
346 declarer: B_S, 346 declarer: B_S,
347 functionType: 347 functionType:
348 env.functionType(dynamic_, [], optionalParameters: [C_S])); 348 env.functionType(dynamic_, [], optionalParameters: [C_S]));
349 349
350 InterfaceType D = env['D']; 350 ResolutionInterfaceType D = env['D'];
351 MembersCreator.computeAllClassMembers(env.resolution, D.element); 351 MembersCreator.computeAllClassMembers(env.resolution, D.element);
352 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: true); 352 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: true);
353 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: false); 353 checkMemberCount(D, 8 /*inherited*/, interfaceMembers: false);
354 InterfaceType B_int = instantiate(B, [int_]); 354 ResolutionInterfaceType B_int = instantiate(B, [int_]);
355 355
356 checkMember(D, '==', inheritedFrom: Object_); 356 checkMember(D, '==', inheritedFrom: Object_);
357 checkMember(D, 'hashCode', inheritedFrom: Object_); 357 checkMember(D, 'hashCode', inheritedFrom: Object_);
358 checkMember(D, 'noSuchMethod', inheritedFrom: Object_); 358 checkMember(D, 'noSuchMethod', inheritedFrom: Object_);
359 checkMember(D, 'runtimeType', inheritedFrom: Object_); 359 checkMember(D, 'runtimeType', inheritedFrom: Object_);
360 360
361 checkMember(D, 'field', 361 checkMember(D, 'field',
362 isGetter: true, 362 isGetter: true,
363 declarer: B_int, 363 declarer: B_int,
364 type: int_, 364 type: int_,
365 functionType: env.functionType(int_, [])); 365 functionType: env.functionType(int_, []));
366 checkMember(D, 'field', 366 checkMember(D, 'field',
367 isSetter: true, 367 isSetter: true,
368 declarer: B_int, 368 declarer: B_int,
369 type: int_, 369 type: int_,
370 functionType: env.functionType(void_, [int_])); 370 functionType: env.functionType(void_, [int_]));
371 checkMember(D, 'method', 371 checkMember(D, 'method',
372 declarer: B_int, functionType: env.functionType(void_, [int_])); 372 declarer: B_int, functionType: env.functionType(void_, [int_]));
373 checkMember(D, 'toString', 373 checkMember(D, 'toString',
374 declarer: B_int, 374 declarer: B_int,
375 functionType: 375 functionType:
376 env.functionType(dynamic_, [], optionalParameters: [int_])); 376 env.functionType(dynamic_, [], optionalParameters: [int_]));
377 377
378 InterfaceType E = env['E']; 378 ResolutionInterfaceType E = env['E'];
379 MembersCreator.computeAllClassMembers(env.resolution, E.element); 379 MembersCreator.computeAllClassMembers(env.resolution, E.element);
380 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: true); 380 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: true);
381 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: false); 381 checkMemberCount(E, 8 /*inherited*/, interfaceMembers: false);
382 382
383 checkMember(E, '==', inheritedFrom: Object_); 383 checkMember(E, '==', inheritedFrom: Object_);
384 checkMember(E, 'hashCode', inheritedFrom: Object_); 384 checkMember(E, 'hashCode', inheritedFrom: Object_);
385 checkMember(E, 'noSuchMethod', inheritedFrom: Object_); 385 checkMember(E, 'noSuchMethod', inheritedFrom: Object_);
386 checkMember(E, 'runtimeType', inheritedFrom: Object_); 386 checkMember(E, 'runtimeType', inheritedFrom: Object_);
387 387
388 checkMember(E, 'field', 388 checkMember(E, 'field',
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 set setter2(num _); 443 set setter2(num _);
444 void set setter3(int _); 444 void set setter3(int _);
445 getterAndMethod(); 445 getterAndMethod();
446 } 446 }
447 abstract class C { 447 abstract class C {
448 int method3(); 448 int method3();
449 num method4(); 449 num method4();
450 } 450 }
451 abstract class D implements A, B, C {} 451 abstract class D implements A, B, C {}
452 """).then((env) { 452 """).then((env) {
453 DynamicType dynamic_ = env['dynamic']; 453 ResolutionDynamicType dynamic_ = env['dynamic'];
454 VoidType void_ = env['void']; 454 ResolutionVoidType void_ = env['void'];
455 InterfaceType num_ = env['num']; 455 ResolutionInterfaceType num_ = env['num'];
456 InterfaceType int_ = env['int']; 456 ResolutionInterfaceType int_ = env['int'];
457 457
458 InterfaceType A = env['A']; 458 ResolutionInterfaceType A = env['A'];
459 InterfaceType B = env['B']; 459 ResolutionInterfaceType B = env['B'];
460 InterfaceType C = env['C']; 460 ResolutionInterfaceType C = env['C'];
461 InterfaceType D = env['D']; 461 ResolutionInterfaceType D = env['D'];
462 462
463 // Ensure that members have been computed on all classes. 463 // Ensure that members have been computed on all classes.
464 MembersCreator.computeAllClassMembers(env.resolution, D.element); 464 MembersCreator.computeAllClassMembers(env.resolution, D.element);
465 465
466 // A: num method1() 466 // A: num method1()
467 // B: int method1() 467 // B: int method1()
468 // D: dynamic method1() -- synthesized from A and B. 468 // D: dynamic method1() -- synthesized from A and B.
469 checkMember(D, 'method1', 469 checkMember(D, 'method1',
470 synthesizedFrom: [A, B], 470 synthesizedFrom: [A, B],
471 functionType: env.functionType(dynamic_, []), 471 functionType: env.functionType(dynamic_, []),
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 class A { 613 class A {
614 method1() {} 614 method1() {}
615 method2() {} 615 method2() {}
616 } 616 }
617 abstract class B { 617 abstract class B {
618 method1(); 618 method1();
619 method2(a); 619 method2(a);
620 } 620 }
621 abstract class C extends A implements B {} 621 abstract class C extends A implements B {}
622 """).then((env) { 622 """).then((env) {
623 DynamicType dynamic_ = env['dynamic']; 623 ResolutionDynamicType dynamic_ = env['dynamic'];
624 VoidType void_ = env['void']; 624 ResolutionVoidType void_ = env['void'];
625 InterfaceType num_ = env['num']; 625 ResolutionInterfaceType num_ = env['num'];
626 InterfaceType int_ = env['int']; 626 ResolutionInterfaceType int_ = env['int'];
627 627
628 InterfaceType A = env['A']; 628 ResolutionInterfaceType A = env['A'];
629 InterfaceType B = env['B']; 629 ResolutionInterfaceType B = env['B'];
630 InterfaceType C = env['C']; 630 ResolutionInterfaceType C = env['C'];
631 631
632 // Ensure that members have been computed on all classes. 632 // Ensure that members have been computed on all classes.
633 MembersCreator.computeAllClassMembers(env.resolution, C.element); 633 MembersCreator.computeAllClassMembers(env.resolution, C.element);
634 634
635 // A: method1() 635 // A: method1()
636 // B: method1() 636 // B: method1()
637 // C class: method1() -- inherited from A. 637 // C class: method1() -- inherited from A.
638 // C interface: dynamic method1() -- synthesized from A and B. 638 // C interface: dynamic method1() -- synthesized from A and B.
639 MemberSignature interfaceMember = checkMember(C, 'method1', 639 MemberSignature interfaceMember = checkMember(C, 'method1',
640 checkType: CHECK_INTERFACE, 640 checkType: CHECK_INTERFACE,
(...skipping 26 matching lines...) Expand all
667 method3(T a) {} 667 method3(T a) {}
668 method4(T a) {} 668 method4(T a) {}
669 } 669 }
670 abstract class B<S> { 670 abstract class B<S> {
671 method1(); 671 method1();
672 method2(a); 672 method2(a);
673 method3(S a) {} 673 method3(S a) {}
674 } 674 }
675 abstract class C<U, V> extends Object with A<U> implements B<V> {} 675 abstract class C<U, V> extends Object with A<U> implements B<V> {}
676 """).then((env) { 676 """).then((env) {
677 DynamicType dynamic_ = env['dynamic']; 677 ResolutionDynamicType dynamic_ = env['dynamic'];
678 VoidType void_ = env['void']; 678 ResolutionVoidType void_ = env['void'];
679 InterfaceType num_ = env['num']; 679 ResolutionInterfaceType num_ = env['num'];
680 InterfaceType int_ = env['int']; 680 ResolutionInterfaceType int_ = env['int'];
681 681
682 ClassElement A = env.getElement('A'); 682 ClassElement A = env.getElement('A');
683 ClassElement B = env.getElement('B'); 683 ClassElement B = env.getElement('B');
684 ClassElement C = env.getElement('C'); 684 ClassElement C = env.getElement('C');
685 InterfaceType C_this = C.thisType; 685 ResolutionInterfaceType C_this = C.thisType;
686 TypeVariableType C_U = C_this.typeArguments[0]; 686 ResolutionTypeVariableType C_U = C_this.typeArguments[0];
687 TypeVariableType C_V = C_this.typeArguments[1]; 687 ResolutionTypeVariableType C_V = C_this.typeArguments[1];
688 InterfaceType A_U = instantiate(A, [C_U]); 688 ResolutionInterfaceType A_U = instantiate(A, [C_U]);
689 InterfaceType B_V = instantiate(B, [C_V]); 689 ResolutionInterfaceType B_V = instantiate(B, [C_V]);
690 690
691 // Ensure that members have been computed on all classes. 691 // Ensure that members have been computed on all classes.
692 MembersCreator.computeAllClassMembers(env.resolution, C); 692 MembersCreator.computeAllClassMembers(env.resolution, C);
693 693
694 // A: method1() 694 // A: method1()
695 // B: method1() 695 // B: method1()
696 // C class: method1() -- inherited from A. 696 // C class: method1() -- inherited from A.
697 // C interface: dynamic method1() -- synthesized from A and B. 697 // C interface: dynamic method1() -- synthesized from A and B.
698 MemberSignature interfaceMember = checkMember(C_this, 'method1', 698 MemberSignature interfaceMember = checkMember(C_this, 'method1',
699 checkType: CHECK_INTERFACE, 699 checkType: CHECK_INTERFACE,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 739
740 void testMixinMembersWithoutImplements() { 740 void testMixinMembersWithoutImplements() {
741 asyncTest(() => TypeEnvironment.create(r""" 741 asyncTest(() => TypeEnvironment.create(r"""
742 abstract class A { 742 abstract class A {
743 m(); 743 m();
744 } 744 }
745 abstract class B implements A { 745 abstract class B implements A {
746 } 746 }
747 abstract class C extends Object with B {} 747 abstract class C extends Object with B {}
748 """).then((env) { 748 """).then((env) {
749 DynamicType dynamic_ = env['dynamic']; 749 ResolutionDynamicType dynamic_ = env['dynamic'];
750 VoidType void_ = env['void']; 750 ResolutionVoidType void_ = env['void'];
751 InterfaceType num_ = env['num']; 751 ResolutionInterfaceType num_ = env['num'];
752 InterfaceType int_ = env['int']; 752 ResolutionInterfaceType int_ = env['int'];
753 753
754 InterfaceType A = env['A']; 754 ResolutionInterfaceType A = env['A'];
755 InterfaceType B = env['B']; 755 ResolutionInterfaceType B = env['B'];
756 InterfaceType C = env['C']; 756 ResolutionInterfaceType C = env['C'];
757 757
758 // Ensure that members have been computed on all classes. 758 // Ensure that members have been computed on all classes.
759 MembersCreator.computeAllClassMembers(env.resolution, C.element); 759 MembersCreator.computeAllClassMembers(env.resolution, C.element);
760 760
761 checkMember(C, 'm', 761 checkMember(C, 'm',
762 checkType: NO_CLASS_MEMBER, 762 checkType: NO_CLASS_MEMBER,
763 inheritedFrom: A, 763 inheritedFrom: A,
764 functionType: env.functionType(dynamic_, [])); 764 functionType: env.functionType(dynamic_, []));
765 })); 765 }));
766 } 766 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/lookup_member_test.dart ('k') | tests/compiler/dart2js/mixin_typevariable_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698