Chromium Code Reviews| Index: compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java |
| diff --git a/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java b/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java |
| index 52c63ce6a4698f42a7fb2294e8601b0584f341b4..9997711c666c507592717658ea2b6d7db56a59c7 100644 |
| --- a/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java |
| +++ b/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java |
| @@ -106,23 +106,37 @@ class InterfaceTypeImplementation extends AbstractType implements InterfaceType |
| @Override |
| public Member lookupMember(String name) { |
| - Element element = getElement().lookupLocalElement(name); |
| - if (element != null) { |
| - return new MemberImplementation(this, element); |
| + Member member = lookupMember0(this, name); |
| + if (member != null) { |
| + return member; |
| } |
| InterfaceType supertype = getSupertype(); |
| if (supertype != null) { |
| - Member member = supertype.lookupMember(name); |
| + member = supertype.lookupMember(name); |
| if (member != null) { |
| return member; |
| } |
| } |
| for (InterfaceType intrface : getInterfaces()) { |
| - Member member = intrface.lookupMember(name); |
| + member = intrface.lookupMember(name); |
| if (member != null) { |
| return member; |
| } |
| } |
| + for (InterfaceType intrface : getMixins()) { |
|
Brian Wilkerson
2013/01/09 16:17:41
nit: "intrface" --> "mixin"
|
| + member = lookupMember0(intrface, name); |
| + if (member != null) { |
| + return member; |
| + } |
| + } |
| + return null; |
| + } |
| + |
| + private static Member lookupMember0(InterfaceType type, String name) { |
| + Element element = type.getElement().lookupLocalElement(name); |
| + if (element != null) { |
| + return new MemberImplementation(type, element); |
| + } |
| return null; |
| } |
| @@ -136,11 +150,20 @@ class InterfaceTypeImplementation extends AbstractType implements InterfaceType |
| } |
| private List<InterfaceType> getInterfaces() { |
| - List<InterfaceType> interfaces = getElement().getInterfaces(); |
| - List<InterfaceType> result = new ArrayList<InterfaceType>(interfaces.size()); |
| + List<InterfaceType> result = new ArrayList<InterfaceType>(); |
| + List<Type> typeArguments = getArguments(); |
| + List<Type> typeParameters = getElement().getTypeParameters(); |
| + for (InterfaceType type : getElement().getInterfaces()) { |
| + result.add(type.subst(typeArguments, typeParameters)); |
| + } |
| + return result; |
| + } |
| + |
| + private List<InterfaceType> getMixins() { |
| + List<InterfaceType> result = new ArrayList<InterfaceType>(); |
| List<Type> typeArguments = getArguments(); |
| List<Type> typeParameters = getElement().getTypeParameters(); |
| - for (InterfaceType type : interfaces) { |
| + for (InterfaceType type : getElement().getMixins()) { |
| result.add(type.subst(typeArguments, typeParameters)); |
| } |
| return result; |