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

Unified Diff: compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java

Issue 9315061: Specify the types for Element.classes, Element.elements and Node.nodes (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixed dynamic type error issue with VM. Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
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);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698