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

Side by Side Diff: pkg/compiler/lib/src/resolution/class_members.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 dart2js.resolution.compute_members; 5 library dart2js.resolution.compute_members;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/names.dart' show Identifiers, Names; 8 import '../common/names.dart' show Identifiers, Names;
9 import '../common/resolution.dart' show Resolution; 9 import '../common/resolution.dart' show Resolution;
10 import '../elements/resolution_types.dart'; 10 import '../elements/resolution_types.dart';
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 /// If [name] and [names] are not null, the computation is restricted to 92 /// If [name] and [names] are not null, the computation is restricted to
93 /// members with these names. 93 /// members with these names.
94 void computeSuperMembers(String name, Setlet<Name> names); 94 void computeSuperMembers(String name, Setlet<Name> names);
95 95
96 /// Compute the members of the super class of [cls] and store them in 96 /// Compute the members of the super class of [cls] and store them in
97 /// [classMembers]. 97 /// [classMembers].
98 /// 98 ///
99 /// If [name] and [names] are not null, the computation is restricted to 99 /// If [name] and [names] are not null, the computation is restricted to
100 /// members with these names. 100 /// members with these names.
101 void computeSuperClassMembers(String name, Setlet<Name> names) { 101 void computeSuperClassMembers(String name, Setlet<Name> names) {
102 InterfaceType supertype = cls.supertype; 102 ResolutionInterfaceType supertype = cls.supertype;
103 if (supertype == null) return; 103 if (supertype == null) return;
104 ClassElement superclass = supertype.element; 104 ClassElement superclass = supertype.element;
105 105
106 // Inherit class and interface members from superclass. 106 // Inherit class and interface members from superclass.
107 void inheritClassMember(DeclaredMember member) { 107 void inheritClassMember(DeclaredMember member) {
108 if (shouldSkipMember(member)) return; 108 if (shouldSkipMember(member)) return;
109 if (!member.isStatic) { 109 if (!member.isStatic) {
110 DeclaredMember inherited = member.inheritFrom(supertype); 110 DeclaredMember inherited = member.inheritFrom(supertype);
111 classMembers[member.name] = inherited; 111 classMembers[member.name] = inherited;
112 } 112 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 inheritMixinMember( 155 inheritMixinMember(
156 mixinApplication.mixin.lookupClassMember(memberName)); 156 mixinApplication.mixin.lookupClassMember(memberName));
157 } 157 }
158 } else { 158 } else {
159 computeAllClassMembers(resolution, mixinApplication.mixin); 159 computeAllClassMembers(resolution, mixinApplication.mixin);
160 mixinApplication.mixin.forEachClassMember(inheritMixinMember); 160 mixinApplication.mixin.forEachClassMember(inheritMixinMember);
161 } 161 }
162 } 162 }
163 } else { 163 } else {
164 LibraryElement library = cls.library; 164 LibraryElement library = cls.library;
165 InterfaceType thisType = cls.thisType; 165 ResolutionInterfaceType thisType = cls.thisType;
166 166
167 void createMember(MemberElement element) { 167 void createMember(MemberElement element) {
168 if (element.isConstructor) return; 168 if (element.isConstructor) return;
169 String elementName = element.name; 169 String elementName = element.name;
170 if (shouldSkipName(elementName)) return; 170 if (shouldSkipName(elementName)) return;
171 if (nameText != null && elementName != nameText) return; 171 if (nameText != null && elementName != nameText) return;
172 172
173 void addDeclaredMember( 173 void addDeclaredMember(Name name, ResolutionDartType type,
174 Name name, DartType type, FunctionType functionType) { 174 ResolutionFunctionType functionType) {
175 DeclaredMember inherited = classMembers[name]; 175 DeclaredMember inherited = classMembers[name];
176 DeclaredMember declared; 176 DeclaredMember declared;
177 if (element.isAbstract) { 177 if (element.isAbstract) {
178 declared = new DeclaredAbstractMember( 178 declared = new DeclaredAbstractMember(
179 name, element, thisType, type, functionType, inherited); 179 name, element, thisType, type, functionType, inherited);
180 } else { 180 } else {
181 declared = 181 declared =
182 new DeclaredMember(name, element, thisType, type, functionType); 182 new DeclaredMember(name, element, thisType, type, functionType);
183 } 183 }
184 declaredMembers[name] = declared; 184 declaredMembers[name] = declared;
185 classMembers[name] = declared; 185 classMembers[name] = declared;
186 checkValidOverride(declared, inherited); 186 checkValidOverride(declared, inherited);
187 } 187 }
188 188
189 Name name = new Name(element.name, library); 189 Name name = new Name(element.name, library);
190 if (element.isField) { 190 if (element.isField) {
191 DartType type = element.computeType(resolution); 191 ResolutionDartType type = element.computeType(resolution);
192 addDeclaredMember(name, type, new FunctionType.synthesized(type)); 192 addDeclaredMember(
193 name, type, new ResolutionFunctionType.synthesized(type));
193 if (!element.isConst && !element.isFinal) { 194 if (!element.isConst && !element.isFinal) {
194 addDeclaredMember( 195 addDeclaredMember(
195 name.setter, 196 name.setter,
196 type, 197 type,
197 new FunctionType.synthesized( 198 new ResolutionFunctionType.synthesized(
198 const VoidType(), <DartType>[type])); 199 const ResolutionVoidType(), <ResolutionDartType>[type]));
199 } 200 }
200 } else if (element.isGetter) { 201 } else if (element.isGetter) {
201 FunctionType functionType = element.computeType(resolution); 202 ResolutionFunctionType functionType = element.computeType(resolution);
202 DartType type = functionType.returnType; 203 ResolutionDartType type = functionType.returnType;
203 addDeclaredMember(name, type, functionType); 204 addDeclaredMember(name, type, functionType);
204 } else if (element.isSetter) { 205 } else if (element.isSetter) {
205 FunctionType functionType = element.computeType(resolution); 206 ResolutionFunctionType functionType = element.computeType(resolution);
206 DartType type; 207 ResolutionDartType type;
207 if (!functionType.parameterTypes.isEmpty) { 208 if (!functionType.parameterTypes.isEmpty) {
208 type = functionType.parameterTypes.first; 209 type = functionType.parameterTypes.first;
209 } else { 210 } else {
210 type = const DynamicType(); 211 type = const ResolutionDynamicType();
211 } 212 }
212 name = name.setter; 213 name = name.setter;
213 addDeclaredMember(name, type, functionType); 214 addDeclaredMember(name, type, functionType);
214 } else { 215 } else {
215 assert(invariant(element, element.isFunction)); 216 assert(invariant(element, element.isFunction));
216 FunctionType type = element.computeType(resolution); 217 ResolutionFunctionType type = element.computeType(resolution);
217 addDeclaredMember(name, type, type); 218 addDeclaredMember(name, type, type);
218 } 219 }
219 } 220 }
220 221
221 cls.forEachLocalMember(createMember); 222 cls.forEachLocalMember(createMember);
222 if (cls.isPatched) { 223 if (cls.isPatched) {
223 cls.implementation.forEachLocalMember((Element element) { 224 cls.implementation.forEachLocalMember((Element element) {
224 if (element.isDeclaration) { 225 if (element.isDeclaration) {
225 createMember(element); 226 createMember(element);
226 } 227 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 reportMessage(inherited.element, MessageKind.NO_STATIC_OVERRIDE, () { 374 reportMessage(inherited.element, MessageKind.NO_STATIC_OVERRIDE, () {
374 reportErrorWithContext( 375 reportErrorWithContext(
375 declared.element, 376 declared.element,
376 MessageKind.NO_STATIC_OVERRIDE, 377 MessageKind.NO_STATIC_OVERRIDE,
377 inherited.element, 378 inherited.element,
378 MessageKind.NO_STATIC_OVERRIDE_CONT); 379 MessageKind.NO_STATIC_OVERRIDE_CONT);
379 }); 380 });
380 } 381 }
381 } 382 }
382 383
383 DartType declaredType = declared.functionType; 384 ResolutionDartType declaredType = declared.functionType;
384 for (Member inherited in superMember.declarations) { 385 for (Member inherited in superMember.declarations) {
385 if (inherited.element == declared.element) { 386 if (inherited.element == declared.element) {
386 // TODO(ahe): For some reason, "call" elements are repeated in 387 // TODO(ahe): For some reason, "call" elements are repeated in
387 // superMember.declarations. Investigate why. 388 // superMember.declarations. Investigate why.
388 } else if (cls == inherited.declarer.element) { 389 } else if (cls == inherited.declarer.element) {
389 // An error should already have been reported. 390 // An error should already have been reported.
390 assert( 391 assert(
391 invariant(declared.element, resolution.reporter.hasReportedError, 392 invariant(declared.element, resolution.reporter.hasReportedError,
392 message: "Member $inherited inherited from its " 393 message: "Member $inherited inherited from its "
393 "declaring class: ${cls}.")); 394 "declaring class: ${cls}."));
(...skipping 24 matching lines...) Expand all
418 } else if (declared.isMethod && inherited.isDeclaredByField) { 419 } else if (declared.isMethod && inherited.isDeclaredByField) {
419 reportError(MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD, 420 reportError(MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD,
420 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT); 421 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT);
421 } else if (declared.isGetter && inherited.isMethod) { 422 } else if (declared.isGetter && inherited.isMethod) {
422 reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, 423 reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
423 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT); 424 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT);
424 } else if (declared.isMethod && inherited.isGetter) { 425 } else if (declared.isMethod && inherited.isGetter) {
425 reportError(MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, 426 reportError(MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD,
426 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT); 427 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT);
427 } else { 428 } else {
428 DartType inheritedType = inherited.functionType; 429 ResolutionDartType inheritedType = inherited.functionType;
429 if (!resolution.types.isSubtype(declaredType, inheritedType)) { 430 if (!resolution.types.isSubtype(declaredType, inheritedType)) {
430 void reportWarning( 431 void reportWarning(
431 var marker, MessageKind warningKind, MessageKind infoKind) { 432 var marker, MessageKind warningKind, MessageKind infoKind) {
432 reportMessage(marker, MessageKind.INVALID_OVERRIDE_METHOD, () { 433 reportMessage(marker, MessageKind.INVALID_OVERRIDE_METHOD, () {
433 reporter.reportWarning( 434 reporter.reportWarning(
434 reporter.createMessage(declared.element, warningKind, { 435 reporter.createMessage(declared.element, warningKind, {
435 'declaredType': declared.type, 436 'declaredType': declared.type,
436 'name': declared.name.text, 437 'name': declared.name.text,
437 'class': cls.thisType, 438 'class': cls.thisType,
438 'inheritedType': inherited.type, 439 'inheritedType': inherited.type,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 /// If [name] and [names] are not null, the computation is restricted to 589 /// If [name] and [names] are not null, the computation is restricted to
589 /// members with these names. 590 /// members with these names.
590 Map<Name, Setlet<Member>> computeSuperMembers( 591 Map<Name, Setlet<Member>> computeSuperMembers(
591 String name, Setlet<Name> names) { 592 String name, Setlet<Name> names) {
592 computeSuperClassMembers(name, names); 593 computeSuperClassMembers(name, names);
593 return computeSuperInterfaceMembers(name, names); 594 return computeSuperInterfaceMembers(name, names);
594 } 595 }
595 596
596 Map<Name, Setlet<Member>> computeSuperInterfaceMembers( 597 Map<Name, Setlet<Member>> computeSuperInterfaceMembers(
597 String name, Setlet<Name> names) { 598 String name, Setlet<Name> names) {
598 InterfaceType supertype = cls.supertype; 599 ResolutionInterfaceType supertype = cls.supertype;
599 assert(invariant(cls, supertype != null, 600 assert(invariant(cls, supertype != null,
600 message: "Interface members computed for $cls.")); 601 message: "Interface members computed for $cls."));
601 ClassElement superclass = supertype.element; 602 ClassElement superclass = supertype.element;
602 603
603 Map<Name, Setlet<Member>> inheritedInterfaceMembers = 604 Map<Name, Setlet<Member>> inheritedInterfaceMembers =
604 new Map<Name, Setlet<Member>>(); 605 new Map<Name, Setlet<Member>>();
605 606
606 void inheritInterfaceMember( 607 void inheritInterfaceMember(
607 InterfaceType supertype, MemberSignature member) { 608 ResolutionInterfaceType supertype, MemberSignature member) {
608 if (shouldSkipMember(member)) return; 609 if (shouldSkipMember(member)) return;
609 Setlet<Member> members = inheritedInterfaceMembers.putIfAbsent( 610 Setlet<Member> members = inheritedInterfaceMembers.putIfAbsent(
610 member.name, () => new Setlet<Member>()); 611 member.name, () => new Setlet<Member>());
611 for (DeclaredMember declaredMember in member.declarations) { 612 for (DeclaredMember declaredMember in member.declarations) {
612 members.add(declaredMember.inheritFrom(supertype)); 613 members.add(declaredMember.inheritFrom(supertype));
613 } 614 }
614 } 615 }
615 616
616 void inheritInterfaceMembers(InterfaceType supertype) { 617 void inheritInterfaceMembers(ResolutionInterfaceType supertype) {
617 supertype.element.forEachInterfaceMember((MemberSignature member) { 618 supertype.element.forEachInterfaceMember((MemberSignature member) {
618 inheritInterfaceMember(supertype, member); 619 inheritInterfaceMember(supertype, member);
619 }); 620 });
620 } 621 }
621 622
622 if (names != null) { 623 if (names != null) {
623 for (Name memberName in names) { 624 for (Name memberName in names) {
624 inheritInterfaceMember( 625 inheritInterfaceMember(
625 supertype, superclass.lookupInterfaceMember(memberName)); 626 supertype, superclass.lookupInterfaceMember(memberName));
626 } 627 }
627 } else { 628 } else {
628 inheritInterfaceMembers(supertype); 629 inheritInterfaceMembers(supertype);
629 } 630 }
630 631
631 // Inherit interface members from superinterfaces. 632 // Inherit interface members from superinterfaces.
632 for (Link<DartType> link = cls.interfaces; 633 for (Link<ResolutionDartType> link = cls.interfaces;
633 !link.isEmpty; 634 !link.isEmpty;
634 link = link.tail) { 635 link = link.tail) {
635 InterfaceType superinterface = link.head; 636 ResolutionInterfaceType superinterface = link.head;
636 if (names != null) { 637 if (names != null) {
637 MembersCreator._computeClassMember( 638 MembersCreator._computeClassMember(
638 resolution, superinterface.element, name, names); 639 resolution, superinterface.element, name, names);
639 for (Name memberName in names) { 640 for (Name memberName in names) {
640 inheritInterfaceMember(superinterface, 641 inheritInterfaceMember(superinterface,
641 superinterface.element.lookupInterfaceMember(memberName)); 642 superinterface.element.lookupInterfaceMember(memberName));
642 } 643 }
643 } else { 644 } else {
644 MembersCreator.computeAllClassMembers( 645 MembersCreator.computeAllClassMembers(
645 resolution, superinterface.element); 646 resolution, superinterface.element);
(...skipping 15 matching lines...) Expand all
661 checkInterfaceMember(name, interfaceMember, classMember); 662 checkInterfaceMember(name, interfaceMember, classMember);
662 }); 663 });
663 } 664 }
664 665
665 /// Compute the interface members of [cls] given the set of inherited 666 /// Compute the interface members of [cls] given the set of inherited
666 /// interface members [inheritedInterfaceMembers] and declared members 667 /// interface members [inheritedInterfaceMembers] and declared members
667 /// [declaredMembers]. The computed members are stored in [interfaceMembers]. 668 /// [declaredMembers]. The computed members are stored in [interfaceMembers].
668 void computeInterfaceMembers( 669 void computeInterfaceMembers(
669 Map<Name, Setlet<Member>> inheritedInterfaceMembers, 670 Map<Name, Setlet<Member>> inheritedInterfaceMembers,
670 Map<Name, Member> declaredMembers) { 671 Map<Name, Member> declaredMembers) {
671 InterfaceType thisType = cls.thisType; 672 ResolutionInterfaceType thisType = cls.thisType;
672 // Compute the interface members by overriding the inherited members with 673 // Compute the interface members by overriding the inherited members with
673 // a declared member or by computing a single, possibly synthesized, 674 // a declared member or by computing a single, possibly synthesized,
674 // inherited member. 675 // inherited member.
675 inheritedInterfaceMembers 676 inheritedInterfaceMembers
676 .forEach((Name name, Setlet<Member> inheritedMembers) { 677 .forEach((Name name, Setlet<Member> inheritedMembers) {
677 Member declared = declaredMembers[name]; 678 Member declared = declaredMembers[name];
678 if (declared != null) { 679 if (declared != null) {
679 // Check that [declaredMember] is a valid override 680 // Check that [declaredMember] is a valid override
680 for (Member inherited in inheritedMembers) { 681 for (Member inherited in inheritedMembers) {
681 checkValidOverride(declared, inherited); 682 checkValidOverride(declared, inherited);
682 } 683 }
683 if (!declared.isStatic) { 684 if (!declared.isStatic) {
684 interfaceMembers[name] = declared; 685 interfaceMembers[name] = declared;
685 } 686 }
686 } else if (inheritedMembers.length == 1) { 687 } else if (inheritedMembers.length == 1) {
687 interfaceMembers[name] = inheritedMembers.single; 688 interfaceMembers[name] = inheritedMembers.single;
688 } else { 689 } else {
689 bool someAreGetters = false; 690 bool someAreGetters = false;
690 bool allAreGetters = true; 691 bool allAreGetters = true;
691 Map<DartType, Setlet<Member>> subtypesOfAllInherited = 692 Map<ResolutionDartType, Setlet<Member>> subtypesOfAllInherited =
692 new Map<DartType, Setlet<Member>>(); 693 new Map<ResolutionDartType, Setlet<Member>>();
693 outer: 694 outer:
694 for (Member inherited in inheritedMembers) { 695 for (Member inherited in inheritedMembers) {
695 if (inherited.isGetter) { 696 if (inherited.isGetter) {
696 someAreGetters = true; 697 someAreGetters = true;
697 if (!allAreGetters) break outer; 698 if (!allAreGetters) break outer;
698 } else { 699 } else {
699 allAreGetters = false; 700 allAreGetters = false;
700 if (someAreGetters) break outer; 701 if (someAreGetters) break outer;
701 } 702 }
702 for (MemberSignature other in inheritedMembers) { 703 for (MemberSignature other in inheritedMembers) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 int minRequiredParameters; 767 int minRequiredParameters;
767 int maxPositionalParameters; 768 int maxPositionalParameters;
768 Set<String> names = new Set<String>(); 769 Set<String> names = new Set<String>();
769 for (MemberSignature member in inheritedMembers) { 770 for (MemberSignature member in inheritedMembers) {
770 int requiredParameters = 0; 771 int requiredParameters = 0;
771 int optionalParameters = 0; 772 int optionalParameters = 0;
772 if (member.isSetter) { 773 if (member.isSetter) {
773 requiredParameters = 1; 774 requiredParameters = 1;
774 } 775 }
775 if (member.type.isFunctionType) { 776 if (member.type.isFunctionType) {
776 FunctionType type = member.type; 777 ResolutionFunctionType type = member.type;
777 type.namedParameters.forEach((String name) => names.add(name)); 778 type.namedParameters.forEach((String name) => names.add(name));
778 requiredParameters = type.parameterTypes.length; 779 requiredParameters = type.parameterTypes.length;
779 optionalParameters = type.optionalParameterTypes.length; 780 optionalParameters = type.optionalParameterTypes.length;
780 } 781 }
781 int positionalParameters = requiredParameters + optionalParameters; 782 int positionalParameters = requiredParameters + optionalParameters;
782 if (minRequiredParameters == null || 783 if (minRequiredParameters == null ||
783 minRequiredParameters > requiredParameters) { 784 minRequiredParameters > requiredParameters) {
784 minRequiredParameters = requiredParameters; 785 minRequiredParameters = requiredParameters;
785 } 786 }
786 if (maxPositionalParameters == null || 787 if (maxPositionalParameters == null ||
787 maxPositionalParameters < positionalParameters) { 788 maxPositionalParameters < positionalParameters) {
788 maxPositionalParameters = positionalParameters; 789 maxPositionalParameters = positionalParameters;
789 } 790 }
790 } 791 }
791 int optionalParameters = maxPositionalParameters - minRequiredParameters; 792 int optionalParameters = maxPositionalParameters - minRequiredParameters;
792 // TODO(johnniwinther): Support function types with both optional 793 // TODO(johnniwinther): Support function types with both optional
793 // and named parameters? 794 // and named parameters?
794 if (optionalParameters == 0 || names.isEmpty) { 795 if (optionalParameters == 0 || names.isEmpty) {
795 DartType dynamic = const DynamicType(); 796 ResolutionDartType dynamic = const ResolutionDynamicType();
796 List<DartType> requiredParameterTypes = 797 List<ResolutionDartType> requiredParameterTypes =
797 new List.filled(minRequiredParameters, dynamic); 798 new List.filled(minRequiredParameters, dynamic);
798 List<DartType> optionalParameterTypes = 799 List<ResolutionDartType> optionalParameterTypes =
799 new List.filled(optionalParameters, dynamic); 800 new List.filled(optionalParameters, dynamic);
800 List<String> namedParameters = names.toList() 801 List<String> namedParameters = names.toList()
801 ..sort((a, b) => a.compareTo(b)); 802 ..sort((a, b) => a.compareTo(b));
802 List<DartType> namedParameterTypes = 803 List<ResolutionDartType> namedParameterTypes =
803 new List.filled(namedParameters.length, dynamic); 804 new List.filled(namedParameters.length, dynamic);
804 FunctionType memberType = new FunctionType.synthesized( 805 ResolutionFunctionType memberType =
805 const DynamicType(), 806 new ResolutionFunctionType.synthesized(
806 requiredParameterTypes, 807 const ResolutionDynamicType(),
807 optionalParameterTypes, 808 requiredParameterTypes,
808 namedParameters, 809 optionalParameterTypes,
809 namedParameterTypes); 810 namedParameters,
810 DartType type = memberType; 811 namedParameterTypes);
812 ResolutionDartType type = memberType;
811 if (inheritedMembers.first.isGetter || inheritedMembers.first.isSetter) { 813 if (inheritedMembers.first.isGetter || inheritedMembers.first.isSetter) {
812 type = const DynamicType(); 814 type = const ResolutionDynamicType();
813 } 815 }
814 interfaceMembers[name] = 816 interfaceMembers[name] =
815 new SyntheticMember(inheritedMembers, type, memberType); 817 new SyntheticMember(inheritedMembers, type, memberType);
816 } 818 }
817 } 819 }
818 } 820 }
819 821
820 abstract class ClassMemberMixin implements ClassElement { 822 abstract class ClassMemberMixin implements ClassElement {
821 /// When [classMembers] and [interfaceMembers] have not been fully computed 823 /// When [classMembers] and [interfaceMembers] have not been fully computed
822 /// [computedMembersNames] holds the names for which members have already been 824 /// [computedMembersNames] holds the names for which members have already been
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 message: "Members have not been fully computed for $this.")); 958 message: "Members have not been fully computed for $this."));
957 if (interfaceMembersAreClassMembers) { 959 if (interfaceMembersAreClassMembers) {
958 classMembers.forEach((_, member) { 960 classMembers.forEach((_, member) {
959 if (!member.isStatic) f(member); 961 if (!member.isStatic) f(member);
960 }); 962 });
961 } else { 963 } else {
962 interfaceMembers.forEach((_, member) => f(member)); 964 interfaceMembers.forEach((_, member) => f(member));
963 } 965 }
964 } 966 }
965 } 967 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/class_hierarchy.dart ('k') | pkg/compiler/lib/src/resolution/constructors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698