Index: pkg/compiler/lib/src/resolution/class_members.dart |
diff --git a/pkg/compiler/lib/src/resolution/class_members.dart b/pkg/compiler/lib/src/resolution/class_members.dart |
index 6a0674953331fb9cab0c1c9c511617f6695356b3..6cbbf70d45816eb103e181e3ba843ac089af9307 100644 |
--- a/pkg/compiler/lib/src/resolution/class_members.dart |
+++ b/pkg/compiler/lib/src/resolution/class_members.dart |
@@ -25,7 +25,7 @@ part 'member_impl.dart'; |
abstract class MembersCreator { |
final ClassElement cls; |
- final Compiler compiler; |
+ final Resolution resolution; |
final Iterable<String> computedMemberNames; |
final Map<Name, Member> classMembers; |
@@ -34,17 +34,12 @@ abstract class MembersCreator { |
new Map<dynamic, Set<MessageKind>>(); |
MembersCreator( |
- Compiler this.compiler, |
- ClassElement this.cls, |
- Iterable<String> this.computedMemberNames, |
- Map<Name, Member> this.classMembers) { |
+ this.resolution, this.cls, this.computedMemberNames, this.classMembers) { |
assert(invariant(cls, cls.isDeclaration, |
message: "Members may only be computed on declarations.")); |
} |
- DiagnosticReporter get reporter => compiler.reporter; |
- |
- Resolution get resolution => compiler.resolution; |
+ DiagnosticReporter get reporter => resolution.reporter; |
void reportMessage(var marker, MessageKind kind, report()) { |
Set<MessageKind> messages = |
@@ -118,12 +113,12 @@ abstract class MembersCreator { |
} |
if (names != null) { |
- _computeClassMember(compiler, superclass, name, names); |
+ _computeClassMember(resolution, superclass, name, names); |
for (Name memberName in names) { |
inheritClassMember(superclass.lookupClassMember(memberName)); |
} |
} else { |
- computeAllClassMembers(compiler, superclass); |
+ computeAllClassMembers(resolution, superclass); |
superclass.forEachClassMember(inheritClassMember); |
} |
} |
@@ -155,13 +150,13 @@ abstract class MembersCreator { |
if (names != null) { |
_computeClassMember( |
- compiler, mixinApplication.mixin, nameText, names); |
+ resolution, mixinApplication.mixin, nameText, names); |
for (Name memberName in names) { |
inheritMixinMember( |
mixinApplication.mixin.lookupClassMember(memberName)); |
} |
} else { |
- computeAllClassMembers(compiler, mixinApplication.mixin); |
+ computeAllClassMembers(resolution, mixinApplication.mixin); |
mixinApplication.mixin.forEachClassMember(inheritMixinMember); |
} |
} |
@@ -314,12 +309,12 @@ abstract class MembersCreator { |
void checkImplementsFunctionWithCall() { |
assert(!cls.isAbstract); |
- ClassElement functionClass = compiler.coreClasses.functionClass; |
+ ClassElement functionClass = resolution.coreClasses.functionClass; |
if (cls.asInstanceOf(functionClass) == null) return; |
if (cls.lookupMember(Identifiers.call) != null) return; |
// TODO(johnniwinther): Make separate methods for backend exceptions. |
// Avoid warnings on backend implementation classes for closures. |
- if (compiler.backend.isBackendLibrary(cls.library)) return; |
+ if (resolution.target.isTargetSpecificLibrary(cls.library)) return; |
reportMessage(functionClass, MessageKind.UNIMPLEMENTED_METHOD, () { |
reporter.reportWarningMessage(cls, MessageKind.UNIMPLEMENTED_METHOD_ONE, { |
@@ -368,7 +363,8 @@ abstract class MembersCreator { |
for (Member inherited in superMember.declarations) { |
if (cls == inherited.declarer.element) { |
// An error should already have been reported. |
- assert(invariant(declared.element, compiler.compilationFailed)); |
+ assert(invariant( |
+ declared.element, resolution.reporter.hasReportedError)); |
continue; |
} |
@@ -389,9 +385,10 @@ abstract class MembersCreator { |
// superMember.declarations. Investigate why. |
} else if (cls == inherited.declarer.element) { |
// An error should already have been reported. |
- assert(invariant(declared.element, compiler.compilationFailed, |
- message: "Member $inherited inherited from its " |
- "declaring class: ${cls}.")); |
+ assert( |
+ invariant(declared.element, resolution.reporter.hasReportedError, |
+ message: "Member $inherited inherited from its " |
+ "declaring class: ${cls}.")); |
continue; |
} |
@@ -427,7 +424,7 @@ abstract class MembersCreator { |
MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT); |
} else { |
DartType inheritedType = inherited.functionType; |
- if (!compiler.types.isSubtype(declaredType, inheritedType)) { |
+ if (!resolution.types.isSubtype(declaredType, inheritedType)) { |
void reportWarning( |
var marker, MessageKind warningKind, MessageKind infoKind) { |
reportMessage(marker, MessageKind.INVALID_OVERRIDE_METHOD, () { |
@@ -511,11 +508,11 @@ abstract class MembersCreator { |
/// Compute all class and interface names by the [name] in [cls]. |
static void computeClassMembersByName( |
- Compiler compiler, ClassMemberMixin cls, String name) { |
+ Resolution resolution, ClassMemberMixin cls, String name) { |
if (cls.isMemberComputed(name)) return; |
LibraryElement library = cls.library; |
_computeClassMember( |
- compiler, |
+ resolution, |
cls, |
name, |
new Setlet<Name>() |
@@ -523,23 +520,24 @@ abstract class MembersCreator { |
..add(new Name(name, library, isSetter: true))); |
} |
- static void _computeClassMember(Compiler compiler, ClassMemberMixin cls, |
+ static void _computeClassMember(Resolution resolution, ClassMemberMixin cls, |
String name, Setlet<Name> names) { |
- cls.computeClassMember(compiler, name, names); |
+ cls.computeClassMember(resolution, name, names); |
} |
/// Compute all class and interface names in [cls]. |
- static void computeAllClassMembers(Compiler compiler, ClassMemberMixin cls) { |
- cls.computeAllClassMembers(compiler); |
+ static void computeAllClassMembers( |
+ Resolution resolution, ClassMemberMixin cls) { |
+ cls.computeAllClassMembers(resolution); |
} |
} |
/// Class member creator for classes where the interface members are known to |
/// be a subset of the class members. |
class ClassMembersCreator extends MembersCreator { |
- ClassMembersCreator(Compiler compiler, ClassElement cls, |
+ ClassMembersCreator(Resolution resolution, ClassElement cls, |
Iterable<String> computedMemberNames, Map<Name, Member> classMembers) |
- : super(compiler, cls, computedMemberNames, classMembers); |
+ : super(resolution, cls, computedMemberNames, classMembers); |
Map<Name, Member> computeMembers(String name, Setlet<Name> names) { |
computeSuperMembers(name, names); |
@@ -565,12 +563,12 @@ class InterfaceMembersCreator extends MembersCreator { |
final Map<Name, MemberSignature> interfaceMembers; |
InterfaceMembersCreator( |
- Compiler compiler, |
+ Resolution resolution, |
ClassElement cls, |
Iterable<String> computedMemberNames, |
Map<Name, Member> classMembers, |
Map<Name, MemberSignature> this.interfaceMembers) |
- : super(compiler, cls, computedMemberNames, classMembers); |
+ : super(resolution, cls, computedMemberNames, classMembers); |
Map<Name, Member> computeMembers(String name, Setlet<Name> names) { |
Map<Name, Setlet<Member>> inheritedInterfaceMembers = |
@@ -634,13 +632,14 @@ class InterfaceMembersCreator extends MembersCreator { |
InterfaceType superinterface = link.head; |
if (names != null) { |
MembersCreator._computeClassMember( |
- compiler, superinterface.element, name, names); |
+ resolution, superinterface.element, name, names); |
for (Name memberName in names) { |
inheritInterfaceMember(superinterface, |
superinterface.element.lookupInterfaceMember(memberName)); |
} |
} else { |
- MembersCreator.computeAllClassMembers(compiler, superinterface.element); |
+ MembersCreator.computeAllClassMembers( |
+ resolution, superinterface.element); |
inheritInterfaceMembers(superinterface); |
} |
} |
@@ -697,7 +696,7 @@ class InterfaceMembersCreator extends MembersCreator { |
if (someAreGetters) break outer; |
} |
for (MemberSignature other in inheritedMembers) { |
- if (!compiler.types |
+ if (!resolution.types |
.isSubtype(inherited.functionType, other.functionType)) { |
continue outer; |
} |
@@ -833,9 +832,9 @@ abstract class ClassMemberMixin implements ClassElement { |
/// Creates the necessary maps and [MembersCreator] for compute members of |
/// this class. |
- MembersCreator _prepareCreator(Compiler compiler) { |
+ MembersCreator _prepareCreator(Resolution resolution) { |
if (classMembers == null) { |
- ensureResolved(compiler.resolution); |
+ ensureResolved(resolution); |
classMembers = new Map<Name, Member>(); |
if (interfaceMembersAreClassMembers) { |
@@ -853,8 +852,8 @@ abstract class ClassMemberMixin implements ClassElement { |
} |
return interfaceMembersAreClassMembers |
? new ClassMembersCreator( |
- compiler, this, computedMemberNames, classMembers) |
- : new InterfaceMembersCreator(compiler, this, computedMemberNames, |
+ resolution, this, computedMemberNames, classMembers) |
+ : new InterfaceMembersCreator(resolution, this, computedMemberNames, |
classMembers, interfaceMembers); |
} |
@@ -863,14 +862,15 @@ abstract class ClassMemberMixin implements ClassElement { |
/// Compute the members by the name [name] for this class. [names] collects |
/// the set of possible variations of [name], including getter, setter and |
/// and private names. |
- void computeClassMember(Compiler compiler, String name, Setlet<Name> names) { |
+ void computeClassMember( |
+ Resolution resolution, String name, Setlet<Name> names) { |
if (isMemberComputed(name)) return; |
if (Name.isPrivateName(name)) { |
names |
..add(new Name(name, library)) |
..add(new Name(name, library, isSetter: true)); |
} |
- MembersCreator creator = _prepareCreator(compiler); |
+ MembersCreator creator = _prepareCreator(resolution); |
creator.computeMembersByName(name, names); |
if (computedMemberNames == null) { |
computedMemberNames = _EMPTY_MEMBERS_NAMES; |
@@ -886,9 +886,9 @@ abstract class ClassMemberMixin implements ClassElement { |
} |
} |
- void computeAllClassMembers(Compiler compiler) { |
+ void computeAllClassMembers(Resolution resolution) { |
if (areAllMembersComputed()) return; |
- MembersCreator creator = _prepareCreator(compiler); |
+ MembersCreator creator = _prepareCreator(resolution); |
creator.computeAllMembers(); |
computedMemberNames = null; |
assert(invariant(this, areAllMembersComputed())); |