| Index: pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
 | 
| diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
 | 
| index fd26e7c09bf14c67c2e337357cdfabe56370ce6a..a8c96243ab39f06993583cd96dddbd9a289e779b 100644
 | 
| --- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
 | 
| +++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
 | 
| @@ -69,19 +69,43 @@ class TypeGraphInferrer implements TypesInferrer {
 | 
|      inferrer.runOverAllElements();
 | 
|    }
 | 
|  
 | 
| -  TypeMask getReturnTypeOfElement(Element element) {
 | 
| +  @deprecated
 | 
| +  TypeMask getReturnTypeOfLocalFunction(LocalFunctionElement element) {
 | 
| +    if (compiler.disableTypeInference) return _dynamicType;
 | 
| +    return inferrer.types.getInferredTypeOfLocalFunction(element).type;
 | 
| +  }
 | 
| +
 | 
| +  TypeMask getReturnTypeOfMember(MemberElement element) {
 | 
|      if (compiler.disableTypeInference) return _dynamicType;
 | 
|      // Currently, closure calls return dynamic.
 | 
| -    if (element is! FunctionElement) return _dynamicType;
 | 
| -    return inferrer.types.getInferredTypeOf(element).type;
 | 
| +    if (element is! MethodElement) return _dynamicType;
 | 
| +    return inferrer.types.getInferredTypeOfMember(element).type;
 | 
| +  }
 | 
| +
 | 
| +  TypeMask getReturnTypeOfParameter(ParameterElement element) {
 | 
| +    if (compiler.disableTypeInference) return _dynamicType;
 | 
| +    return _dynamicType;
 | 
| +  }
 | 
| +
 | 
| +  @deprecated
 | 
| +  TypeMask getTypeOfLocalFunction(LocalFunctionElement element) {
 | 
| +    if (compiler.disableTypeInference) return _dynamicType;
 | 
| +    return commonMasks.functionType;
 | 
| +  }
 | 
| +
 | 
| +  TypeMask getTypeOfMember(MemberElement element) {
 | 
| +    if (compiler.disableTypeInference) return _dynamicType;
 | 
| +    // The inferrer stores the return type for a function, so we have to
 | 
| +    // be careful to not return it here.
 | 
| +    if (element is MethodElement) return commonMasks.functionType;
 | 
| +    return inferrer.types.getInferredTypeOfMember(element).type;
 | 
|    }
 | 
|  
 | 
| -  TypeMask getTypeOfElement(Element element) {
 | 
| +  TypeMask getTypeOfParameter(ParameterElement element) {
 | 
|      if (compiler.disableTypeInference) return _dynamicType;
 | 
|      // The inferrer stores the return type for a function, so we have to
 | 
|      // be careful to not return it here.
 | 
| -    if (element is FunctionElement) return commonMasks.functionType;
 | 
| -    return inferrer.types.getInferredTypeOf(element).type;
 | 
| +    return inferrer.types.getInferredTypeOfParameter(element).type;
 | 
|    }
 | 
|  
 | 
|    TypeMask getTypeForNewList(Element owner, ast.Node node) {
 | 
| @@ -118,14 +142,13 @@ class TypeGraphInferrer implements TypesInferrer {
 | 
|      Iterable<MemberEntity> elements =
 | 
|          inferrer.closedWorld.locateMembers(selector, mask);
 | 
|      for (MemberElement element in elements) {
 | 
| -      TypeMask type =
 | 
| -          inferrer.typeOfElementWithSelector(element, selector).type;
 | 
| +      TypeMask type = inferrer.typeOfMemberWithSelector(element, selector).type;
 | 
|        result = result.union(type, inferrer.closedWorld);
 | 
|      }
 | 
|      return result;
 | 
|    }
 | 
|  
 | 
| -  Iterable<Element> getCallersOf(Element element) {
 | 
| +  Iterable<Element> getCallersOf(MemberElement element) {
 | 
|      if (compiler.disableTypeInference) {
 | 
|        throw new UnsupportedError(
 | 
|            "Cannot query the type inferrer when type inference is disabled.");
 | 
| @@ -133,9 +156,25 @@ class TypeGraphInferrer implements TypesInferrer {
 | 
|      return inferrer.getCallersOf(element);
 | 
|    }
 | 
|  
 | 
| -  bool isCalledOnce(Element element) {
 | 
| +  @deprecated
 | 
| +  bool isLocalFunctionCalledOnce(LocalFunctionElement element) {
 | 
| +    if (compiler.disableTypeInference) return false;
 | 
| +    MemberTypeInformation info =
 | 
| +        inferrer.types.getInferredTypeOfLocalFunction(element);
 | 
| +    return info.isCalledOnce();
 | 
| +  }
 | 
| +
 | 
| +  bool isMemberCalledOnce(MemberElement element) {
 | 
| +    if (compiler.disableTypeInference) return false;
 | 
| +    MemberTypeInformation info =
 | 
| +        inferrer.types.getInferredTypeOfMember(element);
 | 
| +    return info.isCalledOnce();
 | 
| +  }
 | 
| +
 | 
| +  bool isParameterCalledOnce(ParameterElement element) {
 | 
|      if (compiler.disableTypeInference) return false;
 | 
| -    MemberTypeInformation info = inferrer.types.getInferredTypeOf(element);
 | 
| +    MemberTypeInformation info =
 | 
| +        inferrer.types.getInferredTypeOfParameter(element);
 | 
|      return info.isCalledOnce();
 | 
|    }
 | 
|  
 | 
| 
 |