| Index: pkg/analyzer/lib/src/generated/static_type_analyzer.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
|
| index ce0016c586a00465e31f1085c06f825d7d10cc41..3f8c0ef4759c1180902847a4a78f0f40afe8c8bc 100644
|
| --- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
|
| +++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
|
| @@ -888,7 +888,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| } else if (staticElement is MethodElement) {
|
| staticType = staticElement.type;
|
| } else if (staticElement is PropertyAccessorElement) {
|
| - staticType = _getTypeOfProperty(staticElement, node.prefix.staticType);
|
| + staticType = _getTypeOfProperty(staticElement);
|
| propagatedType =
|
| _getPropertyPropagatedType(staticElement, propagatedType);
|
| } else if (staticElement is ExecutableElement) {
|
| @@ -921,8 +921,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| } else if (propagatedElement is MethodElement) {
|
| propagatedType = propagatedElement.type;
|
| } else if (propagatedElement is PropertyAccessorElement) {
|
| - propagatedType =
|
| - _getTypeOfProperty(propagatedElement, node.prefix.staticType);
|
| + propagatedType = _getTypeOfProperty(propagatedElement);
|
| propagatedType =
|
| _getPropertyPropagatedType(propagatedElement, propagatedType);
|
| } else if (propagatedElement is ExecutableElement) {
|
| @@ -1024,9 +1023,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| if (staticElement is MethodElement) {
|
| staticType = staticElement.type;
|
| } else if (staticElement is PropertyAccessorElement) {
|
| - Expression realTarget = node.realTarget;
|
| - staticType = _getTypeOfProperty(staticElement,
|
| - realTarget != null ? _getStaticType(realTarget) : null);
|
| + staticType = _getTypeOfProperty(staticElement);
|
| } else {
|
| // TODO(brianwilkerson) Report this internal error.
|
| }
|
| @@ -1040,8 +1037,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| propagatedType = propagatedElement.type;
|
| } else if (propagatedElement is PropertyAccessorElement) {
|
| Expression realTarget = node.realTarget;
|
| - propagatedType = _getTypeOfProperty(
|
| - propagatedElement, realTarget != null ? realTarget.bestType : null);
|
| + propagatedType = _getTypeOfProperty(propagatedElement);
|
| } else {
|
| // TODO(brianwilkerson) Report this internal error.
|
| }
|
| @@ -1117,7 +1113,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| } else if (element is MethodElement) {
|
| staticType = element.type;
|
| } else if (element is PropertyAccessorElement) {
|
| - staticType = _getTypeOfProperty(element, null);
|
| + staticType = _getTypeOfProperty(element);
|
| } else if (element is ExecutableElement) {
|
| staticType = element.type;
|
| } else if (element is TypeParameterElement) {
|
| @@ -1628,14 +1624,9 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| * Return the type that should be recorded for a node that resolved to the given accessor.
|
| *
|
| * @param accessor the accessor that the node resolved to
|
| - * @param context if the accessor element has context [by being the RHS of a
|
| - * [PrefixedIdentifier] or [PropertyAccess]], and the return type of the
|
| - * accessor is a parameter type, then the type of the LHS can be used to get more
|
| - * specific type information
|
| * @return the type that should be recorded for a node that resolved to the given accessor
|
| */
|
| - DartType _getTypeOfProperty(
|
| - PropertyAccessorElement accessor, DartType context) {
|
| + DartType _getTypeOfProperty(PropertyAccessorElement accessor) {
|
| FunctionType functionType = accessor.type;
|
| if (functionType == null) {
|
| // TODO(brianwilkerson) Report this internal error. This happens when we
|
| @@ -1658,29 +1649,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| }
|
| return _dynamicType;
|
| }
|
| - DartType returnType = functionType.returnType;
|
| - if (returnType is TypeParameterType && context is InterfaceType) {
|
| - // if the return type is a TypeParameter, we try to use the context [that
|
| - // the function is being called on] to get a more accurate returnType type
|
| - InterfaceType interfaceTypeContext = context;
|
| - // Type[] argumentTypes = interfaceTypeContext.getTypeArguments();
|
| - List<TypeParameterElement> typeParameterElements =
|
| - interfaceTypeContext.element != null
|
| - ? interfaceTypeContext.element.typeParameters
|
| - : null;
|
| - if (typeParameterElements != null) {
|
| - for (int i = 0; i < typeParameterElements.length; i++) {
|
| - TypeParameterElement typeParameterElement = typeParameterElements[i];
|
| - if (returnType.name == typeParameterElement.name) {
|
| - return interfaceTypeContext.typeArguments[i];
|
| - }
|
| - }
|
| - // TODO(jwren) troubleshoot why call to substitute doesn't work
|
| -// Type[] parameterTypes = TypeParameterTypeImpl.getTypes(parameterElements);
|
| -// return returnType.substitute(argumentTypes, parameterTypes);
|
| - }
|
| - }
|
| - return returnType;
|
| + return functionType.returnType;
|
| }
|
|
|
| /**
|
| @@ -1699,8 +1668,8 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
|
| LocalVariableElementImpl element = loopVariable.element;
|
| DartType exprType = expr.staticType;
|
| DartType targetType = (loop.awaitKeyword == null)
|
| - ? _typeProvider.iterableType
|
| - : _typeProvider.streamType;
|
| + ? _typeProvider.iterableType
|
| + : _typeProvider.streamType;
|
| DartType iteratedType = _findIteratedType(exprType, targetType);
|
| if (element != null && iteratedType != null) {
|
| element.type = iteratedType;
|
|
|