| Index: pkg/analyzer/lib/src/generated/element_resolver.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| index 8c981ffa59dd0976af2648f4de478319fd789015..9cef47fcb6e5dc4d339595eef52e2a357f79bffd 100644
|
| --- a/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| +++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| @@ -635,6 +635,46 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| }
|
| }
|
| }
|
| + //
|
| + // Check for a generic method & apply type arguments if any were passed.
|
| + //
|
| + if (staticElement is MethodElement || staticElement is FunctionElement) {
|
| + FunctionType type = (staticElement as ExecutableElement).type;
|
| + List<TypeParameterElement> parameters = type.boundTypeParameters;
|
| +
|
| + NodeList<TypeName> arguments = node.typeArguments?.arguments;
|
| + if (arguments != null && arguments.length != parameters.length) {
|
| + // Wrong number of type arguments. Ignore them
|
| + arguments = null;
|
| + _resolver.reportErrorForNode(
|
| + StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS,
|
| + methodName,
|
| + [type, parameters.length, arguments.length]);
|
| + }
|
| + if (parameters.isNotEmpty) {
|
| + List<DartType> typeArgs;
|
| + if (arguments == null) {
|
| + typeArgs = new List<DartType>.filled(
|
| + parameters.length, DynamicTypeImpl.instance);
|
| + } else {
|
| + typeArgs = new List<DartType>.from(arguments.map((n) => n.type));
|
| + }
|
| + type = type.instantiate(typeArgs);
|
| +
|
| + if (staticElement is MethodMember) {
|
| + MethodMember member = staticElement;
|
| + staticElement =
|
| + new MethodMember(member.baseElement, member.definingType, type);
|
| + } else if (staticElement is MethodElement) {
|
| + ClassElement clazz = staticElement.enclosingElement;
|
| + staticElement = new MethodMember(staticElement, clazz.type, type);
|
| + } else {
|
| + staticElement =
|
| + new FunctionMember(staticElement as FunctionElement, type);
|
| + }
|
| + }
|
| + }
|
| +
|
| staticElement = _convertSetterToGetter(staticElement);
|
| propagatedElement = _convertSetterToGetter(propagatedElement);
|
| //
|
|
|