| 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 bcaebe79c6d7a2dcab34607b09a2593f8690f32e..33dbefd1e9ef0fef695d4097f7f4d91b867492be 100644
|
| --- a/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
|
| +++ b/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
|
| @@ -6,6 +6,10 @@ package com.google.dart.compiler.type;
|
|
|
| import com.google.dart.compiler.resolver.ClassElement;
|
| import com.google.dart.compiler.resolver.Element;
|
| +import com.google.dart.compiler.resolver.ElementKind;
|
| +import com.google.dart.compiler.resolver.Elements;
|
| +import com.google.dart.compiler.resolver.FieldElement;
|
| +import com.google.dart.compiler.resolver.MethodElement;
|
|
|
| import java.util.ArrayList;
|
| import java.util.Arrays;
|
| @@ -44,7 +48,7 @@ class InterfaceTypeImplementation extends AbstractType implements InterfaceType
|
| return sb.toString();
|
| }
|
| }
|
| -
|
| +
|
| @Override
|
| public boolean hasDynamicTypeArgs() {
|
| for (Type t : getArguments()) {
|
| @@ -163,5 +167,48 @@ class InterfaceTypeImplementation extends AbstractType implements InterfaceType
|
| List<Type> typeParameters = getHolder().getElement().getTypeParameters();
|
| return getElement().getType().subst(typeArguments, typeParameters);
|
| }
|
| +
|
| + @Override
|
| + public Type getSetterType() {
|
| + Element element = getElement();
|
| + if (!ElementKind.of(element).equals(ElementKind.FIELD)) {
|
| + return getType();
|
| + }
|
| + FieldElement field = (FieldElement) element;
|
| + MethodElement setter = field.getSetter();
|
| + if (setter == null) {
|
| + setter = Elements.lookupFieldElementSetter(holder.getElement(), member.getName());
|
| + if (setter == null) {
|
| + return null;
|
| + }
|
| + }
|
| + if (setter.getParameters().size() == 0) {
|
| + return null;
|
| + }
|
| + Type setterType = setter.getParameters().get(0).getType();
|
| + List<Type> typeArguments = getHolder().getArguments();
|
| + List<Type> typeParameters = getHolder().getElement().getTypeParameters();
|
| + return setterType.subst(typeArguments, typeParameters);
|
| + }
|
| +
|
| + @Override
|
| + public Type getGetterType() {
|
| + Element element = getElement();
|
| + if (!ElementKind.of(element).equals(ElementKind.FIELD)) {
|
| + return getType();
|
| + }
|
| + FieldElement field = (FieldElement) element;
|
| + MethodElement getter = field.getGetter();
|
| + if (getter == null) {
|
| + getter = Elements.lookupFieldElementGetter(holder.getElement(), member.getName());
|
| + if (getter == null) {
|
| + return null;
|
| + }
|
| + }
|
| + Type getterType = getter.getReturnType();
|
| + List<Type> typeArguments = getHolder().getArguments();
|
| + List<Type> typeParameters = getHolder().getElement().getTypeParameters();
|
| + return getterType.subst(typeArguments, typeParameters);
|
| + }
|
| }
|
| }
|
|
|